diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ApplicationInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ApplicationInfo.java index 7a26b6f26..af8a4438f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ApplicationInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ApplicationInfo.java @@ -26,7 +26,7 @@ import java.util.Properties; public class ApplicationInfo { public static final String APPLICATION_NAME = "JPEXS Free Flash Decompiler"; - + public static final String CLI_APPLICATION_NAME = "@|blue JPEXS|@ @|green Free|@ @|red Flash Decompiler|@"; public static final String SHORT_APPLICATION_NAME = "FFDec"; @@ -50,7 +50,7 @@ public class ApplicationInfo { public static boolean nightly = false; public static String cliApplicationVerName; - + public static String applicationVerName; public static String shortApplicationVerName; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java index a32a41cff..061dcb49e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java @@ -74,7 +74,7 @@ public class DecompilerPool { writer.endFunction(); writer.finishHilights(); - + HighlightedText result = new HighlightedText(writer); SWF swf = src.getSwf(); if (swf != null) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index f3be52131..dc6b3adb6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -324,14 +324,13 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { @Internal private volatile Map characters; - + @Internal private volatile Map charactersWithImported; - @Internal private volatile Map characterToId; - + @Internal private volatile Map externalImages2; @@ -424,10 +423,10 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { @Internal private Map exportNameToCharacter = new HashMap<>(); - + @Internal private Map importedNameToCharacter = new HashMap<>(); - + @Internal private AbcIndexing abcIndex; @@ -435,17 +434,16 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { private int numAbcIndexDependencies = 0; private volatile Map> uninitializedAs2ClassTraits = null; - + @Internal private ExporterInfo exporterInfo = null; - + @Internal public String debuggerPackage = null; - + private Map importedCharacterSourceSwfs = new HashMap<>(); private Map importedCharacterIds = new HashMap<>(); - - + private static AbcIndexing playerGlobalAbcIndex; private static AbcIndexing airGlobalAbcIndex; @@ -489,7 +487,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { } return false; } - + public static AbcIndexing getPlayerGlobalAbcIndex() { return playerGlobalAbcIndex; } @@ -588,7 +586,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { public void updateCharacters() { characters = null; charactersWithImported = null; - characterToId = null; + characterToId = null; characterIdTags = null; externalImages2 = null; } @@ -666,9 +664,9 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { di.getChildInfos().clear(); } - - public Map getCharacters(boolean withImported) { - if (characters == null) { + + public Map getCharacters(boolean withImported) { + if (characters == null) { synchronized (this) { if (characters == null) { if (destroyed) { @@ -684,9 +682,9 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { int exportedCharacterId = importedCharacterIds.get(importedCharacterId); SWF importedSwf = importedCharacterSourceSwfs.get(importedCharacterId); charsWithImported.put(importedCharacterId, importedSwf.getCharacter(exportedCharacterId)); - charIdtags.put(importedCharacterId, importedSwf.getCharacterIdTags(exportedCharacterId)); + charIdtags.put(importedCharacterId, importedSwf.getCharacterIdTags(exportedCharacterId)); //FIXME? eimages - + charsWithImported.get(importedCharacterId).setImported(true, true); for (CharacterIdTag chi : charIdtags.get(importedCharacterId)) { if (chi instanceof Tag) { @@ -698,15 +696,15 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { for (int id : charsWithImported.keySet()) { charToId.put(charsWithImported.get(id), id); } - for (int id : charIdtags.keySet()) { + for (int id : charIdtags.keySet()) { for (CharacterIdTag ch : charIdtags.get(id)) { charToId.put(ch, id); } } - + characters = Collections.unmodifiableMap(chars); charactersWithImported = Collections.unmodifiableMap(charsWithImported); - characterToId = Collections.unmodifiableMap(charToId); + characterToId = Collections.unmodifiableMap(charToId); characterIdTags = Collections.unmodifiableMap(charIdtags); externalImages2 = Collections.unmodifiableMap(eimages); } @@ -735,7 +733,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { return characterIdTags.get(characterId); } - + public CharacterIdTag getCharacterIdTag(int characterId, int tagId) { List characterIdTags = getCharacterIdTags(characterId); if (characterIdTags != null) { @@ -873,12 +871,12 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { int charId = classToCharacter.get(className); return getCharacter(charId); } - + public CharacterTag getCharacterByExportName(String exportName) { int charId; if (importedNameToCharacter.containsKey(exportName)) { charId = importedNameToCharacter.get(exportName); - } else if (exportNameToCharacter.containsKey(exportName)){ + } else if (exportNameToCharacter.containsKey(exportName)) { charId = exportNameToCharacter.get(exportName); } else { return null; @@ -936,8 +934,10 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { } /** - * This gets real character id of a character tag on this SWF. - * Normal .getCharacterId method od the CharacterTag does not work for imported characters + * This gets real character id of a character tag on this SWF. Normal + * .getCharacterId method od the CharacterTag does not work for imported + * characters + * * @param tag * @return Character id or -1 if not found */ @@ -950,7 +950,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { } return characterToId.get(tag); } - + public FontTag getFont(int fontId) { CharacterTag characterTag = getCharacters(true).get(fontId); if (characterTag instanceof FontTag) { @@ -1286,7 +1286,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { private byte[] saveToByteArray(boolean includeImported) throws IOException { return saveToByteArray(gfx, includeImported); } - + private byte[] saveToByteArray(boolean gfx, boolean includeImported) throws IOException { byte[] data; try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); SWFOutputStream sos = new SWFOutputStream(baos, version, charset)) { @@ -1313,7 +1313,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { } return data; - } + } @Override public boolean isModified() { @@ -1580,25 +1580,25 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { SWF iSwf = resolver.resolveUrl(importTag.getUrl()); if (iSwf != null) { - + Map importedIdToNameMap = importTag.getAssets(); - + Map exportedNameToIdsMap = new HashMap<>(); - + for (Tag t2 : iSwf.tags) { if (t2 instanceof ExportAssetsTag) { ExportAssetsTag sc = (ExportAssetsTag) t2; for (int i = 0; i < sc.names.size(); i++) { - exportedNameToIdsMap.put(sc.names.get(i), sc.tags.get(i)); - } - } + exportedNameToIdsMap.put(sc.names.get(i), sc.tags.get(i)); + } + } } - + for (int importedId : importedIdToNameMap.keySet()) { String importedName = importedIdToNameMap.get(importedId); if (exportedNameToIdsMap.containsKey(importedName)) { int exportedId = exportedNameToIdsMap.get(importedName); - importedCharacterSourceSwfs.put(importedId, iSwf); + importedCharacterSourceSwfs.put(importedId, iSwf); importedCharacterIds.put(importedId, exportedId); importedNameToCharacter.put(importedName, importedId); } @@ -1823,7 +1823,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { } } } - + /** * Compress SWF file * @@ -1938,12 +1938,12 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { return false; } return true; - } + } /** * Encrypts Harman AIR encryption */ - public static boolean encrypt(InputStream is, OutputStream os) throws IOException { + public static boolean encrypt(InputStream is, OutputStream os) throws IOException { byte[] hdr = new byte[8]; // SWFheader: signature, version and fileSize @@ -1952,7 +1952,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { } decodeHeader(hdr); - + byte[] encrypted; try { encrypted = HarmanSwfEncrypt.encrypt(is, hdr); @@ -1962,9 +1962,9 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { os.write(encrypted); return true; } - + /** - * Decrypts Harman AIR encryption + * Decrypts Harman AIR encryption */ public static boolean decrypt(InputStream is, OutputStream os) throws IOException { byte[] hdr = new byte[8]; @@ -2020,7 +2020,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { header.gfx = headerData[1] == 'F' && headerData[2] == 'X'; return header; } - + public static boolean decompress(InputStream fis, OutputStream fos) { try { decompress(fis, fos, false); @@ -2051,13 +2051,13 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { case 'c': case 'z': case 'f': - header.encrypted = true; + header.encrypted = true; byte[] decrypted; try { decrypted = HarmanSwfEncrypt.decrypt(is, hdr); } catch (IOException | NoSuchPaddingException | NoSuchAlgorithmException | InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException ex) { throw new SwfOpenException(AppResources.translate("error.swf.decryptionProblem")); - } + } is = new ByteArrayInputStream(decrypted); break; @@ -2107,9 +2107,9 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { // does not contain size of header (signature + version + filesize = 8 bytes) if (header.gfx && is.available() >= fileSize) { final InputStream fis = is; - + //pass to outputstream all we read - InputStream copyIs = new InputStream() { + InputStream copyIs = new InputStream() { @Override public int read() throws IOException { int value = fis.read(); @@ -2125,7 +2125,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { int tagIDTagLength = sis.readUI16("tagIDTagLength"); long tagLength = (tagIDTagLength & 0x003F); if (tagLength == 0x3f) { - sis.readSI32("tagLength"); + sis.readSI32("tagLength"); } int tagID = (tagIDTagLength) >> 6; if (tagID == ExporterInfo.ID) { @@ -2304,12 +2304,12 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { if (realItem instanceof ASMSource && (exportAll || exportNode)) { String pathNoExportFilenames2 = pathNoExportFilenames; String pathExportFilenames2 = pathExportFilenames; - String path = exportFileNames ? pathExportFilenames : pathNoExportFilenames; - + String path = exportFileNames ? pathExportFilenames : pathNoExportFilenames; + int ppos = 1; while (asmsToExport.containsKey(path)) { ppos++; - pathNoExportFilenames2 = pathNoExportFilenames + "_" + ppos; + pathNoExportFilenames2 = pathNoExportFilenames + "_" + ppos; pathExportFilenames2 = pathExportFilenames + "[" + ppos + "]"; path = exportFileNames ? pathExportFilenames2 : pathNoExportFilenames2; } @@ -2321,24 +2321,24 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { if (treeItem instanceof TagScript) { TagScript tagScript = (TagScript) treeItem; for (TreeItem subItem : tagScript.getFrames()) { - getASMs(exportFileNames, subItem, nodesToExport, exportAll, asmsToExport, - pathExportFilenames + File.separator + getASMPath(true, subItem), - pathNoExportFilenames + File.separator + getASMPath(false, subItem) + getASMs(exportFileNames, subItem, nodesToExport, exportAll, asmsToExport, + pathExportFilenames + File.separator + getASMPath(true, subItem), + pathNoExportFilenames + File.separator + getASMPath(false, subItem) ); } } else if (treeItem instanceof FrameScript) { FrameScript frameScript = (FrameScript) treeItem; Frame parentFrame = frameScript.getFrame(); for (TreeItem subItem : parentFrame.actionContainers) { - getASMs(exportFileNames, getASMWrapToTagScript(subItem), nodesToExport, exportAll || exportNode, asmsToExport, - pathExportFilenames + File.separator + getASMPath(true, subItem), - pathNoExportFilenames + File.separator + getASMPath(false, subItem) + getASMs(exportFileNames, getASMWrapToTagScript(subItem), nodesToExport, exportAll || exportNode, asmsToExport, + pathExportFilenames + File.separator + getASMPath(true, subItem), + pathNoExportFilenames + File.separator + getASMPath(false, subItem) ); } for (TreeItem subItem : parentFrame.actions) { getASMs(exportFileNames, getASMWrapToTagScript(subItem), nodesToExport, exportAll || exportNode, asmsToExport, - pathExportFilenames + File.separator + getASMPath(true, subItem), - pathNoExportFilenames + File.separator + getASMPath(false, subItem) + pathExportFilenames + File.separator + getASMPath(true, subItem), + pathNoExportFilenames + File.separator + getASMPath(false, subItem) ); } } else if (treeItem instanceof AS2Package) { @@ -2347,16 +2347,16 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { if ((subItem instanceof AS2Package) && ((AS2Package) subItem).isDefaultPackage()) { getASMs(exportFileNames, subItem, nodesToExport, exportAll, asmsToExport, pathExportFilenames, pathNoExportFilenames); } else { - getASMs(exportFileNames, subItem, nodesToExport, exportAll, asmsToExport, - pathExportFilenames + File.separator + getASMPath(true, subItem), - pathNoExportFilenames + File.separator + getASMPath(false, subItem) + getASMs(exportFileNames, subItem, nodesToExport, exportAll, asmsToExport, + pathExportFilenames + File.separator + getASMPath(true, subItem), + pathNoExportFilenames + File.separator + getASMPath(false, subItem) ); } } for (TreeItem subItem : as2Package.scripts.values()) { getASMs(exportFileNames, subItem, nodesToExport, exportAll, asmsToExport, - pathExportFilenames + File.separator + getASMPath(true, subItem), - pathNoExportFilenames + File.separator + getASMPath(false, subItem) + pathExportFilenames + File.separator + getASMPath(true, subItem), + pathNoExportFilenames + File.separator + getASMPath(false, subItem) ); } } @@ -3196,7 +3196,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { return new AffineTransform(mat.getScaleXFloat(), mat.getRotateSkew0Float(), mat.getRotateSkew1Float(), mat.getScaleYFloat(), mat.translateX, mat.translateY); - } + } public void putToCache(String key, SerializableImage img) { if (Configuration.useFrameCache.get()) { @@ -3300,7 +3300,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { swf.as3Cache.remove(pack); } } - } + } public static boolean isActionListCached(ASMSource src) { if (src != null) { @@ -3346,7 +3346,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { return null; } - + public SerializableImage getFromCache(String key) { if (frameCache.contains(key)) { return frameCache.get(key); @@ -3360,7 +3360,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { return soundCache.get(key); } return null; - } + } public static HighlightedText getFromCache(ScriptPack pack) { if (pack != null) { @@ -3384,7 +3384,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { return null; } - + public static ActionList getCachedActionList(ASMSource src, final List listeners) throws InterruptedException { synchronized (src) { SWF swf = src.getSwf(); @@ -3561,8 +3561,6 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { return image; } - - public boolean removeCharacterFromTimeline(int characterId, Timeline timeline, TagRemoveListener listener) { Set chars = new HashSet<>(); chars.add(characterId); @@ -3800,7 +3798,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { setModified(true); tags.add(index, tag); updateCharacters(); - } + } public int indexOfTag(Tag tag) { return tags.indexOf(tag); @@ -3945,7 +3943,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { ((Tag) tag).setModified(true); } - } + } /** * Injects debugline and debugfile instructions to AS3 P-code (lines of @@ -3972,7 +3970,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { * * @param decompileDir Directory to set file information paths */ - public void injectAS3DebugInfo(File decompileDir) throws InterruptedException { + public void injectAS3DebugInfo(File decompileDir) throws InterruptedException { List packs = getAS3Packs(); int i = 0; for (ScriptPack s : packs) { @@ -3981,14 +3979,14 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { } i++; informListeners("inject_debuginfo", "" + i + "/" + packs.size() + ": " + s.getPath()); - if (s.isSimple) { + if (s.isSimple) { try { s.injectDebugInfo(decompileDir); } catch (Throwable t) { Logger.getLogger(SWF.class.getName()).log(Level.SEVERE, "Errorr injecting debug info", t); } } - } + } } /** @@ -4022,7 +4020,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { public void enableDebugging(boolean injectAS3Code, File decompileDir, boolean telemetry) throws InterruptedException { enableDebugging(injectAS3Code, decompileDir, telemetry, false); } - + /** * Enables debugging. Adds tags to enable debugging and injects debugline * and debugfile instructions to AS3 code. Optionally enables Telemetry @@ -4506,7 +4504,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { updateCharacters(); } } - + @Override public void replaceTag(int index, Tag newTag) { removeTag(index); @@ -4610,5 +4608,5 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { @Override public SWF getSwf() { return this; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java index dbecc6135..393407cbd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java @@ -387,9 +387,10 @@ public class SWFInputStream implements AutoCloseable { } /** - * HACK: Special constructor to handle old GFX format - * - DO NOT USE for normal purposes - it won't read tags, etc... - * @param is + * HACK: Special constructor to handle old GFX format - DO NOT USE for + * normal purposes - it won't read tags, etc... + * + * @param is */ public SWFInputStream(InputStream is) throws IOException { this.swf = null; @@ -398,7 +399,7 @@ public class SWFInputStream implements AutoCloseable { this.limit = Integer.MAX_VALUE; this.is = new FakeMemoryInputStream(is); } - + public SWF getSwf() { return swf; } @@ -825,7 +826,7 @@ public class SWFInputStream implements AutoCloseable { * @return ByteArrayRange object * @throws IOException */ - public ByteArrayRange readByteRangeEx(long count, String name, DumpInfoSpecialType specialType, Object specialValue) throws IOException { + public ByteArrayRange readByteRangeEx(long count, String name, DumpInfoSpecialType specialType, Object specialValue) throws IOException { if (count <= 0) { return ByteArrayRange.EMPTY; } @@ -2871,7 +2872,7 @@ public class SWFInputStream implements AutoCloseable { cer.controlDeltaX = (int) readSB(cer.numBits + 2, "controlDeltaX"); cer.controlDeltaY = (int) readSB(cer.numBits + 2, "controlDeltaY"); cer.anchorDeltaX = (int) readSB(cer.numBits + 2, "anchorDeltaX"); - cer.anchorDeltaY = (int) readSB(cer.numBits + 2, "anchorDeltaY"); + cer.anchorDeltaY = (int) readSB(cer.numBits + 2, "anchorDeltaY"); ret = cer; } } @@ -3116,7 +3117,8 @@ public class SWFInputStream implements AutoCloseable { /** * Reads one MORPHFOCALGRADIENT value from the stream. * - *

This is undocumented feature + *

+ * This is undocumented feature * * @param name * @return MORPHGRADIENT value diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java index 7f08a8b7d..be5fb32e5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java @@ -151,7 +151,7 @@ public class SWFOutputStream extends OutputStream { os.write(b, off, len); pos += len; } - + public void write(ByteArrayRange b) throws IOException { alignByte(); os.write(b.getArray(), b.getPos(), b.getLength()); @@ -419,15 +419,15 @@ public class SWFOutputStream extends OutputStream { if (!fitsInUB(nBits, value)) { throw new ValueTooLargeException("UB[" + nBits + "]", value); } - writeNBInternal(nBits, value, "UB"); + writeNBInternal(nBits, value, "UB"); } - + public static boolean fitsInSB(int nBits, long value) { long min = -1L << (nBits - 1); long max = (1L << (nBits - 1)) - 1; return value >= min && value <= max; } - + public static boolean fitsInUB(int nBits, long value) { long min = 0; long max = (1L << nBits) - 1; @@ -454,7 +454,7 @@ public class SWFOutputStream extends OutputStream { * @param value Signed value to write * @throws IOException */ - public void writeSB(int nBits, long value) throws IOException { + public void writeSB(int nBits, long value) throws IOException { if (!fitsInSB(nBits, value)) { throw new ValueTooLargeException("SB[" + nBits + "]", value); } @@ -530,7 +530,7 @@ public class SWFOutputStream extends OutputStream { for (Tag tag : tags) { tag.writeTag(this); } - } + } /** * Calculates number of bits needed for representing signed value @@ -564,7 +564,7 @@ public class SWFOutputStream extends OutputStream { } return nBits; } - + /** * Calculates number of bits needed for representing unsigned value * @@ -680,7 +680,7 @@ public class SWFOutputStream extends OutputStream { writeUB(5, nBits); writeFB(nBits, value.rotateSkew0); - writeFB(nBits, value.rotateSkew1); + writeFB(nBits, value.rotateSkew1); } int NTranslateBits = 0; NTranslateBits = enlargeBitCountS(NTranslateBits, value.translateX); @@ -1386,17 +1386,17 @@ public class SWFOutputStream extends OutputStream { * @param shapeNum 1 in DefineShape, 2 in DefineShape2,... * @throws IOException */ - public void writeSHAPE(SHAPE value, int shapeNum) throws IOException { + public void writeSHAPE(SHAPE value, int shapeNum) throws IOException { calculateSHAPEFillLineBits(value); writeUB(4, value.numFillBits); writeUB(4, value.numLineBits); writeSHAPERECORDS(value.shapeRecords, value.numFillBits, value.numLineBits, shapeNum); } - + private void calculateSHAPEFillLineBits(SHAPE value) { int numFillBits = 0; int numLineBits = 0; - + for (SHAPERECORD r : value.shapeRecords) { if (r instanceof StyleChangeRecord) { StyleChangeRecord scr = (StyleChangeRecord) r; @@ -1407,22 +1407,22 @@ public class SWFOutputStream extends OutputStream { numFillBits = Math.max(numFillBits, getNeededBitsU(scr.fillStyle1)); } if (scr.stateLineStyle) { - numLineBits = Math.max(numLineBits, getNeededBitsU(scr.lineStyle)); + numLineBits = Math.max(numLineBits, getNeededBitsU(scr.lineStyle)); } if (scr.stateNewStyles) { break; - } + } } } if (Configuration._debugCopy.get()) { numFillBits = Math.max(numFillBits, value.numFillBits); numLineBits = Math.max(numLineBits, value.numLineBits); } - + value.numFillBits = numFillBits; value.numLineBits = numLineBits; } - + /** * Writes SHAPEWITHSTYLE value to the stream * @@ -1433,7 +1433,7 @@ public class SWFOutputStream extends OutputStream { public void writeSHAPEWITHSTYLE(SHAPEWITHSTYLE value, int shapeNum) throws IOException { writeFILLSTYLEARRAY(value.fillStyles, shapeNum); writeLINESTYLEARRAY(value.lineStyles, shapeNum); - calculateSHAPEFillLineBits(value); + calculateSHAPEFillLineBits(value); writeUB(4, value.numFillBits); writeUB(4, value.numLineBits); writeSHAPERECORDS(value.shapeRecords, value.numFillBits, value.numLineBits, shapeNum); @@ -1715,7 +1715,8 @@ public class SWFOutputStream extends OutputStream { /** * Writes MORPHFOCALGRADIENT value to the stream. * - *

Undocumented feature + *

+ * Undocumented feature * * @param value MORPHGRADIENT value * @param shapeNum 1 in DefineMorphShape, 2 in DefineMorphShape2,... diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java index f48426b4b..4c524ff15 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SourceGeneratorLocalData.java @@ -84,7 +84,7 @@ public class SourceGeneratorLocalData implements Serializable { public List> catchesOpenedLoops = new ArrayList<>(); public List catchesTempRegs = new ArrayList<>(); - + public String documentClass; public boolean secondRun = false; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABCOutputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABCOutputStream.java index 6dc63253c..30b9bb5a6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABCOutputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABCOutputStream.java @@ -40,7 +40,7 @@ public class ABCOutputStream extends OutputStream { private final OutputStream os; private long position = 0L; - + public ABCOutputStream(OutputStream os) { this.os = os; } @@ -58,7 +58,7 @@ public class ABCOutputStream extends OutputStream { @Override public void write(byte[] data) throws IOException { os.write(data); - position += data.length; + position += data.length; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java index efc21cfda..b74fa66fa 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java @@ -378,14 +378,15 @@ public class ScriptPack extends AS3ClassTreeItem { } private class Label { + public long addr; public Label(long addr) { this.addr = addr; } - + } - + /** * Injects debugfile, debugline instructions into the code. * @@ -445,7 +446,7 @@ public class ScriptPack extends AS3ClassTreeItem { if (!bodyToFunctionName.containsKey(bodyIndex)) { bodyToFunctionName.put(bodyIndex, method.getProperties().localName); } - + bodyToActivationReg.put(bodyIndex, method.getProperties().activationRegIndex); int pos = -1; int regIndex = -1; @@ -464,7 +465,7 @@ public class ScriptPack extends AS3ClassTreeItem { if (instrOffset == -1) { lonelyBody.add(bodyIndex); break blk; - } + } try { pos = abc.bodies.get(bodyIndex).getCode().adr2pos(instrOffset); } catch (ConvertException cex) { @@ -480,7 +481,7 @@ public class ScriptPack extends AS3ClassTreeItem { } //int origPos = bodyLineToPos.get(bodyIndex).containsKey(line) ? bodyLineToPos.get(bodyIndex).get(line) : -1; - bodyToPosToLine.get(bodyIndex).put(pos, line); + bodyToPosToLine.get(bodyIndex).put(pos, line); bodyLineToPos.get(bodyIndex).put(line, pos); } else { lonelyBody.add(bodyIndex); @@ -520,7 +521,7 @@ public class ScriptPack extends AS3ClassTreeItem { + cls.replace(";", "{{semicolon}}") + ".as"; filename = filename.replaceAll("\\{(invalid_utf8=[0-9]+)\\}", "[$1]"); - + //Remove debug info from lonely bodies for (int bodyIndex : lonelyBody) { if (!bodyToPosToLine.keySet().contains(bodyIndex)) { @@ -561,7 +562,7 @@ public class ScriptPack extends AS3ClassTreeItem { } } List code2 = new ArrayList<>(); - + int dpos = 0; code2.add(new AVM2Instruction(0, AVM2Instructions.DebugFile, new int[]{abc.constants.getStringId(filename, true)})); dpos++; @@ -582,7 +583,7 @@ public class ScriptPack extends AS3ClassTreeItem { activationRegName = bodyToFunctionName.get(bodyIndex) + "$0"; } code2.add(new AVM2Instruction(0, AVM2Instructions.Debug, new int[]{1, abc.constants.getStringId(activationRegName, true), activationReg - 1, bodyLine})); - } + } List pos = new ArrayList<>(bodyToPosToLine.get(bodyIndex).keySet()); Collections.sort(pos); Collections.reverse(pos); @@ -598,9 +599,9 @@ public class ScriptPack extends AS3ClassTreeItem { if (delIns.contains(code.get(i))) { continue; } - code2.add(code.get(i)); + code2.add(code.get(i)); } - for (int i : pos) { + for (int i : pos) { int line = bodyToPosToLine.get(bodyIndex).get(i); if (addedLines.contains(line)) { continue; @@ -624,9 +625,9 @@ public class ScriptPack extends AS3ClassTreeItem { Label lab = (Label) obj; mapOffsets.put(lab.addr, adr); } - } + } code.clear(); - + adr = 0; for (int i = 0; i < code2.size(); i++) { Object obj = code2.get(i); @@ -650,13 +651,13 @@ public class ScriptPack extends AS3ClassTreeItem { if (mapOffsets.containsKey(targetAddr)) { changedAddr = mapOffsets.get(targetAddr); changedOperand = (int) (changedAddr - adr); - ins.operands[0] = changedOperand; + ins.operands[0] = changedOperand; } else { logger.log(Level.WARNING, "Invalid jump target in script {0}, bodyIndex {1}", new Object[]{toString(), bodyIndex}); } for (int k = 2; k < ins.operands.length; k++) { targetAddr = ins.getAddress() + ins.operands[k]; - if (mapOffsets.containsKey(targetAddr)) { + if (mapOffsets.containsKey(targetAddr)) { changedAddr = mapOffsets.get(targetAddr); changedOperand = (int) (changedAddr - adr); ins.operands[k] = changedOperand; @@ -680,12 +681,12 @@ public class ScriptPack extends AS3ClassTreeItem { ex.start = (int) lstart; ex.target = (int) ltarget; ex.end = (int) lend; - } + } b.setModified(); } - - ((Tag) abc.parentTag).setModified(true); - } + + ((Tag) abc.parentTag).setModified(true); + } public void injectPCodeDebugInfo(int abcIndex) { @@ -718,7 +719,7 @@ public class ScriptPack extends AS3ClassTreeItem { Trait trait; int traitIndex = -10; if (trt != null && cls != null) { - traitIndex = (int) trt.getProperties().index; + traitIndex = (int) trt.getProperties().index; } bodyToIdentifier.put(bodyIndex, "abc:" + abcIndex + ",script:" + scriptIndex + ",class:" + classIndex + ",trait:" + traitIndex + ",method:" + methodIndex + ",body:" + bodyIndex); break; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 7fc51c2b3..c750284a8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -2415,7 +2415,7 @@ public class AVM2Code implements Cloneable { }, body); code.remove(pos); //checkValidOffsets(body); - } + } /** * Replaces instruction by another. Properly handles offsets. Note: If diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2ConstantPool.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2ConstantPool.java index d4fded805..be601624a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2ConstantPool.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2ConstantPool.java @@ -871,5 +871,5 @@ public class AVM2ConstantPool implements Cloneable { for (int i = 0; i < constant_multiname.size(); i++) { Multiname.checkTypeNameCyclic(this, i); } - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorRegisters.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorRegisters.java index 0fa77cf3d..91a8abbdc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorRegisters.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorRegisters.java @@ -299,7 +299,7 @@ public class AVM2DeobfuscatorRegisters extends AVM2DeobfuscatorSimple { public int adr2pos(long adr) { return code.adr2pos(adr); } - + @Override public int adr2pos(long adr, boolean nearest) { return code.adr2pos(adr, nearest); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorRegistersOld.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorRegistersOld.java index eee48d14f..5a127d460 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorRegistersOld.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorRegistersOld.java @@ -306,18 +306,17 @@ public class AVM2DeobfuscatorRegistersOld extends AVM2DeobfuscatorSimpleOld { public int adr2pos(long adr) { return code.adr2pos(adr); } - + @Override public int adr2pos(long adr, boolean nearest) { return code.adr2pos(adr, nearest); } - @Override public long pos2adr(int pos) { return code.pos2adr(pos); } - + @Override public Set getImportantAddresses() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/fastavm2/FastAVM2List.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/fastavm2/FastAVM2List.java index e0767b287..4b19cf5d5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/fastavm2/FastAVM2List.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/fastavm2/FastAVM2List.java @@ -58,8 +58,8 @@ public class FastAVM2List implements Collection { size = code.size(); getJumps(avm2code, actionItemMap); - } - + } + public final AVM2InstructionItem insertItemBefore(AVM2InstructionItem item, AVM2Instruction action) { AVM2InstructionItem newItem = new AVM2InstructionItem(action); return insertItemBefore(item, newItem); @@ -77,8 +77,8 @@ public class FastAVM2List implements Collection { public final AVM2InstructionItem insertItemAfter(AVM2InstructionItem item, AVM2Instruction action) { AVM2InstructionItem newItem = new AVM2InstructionItem(action); return insertItemAfter(item, newItem); - } - + } + public final AVM2InstructionItem insertItemAfter(AVM2InstructionItem item, AVM2InstructionItem newItem) { if (item == null && firstItem == null) { firstItem = newItem; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java index 97d84d1c9..308ae913f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java @@ -2051,10 +2051,10 @@ public class AVM2Graph extends Graph { protected void processOther(List list, long lastLoopId) { if (list.isEmpty()) { return; - } - + } + int pos = list.size() - 1; - + if (list.get(pos) instanceof ContinueItem) { if (((ContinueItem) list.get(pos)).loopId != lastLoopId) { return; @@ -2064,9 +2064,9 @@ public class AVM2Graph extends Graph { return; } } - + //Remove continues from all branches of try...catch block if its continue to parent loop - if (list.get(pos) instanceof TryAVM2Item) { + if (list.get(pos) instanceof TryAVM2Item) { TryAVM2Item ta = (TryAVM2Item) list.get(pos); for (List cc : ta.catchCommands) { if (!cc.isEmpty()) { @@ -2094,9 +2094,9 @@ public class AVM2Graph extends Graph { } } } - } + } } - + @Override protected void finalProcessAfter(List list, int level, FinalProcessLocalData localData, String path) { super.finalProcessAfter(list, level, localData, path); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java index 15de75bb6..49e5b614d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java @@ -122,7 +122,7 @@ public class AVM2GraphSource extends GraphSource { public int adr2pos(long adr) { return code.adr2pos(adr); } - + @Override public int adr2pos(long adr, boolean nearest) { return code.adr2pos(adr, true); @@ -131,5 +131,5 @@ public class AVM2GraphSource extends GraphSource { @Override public long pos2adr(int pos) { return code.pos2adr(pos); - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java index 46dd69580..b49b28ad1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java @@ -172,7 +172,7 @@ public class AVM2Instruction implements Cloneable, GraphSourceItem { } return cnt; - } + } public List getOffsets() { List ret = new ArrayList<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/CoerceAIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/CoerceAIns.java index 574366830..ba436dc4e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/CoerceAIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/CoerceAIns.java @@ -36,7 +36,7 @@ public class CoerceAIns extends InstructionDefinition implements CoerceOrConvert public CoerceAIns() { super(0x82, "coerce_a", new int[]{}, true); - } + } @Override public boolean execute(LocalDataArea lda, AVM2ConstantPool constants, AVM2Instruction ins) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/StoreNewActivationAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/StoreNewActivationAVM2Item.java index a8cd67de0..c8c85d673 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/StoreNewActivationAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/StoreNewActivationAVM2Item.java @@ -24,13 +24,14 @@ import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** - * Store new Activation object. This exists just for the purpose of passing - * activation register to the GraphTextWriter to correctly be read - * by debug info injector. + * Store new Activation object. This exists just for the purpose of passing + * activation register to the GraphTextWriter to correctly be read by debug info + * injector. + * * @author JPEXS */ public class StoreNewActivationAVM2Item extends AVM2Item { - + public int regIndex; public StoreNewActivationAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, int regIndex) { @@ -47,7 +48,7 @@ public class StoreNewActivationAVM2Item extends AVM2Item { public boolean needsSemicolon() { return false; } - + @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { HighlightData hd = new HighlightData(); @@ -69,5 +70,5 @@ public class StoreNewActivationAVM2Item extends AVM2Item { @Override public boolean isEmpty() { return true; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java index 4f10e1110..79315c479 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java @@ -101,7 +101,7 @@ public class ASM3Parser { return label + " at address " + offset; } - } + } private static int checkMultinameIndex(AVM2ConstantPool constants, int index, int line) throws AVM2ParseException { if ((index < 0) || (index >= constants.getMultinameCount())) { @@ -733,7 +733,7 @@ public class ASM3Parser { } return new ValueKind(value_index, value_kind); } - + public static AVM2Code parse(ABC abc, Reader reader, Trait trait, MethodBody body, MethodInfo info) throws IOException, AVM2ParseException, InterruptedException { return parse(abc, reader, trait, null, body, info); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/Flasm3Lexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/Flasm3Lexer.java index e2da95cf8..6ac4008a5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/Flasm3Lexer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/Flasm3Lexer.java @@ -1,6 +1,6 @@ /* The following code was generated by JFlex 1.6.0 */ -/* + /* * Copyright (C) 2010-2021 JPEXS, All rights reserved. * * This library is free software; you can redistribute it and/or @@ -16,1937 +16,1978 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. */ -/* Flash assembler language lexer specification */ + /* Flash assembler language lexer specification */ package com.jpexs.decompiler.flash.abc.avm2.parser.pcode; import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException; import java.util.Stack; /** - * This class is a scanner generated by - * JFlex 1.6.0 - * from the specification file C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript3_pcode.flex + * This class is a scanner generated by + * JFlex 1.6.0 from the specification file + * C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript3_pcode.flex */ public final class Flasm3Lexer { - /** This character denotes the end of file */ - public static final int YYEOF = -1; + /** + * This character denotes the end of file + */ + public static final int YYEOF = -1; - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; + /** + * initial size of the lookahead buffer + */ + private static final int ZZ_BUFFERSIZE = 16384; - /** lexical states */ - public static final int YYINITIAL = 0; - public static final int STRING = 2; - public static final int PARAMETERS = 4; + /** + * lexical states + */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; + public static final int PARAMETERS = 4; - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l - * at the beginning of a line - * l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2 - }; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the + * beginning of a line l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2 + }; - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\12\1\4\1\2\1\65\1\66\1\1\16\12\4\0\1\35\1\0"+ - "\1\47\1\0\1\11\2\0\1\62\1\52\1\53\1\0\1\20\1\56"+ - "\1\15\1\16\1\0\1\14\7\7\1\60\1\7\1\13\1\3\1\54"+ - "\1\0\1\55\2\0\1\33\1\21\1\24\1\36\1\17\1\41\1\37"+ - "\1\45\1\27\1\11\1\44\1\42\1\5\1\31\1\30\1\25\1\50"+ - "\1\34\1\32\1\26\1\43\1\46\1\51\1\23\1\40\1\11\1\6"+ - "\1\22\1\10\1\0\1\57\1\0\1\33\1\21\1\24\1\36\1\17"+ - "\1\41\1\37\1\45\1\27\1\11\1\44\1\42\1\5\1\31\1\30"+ - "\1\25\1\50\1\34\1\32\1\26\1\43\1\46\1\51\1\23\1\40"+ - "\1\11\1\63\1\0\1\64\1\0\6\12\1\67\32\12\2\0\4\11"+ - "\1\0\1\61\2\0\1\11\2\0\1\12\7\0\1\11\4\0\1\11"+ - "\5\0\27\11\1\0\37\11\1\0\70\11\2\27\115\11\1\32\u0142\11"+ - "\4\0\14\11\16\0\5\11\7\0\1\11\1\0\1\11\21\0\160\12"+ - "\5\11\1\0\2\11\2\0\4\11\1\0\1\11\6\0\1\11\1\0"+ - "\3\11\1\0\1\11\1\0\24\11\1\0\123\11\1\0\213\11\1\0"+ - "\5\12\2\0\246\11\1\0\46\11\2\0\1\11\6\0\51\11\6\0"+ - "\1\11\1\0\55\12\1\0\1\12\1\0\2\12\1\0\2\12\1\0"+ - "\1\12\10\0\33\11\4\0\4\11\15\0\6\12\5\0\1\11\4\0"+ - "\13\12\1\0\1\12\3\0\53\11\37\12\4\0\2\11\1\12\143\11"+ - "\1\0\1\11\10\12\1\0\6\12\2\11\2\12\1\0\4\12\2\11"+ - "\12\12\3\11\2\0\1\11\17\0\1\12\1\11\1\12\36\11\33\12"+ - "\2\0\131\11\13\12\1\11\16\0\12\12\41\11\11\12\2\11\4\0"+ - "\1\11\2\0\1\12\30\11\4\12\1\11\11\12\1\11\3\12\1\11"+ - "\5\12\22\0\31\11\3\12\4\0\13\11\5\0\30\11\1\0\6\11"+ - "\1\0\2\12\6\0\10\12\52\11\72\12\66\11\3\12\1\11\22\12"+ - "\1\11\7\12\12\11\2\12\2\0\12\12\1\0\20\11\3\12\1\0"+ - "\10\11\2\0\2\11\2\0\26\11\1\0\7\11\1\0\1\11\3\0"+ - "\4\11\2\0\1\12\1\11\7\12\2\0\2\12\2\0\3\12\1\11"+ - "\10\0\1\12\4\0\2\11\1\0\3\11\2\12\2\0\12\12\4\11"+ - "\7\0\2\11\1\0\1\12\2\0\3\12\1\0\6\11\4\0\2\11"+ - "\2\0\26\11\1\0\7\11\1\0\2\11\1\0\2\11\1\0\2\11"+ - "\2\0\1\12\1\0\5\12\4\0\2\12\2\0\3\12\3\0\1\12"+ - "\7\0\4\11\1\0\1\11\7\0\14\12\3\11\1\12\13\0\3\12"+ - "\1\0\11\11\1\0\3\11\1\0\26\11\1\0\7\11\1\0\2\11"+ - "\1\0\5\11\2\0\1\12\1\11\10\12\1\0\3\12\1\0\3\12"+ - "\2\0\1\11\17\0\2\11\2\12\2\0\12\12\1\0\1\11\7\0"+ - "\1\11\6\12\1\0\3\12\1\0\10\11\2\0\2\11\2\0\26\11"+ - "\1\0\7\11\1\0\2\11\1\0\5\11\2\0\1\12\1\11\7\12"+ - "\2\0\2\12\2\0\3\12\7\0\3\12\4\0\2\11\1\0\3\11"+ - "\2\12\2\0\12\12\1\0\1\11\20\0\1\12\1\11\1\0\6\11"+ - "\3\0\3\11\1\0\4\11\3\0\2\11\1\0\1\11\1\0\2\11"+ - "\3\0\2\11\3\0\3\11\3\0\14\11\4\0\5\12\3\0\3\12"+ - "\1\0\4\12\2\0\1\11\6\0\1\12\16\0\12\12\11\0\1\11"+ - "\6\0\5\12\10\11\1\0\3\11\1\0\27\11\1\0\20\11\2\0"+ - "\1\12\1\11\7\12\1\0\3\12\1\0\4\12\7\0\2\12\1\0"+ - "\3\11\2\0\1\11\2\0\2\11\2\12\2\0\12\12\20\0\1\11"+ - "\3\12\1\0\10\11\1\0\3\11\1\0\27\11\1\0\12\11\1\0"+ - "\5\11\2\0\1\12\1\11\7\12\1\0\3\12\1\0\4\12\7\0"+ - "\2\12\6\0\2\11\1\0\2\11\2\12\2\0\12\12\1\0\2\11"+ - "\15\0\4\12\11\11\1\0\3\11\1\0\51\11\2\12\1\11\7\12"+ - "\1\0\3\12\1\0\4\12\1\11\5\0\3\11\1\12\7\0\3\11"+ - "\2\12\2\0\12\12\12\0\6\11\1\0\3\12\1\0\22\11\3\0"+ - "\30\11\1\0\11\11\1\0\1\11\2\0\7\11\3\0\1\12\4\0"+ - "\6\12\1\0\1\12\1\0\10\12\6\0\12\12\2\0\2\12\15\0"+ - "\60\11\1\12\2\11\7\12\4\0\10\11\10\12\1\0\12\12\47\0"+ - "\2\11\1\0\1\11\1\0\5\11\1\0\30\11\1\0\1\11\1\0"+ - "\12\11\1\12\2\11\11\12\1\11\2\0\5\11\1\0\1\11\1\0"+ - "\6\12\2\0\12\12\2\0\4\11\40\0\1\11\27\0\2\12\6\0"+ - "\12\12\13\0\1\12\1\0\1\12\1\0\1\12\4\0\2\12\10\11"+ - "\1\0\44\11\4\0\24\12\1\0\2\12\5\11\13\12\1\0\44\12"+ - "\11\0\1\12\71\0\53\11\24\12\1\11\12\12\6\0\6\11\4\12"+ - "\4\11\3\12\1\11\3\12\2\11\7\12\3\11\4\12\15\11\14\12"+ - "\1\11\17\12\2\0\46\11\1\0\1\11\5\0\1\11\2\0\53\11"+ - "\1\0\u014d\11\1\0\4\11\2\0\7\11\1\0\1\11\1\0\4\11"+ - "\2\0\51\11\1\0\4\11\2\0\41\11\1\0\4\11\2\0\7\11"+ - "\1\0\1\11\1\0\4\11\2\0\17\11\1\0\71\11\1\0\4\11"+ - "\2\0\103\11\2\0\3\12\40\0\20\11\20\0\126\11\2\0\6\11"+ - "\3\0\u026c\11\2\0\21\11\1\0\32\11\5\0\113\11\3\0\13\11"+ - "\7\0\22\11\4\12\11\0\23\11\3\12\13\0\22\11\2\12\14\0"+ - "\15\11\1\0\3\11\1\0\2\12\14\0\64\11\40\12\3\0\1\11"+ - "\3\0\2\11\1\12\2\0\12\12\41\0\17\12\6\0\131\11\7\0"+ - "\5\11\2\12\42\11\1\12\1\11\5\0\106\11\12\0\37\11\1\0"+ - "\14\12\4\0\14\12\12\0\12\12\36\11\2\0\5\11\13\0\54\11"+ - "\4\0\32\11\6\0\12\12\46\0\27\11\5\12\4\0\65\11\12\12"+ - "\1\0\35\12\2\0\13\12\6\0\12\12\15\0\1\11\10\0\16\12"+ - "\1\0\20\12\61\0\5\12\57\11\21\12\10\11\3\0\12\12\21\0"+ - "\11\12\14\0\3\12\36\11\15\12\2\11\12\12\54\11\16\12\14\0"+ - "\44\11\24\12\10\0\12\12\3\0\3\11\12\12\44\11\2\0\11\11"+ - "\7\0\53\11\2\0\3\11\20\0\3\12\1\0\25\12\4\11\1\12"+ - "\6\11\1\12\2\11\3\12\1\11\5\0\300\11\100\12\u0116\11\2\0"+ - "\6\11\2\0\46\11\2\0\6\11\2\0\10\11\1\0\1\11\1\0"+ - "\1\11\1\0\1\11\1\0\37\11\2\0\65\11\1\0\7\11\1\0"+ - "\1\11\3\0\3\11\1\0\7\11\3\0\4\11\2\0\6\11\4\0"+ - "\15\11\5\0\3\11\1\0\7\11\16\0\5\12\30\0\1\65\1\65"+ - "\5\12\20\0\2\11\23\0\1\11\13\0\5\12\1\0\12\12\1\0"+ - "\1\11\15\0\1\11\20\0\15\11\3\0\41\11\17\0\15\12\4\0"+ - "\1\12\3\0\14\12\21\0\1\11\4\0\1\11\2\0\12\11\1\0"+ - "\1\11\3\0\5\11\6\0\1\11\1\0\1\11\1\0\1\11\1\0"+ - "\1\44\3\11\1\0\13\11\2\0\4\11\5\0\5\11\4\0\1\11"+ - "\21\0\51\11\u0a77\0\345\11\6\0\4\11\3\12\2\11\14\0\46\11"+ - "\1\0\1\11\5\0\1\11\2\0\70\11\7\0\1\11\17\0\1\12"+ - "\27\11\11\0\7\11\1\0\7\11\1\0\7\11\1\0\7\11\1\0"+ - "\7\11\1\0\7\11\1\0\7\11\1\0\7\11\1\0\40\12\57\0"+ - "\1\11\u01d5\0\3\11\31\0\11\11\6\12\1\0\5\11\2\0\5\11"+ - "\4\0\126\11\2\0\2\12\2\0\3\11\1\0\132\11\1\0\4\11"+ - "\5\0\53\11\1\0\136\11\21\0\40\11\60\0\20\11\u0200\0\u19c0\11"+ - "\100\0\u568d\11\103\0\56\11\2\0\u010d\11\3\0\20\11\12\12\2\11"+ - "\24\0\57\11\1\12\4\0\12\12\1\0\37\11\2\12\120\11\2\12"+ - "\45\0\11\11\2\0\147\11\2\0\100\11\5\0\2\11\1\0\1\11"+ - "\1\0\5\11\30\0\20\11\1\12\3\11\1\12\4\11\1\12\27\11"+ - "\5\12\4\0\1\12\13\0\1\11\7\0\64\11\14\0\2\12\62\11"+ - "\22\12\12\0\12\12\6\0\22\12\6\11\3\0\1\11\1\0\2\11"+ - "\13\12\34\11\10\12\2\0\27\11\15\12\14\0\35\11\3\0\4\12"+ - "\57\11\16\12\16\0\1\11\12\12\6\0\5\11\1\12\12\11\12\12"+ - "\5\11\1\0\51\11\16\12\11\0\3\11\1\12\10\11\2\12\2\0"+ - "\12\12\6\0\27\11\3\0\1\11\3\12\62\11\1\12\1\11\3\12"+ - "\2\11\2\12\5\11\2\12\1\11\1\12\1\11\30\0\3\11\2\0"+ - "\13\11\5\12\2\0\3\11\2\12\12\0\6\11\2\0\6\11\2\0"+ - "\6\11\11\0\7\11\1\0\7\11\1\0\53\11\1\0\16\11\6\0"+ - "\163\11\10\12\1\0\2\12\2\0\12\12\6\0\u2ba4\11\14\0\27\11"+ - "\4\0\61\11\u2104\0\u016e\11\2\0\152\11\46\0\7\11\14\0\5\11"+ - "\5\0\1\11\1\12\12\11\1\0\15\11\1\0\5\11\1\0\1\11"+ - "\1\0\2\11\1\0\2\11\1\0\154\11\41\0\u016b\11\22\0\100\11"+ - "\2\0\66\11\50\0\15\11\3\0\20\12\20\0\20\12\3\0\2\11"+ - "\30\0\3\11\31\0\1\11\6\0\5\11\1\0\207\11\2\0\1\12"+ - "\4\0\1\11\13\0\12\12\7\0\32\11\4\0\1\11\1\0\32\11"+ - "\13\0\131\11\3\0\6\11\2\0\6\11\2\0\6\11\2\0\3\11"+ - "\3\0\2\11\3\0\2\11\22\0\3\12\4\0\14\11\1\0\32\11"+ - "\1\0\23\11\1\0\2\11\1\0\17\11\2\0\16\11\42\0\173\11"+ - "\105\0\65\11\210\0\1\12\202\0\35\11\3\0\61\11\17\0\1\12"+ - "\37\0\40\11\15\0\36\11\5\0\46\11\5\12\5\0\36\11\2\0"+ - "\44\11\4\0\10\11\1\0\5\11\52\0\236\11\2\0\12\12\6\0"+ - "\44\11\4\0\44\11\4\0\50\11\10\0\64\11\14\0\13\11\1\0"+ - "\17\11\1\0\7\11\1\0\2\11\1\0\13\11\1\0\17\11\1\0"+ - "\7\11\1\0\2\11\103\0\u0137\11\11\0\26\11\12\0\10\11\30\0"+ - "\6\11\1\0\52\11\1\0\11\11\105\0\6\11\2\0\1\11\1\0"+ - "\54\11\1\0\2\11\3\0\1\11\2\0\27\11\12\0\27\11\11\0"+ - "\37\11\101\0\23\11\1\0\2\11\12\0\26\11\12\0\32\11\106\0"+ - "\70\11\6\0\2\11\100\0\1\11\3\12\1\0\2\12\5\0\4\12"+ - "\4\11\1\0\3\11\1\0\35\11\2\0\3\12\4\0\1\12\40\0"+ - "\35\11\3\0\35\11\43\0\10\11\1\0\34\11\2\12\31\0\66\11"+ - "\12\0\26\11\12\0\23\11\15\0\22\11\156\0\111\11\67\0\63\11"+ - "\15\0\63\11\15\0\44\11\4\12\10\0\12\12\u0146\0\52\11\1\0"+ - "\2\12\3\0\2\11\116\0\35\11\12\0\1\11\10\0\26\11\13\12"+ - "\37\0\22\11\4\12\52\0\25\11\33\0\27\11\11\0\3\12\65\11"+ - "\17\12\37\0\13\12\2\11\2\12\1\11\11\0\4\12\55\11\13\12"+ - "\2\0\1\12\4\0\1\12\12\0\1\12\2\0\31\11\7\0\12\12"+ - "\6\0\3\12\44\11\16\12\1\0\12\12\4\0\1\11\2\12\1\11"+ - "\10\0\43\11\1\12\2\0\1\11\11\0\3\12\60\11\16\12\4\11"+ - "\4\0\4\12\1\0\14\12\1\11\1\0\1\11\43\0\22\11\1\0"+ - "\31\11\14\12\6\0\1\12\101\0\7\11\1\0\1\11\1\0\4\11"+ - "\1\0\17\11\1\0\12\11\7\0\57\11\14\12\5\0\12\12\6\0"+ - "\4\12\1\0\10\11\2\0\2\11\2\0\26\11\1\0\7\11\1\0"+ - "\2\11\1\0\5\11\1\0\2\12\1\11\7\12\2\0\2\12\2\0"+ - "\3\12\2\0\1\11\6\0\1\12\5\0\5\11\2\12\2\0\7\12"+ - "\3\0\5\12\213\0\65\11\22\12\4\11\5\0\12\12\4\0\1\12"+ - "\3\11\36\0\60\11\24\12\2\11\1\0\1\11\10\0\12\12\246\0"+ - "\57\11\7\12\2\0\11\12\27\0\4\11\2\12\42\0\60\11\21\12"+ - "\3\0\1\11\13\0\12\12\46\0\53\11\15\12\1\11\7\0\12\12"+ - "\66\0\33\11\2\0\17\12\4\0\12\12\6\0\7\11\271\0\54\11"+ - "\17\12\145\0\100\11\12\12\25\0\10\11\2\0\1\11\2\0\10\11"+ - "\1\0\2\11\1\0\30\11\6\12\1\0\2\12\2\0\4\12\1\11"+ - "\1\12\1\11\2\12\14\0\12\12\106\0\10\11\2\0\47\11\7\12"+ - "\2\0\7\12\1\11\1\0\1\11\1\12\33\0\1\11\12\12\50\11"+ - "\7\12\1\11\4\12\10\0\1\12\10\0\1\11\13\12\56\11\20\12"+ - "\3\0\1\11\22\0\111\11\u0107\0\11\11\1\0\45\11\10\12\1\0"+ - "\10\12\1\11\17\0\12\12\30\0\36\11\2\0\26\12\1\0\16\12"+ - "\111\0\7\11\1\0\2\11\1\0\46\11\6\12\3\0\1\12\1\0"+ - "\2\12\1\0\7\12\1\11\1\12\10\0\12\12\6\0\6\11\1\0"+ - "\2\11\1\0\40\11\5\12\1\0\2\12\1\0\5\12\1\11\7\0"+ - "\12\12\u0136\0\23\11\4\12\271\0\1\11\54\0\4\11\37\0\u039a\11"+ - "\146\0\157\11\21\0\304\11\u0a4c\0\141\11\17\0\u042f\11\1\0\11\12"+ - "\u0fc7\0\u0247\11\u21b9\0\u0239\11\7\0\37\11\1\0\12\12\6\0\117\11"+ - "\1\0\12\12\6\0\36\11\2\0\5\12\13\0\60\11\7\12\11\0"+ - "\4\11\14\0\12\12\11\0\25\11\5\0\23\11\u02b0\0\100\11\200\0"+ - "\113\11\4\0\1\12\1\11\67\12\7\0\4\12\15\11\100\0\2\11"+ - "\1\0\1\11\1\12\13\0\2\12\16\0\u17f8\11\10\0\u04d6\11\52\0"+ - "\11\11\u22e7\0\4\11\1\0\7\11\1\0\2\11\1\0\u0123\11\55\0"+ - "\3\11\21\0\4\11\10\0\u018c\11\u0904\0\153\11\5\0\15\11\3\0"+ - "\11\11\7\0\12\11\3\0\2\12\1\0\4\12\u125c\0\56\12\2\0"+ - "\27\12\u021e\0\5\12\3\0\26\12\2\0\7\12\36\0\4\12\224\0"+ - "\3\12\u01bb\0\125\11\1\0\107\11\1\0\2\11\2\0\1\11\2\0"+ - "\2\11\2\0\4\11\1\0\14\11\1\0\1\11\1\0\7\11\1\0"+ - "\101\11\1\0\4\11\2\0\10\11\1\0\7\11\1\0\34\11\1\0"+ - "\4\11\1\0\5\11\1\0\1\11\3\0\7\11\1\0\u0154\11\2\0"+ - "\31\11\1\0\31\11\1\0\37\11\1\0\31\11\1\0\37\11\1\0"+ - "\31\11\1\0\37\11\1\0\31\11\1\0\37\11\1\0\31\11\1\0"+ - "\10\11\2\0\62\12\u0200\0\67\12\4\0\62\12\10\0\1\12\16\0"+ - "\1\12\26\0\5\12\1\0\17\12\u0450\0\37\11\341\0\7\12\1\0"+ - "\21\12\2\0\7\12\1\0\2\12\1\0\5\12\325\0\55\11\3\0"+ - "\7\12\7\11\2\0\12\12\4\0\1\11\u0141\0\36\11\1\12\21\0"+ - "\54\11\16\12\5\0\1\11\u04e0\0\7\11\1\0\4\11\1\0\2\11"+ - "\1\0\17\11\1\0\305\11\13\0\7\12\51\0\104\11\7\12\1\11"+ - "\4\0\12\12\u0356\0\1\11\u014f\0\4\11\1\0\33\11\1\0\2\11"+ - "\1\0\1\11\2\0\1\11\1\0\12\11\1\0\4\11\1\0\1\11"+ - "\1\0\1\11\6\0\1\11\4\0\1\11\1\0\1\11\1\0\1\11"+ - "\1\0\3\11\1\0\2\11\1\0\1\11\2\0\1\11\1\0\1\11"+ - "\1\0\1\11\1\0\1\11\1\0\1\11\1\0\2\11\1\0\1\11"+ - "\2\0\4\11\1\0\7\11\1\0\4\11\1\0\4\11\1\0\1\11"+ - "\1\0\12\11\1\0\21\11\5\0\3\11\1\0\5\11\1\0\21\11"+ - "\u0d34\0\12\12\u0406\0\ua6e0\11\40\0\u1039\11\7\0\336\11\2\0\u1682\11"+ - "\16\0\u1d31\11\u0c1f\0\u021e\11\u05e2\0\u134b\11\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uecc0\0"+ - "\1\12\36\0\140\12\200\0\360\12\uffff\0\uffff\0\ufe12\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED + = "\11\12\1\4\1\2\1\65\1\66\1\1\16\12\4\0\1\35\1\0" + + "\1\47\1\0\1\11\2\0\1\62\1\52\1\53\1\0\1\20\1\56" + + "\1\15\1\16\1\0\1\14\7\7\1\60\1\7\1\13\1\3\1\54" + + "\1\0\1\55\2\0\1\33\1\21\1\24\1\36\1\17\1\41\1\37" + + "\1\45\1\27\1\11\1\44\1\42\1\5\1\31\1\30\1\25\1\50" + + "\1\34\1\32\1\26\1\43\1\46\1\51\1\23\1\40\1\11\1\6" + + "\1\22\1\10\1\0\1\57\1\0\1\33\1\21\1\24\1\36\1\17" + + "\1\41\1\37\1\45\1\27\1\11\1\44\1\42\1\5\1\31\1\30" + + "\1\25\1\50\1\34\1\32\1\26\1\43\1\46\1\51\1\23\1\40" + + "\1\11\1\63\1\0\1\64\1\0\6\12\1\67\32\12\2\0\4\11" + + "\1\0\1\61\2\0\1\11\2\0\1\12\7\0\1\11\4\0\1\11" + + "\5\0\27\11\1\0\37\11\1\0\70\11\2\27\115\11\1\32\u0142\11" + + "\4\0\14\11\16\0\5\11\7\0\1\11\1\0\1\11\21\0\160\12" + + "\5\11\1\0\2\11\2\0\4\11\1\0\1\11\6\0\1\11\1\0" + + "\3\11\1\0\1\11\1\0\24\11\1\0\123\11\1\0\213\11\1\0" + + "\5\12\2\0\246\11\1\0\46\11\2\0\1\11\6\0\51\11\6\0" + + "\1\11\1\0\55\12\1\0\1\12\1\0\2\12\1\0\2\12\1\0" + + "\1\12\10\0\33\11\4\0\4\11\15\0\6\12\5\0\1\11\4\0" + + "\13\12\1\0\1\12\3\0\53\11\37\12\4\0\2\11\1\12\143\11" + + "\1\0\1\11\10\12\1\0\6\12\2\11\2\12\1\0\4\12\2\11" + + "\12\12\3\11\2\0\1\11\17\0\1\12\1\11\1\12\36\11\33\12" + + "\2\0\131\11\13\12\1\11\16\0\12\12\41\11\11\12\2\11\4\0" + + "\1\11\2\0\1\12\30\11\4\12\1\11\11\12\1\11\3\12\1\11" + + "\5\12\22\0\31\11\3\12\4\0\13\11\5\0\30\11\1\0\6\11" + + "\1\0\2\12\6\0\10\12\52\11\72\12\66\11\3\12\1\11\22\12" + + "\1\11\7\12\12\11\2\12\2\0\12\12\1\0\20\11\3\12\1\0" + + "\10\11\2\0\2\11\2\0\26\11\1\0\7\11\1\0\1\11\3\0" + + "\4\11\2\0\1\12\1\11\7\12\2\0\2\12\2\0\3\12\1\11" + + "\10\0\1\12\4\0\2\11\1\0\3\11\2\12\2\0\12\12\4\11" + + "\7\0\2\11\1\0\1\12\2\0\3\12\1\0\6\11\4\0\2\11" + + "\2\0\26\11\1\0\7\11\1\0\2\11\1\0\2\11\1\0\2\11" + + "\2\0\1\12\1\0\5\12\4\0\2\12\2\0\3\12\3\0\1\12" + + "\7\0\4\11\1\0\1\11\7\0\14\12\3\11\1\12\13\0\3\12" + + "\1\0\11\11\1\0\3\11\1\0\26\11\1\0\7\11\1\0\2\11" + + "\1\0\5\11\2\0\1\12\1\11\10\12\1\0\3\12\1\0\3\12" + + "\2\0\1\11\17\0\2\11\2\12\2\0\12\12\1\0\1\11\7\0" + + "\1\11\6\12\1\0\3\12\1\0\10\11\2\0\2\11\2\0\26\11" + + "\1\0\7\11\1\0\2\11\1\0\5\11\2\0\1\12\1\11\7\12" + + "\2\0\2\12\2\0\3\12\7\0\3\12\4\0\2\11\1\0\3\11" + + "\2\12\2\0\12\12\1\0\1\11\20\0\1\12\1\11\1\0\6\11" + + "\3\0\3\11\1\0\4\11\3\0\2\11\1\0\1\11\1\0\2\11" + + "\3\0\2\11\3\0\3\11\3\0\14\11\4\0\5\12\3\0\3\12" + + "\1\0\4\12\2\0\1\11\6\0\1\12\16\0\12\12\11\0\1\11" + + "\6\0\5\12\10\11\1\0\3\11\1\0\27\11\1\0\20\11\2\0" + + "\1\12\1\11\7\12\1\0\3\12\1\0\4\12\7\0\2\12\1\0" + + "\3\11\2\0\1\11\2\0\2\11\2\12\2\0\12\12\20\0\1\11" + + "\3\12\1\0\10\11\1\0\3\11\1\0\27\11\1\0\12\11\1\0" + + "\5\11\2\0\1\12\1\11\7\12\1\0\3\12\1\0\4\12\7\0" + + "\2\12\6\0\2\11\1\0\2\11\2\12\2\0\12\12\1\0\2\11" + + "\15\0\4\12\11\11\1\0\3\11\1\0\51\11\2\12\1\11\7\12" + + "\1\0\3\12\1\0\4\12\1\11\5\0\3\11\1\12\7\0\3\11" + + "\2\12\2\0\12\12\12\0\6\11\1\0\3\12\1\0\22\11\3\0" + + "\30\11\1\0\11\11\1\0\1\11\2\0\7\11\3\0\1\12\4\0" + + "\6\12\1\0\1\12\1\0\10\12\6\0\12\12\2\0\2\12\15\0" + + "\60\11\1\12\2\11\7\12\4\0\10\11\10\12\1\0\12\12\47\0" + + "\2\11\1\0\1\11\1\0\5\11\1\0\30\11\1\0\1\11\1\0" + + "\12\11\1\12\2\11\11\12\1\11\2\0\5\11\1\0\1\11\1\0" + + "\6\12\2\0\12\12\2\0\4\11\40\0\1\11\27\0\2\12\6\0" + + "\12\12\13\0\1\12\1\0\1\12\1\0\1\12\4\0\2\12\10\11" + + "\1\0\44\11\4\0\24\12\1\0\2\12\5\11\13\12\1\0\44\12" + + "\11\0\1\12\71\0\53\11\24\12\1\11\12\12\6\0\6\11\4\12" + + "\4\11\3\12\1\11\3\12\2\11\7\12\3\11\4\12\15\11\14\12" + + "\1\11\17\12\2\0\46\11\1\0\1\11\5\0\1\11\2\0\53\11" + + "\1\0\u014d\11\1\0\4\11\2\0\7\11\1\0\1\11\1\0\4\11" + + "\2\0\51\11\1\0\4\11\2\0\41\11\1\0\4\11\2\0\7\11" + + "\1\0\1\11\1\0\4\11\2\0\17\11\1\0\71\11\1\0\4\11" + + "\2\0\103\11\2\0\3\12\40\0\20\11\20\0\126\11\2\0\6\11" + + "\3\0\u026c\11\2\0\21\11\1\0\32\11\5\0\113\11\3\0\13\11" + + "\7\0\22\11\4\12\11\0\23\11\3\12\13\0\22\11\2\12\14\0" + + "\15\11\1\0\3\11\1\0\2\12\14\0\64\11\40\12\3\0\1\11" + + "\3\0\2\11\1\12\2\0\12\12\41\0\17\12\6\0\131\11\7\0" + + "\5\11\2\12\42\11\1\12\1\11\5\0\106\11\12\0\37\11\1\0" + + "\14\12\4\0\14\12\12\0\12\12\36\11\2\0\5\11\13\0\54\11" + + "\4\0\32\11\6\0\12\12\46\0\27\11\5\12\4\0\65\11\12\12" + + "\1\0\35\12\2\0\13\12\6\0\12\12\15\0\1\11\10\0\16\12" + + "\1\0\20\12\61\0\5\12\57\11\21\12\10\11\3\0\12\12\21\0" + + "\11\12\14\0\3\12\36\11\15\12\2\11\12\12\54\11\16\12\14\0" + + "\44\11\24\12\10\0\12\12\3\0\3\11\12\12\44\11\2\0\11\11" + + "\7\0\53\11\2\0\3\11\20\0\3\12\1\0\25\12\4\11\1\12" + + "\6\11\1\12\2\11\3\12\1\11\5\0\300\11\100\12\u0116\11\2\0" + + "\6\11\2\0\46\11\2\0\6\11\2\0\10\11\1\0\1\11\1\0" + + "\1\11\1\0\1\11\1\0\37\11\2\0\65\11\1\0\7\11\1\0" + + "\1\11\3\0\3\11\1\0\7\11\3\0\4\11\2\0\6\11\4\0" + + "\15\11\5\0\3\11\1\0\7\11\16\0\5\12\30\0\1\65\1\65" + + "\5\12\20\0\2\11\23\0\1\11\13\0\5\12\1\0\12\12\1\0" + + "\1\11\15\0\1\11\20\0\15\11\3\0\41\11\17\0\15\12\4\0" + + "\1\12\3\0\14\12\21\0\1\11\4\0\1\11\2\0\12\11\1\0" + + "\1\11\3\0\5\11\6\0\1\11\1\0\1\11\1\0\1\11\1\0" + + "\1\44\3\11\1\0\13\11\2\0\4\11\5\0\5\11\4\0\1\11" + + "\21\0\51\11\u0a77\0\345\11\6\0\4\11\3\12\2\11\14\0\46\11" + + "\1\0\1\11\5\0\1\11\2\0\70\11\7\0\1\11\17\0\1\12" + + "\27\11\11\0\7\11\1\0\7\11\1\0\7\11\1\0\7\11\1\0" + + "\7\11\1\0\7\11\1\0\7\11\1\0\7\11\1\0\40\12\57\0" + + "\1\11\u01d5\0\3\11\31\0\11\11\6\12\1\0\5\11\2\0\5\11" + + "\4\0\126\11\2\0\2\12\2\0\3\11\1\0\132\11\1\0\4\11" + + "\5\0\53\11\1\0\136\11\21\0\40\11\60\0\20\11\u0200\0\u19c0\11" + + "\100\0\u568d\11\103\0\56\11\2\0\u010d\11\3\0\20\11\12\12\2\11" + + "\24\0\57\11\1\12\4\0\12\12\1\0\37\11\2\12\120\11\2\12" + + "\45\0\11\11\2\0\147\11\2\0\100\11\5\0\2\11\1\0\1\11" + + "\1\0\5\11\30\0\20\11\1\12\3\11\1\12\4\11\1\12\27\11" + + "\5\12\4\0\1\12\13\0\1\11\7\0\64\11\14\0\2\12\62\11" + + "\22\12\12\0\12\12\6\0\22\12\6\11\3\0\1\11\1\0\2\11" + + "\13\12\34\11\10\12\2\0\27\11\15\12\14\0\35\11\3\0\4\12" + + "\57\11\16\12\16\0\1\11\12\12\6\0\5\11\1\12\12\11\12\12" + + "\5\11\1\0\51\11\16\12\11\0\3\11\1\12\10\11\2\12\2\0" + + "\12\12\6\0\27\11\3\0\1\11\3\12\62\11\1\12\1\11\3\12" + + "\2\11\2\12\5\11\2\12\1\11\1\12\1\11\30\0\3\11\2\0" + + "\13\11\5\12\2\0\3\11\2\12\12\0\6\11\2\0\6\11\2\0" + + "\6\11\11\0\7\11\1\0\7\11\1\0\53\11\1\0\16\11\6\0" + + "\163\11\10\12\1\0\2\12\2\0\12\12\6\0\u2ba4\11\14\0\27\11" + + "\4\0\61\11\u2104\0\u016e\11\2\0\152\11\46\0\7\11\14\0\5\11" + + "\5\0\1\11\1\12\12\11\1\0\15\11\1\0\5\11\1\0\1\11" + + "\1\0\2\11\1\0\2\11\1\0\154\11\41\0\u016b\11\22\0\100\11" + + "\2\0\66\11\50\0\15\11\3\0\20\12\20\0\20\12\3\0\2\11" + + "\30\0\3\11\31\0\1\11\6\0\5\11\1\0\207\11\2\0\1\12" + + "\4\0\1\11\13\0\12\12\7\0\32\11\4\0\1\11\1\0\32\11" + + "\13\0\131\11\3\0\6\11\2\0\6\11\2\0\6\11\2\0\3\11" + + "\3\0\2\11\3\0\2\11\22\0\3\12\4\0\14\11\1\0\32\11" + + "\1\0\23\11\1\0\2\11\1\0\17\11\2\0\16\11\42\0\173\11" + + "\105\0\65\11\210\0\1\12\202\0\35\11\3\0\61\11\17\0\1\12" + + "\37\0\40\11\15\0\36\11\5\0\46\11\5\12\5\0\36\11\2\0" + + "\44\11\4\0\10\11\1\0\5\11\52\0\236\11\2\0\12\12\6\0" + + "\44\11\4\0\44\11\4\0\50\11\10\0\64\11\14\0\13\11\1\0" + + "\17\11\1\0\7\11\1\0\2\11\1\0\13\11\1\0\17\11\1\0" + + "\7\11\1\0\2\11\103\0\u0137\11\11\0\26\11\12\0\10\11\30\0" + + "\6\11\1\0\52\11\1\0\11\11\105\0\6\11\2\0\1\11\1\0" + + "\54\11\1\0\2\11\3\0\1\11\2\0\27\11\12\0\27\11\11\0" + + "\37\11\101\0\23\11\1\0\2\11\12\0\26\11\12\0\32\11\106\0" + + "\70\11\6\0\2\11\100\0\1\11\3\12\1\0\2\12\5\0\4\12" + + "\4\11\1\0\3\11\1\0\35\11\2\0\3\12\4\0\1\12\40\0" + + "\35\11\3\0\35\11\43\0\10\11\1\0\34\11\2\12\31\0\66\11" + + "\12\0\26\11\12\0\23\11\15\0\22\11\156\0\111\11\67\0\63\11" + + "\15\0\63\11\15\0\44\11\4\12\10\0\12\12\u0146\0\52\11\1\0" + + "\2\12\3\0\2\11\116\0\35\11\12\0\1\11\10\0\26\11\13\12" + + "\37\0\22\11\4\12\52\0\25\11\33\0\27\11\11\0\3\12\65\11" + + "\17\12\37\0\13\12\2\11\2\12\1\11\11\0\4\12\55\11\13\12" + + "\2\0\1\12\4\0\1\12\12\0\1\12\2\0\31\11\7\0\12\12" + + "\6\0\3\12\44\11\16\12\1\0\12\12\4\0\1\11\2\12\1\11" + + "\10\0\43\11\1\12\2\0\1\11\11\0\3\12\60\11\16\12\4\11" + + "\4\0\4\12\1\0\14\12\1\11\1\0\1\11\43\0\22\11\1\0" + + "\31\11\14\12\6\0\1\12\101\0\7\11\1\0\1\11\1\0\4\11" + + "\1\0\17\11\1\0\12\11\7\0\57\11\14\12\5\0\12\12\6\0" + + "\4\12\1\0\10\11\2\0\2\11\2\0\26\11\1\0\7\11\1\0" + + "\2\11\1\0\5\11\1\0\2\12\1\11\7\12\2\0\2\12\2\0" + + "\3\12\2\0\1\11\6\0\1\12\5\0\5\11\2\12\2\0\7\12" + + "\3\0\5\12\213\0\65\11\22\12\4\11\5\0\12\12\4\0\1\12" + + "\3\11\36\0\60\11\24\12\2\11\1\0\1\11\10\0\12\12\246\0" + + "\57\11\7\12\2\0\11\12\27\0\4\11\2\12\42\0\60\11\21\12" + + "\3\0\1\11\13\0\12\12\46\0\53\11\15\12\1\11\7\0\12\12" + + "\66\0\33\11\2\0\17\12\4\0\12\12\6\0\7\11\271\0\54\11" + + "\17\12\145\0\100\11\12\12\25\0\10\11\2\0\1\11\2\0\10\11" + + "\1\0\2\11\1\0\30\11\6\12\1\0\2\12\2\0\4\12\1\11" + + "\1\12\1\11\2\12\14\0\12\12\106\0\10\11\2\0\47\11\7\12" + + "\2\0\7\12\1\11\1\0\1\11\1\12\33\0\1\11\12\12\50\11" + + "\7\12\1\11\4\12\10\0\1\12\10\0\1\11\13\12\56\11\20\12" + + "\3\0\1\11\22\0\111\11\u0107\0\11\11\1\0\45\11\10\12\1\0" + + "\10\12\1\11\17\0\12\12\30\0\36\11\2\0\26\12\1\0\16\12" + + "\111\0\7\11\1\0\2\11\1\0\46\11\6\12\3\0\1\12\1\0" + + "\2\12\1\0\7\12\1\11\1\12\10\0\12\12\6\0\6\11\1\0" + + "\2\11\1\0\40\11\5\12\1\0\2\12\1\0\5\12\1\11\7\0" + + "\12\12\u0136\0\23\11\4\12\271\0\1\11\54\0\4\11\37\0\u039a\11" + + "\146\0\157\11\21\0\304\11\u0a4c\0\141\11\17\0\u042f\11\1\0\11\12" + + "\u0fc7\0\u0247\11\u21b9\0\u0239\11\7\0\37\11\1\0\12\12\6\0\117\11" + + "\1\0\12\12\6\0\36\11\2\0\5\12\13\0\60\11\7\12\11\0" + + "\4\11\14\0\12\12\11\0\25\11\5\0\23\11\u02b0\0\100\11\200\0" + + "\113\11\4\0\1\12\1\11\67\12\7\0\4\12\15\11\100\0\2\11" + + "\1\0\1\11\1\12\13\0\2\12\16\0\u17f8\11\10\0\u04d6\11\52\0" + + "\11\11\u22e7\0\4\11\1\0\7\11\1\0\2\11\1\0\u0123\11\55\0" + + "\3\11\21\0\4\11\10\0\u018c\11\u0904\0\153\11\5\0\15\11\3\0" + + "\11\11\7\0\12\11\3\0\2\12\1\0\4\12\u125c\0\56\12\2\0" + + "\27\12\u021e\0\5\12\3\0\26\12\2\0\7\12\36\0\4\12\224\0" + + "\3\12\u01bb\0\125\11\1\0\107\11\1\0\2\11\2\0\1\11\2\0" + + "\2\11\2\0\4\11\1\0\14\11\1\0\1\11\1\0\7\11\1\0" + + "\101\11\1\0\4\11\2\0\10\11\1\0\7\11\1\0\34\11\1\0" + + "\4\11\1\0\5\11\1\0\1\11\3\0\7\11\1\0\u0154\11\2\0" + + "\31\11\1\0\31\11\1\0\37\11\1\0\31\11\1\0\37\11\1\0" + + "\31\11\1\0\37\11\1\0\31\11\1\0\37\11\1\0\31\11\1\0" + + "\10\11\2\0\62\12\u0200\0\67\12\4\0\62\12\10\0\1\12\16\0" + + "\1\12\26\0\5\12\1\0\17\12\u0450\0\37\11\341\0\7\12\1\0" + + "\21\12\2\0\7\12\1\0\2\12\1\0\5\12\325\0\55\11\3\0" + + "\7\12\7\11\2\0\12\12\4\0\1\11\u0141\0\36\11\1\12\21\0" + + "\54\11\16\12\5\0\1\11\u04e0\0\7\11\1\0\4\11\1\0\2\11" + + "\1\0\17\11\1\0\305\11\13\0\7\12\51\0\104\11\7\12\1\11" + + "\4\0\12\12\u0356\0\1\11\u014f\0\4\11\1\0\33\11\1\0\2\11" + + "\1\0\1\11\2\0\1\11\1\0\12\11\1\0\4\11\1\0\1\11" + + "\1\0\1\11\6\0\1\11\4\0\1\11\1\0\1\11\1\0\1\11" + + "\1\0\3\11\1\0\2\11\1\0\1\11\2\0\1\11\1\0\1\11" + + "\1\0\1\11\1\0\1\11\1\0\1\11\1\0\2\11\1\0\1\11" + + "\2\0\4\11\1\0\7\11\1\0\4\11\1\0\4\11\1\0\1\11" + + "\1\0\12\11\1\0\21\11\5\0\3\11\1\0\5\11\1\0\21\11" + + "\u0d34\0\12\12\u0406\0\ua6e0\11\40\0\u1039\11\7\0\336\11\2\0\u1682\11" + + "\16\0\u1d31\11\u0c1f\0\u021e\11\u05e2\0\u134b\11\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uecc0\0" + + "\1\12\36\0\140\12\200\0\360\12\uffff\0\uffff\0\ufe12\0"; - /** - * Translates characters to character classes - */ - private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int [] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int[] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 = - "\3\0\1\1\1\2\1\1\20\3\1\4\2\5\1\1"+ - "\1\6\2\7\1\10\1\11\1\12\1\13\1\10\1\12"+ - "\2\1\17\10\1\14\1\10\1\15\1\16\1\17\1\20"+ - "\1\21\1\22\26\3\1\23\1\24\1\25\1\23\1\26"+ - "\1\27\1\30\1\31\1\23\1\32\1\33\1\34\1\23"+ - "\1\0\2\10\1\35\1\0\1\35\1\0\6\10\1\36"+ - "\36\10\4\3\1\37\6\3\1\40\15\3\5\0\2\10"+ - "\1\35\1\0\1\10\1\37\46\10\5\3\1\41\1\42"+ - "\4\3\1\43\1\3\1\44\3\3\1\45\3\3\1\46"+ - "\2\3\1\47\1\0\1\50\1\0\12\10\1\51\1\52"+ - "\5\10\1\53\1\10\1\54\4\10\1\55\7\10\1\56"+ - "\1\46\1\10\1\57\4\10\1\60\2\10\6\3\1\61"+ - "\1\62\1\3\1\63\10\3\1\64\1\65\4\10\1\66"+ - "\1\61\27\10\1\67\1\70\6\10\1\64\1\71\1\3"+ - "\1\72\12\3\1\73\1\3\1\74\1\3\1\10\1\72"+ - "\5\10\1\75\11\10\1\76\1\77\1\10\1\100\1\10"+ - "\1\73\2\10\1\74\1\101\1\102\6\10\1\103\4\3"+ - "\1\104\6\3\1\105\1\3\10\10\1\106\11\10\1\107"+ - "\1\110\3\10\1\111\2\10\1\112\1\3\1\113\5\3"+ - "\1\114\1\115\1\3\1\116\1\10\1\76\4\10\1\117"+ - "\2\10\1\120\5\10\1\121\1\10\1\122\1\123\1\124"+ - "\1\125\2\10\2\3\1\126\4\3\1\127\5\10\1\130"+ - "\3\10\1\131\1\10\1\132\1\10\1\133\2\10\5\3"+ - "\1\134\1\3\1\135\1\136\1\137\14\10\4\3\1\140"+ - "\1\3\1\141\4\10\1\142\1\10\1\143\6\10\5\3"+ - "\7\10\1\144\2\10\1\145\1\146\1\0\3\3\11\10"+ - "\2\0\2\3\1\147\6\10\1\150\2\10\1\151\1\3"+ - "\1\0\5\10\1\152\1\10\1\153\3\0\2\10\1\154"+ - "\1\155\2\10\2\0\1\156\1\157\1\160\1\10\1\161"+ - "\1\162\1\163"; + private static final String ZZ_ACTION_PACKED_0 + = "\3\0\1\1\1\2\1\1\20\3\1\4\2\5\1\1" + + "\1\6\2\7\1\10\1\11\1\12\1\13\1\10\1\12" + + "\2\1\17\10\1\14\1\10\1\15\1\16\1\17\1\20" + + "\1\21\1\22\26\3\1\23\1\24\1\25\1\23\1\26" + + "\1\27\1\30\1\31\1\23\1\32\1\33\1\34\1\23" + + "\1\0\2\10\1\35\1\0\1\35\1\0\6\10\1\36" + + "\36\10\4\3\1\37\6\3\1\40\15\3\5\0\2\10" + + "\1\35\1\0\1\10\1\37\46\10\5\3\1\41\1\42" + + "\4\3\1\43\1\3\1\44\3\3\1\45\3\3\1\46" + + "\2\3\1\47\1\0\1\50\1\0\12\10\1\51\1\52" + + "\5\10\1\53\1\10\1\54\4\10\1\55\7\10\1\56" + + "\1\46\1\10\1\57\4\10\1\60\2\10\6\3\1\61" + + "\1\62\1\3\1\63\10\3\1\64\1\65\4\10\1\66" + + "\1\61\27\10\1\67\1\70\6\10\1\64\1\71\1\3" + + "\1\72\12\3\1\73\1\3\1\74\1\3\1\10\1\72" + + "\5\10\1\75\11\10\1\76\1\77\1\10\1\100\1\10" + + "\1\73\2\10\1\74\1\101\1\102\6\10\1\103\4\3" + + "\1\104\6\3\1\105\1\3\10\10\1\106\11\10\1\107" + + "\1\110\3\10\1\111\2\10\1\112\1\3\1\113\5\3" + + "\1\114\1\115\1\3\1\116\1\10\1\76\4\10\1\117" + + "\2\10\1\120\5\10\1\121\1\10\1\122\1\123\1\124" + + "\1\125\2\10\2\3\1\126\4\3\1\127\5\10\1\130" + + "\3\10\1\131\1\10\1\132\1\10\1\133\2\10\5\3" + + "\1\134\1\3\1\135\1\136\1\137\14\10\4\3\1\140" + + "\1\3\1\141\4\10\1\142\1\10\1\143\6\10\5\3" + + "\7\10\1\144\2\10\1\145\1\146\1\0\3\3\11\10" + + "\2\0\2\3\1\147\6\10\1\150\2\10\1\151\1\3" + + "\1\0\5\10\1\152\1\10\1\153\3\0\2\10\1\154" + + "\1\155\2\10\2\0\1\156\1\157\1\160\1\10\1\161" + + "\1\162\1\163"; - private static int [] zzUnpackAction() { - int [] result = new int[607]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackAction() { + int[] result = new int[607]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\70\0\160\0\250\0\340\0\u0118\0\u0150\0\u0188"+ - "\0\u01c0\0\u01f8\0\u0230\0\u0268\0\u02a0\0\u02d8\0\u0310\0\u0348"+ - "\0\u0380\0\u03b8\0\u03f0\0\u0428\0\u0460\0\u0498\0\250\0\u04d0"+ - "\0\250\0\u0508\0\250\0\u0540\0\250\0\u0578\0\250\0\u05b0"+ - "\0\250\0\u05e8\0\u0620\0\u0658\0\u0690\0\u06c8\0\u0700\0\u0738"+ - "\0\u0770\0\u07a8\0\u07e0\0\u0818\0\u0850\0\u0888\0\u08c0\0\u08f8"+ - "\0\u0930\0\u0968\0\u09a0\0\u09d8\0\250\0\u0a10\0\250\0\250"+ - "\0\250\0\250\0\250\0\250\0\u0a48\0\u0a80\0\u0ab8\0\u0af0"+ - "\0\u0b28\0\u0b60\0\u0b98\0\u0bd0\0\u0c08\0\u0c40\0\u0c78\0\u0cb0"+ - "\0\u0ce8\0\u0d20\0\u0d58\0\u0d90\0\u0dc8\0\u0e00\0\u0e38\0\u0e70"+ - "\0\u0ea8\0\u0ee0\0\250\0\250\0\250\0\u0f18\0\250\0\250"+ - "\0\250\0\250\0\u0f50\0\250\0\250\0\250\0\u0f88\0\u0fc0"+ - "\0\u0ff8\0\u1030\0\u1068\0\u10a0\0\u0620\0\u0690\0\u10d8\0\u1110"+ - "\0\u1148\0\u1180\0\u11b8\0\u11f0\0\u05e8\0\u1228\0\u1260\0\u1298"+ - "\0\u12d0\0\u1308\0\u1340\0\u1378\0\u13b0\0\u13e8\0\u1420\0\u1458"+ - "\0\u1490\0\u14c8\0\u1500\0\u1538\0\u1570\0\u15a8\0\u15e0\0\u1618"+ - "\0\u1650\0\u1688\0\u16c0\0\u16f8\0\u1730\0\u1768\0\u17a0\0\u17d8"+ - "\0\u1810\0\u1848\0\u1880\0\u18b8\0\u18f0\0\u1928\0\u1960\0\u0188"+ - "\0\u1998\0\u19d0\0\u1a08\0\u1a40\0\u1a78\0\u1ab0\0\u0188\0\u1ae8"+ - "\0\u1b20\0\u1b58\0\u1b90\0\u1bc8\0\u1c00\0\u1c38\0\u1c70\0\u1ca8"+ - "\0\u1ce0\0\u1d18\0\u1d50\0\u1d88\0\u1dc0\0\u1df8\0\u1e30\0\u1e68"+ - "\0\u1ea0\0\u1ed8\0\u1f10\0\u1f48\0\u1f48\0\u1f80\0\u05e8\0\u1fb8"+ - "\0\u1ff0\0\u2028\0\u2060\0\u2098\0\u20d0\0\u2108\0\u2140\0\u2178"+ - "\0\u21b0\0\u21e8\0\u2220\0\u2258\0\u2290\0\u22c8\0\u2300\0\u2338"+ - "\0\u2370\0\u23a8\0\u23e0\0\u2418\0\u2450\0\u2488\0\u24c0\0\u24f8"+ - "\0\u2530\0\u2568\0\u25a0\0\u25d8\0\u2610\0\u2648\0\u2680\0\u26b8"+ - "\0\u26f0\0\u2728\0\u2760\0\u2798\0\u27d0\0\u2808\0\u2840\0\u2878"+ - "\0\u28b0\0\u28e8\0\u0188\0\u0188\0\u2920\0\u2958\0\u2990\0\u29c8"+ - "\0\u0188\0\u2a00\0\u0188\0\u2a38\0\u2a70\0\u2aa8\0\u0188\0\u2ae0"+ - "\0\u2b18\0\u2b50\0\u0188\0\u2b88\0\u2bc0\0\250\0\u0f18\0\250"+ - "\0\u2bf8\0\u2c30\0\u2c68\0\u2ca0\0\u2cd8\0\u2d10\0\u2d48\0\u2d80"+ - "\0\u2db8\0\u2df0\0\u2e28\0\u05e8\0\u2e60\0\u2e98\0\u2ed0\0\u2f08"+ - "\0\u2f40\0\u2f78\0\u2fb0\0\u2fe8\0\u05e8\0\u3020\0\u3058\0\u3090"+ - "\0\u30c8\0\u3100\0\u3138\0\u3170\0\u31a8\0\u31e0\0\u3218\0\u3250"+ - "\0\u3288\0\u05e8\0\u05e8\0\u32c0\0\u05e8\0\u32f8\0\u3330\0\u3368"+ - "\0\u33a0\0\u05e8\0\u33d8\0\u3410\0\u3448\0\u3480\0\u34b8\0\u34f0"+ - "\0\u3528\0\u3560\0\u0188\0\u3598\0\u35d0\0\u0188\0\u3608\0\u3640"+ - "\0\u3678\0\u36b0\0\u36e8\0\u3720\0\u3758\0\u3790\0\u0188\0\250"+ - "\0\u37c8\0\u3800\0\u3838\0\u3870\0\u05e8\0\u05e8\0\u38a8\0\u38e0"+ - "\0\u3918\0\u3950\0\u3988\0\u39c0\0\u39f8\0\u3a30\0\u3a68\0\u3aa0"+ - "\0\u3ad8\0\u3b10\0\u3b48\0\u3b80\0\u3bb8\0\u3bf0\0\u3c28\0\u3c60"+ - "\0\u3c98\0\u3cd0\0\u3d08\0\u3d40\0\u3d78\0\u05e8\0\u05e8\0\u3db0"+ - "\0\u3de8\0\u3e20\0\u3e58\0\u3e90\0\u3ec8\0\u05e8\0\u3f00\0\u3f38"+ - "\0\u0188\0\u3f70\0\u3fa8\0\u3fe0\0\u4018\0\u4050\0\u4088\0\u40c0"+ - "\0\u40f8\0\u4130\0\u4168\0\u0188\0\u41a0\0\u0188\0\u41d8\0\u4210"+ - "\0\u05e8\0\u4248\0\u4280\0\u42b8\0\u42f0\0\u4328\0\u05e8\0\u4360"+ - "\0\u4398\0\u43d0\0\u4408\0\u4440\0\u4478\0\u44b0\0\u44e8\0\u4520"+ - "\0\u05e8\0\u05e8\0\u4558\0\u05e8\0\u4590\0\u05e8\0\u45c8\0\u4600"+ - "\0\u05e8\0\u05e8\0\u05e8\0\u4638\0\u4670\0\u46a8\0\u46e0\0\u4718"+ - "\0\u4750\0\u05e8\0\u4788\0\u47c0\0\u47f8\0\u4830\0\u0188\0\u4868"+ - "\0\u48a0\0\u48d8\0\u4910\0\u4948\0\u4980\0\u0188\0\u49b8\0\u49f0"+ - "\0\u4a28\0\u4a60\0\u4a98\0\u4ad0\0\u4b08\0\u4b40\0\u4b78\0\u05e8"+ - "\0\u4bb0\0\u4be8\0\u4c20\0\u4c58\0\u4c90\0\u4cc8\0\u4d00\0\u4d38"+ - "\0\u4d70\0\u4da8\0\u05e8\0\u4de0\0\u4e18\0\u4e50\0\u05e8\0\u4e88"+ - "\0\u4ec0\0\u0188\0\u4ef8\0\u0188\0\u4f30\0\u4f68\0\u4fa0\0\u4fd8"+ - "\0\u5010\0\u0188\0\u0188\0\u5048\0\u05e8\0\u5080\0\u50b8\0\u50f0"+ - "\0\u5128\0\u5160\0\u5198\0\u05e8\0\u51d0\0\u5208\0\u05e8\0\u5240"+ - "\0\u5278\0\u52b0\0\u52e8\0\u5320\0\u05e8\0\u5358\0\u05e8\0\u5390"+ - "\0\u05e8\0\u05e8\0\u53c8\0\u5400\0\u5438\0\u5470\0\u0188\0\u54a8"+ - "\0\u54e0\0\u5518\0\u5550\0\u5588\0\u55c0\0\u55f8\0\u5630\0\u5668"+ - "\0\u56a0\0\u05e8\0\u56d8\0\u5710\0\u5748\0\u05e8\0\u5780\0\u05e8"+ - "\0\u57b8\0\u05e8\0\u57f0\0\u5828\0\u5860\0\u5898\0\u58d0\0\u5908"+ - "\0\u5940\0\u0188\0\u5978\0\u0188\0\u05e8\0\u59b0\0\u59e8\0\u5a20"+ - "\0\u5a58\0\u5a90\0\u5ac8\0\u5b00\0\u5b38\0\u5b70\0\u5ba8\0\u5be0"+ - "\0\u5c18\0\u5c50\0\u5c88\0\u5cc0\0\u5cf8\0\u5d30\0\u0188\0\u5d68"+ - "\0\u05e8\0\u5da0\0\u5dd8\0\u5e10\0\u5e48\0\u05e8\0\u5e80\0\u05e8"+ - "\0\u5eb8\0\u5ef0\0\u5f28\0\u5f60\0\u5f98\0\u5fd0\0\u6008\0\u6040"+ - "\0\u6078\0\u60b0\0\u60e8\0\u6120\0\u6158\0\u6190\0\u61c8\0\u6200"+ - "\0\u6238\0\u6270\0\u05e8\0\u62a8\0\u62e0\0\u05e8\0\u0188\0\u6318"+ - "\0\u6350\0\u6388\0\u63c0\0\u63f8\0\u6430\0\u6468\0\u64a0\0\u64d8"+ - "\0\u6510\0\u6548\0\u6580\0\u65b8\0\u65f0\0\u6628\0\u6660\0\u6698"+ - "\0\u0188\0\u66d0\0\u6708\0\u6740\0\u6778\0\u67b0\0\u67e8\0\u05e8"+ - "\0\u6820\0\u6858\0\250\0\u6890\0\u68c8\0\u6900\0\u6938\0\u6970"+ - "\0\u69a8\0\u69e0\0\u05e8\0\u6a18\0\u05e8\0\u6a50\0\u6a88\0\u6ac0"+ - "\0\u6af8\0\u6b30\0\u05e8\0\u05e8\0\u6b68\0\u6ba0\0\u6bd8\0\u6c10"+ - "\0\250\0\u05e8\0\u05e8\0\u6c48\0\u05e8\0\250\0\u05e8"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[607]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); + private static int zzUnpackAction(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; } - return j; - } - /** - * The transition table of the DFA - */ - private static final int [] ZZ_TRANS = zzUnpackTrans(); + /** + * Translates a state to a row index in the transition table + */ + private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - private static final String ZZ_TRANS_PACKED_0 = - "\3\4\1\5\1\6\1\7\3\4\1\10\5\4\1\11"+ - "\1\4\1\12\1\4\1\10\1\13\1\14\1\15\1\16"+ - "\1\17\1\20\1\21\1\10\1\22\1\6\1\23\2\10"+ - "\1\24\1\25\3\10\1\26\1\4\2\10\5\4\1\10"+ - "\6\4\1\6\1\4\1\27\1\30\1\31\17\27\1\32"+ - "\24\27\1\33\20\27\1\4\1\34\1\35\1\5\1\4"+ - "\1\36\1\37\1\40\1\41\1\42\2\4\1\43\1\44"+ - "\1\45\1\46\1\4\1\42\1\4\1\42\1\47\1\50"+ - "\1\51\1\52\1\53\1\54\1\55\1\42\1\56\1\4"+ - "\1\57\1\60\1\42\1\61\1\42\1\62\1\42\1\63"+ - "\1\64\1\65\1\66\1\42\1\67\1\70\1\71\1\72"+ - "\1\73\1\42\1\40\7\4\70\0\1\5\2\0\65\5"+ - "\4\0\1\6\30\0\1\6\30\0\1\6\6\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\75"+ - "\1\0\1\10\1\0\10\10\1\76\1\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\12\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\1\77\5\10\1\100\3\10\1\0\11\10\1\0"+ - "\2\10\5\0\2\10\6\0\1\10\5\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\74\1\10\2\0\1\10\1\0"+ - "\1\10\1\0\5\10\1\101\4\10\1\0\11\10\1\0"+ - "\2\10\5\0\2\10\6\0\1\10\5\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\74\1\10\2\0\1\10\1\0"+ - "\1\10\1\0\5\10\1\102\4\10\1\0\4\10\1\103"+ - "\4\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\10\1\0\1\10\1\0\10\10\1\104\1\105\1\0"+ - "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\10\1\0\1\10\1\0\11\10\1\106\1\0\2\10"+ - "\1\107\6\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\110\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\3\10\1\111\2\10"+ - "\1\112\3\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\113\7\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\10\10"+ - "\1\114\1\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10"+ - "\1\0\4\10\1\115\4\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\116\1\0\1\10\1\0\12\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\4\10\1\117\5\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\12\10\1\0\4\10"+ - "\1\120\4\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\5\10\1\121\4\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\10\10\1\122\1\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\2\0\1\31\65\0\1\123\2\0\16\123\1\124\1\125"+ - "\1\126\2\123\1\127\2\123\1\130\2\123\1\131\4\123"+ - "\1\132\1\123\1\133\3\123\1\134\11\123\1\135\1\136"+ - "\1\137\1\123\5\0\1\35\72\0\1\42\1\140\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\141\1\0\1\42"+ - "\1\0\12\42\1\0\5\42\1\142\3\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\7\0\1\40\4\0\1\40"+ - "\1\0\1\143\1\144\40\0\1\40\14\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\7\0\1\145\4\0\1\145\1\0"+ - "\1\143\1\144\40\0\1\145\16\0\1\40\4\0\1\145"+ - "\1\0\1\146\41\0\1\40\16\0\1\143\4\0\1\143"+ - "\43\0\1\143\14\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\1\147"+ - "\5\42\1\150\3\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\5\42\1\151\4\42\1\0\4\42\1\152\4\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\10\42\1\153\1\154\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\5\42\1\155\2\42\1\156\1\157\1\0"+ - "\2\42\1\160\6\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\6\42\1\161"+ - "\3\42\1\0\1\42\1\162\7\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\10\42\1\163\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\164\1\0\1\42\1\0\5\42"+ - "\1\165\2\42\1\166\1\42\1\0\5\42\1\167\3\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\170"+ - "\1\0\1\42\1\0\3\42\1\171\6\42\1\0\4\42"+ - "\1\172\4\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\3\42\1\173\6\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\174\1\0\1\42\1\0\4\42\1\175\1\176"+ - "\4\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\177\1\0\1\42\1\0\12\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\4\42\1\200\3\42\1\201"+ - "\1\202\1\0\4\42\1\203\1\204\3\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\3\42\1\205\1\206\1\42\1\207\3\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\10\42\1\210\1\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\5\42\1\211\2\42\1\212"+ - "\1\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\6\42\1\213"+ - "\3\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\3\10\1\214"+ - "\6\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\1\215\11\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\1\10\1\216\1\10"+ - "\1\217\6\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10"+ - "\1\0\1\220\10\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\0"+ - "\1\221\10\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\12\10\1\0\1\222"+ - "\10\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\10\1\0\1\10\1\0\10\10\1\223\1\10\1\0"+ - "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\10\1\0\1\10\1\0\11\10\1\224\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\5\10\1\225\4\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\10\10\1\226\1\10\1\0\2\10"+ - "\1\227\6\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\2\10\1\230\7\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\2\10\1\231\7\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\232\1\0\1\10\1\0\12\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\4\10\1\233\2\10\1\234\2\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\3\10\1\235\6\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\236\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\12\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\5\10\1\237\4\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\3\10\1\240\6\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\7\10\1\241\2\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\10\10\1\242\1\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\1\10\1\243\10\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\12\10\1\0\4\10\1\244\4\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\7\0\1\245"+ - "\4\0\1\245\2\0\1\245\1\0\1\245\2\0\1\245"+ - "\6\0\1\245\2\0\1\245\2\0\1\245\16\0\1\245"+ - "\16\0\1\246\4\0\1\246\2\0\1\246\1\0\1\246"+ - "\2\0\1\246\6\0\1\246\2\0\1\246\2\0\1\246"+ - "\16\0\1\246\16\0\1\247\4\0\1\250\43\0\1\247"+ - "\16\0\1\251\4\0\1\251\43\0\1\251\14\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\3\42\1\252\6\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\4\42\1\253\4\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\7\0\1\143"+ - "\4\0\1\143\2\0\1\144\40\0\1\143\16\0\1\254"+ - "\4\0\1\254\1\255\2\0\1\255\37\0\1\254\14\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\256\7\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\12\42\1\0\1\257\10\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\6\42\1\260\3\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\10\42\1\261\1\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\1\42\1\262\10\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\4\42\1\263\1\264\4\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\11\42\1\265\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\5\42\1\266\3\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\267\7\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\3\42\1\270\6\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\6\42\1\271\3\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\272"+ - "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\273\1\0\1\42"+ - "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\6\42"+ - "\1\274\3\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\275\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42"+ - "\1\276\6\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42"+ - "\1\0\4\42\1\277\4\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42"+ - "\1\300\4\42\1\301\1\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\10\42\1\302\1\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\5\42\1\303\4\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\12\42\1\0\11\42\1\0\1\304\1\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\1\42\1\305\10\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\7\42\1\306\2\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\5\42\1\307\3\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\3\42\1\310\6\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\6\42\1\311\3\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\4\42\1\312\4\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\5\42\1\313\4\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\10\42\1\314\1\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\6\42\1\315\3\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\3\42\1\316\5\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\6\42\1\317\3\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\1\320\5\42\1\321\2\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\7\42\1\322\2\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\4\42\1\323\5\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\12\42\1\0\4\42\1\324\4\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\10\42\1\325\1\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\10\10\1\326\1\10\1\0\7\10\1\327\1\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\7\10\1\330\2\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\331"+ - "\1\0\1\10\1\0\12\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\332\1\0\1\10"+ - "\1\0\12\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10"+ - "\1\0\2\10\1\333\6\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\334\1\0\1\10\1\0\12\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\7\10\1\335\2\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\10\10\1\336\1\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\3\10\1\337\6\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\4\10\1\340\5\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\341\1\0\1\10\1\0\12\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\12\10\1\0\4\10\1\342\4\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\343"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\12\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\3\10\1\344\6\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\3\10\1\345\6\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\4\10\1\346\5\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\347\1\0\1\10"+ - "\1\0\12\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\3\10"+ - "\1\350\6\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10"+ - "\1\0\5\10\1\351\3\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\352\7\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10"+ - "\1\0\1\10\1\353\7\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\10\10"+ - "\1\354\1\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10"+ - "\1\0\5\10\1\355\3\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\7\0\1\356\4\0\1\356\2\0\1\356"+ - "\1\0\1\356\2\0\1\356\6\0\1\356\2\0\1\356"+ - "\2\0\1\356\16\0\1\356\16\0\1\357\4\0\1\357"+ - "\2\0\1\357\1\0\1\357\2\0\1\357\6\0\1\357"+ - "\2\0\1\357\2\0\1\357\16\0\1\357\16\0\1\247"+ - "\4\0\1\247\43\0\1\247\3\0\1\360\67\0\1\360"+ - "\12\0\1\251\1\361\3\0\1\251\43\0\1\251\14\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\10\42\1\362\1\42\1\0"+ - "\7\42\1\363\1\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\3\42\1\364"+ - "\6\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\7\0\1\254\4\0\1\254\43\0\1\254\14\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\12\42\1\0\4\42\1\365"+ - "\4\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\7\42\1\366\2\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\7\42\1\367\2\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\12\42\1\0\6\42\1\370"+ - "\2\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\12\42\1\0\10\42\1\371"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\3\42\1\372\6\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\1\42\1\373\7\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\374"+ - "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\375\1\0\1\42"+ - "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\376\1\0\1\42\1\0\12\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\5\42\1\377\4\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\11\42\1\u0100\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\12\42\1\0\1\u0101\10\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42"+ - "\5\0\1\u0102\1\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\u0103\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\4\42\1\u0104\5\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\4\42\1\u0105\4\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\3\42\1\u0106\6\42\1\0\11\42\1\0\2\42\5\0"+ - "\1\u0107\1\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\12\42\1\0\4\42\1\u0108\4\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\3\42\1\u0109\6\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\3\42\1\u010a\6\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\6\42\1\u010b\3\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\4\42\1\u010c\5\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\u010d\7\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\u010e"+ - "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42"+ - "\1\u010f\6\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42"+ - "\1\u0110\1\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\7\42"+ - "\1\u0111\2\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\u0112\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\12\42\1\0\1\42"+ - "\1\u0113\7\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\1\42\1\u0114\10\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\12\42\1\0\11\42"+ - "\1\0\2\42\5\0\1\42\1\u0115\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\3\42\1\u0116\6\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\u0117\1\0\1\42\1\0\12\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\6\42\1\u0118\3\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0"+ - "\1\u0119\1\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\12\42\1\0\1\u011a\10\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\5\42\1\u011b\3\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\u011c\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\0"+ - "\1\u011d\10\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\5\10\1\u011e\4\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\1\10\1\u011f\1\10"+ - "\1\u0120\6\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\u0121\7\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\6\10"+ - "\1\u0122\3\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\7\10"+ - "\1\u0123\2\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\u0124\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\u0125\1\0\1\10\1\0\12\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\3\10\1\u0126\6\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\u0127"+ - "\1\0\1\10\1\0\12\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\7\10\1\u0128\2\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\10\10\1\u0129\1\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\5\10\1\u012a\4\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\4\10\1\u012b\5\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\11\10\1\u012c\1\0\11\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0"+ - "\4\10\1\u012d\5\10\1\0\11\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0"+ - "\12\10\1\0\4\10\1\u012e\4\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\u012f\1\0\1\10\1\0"+ - "\12\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\47\0\1\u0130\25\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\1\u0131\10\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\5\42"+ - "\1\u0132\4\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\4\42"+ - "\1\u0133\5\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\4\42"+ - "\1\u0134\5\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42"+ - "\1\u0135\6\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\7\42"+ - "\1\u0136\2\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42"+ - "\1\u0137\1\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42"+ - "\1\u0138\1\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\u0139\1\0\1\42\1\0\12\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\u013a\1\0\1\42\1\0\12\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\6\42\1\u013b\3\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\11\42\1\u013c\1\0\1\42\1\u013d"+ - "\7\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\11\42\1\u013e\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\11\42\1\u013f\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0"+ - "\1\u0140\1\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\6\42\1\u0141\3\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\7\42\1\u0142\2\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\12\42\1\0\10\42\1\u0143\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\u0144\1\0\1\42\1\0"+ - "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\12\42\1\0"+ - "\1\u0145\10\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\u0146\1\0\1\42\1\0\12\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\4\42\1\u0147\5\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\4\42\1\u0148\5\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\10\42\1\u0149\1\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\u014a"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\4\42\1\u014b\5\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\12\42\1\0\4\42\1\u014c\4\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\u014d\1\0\1\42"+ - "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42"+ - "\1\0\4\42\1\u014e\4\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\u014f\1\0\1\42\1\0\12\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\3\42\1\u0150\6\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\u0151\1\0\1\42\1\0\12\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\3\42\1\u0152\5\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\5\42\1\u0153\4\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\u0154\2\42\1\u0155\4\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\u0156\1\0\1\42\1\0\12\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\u0157"+ - "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\10\10\1\u0158\1\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\12\10\1\0\1\u0159\10\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0"+ - "\5\10\1\u015a\4\10\1\0\11\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0"+ - "\10\10\1\u015b\1\10\1\0\11\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0"+ - "\3\10\1\u015c\6\10\1\0\11\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0"+ - "\12\10\1\0\1\u015d\10\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\6\10"+ - "\1\u015e\3\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\1\10"+ - "\1\u015f\10\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\u0160\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\1\10\1\u0161\10\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\6\10\1\u0162\3\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\6\10\1\u0163\3\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\12\10\1\0\1\u0164"+ - "\10\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\10\1\0\1\10\1\0\6\10\1\u0165\3\10\1\0"+ - "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\10\1\0\1\10\1\0\12\10\1\0\1\u0166\10\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\1\10\1\u0167\10\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\10\42\1\u0168\1\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\1\u0169\10\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\6\42\1\u016a\3\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\1\42\1\u016b\10\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\1\42\1\u016c\7\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\3\42\1\u016d\6\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\1\42\1\u016e\10\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\3\42\1\u016f\6\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\10\42\1\u0170\1\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\3\42\1\u0171\5\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\u0172\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\u0173\1\0\1\42\1\0"+ - "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\4\42\1\u0174"+ - "\5\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\10\42\1\u0175"+ - "\1\u0176\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\12\42\1\0"+ - "\5\42\1\u0177\3\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\2\42\1\u0178"+ - "\7\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\u0179\1\0\1\42\1\0\12\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\11\42\1\u017a\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\1\u017b\11\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\1\u017c\10\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\1\42\1\u017d\10\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\12\42\1\0\1\u017e\10\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\u017f\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\10\42\1\u0180"+ - "\1\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\12\42\1\0"+ - "\1\u0181\10\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\u0182\1\0\1\42\1\0\12\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\11\42\1\u0183\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\4\42\1\u0184\5\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\1\42\1\u0185\7\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\4\42\1\u0186\5\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\1\42\1\u0187"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\10\42\1\u0188\1\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\u0189\7\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\10\42\1\u018a\1\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\3\10\1\u018b\6\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\u018c\7\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\1\10\1\u018d\10\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\4\10\1\u018e\5\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\7\10\1\u018f\2\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\10\10\1\u0190\1\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\3\10\1\u0191\6\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\u0192\1\0\1\10"+ - "\1\0\12\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\5\10"+ - "\1\u0193\4\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\1\10"+ - "\1\u0194\10\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\10\10"+ - "\1\u0195\1\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\7\10"+ - "\1\u0196\2\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\5\10"+ - "\1\u0197\4\10\1\0\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42"+ - "\1\u0198\6\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42"+ - "\1\u0199\1\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\4\42"+ - "\1\u019a\5\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\u019b\1\0\1\42\1\0\12\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\u019c\1\0\1\42\1\0\12\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\3\42\1\u019d\6\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\u019e"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\10\42\1\u019f\1\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\11\42\1\u01a0\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\11\42\1\0\2\42\5\0\1\u01a1\1\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42"+ - "\1\0\1\u01a2\10\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\1\42\1\u01a3"+ - "\7\42\1\u01a4\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\u01a5\1\0\1\42\1\0\12\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\12\42\1\0\4\42"+ - "\1\u01a6\4\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\10\42\1\u01a7\1\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\6\42\1\u01a8\3\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\2\42\1\u01a9\7\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\u01aa\1\0\1\42\1\0\12\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\4\42\1\u01ab\4\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\5\42\1\u01ac\4\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\u01ad"+ - "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\6\42\1\u01ae\3\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\6\42\1\u01af\3\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\11\42\1\u01b0\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\3\42\1\u01b1\6\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0"+ - "\10\10\1\u01b2\1\10\1\0\11\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\u01b3\1\0\1\10\1\0"+ - "\12\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\0"+ - "\6\10\1\u01b4\2\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\5\10\1\u01b5"+ - "\4\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\u01b6\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\0"+ - "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\u01b7\1\0\1\10\1\0\12\10\1\0\11\10\1\0"+ - "\2\10\5\0\2\10\6\0\1\10\5\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\74\1\10\2\0\1\10\1\0"+ - "\1\10\1\0\6\10\1\u01b8\3\10\1\0\11\10\1\0"+ - "\2\10\5\0\2\10\6\0\1\10\5\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\74\1\10\2\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\u01b9\7\10\1\0\11\10\1\0"+ - "\2\10\5\0\2\10\6\0\1\10\5\0\1\10\1\0"+ - "\1\10\1\0\2\10\1\74\1\10\2\0\1\u01ba\1\0"+ - "\1\10\1\0\12\10\1\0\11\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0"+ - "\12\10\1\0\4\10\1\u01bb\4\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0"+ - "\12\10\1\0\5\10\1\u01bc\3\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\10\42\1\u01bd\1\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\u01be\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\3\42\1\u01bf"+ - "\6\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\4\42\1\u01c0"+ - "\1\42\1\u01c1\3\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\6\42\1\u01c2\3\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\u01c3\1\0\1\42\1\0"+ - "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\u01c4\1\0\1\42\1\0\12\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\1\42\1\u01c5\10\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\11\42\1\u01c6\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\u01c7"+ - "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\3\42\1\u01c8\6\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\12\42\1\0\1\42\1\u01c9\7\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\7\42\1\u01ca\2\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\12\42\1\0\4\42\1\u01cb\4\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\1\42\1\u01cc\10\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\7\42\1\u01cd\2\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\11\42\1\u01ce\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\10\42\1\u01cf\1\42\1\0\4\42\1\u01d0\4\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\6\42\1\u01d1\3\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\11\42\1\u01d2\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\323\1\0\1\42"+ - "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42"+ - "\1\u01d3\1\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\4\42"+ - "\1\u01d4\5\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10"+ - "\1\0\1\u01d5\10\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\6\10\1\u01d6"+ - "\3\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\u01d7\1\0\1\10\1\0\12\10\1\0"+ - "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\10\1\0\1\10\1\0\12\10\1\0\1\u01d8\10\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10"+ - "\1\0\1\10\1\0\3\10\1\u01d9\6\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10"+ - "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\u01da"+ - "\1\0\1\10\1\0\12\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\6\10\1\u01db\3\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\u01dc\1\0\1\42"+ - "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\6\42"+ - "\1\u01dd\3\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\6\42"+ - "\1\u01de\3\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42"+ - "\1\u01df\1\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42"+ - "\1\u01e0\1\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42"+ - "\1\0\1\u01e1\10\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\u01e2\1\0\1\42\1\0\12\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\u01e3\1\0\1\42\1\0\12\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\4\42\1\u01e4\5\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\5\42\1\u01e5\3\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\3\42\1\u01e6\6\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\10\42\1\u01e7\1\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\u01e8\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\5\42\1\u01e9\4\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\10\42\1\u01ea\1\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\u01eb\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\5\42\1\u01ec"+ - "\4\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\u01ed\1\0\1\10\1\0\12\10\1\0"+ - "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\u01ee\1\0\1\10\1\0\3\10\1\u01ef\3\10\1\u01f0"+ - "\2\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\6\10\1\u01f1"+ - "\3\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\7\10\1\u01f2"+ - "\2\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\0"+ - "\1\u01f3\10\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\3\10\1\u01f4\6\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\10\42\1\u01f5\1\42"+ - "\1\0\4\42\1\u01f6\4\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42"+ - "\1\u01f7\1\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42"+ - "\1\u01f8\6\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\u01f9\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\u01fa\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\12\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\6\42\1\u01fb\3\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\7\42\1\u01fc\2\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\10\42\1\u01fd\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\u01fe\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\u01ff\1\0"+ - "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\3\42\1\u0200"+ - "\6\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\12\42\1\0"+ - "\11\42\1\0\2\42\5\0\1\u0201\1\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\42\1\0\1\42\1\0\6\42\1\u0202\3\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\2\10\1\u0203\7\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\6\10\1\u0204\3\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\10\10\1\u0205\1\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\3\10\1\u0206\6\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\7\10\1\u0207\2\10"+ - "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\u0208\1\0\1\10\1\0\12\10\1\0\11\10"+ - "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\10\42\1\u0209\1\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\u020a"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\u020b\1\0\1\42"+ - "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\u020c\1\0\1\42\1\0\12\42"+ - "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42"+ - "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\u020d\1\0\1\42\1\0\12\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\7\42\1\u020e\1\u020f\1\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\3\42\1\u0210\6\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\10\42\1\u0211\1\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\u0212\1\0\1\42\1\0\12\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\4\42\1\u0213\4\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\u0214\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\6\42\1\u0215\3\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0"+ - "\10\42\1\u0216\1\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0"+ - "\3\10\1\u0217\6\10\1\0\11\10\1\0\2\10\5\0"+ - "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0"+ - "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0"+ - "\12\10\1\0\1\u0218\10\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\11\10"+ - "\1\u0219\1\0\11\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\10\10\1\u021a"+ - "\1\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\2\10\1\u021b"+ - "\7\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0"+ - "\1\10\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\u021c\1\0\1\42\1\0\12\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\11\42\1\u021d\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\7\42\1\u021e\2\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\7\42\1\u021f\2\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\u0220"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\3\42\1\u0221\6\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42"+ - "\1\0\6\42\1\u0222\3\42\1\0\11\42\1\0\2\42"+ - "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42"+ - "\1\0\2\42\1\0\1\42\2\0\1\u0223\1\0\1\42"+ - "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\1\42"+ - "\1\u0224\10\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42"+ - "\1\u0225\1\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42"+ - "\1\0\4\42\1\u0226\4\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10"+ - "\1\0\7\10\1\u0227\1\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10"+ - "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10"+ - "\1\u0228\11\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\12\10\1\0\1\10"+ - "\1\u0229\7\10\1\0\2\10\5\0\2\10\6\0\1\10"+ - "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10"+ - "\2\0\1\10\1\0\1\10\1\0\11\10\1\u022a\1\0"+ - "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\10\1\0\1\10\1\0\3\10\1\u022b\6\10\1\0"+ - "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\7\42\1\u022c\2\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\6\42\1\u022d\3\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\u022e\7\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\u022f\7\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\u0230\1\0\1\42\1\0\12\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\4\42\1\u0231\5\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\3\42\1\u0232\6\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\3\42\1\u0233\6\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\u0234\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\7\0\1\u0235\4\0\1\u0236\43\0"+ - "\1\u0235\14\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\u0237\1\0\1\10\1\0\12\10\1\0"+ - "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\10\1\0\1\10\1\0\3\10\1\u0238\6\10\1\0"+ - "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0"+ - "\1\10\1\0\1\10\1\0\12\10\1\0\7\10\1\u0239"+ - "\1\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\u023a\7\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\10\42\1\u023b\1\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\10\42\1\u023c\1\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\10\42\1\u023d\1\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\7\42\1\u023e\2\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\5\42\1\u023f\4\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\42\1\0\1\42\1\0\7\42\1\u0240\2\42\1\0"+ - "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\u0241\1\0\1\42\1\0\12\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\u0242\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\7\0\1\u0235\3\0\1\u0243\1\u0235"+ - "\43\0\1\u0235\22\0\1\u0243\61\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\3\10\1\u0244\6\10\1\0\11\10\1\0\2\10"+ - "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10"+ - "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10"+ - "\1\0\12\10\1\u0245\11\10\1\0\2\10\5\0\2\10"+ - "\6\0\1\10\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42"+ - "\1\u0246\1\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42"+ - "\1\0\4\42\1\u0247\4\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\1\42"+ - "\1\u0248\10\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\1\42"+ - "\1\u0249\10\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\u024a\7\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\6\42"+ - "\1\u024b\3\42\1\0\11\42\1\0\2\42\5\0\2\42"+ - "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42"+ - "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42"+ - "\1\0\1\u024c\10\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\7\42\1\u024d"+ - "\2\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\10\1\0\1\10\1\0\2\10\1\74"+ - "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\u024e"+ - "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\7\0"+ - "\1\u024f\4\0\1\u0250\43\0\1\u024f\14\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\1\42\1\u0251\10\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0"+ - "\1\42\1\0\6\42\1\u0252\3\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0"+ - "\1\42\1\0\2\42\1\0\1\42\2\0\1\u0253\1\0"+ - "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0"+ - "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0"+ - "\2\42\1\0\1\42\2\0\1\u0254\1\0\1\42\1\0"+ - "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\10\42\1\u0255"+ - "\1\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0"+ - "\1\42\2\0\1\42\1\0\1\42\1\0\6\42\1\u0256"+ - "\3\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0"+ - "\1\42\7\0\1\u0257\4\0\1\u0258\43\0\1\u0257\16\0"+ - "\1\u024f\3\0\1\u0259\1\u024f\43\0\1\u024f\22\0\1\u0259"+ - "\61\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42"+ - "\2\0\1\u025a\1\0\1\42\1\0\12\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\7\42\1\u025b\2\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\1\42\1\u025c\10\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42"+ - "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42"+ - "\1\0\1\42\1\0\7\42\1\u025d\2\42\1\0\11\42"+ - "\1\0\2\42\5\0\2\42\6\0\1\42\7\0\1\u0257"+ - "\3\0\1\u025e\1\u0257\43\0\1\u0257\22\0\1\u025e\61\0"+ - "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0"+ - "\1\u025f\1\0\1\42\1\0\12\42\1\0\11\42\1\0"+ - "\2\42\5\0\2\42\6\0\1\42"; + private static final String ZZ_ROWMAP_PACKED_0 + = "\0\0\0\70\0\160\0\250\0\340\0\u0118\0\u0150\0\u0188" + + "\0\u01c0\0\u01f8\0\u0230\0\u0268\0\u02a0\0\u02d8\0\u0310\0\u0348" + + "\0\u0380\0\u03b8\0\u03f0\0\u0428\0\u0460\0\u0498\0\250\0\u04d0" + + "\0\250\0\u0508\0\250\0\u0540\0\250\0\u0578\0\250\0\u05b0" + + "\0\250\0\u05e8\0\u0620\0\u0658\0\u0690\0\u06c8\0\u0700\0\u0738" + + "\0\u0770\0\u07a8\0\u07e0\0\u0818\0\u0850\0\u0888\0\u08c0\0\u08f8" + + "\0\u0930\0\u0968\0\u09a0\0\u09d8\0\250\0\u0a10\0\250\0\250" + + "\0\250\0\250\0\250\0\250\0\u0a48\0\u0a80\0\u0ab8\0\u0af0" + + "\0\u0b28\0\u0b60\0\u0b98\0\u0bd0\0\u0c08\0\u0c40\0\u0c78\0\u0cb0" + + "\0\u0ce8\0\u0d20\0\u0d58\0\u0d90\0\u0dc8\0\u0e00\0\u0e38\0\u0e70" + + "\0\u0ea8\0\u0ee0\0\250\0\250\0\250\0\u0f18\0\250\0\250" + + "\0\250\0\250\0\u0f50\0\250\0\250\0\250\0\u0f88\0\u0fc0" + + "\0\u0ff8\0\u1030\0\u1068\0\u10a0\0\u0620\0\u0690\0\u10d8\0\u1110" + + "\0\u1148\0\u1180\0\u11b8\0\u11f0\0\u05e8\0\u1228\0\u1260\0\u1298" + + "\0\u12d0\0\u1308\0\u1340\0\u1378\0\u13b0\0\u13e8\0\u1420\0\u1458" + + "\0\u1490\0\u14c8\0\u1500\0\u1538\0\u1570\0\u15a8\0\u15e0\0\u1618" + + "\0\u1650\0\u1688\0\u16c0\0\u16f8\0\u1730\0\u1768\0\u17a0\0\u17d8" + + "\0\u1810\0\u1848\0\u1880\0\u18b8\0\u18f0\0\u1928\0\u1960\0\u0188" + + "\0\u1998\0\u19d0\0\u1a08\0\u1a40\0\u1a78\0\u1ab0\0\u0188\0\u1ae8" + + "\0\u1b20\0\u1b58\0\u1b90\0\u1bc8\0\u1c00\0\u1c38\0\u1c70\0\u1ca8" + + "\0\u1ce0\0\u1d18\0\u1d50\0\u1d88\0\u1dc0\0\u1df8\0\u1e30\0\u1e68" + + "\0\u1ea0\0\u1ed8\0\u1f10\0\u1f48\0\u1f48\0\u1f80\0\u05e8\0\u1fb8" + + "\0\u1ff0\0\u2028\0\u2060\0\u2098\0\u20d0\0\u2108\0\u2140\0\u2178" + + "\0\u21b0\0\u21e8\0\u2220\0\u2258\0\u2290\0\u22c8\0\u2300\0\u2338" + + "\0\u2370\0\u23a8\0\u23e0\0\u2418\0\u2450\0\u2488\0\u24c0\0\u24f8" + + "\0\u2530\0\u2568\0\u25a0\0\u25d8\0\u2610\0\u2648\0\u2680\0\u26b8" + + "\0\u26f0\0\u2728\0\u2760\0\u2798\0\u27d0\0\u2808\0\u2840\0\u2878" + + "\0\u28b0\0\u28e8\0\u0188\0\u0188\0\u2920\0\u2958\0\u2990\0\u29c8" + + "\0\u0188\0\u2a00\0\u0188\0\u2a38\0\u2a70\0\u2aa8\0\u0188\0\u2ae0" + + "\0\u2b18\0\u2b50\0\u0188\0\u2b88\0\u2bc0\0\250\0\u0f18\0\250" + + "\0\u2bf8\0\u2c30\0\u2c68\0\u2ca0\0\u2cd8\0\u2d10\0\u2d48\0\u2d80" + + "\0\u2db8\0\u2df0\0\u2e28\0\u05e8\0\u2e60\0\u2e98\0\u2ed0\0\u2f08" + + "\0\u2f40\0\u2f78\0\u2fb0\0\u2fe8\0\u05e8\0\u3020\0\u3058\0\u3090" + + "\0\u30c8\0\u3100\0\u3138\0\u3170\0\u31a8\0\u31e0\0\u3218\0\u3250" + + "\0\u3288\0\u05e8\0\u05e8\0\u32c0\0\u05e8\0\u32f8\0\u3330\0\u3368" + + "\0\u33a0\0\u05e8\0\u33d8\0\u3410\0\u3448\0\u3480\0\u34b8\0\u34f0" + + "\0\u3528\0\u3560\0\u0188\0\u3598\0\u35d0\0\u0188\0\u3608\0\u3640" + + "\0\u3678\0\u36b0\0\u36e8\0\u3720\0\u3758\0\u3790\0\u0188\0\250" + + "\0\u37c8\0\u3800\0\u3838\0\u3870\0\u05e8\0\u05e8\0\u38a8\0\u38e0" + + "\0\u3918\0\u3950\0\u3988\0\u39c0\0\u39f8\0\u3a30\0\u3a68\0\u3aa0" + + "\0\u3ad8\0\u3b10\0\u3b48\0\u3b80\0\u3bb8\0\u3bf0\0\u3c28\0\u3c60" + + "\0\u3c98\0\u3cd0\0\u3d08\0\u3d40\0\u3d78\0\u05e8\0\u05e8\0\u3db0" + + "\0\u3de8\0\u3e20\0\u3e58\0\u3e90\0\u3ec8\0\u05e8\0\u3f00\0\u3f38" + + "\0\u0188\0\u3f70\0\u3fa8\0\u3fe0\0\u4018\0\u4050\0\u4088\0\u40c0" + + "\0\u40f8\0\u4130\0\u4168\0\u0188\0\u41a0\0\u0188\0\u41d8\0\u4210" + + "\0\u05e8\0\u4248\0\u4280\0\u42b8\0\u42f0\0\u4328\0\u05e8\0\u4360" + + "\0\u4398\0\u43d0\0\u4408\0\u4440\0\u4478\0\u44b0\0\u44e8\0\u4520" + + "\0\u05e8\0\u05e8\0\u4558\0\u05e8\0\u4590\0\u05e8\0\u45c8\0\u4600" + + "\0\u05e8\0\u05e8\0\u05e8\0\u4638\0\u4670\0\u46a8\0\u46e0\0\u4718" + + "\0\u4750\0\u05e8\0\u4788\0\u47c0\0\u47f8\0\u4830\0\u0188\0\u4868" + + "\0\u48a0\0\u48d8\0\u4910\0\u4948\0\u4980\0\u0188\0\u49b8\0\u49f0" + + "\0\u4a28\0\u4a60\0\u4a98\0\u4ad0\0\u4b08\0\u4b40\0\u4b78\0\u05e8" + + "\0\u4bb0\0\u4be8\0\u4c20\0\u4c58\0\u4c90\0\u4cc8\0\u4d00\0\u4d38" + + "\0\u4d70\0\u4da8\0\u05e8\0\u4de0\0\u4e18\0\u4e50\0\u05e8\0\u4e88" + + "\0\u4ec0\0\u0188\0\u4ef8\0\u0188\0\u4f30\0\u4f68\0\u4fa0\0\u4fd8" + + "\0\u5010\0\u0188\0\u0188\0\u5048\0\u05e8\0\u5080\0\u50b8\0\u50f0" + + "\0\u5128\0\u5160\0\u5198\0\u05e8\0\u51d0\0\u5208\0\u05e8\0\u5240" + + "\0\u5278\0\u52b0\0\u52e8\0\u5320\0\u05e8\0\u5358\0\u05e8\0\u5390" + + "\0\u05e8\0\u05e8\0\u53c8\0\u5400\0\u5438\0\u5470\0\u0188\0\u54a8" + + "\0\u54e0\0\u5518\0\u5550\0\u5588\0\u55c0\0\u55f8\0\u5630\0\u5668" + + "\0\u56a0\0\u05e8\0\u56d8\0\u5710\0\u5748\0\u05e8\0\u5780\0\u05e8" + + "\0\u57b8\0\u05e8\0\u57f0\0\u5828\0\u5860\0\u5898\0\u58d0\0\u5908" + + "\0\u5940\0\u0188\0\u5978\0\u0188\0\u05e8\0\u59b0\0\u59e8\0\u5a20" + + "\0\u5a58\0\u5a90\0\u5ac8\0\u5b00\0\u5b38\0\u5b70\0\u5ba8\0\u5be0" + + "\0\u5c18\0\u5c50\0\u5c88\0\u5cc0\0\u5cf8\0\u5d30\0\u0188\0\u5d68" + + "\0\u05e8\0\u5da0\0\u5dd8\0\u5e10\0\u5e48\0\u05e8\0\u5e80\0\u05e8" + + "\0\u5eb8\0\u5ef0\0\u5f28\0\u5f60\0\u5f98\0\u5fd0\0\u6008\0\u6040" + + "\0\u6078\0\u60b0\0\u60e8\0\u6120\0\u6158\0\u6190\0\u61c8\0\u6200" + + "\0\u6238\0\u6270\0\u05e8\0\u62a8\0\u62e0\0\u05e8\0\u0188\0\u6318" + + "\0\u6350\0\u6388\0\u63c0\0\u63f8\0\u6430\0\u6468\0\u64a0\0\u64d8" + + "\0\u6510\0\u6548\0\u6580\0\u65b8\0\u65f0\0\u6628\0\u6660\0\u6698" + + "\0\u0188\0\u66d0\0\u6708\0\u6740\0\u6778\0\u67b0\0\u67e8\0\u05e8" + + "\0\u6820\0\u6858\0\250\0\u6890\0\u68c8\0\u6900\0\u6938\0\u6970" + + "\0\u69a8\0\u69e0\0\u05e8\0\u6a18\0\u05e8\0\u6a50\0\u6a88\0\u6ac0" + + "\0\u6af8\0\u6b30\0\u05e8\0\u05e8\0\u6b68\0\u6ba0\0\u6bd8\0\u6c10" + + "\0\250\0\u05e8\0\u05e8\0\u6c48\0\u05e8\0\250\0\u05e8"; - private static int [] zzUnpackTrans() { - int [] result = new int[27776]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackRowMap() { + int[] result = new int[607]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\1\11\22\1\1\11\1\1\1\11\1\1\1\11"+ - "\1\1\1\11\1\1\1\11\1\1\1\11\23\1\1\11"+ - "\1\1\6\11\26\1\3\11\1\1\4\11\1\1\3\11"+ - "\1\1\1\0\3\1\1\0\1\1\1\0\76\1\5\0"+ - "\3\1\1\0\100\1\1\11\1\0\1\11\1\0\76\1"+ - "\1\11\367\1\1\0\14\1\2\0\14\1\1\11\1\1"+ - "\1\0\10\1\3\0\6\1\2\0\1\11\4\1\1\11"+ - "\1\1"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[607]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + private static int zzUnpackRowMap(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; } - return j; - } - /** the input device */ - private java.io.Reader zzReader; + /** + * The transition table of the DFA + */ + private static final int[] ZZ_TRANS = zzUnpackTrans(); - /** the current state of the DFA */ - private int zzState; + private static final String ZZ_TRANS_PACKED_0 + = "\3\4\1\5\1\6\1\7\3\4\1\10\5\4\1\11" + + "\1\4\1\12\1\4\1\10\1\13\1\14\1\15\1\16" + + "\1\17\1\20\1\21\1\10\1\22\1\6\1\23\2\10" + + "\1\24\1\25\3\10\1\26\1\4\2\10\5\4\1\10" + + "\6\4\1\6\1\4\1\27\1\30\1\31\17\27\1\32" + + "\24\27\1\33\20\27\1\4\1\34\1\35\1\5\1\4" + + "\1\36\1\37\1\40\1\41\1\42\2\4\1\43\1\44" + + "\1\45\1\46\1\4\1\42\1\4\1\42\1\47\1\50" + + "\1\51\1\52\1\53\1\54\1\55\1\42\1\56\1\4" + + "\1\57\1\60\1\42\1\61\1\42\1\62\1\42\1\63" + + "\1\64\1\65\1\66\1\42\1\67\1\70\1\71\1\72" + + "\1\73\1\42\1\40\7\4\70\0\1\5\2\0\65\5" + + "\4\0\1\6\30\0\1\6\30\0\1\6\6\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\75" + + "\1\0\1\10\1\0\10\10\1\76\1\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\12\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\1\77\5\10\1\100\3\10\1\0\11\10\1\0" + + "\2\10\5\0\2\10\6\0\1\10\5\0\1\10\1\0" + + "\1\10\1\0\2\10\1\74\1\10\2\0\1\10\1\0" + + "\1\10\1\0\5\10\1\101\4\10\1\0\11\10\1\0" + + "\2\10\5\0\2\10\6\0\1\10\5\0\1\10\1\0" + + "\1\10\1\0\2\10\1\74\1\10\2\0\1\10\1\0" + + "\1\10\1\0\5\10\1\102\4\10\1\0\4\10\1\103" + + "\4\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\10\1\0\1\10\1\0\10\10\1\104\1\105\1\0" + + "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\10\1\0\1\10\1\0\11\10\1\106\1\0\2\10" + + "\1\107\6\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\110\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\3\10\1\111\2\10" + + "\1\112\3\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\2\10" + + "\1\113\7\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\10\10" + + "\1\114\1\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10" + + "\1\0\4\10\1\115\4\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\116\1\0\1\10\1\0\12\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\4\10\1\117\5\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\12\10\1\0\4\10" + + "\1\120\4\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\5\10\1\121\4\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\10\10\1\122\1\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\2\0\1\31\65\0\1\123\2\0\16\123\1\124\1\125" + + "\1\126\2\123\1\127\2\123\1\130\2\123\1\131\4\123" + + "\1\132\1\123\1\133\3\123\1\134\11\123\1\135\1\136" + + "\1\137\1\123\5\0\1\35\72\0\1\42\1\140\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\141\1\0\1\42" + + "\1\0\12\42\1\0\5\42\1\142\3\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\7\0\1\40\4\0\1\40" + + "\1\0\1\143\1\144\40\0\1\40\14\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\7\0\1\145\4\0\1\145\1\0" + + "\1\143\1\144\40\0\1\145\16\0\1\40\4\0\1\145" + + "\1\0\1\146\41\0\1\40\16\0\1\143\4\0\1\143" + + "\43\0\1\143\14\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\1\147" + + "\5\42\1\150\3\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\5\42\1\151\4\42\1\0\4\42\1\152\4\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\10\42\1\153\1\154\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\5\42\1\155\2\42\1\156\1\157\1\0" + + "\2\42\1\160\6\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\6\42\1\161" + + "\3\42\1\0\1\42\1\162\7\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\10\42\1\163\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\164\1\0\1\42\1\0\5\42" + + "\1\165\2\42\1\166\1\42\1\0\5\42\1\167\3\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\170" + + "\1\0\1\42\1\0\3\42\1\171\6\42\1\0\4\42" + + "\1\172\4\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\3\42\1\173\6\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\174\1\0\1\42\1\0\4\42\1\175\1\176" + + "\4\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\177\1\0\1\42\1\0\12\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\4\42\1\200\3\42\1\201" + + "\1\202\1\0\4\42\1\203\1\204\3\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\3\42\1\205\1\206\1\42\1\207\3\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\10\42\1\210\1\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\5\42\1\211\2\42\1\212" + + "\1\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\6\42\1\213" + + "\3\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\3\10\1\214" + + "\6\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\1\215\11\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\1\10\1\216\1\10" + + "\1\217\6\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10" + + "\1\0\1\220\10\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\0" + + "\1\221\10\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\12\10\1\0\1\222" + + "\10\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\10\1\0\1\10\1\0\10\10\1\223\1\10\1\0" + + "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\10\1\0\1\10\1\0\11\10\1\224\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\5\10\1\225\4\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\10\10\1\226\1\10\1\0\2\10" + + "\1\227\6\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\2\10\1\230\7\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\2\10\1\231\7\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\232\1\0\1\10\1\0\12\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\4\10\1\233\2\10\1\234\2\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\3\10\1\235\6\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\236\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\12\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\5\10\1\237\4\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\3\10\1\240\6\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\7\10\1\241\2\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\10\10\1\242\1\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\1\10\1\243\10\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\12\10\1\0\4\10\1\244\4\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\7\0\1\245" + + "\4\0\1\245\2\0\1\245\1\0\1\245\2\0\1\245" + + "\6\0\1\245\2\0\1\245\2\0\1\245\16\0\1\245" + + "\16\0\1\246\4\0\1\246\2\0\1\246\1\0\1\246" + + "\2\0\1\246\6\0\1\246\2\0\1\246\2\0\1\246" + + "\16\0\1\246\16\0\1\247\4\0\1\250\43\0\1\247" + + "\16\0\1\251\4\0\1\251\43\0\1\251\14\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\3\42\1\252\6\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\4\42\1\253\4\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\7\0\1\143" + + "\4\0\1\143\2\0\1\144\40\0\1\143\16\0\1\254" + + "\4\0\1\254\1\255\2\0\1\255\37\0\1\254\14\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\2\42\1\256\7\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\12\42\1\0\1\257\10\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\6\42\1\260\3\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\10\42\1\261\1\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\1\42\1\262\10\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\4\42\1\263\1\264\4\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\11\42\1\265\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\5\42\1\266\3\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\2\42\1\267\7\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\3\42\1\270\6\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\6\42\1\271\3\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\272" + + "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\273\1\0\1\42" + + "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\6\42" + + "\1\274\3\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\275\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42" + + "\1\276\6\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42" + + "\1\0\4\42\1\277\4\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42" + + "\1\300\4\42\1\301\1\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\10\42\1\302\1\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\5\42\1\303\4\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\12\42\1\0\11\42\1\0\1\304\1\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\1\42\1\305\10\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\7\42\1\306\2\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\5\42\1\307\3\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\3\42\1\310\6\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\6\42\1\311\3\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\4\42\1\312\4\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\5\42\1\313\4\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\10\42\1\314\1\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\6\42\1\315\3\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\3\42\1\316\5\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\6\42\1\317\3\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\1\320\5\42\1\321\2\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\7\42\1\322\2\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\4\42\1\323\5\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\12\42\1\0\4\42\1\324\4\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\10\42\1\325\1\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\10\10\1\326\1\10\1\0\7\10\1\327\1\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\7\10\1\330\2\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\331" + + "\1\0\1\10\1\0\12\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\332\1\0\1\10" + + "\1\0\12\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10" + + "\1\0\2\10\1\333\6\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\334\1\0\1\10\1\0\12\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\7\10\1\335\2\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\10\10\1\336\1\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\3\10\1\337\6\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\4\10\1\340\5\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\341\1\0\1\10\1\0\12\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\12\10\1\0\4\10\1\342\4\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\343" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\12\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\3\10\1\344\6\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\3\10\1\345\6\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\4\10\1\346\5\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\347\1\0\1\10" + + "\1\0\12\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\3\10" + + "\1\350\6\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10" + + "\1\0\5\10\1\351\3\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\2\10" + + "\1\352\7\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10" + + "\1\0\1\10\1\353\7\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\10\10" + + "\1\354\1\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10" + + "\1\0\5\10\1\355\3\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\7\0\1\356\4\0\1\356\2\0\1\356" + + "\1\0\1\356\2\0\1\356\6\0\1\356\2\0\1\356" + + "\2\0\1\356\16\0\1\356\16\0\1\357\4\0\1\357" + + "\2\0\1\357\1\0\1\357\2\0\1\357\6\0\1\357" + + "\2\0\1\357\2\0\1\357\16\0\1\357\16\0\1\247" + + "\4\0\1\247\43\0\1\247\3\0\1\360\67\0\1\360" + + "\12\0\1\251\1\361\3\0\1\251\43\0\1\251\14\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\10\42\1\362\1\42\1\0" + + "\7\42\1\363\1\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\3\42\1\364" + + "\6\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\7\0\1\254\4\0\1\254\43\0\1\254\14\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\12\42\1\0\4\42\1\365" + + "\4\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\7\42\1\366\2\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\7\42\1\367\2\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\12\42\1\0\6\42\1\370" + + "\2\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\12\42\1\0\10\42\1\371" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\3\42\1\372\6\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\1\42\1\373\7\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\374" + + "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\375\1\0\1\42" + + "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\376\1\0\1\42\1\0\12\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\5\42\1\377\4\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\11\42\1\u0100\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\12\42\1\0\1\u0101\10\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42" + + "\5\0\1\u0102\1\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\u0103\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\4\42\1\u0104\5\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\4\42\1\u0105\4\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\3\42\1\u0106\6\42\1\0\11\42\1\0\2\42\5\0" + + "\1\u0107\1\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\12\42\1\0\4\42\1\u0108\4\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\3\42\1\u0109\6\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\3\42\1\u010a\6\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\6\42\1\u010b\3\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\4\42\1\u010c\5\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\2\42\1\u010d\7\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\u010e" + + "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42" + + "\1\u010f\6\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42" + + "\1\u0110\1\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\7\42" + + "\1\u0111\2\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\u0112\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\12\42\1\0\1\42" + + "\1\u0113\7\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\1\42\1\u0114\10\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\12\42\1\0\11\42" + + "\1\0\2\42\5\0\1\42\1\u0115\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\3\42\1\u0116\6\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\u0117\1\0\1\42\1\0\12\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\6\42\1\u0118\3\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0" + + "\1\u0119\1\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\12\42\1\0\1\u011a\10\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\5\42\1\u011b\3\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\u011c\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\0" + + "\1\u011d\10\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\5\10\1\u011e\4\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\1\10\1\u011f\1\10" + + "\1\u0120\6\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\2\10" + + "\1\u0121\7\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\6\10" + + "\1\u0122\3\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\7\10" + + "\1\u0123\2\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\u0124\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\u0125\1\0\1\10\1\0\12\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\3\10\1\u0126\6\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\u0127" + + "\1\0\1\10\1\0\12\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\7\10\1\u0128\2\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\10\10\1\u0129\1\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\5\10\1\u012a\4\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\4\10\1\u012b\5\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\11\10\1\u012c\1\0\11\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0" + + "\4\10\1\u012d\5\10\1\0\11\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0" + + "\12\10\1\0\4\10\1\u012e\4\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\u012f\1\0\1\10\1\0" + + "\12\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\47\0\1\u0130\25\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\1\u0131\10\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\5\42" + + "\1\u0132\4\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\4\42" + + "\1\u0133\5\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\4\42" + + "\1\u0134\5\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42" + + "\1\u0135\6\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\7\42" + + "\1\u0136\2\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42" + + "\1\u0137\1\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42" + + "\1\u0138\1\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\u0139\1\0\1\42\1\0\12\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\u013a\1\0\1\42\1\0\12\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\6\42\1\u013b\3\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\11\42\1\u013c\1\0\1\42\1\u013d" + + "\7\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\11\42\1\u013e\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\11\42\1\u013f\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0" + + "\1\u0140\1\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\6\42\1\u0141\3\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\7\42\1\u0142\2\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\12\42\1\0\10\42\1\u0143\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\u0144\1\0\1\42\1\0" + + "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\12\42\1\0" + + "\1\u0145\10\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\u0146\1\0\1\42\1\0\12\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\4\42\1\u0147\5\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\4\42\1\u0148\5\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\10\42\1\u0149\1\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\u014a" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\4\42\1\u014b\5\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\12\42\1\0\4\42\1\u014c\4\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\u014d\1\0\1\42" + + "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42" + + "\1\0\4\42\1\u014e\4\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\u014f\1\0\1\42\1\0\12\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\3\42\1\u0150\6\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\u0151\1\0\1\42\1\0\12\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\3\42\1\u0152\5\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\5\42\1\u0153\4\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\2\42\1\u0154\2\42\1\u0155\4\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\u0156\1\0\1\42\1\0\12\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\u0157" + + "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\10\10\1\u0158\1\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\12\10\1\0\1\u0159\10\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0" + + "\5\10\1\u015a\4\10\1\0\11\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0" + + "\10\10\1\u015b\1\10\1\0\11\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0" + + "\3\10\1\u015c\6\10\1\0\11\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0" + + "\12\10\1\0\1\u015d\10\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\6\10" + + "\1\u015e\3\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\1\10" + + "\1\u015f\10\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\u0160\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\1\10\1\u0161\10\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\6\10\1\u0162\3\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\6\10\1\u0163\3\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\12\10\1\0\1\u0164" + + "\10\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\10\1\0\1\10\1\0\6\10\1\u0165\3\10\1\0" + + "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\10\1\0\1\10\1\0\12\10\1\0\1\u0166\10\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\1\10\1\u0167\10\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\10\42\1\u0168\1\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\1\u0169\10\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\6\42\1\u016a\3\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\1\42\1\u016b\10\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\1\42\1\u016c\7\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\3\42\1\u016d\6\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\1\42\1\u016e\10\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\3\42\1\u016f\6\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\10\42\1\u0170\1\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\3\42\1\u0171\5\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\u0172\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\u0173\1\0\1\42\1\0" + + "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\4\42\1\u0174" + + "\5\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\10\42\1\u0175" + + "\1\u0176\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\12\42\1\0" + + "\5\42\1\u0177\3\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\2\42\1\u0178" + + "\7\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\u0179\1\0\1\42\1\0\12\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\11\42\1\u017a\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\1\u017b\11\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\1\u017c\10\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\1\42\1\u017d\10\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\12\42\1\0\1\u017e\10\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\u017f\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\10\42\1\u0180" + + "\1\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\12\42\1\0" + + "\1\u0181\10\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\u0182\1\0\1\42\1\0\12\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\11\42\1\u0183\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\4\42\1\u0184\5\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\1\42\1\u0185\7\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\4\42\1\u0186\5\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\1\42\1\u0187" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\10\42\1\u0188\1\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\2\42\1\u0189\7\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\10\42\1\u018a\1\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\3\10\1\u018b\6\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\2\10\1\u018c\7\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\1\10\1\u018d\10\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\4\10\1\u018e\5\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\7\10\1\u018f\2\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\10\10\1\u0190\1\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\3\10\1\u0191\6\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\u0192\1\0\1\10" + + "\1\0\12\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\5\10" + + "\1\u0193\4\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\1\10" + + "\1\u0194\10\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\10\10" + + "\1\u0195\1\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\7\10" + + "\1\u0196\2\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\5\10" + + "\1\u0197\4\10\1\0\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42" + + "\1\u0198\6\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42" + + "\1\u0199\1\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\4\42" + + "\1\u019a\5\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\u019b\1\0\1\42\1\0\12\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\u019c\1\0\1\42\1\0\12\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\3\42\1\u019d\6\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\u019e" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\10\42\1\u019f\1\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\11\42\1\u01a0\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\11\42\1\0\2\42\5\0\1\u01a1\1\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42" + + "\1\0\1\u01a2\10\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\1\42\1\u01a3" + + "\7\42\1\u01a4\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\u01a5\1\0\1\42\1\0\12\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\12\42\1\0\4\42" + + "\1\u01a6\4\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\10\42\1\u01a7\1\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\6\42\1\u01a8\3\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\2\42\1\u01a9\7\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\u01aa\1\0\1\42\1\0\12\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\4\42\1\u01ab\4\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\5\42\1\u01ac\4\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\u01ad" + + "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\6\42\1\u01ae\3\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\6\42\1\u01af\3\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\11\42\1\u01b0\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\3\42\1\u01b1\6\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0" + + "\10\10\1\u01b2\1\10\1\0\11\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\u01b3\1\0\1\10\1\0" + + "\12\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\0" + + "\6\10\1\u01b4\2\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\5\10\1\u01b5" + + "\4\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\u01b6\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\0" + + "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\u01b7\1\0\1\10\1\0\12\10\1\0\11\10\1\0" + + "\2\10\5\0\2\10\6\0\1\10\5\0\1\10\1\0" + + "\1\10\1\0\2\10\1\74\1\10\2\0\1\10\1\0" + + "\1\10\1\0\6\10\1\u01b8\3\10\1\0\11\10\1\0" + + "\2\10\5\0\2\10\6\0\1\10\5\0\1\10\1\0" + + "\1\10\1\0\2\10\1\74\1\10\2\0\1\10\1\0" + + "\1\10\1\0\2\10\1\u01b9\7\10\1\0\11\10\1\0" + + "\2\10\5\0\2\10\6\0\1\10\5\0\1\10\1\0" + + "\1\10\1\0\2\10\1\74\1\10\2\0\1\u01ba\1\0" + + "\1\10\1\0\12\10\1\0\11\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0" + + "\12\10\1\0\4\10\1\u01bb\4\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0" + + "\12\10\1\0\5\10\1\u01bc\3\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\10\42\1\u01bd\1\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\u01be\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\3\42\1\u01bf" + + "\6\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\4\42\1\u01c0" + + "\1\42\1\u01c1\3\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\6\42\1\u01c2\3\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\u01c3\1\0\1\42\1\0" + + "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\u01c4\1\0\1\42\1\0\12\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\1\42\1\u01c5\10\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\11\42\1\u01c6\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\u01c7" + + "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\3\42\1\u01c8\6\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\12\42\1\0\1\42\1\u01c9\7\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\7\42\1\u01ca\2\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\12\42\1\0\4\42\1\u01cb\4\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\1\42\1\u01cc\10\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\7\42\1\u01cd\2\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\11\42\1\u01ce\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\10\42\1\u01cf\1\42\1\0\4\42\1\u01d0\4\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\6\42\1\u01d1\3\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\11\42\1\u01d2\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\323\1\0\1\42" + + "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42" + + "\1\u01d3\1\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\4\42" + + "\1\u01d4\5\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10" + + "\1\0\1\u01d5\10\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\6\10\1\u01d6" + + "\3\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\u01d7\1\0\1\10\1\0\12\10\1\0" + + "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\10\1\0\1\10\1\0\12\10\1\0\1\u01d8\10\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\10" + + "\1\0\1\10\1\0\3\10\1\u01d9\6\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\10" + + "\1\0\1\10\1\0\2\10\1\74\1\10\2\0\1\u01da" + + "\1\0\1\10\1\0\12\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\6\10\1\u01db\3\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\u01dc\1\0\1\42" + + "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\6\42" + + "\1\u01dd\3\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\6\42" + + "\1\u01de\3\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42" + + "\1\u01df\1\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42" + + "\1\u01e0\1\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42" + + "\1\0\1\u01e1\10\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\u01e2\1\0\1\42\1\0\12\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\u01e3\1\0\1\42\1\0\12\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\4\42\1\u01e4\5\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\5\42\1\u01e5\3\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\3\42\1\u01e6\6\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\10\42\1\u01e7\1\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\u01e8\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\5\42\1\u01e9\4\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\10\42\1\u01ea\1\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\u01eb\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\5\42\1\u01ec" + + "\4\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\u01ed\1\0\1\10\1\0\12\10\1\0" + + "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\u01ee\1\0\1\10\1\0\3\10\1\u01ef\3\10\1\u01f0" + + "\2\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\6\10\1\u01f1" + + "\3\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\7\10\1\u01f2" + + "\2\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\0" + + "\1\u01f3\10\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\3\10\1\u01f4\6\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\10\42\1\u01f5\1\42" + + "\1\0\4\42\1\u01f6\4\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42" + + "\1\u01f7\1\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\3\42" + + "\1\u01f8\6\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\u01f9\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\u01fa\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\12\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\6\42\1\u01fb\3\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\7\42\1\u01fc\2\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\10\42\1\u01fd\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\u01fe\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\u01ff\1\0" + + "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\3\42\1\u0200" + + "\6\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\12\42\1\0" + + "\11\42\1\0\2\42\5\0\1\u0201\1\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\42\1\0\1\42\1\0\6\42\1\u0202\3\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\2\10\1\u0203\7\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\6\10\1\u0204\3\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\10\10\1\u0205\1\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\3\10\1\u0206\6\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\7\10\1\u0207\2\10" + + "\1\0\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\u0208\1\0\1\10\1\0\12\10\1\0\11\10" + + "\1\0\2\10\5\0\2\10\6\0\1\10\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\10\42\1\u0209\1\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\u020a" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\u020b\1\0\1\42" + + "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\u020c\1\0\1\42\1\0\12\42" + + "\1\0\11\42\1\0\2\42\5\0\2\42\6\0\1\42" + + "\5\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\u020d\1\0\1\42\1\0\12\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\7\42\1\u020e\1\u020f\1\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\3\42\1\u0210\6\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\10\42\1\u0211\1\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\u0212\1\0\1\42\1\0\12\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\4\42\1\u0213\4\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\u0214\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\6\42\1\u0215\3\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\42\1\0\1\42\1\0" + + "\10\42\1\u0216\1\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0" + + "\3\10\1\u0217\6\10\1\0\11\10\1\0\2\10\5\0" + + "\2\10\6\0\1\10\5\0\1\10\1\0\1\10\1\0" + + "\2\10\1\74\1\10\2\0\1\10\1\0\1\10\1\0" + + "\12\10\1\0\1\u0218\10\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\11\10" + + "\1\u0219\1\0\11\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\10\10\1\u021a" + + "\1\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\2\10\1\u021b" + + "\7\10\1\0\11\10\1\0\2\10\5\0\2\10\6\0" + + "\1\10\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\u021c\1\0\1\42\1\0\12\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\11\42\1\u021d\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\7\42\1\u021e\2\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\7\42\1\u021f\2\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\u0220" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\12\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\3\42\1\u0221\6\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\42\1\0\1\42" + + "\1\0\6\42\1\u0222\3\42\1\0\11\42\1\0\2\42" + + "\5\0\2\42\6\0\1\42\5\0\1\42\1\0\1\42" + + "\1\0\2\42\1\0\1\42\2\0\1\u0223\1\0\1\42" + + "\1\0\12\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\1\42" + + "\1\u0224\10\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42" + + "\1\u0225\1\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42" + + "\1\0\4\42\1\u0226\4\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10" + + "\1\0\7\10\1\u0227\1\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\10\1\0\1\10\1\0\2\10" + + "\1\74\1\10\2\0\1\10\1\0\1\10\1\0\12\10" + + "\1\u0228\11\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\12\10\1\0\1\10" + + "\1\u0229\7\10\1\0\2\10\5\0\2\10\6\0\1\10" + + "\5\0\1\10\1\0\1\10\1\0\2\10\1\74\1\10" + + "\2\0\1\10\1\0\1\10\1\0\11\10\1\u022a\1\0" + + "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\10\1\0\1\10\1\0\3\10\1\u022b\6\10\1\0" + + "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\7\42\1\u022c\2\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\6\42\1\u022d\3\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\2\42\1\u022e\7\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\2\42\1\u022f\7\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\u0230\1\0\1\42\1\0\12\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\4\42\1\u0231\5\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\3\42\1\u0232\6\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\3\42\1\u0233\6\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\u0234\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\7\0\1\u0235\4\0\1\u0236\43\0" + + "\1\u0235\14\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\u0237\1\0\1\10\1\0\12\10\1\0" + + "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\10\1\0\1\10\1\0\3\10\1\u0238\6\10\1\0" + + "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\10\1\0\1\10\1\0\2\10\1\74\1\10\2\0" + + "\1\10\1\0\1\10\1\0\12\10\1\0\7\10\1\u0239" + + "\1\10\1\0\2\10\5\0\2\10\6\0\1\10\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\2\42\1\u023a\7\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\10\42\1\u023b\1\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\10\42\1\u023c\1\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\10\42\1\u023d\1\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\7\42\1\u023e\2\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\5\42\1\u023f\4\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\42\1\0\1\42\1\0\7\42\1\u0240\2\42\1\0" + + "\11\42\1\0\2\42\5\0\2\42\6\0\1\42\5\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\u0241\1\0\1\42\1\0\12\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\u0242\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\7\0\1\u0235\3\0\1\u0243\1\u0235" + + "\43\0\1\u0235\22\0\1\u0243\61\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\3\10\1\u0244\6\10\1\0\11\10\1\0\2\10" + + "\5\0\2\10\6\0\1\10\5\0\1\10\1\0\1\10" + + "\1\0\2\10\1\74\1\10\2\0\1\10\1\0\1\10" + + "\1\0\12\10\1\u0245\11\10\1\0\2\10\5\0\2\10" + + "\6\0\1\10\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\10\42" + + "\1\u0246\1\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42" + + "\1\0\4\42\1\u0247\4\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\1\42" + + "\1\u0248\10\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\1\42" + + "\1\u0249\10\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\2\42" + + "\1\u024a\7\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\6\42" + + "\1\u024b\3\42\1\0\11\42\1\0\2\42\5\0\2\42" + + "\6\0\1\42\5\0\1\42\1\0\1\42\1\0\2\42" + + "\1\0\1\42\2\0\1\42\1\0\1\42\1\0\12\42" + + "\1\0\1\u024c\10\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\7\42\1\u024d" + + "\2\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\10\1\0\1\10\1\0\2\10\1\74" + + "\1\10\2\0\1\10\1\0\1\10\1\0\12\10\1\u024e" + + "\11\10\1\0\2\10\5\0\2\10\6\0\1\10\7\0" + + "\1\u024f\4\0\1\u0250\43\0\1\u024f\14\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\1\42\1\u0251\10\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\42\1\0" + + "\1\42\1\0\6\42\1\u0252\3\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42\5\0\1\42\1\0" + + "\1\42\1\0\2\42\1\0\1\42\2\0\1\u0253\1\0" + + "\1\42\1\0\12\42\1\0\11\42\1\0\2\42\5\0" + + "\2\42\6\0\1\42\5\0\1\42\1\0\1\42\1\0" + + "\2\42\1\0\1\42\2\0\1\u0254\1\0\1\42\1\0" + + "\12\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\10\42\1\u0255" + + "\1\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\5\0\1\42\1\0\1\42\1\0\2\42\1\0" + + "\1\42\2\0\1\42\1\0\1\42\1\0\6\42\1\u0256" + + "\3\42\1\0\11\42\1\0\2\42\5\0\2\42\6\0" + + "\1\42\7\0\1\u0257\4\0\1\u0258\43\0\1\u0257\16\0" + + "\1\u024f\3\0\1\u0259\1\u024f\43\0\1\u024f\22\0\1\u0259" + + "\61\0\1\42\1\0\1\42\1\0\2\42\1\0\1\42" + + "\2\0\1\u025a\1\0\1\42\1\0\12\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\7\42\1\u025b\2\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\1\42\1\u025c\10\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\5\0\1\42" + + "\1\0\1\42\1\0\2\42\1\0\1\42\2\0\1\42" + + "\1\0\1\42\1\0\7\42\1\u025d\2\42\1\0\11\42" + + "\1\0\2\42\5\0\2\42\6\0\1\42\7\0\1\u0257" + + "\3\0\1\u025e\1\u0257\43\0\1\u0257\22\0\1\u025e\61\0" + + "\1\42\1\0\1\42\1\0\2\42\1\0\1\42\2\0" + + "\1\u025f\1\0\1\42\1\0\12\42\1\0\11\42\1\0" + + "\2\42\5\0\2\42\6\0\1\42"; - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + private static int[] zzUnpackTrans() { + int[] result = new int[27776]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + private static int zzUnpackTrans(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } - /** the textposition at the last accepting state */ - private int zzMarkedPos; - /** the current text position in the buffer */ - private int zzCurrentPos; + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - /** number of newlines encountered up to the start of the matched text */ - private int yyline; + private static final String ZZ_ATTRIBUTE_PACKED_0 + = "\3\0\1\11\22\1\1\11\1\1\1\11\1\1\1\11" + + "\1\1\1\11\1\1\1\11\1\1\1\11\23\1\1\11" + + "\1\1\6\11\26\1\3\11\1\1\4\11\1\1\3\11" + + "\1\1\1\0\3\1\1\0\1\1\1\0\76\1\5\0" + + "\3\1\1\0\100\1\1\11\1\0\1\11\1\0\76\1" + + "\1\11\367\1\1\0\14\1\2\0\14\1\1\11\1\1" + + "\1\0\10\1\3\0\6\1\2\0\1\11\4\1\1\11" + + "\1\1"; - /** the number of characters up to the start of the matched text */ - private int yychar; + private static int[] zzUnpackAttribute() { + int[] result = new int[607]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; + private static int zzUnpackAttribute(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; + /** + * the input device + */ + private java.io.Reader zzReader; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + /** + * the current state of the DFA + */ + private int zzState; - /** denotes if the user-EOF-code has already been executed */ - private boolean zzEOFDone; - - /** - * The number of occupied positions in zzBuffer beyond zzEndRead. - * When a lead/high surrogate has been read from the input stream - * into the final zzBuffer position, this will have a value of 1; - * otherwise, it will have a value of 0. - */ - private int zzFinalHighSurrogate = 0; + /** + * the current lexical state + */ + private int zzLexicalState = YYINITIAL; - /* user code: */ + /** + * this buffer contains the current text to be matched and is the source of + * the yytext() string + */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + /** + * the textposition at the last accepting state + */ + private int zzMarkedPos; + + /** + * the current text position in the buffer + */ + private int zzCurrentPos; + + /** + * startRead marks the beginning of the yytext() string in the buffer + */ + private int zzStartRead; + + /** + * endRead marks the last character in the buffer, that has been read from + * input + */ + private int zzEndRead; + + /** + * number of newlines encountered up to the start of the matched text + */ + private int yyline; + + /** + * the number of characters up to the start of the matched text + */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** + * zzAtEOF == true <=> the scanner is at the EOF + */ + private boolean zzAtEOF; + + /** + * denotes if the user-EOF-code has already been executed + */ + private boolean zzEOFDone; + + /** + * The number of occupied positions in zzBuffer beyond zzEndRead. When a + * lead/high surrogate has been read from the input stream into the final + * zzBuffer position, this will have a value of 1; otherwise, it will have a + * value of 0. + */ + private int zzFinalHighSurrogate = 0; + + /* user code: */ StringBuilder string = new StringBuilder(); boolean isMultiname = false; long multinameId = 0; @@ -1978,9 +2019,10 @@ public final class Flasm3Lexer { } ParsedSymbol last; - public ParsedSymbol lex() throws java.io.IOException, AVM2ParseException{ + + public ParsedSymbol lex() throws java.io.IOException, AVM2ParseException { ParsedSymbol ret = null; - if (!pushedBack.isEmpty()){ + if (!pushedBack.isEmpty()) { ret = last = pushedBack.pop(); } else { ret = last = yylex(); @@ -1988,872 +2030,1048 @@ public final class Flasm3Lexer { return ret; } - - - /** - * Creates a new scanner - * - * @param in the java.io.Reader to read input from. - */ - public Flasm3Lexer(java.io.Reader in) { - this.zzReader = in; - } - - - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char [] zzUnpackCMap(String packed) { - char [] map = new char[0x110000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 3870) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do map[j++] = value; while (--count > 0); - } - return map; - } - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public Flasm3Lexer(java.io.Reader in) { + this.zzReader = in; } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { - /* if not: blow it up */ - char newBuffer[] = new char[zzBuffer.length*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - } - - /* fill the buffer with new input */ - int requested = zzBuffer.length - zzEndRead; - int totalRead = 0; - while (totalRead < requested) { - int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); - if (numRead == -1) { - break; - } - totalRead += numRead; - } - - if (totalRead > 0) { - zzEndRead += totalRead; - if (totalRead == requested) { /* possibly more input available */ - if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { - --zzEndRead; - zzFinalHighSurrogate = 1; + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char[] zzUnpackCMap(String packed) { + char[] map = new char[0x110000]; + int i = 0; + /* index in packed string */ + int j = 0; + /* index in unpacked array */ + while (i < 3870) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do { + map[j++] = value; + } while (--count > 0); } - } - return false; + return map; } - // totalRead = 0: End of stream - return true; - } + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + /* first: make room (if you can) */ + if (zzStartRead > 0) { + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead - zzStartRead); - if (zzReader != null) - zzReader.close(); - } - - - /** - * Resets the scanner to read from a new input stream. - * Does not close the old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). - * Lexical state is set to ZZ_INITIAL. - * - * Internal scan buffer is resized down to its initial length, if it has grown. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - zzFinalHighSurrogate = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Returns the character at position pos from the - * matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. - * A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead+pos]; - } - - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos-zzStartRead; - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. - * This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if ( number > yylength() ) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ - public ParsedSymbol yylex() throws java.io.IOException, AVM2ParseException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; - - int [] zzTransL = ZZ_TRANS; - int [] zzRowMapL = ZZ_ROWMAP; - int [] zzAttrL = ZZ_ATTRIBUTE; - - while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar+= zzMarkedPosL-zzStartRead; - - boolean zzR = false; - int zzCh; - int zzCharCount; - for (zzCurrentPosL = zzStartRead ; - zzCurrentPosL < zzMarkedPosL ; - zzCurrentPosL += zzCharCount ) { - zzCh = Character.codePointAt(zzBufferL, zzCurrentPosL, zzMarkedPosL); - zzCharCount = Character.charCount(zzCh); - switch (zzCh) { - case '\u000B': - case '\u000C': - case '\u0085': - case '\u2028': - case '\u2029': - yyline++; - yycolumn = 0; - zzR = false; - break; - case '\r': - yyline++; - yycolumn = 0; - zzR = true; - break; - case '\n': - if (zzR) - zzR = false; - else { - yyline++; - yycolumn = 0; - } - break; - default: - zzR = false; - yycolumn += zzCharCount; + /* translate stored positions */ + zzEndRead -= zzStartRead; + zzCurrentPos -= zzStartRead; + zzMarkedPos -= zzStartRead; + zzStartRead = 0; } - } - if (zzR) { - // peek one character ahead if it is \n (if we have counted one line too much) - boolean zzPeek; - if (zzMarkedPosL < zzEndReadL) - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; - else if (zzAtEOF) - zzPeek = false; - else { - boolean eof = zzRefill(); - zzEndReadL = zzEndRead; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - if (eof) - zzPeek = false; - else - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { + /* if not: blow it up */ + char newBuffer[] = new char[zzBuffer.length * 2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; } - if (zzPeek) yyline--; - } - zzAction = -1; - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; + /* fill the buffer with new input */ + int requested = zzBuffer.length - zzEndRead; + int totalRead = 0; + while (totalRead < requested) { + int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); + if (numRead == -1) { + break; + } + totalRead += numRead; + } - // set up zzAction for empty match case: - int zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - } + if (totalRead > 0) { + zzEndRead += totalRead; + if (totalRead == requested) { + /* possibly more input available */ + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + --zzEndRead; + zzFinalHighSurrogate = 1; + } + } + return false; + } + // totalRead = 0: End of stream + return true; + } + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; + /* indicate end of file */ + zzEndRead = zzStartRead; + /* invalidate buffer */ + + if (zzReader != null) { + zzReader.close(); + } + } + + /** + * Resets the scanner to read from a new input stream. Does not close the + * old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). Lexical + * state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has + * grown. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + zzFinalHighSurrogate = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) { + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + } + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); + } + + /** + * Returns the character at position pos from the matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. A value from 0 to + * yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead + pos]; + } + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos - zzStartRead; + } + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of yypushback(int) and + * a match-all fallback rule) this method will only be called with things + * that "Can't Possibly Happen". If this method is called, something is + * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done in error + * fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. This number must + * not be greater than yylength()! + */ + public void yypushback(int number) { + if (number > yylength()) { + zzScanError(ZZ_PUSHBACK_2BIG); + } + + zzMarkedPos -= number; + } + + /** + * Resumes scanning until the next regular expression is matched, the end of + * input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public ParsedSymbol yylex() throws java.io.IOException, AVM2ParseException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char[] zzBufferL = zzBuffer; + char[] zzCMapL = ZZ_CMAP; + + int[] zzTransL = ZZ_TRANS; + int[] zzRowMapL = ZZ_ROWMAP; + int[] zzAttrL = ZZ_ATTRIBUTE; - zzForAction: { while (true) { - - if (zzCurrentPosL < zzEndReadL) { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; - if (zzNext == -1) break zzForAction; - zzState = zzNext; + zzMarkedPosL = zzMarkedPos; - zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ( (zzAttributes & 8) == 8 ) break zzForAction; - } + yychar += zzMarkedPosL - zzStartRead; + boolean zzR = false; + int zzCh; + int zzCharCount; + for (zzCurrentPosL = zzStartRead; + zzCurrentPosL < zzMarkedPosL; + zzCurrentPosL += zzCharCount) { + zzCh = Character.codePointAt(zzBufferL, zzCurrentPosL, zzMarkedPosL); + zzCharCount = Character.charCount(zzCh); + switch (zzCh) { + case '\u000B': + case '\u000C': + case '\u0085': + case '\u2028': + case '\u2029': + yyline++; + yycolumn = 0; + zzR = false; + break; + case '\r': + yyline++; + yycolumn = 0; + zzR = true; + break; + case '\n': + if (zzR) { + zzR = false; + } else { + yyline++; + yycolumn = 0; + } + break; + default: + zzR = false; + yycolumn += zzCharCount; + } + } + + if (zzR) { + // peek one character ahead if it is \n (if we have counted one line too much) + boolean zzPeek; + if (zzMarkedPosL < zzEndReadL) { + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + } else if (zzAtEOF) { + zzPeek = false; + } else { + boolean eof = zzRefill(); + zzEndReadL = zzEndRead; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + if (eof) { + zzPeek = false; + } else { + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + } + } + if (zzPeek) { + yyline--; + } + } + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + } + + zzForAction: + { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } else { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } + } + int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; + if (zzNext == -1) { + break zzForAction; + } + zzState = zzNext; + + zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ((zzAttributes & 8) == 8) { + break zzForAction; + } + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: { + } + case 116: + break; + case 2: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_COMMENT, yytext().substring(1)); + } + case 117: + break; + case 3: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_INSTRUCTION_NAME, yytext()); + } + case 118: + break; + case 4: { + for (int r = 0; r < repeatNum; r++) { + string.append(yytext()); + } + repeatNum = 1; + } + case 119: + break; + case 5: { + repeatNum = 1; + throw new AVM2ParseException("Unterminated string at end of line", yyline + 1); + } + case 120: + break; + case 6: { + yybegin(PARAMETERS); + repeatNum = 1; + // length also includes the trailing quote + if (isMultiname) { + return new ParsedSymbol(stringPos, ParsedSymbol.TYPE_MULTINAME, multinameId); + } else { + return new ParsedSymbol(stringPos, ParsedSymbol.TYPE_STRING, string.toString()); + } + } + case 121: + break; + case 7: { + yybegin(YYINITIAL); + } + case 122: + break; + case 8: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_IDENTIFIER, yytext()); + } + case 123: + break; + case 9: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_BRACKET_OPEN, yytext()); + } + case 124: + break; + case 10: { + try { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_INTEGER, Integer.parseInt((yytext()))); + } catch (NumberFormatException nfe) { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_FLOAT, Double.parseDouble((yytext()))); + } + } + case 125: + break; + case 11: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_BRACKET_CLOSE, yytext()); + } + case 126: + break; + case 12: { + isMultiname = false; + stringPos = yychar(); + yybegin(STRING); + string.setLength(0); + } + case 127: + break; + case 13: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_PARENT_OPEN, yytext()); + } + case 128: + break; + case 14: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_PARENT_CLOSE, yytext()); + } + case 129: + break; + case 15: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_LOWERTHAN, yytext()); + } + case 130: + break; + case 16: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_GREATERTHAN, yytext()); + } + case 131: + break; + case 17: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_COMMA, yytext()); + } + case 132: + break; + case 18: { + String s = yytext(); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_LABEL, s.substring(0, s.length() - 1)); + } + case 133: + break; + case 19: { + repeatNum = 1; + throw new AVM2ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 134: + break; + case 20: { + for (int r = 0; r < repeatNum; r++) { + string.append('\b'); + } + repeatNum = 1; + } + case 135: + break; + case 21: { + for (int r = 0; r < repeatNum; r++) { + string.append('\\'); + } + repeatNum = 1; + } + case 136: + break; + case 22: { + for (int r = 0; r < repeatNum; r++) { + string.append('\t'); + } + repeatNum = 1; + } + case 137: + break; + case 23: { + for (int r = 0; r < repeatNum; r++) { + string.append('\n'); + } + repeatNum = 1; + } + case 138: + break; + case 24: { + for (int r = 0; r < repeatNum; r++) { + string.append('\r'); + } + repeatNum = 1; + } + case 139: + break; + case 25: { + for (int r = 0; r < repeatNum; r++) { + string.append('\f'); + } + repeatNum = 1; + } + case 140: + break; + case 26: { + for (int r = 0; r < repeatNum; r++) { + string.append('\"'); + } + repeatNum = 1; + } + case 141: + break; + case 27: { + for (int r = 0; r < repeatNum; r++) { + string.append('\u00A7'); + } + repeatNum = 1; + } + case 142: + break; + case 28: { + for (int r = 0; r < repeatNum; r++) { + string.append('\''); + } + repeatNum = 1; + } + case 143: + break; + case 29: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_FLOAT, Double.parseDouble((yytext()))); + } + case 144: + break; + case 30: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_TO, yytext()); + } + case 145: + break; + case 31: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_END, yytext()); + } + case 146: + break; + case 32: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_TRY, yytext()); + } + case 147: + break; + case 33: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_BODY, yytext()); + } + case 148: + break; + case 34: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_CODE, yytext()); + } + case 149: + break; + case 35: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_TYPE, yytext()); + } + case 150: + break; + case 36: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_ITEM, yytext()); + } + case 151: + break; + case 37: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_NAME, yytext()); + } + case 152: + break; + case 38: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_FLAG, yytext()); + } + case 153: + break; + case 39: { + char val = (char) Integer.parseInt(yytext().substring(2), 16); + for (int r = 0; r < repeatNum; r++) { + string.append(val); + } + repeatNum = 1; + } + case 154: + break; + case 40: { + repeatNum = Integer.parseInt(yytext().substring(2, yytext().length() - 1)); + } + case 155: + break; + case 41: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_TRUE, yytext()); + } + case 156: + break; + case 42: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_TYPE, yytext()); + } + case 157: + break; + case 43: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_NAME, yytext()); + } + case 158: + break; + case 44: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_NULL, yytext()); + } + case 159: + break; + case 45: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_SLOT, yytext()); + } + case 160: + break; + case 46: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_FROM, yytext()); + } + case 161: + break; + case 47: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_UTF8, yytext()); + } + case 162: + break; + case 48: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_VOID, yytext()); + } + case 163: + break; + case 49: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_CLASS, yytext()); + } + case 164: + break; + case 50: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_PARAM, yytext()); + } + case 165: + break; + case 51: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_TRAIT, yytext()); + } + case 166: + break; + case 52: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_VALUE, yytext()); + } + case 167: + break; + case 53: { + isMultiname = true; + String s = yytext(); + stringPos = yychar(); + multinameId = Long.parseLong(s.substring(2, s.length() - 2)); + yybegin(STRING); + string.setLength(0); + } + case 168: + break; + case 54: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_CONST, yytext()); + } + case 169: + break; + case 55: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_FINAL, yytext()); + } + case 170: + break; + case 56: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_FALSE, yytext()); + } + case 171: + break; + case 57: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_QNAME, yytext()); + } + case 172: + break; + case 58: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_METHOD, yytext()); + } + case 173: + break; + case 59: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_SLOTID, yytext()); + } + case 174: + break; + case 60: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_DISPID, yytext()); + } + case 175: + break; + case 61: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_TARGET, yytext()); + } + case 176: + break; + case 62: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_NATIVE, yytext()); + } + case 177: + break; + case 63: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_SETTER, yytext()); + } + case 178: + break; + case 64: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_SEALED, yytext()); + } + case 179: + break; + case 65: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_DOUBLE, yytext()); + } + case 180: + break; + case 66: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_GETTER, yytext()); + } + case 181: + break; + case 67: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_QNAMEA, yytext()); + } + case 182: + break; + case 68: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_EXTENDS, yytext()); + } + case 183: + break; + case 69: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_RETURNS, yytext()); + } + case 184: + break; + case 70: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_INTEGER, yytext()); + } + case 185: + break; + case 71: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_RTQNAME, yytext()); + } + case 186: + break; + case 72: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_DECIMAL, yytext()); + } + case 187: + break; + case 73: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_UNKNOWN, yytext()); + } + case 188: + break; + case 74: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_METADATA_BLOCK, yytext()); + } + case 189: + break; + case 75: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_MAXSTACK, yytext()); + } + case 190: + break; + case 76: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_INSTANCE, yytext()); + } + case 191: + break; + case 77: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_OPTIONAL, yytext()); + } + case 192: + break; + case 78: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_METADATA, yytext()); + } + case 193: + break; + case 79: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_TYPENAME, yytext()); + } + case 194: + break; + case 80: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_OVERRIDE, yytext()); + } + case 195: + break; + case 81: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_SET_DXNS, yytext()); + } + case 196: + break; + case 82: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_RTQNAMEA, yytext()); + } + case 197: + break; + case 83: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_RTQNAMEL, yytext()); + } + case 198: + break; + case 84: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_FUNCTION, yytext()); + } + case 199: + break; + case 85: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_UINTEGER, yytext()); + } + case 200: + break; + case 86: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_PARAMNAME, yytext()); + } + case 201: + break; + case 87: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_MULTINAME, yytext()); + } + case 202: + break; + case 88: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_INTERFACE, yytext()); + } + case 203: + break; + case 89: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_NEED_REST, yytext()); + } + case 204: + break; + case 90: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_NAMESPACE, yytext()); + } + case 205: + break; + case 91: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_RTQNAMELA, yytext()); + } + case 206: + break; + case 92: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_IMPLEMENTS, yytext()); + } + case 207: + break; + case 93: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_LOCALCOUNT, yytext()); + } + case 208: + break; + case 94: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_MULTINAMEA, yytext()); + } + case 209: + break; + case 95: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_MULTINAMEL, yytext()); + } + case 210: + break; + case 96: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_PROTECTEDNS_BLOCK, yytext()); + } + case 211: + break; + case 97: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_MULTINAMELA, yytext()); + } + case 212: + break; + case 98: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_PROTECTEDNS, yytext()); + } + case 213: + break; + case 99: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_IGNORE_REST, yytext()); + } + case 214: + break; + case 100: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_NON_NULLABLE, yytext()); + } + case 215: + break; + case 101: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_HAS_OPTIONAL, yytext()); + } + case 216: + break; + case 102: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_MAXSCOPEDEPTH, yytext()); + } + case 217: + break; + case 103: { + yybegin(PARAMETERS); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_INITSCOPEDEPTH, yytext()); + } + case 218: + break; + case 104: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_NEED_ARGUMENTS, yytext()); + } + case 219: + break; + case 105: { + String s = yytext(); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_EXCEPTION_END, Integer.parseInt(s.substring(13, s.length() - 1))); + } + case 220: + break; + case 106: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_NEED_ACTIVATION, yytext()); + } + case 221: + break; + case 107: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_HAS_PARAM_NAMES, yytext()); + } + case 222: + break; + case 108: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_PACKAGENAMESPACE, yytext()); + } + case 223: + break; + case 109: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_PRIVATENAMESPACE, yytext()); + } + case 224: + break; + case 110: { + String s = yytext(); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_EXCEPTION_START, Integer.parseInt(s.substring(15, s.length() - 1))); + } + case 225: + break; + case 111: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_EXPLICITNAMESPACE, yytext()); + } + case 226: + break; + case 112: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_PACKAGEINTERNALNS, yytext()); + } + case 227: + break; + case 113: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_STATICPROTECTEDNS, yytext()); + } + case 228: + break; + case 114: { + String s = yytext(); + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_EXCEPTION_TARGET, Integer.parseInt(s.substring(16, s.length() - 1))); + } + case 229: + break; + case 115: { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_KEYWORD_PROTECTEDNAMESPACE, yytext()); + } + case 230: + break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_EOF); + } + } else { + zzScanError(ZZ_NO_MATCH); + } + } } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: - { - } - case 116: break; - case 2: - { return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_COMMENT, yytext().substring(1)); - } - case 117: break; - case 3: - { yybegin(PARAMETERS); - return new ParsedSymbol(yychar(), ParsedSymbol.TYPE_INSTRUCTION_NAME, yytext()); - } - case 118: break; - case 4: - { for(int r=0;r parents = new ArrayList<>(); if (documentClass != null && documentClass.equals(className)) { mbCode.add(ins(AVM2Instructions.GetScopeObject, 0)); } else { - int[] nsset = new int[]{constants.getMultiname(tc.name_index).namespace_index}; + int[] nsset = new int[]{constants.getMultiname(tc.name_index).namespace_index}; mbCode.add(ins(AVM2Instructions.FindPropertyStrict, constants.getMultinameId(Multiname.createMultiname(false, constants.getMultiname(tc.name_index).name_index, constants.getNamespaceSetId(nsset, true)), true))); } traitScope++; @@ -2035,7 +2032,7 @@ public class AVM2SourceGenerator implements SourceGenerator { ci = ci.parent; } } - + @Override public List generate(SourceGeneratorLocalData localData, FalseItem item) throws CompilationException { return GraphTargetItem.toSourceMerge(localData, this, ins(AVM2Instructions.PushFalse)); @@ -2926,13 +2923,13 @@ public class AVM2SourceGenerator implements SourceGenerator { } } if (localData.isStatic && item.toString().equals(currentFullClassName)) { - return Arrays.asList(ins(AVM2Instructions.GetLocal0)); + return Arrays.asList(ins(AVM2Instructions.GetLocal0)); } else if (globalSlotId > 0) { return GraphTargetItem.toSourceMerge(localData, this, ins(AVM2Instructions.GetGlobalScope), ins(AVM2Instructions.GetSlot, globalSlotId)); } else { return GraphTargetItem.toSourceMerge(localData, this, ins(AVM2Instructions.GetLex, resolveType(localData, item, abcIndex))); } - } + } @Override public List generate(SourceGeneratorLocalData localData, PushItem item) throws CompilationException { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java index 66464db4e..fceebab7c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AbcIndexing.java @@ -162,7 +162,7 @@ public final class AbcIndexing { if (builtInNs == null) { //we need to avoid modifying the ABC - /* builtInIndex = abc.constants.getNamespaceId(Namespace.KIND_NAMESPACE, BUILT_IN_NS, 0, true); + /* builtInIndex = abc.constants.getNamespaceId(Namespace.KIND_NAMESPACE, BUILT_IN_NS, 0, true); builtInNsPerAbc.put(abc, builtInIndex);*/ builtInIndex = Integer.MIN_VALUE; //?? } else { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java index 39b2eb2b0..b9053a6fb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java @@ -803,7 +803,7 @@ public class ActionScript3Parser { if (classNameStr == null) { isStatic = true; } - + s = lex(); if (s.type == SymbolType.NAMESPACESUFFIX) { namespace = new NamespaceItem((Integer) s.value); @@ -838,7 +838,7 @@ public class ActionScript3Parser { t = st; } else { t = ft; - } + } //NOTE: Looks like TraitFunction does not work in FlashPlayer - use MethodTrait instead /*else { t = function(metadata, pkg, isInterface, new Reference(false), importedClasses, namespace, thisType, openedNamespaces, fname, false, new ArrayList()); @@ -1894,7 +1894,7 @@ public class ActionScript3Parser { return ret; - } + } /*private GraphTargetItem expressionRemainder(TypeItem thisType, String pkg, Reference needsActivation, List openedNamespaces, GraphTargetItem expr, HashMap registerVars, boolean inFunction, boolean inMethod, boolean allowRemainder, List variables, List importedClasses) throws IOException, AVM2ParseException { GraphTargetItem ret = null; @@ -1949,7 +1949,7 @@ public class ActionScript3Parser { } return arrCnt; } - + private GraphTargetItem expression(List> allOpenedNamespaces, TypeItem thisType, NamespaceItem pkg, Reference needsActivation, List importedClasses, List openedNamespaces, HashMap registerVars, boolean inFunction, boolean inMethod, boolean allowRemainder, List variables, boolean allowComma) throws IOException, AVM2ParseException, InterruptedException { return expression(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, false, registerVars, inFunction, inMethod, allowRemainder, variables, allowComma); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/methodinfoparser/MethodInfoLexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/methodinfoparser/MethodInfoLexer.java index f81610195..5d209ee25 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/methodinfoparser/MethodInfoLexer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/methodinfoparser/MethodInfoLexer.java @@ -1,6 +1,6 @@ /* The following code was generated by JFlex 1.6.0 */ -/* + /* * Copyright (C) 2010-2016 JPEXS, All rights reserved. * * This library is free software; you can redistribute it and/or @@ -16,607 +16,647 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. */ -/* Method info lexer specification */ + /* Method info lexer specification */ package com.jpexs.decompiler.flash.abc.methodinfoparser; - /** - * This class is a scanner generated by - * JFlex 1.6.0 - * from the specification file C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript3_methodinfo.flex + * This class is a scanner generated by + * JFlex 1.6.0 from the specification file + * C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript3_methodinfo.flex */ public final class MethodInfoLexer { - /** This character denotes the end of file */ - public static final int YYEOF = -1; + /** + * This character denotes the end of file + */ + public static final int YYEOF = -1; - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; + /** + * initial size of the lookahead buffer + */ + private static final int ZZ_BUFFERSIZE = 16384; - /** lexical states */ - public static final int YYINITIAL = 0; - public static final int STRING = 2; + /** + * lexical states + */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l - * at the beginning of a line - * l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1 - }; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the + * beginning of a line l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1 + }; - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\5\1\3\1\2\1\57\1\60\1\1\16\5\4\0\1\3\1\0"+ - "\1\42\1\0\1\4\2\0\1\56\2\0\1\45\1\37\1\44\1\7"+ - "\1\35\1\0\1\6\11\10\1\43\2\0\1\46\3\0\4\40\1\36"+ - "\1\40\5\4\1\31\1\4\1\25\1\4\1\17\12\4\1\12\1\41"+ - "\1\13\1\0\1\4\1\0\1\32\1\27\1\50\1\51\1\24\1\55"+ - "\1\53\1\4\1\21\1\4\1\52\1\33\1\11\1\14\1\20\1\47"+ - "\1\4\1\30\1\15\1\22\1\26\1\23\1\4\1\54\2\4\1\16"+ - "\1\0\1\34\1\0\6\5\1\61\32\5\2\0\4\4\4\0\1\4"+ - "\2\0\1\5\7\0\1\4\4\0\1\4\5\0\27\4\1\0\37\4"+ - "\1\0\u01ca\4\4\0\14\4\16\0\5\4\7\0\1\4\1\0\1\4"+ - "\21\0\160\5\5\4\1\0\2\4\2\0\4\4\1\0\1\4\6\0"+ - "\1\4\1\0\3\4\1\0\1\4\1\0\24\4\1\0\123\4\1\0"+ - "\213\4\1\0\5\5\2\0\246\4\1\0\46\4\2\0\1\4\6\0"+ - "\51\4\6\0\1\4\1\0\55\5\1\0\1\5\1\0\2\5\1\0"+ - "\2\5\1\0\1\5\10\0\33\4\4\0\4\4\15\0\6\5\5\0"+ - "\1\4\4\0\13\5\1\0\1\5\3\0\53\4\37\5\4\0\2\4"+ - "\1\5\143\4\1\0\1\4\10\5\1\0\6\5\2\4\2\5\1\0"+ - "\4\5\2\4\12\5\3\4\2\0\1\4\17\0\1\5\1\4\1\5"+ - "\36\4\33\5\2\0\131\4\13\5\1\4\16\0\12\5\41\4\11\5"+ - "\2\4\4\0\1\4\2\0\1\5\30\4\4\5\1\4\11\5\1\4"+ - "\3\5\1\4\5\5\22\0\31\4\3\5\4\0\13\4\5\0\30\4"+ - "\1\0\6\4\1\0\2\5\6\0\10\5\52\4\72\5\66\4\3\5"+ - "\1\4\22\5\1\4\7\5\12\4\2\5\2\0\12\5\1\0\20\4"+ - "\3\5\1\0\10\4\2\0\2\4\2\0\26\4\1\0\7\4\1\0"+ - "\1\4\3\0\4\4\2\0\1\5\1\4\7\5\2\0\2\5\2\0"+ - "\3\5\1\4\10\0\1\5\4\0\2\4\1\0\3\4\2\5\2\0"+ - "\12\5\4\4\7\0\2\4\1\0\1\5\2\0\3\5\1\0\6\4"+ - "\4\0\2\4\2\0\26\4\1\0\7\4\1\0\2\4\1\0\2\4"+ - "\1\0\2\4\2\0\1\5\1\0\5\5\4\0\2\5\2\0\3\5"+ - "\3\0\1\5\7\0\4\4\1\0\1\4\7\0\14\5\3\4\1\5"+ - "\13\0\3\5\1\0\11\4\1\0\3\4\1\0\26\4\1\0\7\4"+ - "\1\0\2\4\1\0\5\4\2\0\1\5\1\4\10\5\1\0\3\5"+ - "\1\0\3\5\2\0\1\4\17\0\2\4\2\5\2\0\12\5\1\0"+ - "\1\4\7\0\1\4\6\5\1\0\3\5\1\0\10\4\2\0\2\4"+ - "\2\0\26\4\1\0\7\4\1\0\2\4\1\0\5\4\2\0\1\5"+ - "\1\4\7\5\2\0\2\5\2\0\3\5\7\0\3\5\4\0\2\4"+ - "\1\0\3\4\2\5\2\0\12\5\1\0\1\4\20\0\1\5\1\4"+ - "\1\0\6\4\3\0\3\4\1\0\4\4\3\0\2\4\1\0\1\4"+ - "\1\0\2\4\3\0\2\4\3\0\3\4\3\0\14\4\4\0\5\5"+ - "\3\0\3\5\1\0\4\5\2\0\1\4\6\0\1\5\16\0\12\5"+ - "\11\0\1\4\6\0\5\5\10\4\1\0\3\4\1\0\27\4\1\0"+ - "\20\4\2\0\1\5\1\4\7\5\1\0\3\5\1\0\4\5\7\0"+ - "\2\5\1\0\3\4\2\0\1\4\2\0\2\4\2\5\2\0\12\5"+ - "\20\0\1\4\3\5\1\0\10\4\1\0\3\4\1\0\27\4\1\0"+ - "\12\4\1\0\5\4\2\0\1\5\1\4\7\5\1\0\3\5\1\0"+ - "\4\5\7\0\2\5\6\0\2\4\1\0\2\4\2\5\2\0\12\5"+ - "\1\0\2\4\15\0\4\5\11\4\1\0\3\4\1\0\51\4\2\5"+ - "\1\4\7\5\1\0\3\5\1\0\4\5\1\4\5\0\3\4\1\5"+ - "\7\0\3\4\2\5\2\0\12\5\12\0\6\4\1\0\3\5\1\0"+ - "\22\4\3\0\30\4\1\0\11\4\1\0\1\4\2\0\7\4\3\0"+ - "\1\5\4\0\6\5\1\0\1\5\1\0\10\5\6\0\12\5\2\0"+ - "\2\5\15\0\60\4\1\5\2\4\7\5\4\0\10\4\10\5\1\0"+ - "\12\5\47\0\2\4\1\0\1\4\1\0\5\4\1\0\30\4\1\0"+ - "\1\4\1\0\12\4\1\5\2\4\11\5\1\4\2\0\5\4\1\0"+ - "\1\4\1\0\6\5\2\0\12\5\2\0\4\4\40\0\1\4\27\0"+ - "\2\5\6\0\12\5\13\0\1\5\1\0\1\5\1\0\1\5\4\0"+ - "\2\5\10\4\1\0\44\4\4\0\24\5\1\0\2\5\5\4\13\5"+ - "\1\0\44\5\11\0\1\5\71\0\53\4\24\5\1\4\12\5\6\0"+ - "\6\4\4\5\4\4\3\5\1\4\3\5\2\4\7\5\3\4\4\5"+ - "\15\4\14\5\1\4\17\5\2\0\46\4\1\0\1\4\5\0\1\4"+ - "\2\0\53\4\1\0\u014d\4\1\0\4\4\2\0\7\4\1\0\1\4"+ - "\1\0\4\4\2\0\51\4\1\0\4\4\2\0\41\4\1\0\4\4"+ - "\2\0\7\4\1\0\1\4\1\0\4\4\2\0\17\4\1\0\71\4"+ - "\1\0\4\4\2\0\103\4\2\0\3\5\40\0\20\4\20\0\126\4"+ - "\2\0\6\4\3\0\u026c\4\2\0\21\4\1\0\32\4\5\0\113\4"+ - "\3\0\13\4\7\0\22\4\4\5\11\0\23\4\3\5\13\0\22\4"+ - "\2\5\14\0\15\4\1\0\3\4\1\0\2\5\14\0\64\4\40\5"+ - "\3\0\1\4\3\0\2\4\1\5\2\0\12\5\41\0\17\5\6\0"+ - "\131\4\7\0\5\4\2\5\42\4\1\5\1\4\5\0\106\4\12\0"+ - "\37\4\1\0\14\5\4\0\14\5\12\0\12\5\36\4\2\0\5\4"+ - "\13\0\54\4\4\0\32\4\6\0\12\5\46\0\27\4\5\5\4\0"+ - "\65\4\12\5\1\0\35\5\2\0\13\5\6\0\12\5\15\0\1\4"+ - "\10\0\16\5\1\0\20\5\61\0\5\5\57\4\21\5\10\4\3\0"+ - "\12\5\21\0\11\5\14\0\3\5\36\4\15\5\2\4\12\5\54\4"+ - "\16\5\14\0\44\4\24\5\10\0\12\5\3\0\3\4\12\5\44\4"+ - "\2\0\11\4\7\0\53\4\2\0\3\4\20\0\3\5\1\0\25\5"+ - "\4\4\1\5\6\4\1\5\2\4\3\5\1\4\5\0\300\4\100\5"+ - "\u0116\4\2\0\6\4\2\0\46\4\2\0\6\4\2\0\10\4\1\0"+ - "\1\4\1\0\1\4\1\0\1\4\1\0\37\4\2\0\65\4\1\0"+ - "\7\4\1\0\1\4\3\0\3\4\1\0\7\4\3\0\4\4\2\0"+ - "\6\4\4\0\15\4\5\0\3\4\1\0\7\4\16\0\5\5\30\0"+ - "\1\57\1\57\5\5\20\0\2\4\23\0\1\4\13\0\5\5\1\0"+ - "\12\5\1\0\1\4\15\0\1\4\20\0\15\4\3\0\41\4\17\0"+ - "\15\5\4\0\1\5\3\0\14\5\21\0\1\4\4\0\1\4\2\0"+ - "\12\4\1\0\1\4\3\0\5\4\6\0\1\4\1\0\1\4\1\0"+ - "\1\4\1\0\4\4\1\0\13\4\2\0\4\4\5\0\5\4\4\0"+ - "\1\4\21\0\51\4\u0a77\0\345\4\6\0\4\4\3\5\2\4\14\0"+ - "\46\4\1\0\1\4\5\0\1\4\2\0\70\4\7\0\1\4\17\0"+ - "\1\5\27\4\11\0\7\4\1\0\7\4\1\0\7\4\1\0\7\4"+ - "\1\0\7\4\1\0\7\4\1\0\7\4\1\0\7\4\1\0\40\5"+ - "\57\0\1\4\u01d5\0\3\4\31\0\11\4\6\5\1\0\5\4\2\0"+ - "\5\4\4\0\126\4\2\0\2\5\2\0\3\4\1\0\132\4\1\0"+ - "\4\4\5\0\53\4\1\0\136\4\21\0\40\4\60\0\20\4\u0200\0"+ - "\u19c0\4\100\0\u568d\4\103\0\56\4\2\0\u010d\4\3\0\20\4\12\5"+ - "\2\4\24\0\57\4\1\5\4\0\12\5\1\0\37\4\2\5\120\4"+ - "\2\5\45\0\11\4\2\0\147\4\2\0\100\4\5\0\2\4\1\0"+ - "\1\4\1\0\5\4\30\0\20\4\1\5\3\4\1\5\4\4\1\5"+ - "\27\4\5\5\4\0\1\5\13\0\1\4\7\0\64\4\14\0\2\5"+ - "\62\4\22\5\12\0\12\5\6\0\22\5\6\4\3\0\1\4\1\0"+ - "\2\4\13\5\34\4\10\5\2\0\27\4\15\5\14\0\35\4\3\0"+ - "\4\5\57\4\16\5\16\0\1\4\12\5\6\0\5\4\1\5\12\4"+ - "\12\5\5\4\1\0\51\4\16\5\11\0\3\4\1\5\10\4\2\5"+ - "\2\0\12\5\6\0\27\4\3\0\1\4\3\5\62\4\1\5\1\4"+ - "\3\5\2\4\2\5\5\4\2\5\1\4\1\5\1\4\30\0\3\4"+ - "\2\0\13\4\5\5\2\0\3\4\2\5\12\0\6\4\2\0\6\4"+ - "\2\0\6\4\11\0\7\4\1\0\7\4\1\0\53\4\1\0\16\4"+ - "\6\0\163\4\10\5\1\0\2\5\2\0\12\5\6\0\u2ba4\4\14\0"+ - "\27\4\4\0\61\4\u2104\0\u016e\4\2\0\152\4\46\0\7\4\14\0"+ - "\5\4\5\0\1\4\1\5\12\4\1\0\15\4\1\0\5\4\1\0"+ - "\1\4\1\0\2\4\1\0\2\4\1\0\154\4\41\0\u016b\4\22\0"+ - "\100\4\2\0\66\4\50\0\15\4\3\0\20\5\20\0\20\5\3\0"+ - "\2\4\30\0\3\4\31\0\1\4\6\0\5\4\1\0\207\4\2\0"+ - "\1\5\4\0\1\4\13\0\12\5\7\0\32\4\4\0\1\4\1\0"+ - "\32\4\13\0\131\4\3\0\6\4\2\0\6\4\2\0\6\4\2\0"+ - "\3\4\3\0\2\4\3\0\2\4\22\0\3\5\4\0\14\4\1\0"+ - "\32\4\1\0\23\4\1\0\2\4\1\0\17\4\2\0\16\4\42\0"+ - "\173\4\105\0\65\4\210\0\1\5\202\0\35\4\3\0\61\4\17\0"+ - "\1\5\37\0\40\4\15\0\36\4\5\0\46\4\5\5\5\0\36\4"+ - "\2\0\44\4\4\0\10\4\1\0\5\4\52\0\236\4\2\0\12\5"+ - "\6\0\44\4\4\0\44\4\4\0\50\4\10\0\64\4\14\0\13\4"+ - "\1\0\17\4\1\0\7\4\1\0\2\4\1\0\13\4\1\0\17\4"+ - "\1\0\7\4\1\0\2\4\103\0\u0137\4\11\0\26\4\12\0\10\4"+ - "\30\0\6\4\1\0\52\4\1\0\11\4\105\0\6\4\2\0\1\4"+ - "\1\0\54\4\1\0\2\4\3\0\1\4\2\0\27\4\12\0\27\4"+ - "\11\0\37\4\101\0\23\4\1\0\2\4\12\0\26\4\12\0\32\4"+ - "\106\0\70\4\6\0\2\4\100\0\1\4\3\5\1\0\2\5\5\0"+ - "\4\5\4\4\1\0\3\4\1\0\35\4\2\0\3\5\4\0\1\5"+ - "\40\0\35\4\3\0\35\4\43\0\10\4\1\0\34\4\2\5\31\0"+ - "\66\4\12\0\26\4\12\0\23\4\15\0\22\4\156\0\111\4\67\0"+ - "\63\4\15\0\63\4\15\0\44\4\4\5\10\0\12\5\u0146\0\52\4"+ - "\1\0\2\5\3\0\2\4\116\0\35\4\12\0\1\4\10\0\26\4"+ - "\13\5\37\0\22\4\4\5\52\0\25\4\33\0\27\4\11\0\3\5"+ - "\65\4\17\5\37\0\13\5\2\4\2\5\1\4\11\0\4\5\55\4"+ - "\13\5\2\0\1\5\4\0\1\5\12\0\1\5\2\0\31\4\7\0"+ - "\12\5\6\0\3\5\44\4\16\5\1\0\12\5\4\0\1\4\2\5"+ - "\1\4\10\0\43\4\1\5\2\0\1\4\11\0\3\5\60\4\16\5"+ - "\4\4\4\0\4\5\1\0\14\5\1\4\1\0\1\4\43\0\22\4"+ - "\1\0\31\4\14\5\6\0\1\5\101\0\7\4\1\0\1\4\1\0"+ - "\4\4\1\0\17\4\1\0\12\4\7\0\57\4\14\5\5\0\12\5"+ - "\6\0\4\5\1\0\10\4\2\0\2\4\2\0\26\4\1\0\7\4"+ - "\1\0\2\4\1\0\5\4\1\0\2\5\1\4\7\5\2\0\2\5"+ - "\2\0\3\5\2\0\1\4\6\0\1\5\5\0\5\4\2\5\2\0"+ - "\7\5\3\0\5\5\213\0\65\4\22\5\4\4\5\0\12\5\4\0"+ - "\1\5\3\4\36\0\60\4\24\5\2\4\1\0\1\4\10\0\12\5"+ - "\246\0\57\4\7\5\2\0\11\5\27\0\4\4\2\5\42\0\60\4"+ - "\21\5\3\0\1\4\13\0\12\5\46\0\53\4\15\5\1\4\7\0"+ - "\12\5\66\0\33\4\2\0\17\5\4\0\12\5\6\0\7\4\271\0"+ - "\54\4\17\5\145\0\100\4\12\5\25\0\10\4\2\0\1\4\2\0"+ - "\10\4\1\0\2\4\1\0\30\4\6\5\1\0\2\5\2\0\4\5"+ - "\1\4\1\5\1\4\2\5\14\0\12\5\106\0\10\4\2\0\47\4"+ - "\7\5\2\0\7\5\1\4\1\0\1\4\1\5\33\0\1\4\12\5"+ - "\50\4\7\5\1\4\4\5\10\0\1\5\10\0\1\4\13\5\56\4"+ - "\20\5\3\0\1\4\22\0\111\4\u0107\0\11\4\1\0\45\4\10\5"+ - "\1\0\10\5\1\4\17\0\12\5\30\0\36\4\2\0\26\5\1\0"+ - "\16\5\111\0\7\4\1\0\2\4\1\0\46\4\6\5\3\0\1\5"+ - "\1\0\2\5\1\0\7\5\1\4\1\5\10\0\12\5\6\0\6\4"+ - "\1\0\2\4\1\0\40\4\5\5\1\0\2\5\1\0\5\5\1\4"+ - "\7\0\12\5\u0136\0\23\4\4\5\271\0\1\4\54\0\4\4\37\0"+ - "\u039a\4\146\0\157\4\21\0\304\4\u0a4c\0\141\4\17\0\u042f\4\1\0"+ - "\11\5\u0fc7\0\u0247\4\u21b9\0\u0239\4\7\0\37\4\1\0\12\5\6\0"+ - "\117\4\1\0\12\5\6\0\36\4\2\0\5\5\13\0\60\4\7\5"+ - "\11\0\4\4\14\0\12\5\11\0\25\4\5\0\23\4\u02b0\0\100\4"+ - "\200\0\113\4\4\0\1\5\1\4\67\5\7\0\4\5\15\4\100\0"+ - "\2\4\1\0\1\4\1\5\13\0\2\5\16\0\u17f8\4\10\0\u04d6\4"+ - "\52\0\11\4\u22e7\0\4\4\1\0\7\4\1\0\2\4\1\0\u0123\4"+ - "\55\0\3\4\21\0\4\4\10\0\u018c\4\u0904\0\153\4\5\0\15\4"+ - "\3\0\11\4\7\0\12\4\3\0\2\5\1\0\4\5\u125c\0\56\5"+ - "\2\0\27\5\u021e\0\5\5\3\0\26\5\2\0\7\5\36\0\4\5"+ - "\224\0\3\5\u01bb\0\125\4\1\0\107\4\1\0\2\4\2\0\1\4"+ - "\2\0\2\4\2\0\4\4\1\0\14\4\1\0\1\4\1\0\7\4"+ - "\1\0\101\4\1\0\4\4\2\0\10\4\1\0\7\4\1\0\34\4"+ - "\1\0\4\4\1\0\5\4\1\0\1\4\3\0\7\4\1\0\u0154\4"+ - "\2\0\31\4\1\0\31\4\1\0\37\4\1\0\31\4\1\0\37\4"+ - "\1\0\31\4\1\0\37\4\1\0\31\4\1\0\37\4\1\0\31\4"+ - "\1\0\10\4\2\0\62\5\u0200\0\67\5\4\0\62\5\10\0\1\5"+ - "\16\0\1\5\26\0\5\5\1\0\17\5\u0450\0\37\4\341\0\7\5"+ - "\1\0\21\5\2\0\7\5\1\0\2\5\1\0\5\5\325\0\55\4"+ - "\3\0\7\5\7\4\2\0\12\5\4\0\1\4\u0141\0\36\4\1\5"+ - "\21\0\54\4\16\5\5\0\1\4\u04e0\0\7\4\1\0\4\4\1\0"+ - "\2\4\1\0\17\4\1\0\305\4\13\0\7\5\51\0\104\4\7\5"+ - "\1\4\4\0\12\5\u0356\0\1\4\u014f\0\4\4\1\0\33\4\1\0"+ - "\2\4\1\0\1\4\2\0\1\4\1\0\12\4\1\0\4\4\1\0"+ - "\1\4\1\0\1\4\6\0\1\4\4\0\1\4\1\0\1\4\1\0"+ - "\1\4\1\0\3\4\1\0\2\4\1\0\1\4\2\0\1\4\1\0"+ - "\1\4\1\0\1\4\1\0\1\4\1\0\1\4\1\0\2\4\1\0"+ - "\1\4\2\0\4\4\1\0\7\4\1\0\4\4\1\0\4\4\1\0"+ - "\1\4\1\0\12\4\1\0\21\4\5\0\3\4\1\0\5\4\1\0"+ - "\21\4\u0d34\0\12\5\u0406\0\ua6e0\4\40\0\u1039\4\7\0\336\4\2\0"+ - "\u1682\4\16\0\u1d31\4\u0c1f\0\u021e\4\u05e2\0\u134b\4\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uecc0\0"+ - "\1\5\36\0\140\5\200\0\360\5\uffff\0\uffff\0\ufe12\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED + = "\11\5\1\3\1\2\1\57\1\60\1\1\16\5\4\0\1\3\1\0" + + "\1\42\1\0\1\4\2\0\1\56\2\0\1\45\1\37\1\44\1\7" + + "\1\35\1\0\1\6\11\10\1\43\2\0\1\46\3\0\4\40\1\36" + + "\1\40\5\4\1\31\1\4\1\25\1\4\1\17\12\4\1\12\1\41" + + "\1\13\1\0\1\4\1\0\1\32\1\27\1\50\1\51\1\24\1\55" + + "\1\53\1\4\1\21\1\4\1\52\1\33\1\11\1\14\1\20\1\47" + + "\1\4\1\30\1\15\1\22\1\26\1\23\1\4\1\54\2\4\1\16" + + "\1\0\1\34\1\0\6\5\1\61\32\5\2\0\4\4\4\0\1\4" + + "\2\0\1\5\7\0\1\4\4\0\1\4\5\0\27\4\1\0\37\4" + + "\1\0\u01ca\4\4\0\14\4\16\0\5\4\7\0\1\4\1\0\1\4" + + "\21\0\160\5\5\4\1\0\2\4\2\0\4\4\1\0\1\4\6\0" + + "\1\4\1\0\3\4\1\0\1\4\1\0\24\4\1\0\123\4\1\0" + + "\213\4\1\0\5\5\2\0\246\4\1\0\46\4\2\0\1\4\6\0" + + "\51\4\6\0\1\4\1\0\55\5\1\0\1\5\1\0\2\5\1\0" + + "\2\5\1\0\1\5\10\0\33\4\4\0\4\4\15\0\6\5\5\0" + + "\1\4\4\0\13\5\1\0\1\5\3\0\53\4\37\5\4\0\2\4" + + "\1\5\143\4\1\0\1\4\10\5\1\0\6\5\2\4\2\5\1\0" + + "\4\5\2\4\12\5\3\4\2\0\1\4\17\0\1\5\1\4\1\5" + + "\36\4\33\5\2\0\131\4\13\5\1\4\16\0\12\5\41\4\11\5" + + "\2\4\4\0\1\4\2\0\1\5\30\4\4\5\1\4\11\5\1\4" + + "\3\5\1\4\5\5\22\0\31\4\3\5\4\0\13\4\5\0\30\4" + + "\1\0\6\4\1\0\2\5\6\0\10\5\52\4\72\5\66\4\3\5" + + "\1\4\22\5\1\4\7\5\12\4\2\5\2\0\12\5\1\0\20\4" + + "\3\5\1\0\10\4\2\0\2\4\2\0\26\4\1\0\7\4\1\0" + + "\1\4\3\0\4\4\2\0\1\5\1\4\7\5\2\0\2\5\2\0" + + "\3\5\1\4\10\0\1\5\4\0\2\4\1\0\3\4\2\5\2\0" + + "\12\5\4\4\7\0\2\4\1\0\1\5\2\0\3\5\1\0\6\4" + + "\4\0\2\4\2\0\26\4\1\0\7\4\1\0\2\4\1\0\2\4" + + "\1\0\2\4\2\0\1\5\1\0\5\5\4\0\2\5\2\0\3\5" + + "\3\0\1\5\7\0\4\4\1\0\1\4\7\0\14\5\3\4\1\5" + + "\13\0\3\5\1\0\11\4\1\0\3\4\1\0\26\4\1\0\7\4" + + "\1\0\2\4\1\0\5\4\2\0\1\5\1\4\10\5\1\0\3\5" + + "\1\0\3\5\2\0\1\4\17\0\2\4\2\5\2\0\12\5\1\0" + + "\1\4\7\0\1\4\6\5\1\0\3\5\1\0\10\4\2\0\2\4" + + "\2\0\26\4\1\0\7\4\1\0\2\4\1\0\5\4\2\0\1\5" + + "\1\4\7\5\2\0\2\5\2\0\3\5\7\0\3\5\4\0\2\4" + + "\1\0\3\4\2\5\2\0\12\5\1\0\1\4\20\0\1\5\1\4" + + "\1\0\6\4\3\0\3\4\1\0\4\4\3\0\2\4\1\0\1\4" + + "\1\0\2\4\3\0\2\4\3\0\3\4\3\0\14\4\4\0\5\5" + + "\3\0\3\5\1\0\4\5\2\0\1\4\6\0\1\5\16\0\12\5" + + "\11\0\1\4\6\0\5\5\10\4\1\0\3\4\1\0\27\4\1\0" + + "\20\4\2\0\1\5\1\4\7\5\1\0\3\5\1\0\4\5\7\0" + + "\2\5\1\0\3\4\2\0\1\4\2\0\2\4\2\5\2\0\12\5" + + "\20\0\1\4\3\5\1\0\10\4\1\0\3\4\1\0\27\4\1\0" + + "\12\4\1\0\5\4\2\0\1\5\1\4\7\5\1\0\3\5\1\0" + + "\4\5\7\0\2\5\6\0\2\4\1\0\2\4\2\5\2\0\12\5" + + "\1\0\2\4\15\0\4\5\11\4\1\0\3\4\1\0\51\4\2\5" + + "\1\4\7\5\1\0\3\5\1\0\4\5\1\4\5\0\3\4\1\5" + + "\7\0\3\4\2\5\2\0\12\5\12\0\6\4\1\0\3\5\1\0" + + "\22\4\3\0\30\4\1\0\11\4\1\0\1\4\2\0\7\4\3\0" + + "\1\5\4\0\6\5\1\0\1\5\1\0\10\5\6\0\12\5\2\0" + + "\2\5\15\0\60\4\1\5\2\4\7\5\4\0\10\4\10\5\1\0" + + "\12\5\47\0\2\4\1\0\1\4\1\0\5\4\1\0\30\4\1\0" + + "\1\4\1\0\12\4\1\5\2\4\11\5\1\4\2\0\5\4\1\0" + + "\1\4\1\0\6\5\2\0\12\5\2\0\4\4\40\0\1\4\27\0" + + "\2\5\6\0\12\5\13\0\1\5\1\0\1\5\1\0\1\5\4\0" + + "\2\5\10\4\1\0\44\4\4\0\24\5\1\0\2\5\5\4\13\5" + + "\1\0\44\5\11\0\1\5\71\0\53\4\24\5\1\4\12\5\6\0" + + "\6\4\4\5\4\4\3\5\1\4\3\5\2\4\7\5\3\4\4\5" + + "\15\4\14\5\1\4\17\5\2\0\46\4\1\0\1\4\5\0\1\4" + + "\2\0\53\4\1\0\u014d\4\1\0\4\4\2\0\7\4\1\0\1\4" + + "\1\0\4\4\2\0\51\4\1\0\4\4\2\0\41\4\1\0\4\4" + + "\2\0\7\4\1\0\1\4\1\0\4\4\2\0\17\4\1\0\71\4" + + "\1\0\4\4\2\0\103\4\2\0\3\5\40\0\20\4\20\0\126\4" + + "\2\0\6\4\3\0\u026c\4\2\0\21\4\1\0\32\4\5\0\113\4" + + "\3\0\13\4\7\0\22\4\4\5\11\0\23\4\3\5\13\0\22\4" + + "\2\5\14\0\15\4\1\0\3\4\1\0\2\5\14\0\64\4\40\5" + + "\3\0\1\4\3\0\2\4\1\5\2\0\12\5\41\0\17\5\6\0" + + "\131\4\7\0\5\4\2\5\42\4\1\5\1\4\5\0\106\4\12\0" + + "\37\4\1\0\14\5\4\0\14\5\12\0\12\5\36\4\2\0\5\4" + + "\13\0\54\4\4\0\32\4\6\0\12\5\46\0\27\4\5\5\4\0" + + "\65\4\12\5\1\0\35\5\2\0\13\5\6\0\12\5\15\0\1\4" + + "\10\0\16\5\1\0\20\5\61\0\5\5\57\4\21\5\10\4\3\0" + + "\12\5\21\0\11\5\14\0\3\5\36\4\15\5\2\4\12\5\54\4" + + "\16\5\14\0\44\4\24\5\10\0\12\5\3\0\3\4\12\5\44\4" + + "\2\0\11\4\7\0\53\4\2\0\3\4\20\0\3\5\1\0\25\5" + + "\4\4\1\5\6\4\1\5\2\4\3\5\1\4\5\0\300\4\100\5" + + "\u0116\4\2\0\6\4\2\0\46\4\2\0\6\4\2\0\10\4\1\0" + + "\1\4\1\0\1\4\1\0\1\4\1\0\37\4\2\0\65\4\1\0" + + "\7\4\1\0\1\4\3\0\3\4\1\0\7\4\3\0\4\4\2\0" + + "\6\4\4\0\15\4\5\0\3\4\1\0\7\4\16\0\5\5\30\0" + + "\1\57\1\57\5\5\20\0\2\4\23\0\1\4\13\0\5\5\1\0" + + "\12\5\1\0\1\4\15\0\1\4\20\0\15\4\3\0\41\4\17\0" + + "\15\5\4\0\1\5\3\0\14\5\21\0\1\4\4\0\1\4\2\0" + + "\12\4\1\0\1\4\3\0\5\4\6\0\1\4\1\0\1\4\1\0" + + "\1\4\1\0\4\4\1\0\13\4\2\0\4\4\5\0\5\4\4\0" + + "\1\4\21\0\51\4\u0a77\0\345\4\6\0\4\4\3\5\2\4\14\0" + + "\46\4\1\0\1\4\5\0\1\4\2\0\70\4\7\0\1\4\17\0" + + "\1\5\27\4\11\0\7\4\1\0\7\4\1\0\7\4\1\0\7\4" + + "\1\0\7\4\1\0\7\4\1\0\7\4\1\0\7\4\1\0\40\5" + + "\57\0\1\4\u01d5\0\3\4\31\0\11\4\6\5\1\0\5\4\2\0" + + "\5\4\4\0\126\4\2\0\2\5\2\0\3\4\1\0\132\4\1\0" + + "\4\4\5\0\53\4\1\0\136\4\21\0\40\4\60\0\20\4\u0200\0" + + "\u19c0\4\100\0\u568d\4\103\0\56\4\2\0\u010d\4\3\0\20\4\12\5" + + "\2\4\24\0\57\4\1\5\4\0\12\5\1\0\37\4\2\5\120\4" + + "\2\5\45\0\11\4\2\0\147\4\2\0\100\4\5\0\2\4\1\0" + + "\1\4\1\0\5\4\30\0\20\4\1\5\3\4\1\5\4\4\1\5" + + "\27\4\5\5\4\0\1\5\13\0\1\4\7\0\64\4\14\0\2\5" + + "\62\4\22\5\12\0\12\5\6\0\22\5\6\4\3\0\1\4\1\0" + + "\2\4\13\5\34\4\10\5\2\0\27\4\15\5\14\0\35\4\3\0" + + "\4\5\57\4\16\5\16\0\1\4\12\5\6\0\5\4\1\5\12\4" + + "\12\5\5\4\1\0\51\4\16\5\11\0\3\4\1\5\10\4\2\5" + + "\2\0\12\5\6\0\27\4\3\0\1\4\3\5\62\4\1\5\1\4" + + "\3\5\2\4\2\5\5\4\2\5\1\4\1\5\1\4\30\0\3\4" + + "\2\0\13\4\5\5\2\0\3\4\2\5\12\0\6\4\2\0\6\4" + + "\2\0\6\4\11\0\7\4\1\0\7\4\1\0\53\4\1\0\16\4" + + "\6\0\163\4\10\5\1\0\2\5\2\0\12\5\6\0\u2ba4\4\14\0" + + "\27\4\4\0\61\4\u2104\0\u016e\4\2\0\152\4\46\0\7\4\14\0" + + "\5\4\5\0\1\4\1\5\12\4\1\0\15\4\1\0\5\4\1\0" + + "\1\4\1\0\2\4\1\0\2\4\1\0\154\4\41\0\u016b\4\22\0" + + "\100\4\2\0\66\4\50\0\15\4\3\0\20\5\20\0\20\5\3\0" + + "\2\4\30\0\3\4\31\0\1\4\6\0\5\4\1\0\207\4\2\0" + + "\1\5\4\0\1\4\13\0\12\5\7\0\32\4\4\0\1\4\1\0" + + "\32\4\13\0\131\4\3\0\6\4\2\0\6\4\2\0\6\4\2\0" + + "\3\4\3\0\2\4\3\0\2\4\22\0\3\5\4\0\14\4\1\0" + + "\32\4\1\0\23\4\1\0\2\4\1\0\17\4\2\0\16\4\42\0" + + "\173\4\105\0\65\4\210\0\1\5\202\0\35\4\3\0\61\4\17\0" + + "\1\5\37\0\40\4\15\0\36\4\5\0\46\4\5\5\5\0\36\4" + + "\2\0\44\4\4\0\10\4\1\0\5\4\52\0\236\4\2\0\12\5" + + "\6\0\44\4\4\0\44\4\4\0\50\4\10\0\64\4\14\0\13\4" + + "\1\0\17\4\1\0\7\4\1\0\2\4\1\0\13\4\1\0\17\4" + + "\1\0\7\4\1\0\2\4\103\0\u0137\4\11\0\26\4\12\0\10\4" + + "\30\0\6\4\1\0\52\4\1\0\11\4\105\0\6\4\2\0\1\4" + + "\1\0\54\4\1\0\2\4\3\0\1\4\2\0\27\4\12\0\27\4" + + "\11\0\37\4\101\0\23\4\1\0\2\4\12\0\26\4\12\0\32\4" + + "\106\0\70\4\6\0\2\4\100\0\1\4\3\5\1\0\2\5\5\0" + + "\4\5\4\4\1\0\3\4\1\0\35\4\2\0\3\5\4\0\1\5" + + "\40\0\35\4\3\0\35\4\43\0\10\4\1\0\34\4\2\5\31\0" + + "\66\4\12\0\26\4\12\0\23\4\15\0\22\4\156\0\111\4\67\0" + + "\63\4\15\0\63\4\15\0\44\4\4\5\10\0\12\5\u0146\0\52\4" + + "\1\0\2\5\3\0\2\4\116\0\35\4\12\0\1\4\10\0\26\4" + + "\13\5\37\0\22\4\4\5\52\0\25\4\33\0\27\4\11\0\3\5" + + "\65\4\17\5\37\0\13\5\2\4\2\5\1\4\11\0\4\5\55\4" + + "\13\5\2\0\1\5\4\0\1\5\12\0\1\5\2\0\31\4\7\0" + + "\12\5\6\0\3\5\44\4\16\5\1\0\12\5\4\0\1\4\2\5" + + "\1\4\10\0\43\4\1\5\2\0\1\4\11\0\3\5\60\4\16\5" + + "\4\4\4\0\4\5\1\0\14\5\1\4\1\0\1\4\43\0\22\4" + + "\1\0\31\4\14\5\6\0\1\5\101\0\7\4\1\0\1\4\1\0" + + "\4\4\1\0\17\4\1\0\12\4\7\0\57\4\14\5\5\0\12\5" + + "\6\0\4\5\1\0\10\4\2\0\2\4\2\0\26\4\1\0\7\4" + + "\1\0\2\4\1\0\5\4\1\0\2\5\1\4\7\5\2\0\2\5" + + "\2\0\3\5\2\0\1\4\6\0\1\5\5\0\5\4\2\5\2\0" + + "\7\5\3\0\5\5\213\0\65\4\22\5\4\4\5\0\12\5\4\0" + + "\1\5\3\4\36\0\60\4\24\5\2\4\1\0\1\4\10\0\12\5" + + "\246\0\57\4\7\5\2\0\11\5\27\0\4\4\2\5\42\0\60\4" + + "\21\5\3\0\1\4\13\0\12\5\46\0\53\4\15\5\1\4\7\0" + + "\12\5\66\0\33\4\2\0\17\5\4\0\12\5\6\0\7\4\271\0" + + "\54\4\17\5\145\0\100\4\12\5\25\0\10\4\2\0\1\4\2\0" + + "\10\4\1\0\2\4\1\0\30\4\6\5\1\0\2\5\2\0\4\5" + + "\1\4\1\5\1\4\2\5\14\0\12\5\106\0\10\4\2\0\47\4" + + "\7\5\2\0\7\5\1\4\1\0\1\4\1\5\33\0\1\4\12\5" + + "\50\4\7\5\1\4\4\5\10\0\1\5\10\0\1\4\13\5\56\4" + + "\20\5\3\0\1\4\22\0\111\4\u0107\0\11\4\1\0\45\4\10\5" + + "\1\0\10\5\1\4\17\0\12\5\30\0\36\4\2\0\26\5\1\0" + + "\16\5\111\0\7\4\1\0\2\4\1\0\46\4\6\5\3\0\1\5" + + "\1\0\2\5\1\0\7\5\1\4\1\5\10\0\12\5\6\0\6\4" + + "\1\0\2\4\1\0\40\4\5\5\1\0\2\5\1\0\5\5\1\4" + + "\7\0\12\5\u0136\0\23\4\4\5\271\0\1\4\54\0\4\4\37\0" + + "\u039a\4\146\0\157\4\21\0\304\4\u0a4c\0\141\4\17\0\u042f\4\1\0" + + "\11\5\u0fc7\0\u0247\4\u21b9\0\u0239\4\7\0\37\4\1\0\12\5\6\0" + + "\117\4\1\0\12\5\6\0\36\4\2\0\5\5\13\0\60\4\7\5" + + "\11\0\4\4\14\0\12\5\11\0\25\4\5\0\23\4\u02b0\0\100\4" + + "\200\0\113\4\4\0\1\5\1\4\67\5\7\0\4\5\15\4\100\0" + + "\2\4\1\0\1\4\1\5\13\0\2\5\16\0\u17f8\4\10\0\u04d6\4" + + "\52\0\11\4\u22e7\0\4\4\1\0\7\4\1\0\2\4\1\0\u0123\4" + + "\55\0\3\4\21\0\4\4\10\0\u018c\4\u0904\0\153\4\5\0\15\4" + + "\3\0\11\4\7\0\12\4\3\0\2\5\1\0\4\5\u125c\0\56\5" + + "\2\0\27\5\u021e\0\5\5\3\0\26\5\2\0\7\5\36\0\4\5" + + "\224\0\3\5\u01bb\0\125\4\1\0\107\4\1\0\2\4\2\0\1\4" + + "\2\0\2\4\2\0\4\4\1\0\14\4\1\0\1\4\1\0\7\4" + + "\1\0\101\4\1\0\4\4\2\0\10\4\1\0\7\4\1\0\34\4" + + "\1\0\4\4\1\0\5\4\1\0\1\4\3\0\7\4\1\0\u0154\4" + + "\2\0\31\4\1\0\31\4\1\0\37\4\1\0\31\4\1\0\37\4" + + "\1\0\31\4\1\0\37\4\1\0\31\4\1\0\37\4\1\0\31\4" + + "\1\0\10\4\2\0\62\5\u0200\0\67\5\4\0\62\5\10\0\1\5" + + "\16\0\1\5\26\0\5\5\1\0\17\5\u0450\0\37\4\341\0\7\5" + + "\1\0\21\5\2\0\7\5\1\0\2\5\1\0\5\5\325\0\55\4" + + "\3\0\7\5\7\4\2\0\12\5\4\0\1\4\u0141\0\36\4\1\5" + + "\21\0\54\4\16\5\5\0\1\4\u04e0\0\7\4\1\0\4\4\1\0" + + "\2\4\1\0\17\4\1\0\305\4\13\0\7\5\51\0\104\4\7\5" + + "\1\4\4\0\12\5\u0356\0\1\4\u014f\0\4\4\1\0\33\4\1\0" + + "\2\4\1\0\1\4\2\0\1\4\1\0\12\4\1\0\4\4\1\0" + + "\1\4\1\0\1\4\6\0\1\4\4\0\1\4\1\0\1\4\1\0" + + "\1\4\1\0\3\4\1\0\2\4\1\0\1\4\2\0\1\4\1\0" + + "\1\4\1\0\1\4\1\0\1\4\1\0\1\4\1\0\2\4\1\0" + + "\1\4\2\0\4\4\1\0\7\4\1\0\4\4\1\0\4\4\1\0" + + "\1\4\1\0\12\4\1\0\21\4\5\0\3\4\1\0\5\4\1\0" + + "\21\4\u0d34\0\12\5\u0406\0\ua6e0\4\40\0\u1039\4\7\0\336\4\2\0" + + "\u1682\4\16\0\u1d31\4\u0c1f\0\u021e\4\u05e2\0\u134b\4\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uecc0\0" + + "\1\5\36\0\140\5\200\0\360\5\uffff\0\uffff\0\ufe12\0"; - /** - * Translates characters to character classes - */ - private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int [] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int[] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 = - "\2\0\2\1\1\2\1\3\1\1\1\3\7\2\1\1"+ - "\1\4\1\5\1\6\1\7\1\10\2\2\1\11\2\12"+ - "\1\1\1\13\1\14\1\0\1\14\2\0\7\2\1\0"+ - "\3\2\1\15\1\16\1\17\1\15\1\20\1\21\1\22"+ - "\1\23\1\15\1\24\1\25\1\14\4\0\6\2\1\26"+ - "\4\2\4\0\1\27\2\2\1\30\6\2\1\0\1\31"+ - "\1\32\1\0\7\2\1\33\1\0\1\34\6\2\1\0"+ - "\4\2\1\35\1\36\1\0\1\37\1\40\2\2\1\0"+ - "\1\41\1\42\20\0\1\43"; + private static final String ZZ_ACTION_PACKED_0 + = "\2\0\2\1\1\2\1\3\1\1\1\3\7\2\1\1" + + "\1\4\1\5\1\6\1\7\1\10\2\2\1\11\2\12" + + "\1\1\1\13\1\14\1\0\1\14\2\0\7\2\1\0" + + "\3\2\1\15\1\16\1\17\1\15\1\20\1\21\1\22" + + "\1\23\1\15\1\24\1\25\1\14\4\0\6\2\1\26" + + "\4\2\4\0\1\27\2\2\1\30\6\2\1\0\1\31" + + "\1\32\1\0\7\2\1\33\1\0\1\34\6\2\1\0" + + "\4\2\1\35\1\36\1\0\1\37\1\40\2\2\1\0" + + "\1\41\1\42\20\0\1\43"; - private static int [] zzUnpackAction() { - int [] result = new int[137]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackAction() { + int[] result = new int[137]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\62\0\144\0\226\0\310\0\372\0\u012c\0\u015e"+ - "\0\u0190\0\u01c2\0\u01f4\0\u0226\0\u0258\0\u028a\0\u02bc\0\u02ee"+ - "\0\144\0\144\0\144\0\144\0\144\0\u0320\0\u0352\0\u0384"+ - "\0\u03b6\0\144\0\u03e8\0\144\0\372\0\u041a\0\u044c\0\u047e"+ - "\0\u04b0\0\u04e2\0\u0514\0\u0546\0\u0578\0\u05aa\0\u05dc\0\u060e"+ - "\0\u0640\0\u0672\0\u06a4\0\u06d6\0\144\0\144\0\144\0\u0708"+ - "\0\144\0\144\0\144\0\144\0\u073a\0\144\0\144\0\u076c"+ - "\0\u076c\0\u079e\0\u07d0\0\u0802\0\u0834\0\u0866\0\u0898\0\u08ca"+ - "\0\u08fc\0\u092e\0\144\0\u0960\0\u0992\0\u09c4\0\u09f6\0\u0a28"+ - "\0\u0a5a\0\u0a8c\0\u0abe\0\310\0\u0af0\0\u0b22\0\310\0\u0b54"+ - "\0\u0b86\0\u0bb8\0\u0bea\0\u0c1c\0\u0c4e\0\u073a\0\144\0\144"+ - "\0\u0c80\0\u0cb2\0\u0ce4\0\u0d16\0\u0d48\0\u0d7a\0\u0dac\0\u0dde"+ - "\0\310\0\u0e10\0\310\0\u0e42\0\u0e74\0\u0ea6\0\u0ed8\0\u0f0a"+ - "\0\u0f3c\0\u0f6e\0\u0fa0\0\u0fd2\0\u1004\0\u1036\0\310\0\310"+ - "\0\u1068\0\310\0\310\0\u109a\0\u10cc\0\u10fe\0\310\0\310"+ - "\0\u1130\0\u1162\0\u1194\0\u11c6\0\u11f8\0\u122a\0\u125c\0\u128e"+ - "\0\u12c0\0\u12f2\0\u1324\0\u1356\0\u1388\0\u13ba\0\u13ec\0\u141e"+ - "\0\144"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[137]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); + private static int zzUnpackAction(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; } - return j; - } - /** - * The transition table of the DFA - */ - private static final int [] ZZ_TRANS = zzUnpackTrans(); + /** + * Translates a state to a row index in the transition table + */ + private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - private static final String ZZ_TRANS_PACKED_0 = - "\3\3\1\4\1\5\1\3\1\6\1\7\1\10\1\11"+ - "\2\3\1\12\1\13\1\3\2\5\1\14\1\15\1\5"+ - "\1\16\1\5\1\17\5\5\1\3\1\20\1\5\1\3"+ - "\1\5\1\3\1\21\1\22\1\23\1\24\1\25\1\26"+ - "\5\5\1\27\2\3\1\4\1\3\1\30\1\31\1\32"+ - "\36\30\1\33\1\34\17\30\65\0\1\4\54\0\1\4"+ - "\5\0\3\5\1\0\2\5\2\0\2\5\1\0\15\5"+ - "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5"+ - "\6\0\1\35\1\0\1\35\13\0\1\36\10\0\1\37"+ - "\1\36\31\0\1\35\1\0\1\10\24\0\1\40\32\0"+ - "\1\10\1\0\1\10\13\0\1\36\10\0\1\37\1\36"+ - "\27\0\3\5\1\0\2\5\1\41\1\0\2\5\1\0"+ - "\15\5\2\0\1\5\1\0\1\5\6\0\7\5\3\0"+ - "\1\5\4\0\3\5\1\0\2\5\2\0\1\5\1\42"+ - "\1\0\7\5\1\43\5\5\2\0\1\5\1\0\1\5"+ - "\6\0\7\5\3\0\1\5\4\0\3\5\1\0\2\5"+ - "\2\0\2\5\1\0\3\5\1\44\11\5\2\0\1\5"+ - "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5"+ - "\1\0\2\5\2\0\1\45\1\5\1\0\15\5\2\0"+ - "\1\5\1\0\1\5\6\0\7\5\3\0\1\5\4\0"+ - "\3\5\1\0\2\5\2\0\2\5\1\0\11\5\1\46"+ - "\3\5\2\0\1\5\1\0\1\5\6\0\7\5\3\0"+ - "\1\5\4\0\3\5\1\0\2\5\2\0\2\5\1\0"+ - "\15\5\2\0\1\5\1\0\1\5\6\0\5\5\1\47"+ - "\1\5\3\0\1\5\4\0\3\5\1\0\2\5\2\0"+ - "\1\50\1\5\1\0\15\5\2\0\1\5\1\0\1\5"+ - "\6\0\7\5\3\0\1\5\6\0\1\37\1\0\1\37"+ - "\24\0\1\51\30\0\3\5\1\0\2\5\2\0\2\5"+ - "\1\0\11\5\1\52\1\5\1\53\1\5\2\0\1\5"+ - "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5"+ - "\1\0\2\5\2\0\2\5\1\0\13\5\1\54\1\5"+ - "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5"+ - "\1\30\2\0\36\30\2\0\17\30\2\0\1\32\57\0"+ - "\1\55\2\0\11\55\1\56\5\55\1\57\3\55\1\60"+ - "\1\61\1\62\10\55\1\63\1\64\11\55\1\65\1\66"+ - "\1\67\11\0\1\70\1\71\1\70\26\0\1\71\30\0"+ - "\1\37\1\0\1\37\13\0\1\36\11\0\1\36\31\0"+ - "\1\37\1\0\1\37\57\0\1\72\1\0\1\73\55\0"+ - "\3\5\1\0\2\5\2\0\2\5\1\74\15\5\2\0"+ - "\1\5\1\0\1\5\6\0\7\5\3\0\1\5\4\0"+ - "\3\5\1\0\2\5\2\0\2\5\1\0\14\5\1\75"+ - "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5"+ - "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\13\5"+ - "\1\76\1\5\2\0\1\5\1\0\1\5\6\0\7\5"+ - "\3\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5"+ - "\1\0\3\5\1\77\11\5\2\0\1\5\1\0\1\5"+ - "\6\0\7\5\3\0\1\5\4\0\3\5\1\0\2\5"+ - "\2\0\2\5\1\0\7\5\1\100\5\5\2\0\1\5"+ - "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5"+ - "\1\0\2\5\2\0\2\5\1\0\15\5\2\0\1\5"+ - "\1\0\1\5\6\0\1\101\6\5\3\0\1\5\4\0"+ - "\3\5\1\0\2\5\2\0\2\5\1\0\15\5\2\0"+ - "\1\5\1\0\1\5\6\0\2\5\1\102\4\5\3\0"+ - "\1\5\35\0\1\103\30\0\3\5\1\0\2\5\2\0"+ - "\2\5\1\0\1\5\1\104\1\105\12\5\2\0\1\5"+ - "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5"+ - "\1\0\2\5\2\0\2\5\1\0\15\5\2\0\1\5"+ - "\1\0\1\5\6\0\1\5\1\106\5\5\3\0\1\5"+ - "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\14\5"+ - "\1\107\2\0\1\5\1\0\1\5\6\0\7\5\3\0"+ - "\1\5\6\0\1\110\1\0\1\110\13\0\1\110\2\0"+ - "\1\110\2\0\1\110\3\0\1\110\1\0\1\110\7\0"+ - "\2\110\3\0\1\110\12\0\1\111\1\0\1\111\13\0"+ - "\1\111\2\0\1\111\2\0\1\111\3\0\1\111\1\0"+ - "\1\111\7\0\2\111\3\0\1\111\12\0\1\70\1\0"+ - "\1\70\64\0\1\112\54\0\1\73\1\0\1\73\2\0"+ - "\1\112\65\0\1\113\46\0\3\5\1\0\2\5\2\0"+ - "\2\5\1\0\14\5\1\114\2\0\1\5\1\0\1\5"+ - "\6\0\7\5\3\0\1\5\4\0\3\5\1\0\2\5"+ - "\2\0\2\5\1\0\3\5\1\115\11\5\2\0\1\5"+ - "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5"+ - "\1\0\2\5\2\0\2\5\1\0\5\5\1\116\7\5"+ - "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5"+ - "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\5\5"+ - "\1\117\7\5\2\0\1\5\1\0\1\5\6\0\7\5"+ - "\3\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5"+ - "\1\0\14\5\1\120\2\0\1\5\1\0\1\5\6\0"+ - "\7\5\3\0\1\5\4\0\3\5\1\0\2\5\2\0"+ - "\2\5\1\0\5\5\1\121\7\5\2\0\1\5\1\0"+ - "\1\5\6\0\7\5\3\0\1\5\4\0\3\5\1\0"+ - "\2\5\2\0\2\5\1\0\3\5\1\122\11\5\2\0"+ - "\1\5\1\0\1\5\6\0\7\5\3\0\1\5\4\0"+ - "\3\5\1\0\2\5\2\0\2\5\1\0\4\5\1\123"+ - "\10\5\2\0\1\5\1\0\1\5\6\0\7\5\3\0"+ - "\1\5\4\0\3\5\1\0\2\5\2\0\2\5\1\0"+ - "\15\5\2\0\1\5\1\0\1\5\6\0\3\5\1\124"+ - "\3\5\3\0\1\5\4\0\3\5\1\0\2\5\2\0"+ - "\1\5\1\125\1\0\15\5\2\0\1\5\1\0\1\5"+ - "\6\0\7\5\3\0\1\5\6\0\1\126\1\0\1\126"+ - "\13\0\1\126\2\0\1\126\2\0\1\126\3\0\1\126"+ - "\1\0\1\126\7\0\2\126\3\0\1\126\12\0\1\127"+ - "\1\0\1\127\13\0\1\127\2\0\1\127\2\0\1\127"+ - "\3\0\1\127\1\0\1\127\7\0\2\127\3\0\1\127"+ - "\46\0\1\130\37\0\1\131\45\0\3\5\1\0\2\5"+ - "\2\0\2\5\1\0\2\5\1\132\12\5\2\0\1\5"+ - "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5"+ - "\1\0\2\5\2\0\2\5\1\0\11\5\1\133\3\5"+ - "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5"+ - "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\2\5"+ - "\1\134\12\5\2\0\1\5\1\0\1\5\6\0\7\5"+ - "\3\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5"+ - "\1\0\15\5\2\0\1\5\1\0\1\5\6\0\6\5"+ - "\1\135\3\0\1\5\4\0\3\5\1\0\2\5\2\0"+ - "\2\5\1\0\5\5\1\136\7\5\2\0\1\5\1\0"+ - "\1\5\6\0\7\5\3\0\1\5\4\0\3\5\1\0"+ - "\2\5\2\0\2\5\1\0\13\5\1\137\1\5\2\0"+ - "\1\5\1\0\1\5\6\0\7\5\3\0\1\5\4\0"+ - "\3\5\1\0\2\5\2\0\2\5\1\0\13\5\1\140"+ - "\1\5\2\0\1\5\1\0\1\5\6\0\7\5\3\0"+ - "\1\5\4\0\3\5\1\0\2\5\2\0\2\5\1\0"+ - "\5\5\1\141\7\5\2\0\1\5\1\0\1\5\6\0"+ - "\7\5\3\0\1\5\15\0\1\142\50\0\3\5\1\0"+ - "\2\5\2\0\2\5\1\0\15\5\2\0\1\5\1\0"+ - "\1\5\6\0\1\5\1\143\5\5\3\0\1\5\4\0"+ - "\3\5\1\0\2\5\2\0\1\144\1\5\1\0\15\5"+ - "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5"+ - "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\15\5"+ - "\2\0\1\5\1\0\1\5\6\0\1\5\1\145\5\5"+ - "\3\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5"+ - "\1\0\2\5\1\146\12\5\2\0\1\5\1\0\1\5"+ - "\6\0\7\5\3\0\1\5\4\0\3\5\1\0\2\5"+ - "\2\0\2\5\1\0\15\5\2\0\1\5\1\0\1\5"+ - "\6\0\1\5\1\147\5\5\3\0\1\5\4\0\3\5"+ - "\1\0\2\5\2\0\2\5\1\0\3\5\1\150\11\5"+ - "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5"+ - "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\15\5"+ - "\2\0\1\5\1\0\1\5\6\0\4\5\1\151\2\5"+ - "\3\0\1\5\21\0\1\152\44\0\3\5\1\0\2\5"+ - "\2\0\2\5\1\0\13\5\1\153\1\5\2\0\1\5"+ - "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5"+ - "\1\0\2\5\2\0\2\5\1\0\2\5\1\154\12\5"+ - "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5"+ - "\4\0\3\5\1\0\2\5\2\0\1\155\1\5\1\0"+ - "\15\5\2\0\1\5\1\0\1\5\6\0\7\5\3\0"+ - "\1\5\4\0\3\5\1\0\2\5\2\0\2\5\1\0"+ - "\3\5\1\156\11\5\2\0\1\5\1\0\1\5\6\0"+ - "\7\5\3\0\1\5\4\0\3\5\1\0\2\5\2\0"+ - "\2\5\1\0\5\5\1\157\7\5\2\0\1\5\1\0"+ - "\1\5\6\0\7\5\3\0\1\5\4\0\3\5\1\0"+ - "\2\5\2\0\2\5\1\0\5\5\1\160\7\5\2\0"+ - "\1\5\1\0\1\5\6\0\7\5\3\0\1\5\22\0"+ - "\1\161\43\0\3\5\1\0\2\5\2\0\2\5\1\0"+ - "\14\5\1\162\2\0\1\5\1\0\1\5\6\0\7\5"+ - "\3\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5"+ - "\1\0\3\5\1\163\11\5\2\0\1\5\1\0\1\5"+ - "\6\0\7\5\3\0\1\5\4\0\3\5\1\0\2\5"+ - "\2\0\2\5\1\0\5\5\1\164\7\5\2\0\1\5"+ - "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5"+ - "\1\0\2\5\2\0\2\5\1\0\5\5\1\165\7\5"+ - "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5"+ - "\21\0\1\166\44\0\3\5\1\0\2\5\2\0\2\5"+ - "\1\0\15\5\2\0\1\5\1\0\1\5\6\0\2\5"+ - "\1\167\4\5\3\0\1\5\4\0\3\5\1\0\2\5"+ - "\2\0\2\5\1\0\15\5\2\0\1\5\1\0\1\5"+ - "\6\0\2\5\1\170\4\5\3\0\1\5\23\0\1\171"+ - "\62\0\1\172\62\0\1\173\62\0\1\174\44\0\1\175"+ - "\77\0\1\176\56\0\1\177\65\0\1\200\62\0\1\201"+ - "\51\0\1\202\62\0\1\203\63\0\1\204\65\0\1\205"+ - "\63\0\1\206\62\0\1\207\62\0\1\210\40\0\1\211"+ - "\46\0"; + private static final String ZZ_ROWMAP_PACKED_0 + = "\0\0\0\62\0\144\0\226\0\310\0\372\0\u012c\0\u015e" + + "\0\u0190\0\u01c2\0\u01f4\0\u0226\0\u0258\0\u028a\0\u02bc\0\u02ee" + + "\0\144\0\144\0\144\0\144\0\144\0\u0320\0\u0352\0\u0384" + + "\0\u03b6\0\144\0\u03e8\0\144\0\372\0\u041a\0\u044c\0\u047e" + + "\0\u04b0\0\u04e2\0\u0514\0\u0546\0\u0578\0\u05aa\0\u05dc\0\u060e" + + "\0\u0640\0\u0672\0\u06a4\0\u06d6\0\144\0\144\0\144\0\u0708" + + "\0\144\0\144\0\144\0\144\0\u073a\0\144\0\144\0\u076c" + + "\0\u076c\0\u079e\0\u07d0\0\u0802\0\u0834\0\u0866\0\u0898\0\u08ca" + + "\0\u08fc\0\u092e\0\144\0\u0960\0\u0992\0\u09c4\0\u09f6\0\u0a28" + + "\0\u0a5a\0\u0a8c\0\u0abe\0\310\0\u0af0\0\u0b22\0\310\0\u0b54" + + "\0\u0b86\0\u0bb8\0\u0bea\0\u0c1c\0\u0c4e\0\u073a\0\144\0\144" + + "\0\u0c80\0\u0cb2\0\u0ce4\0\u0d16\0\u0d48\0\u0d7a\0\u0dac\0\u0dde" + + "\0\310\0\u0e10\0\310\0\u0e42\0\u0e74\0\u0ea6\0\u0ed8\0\u0f0a" + + "\0\u0f3c\0\u0f6e\0\u0fa0\0\u0fd2\0\u1004\0\u1036\0\310\0\310" + + "\0\u1068\0\310\0\310\0\u109a\0\u10cc\0\u10fe\0\310\0\310" + + "\0\u1130\0\u1162\0\u1194\0\u11c6\0\u11f8\0\u122a\0\u125c\0\u128e" + + "\0\u12c0\0\u12f2\0\u1324\0\u1356\0\u1388\0\u13ba\0\u13ec\0\u141e" + + "\0\144"; - private static int [] zzUnpackTrans() { - int [] result = new int[5200]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackRowMap() { + int[] result = new int[137]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\2\0\1\11\15\1\5\11\4\1\1\11\1\1\1\11"+ - "\1\1\1\0\1\1\2\0\7\1\1\0\3\1\3\11"+ - "\1\1\4\11\1\1\2\11\1\1\4\0\6\1\1\11"+ - "\4\1\4\0\12\1\1\0\2\11\1\0\10\1\1\0"+ - "\7\1\1\0\6\1\1\0\4\1\1\0\2\1\20\0"+ - "\1\11"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[137]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + private static int zzUnpackRowMap(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; } - return j; - } - /** the input device */ - private java.io.Reader zzReader; + /** + * The transition table of the DFA + */ + private static final int[] ZZ_TRANS = zzUnpackTrans(); - /** the current state of the DFA */ - private int zzState; + private static final String ZZ_TRANS_PACKED_0 + = "\3\3\1\4\1\5\1\3\1\6\1\7\1\10\1\11" + + "\2\3\1\12\1\13\1\3\2\5\1\14\1\15\1\5" + + "\1\16\1\5\1\17\5\5\1\3\1\20\1\5\1\3" + + "\1\5\1\3\1\21\1\22\1\23\1\24\1\25\1\26" + + "\5\5\1\27\2\3\1\4\1\3\1\30\1\31\1\32" + + "\36\30\1\33\1\34\17\30\65\0\1\4\54\0\1\4" + + "\5\0\3\5\1\0\2\5\2\0\2\5\1\0\15\5" + + "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5" + + "\6\0\1\35\1\0\1\35\13\0\1\36\10\0\1\37" + + "\1\36\31\0\1\35\1\0\1\10\24\0\1\40\32\0" + + "\1\10\1\0\1\10\13\0\1\36\10\0\1\37\1\36" + + "\27\0\3\5\1\0\2\5\1\41\1\0\2\5\1\0" + + "\15\5\2\0\1\5\1\0\1\5\6\0\7\5\3\0" + + "\1\5\4\0\3\5\1\0\2\5\2\0\1\5\1\42" + + "\1\0\7\5\1\43\5\5\2\0\1\5\1\0\1\5" + + "\6\0\7\5\3\0\1\5\4\0\3\5\1\0\2\5" + + "\2\0\2\5\1\0\3\5\1\44\11\5\2\0\1\5" + + "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5" + + "\1\0\2\5\2\0\1\45\1\5\1\0\15\5\2\0" + + "\1\5\1\0\1\5\6\0\7\5\3\0\1\5\4\0" + + "\3\5\1\0\2\5\2\0\2\5\1\0\11\5\1\46" + + "\3\5\2\0\1\5\1\0\1\5\6\0\7\5\3\0" + + "\1\5\4\0\3\5\1\0\2\5\2\0\2\5\1\0" + + "\15\5\2\0\1\5\1\0\1\5\6\0\5\5\1\47" + + "\1\5\3\0\1\5\4\0\3\5\1\0\2\5\2\0" + + "\1\50\1\5\1\0\15\5\2\0\1\5\1\0\1\5" + + "\6\0\7\5\3\0\1\5\6\0\1\37\1\0\1\37" + + "\24\0\1\51\30\0\3\5\1\0\2\5\2\0\2\5" + + "\1\0\11\5\1\52\1\5\1\53\1\5\2\0\1\5" + + "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5" + + "\1\0\2\5\2\0\2\5\1\0\13\5\1\54\1\5" + + "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5" + + "\1\30\2\0\36\30\2\0\17\30\2\0\1\32\57\0" + + "\1\55\2\0\11\55\1\56\5\55\1\57\3\55\1\60" + + "\1\61\1\62\10\55\1\63\1\64\11\55\1\65\1\66" + + "\1\67\11\0\1\70\1\71\1\70\26\0\1\71\30\0" + + "\1\37\1\0\1\37\13\0\1\36\11\0\1\36\31\0" + + "\1\37\1\0\1\37\57\0\1\72\1\0\1\73\55\0" + + "\3\5\1\0\2\5\2\0\2\5\1\74\15\5\2\0" + + "\1\5\1\0\1\5\6\0\7\5\3\0\1\5\4\0" + + "\3\5\1\0\2\5\2\0\2\5\1\0\14\5\1\75" + + "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5" + + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\13\5" + + "\1\76\1\5\2\0\1\5\1\0\1\5\6\0\7\5" + + "\3\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5" + + "\1\0\3\5\1\77\11\5\2\0\1\5\1\0\1\5" + + "\6\0\7\5\3\0\1\5\4\0\3\5\1\0\2\5" + + "\2\0\2\5\1\0\7\5\1\100\5\5\2\0\1\5" + + "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5" + + "\1\0\2\5\2\0\2\5\1\0\15\5\2\0\1\5" + + "\1\0\1\5\6\0\1\101\6\5\3\0\1\5\4\0" + + "\3\5\1\0\2\5\2\0\2\5\1\0\15\5\2\0" + + "\1\5\1\0\1\5\6\0\2\5\1\102\4\5\3\0" + + "\1\5\35\0\1\103\30\0\3\5\1\0\2\5\2\0" + + "\2\5\1\0\1\5\1\104\1\105\12\5\2\0\1\5" + + "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5" + + "\1\0\2\5\2\0\2\5\1\0\15\5\2\0\1\5" + + "\1\0\1\5\6\0\1\5\1\106\5\5\3\0\1\5" + + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\14\5" + + "\1\107\2\0\1\5\1\0\1\5\6\0\7\5\3\0" + + "\1\5\6\0\1\110\1\0\1\110\13\0\1\110\2\0" + + "\1\110\2\0\1\110\3\0\1\110\1\0\1\110\7\0" + + "\2\110\3\0\1\110\12\0\1\111\1\0\1\111\13\0" + + "\1\111\2\0\1\111\2\0\1\111\3\0\1\111\1\0" + + "\1\111\7\0\2\111\3\0\1\111\12\0\1\70\1\0" + + "\1\70\64\0\1\112\54\0\1\73\1\0\1\73\2\0" + + "\1\112\65\0\1\113\46\0\3\5\1\0\2\5\2\0" + + "\2\5\1\0\14\5\1\114\2\0\1\5\1\0\1\5" + + "\6\0\7\5\3\0\1\5\4\0\3\5\1\0\2\5" + + "\2\0\2\5\1\0\3\5\1\115\11\5\2\0\1\5" + + "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5" + + "\1\0\2\5\2\0\2\5\1\0\5\5\1\116\7\5" + + "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5" + + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\5\5" + + "\1\117\7\5\2\0\1\5\1\0\1\5\6\0\7\5" + + "\3\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5" + + "\1\0\14\5\1\120\2\0\1\5\1\0\1\5\6\0" + + "\7\5\3\0\1\5\4\0\3\5\1\0\2\5\2\0" + + "\2\5\1\0\5\5\1\121\7\5\2\0\1\5\1\0" + + "\1\5\6\0\7\5\3\0\1\5\4\0\3\5\1\0" + + "\2\5\2\0\2\5\1\0\3\5\1\122\11\5\2\0" + + "\1\5\1\0\1\5\6\0\7\5\3\0\1\5\4\0" + + "\3\5\1\0\2\5\2\0\2\5\1\0\4\5\1\123" + + "\10\5\2\0\1\5\1\0\1\5\6\0\7\5\3\0" + + "\1\5\4\0\3\5\1\0\2\5\2\0\2\5\1\0" + + "\15\5\2\0\1\5\1\0\1\5\6\0\3\5\1\124" + + "\3\5\3\0\1\5\4\0\3\5\1\0\2\5\2\0" + + "\1\5\1\125\1\0\15\5\2\0\1\5\1\0\1\5" + + "\6\0\7\5\3\0\1\5\6\0\1\126\1\0\1\126" + + "\13\0\1\126\2\0\1\126\2\0\1\126\3\0\1\126" + + "\1\0\1\126\7\0\2\126\3\0\1\126\12\0\1\127" + + "\1\0\1\127\13\0\1\127\2\0\1\127\2\0\1\127" + + "\3\0\1\127\1\0\1\127\7\0\2\127\3\0\1\127" + + "\46\0\1\130\37\0\1\131\45\0\3\5\1\0\2\5" + + "\2\0\2\5\1\0\2\5\1\132\12\5\2\0\1\5" + + "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5" + + "\1\0\2\5\2\0\2\5\1\0\11\5\1\133\3\5" + + "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5" + + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\2\5" + + "\1\134\12\5\2\0\1\5\1\0\1\5\6\0\7\5" + + "\3\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5" + + "\1\0\15\5\2\0\1\5\1\0\1\5\6\0\6\5" + + "\1\135\3\0\1\5\4\0\3\5\1\0\2\5\2\0" + + "\2\5\1\0\5\5\1\136\7\5\2\0\1\5\1\0" + + "\1\5\6\0\7\5\3\0\1\5\4\0\3\5\1\0" + + "\2\5\2\0\2\5\1\0\13\5\1\137\1\5\2\0" + + "\1\5\1\0\1\5\6\0\7\5\3\0\1\5\4\0" + + "\3\5\1\0\2\5\2\0\2\5\1\0\13\5\1\140" + + "\1\5\2\0\1\5\1\0\1\5\6\0\7\5\3\0" + + "\1\5\4\0\3\5\1\0\2\5\2\0\2\5\1\0" + + "\5\5\1\141\7\5\2\0\1\5\1\0\1\5\6\0" + + "\7\5\3\0\1\5\15\0\1\142\50\0\3\5\1\0" + + "\2\5\2\0\2\5\1\0\15\5\2\0\1\5\1\0" + + "\1\5\6\0\1\5\1\143\5\5\3\0\1\5\4\0" + + "\3\5\1\0\2\5\2\0\1\144\1\5\1\0\15\5" + + "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5" + + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\15\5" + + "\2\0\1\5\1\0\1\5\6\0\1\5\1\145\5\5" + + "\3\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5" + + "\1\0\2\5\1\146\12\5\2\0\1\5\1\0\1\5" + + "\6\0\7\5\3\0\1\5\4\0\3\5\1\0\2\5" + + "\2\0\2\5\1\0\15\5\2\0\1\5\1\0\1\5" + + "\6\0\1\5\1\147\5\5\3\0\1\5\4\0\3\5" + + "\1\0\2\5\2\0\2\5\1\0\3\5\1\150\11\5" + + "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5" + + "\4\0\3\5\1\0\2\5\2\0\2\5\1\0\15\5" + + "\2\0\1\5\1\0\1\5\6\0\4\5\1\151\2\5" + + "\3\0\1\5\21\0\1\152\44\0\3\5\1\0\2\5" + + "\2\0\2\5\1\0\13\5\1\153\1\5\2\0\1\5" + + "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5" + + "\1\0\2\5\2\0\2\5\1\0\2\5\1\154\12\5" + + "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5" + + "\4\0\3\5\1\0\2\5\2\0\1\155\1\5\1\0" + + "\15\5\2\0\1\5\1\0\1\5\6\0\7\5\3\0" + + "\1\5\4\0\3\5\1\0\2\5\2\0\2\5\1\0" + + "\3\5\1\156\11\5\2\0\1\5\1\0\1\5\6\0" + + "\7\5\3\0\1\5\4\0\3\5\1\0\2\5\2\0" + + "\2\5\1\0\5\5\1\157\7\5\2\0\1\5\1\0" + + "\1\5\6\0\7\5\3\0\1\5\4\0\3\5\1\0" + + "\2\5\2\0\2\5\1\0\5\5\1\160\7\5\2\0" + + "\1\5\1\0\1\5\6\0\7\5\3\0\1\5\22\0" + + "\1\161\43\0\3\5\1\0\2\5\2\0\2\5\1\0" + + "\14\5\1\162\2\0\1\5\1\0\1\5\6\0\7\5" + + "\3\0\1\5\4\0\3\5\1\0\2\5\2\0\2\5" + + "\1\0\3\5\1\163\11\5\2\0\1\5\1\0\1\5" + + "\6\0\7\5\3\0\1\5\4\0\3\5\1\0\2\5" + + "\2\0\2\5\1\0\5\5\1\164\7\5\2\0\1\5" + + "\1\0\1\5\6\0\7\5\3\0\1\5\4\0\3\5" + + "\1\0\2\5\2\0\2\5\1\0\5\5\1\165\7\5" + + "\2\0\1\5\1\0\1\5\6\0\7\5\3\0\1\5" + + "\21\0\1\166\44\0\3\5\1\0\2\5\2\0\2\5" + + "\1\0\15\5\2\0\1\5\1\0\1\5\6\0\2\5" + + "\1\167\4\5\3\0\1\5\4\0\3\5\1\0\2\5" + + "\2\0\2\5\1\0\15\5\2\0\1\5\1\0\1\5" + + "\6\0\2\5\1\170\4\5\3\0\1\5\23\0\1\171" + + "\62\0\1\172\62\0\1\173\62\0\1\174\44\0\1\175" + + "\77\0\1\176\56\0\1\177\65\0\1\200\62\0\1\201" + + "\51\0\1\202\62\0\1\203\63\0\1\204\65\0\1\205" + + "\63\0\1\206\62\0\1\207\62\0\1\210\40\0\1\211" + + "\46\0"; - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + private static int[] zzUnpackTrans() { + int[] result = new int[5200]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + private static int zzUnpackTrans(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } - /** the textposition at the last accepting state */ - private int zzMarkedPos; - /** the current text position in the buffer */ - private int zzCurrentPos; + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - /** number of newlines encountered up to the start of the matched text */ - private int yyline; + private static final String ZZ_ATTRIBUTE_PACKED_0 + = "\2\0\1\11\15\1\5\11\4\1\1\11\1\1\1\11" + + "\1\1\1\0\1\1\2\0\7\1\1\0\3\1\3\11" + + "\1\1\4\11\1\1\2\11\1\1\4\0\6\1\1\11" + + "\4\1\4\0\12\1\1\0\2\11\1\0\10\1\1\0" + + "\7\1\1\0\6\1\1\0\4\1\1\0\2\1\20\0" + + "\1\11"; - /** the number of characters up to the start of the matched text */ - private int yychar; + private static int[] zzUnpackAttribute() { + int[] result = new int[137]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; + private static int zzUnpackAttribute(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; + /** + * the input device + */ + private java.io.Reader zzReader; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + /** + * the current state of the DFA + */ + private int zzState; - /** denotes if the user-EOF-code has already been executed */ - private boolean zzEOFDone; - - /** - * The number of occupied positions in zzBuffer beyond zzEndRead. - * When a lead/high surrogate has been read from the input stream - * into the final zzBuffer position, this will have a value of 1; - * otherwise, it will have a value of 0. - */ - private int zzFinalHighSurrogate = 0; + /** + * the current lexical state + */ + private int zzLexicalState = YYINITIAL; - /* user code: */ + /** + * this buffer contains the current text to be matched and is the source of + * the yytext() string + */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + /** + * the textposition at the last accepting state + */ + private int zzMarkedPos; + + /** + * the current text position in the buffer + */ + private int zzCurrentPos; + + /** + * startRead marks the beginning of the yytext() string in the buffer + */ + private int zzStartRead; + + /** + * endRead marks the last character in the buffer, that has been read from + * input + */ + private int zzEndRead; + + /** + * number of newlines encountered up to the start of the matched text + */ + private int yyline; + + /** + * the number of characters up to the start of the matched text + */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** + * zzAtEOF == true <=> the scanner is at the EOF + */ + private boolean zzAtEOF; + + /** + * denotes if the user-EOF-code has already been executed + */ + private boolean zzEOFDone; + + /** + * The number of occupied positions in zzBuffer beyond zzEndRead. When a + * lead/high surrogate has been read from the input stream into the final + * zzBuffer position, this will have a value of 1; otherwise, it will have a + * value of 0. + */ + private int zzFinalHighSurrogate = 0; + + /* user code: */ StringBuilder string = new StringBuilder(); boolean isMultiname = false; long multinameId = 0; @@ -637,542 +677,572 @@ public final class MethodInfoLexer { return yyline + 1; } - - - /** - * Creates a new scanner - * - * @param in the java.io.Reader to read input from. - */ - public MethodInfoLexer(java.io.Reader in) { - this.zzReader = in; - } - - - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char [] zzUnpackCMap(String packed) { - char [] map = new char[0x110000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 3812) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do map[j++] = value; while (--count > 0); - } - return map; - } - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public MethodInfoLexer(java.io.Reader in) { + this.zzReader = in; } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { - /* if not: blow it up */ - char newBuffer[] = new char[zzBuffer.length*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - } - - /* fill the buffer with new input */ - int requested = zzBuffer.length - zzEndRead; - int totalRead = 0; - while (totalRead < requested) { - int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); - if (numRead == -1) { - break; - } - totalRead += numRead; - } - - if (totalRead > 0) { - zzEndRead += totalRead; - if (totalRead == requested) { /* possibly more input available */ - if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { - --zzEndRead; - zzFinalHighSurrogate = 1; + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char[] zzUnpackCMap(String packed) { + char[] map = new char[0x110000]; + int i = 0; + /* index in packed string */ + int j = 0; + /* index in unpacked array */ + while (i < 3812) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do { + map[j++] = value; + } while (--count > 0); } - } - return false; + return map; } - // totalRead = 0: End of stream - return true; - } + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + /* first: make room (if you can) */ + if (zzStartRead > 0) { + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead - zzStartRead); - if (zzReader != null) - zzReader.close(); - } - - - /** - * Resets the scanner to read from a new input stream. - * Does not close the old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). - * Lexical state is set to ZZ_INITIAL. - * - * Internal scan buffer is resized down to its initial length, if it has grown. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - zzFinalHighSurrogate = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Returns the character at position pos from the - * matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. - * A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead+pos]; - } - - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos-zzStartRead; - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. - * This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if ( number > yylength() ) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ - public ParsedSymbol yylex() throws java.io.IOException, MethodInfoParseException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; - - int [] zzTransL = ZZ_TRANS; - int [] zzRowMapL = ZZ_ROWMAP; - int [] zzAttrL = ZZ_ATTRIBUTE; - - while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar+= zzMarkedPosL-zzStartRead; - - boolean zzR = false; - int zzCh; - int zzCharCount; - for (zzCurrentPosL = zzStartRead ; - zzCurrentPosL < zzMarkedPosL ; - zzCurrentPosL += zzCharCount ) { - zzCh = Character.codePointAt(zzBufferL, zzCurrentPosL, zzMarkedPosL); - zzCharCount = Character.charCount(zzCh); - switch (zzCh) { - case '\u000B': - case '\u000C': - case '\u0085': - case '\u2028': - case '\u2029': - yyline++; - yycolumn = 0; - zzR = false; - break; - case '\r': - yyline++; - yycolumn = 0; - zzR = true; - break; - case '\n': - if (zzR) - zzR = false; - else { - yyline++; - yycolumn = 0; - } - break; - default: - zzR = false; - yycolumn += zzCharCount; + /* translate stored positions */ + zzEndRead -= zzStartRead; + zzCurrentPos -= zzStartRead; + zzMarkedPos -= zzStartRead; + zzStartRead = 0; } - } - if (zzR) { - // peek one character ahead if it is \n (if we have counted one line too much) - boolean zzPeek; - if (zzMarkedPosL < zzEndReadL) - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; - else if (zzAtEOF) - zzPeek = false; - else { - boolean eof = zzRefill(); - zzEndReadL = zzEndRead; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - if (eof) - zzPeek = false; - else - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { + /* if not: blow it up */ + char newBuffer[] = new char[zzBuffer.length * 2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; } - if (zzPeek) yyline--; - } - zzAction = -1; - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; + /* fill the buffer with new input */ + int requested = zzBuffer.length - zzEndRead; + int totalRead = 0; + while (totalRead < requested) { + int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); + if (numRead == -1) { + break; + } + totalRead += numRead; + } - // set up zzAction for empty match case: - int zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - } + if (totalRead > 0) { + zzEndRead += totalRead; + if (totalRead == requested) { + /* possibly more input available */ + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + --zzEndRead; + zzFinalHighSurrogate = 1; + } + } + return false; + } + // totalRead = 0: End of stream + return true; + } + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; + /* indicate end of file */ + zzEndRead = zzStartRead; + /* invalidate buffer */ + + if (zzReader != null) { + zzReader.close(); + } + } + + /** + * Resets the scanner to read from a new input stream. Does not close the + * old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). Lexical + * state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has + * grown. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + zzFinalHighSurrogate = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) { + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + } + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); + } + + /** + * Returns the character at position pos from the matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. A value from 0 to + * yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead + pos]; + } + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos - zzStartRead; + } + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of yypushback(int) and + * a match-all fallback rule) this method will only be called with things + * that "Can't Possibly Happen". If this method is called, something is + * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done in error + * fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. This number must + * not be greater than yylength()! + */ + public void yypushback(int number) { + if (number > yylength()) { + zzScanError(ZZ_PUSHBACK_2BIG); + } + + zzMarkedPos -= number; + } + + /** + * Resumes scanning until the next regular expression is matched, the end of + * input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public ParsedSymbol yylex() throws java.io.IOException, MethodInfoParseException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char[] zzBufferL = zzBuffer; + char[] zzCMapL = ZZ_CMAP; + + int[] zzTransL = ZZ_TRANS; + int[] zzRowMapL = ZZ_ROWMAP; + int[] zzAttrL = ZZ_ATTRIBUTE; - zzForAction: { while (true) { - - if (zzCurrentPosL < zzEndReadL) { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; - if (zzNext == -1) break zzForAction; - zzState = zzNext; + zzMarkedPosL = zzMarkedPos; - zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ( (zzAttributes & 8) == 8 ) break zzForAction; - } + yychar += zzMarkedPosL - zzStartRead; + boolean zzR = false; + int zzCh; + int zzCharCount; + for (zzCurrentPosL = zzStartRead; + zzCurrentPosL < zzMarkedPosL; + zzCurrentPosL += zzCharCount) { + zzCh = Character.codePointAt(zzBufferL, zzCurrentPosL, zzMarkedPosL); + zzCharCount = Character.charCount(zzCh); + switch (zzCh) { + case '\u000B': + case '\u000C': + case '\u0085': + case '\u2028': + case '\u2029': + yyline++; + yycolumn = 0; + zzR = false; + break; + case '\r': + yyline++; + yycolumn = 0; + zzR = true; + break; + case '\n': + if (zzR) { + zzR = false; + } else { + yyline++; + yycolumn = 0; + } + break; + default: + zzR = false; + yycolumn += zzCharCount; + } + } + + if (zzR) { + // peek one character ahead if it is \n (if we have counted one line too much) + boolean zzPeek; + if (zzMarkedPosL < zzEndReadL) { + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + } else if (zzAtEOF) { + zzPeek = false; + } else { + boolean eof = zzRefill(); + zzEndReadL = zzEndRead; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + if (eof) { + zzPeek = false; + } else { + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + } + } + if (zzPeek) { + yyline--; + } + } + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + } + + zzForAction: + { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } else { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } + } + int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; + if (zzNext == -1) { + break zzForAction; + } + zzState = zzNext; + + zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ((zzAttributes & 8) == 8) { + break zzForAction; + } + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: { + } + case 36: + break; + case 2: { + return new ParsedSymbol(ParsedSymbol.TYPE_IDENTIFIER, yytext()); + } + case 37: + break; + case 3: { + return new ParsedSymbol(ParsedSymbol.TYPE_INTEGER, Long.parseLong((yytext()))); + } + case 38: + break; + case 4: { + isMultiname = false; + yybegin(STRING); + string.setLength(0); + } + case 39: + break; + case 5: { + return new ParsedSymbol(ParsedSymbol.TYPE_COLON); + } + case 40: + break; + case 6: { + return new ParsedSymbol(ParsedSymbol.TYPE_COMMA); + } + case 41: + break; + case 7: { + return new ParsedSymbol(ParsedSymbol.TYPE_STAR); + } + case 42: + break; + case 8: { + return new ParsedSymbol(ParsedSymbol.TYPE_ASSIGN); + } + case 43: + break; + case 9: { + string.append(yytext()); + } + case 44: + break; + case 10: { + throw new MethodInfoParseException("Unterminated string at end of line", yyline + 1); + } + case 45: + break; + case 11: { + yybegin(YYINITIAL); + // length also includes the trailing quote + if (isMultiname) { + return new ParsedSymbol(ParsedSymbol.TYPE_MULTINAME, multinameId); + } else { + return new ParsedSymbol(ParsedSymbol.TYPE_STRING, string.toString()); + } + } + case 46: + break; + case 12: { + return new ParsedSymbol(ParsedSymbol.TYPE_FLOAT, Double.parseDouble((yytext()))); + } + case 47: + break; + case 13: { + throw new MethodInfoParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 48: + break; + case 14: { + string.append('\n'); + } + case 49: + break; + case 15: { + string.append('\t'); + } + case 50: + break; + case 16: { + string.append('\b'); + } + case 51: + break; + case 17: { + string.append('\r'); + } + case 52: + break; + case 18: { + string.append('\\'); + } + case 53: + break; + case 19: { + string.append('\"'); + } + case 54: + break; + case 20: { + string.append('\f'); + } + case 55: + break; + case 21: { + string.append('\''); + } + case 56: + break; + case 22: { + return new ParsedSymbol(ParsedSymbol.TYPE_DOTS); + } + case 57: + break; + case 23: { + return new ParsedSymbol(ParsedSymbol.TYPE_NULL); + } + case 58: + break; + case 24: { + return new ParsedSymbol(ParsedSymbol.TYPE_TRUE); + } + case 59: + break; + case 25: { + char val = (char) Integer.parseInt(yytext().substring(2), 16); + string.append(val); + } + case 60: + break; + case 26: { + isMultiname = true; + String s = yytext(); + multinameId = Long.parseLong(s.substring(2, s.length() - 2)); + yybegin(STRING); + string.setLength(0); + } + case 61: + break; + case 27: { + return new ParsedSymbol(ParsedSymbol.TYPE_FALSE); + } + case 62: + break; + case 28: { + return new ParsedSymbol(ParsedSymbol.TYPE_STATIC); + } + case 63: + break; + case 29: { + return new ParsedSymbol(ParsedSymbol.TYPE_PRIVATE); + } + case 64: + break; + case 30: { + return new ParsedSymbol(ParsedSymbol.TYPE_PACKAGE); + } + case 65: + break; + case 31: { + return new ParsedSymbol(ParsedSymbol.TYPE_INTERNAL); + } + case 66: + break; + case 32: { + return new ParsedSymbol(ParsedSymbol.TYPE_EXPLICIT); + } + case 67: + break; + case 33: { + return new ParsedSymbol(ParsedSymbol.TYPE_UNDEFINED); + } + case 68: + break; + case 34: { + return new ParsedSymbol(ParsedSymbol.TYPE_PROTECTED); + } + case 69: + break; + case 35: { + String s = yytext(); + long ns = Long.parseLong(s.substring(3, s.length() - 2)); + return new ParsedSymbol(ParsedSymbol.TYPE_NAMESPACE, ns); + } + case 70: + break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ParsedSymbol(ParsedSymbol.TYPE_EOF); + } + } else { + zzScanError(ZZ_NO_MATCH); + } + } } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: - { - } - case 36: break; - case 2: - { return new ParsedSymbol(ParsedSymbol.TYPE_IDENTIFIER, yytext()); - } - case 37: break; - case 3: - { return new ParsedSymbol(ParsedSymbol.TYPE_INTEGER, Long.parseLong((yytext()))); - } - case 38: break; - case 4: - { isMultiname = false; - yybegin(STRING); - string.setLength(0); - } - case 39: break; - case 5: - { return new ParsedSymbol(ParsedSymbol.TYPE_COLON); - } - case 40: break; - case 6: - { return new ParsedSymbol(ParsedSymbol.TYPE_COMMA); - } - case 41: break; - case 7: - { return new ParsedSymbol(ParsedSymbol.TYPE_STAR); - } - case 42: break; - case 8: - { return new ParsedSymbol(ParsedSymbol.TYPE_ASSIGN); - } - case 43: break; - case 9: - { string.append(yytext()); - } - case 44: break; - case 10: - { throw new MethodInfoParseException("Unterminated string at end of line", yyline + 1); - } - case 45: break; - case 11: - { yybegin(YYINITIAL); - // length also includes the trailing quote - if (isMultiname){ - return new ParsedSymbol(ParsedSymbol.TYPE_MULTINAME, multinameId); - } else { - return new ParsedSymbol(ParsedSymbol.TYPE_STRING, string.toString()); - } - } - case 46: break; - case 12: - { return new ParsedSymbol(ParsedSymbol.TYPE_FLOAT, Double.parseDouble((yytext()))); - } - case 47: break; - case 13: - { throw new MethodInfoParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); - } - case 48: break; - case 14: - { string.append('\n'); - } - case 49: break; - case 15: - { string.append('\t'); - } - case 50: break; - case 16: - { string.append('\b'); - } - case 51: break; - case 17: - { string.append('\r'); - } - case 52: break; - case 18: - { string.append('\\'); - } - case 53: break; - case 19: - { string.append('\"'); - } - case 54: break; - case 20: - { string.append('\f'); - } - case 55: break; - case 21: - { string.append('\''); - } - case 56: break; - case 22: - { return new ParsedSymbol(ParsedSymbol.TYPE_DOTS); - } - case 57: break; - case 23: - { return new ParsedSymbol(ParsedSymbol.TYPE_NULL); - } - case 58: break; - case 24: - { return new ParsedSymbol(ParsedSymbol.TYPE_TRUE); - } - case 59: break; - case 25: - { char val = (char) Integer.parseInt(yytext().substring(2), 16); - string.append(val); - } - case 60: break; - case 26: - { isMultiname = true; - String s = yytext(); - multinameId = Long.parseLong(s.substring(2, s.length() - 2)); - yybegin(STRING); - string.setLength(0); - } - case 61: break; - case 27: - { return new ParsedSymbol(ParsedSymbol.TYPE_FALSE); - } - case 62: break; - case 28: - { return new ParsedSymbol(ParsedSymbol.TYPE_STATIC); - } - case 63: break; - case 29: - { return new ParsedSymbol(ParsedSymbol.TYPE_PRIVATE); - } - case 64: break; - case 30: - { return new ParsedSymbol(ParsedSymbol.TYPE_PACKAGE); - } - case 65: break; - case 31: - { return new ParsedSymbol(ParsedSymbol.TYPE_INTERNAL); - } - case 66: break; - case 32: - { return new ParsedSymbol(ParsedSymbol.TYPE_EXPLICIT); - } - case 67: break; - case 33: - { return new ParsedSymbol(ParsedSymbol.TYPE_UNDEFINED); - } - case 68: break; - case 34: - { return new ParsedSymbol(ParsedSymbol.TYPE_PROTECTED); - } - case 69: break; - case 35: - { String s = yytext(); - long ns = Long.parseLong(s.substring(3, s.length() - 2)); - return new ParsedSymbol(ParsedSymbol.TYPE_NAMESPACE, ns); - } - case 70: break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return new ParsedSymbol(ParsedSymbol.TYPE_EOF); - } - } - else { - zzScanError(ZZ_NO_MATCH); - } - } } - } - } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java index de901c134..33d233f2e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/InstanceInfo.java @@ -104,7 +104,7 @@ public class InstanceInfo { fileName = getName(abc.constants).getNameWithNamespace(abc.constants, false).toRawString(); } fileName = Helper.makeFileName(fileName); - + if (ct instanceof DefineBinaryDataTag) { writer.appendNoHilight("[Embed(source=\"" + ASSETS_DIR + fileName + ".bin\", mimeType=\"application/octet-stream\")]").newLine(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java index d52ff7962..921e556a3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java @@ -144,7 +144,7 @@ public final class MethodBody implements Cloneable { } } - public synchronized AVM2Code getCode() { + public synchronized AVM2Code getCode() { if (code == null) { AVM2Code avm2Code; try { @@ -170,7 +170,7 @@ public final class MethodBody implements Cloneable { public void markOffsets() { getCode().markOffsets(); - } + } public int removeDeadCode(AVM2ConstantPool constants, Trait trait, MethodInfo info) throws InterruptedException { return getCode().removeDeadCode(this); @@ -205,7 +205,7 @@ public final class MethodBody implements Cloneable { */ public void replaceInstruction(int pos, AVM2Instruction instruction) { getCode().replaceInstruction(pos, instruction, this); - } + } public void insertAll(int pos, List list) { for (AVM2Instruction ins : list) { @@ -336,8 +336,7 @@ public final class MethodBody implements Cloneable { } } } - - + @Override public String toString() { String s = ""; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java index d5639ee02..d05204348 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java @@ -87,7 +87,7 @@ public class MethodInfo { public void setFlagIgnore_Rest() { flags |= FLAG_IGNORE_REST; } - + public void setFlagIgnore_Rest(boolean val) { if (val) { setFlagIgnore_Rest(); @@ -95,7 +95,7 @@ public class MethodInfo { unsetFlagIgnore_Rest(); } } - + public void unsetFlagIgnore_Rest() { if (flagIgnore_rest()) { flags -= FLAG_IGNORE_REST; @@ -146,8 +146,6 @@ public class MethodInfo { } } - - public void unsetFlagNeed_rest() { if (flagNeed_rest()) { flags -= FLAG_NEED_REST; @@ -157,7 +155,7 @@ public class MethodInfo { public void setFlagNeed_rest() { flags |= FLAG_NEED_REST; } - + public void setFlagNeed_rest(boolean val) { if (val) { setFlagNeed_rest(); @@ -166,8 +164,6 @@ public class MethodInfo { } } - - public void unsetFlagHas_optional() { if (flagHas_optional()) { flags -= FLAG_HAS_OPTIONAL; @@ -177,14 +173,14 @@ public class MethodInfo { public void setFlagHas_optional() { flags |= FLAG_HAS_OPTIONAL; } - + public void setFlagHas_optional(boolean val) { if (val) { setFlagHas_optional(); } else { unsetFlagHas_optional(); } - } + } public void unsetFlagHas_paramnames() { if (flagHas_paramnames()) { @@ -195,7 +191,7 @@ public class MethodInfo { public void setFlagHas_paramnames() { flags |= FLAG_HAS_PARAMNAMES; } - + public void setFlagHas_paramnames(boolean val) { if (val) { setFlagHas_paramnames(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java index 05f2f4280..88ccbeb47 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java @@ -276,7 +276,7 @@ public class Multiname { } } return kindStr; - } + } public static String namespaceToString(AVM2ConstantPool constants, int index) { if (index == 0) { @@ -338,7 +338,7 @@ public class Multiname { } return constants.getMultiname(index).toString(constants, fullyQualifiedNames); } - + @Override public String toString() { String kindStr = getKindStr(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ValueKind.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ValueKind.java index 59bb241ec..5a907b150 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ValueKind.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/ValueKind.java @@ -94,7 +94,7 @@ public class ValueKind { return CONSTANT_StaticProtectedNs; } return 0; - } + } public boolean isNamespace() { switch (value_kind) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java index 5e26e6e0b..acb44e318 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java @@ -78,8 +78,6 @@ public class TraitClass extends Trait implements TraitWithSlot { return slot_id; } - - @Override public void getDependencies(AbcIndexing abcIndex, int scriptIndex, int classIndex, boolean isStatic, String customNs, ABC abc, List dependencies, DottedChain ignorePackage, List fullyQualifiedNames, List uses) throws InterruptedException { super.getDependencies(abcIndex, scriptIndex, -1, false, customNs, abc, dependencies, ignorePackage == null ? getPackage(abc) : ignorePackage, fullyQualifiedNames, uses); @@ -122,7 +120,7 @@ public class TraitClass extends Trait implements TraitWithSlot { public String toString(ABC abc, List fullyQualifiedNames) { return "Class " + abc.constants.getMultiname(name_index).toString(abc.constants, fullyQualifiedNames) + " slot=" + slot_id + " class_info=" + class_info + " metadata=" + Helper.intArrToString(metadata); } - + @Override public GraphTextWriter toString(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java index e793f88a0..e8f2b4e0c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java @@ -55,7 +55,7 @@ public class TraitFunction extends Trait implements TraitWithSlot { @Override public int getSlotIndex() { return slot_id; - } + } @Override public GraphTextWriter toStringHeader(Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java index bf51190ca..7c43c71b1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java @@ -54,7 +54,7 @@ public class TraitMethodGetterSetter extends Trait { abc.constants.getMultiname(name_index).deleted = d; abc.method_info.get(method_info).delete(abc, d); - } + } @Override public void convertHeader(Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, NulWriter writer, List fullyQualifiedNames, boolean parallel) { @@ -128,7 +128,7 @@ public class TraitMethodGetterSetter extends Trait { public String toString(ABC abc, List fullyQualifiedNames) { return "0x" + Helper.formatAddress(fileOffset) + " " + Helper.byteArrToString(bytes) + " MethodGetterSetter " + abc.constants.getMultiname(name_index).toString(abc.constants, fullyQualifiedNames) + " disp_id=" + disp_id + " method_info=" + method_info + " metadata=" + Helper.intArrToString(metadata); } - + @Override public GraphTextWriter toString(AbcIndexing abcIndex, Trait parent, ConvertData convertData, String path, ABC abc, boolean isStatic, ScriptExportMode exportMode, int scriptIndex, int classIndex, GraphTextWriter writer, List fullyQualifiedNames, boolean parallel, boolean insideInterface) throws InterruptedException { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java index 191a7ff51..e9bf01a71 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java @@ -69,7 +69,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { @Override public int getSlotIndex() { return slot_id; - } + } public String getType(AVM2ConstantPool constants, List fullyQualifiedNames) { String typeStr = "*"; @@ -150,7 +150,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { } return false; } - + @Override public String toString(ABC abc, List fullyQualifiedNames) { String typeStr = "*"; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsageDetector.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsageDetector.java index f087d492f..451a66dd5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsageDetector.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsageDetector.java @@ -45,12 +45,12 @@ import java.util.List; * @author JPEXS */ public class MultinameUsageDetector implements UsageDetector { - + @Override public List findUsages(ABC abc, int index) { return findMultinameUsage(abc, index, true); } - + public List findMultinameUsage(ABC abc, int multinameIndex, boolean exactMatch) { List ret = new ArrayList<>(); if (multinameIndex == 0) { @@ -77,8 +77,8 @@ public class MultinameUsageDetector implements UsageDetector { } } return ret; - } - + } + @Override public List> findAllUsage(ABC abc) { List> ret = new ArrayList<>(); @@ -113,8 +113,8 @@ public class MultinameUsageDetector implements UsageDetector { @Override public String getKind() { return "string"; - } - + } + private void findAllMultinameUsageInTraits(ABC abc, Traits traits, int traitsType, int scriptIndex, int classIndex, List> ret, int parentTraitIndex) { for (int t = 0; t < traits.traits.size(); t++) { if (traits.traits.get(t) instanceof TraitClass) { @@ -148,7 +148,7 @@ public class MultinameUsageDetector implements UsageDetector { } } } - + private void checkAllMultinameUsedInMethod(ABC abc, int methodInfo, List> ret, int scriptIndex, int classIndex, int traitIndex, int traitsType, boolean isInitializer, Traits traits, int parentTraitIndex) { boolean[] foundMultinames = new boolean[abc.constants.getMultinameCount()]; for (int p = 0; p < abc.method_info.get(methodInfo).param_types.length; p++) { @@ -220,7 +220,6 @@ public class MultinameUsageDetector implements UsageDetector { return false; } - private void findMultinameUsageInTraits(ABC abc, Traits traits, int multinameIndex, boolean exactMatch, int traitsType, int scriptIndex, int classIndex, List ret, int parentTraitIndex) { for (int t = 0; t < traits.traits.size(); t++) { if (traits.traits.get(t) instanceof TraitClass) { @@ -239,7 +238,7 @@ public class MultinameUsageDetector implements UsageDetector { } checkMultinameUsedInMethod(abc, multinameIndex, exactMatch, abc.instance_info.get(c).iinit_index, ret, -1/*FIXME*/, c, 0, TraitMultinameUsage.TRAITS_TYPE_INSTANCE, true, null, -1); checkMultinameUsedInMethod(abc, multinameIndex, exactMatch, abc.class_info.get(c).cinit_index, ret, -1/*FIXME*/, c, 0, TraitMultinameUsage.TRAITS_TYPE_CLASS, true, null, -1); - findMultinameUsageInTraits(abc, abc.instance_info.get(c).instance_traits, multinameIndex, exactMatch, TraitMultinameUsage.TRAITS_TYPE_INSTANCE, -1/*FIXME*/, c, ret, -1); + findMultinameUsageInTraits(abc, abc.instance_info.get(c).instance_traits, multinameIndex, exactMatch, TraitMultinameUsage.TRAITS_TYPE_INSTANCE, -1/*FIXME*/, c, ret, -1); findMultinameUsageInTraits(abc, abc.class_info.get(c).static_traits, multinameIndex, exactMatch, TraitMultinameUsage.TRAITS_TYPE_CLASS, -1/*FIXME*/, c, ret, -1); } if (traits.traits.get(t) instanceof TraitSlotConst) { @@ -261,7 +260,6 @@ public class MultinameUsageDetector implements UsageDetector { } } - private void checkMultinameUsedInMethod(ABC abc, int multinameIndex, boolean exactMatch, int methodInfo, List ret, int scriptIndex, int classIndex, int traitIndex, int traitsType, boolean isInitializer, Traits traits, int parentTraitIndex) { for (int p = 0; p < abc.method_info.get(methodInfo).param_types.length; p++) { if (isSameName(abc, multinameIndex, abc.method_info.get(methodInfo).param_types[p], exactMatch)) { @@ -292,7 +290,7 @@ public class MultinameUsageDetector implements UsageDetector { } } } - } + } @Override public void filterUsages(ABC abc, UsagesFilter filter) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/Usage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/Usage.java index 0f24d1274..ba782b101 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/Usage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/Usage.java @@ -23,9 +23,10 @@ import com.jpexs.decompiler.flash.abc.ABC; * @author JPEXS */ public interface Usage { + public ABC getAbc(); - + public int getIndex(); - + public String getKind(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/UsageDetector.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/UsageDetector.java index ac8bac0c8..497e73e25 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/UsageDetector.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/UsageDetector.java @@ -24,12 +24,12 @@ import java.util.List; * @author JPEXS */ public interface UsageDetector { - + public void filterUsages(ABC abc, UsagesFilter filter); - + public List findUsages(ABC abc, int index); - + public List> findAllUsage(ABC abc); - + public String getKind(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/UsagesFilter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/UsagesFilter.java index 2815c751d..2692a74fe 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/UsagesFilter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/UsagesFilter.java @@ -21,5 +21,6 @@ package com.jpexs.decompiler.flash.abc.usages; * @author JPEXS */ public interface UsagesFilter { + public int filterUsage(int originalIndex); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/MultinameUsage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/MultinameUsage.java index d4b4f3a64..56ef5d833 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/MultinameUsage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/multinames/MultinameUsage.java @@ -135,5 +135,5 @@ public abstract class MultinameUsage implements Usage { @Override public String getKind() { return "multiname"; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCCleaner.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCCleaner.java index 8f964990e..a9ddc33da 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCCleaner.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCCleaner.java @@ -51,7 +51,7 @@ import java.util.Map; */ public class ABCCleaner { - public void clean(ABC abc) { + public void clean(ABC abc) { ABCSimpleUsageDetector usageDetector = new ABCSimpleUsageDetector(abc); usageDetector.detect(); Map>> usages = usageDetector.getUsages(); @@ -74,8 +74,8 @@ public class ABCCleaner { pos++; } } - } - + } + for (int i = 0; i < abc.script_info.size(); i++) { ScriptInfo m = abc.script_info.get(i); m.init_index = handleReplace(ABCSimpleUsageDetector.ItemKind.METHODINFO, m.init_index, replaceMap); @@ -300,7 +300,7 @@ public class ABCCleaner { if (abc.parentTag != null) { ((Tag) abc.parentTag).setModified(true); } - abc.fireChanged(); + abc.fireChanged(); } private int handleReplace(ABCSimpleUsageDetector.ItemKind kind, int index, Map> replaceMap) { @@ -376,6 +376,5 @@ public class ABCCleaner { } } } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCSimpleUsageDetector.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCSimpleUsageDetector.java index 580c64aff..77cb8ba47 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCSimpleUsageDetector.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCSimpleUsageDetector.java @@ -57,41 +57,41 @@ public class ABCSimpleUsageDetector { METHODINFO(false), METHODBODY(false), CLASS(false); - + private boolean reserveZeroIndex; - - private ItemKind (boolean reserveZeroIndex) { + + private ItemKind(boolean reserveZeroIndex) { this.reserveZeroIndex = reserveZeroIndex; } - + public boolean hasReservedZeroIndex() { return reserveZeroIndex; } } - - private final Map>> usages = new HashMap<>(); + + private final Map>> usages = new HashMap<>(); private final Map> zeroUsages = new HashMap<>(); - - + private final ABC abc; + public ABCSimpleUsageDetector(ABC abc) { - this.abc = abc; + this.abc = abc; } - + private void initUsages(ItemKind kind, int itemCount) { List> list = new ArrayList<>(); if (kind.hasReservedZeroIndex() && itemCount == 0) { itemCount = 1; - } + } for (int i = 0; i < itemCount; i++) { list.add(new ArrayList<>()); } usages.put(kind, list); } - + public void detect() { usages.clear(); - + initUsages(ItemKind.INT, abc.constants.getIntCount()); initUsages(ItemKind.UINT, abc.constants.getUIntCount()); initUsages(ItemKind.DOUBLE, abc.constants.getDoubleCount()); @@ -103,7 +103,7 @@ public class ABCSimpleUsageDetector { initUsages(ItemKind.METHODINFO, abc.method_info.size()); initUsages(ItemKind.METHODBODY, abc.bodies.size()); initUsages(ItemKind.CLASS, abc.class_info.size()); - + ABCWalker walker = new ABCWalker() { protected void handleUsageNamespace(int index, String usageDescription) { if (!handleUsage(ItemKind.NAMESPACE, index, usageDescription)) { @@ -133,7 +133,7 @@ public class ABCSimpleUsageDetector { if (!handleUsage(ItemKind.MULTINAME, index, usageDescription)) { return; } - Multiname m = abc.constants.getMultiname(index); + Multiname m = abc.constants.getMultiname(index); if (m == null) { return; } @@ -153,15 +153,15 @@ public class ABCSimpleUsageDetector { } } } - + protected void handleUsageMethodInfo(int index, String usageDescription) { if (!handleUsage(ItemKind.METHODINFO, index, usageDescription)) { return; } - - MethodInfo m = abc.method_info.get(index); + + MethodInfo m = abc.method_info.get(index); handleUsage(ItemKind.STRING, m.name_index, usageDescription + "/name"); - + if (m.flagHas_paramnames()) { for (int i = 0; i < m.paramNames.length; i++) { handleUsage(ItemKind.STRING, m.paramNames[i], usageDescription + "/param_names/pn" + i); @@ -172,31 +172,31 @@ public class ABCSimpleUsageDetector { handleUsageValueKind(m.optional[i].value_kind, m.optional[i].value_index, usageDescription + "/optional/op" + i); } } - + for (int i = 0; i < m.param_types.length; i++) { handleUsageMultiname(m.param_types[i], usageDescription + "/param_types/pt" + i); } - - handleUsageMultiname(m.ret_type, usageDescription + "/return_type"); - + + handleUsageMultiname(m.ret_type, usageDescription + "/return_type"); + int bodyIndex = abc.findBodyIndex(index); if (bodyIndex > -1) { handleUsageMethodBody(bodyIndex, usageDescription + "/method_body"); - } + } } protected void handleUsageMethodBody(int index, String usageDescription) { if (!handleUsage(ItemKind.METHODBODY, index, usageDescription)) { return; } - MethodBody body = abc.bodies.get(index); + MethodBody body = abc.bodies.get(index); for (int i = 0; i < body.exceptions.length; i++) { handleUsageMultiname(body.exceptions[i].name_index, usageDescription + "/exceptions/ex" + i + "/name"); handleUsageMultiname(body.exceptions[i].type_index, usageDescription + "/exceptions/ex" + i + "/type"); } List code = body.getCode().code; for (int i = 0; i < code.size(); i++) { - AVM2Instruction ins = code.get(i); + AVM2Instruction ins = code.get(i); for (int operandIndex = 0; operandIndex < ins.definition.operands.length; operandIndex++) { int operand = ins.operands[operandIndex]; String operandDescription = usageDescription + "/code/ins" + i + "/op" + operandIndex; @@ -228,10 +228,10 @@ public class ABCSimpleUsageDetector { } } } - + @Override - protected void handleScript(ABC abc, int index) { - + protected void handleScript(ABC abc, int index) { + } @Override @@ -243,9 +243,8 @@ public class ABCSimpleUsageDetector { description += "/instance_info/traits/t" + traitIndex; } description += "/metadata/md" + index; - + //?? classIndex - if (!handleUsage(ItemKind.METADATAINFO, index, description)) { return; } @@ -256,8 +255,8 @@ public class ABCSimpleUsageDetector { } for (int i = 0; i < md.values.length; i++) { handleUsage(ItemKind.STRING, md.values[i], description + "/pairs/p" + i + "/value"); - } - } + } + } @Override protected void handleTraitClass(ABC abc, TraitClass trait, int scriptIndex, int scriptTraitIndex) { @@ -265,7 +264,7 @@ public class ABCSimpleUsageDetector { if (!handleUsage(ItemKind.CLASS, trait.class_info, description)) { return; } - + InstanceInfo ii = abc.instance_info.get(trait.class_info); if ((ii.flags & InstanceInfo.CLASS_PROTECTEDNS) != 0) { handleUsageNamespace(ii.protectedNS, description + "/instance_info/protected_ns"); @@ -274,22 +273,21 @@ public class ABCSimpleUsageDetector { handleUsageMultiname(ii.super_index, description + "/instance_info/super"); for (int i = 0; i < ii.interfaces.length; i++) { handleUsageMultiname(ii.interfaces[i], description + "/instance_info/interfaces/in" + i); - } + } /* handleUsageMethodInfo(abc.class_info.get(trait.class_info).cinit_index, description + "/class_info/cinit"); handleUsageMethodInfo(abc.instance_info.get(trait.class_info).iinit_index, description + "/instance_info/iinit"); - */ + */ + } + + @Override + protected void handleTraitMethodGetterSetter(ABC abc, TraitMethodGetterSetter trait, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, ABCWalker.WalkType walkType) { + handleTraitMethodBase(abc, trait, scriptIndex, scriptTraitIndex, classIndex, traitIndex, walkType); } - - @Override - protected void handleTraitMethodGetterSetter(ABC abc, TraitMethodGetterSetter trait, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, ABCWalker.WalkType walkType) { - handleTraitMethodBase(abc, trait, scriptIndex, scriptTraitIndex, classIndex, traitIndex, walkType); - } - protected void handleTraitMethodBase(ABC abc, Trait trait, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, ABCWalker.WalkType walkType) { - String description = ""; - if (scriptIndex > -1) { + String description = ""; + if (scriptIndex > -1) { description += "si" + scriptIndex + "/traits/t" + scriptTraitIndex; if (walkType == WalkType.Class && traitIndex > -1) { description += "/class_info/traits/t" + traitIndex; @@ -303,13 +301,12 @@ public class ABCSimpleUsageDetector { description += "ii" + classIndex + "/instance_info/traits/t" + traitIndex; } } - + //description += " " + trait.getKindToStr(); - handleUsageMultiname(trait.name_index, description + "/name"); //handleUsageMethodInfo(trait.method_info, description + "/method_info"); } - + @Override protected void handleTraitFunction(ABC abc, TraitFunction trait, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, ABCWalker.WalkType walkType) { handleTraitMethodBase(abc, trait, scriptIndex, scriptTraitIndex, classIndex, traitIndex, walkType); @@ -336,14 +333,14 @@ public class ABCSimpleUsageDetector { case ValueKind.CONSTANT_ExplicitNamespace: case ValueKind.CONSTANT_StaticProtectedNs: case ValueKind.CONSTANT_PrivateNs: - handleUsage(ItemKind.NAMESPACE, value_index, description); + handleUsage(ItemKind.NAMESPACE, value_index, description); break; } } - + @Override protected void handleTraitSlotConst(ABC abc, TraitSlotConst trait, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, int bodyIndex, int bodyTraitIndex, ABCWalker.WalkType walkType, Stack callStack) { - + String description = ""; if (callStack.size() > 1) { if (bodyTraitIndex != -1) { @@ -352,13 +349,13 @@ public class ABCSimpleUsageDetector { } } else if (scriptIndex > -1) { description += "si" + scriptIndex + "/traits/t" + scriptTraitIndex; - + if (walkType == WalkType.Class && traitIndex > -1) { description += "/class_info/traits/t" + traitIndex; } else if (walkType == WalkType.Instance && traitIndex > -1) { - description += "/instance_info/traits/t" + traitIndex; - } - + description += "/instance_info/traits/t" + traitIndex; + } + if (bodyTraitIndex != -1) { description += "/method_info/method_body/traits/t" + bodyTraitIndex; } @@ -366,17 +363,17 @@ public class ABCSimpleUsageDetector { if (walkType == WalkType.Class && traitIndex > -1) { description += "ci" + classIndex + "/class_info/traits/t" + traitIndex; } else if (walkType == WalkType.Instance && traitIndex > -1) { - description += "ii" + classIndex + "/instance_info/traits/t" + traitIndex; + description += "ii" + classIndex + "/instance_info/traits/t" + traitIndex; } else if (bodyTraitIndex > -1) { - description += "mb" + bodyIndex + "/traits/t" + bodyTraitIndex; + description += "mb" + bodyIndex + "/traits/t" + bodyTraitIndex; } - } - + } + //description += " " + trait.getKindToStr(); handleUsageMultiname(trait.name_index, description + "/name"); handleUsageMultiname(trait.type_index, description + "/type"); handleUsageValueKind(trait.value_kind, trait.value_index, description + "/value_index"); - } + } @Override protected void handleMethodInfo(ABC abc, int index, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, ABCWalker.WalkType walkType, boolean initializer, Stack callStack) { @@ -384,7 +381,7 @@ public class ABCSimpleUsageDetector { int prevMethod = callStack.get(callStack.size() - 2); handleUsageMethodInfo(index, "mi" + prevMethod + "/method_body/code"); return; - } + } if (initializer) { switch (walkType) { case Class: @@ -404,13 +401,13 @@ public class ABCSimpleUsageDetector { case Script: handleUsageMethodInfo(index, "si" + scriptIndex + "/init"); break; - - } + + } return; } - - String description = ""; - if (scriptIndex > -1) { + + String description = ""; + if (scriptIndex > -1) { description += "si" + scriptIndex + "/traits/t" + scriptTraitIndex; if (walkType == WalkType.Class && traitIndex > -1) { description += "/class_info/traits/t" + traitIndex; @@ -426,10 +423,10 @@ public class ABCSimpleUsageDetector { } description += "/method_info"; handleUsageMethodInfo(index, description); - } + } }; walker.walkABC(abc, false); - + zeroUsages.clear(); for (ItemKind kind : usages.keySet()) { zeroUsages.put(kind, new ArrayList<>()); @@ -440,9 +437,9 @@ public class ABCSimpleUsageDetector { } } } - + /** - * + * * @param kind * @param index * @param usageDescription @@ -452,18 +449,18 @@ public class ABCSimpleUsageDetector { List kindList = usages.get(kind).get(index); kindList.add(usageDescription); - + return kindList.size() == 1; } public Map>> getUsages() { return Collections.unmodifiableMap(usages); } - + public List getUsages(ItemKind kind, int index) { return Collections.unmodifiableList(usages.get(kind).get(index)); } - + public List> getUsages(ItemKind kind) { return Collections.unmodifiableList(usages.get(kind)); } @@ -471,11 +468,11 @@ public class ABCSimpleUsageDetector { public Map> getZeroUsages() { return Collections.unmodifiableMap(zeroUsages); } - + public List getZeroUsages(ItemKind kind) { return zeroUsages.get(kind); } - + public int getZeroUsagesCount() { int cnt = 0; for (ItemKind kind : zeroUsages.keySet()) { @@ -483,7 +480,7 @@ public class ABCSimpleUsageDetector { } return cnt; } - + public int getZeroUsagesCount(ItemKind kind) { return zeroUsages.get(kind).size(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCWalker.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCWalker.java index 2a1dc1f2a..58c38fdef 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCWalker.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/usages/simple/ABCWalker.java @@ -35,27 +35,27 @@ import java.util.Stack; * * @author JPEXS */ -public abstract class ABCWalker { - +public abstract class ABCWalker { + public static enum WalkType { Orphan, Script, Class, Instance } - - public final void walkABC(ABC abc, boolean walkOrphanItems) { + + public final void walkABC(ABC abc, boolean walkOrphanItems) { Set handledClasses = new HashSet<>(); Set handledMethodInfos = new HashSet<>(); Set handledMethodBodies = new HashSet<>(); - + for (int i = 0; i < abc.script_info.size(); i++) { handleScript(abc, i); ScriptInfo si = abc.script_info.get(i); optionalHandleMethodInfo(handledMethodBodies, handledMethodInfos, abc, si.init_index, i, -1, -1, -1, WalkType.Script, true, new Stack<>()); walkTraits(abc, si.traits, i, -1, -1, -1, -1, handledMethodBodies, handledMethodInfos, handledClasses, WalkType.Script, new Stack<>()); } - + if (walkOrphanItems) { for (int i = 0; i < abc.method_info.size(); i++) { optionalHandleMethodInfo(handledMethodBodies, handledMethodInfos, abc, i, -1, -1, -1, -1, WalkType.Orphan, false, new Stack<>()); @@ -64,31 +64,31 @@ public abstract class ABCWalker { for (int i = 0; i < abc.bodies.size(); i++) { optionalHandleMethodBody(handledMethodBodies, handledMethodInfos, abc, i, -1, -1, -1, -1, WalkType.Orphan, false, new Stack<>()); } - + for (int i = 0; i < abc.class_info.size(); i++) { optionalHandleClass(handledClasses, handledMethodBodies, handledMethodInfos, abc, i, -1, -1, -1, WalkType.Orphan); } } } - + private boolean optionalHandleClass(Set handledClasses, Set handledMethodBodies, Set handledMethodInfos, ABC abc, int index, int scriptIndex, int scriptTraitIndex, int traitIndex, WalkType walkType) { if (handledClasses.contains(index)) { return false; - } + } handleClass(abc, index, scriptIndex, traitIndex, walkType); - + optionalHandleMethodInfo(handledMethodBodies, handledMethodInfos, abc, abc.instance_info.get(index).iinit_index, scriptIndex, scriptTraitIndex, index, -1, WalkType.Instance, true, new Stack<>()); walkTraits(abc, abc.instance_info.get(index).instance_traits, scriptIndex, scriptTraitIndex, index, -1, -1, handledMethodBodies, handledMethodInfos, handledClasses, WalkType.Instance, new Stack<>()); optionalHandleMethodInfo(handledMethodBodies, handledMethodInfos, abc, abc.class_info.get(index).cinit_index, scriptIndex, scriptTraitIndex, index, -1, WalkType.Class, true, new Stack<>()); walkTraits(abc, abc.class_info.get(index).static_traits, scriptIndex, scriptTraitIndex, index, -1, -1, handledMethodBodies, handledMethodInfos, handledClasses, WalkType.Class, new Stack<>()); - + return true; } - + private void optionalHandleMethodInfo(Set handledMethodBodies, Set handledMethodInfos, ABC abc, int index, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, WalkType walkType, boolean initializer, Stack callStack) { if (handledMethodInfos.contains(index)) { return; - } + } handledMethodInfos.add(index); if (callStack != null) { if (callStack.contains(index)) { @@ -105,7 +105,7 @@ public abstract class ABCWalker { callStack.pop(); } } - + private void optionalHandleMethodBody(Set handledMethodBodies, Set handledMethodInfos, ABC abc, int index, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, WalkType walkType, boolean initializer, Stack callStack) { if (handledMethodBodies.contains(index)) { return; @@ -122,10 +122,11 @@ public abstract class ABCWalker { } walkTraits(abc, abc.bodies.get(index).traits, scriptIndex, scriptTraitIndex, classIndex, traitIndex, index, handledMethodBodies, handledMethodInfos, handledMethodInfos, walkType, callStack); } + private void walkTraits(ABC abc, Traits traits, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, int bodyIndex, Set handledMethodBodies, Set handledMethodInfos, Set handledClasses, WalkType walkType, Stack callStack) { - + int bodyTraitIndex = -1; - + for (int i = 0; i < traits.traits.size(); i++) { if (classIndex == -1) { scriptTraitIndex = i; @@ -136,8 +137,8 @@ public abstract class ABCWalker { if (bodyIndex != -1) { bodyTraitIndex = i; } - Trait t = traits.traits.get(i); - if ((t.kindFlags & Trait.ATTR_Metadata) > 0) { + Trait t = traits.traits.get(i); + if ((t.kindFlags & Trait.ATTR_Metadata) > 0) { for (int m = 0; m < t.metadata.length; m++) { handleMetadataInfo(abc, t.metadata[m], t, scriptIndex, scriptTraitIndex, classIndex, i, m, walkType); } @@ -164,40 +165,40 @@ public abstract class ABCWalker { } } } - + protected void handleMethodInfo(ABC abc, int index, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, WalkType walkType, boolean initializer, Stack callStack) { - + } - + protected void handleMethodBody(ABC abc, int index, int scriptIndex, int classIndex, int traitIndex, WalkType walkType, boolean initializer) { - + } - + protected void handleClass(ABC abc, int index, int scriptIndex, int traitIndex, WalkType walkType) { - + } - + protected void handleScript(ABC abc, int index) { - + } - + protected void handleTraitSlotConst(ABC abc, TraitSlotConst trait, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, int bodyIndex, int bodyTraitIndex, WalkType walkType, Stack callStack) { - - } - + + } + protected void handleTraitMethodGetterSetter(ABC abc, TraitMethodGetterSetter trait, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, WalkType walkType) { - + } - + protected void handleTraitFunction(ABC abc, TraitFunction trait, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, WalkType walkType) { - + } - + protected void handleTraitClass(ABC abc, TraitClass trait, int scriptIndex, int scriptTraitIndex) { - + } - + protected void handleMetadataInfo(ABC abc, int index, Trait trait, int scriptIndex, int scriptTraitIndex, int classIndex, int traitIndex, int traitMetadataIndex, WalkType walkType) { - + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java index e4162e728..a5ba4f25e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java @@ -330,10 +330,10 @@ public abstract class Action implements GraphSourceItem { ASMParsedSymbol symb = lex.lex(); if (symb.type != ASMParsedSymbol.TYPE_BOOLEAN) { throw new ActionParseException("Boolean expected", lex.yyline()); - } + } return (Boolean) symb.value; } - + protected void lexOptionalComma(FlasmLexer lex) throws IOException, ActionParseException { ASMParsedSymbol symb = lex.lex(); if (symb.type != ASMParsedSymbol.TYPE_COMMA) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java index c1c6bd186..8851c18cd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraph.java @@ -364,7 +364,7 @@ public class ActionGraph extends Graph { checkedLoop = null; } } - + EnumerateActionItem enumerateItem = null; BinaryOpItem comparisonOp = null; //for..in inside switch before break @@ -379,7 +379,7 @@ public class ActionGraph extends Graph { EqActionItem eq = (EqActionItem) checkedCondition; if (eq.rightSide instanceof DirectValueActionItem) { DirectValueActionItem dv = (DirectValueActionItem) eq.rightSide; - if (dv.value == Null.INSTANCE) { + if (dv.value == Null.INSTANCE) { GraphTargetItem en = list.get(t - 1); if (en instanceof EnumerateActionItem) { enumerateItem = (EnumerateActionItem) en; @@ -406,13 +406,13 @@ public class ActionGraph extends Graph { enumerateItem = (EnumerateActionItem) en; if (ne.leftSide instanceof StoreRegisterActionItem) { comparisonOp = ne; - } + } } } } } if (comparisonOp != null) { - + if (checkedBody != null && (!checkedBody.isEmpty()) && (checkedBody.get(0) instanceof SetTypeActionItem)) { SetTypeActionItem sti = (SetTypeActionItem) checkedBody.get(0); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2ClassDetector.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2ClassDetector.java index 3866f452c..828c652b2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2ClassDetector.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/ActionScript2ClassDetector.java @@ -622,7 +622,7 @@ public class ActionScript2ClassDetector { func.isSetter = true; if (FunctionActionItem.DECOMPILE_GET_SET) { - + AbstractGraphTargetVisitor visitor = new AbstractGraphTargetVisitor() { @Override public void visit(GraphTargetItem item) { @@ -640,7 +640,7 @@ public class ActionScript2ClassDetector { for (GraphTargetItem ti : func.actions) { ti.visitRecursively(visitor); } - + //There is return getter added at the end of every setter, gotta remove it, since it won't compile //as setter must not return a value if (!func.actions.isEmpty()) { @@ -734,7 +734,7 @@ public class ActionScript2ClassDetector { DirectValueActionItem classBaseName = new DirectValueActionItem(classNamePath.get(classNamePath.size() - 1)); ((FunctionActionItem) constructor).calculatedFunctionName = classBaseName; traits.add(0, new MyEntry<>(classBaseName, constructor)); - + AbstractGraphTargetVisitor visitor = new AbstractGraphTargetVisitor() { @Override public void visit(GraphTargetItem item) { @@ -751,7 +751,7 @@ public class ActionScript2ClassDetector { }; for (GraphTargetItem ti : ((FunctionActionItem) constructor).actions) { ti.visitRecursively(visitor); - } + } } else { //throw new AssertException("No constructor found"); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/UninitializedClassFieldsDetector.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/UninitializedClassFieldsDetector.java index 6bced1861..efb15ba08 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/UninitializedClassFieldsDetector.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/as2/UninitializedClassFieldsDetector.java @@ -322,8 +322,7 @@ public class UninitializedClassFieldsDetector { || (item instanceof CallMethodActionItem) || (item instanceof NewMethodActionItem) || (item instanceof DeleteActionItem) - || (item instanceof GetMemberActionItem) - ) { + || (item instanceof GetMemberActionItem)) { List path = getFullPath(item); if (path != null) { List parent = new ArrayList<>(path); @@ -336,7 +335,7 @@ public class UninitializedClassFieldsDetector { if (!containsTrait(classTraits, classInheritance, className, name) && (!result.containsKey(className) || !result.get(className).containsKey(name))) { if (!result.containsKey(className)) { result.put(className, new LinkedHashMap<>()); - } + } Variable v = new Variable(true, name, null, className); result.get(className).put(name, v); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/fastactionlist/FastActionList.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/fastactionlist/FastActionList.java index 63db2be5b..ed6ef62b6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/fastactionlist/FastActionList.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/fastactionlist/FastActionList.java @@ -63,13 +63,13 @@ public class FastActionList implements Collection { public String getCharset() { return charset; - } - + } + public final ActionItem insertItemBefore(ActionItem item, Action action) { ActionItem newItem = new ActionItem(action); return insertItemBefore(item, newItem); } - + public final ActionItem insertItemBefore(ActionItem item, ActionItem newItem) { insertItemAfter(item.prev, newItem); if (item == firstItem) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java index d405a4bb3..1c19ae594 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java @@ -126,10 +126,8 @@ public class CallMethodActionItem extends ActionItem { } else { scriptObject.toString(writer, localData); } - if ( - !(((DirectValueActionItem) methodName).value instanceof RegisterNumber) - && IdentifiersDeobfuscation.isValidName(false, methodName.toStringNoQuotes(localData)) - ) { + if (!(((DirectValueActionItem) methodName).value instanceof RegisterNumber) + && IdentifiersDeobfuscation.isValidName(false, methodName.toStringNoQuotes(localData))) { writer.append("."); methodName.toStringNoQuotes(writer, localData); } else { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FSCommandActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FSCommandActionItem.java index 246364f5d..302d2331b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FSCommandActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FSCommandActionItem.java @@ -52,7 +52,7 @@ public class FSCommandActionItem extends ActionItem { writer.append("("); command.appendTry(writer, localData); return writer.append(")"); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.java index f8b6a305c..a1553b1b9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetURL2ActionItem.java @@ -83,12 +83,12 @@ public class GetURL2ActionItem extends ActionItem { ret.addAll(targetString.getNeededSources()); return ret; } - + @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.java index f193e1394..6ba7f0c60 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GotoFrame2ActionItem.java @@ -84,13 +84,13 @@ public class GotoFrame2ActionItem extends ActionItem { List ret = super.getNeededSources(); ret.addAll(frame.getNeededSources()); return ret; - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.java index 08fffef96..a699ce0d9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieActionItem.java @@ -72,13 +72,13 @@ public class LoadMovieActionItem extends ActionItem { writer.append(","); targetString.toString(writer, localData); return writer.append(methodStr).append(")"); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.java index 2e7b9c59d..8dc395185 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadMovieNumActionItem.java @@ -73,7 +73,7 @@ public class LoadMovieNumActionItem extends ActionItem { writer.append(","); num.toString(writer, localData); return writer.append(methodStr).append(")"); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { @@ -84,7 +84,7 @@ public class LoadMovieNumActionItem extends ActionItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); } - + private List toSource(SourceGeneratorLocalData localData, SourceGenerator generator, boolean needsReturn) throws CompilationException { ActionSourceGenerator asGenerator = (ActionSourceGenerator) generator; String charset = asGenerator.getCharset(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.java index 2215ebc42..d003f8960 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesActionItem.java @@ -72,7 +72,7 @@ public class LoadVariablesActionItem extends ActionItem { writer.append(","); targetString.toString(writer, localData); return writer.append(methodStr).append(")"); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { @@ -83,7 +83,7 @@ public class LoadVariablesActionItem extends ActionItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); } - + private List toSource(SourceGeneratorLocalData localData, SourceGenerator generator, boolean needsReturn) throws CompilationException { ActionSourceGenerator asGenerator = (ActionSourceGenerator) generator; String charset = asGenerator.getCharset(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.java index 1f33c005d..9d77f6874 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/LoadVariablesNumActionItem.java @@ -73,13 +73,13 @@ public class LoadVariablesNumActionItem extends ActionItem { writer.append(","); num.toString(writer, localData); return writer.append(methodStr).append(")"); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NextFrameActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NextFrameActionItem.java index 15f964e7b..e882a443e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NextFrameActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/NextFrameActionItem.java @@ -43,13 +43,13 @@ public class NextFrameActionItem extends ActionItem { public NextFrameActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PlayActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PlayActionItem.java index b44592c91..591e28d20 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PlayActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PlayActionItem.java @@ -43,13 +43,13 @@ public class PlayActionItem extends ActionItem { public PlayActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrevFrameActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrevFrameActionItem.java index f44dd9284..906b6fb6d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrevFrameActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrevFrameActionItem.java @@ -43,13 +43,13 @@ public class PrevFrameActionItem extends ActionItem { public PrevFrameActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.java index 0c9d68563..8e2d41aa3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintActionItem.java @@ -64,12 +64,12 @@ public class PrintActionItem extends ActionItem { boundingBox.toString(writer, localData); return writer.append(")"); } - + @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.java index 27bfd48b5..745d1b58a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapActionItem.java @@ -63,13 +63,13 @@ public class PrintAsBitmapActionItem extends ActionItem { writer.append(","); boundingBox.toString(writer, localData); return writer.append(")"); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.java index f9966c1e5..d56f499a9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintAsBitmapNumActionItem.java @@ -63,13 +63,13 @@ public class PrintAsBitmapNumActionItem extends ActionItem { writer.append(","); boundingBox.toString(writer, localData); return writer.append(")"); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.java index d99b8339c..f2cd63549 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/PrintNumActionItem.java @@ -63,7 +63,7 @@ public class PrintNumActionItem extends ActionItem { writer.append(","); boundingBox.toString(writer, localData); return writer.append(")"); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { @@ -74,7 +74,7 @@ public class PrintNumActionItem extends ActionItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); } - + private List toSource(SourceGeneratorLocalData localData, SourceGenerator generator, boolean needsReturn) throws CompilationException { ActionSourceGenerator asGenerator = (ActionSourceGenerator) generator; String charset = asGenerator.getCharset(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/RemoveSpriteActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/RemoveSpriteActionItem.java index 65458fa1c..ef2fb19d8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/RemoveSpriteActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/RemoveSpriteActionItem.java @@ -55,13 +55,13 @@ public class RemoveSpriteActionItem extends ActionItem { List ret = super.getNeededSources(); ret.addAll(value.getNeededSources()); return ret; - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StartDragActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StartDragActionItem.java index cf9c20137..0e7ad13c4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StartDragActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StartDragActionItem.java @@ -101,13 +101,13 @@ public class StartDragActionItem extends ActionItem { ret.addAll(y1.getNeededSources()); ret.addAll(y2.getNeededSources()); return ret; - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopActionItem.java index e23347955..5750e41ba 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopActionItem.java @@ -44,12 +44,12 @@ public class StopActionItem extends ActionItem { public StopActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); } - + @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopAllSoundsActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopAllSoundsActionItem.java index 9bcc50f5e..770063c8b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopAllSoundsActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopAllSoundsActionItem.java @@ -43,13 +43,13 @@ public class StopAllSoundsActionItem extends ActionItem { public StopAllSoundsActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopDragActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopDragActionItem.java index 23e901386..74c2348be 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopDragActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/StopDragActionItem.java @@ -43,7 +43,7 @@ public class StopDragActionItem extends ActionItem { public StopDragActionItem(GraphSourceItem instruction, GraphSourceItem lineStartIns) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ToggleHighQualityActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ToggleHighQualityActionItem.java index bace1bba0..ef9a5fb9a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ToggleHighQualityActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ToggleHighQualityActionItem.java @@ -48,13 +48,13 @@ public class ToggleHighQualityActionItem extends ActionItem { @Override public boolean hasReturnValue() { return false; - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TraceActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TraceActionItem.java index 8087c6366..e209b78e6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TraceActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/TraceActionItem.java @@ -55,13 +55,13 @@ public class TraceActionItem extends ActionItem { List ret = super.getNeededSources(); ret.addAll(value.getNeededSources()); return ret; - } + } @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.java index 80372f997..a994dd5ce 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieActionItem.java @@ -57,7 +57,7 @@ public class UnLoadMovieActionItem extends ActionItem { targetString.toString(writer, localData); return writer.append(")"); } - + @Override public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.java index 56bca4bfc..651e80999 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/UnLoadMovieNumActionItem.java @@ -64,7 +64,7 @@ public class UnLoadMovieNumActionItem extends ActionItem { public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, false); } - + @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { return toSource(localData, generator, true); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParsedSymbol.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParsedSymbol.java index 0f5f18887..06cffee51 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParsedSymbol.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParsedSymbol.java @@ -23,7 +23,7 @@ package com.jpexs.decompiler.flash.action.parser.pcode; public class ASMParsedSymbol { public int pos; - + public int type; public Object value; @@ -61,7 +61,7 @@ public class ASMParsedSymbol { public static final int TYPE_EOL = 16; public static final int TYPE_CONSTANT_LITERAL = 17; - + public static final int TYPE_COMMA = 18; public ASMParsedSymbol(int pos, int type, Object value) { @@ -78,5 +78,5 @@ public class ASMParsedSymbol { @Override public String toString() { return "symbol[type=" + type + ", value=" + value + "]"; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParser.java index a2ef3184f..b74b9b80c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/ASMParser.java @@ -143,7 +143,7 @@ import java.util.logging.Logger; */ public class ASMParser { - private static final Logger logger = Logger.getLogger(ASMParser.class.getName()); + private static final Logger logger = Logger.getLogger(ASMParser.class.getName()); private static Action parseAction(String instructionName, FlasmLexer lexer, List constantPool, int version, String charset) throws IOException, ActionParseException { Action a = null; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/FlasmLexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/FlasmLexer.java index aa57d916a..78dad317f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/FlasmLexer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/pcode/FlasmLexer.java @@ -1,6 +1,6 @@ /* The following code was generated by JFlex 1.6.0 */ -/* + /* * Copyright (C) 2010-2016 JPEXS, All rights reserved. * * This library is free software; you can redistribute it and/or @@ -16,7 +16,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. */ -/* Flash assembler language lexer specification */ + /* Flash assembler language lexer specification */ package com.jpexs.decompiler.flash.action.parser.pcode; import com.jpexs.decompiler.flash.action.parser.ActionParseException; @@ -26,585 +26,625 @@ import com.jpexs.decompiler.flash.ecma.Null; import com.jpexs.decompiler.flash.ecma.Undefined; import java.util.Stack; - /** - * This class is a scanner generated by - * JFlex 1.6.0 - * from the specification file C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript_pcode.flex + * This class is a scanner generated by + * JFlex 1.6.0 from the specification file + * C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript_pcode.flex */ public final class FlasmLexer { - /** This character denotes the end of file */ - public static final int YYEOF = -1; + /** + * This character denotes the end of file + */ + public static final int YYEOF = -1; - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; + /** + * initial size of the lookahead buffer + */ + private static final int ZZ_BUFFERSIZE = 16384; - /** lexical states */ - public static final int YYINITIAL = 0; - public static final int STRING = 2; - public static final int PARAMETERS = 4; + /** + * lexical states + */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; + public static final int PARAMETERS = 4; - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l - * at the beginning of a line - * l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2 - }; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the + * beginning of a line l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2 + }; - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\6\1\4\1\2\1\51\1\52\1\1\16\6\4\0\1\4\1\0"+ - "\1\43\1\0\1\5\2\0\1\47\3\0\1\35\1\44\1\25\1\33"+ - "\1\0\1\30\11\31\1\7\1\3\5\0\4\36\1\34\1\36\2\5"+ - "\1\26\4\5\1\32\14\5\1\0\1\37\2\0\1\5\1\0\1\17"+ - "\1\45\1\41\1\23\1\15\1\16\1\40\1\5\1\24\2\5\1\20"+ - "\1\5\1\22\1\42\2\5\1\13\1\21\1\12\1\14\2\5\1\50"+ - "\1\27\1\5\1\10\1\0\1\11\1\0\6\6\1\53\32\6\2\0"+ - "\4\5\1\0\1\46\2\0\1\5\2\0\1\6\7\0\1\5\4\0"+ - "\1\5\5\0\27\5\1\0\37\5\1\0\u01ca\5\4\0\14\5\16\0"+ - "\5\5\7\0\1\5\1\0\1\5\21\0\160\6\5\5\1\0\2\5"+ - "\2\0\4\5\1\0\1\5\6\0\1\5\1\0\3\5\1\0\1\5"+ - "\1\0\24\5\1\0\123\5\1\0\213\5\1\0\5\6\2\0\246\5"+ - "\1\0\46\5\2\0\1\5\6\0\51\5\6\0\1\5\1\0\55\6"+ - "\1\0\1\6\1\0\2\6\1\0\2\6\1\0\1\6\10\0\33\5"+ - "\4\0\4\5\15\0\6\6\5\0\1\5\4\0\13\6\1\0\1\6"+ - "\3\0\53\5\37\6\4\0\2\5\1\6\143\5\1\0\1\5\10\6"+ - "\1\0\6\6\2\5\2\6\1\0\4\6\2\5\12\6\3\5\2\0"+ - "\1\5\17\0\1\6\1\5\1\6\36\5\33\6\2\0\131\5\13\6"+ - "\1\5\16\0\12\6\41\5\11\6\2\5\4\0\1\5\2\0\1\6"+ - "\30\5\4\6\1\5\11\6\1\5\3\6\1\5\5\6\22\0\31\5"+ - "\3\6\4\0\13\5\5\0\30\5\1\0\6\5\1\0\2\6\6\0"+ - "\10\6\52\5\72\6\66\5\3\6\1\5\22\6\1\5\7\6\12\5"+ - "\2\6\2\0\12\6\1\0\20\5\3\6\1\0\10\5\2\0\2\5"+ - "\2\0\26\5\1\0\7\5\1\0\1\5\3\0\4\5\2\0\1\6"+ - "\1\5\7\6\2\0\2\6\2\0\3\6\1\5\10\0\1\6\4\0"+ - "\2\5\1\0\3\5\2\6\2\0\12\6\4\5\7\0\2\5\1\0"+ - "\1\6\2\0\3\6\1\0\6\5\4\0\2\5\2\0\26\5\1\0"+ - "\7\5\1\0\2\5\1\0\2\5\1\0\2\5\2\0\1\6\1\0"+ - "\5\6\4\0\2\6\2\0\3\6\3\0\1\6\7\0\4\5\1\0"+ - "\1\5\7\0\14\6\3\5\1\6\13\0\3\6\1\0\11\5\1\0"+ - "\3\5\1\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5\2\0"+ - "\1\6\1\5\10\6\1\0\3\6\1\0\3\6\2\0\1\5\17\0"+ - "\2\5\2\6\2\0\12\6\1\0\1\5\7\0\1\5\6\6\1\0"+ - "\3\6\1\0\10\5\2\0\2\5\2\0\26\5\1\0\7\5\1\0"+ - "\2\5\1\0\5\5\2\0\1\6\1\5\7\6\2\0\2\6\2\0"+ - "\3\6\7\0\3\6\4\0\2\5\1\0\3\5\2\6\2\0\12\6"+ - "\1\0\1\5\20\0\1\6\1\5\1\0\6\5\3\0\3\5\1\0"+ - "\4\5\3\0\2\5\1\0\1\5\1\0\2\5\3\0\2\5\3\0"+ - "\3\5\3\0\14\5\4\0\5\6\3\0\3\6\1\0\4\6\2\0"+ - "\1\5\6\0\1\6\16\0\12\6\11\0\1\5\6\0\5\6\10\5"+ - "\1\0\3\5\1\0\27\5\1\0\20\5\2\0\1\6\1\5\7\6"+ - "\1\0\3\6\1\0\4\6\7\0\2\6\1\0\3\5\2\0\1\5"+ - "\2\0\2\5\2\6\2\0\12\6\20\0\1\5\3\6\1\0\10\5"+ - "\1\0\3\5\1\0\27\5\1\0\12\5\1\0\5\5\2\0\1\6"+ - "\1\5\7\6\1\0\3\6\1\0\4\6\7\0\2\6\6\0\2\5"+ - "\1\0\2\5\2\6\2\0\12\6\1\0\2\5\15\0\4\6\11\5"+ - "\1\0\3\5\1\0\51\5\2\6\1\5\7\6\1\0\3\6\1\0"+ - "\4\6\1\5\5\0\3\5\1\6\7\0\3\5\2\6\2\0\12\6"+ - "\12\0\6\5\1\0\3\6\1\0\22\5\3\0\30\5\1\0\11\5"+ - "\1\0\1\5\2\0\7\5\3\0\1\6\4\0\6\6\1\0\1\6"+ - "\1\0\10\6\6\0\12\6\2\0\2\6\15\0\60\5\1\6\2\5"+ - "\7\6\4\0\10\5\10\6\1\0\12\6\47\0\2\5\1\0\1\5"+ - "\1\0\5\5\1\0\30\5\1\0\1\5\1\0\12\5\1\6\2\5"+ - "\11\6\1\5\2\0\5\5\1\0\1\5\1\0\6\6\2\0\12\6"+ - "\2\0\4\5\40\0\1\5\27\0\2\6\6\0\12\6\13\0\1\6"+ - "\1\0\1\6\1\0\1\6\4\0\2\6\10\5\1\0\44\5\4\0"+ - "\24\6\1\0\2\6\5\5\13\6\1\0\44\6\11\0\1\6\71\0"+ - "\53\5\24\6\1\5\12\6\6\0\6\5\4\6\4\5\3\6\1\5"+ - "\3\6\2\5\7\6\3\5\4\6\15\5\14\6\1\5\17\6\2\0"+ - "\46\5\1\0\1\5\5\0\1\5\2\0\53\5\1\0\u014d\5\1\0"+ - "\4\5\2\0\7\5\1\0\1\5\1\0\4\5\2\0\51\5\1\0"+ - "\4\5\2\0\41\5\1\0\4\5\2\0\7\5\1\0\1\5\1\0"+ - "\4\5\2\0\17\5\1\0\71\5\1\0\4\5\2\0\103\5\2\0"+ - "\3\6\40\0\20\5\20\0\126\5\2\0\6\5\3\0\u026c\5\2\0"+ - "\21\5\1\0\32\5\5\0\113\5\3\0\13\5\7\0\22\5\4\6"+ - "\11\0\23\5\3\6\13\0\22\5\2\6\14\0\15\5\1\0\3\5"+ - "\1\0\2\6\14\0\64\5\40\6\3\0\1\5\3\0\2\5\1\6"+ - "\2\0\12\6\41\0\17\6\6\0\131\5\7\0\5\5\2\6\42\5"+ - "\1\6\1\5\5\0\106\5\12\0\37\5\1\0\14\6\4\0\14\6"+ - "\12\0\12\6\36\5\2\0\5\5\13\0\54\5\4\0\32\5\6\0"+ - "\12\6\46\0\27\5\5\6\4\0\65\5\12\6\1\0\35\6\2\0"+ - "\13\6\6\0\12\6\15\0\1\5\10\0\16\6\1\0\20\6\61\0"+ - "\5\6\57\5\21\6\10\5\3\0\12\6\21\0\11\6\14\0\3\6"+ - "\36\5\15\6\2\5\12\6\54\5\16\6\14\0\44\5\24\6\10\0"+ - "\12\6\3\0\3\5\12\6\44\5\2\0\11\5\7\0\53\5\2\0"+ - "\3\5\20\0\3\6\1\0\25\6\4\5\1\6\6\5\1\6\2\5"+ - "\3\6\1\5\5\0\300\5\100\6\u0116\5\2\0\6\5\2\0\46\5"+ - "\2\0\6\5\2\0\10\5\1\0\1\5\1\0\1\5\1\0\1\5"+ - "\1\0\37\5\2\0\65\5\1\0\7\5\1\0\1\5\3\0\3\5"+ - "\1\0\7\5\3\0\4\5\2\0\6\5\4\0\15\5\5\0\3\5"+ - "\1\0\7\5\16\0\5\6\30\0\1\51\1\51\5\6\20\0\2\5"+ - "\23\0\1\5\13\0\5\6\1\0\12\6\1\0\1\5\15\0\1\5"+ - "\20\0\15\5\3\0\41\5\17\0\15\6\4\0\1\6\3\0\14\6"+ - "\21\0\1\5\4\0\1\5\2\0\12\5\1\0\1\5\3\0\5\5"+ - "\6\0\1\5\1\0\1\5\1\0\1\5\1\0\4\5\1\0\13\5"+ - "\2\0\4\5\5\0\5\5\4\0\1\5\21\0\51\5\u0a77\0\345\5"+ - "\6\0\4\5\3\6\2\5\14\0\46\5\1\0\1\5\5\0\1\5"+ - "\2\0\70\5\7\0\1\5\17\0\1\6\27\5\11\0\7\5\1\0"+ - "\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0"+ - "\7\5\1\0\7\5\1\0\40\6\57\0\1\5\u01d5\0\3\5\31\0"+ - "\11\5\6\6\1\0\5\5\2\0\5\5\4\0\126\5\2\0\2\6"+ - "\2\0\3\5\1\0\132\5\1\0\4\5\5\0\53\5\1\0\136\5"+ - "\21\0\40\5\60\0\20\5\u0200\0\u19c0\5\100\0\u568d\5\103\0\56\5"+ - "\2\0\u010d\5\3\0\20\5\12\6\2\5\24\0\57\5\1\6\4\0"+ - "\12\6\1\0\37\5\2\6\120\5\2\6\45\0\11\5\2\0\147\5"+ - "\2\0\100\5\5\0\2\5\1\0\1\5\1\0\5\5\30\0\20\5"+ - "\1\6\3\5\1\6\4\5\1\6\27\5\5\6\4\0\1\6\13\0"+ - "\1\5\7\0\64\5\14\0\2\6\62\5\22\6\12\0\12\6\6\0"+ - "\22\6\6\5\3\0\1\5\1\0\2\5\13\6\34\5\10\6\2\0"+ - "\27\5\15\6\14\0\35\5\3\0\4\6\57\5\16\6\16\0\1\5"+ - "\12\6\6\0\5\5\1\6\12\5\12\6\5\5\1\0\51\5\16\6"+ - "\11\0\3\5\1\6\10\5\2\6\2\0\12\6\6\0\27\5\3\0"+ - "\1\5\3\6\62\5\1\6\1\5\3\6\2\5\2\6\5\5\2\6"+ - "\1\5\1\6\1\5\30\0\3\5\2\0\13\5\5\6\2\0\3\5"+ - "\2\6\12\0\6\5\2\0\6\5\2\0\6\5\11\0\7\5\1\0"+ - "\7\5\1\0\53\5\1\0\16\5\6\0\163\5\10\6\1\0\2\6"+ - "\2\0\12\6\6\0\u2ba4\5\14\0\27\5\4\0\61\5\u2104\0\u016e\5"+ - "\2\0\152\5\46\0\7\5\14\0\5\5\5\0\1\5\1\6\12\5"+ - "\1\0\15\5\1\0\5\5\1\0\1\5\1\0\2\5\1\0\2\5"+ - "\1\0\154\5\41\0\u016b\5\22\0\100\5\2\0\66\5\50\0\15\5"+ - "\3\0\20\6\20\0\20\6\3\0\2\5\30\0\3\5\31\0\1\5"+ - "\6\0\5\5\1\0\207\5\2\0\1\6\4\0\1\5\13\0\12\6"+ - "\7\0\32\5\4\0\1\5\1\0\32\5\13\0\131\5\3\0\6\5"+ - "\2\0\6\5\2\0\6\5\2\0\3\5\3\0\2\5\3\0\2\5"+ - "\22\0\3\6\4\0\14\5\1\0\32\5\1\0\23\5\1\0\2\5"+ - "\1\0\17\5\2\0\16\5\42\0\173\5\105\0\65\5\210\0\1\6"+ - "\202\0\35\5\3\0\61\5\17\0\1\6\37\0\40\5\15\0\36\5"+ - "\5\0\46\5\5\6\5\0\36\5\2\0\44\5\4\0\10\5\1\0"+ - "\5\5\52\0\236\5\2\0\12\6\6\0\44\5\4\0\44\5\4\0"+ - "\50\5\10\0\64\5\14\0\13\5\1\0\17\5\1\0\7\5\1\0"+ - "\2\5\1\0\13\5\1\0\17\5\1\0\7\5\1\0\2\5\103\0"+ - "\u0137\5\11\0\26\5\12\0\10\5\30\0\6\5\1\0\52\5\1\0"+ - "\11\5\105\0\6\5\2\0\1\5\1\0\54\5\1\0\2\5\3\0"+ - "\1\5\2\0\27\5\12\0\27\5\11\0\37\5\101\0\23\5\1\0"+ - "\2\5\12\0\26\5\12\0\32\5\106\0\70\5\6\0\2\5\100\0"+ - "\1\5\3\6\1\0\2\6\5\0\4\6\4\5\1\0\3\5\1\0"+ - "\35\5\2\0\3\6\4\0\1\6\40\0\35\5\3\0\35\5\43\0"+ - "\10\5\1\0\34\5\2\6\31\0\66\5\12\0\26\5\12\0\23\5"+ - "\15\0\22\5\156\0\111\5\67\0\63\5\15\0\63\5\15\0\44\5"+ - "\4\6\10\0\12\6\u0146\0\52\5\1\0\2\6\3\0\2\5\116\0"+ - "\35\5\12\0\1\5\10\0\26\5\13\6\37\0\22\5\4\6\52\0"+ - "\25\5\33\0\27\5\11\0\3\6\65\5\17\6\37\0\13\6\2\5"+ - "\2\6\1\5\11\0\4\6\55\5\13\6\2\0\1\6\4\0\1\6"+ - "\12\0\1\6\2\0\31\5\7\0\12\6\6\0\3\6\44\5\16\6"+ - "\1\0\12\6\4\0\1\5\2\6\1\5\10\0\43\5\1\6\2\0"+ - "\1\5\11\0\3\6\60\5\16\6\4\5\4\0\4\6\1\0\14\6"+ - "\1\5\1\0\1\5\43\0\22\5\1\0\31\5\14\6\6\0\1\6"+ - "\101\0\7\5\1\0\1\5\1\0\4\5\1\0\17\5\1\0\12\5"+ - "\7\0\57\5\14\6\5\0\12\6\6\0\4\6\1\0\10\5\2\0"+ - "\2\5\2\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5\1\0"+ - "\2\6\1\5\7\6\2\0\2\6\2\0\3\6\2\0\1\5\6\0"+ - "\1\6\5\0\5\5\2\6\2\0\7\6\3\0\5\6\213\0\65\5"+ - "\22\6\4\5\5\0\12\6\4\0\1\6\3\5\36\0\60\5\24\6"+ - "\2\5\1\0\1\5\10\0\12\6\246\0\57\5\7\6\2\0\11\6"+ - "\27\0\4\5\2\6\42\0\60\5\21\6\3\0\1\5\13\0\12\6"+ - "\46\0\53\5\15\6\1\5\7\0\12\6\66\0\33\5\2\0\17\6"+ - "\4\0\12\6\6\0\7\5\271\0\54\5\17\6\145\0\100\5\12\6"+ - "\25\0\10\5\2\0\1\5\2\0\10\5\1\0\2\5\1\0\30\5"+ - "\6\6\1\0\2\6\2\0\4\6\1\5\1\6\1\5\2\6\14\0"+ - "\12\6\106\0\10\5\2\0\47\5\7\6\2\0\7\6\1\5\1\0"+ - "\1\5\1\6\33\0\1\5\12\6\50\5\7\6\1\5\4\6\10\0"+ - "\1\6\10\0\1\5\13\6\56\5\20\6\3\0\1\5\22\0\111\5"+ - "\u0107\0\11\5\1\0\45\5\10\6\1\0\10\6\1\5\17\0\12\6"+ - "\30\0\36\5\2\0\26\6\1\0\16\6\111\0\7\5\1\0\2\5"+ - "\1\0\46\5\6\6\3\0\1\6\1\0\2\6\1\0\7\6\1\5"+ - "\1\6\10\0\12\6\6\0\6\5\1\0\2\5\1\0\40\5\5\6"+ - "\1\0\2\6\1\0\5\6\1\5\7\0\12\6\u0136\0\23\5\4\6"+ - "\271\0\1\5\54\0\4\5\37\0\u039a\5\146\0\157\5\21\0\304\5"+ - "\u0a4c\0\141\5\17\0\u042f\5\1\0\11\6\u0fc7\0\u0247\5\u21b9\0\u0239\5"+ - "\7\0\37\5\1\0\12\6\6\0\117\5\1\0\12\6\6\0\36\5"+ - "\2\0\5\6\13\0\60\5\7\6\11\0\4\5\14\0\12\6\11\0"+ - "\25\5\5\0\23\5\u02b0\0\100\5\200\0\113\5\4\0\1\6\1\5"+ - "\67\6\7\0\4\6\15\5\100\0\2\5\1\0\1\5\1\6\13\0"+ - "\2\6\16\0\u17f8\5\10\0\u04d6\5\52\0\11\5\u22e7\0\4\5\1\0"+ - "\7\5\1\0\2\5\1\0\u0123\5\55\0\3\5\21\0\4\5\10\0"+ - "\u018c\5\u0904\0\153\5\5\0\15\5\3\0\11\5\7\0\12\5\3\0"+ - "\2\6\1\0\4\6\u125c\0\56\6\2\0\27\6\u021e\0\5\6\3\0"+ - "\26\6\2\0\7\6\36\0\4\6\224\0\3\6\u01bb\0\125\5\1\0"+ - "\107\5\1\0\2\5\2\0\1\5\2\0\2\5\2\0\4\5\1\0"+ - "\14\5\1\0\1\5\1\0\7\5\1\0\101\5\1\0\4\5\2\0"+ - "\10\5\1\0\7\5\1\0\34\5\1\0\4\5\1\0\5\5\1\0"+ - "\1\5\3\0\7\5\1\0\u0154\5\2\0\31\5\1\0\31\5\1\0"+ - "\37\5\1\0\31\5\1\0\37\5\1\0\31\5\1\0\37\5\1\0"+ - "\31\5\1\0\37\5\1\0\31\5\1\0\10\5\2\0\62\6\u0200\0"+ - "\67\6\4\0\62\6\10\0\1\6\16\0\1\6\26\0\5\6\1\0"+ - "\17\6\u0450\0\37\5\341\0\7\6\1\0\21\6\2\0\7\6\1\0"+ - "\2\6\1\0\5\6\325\0\55\5\3\0\7\6\7\5\2\0\12\6"+ - "\4\0\1\5\u0141\0\36\5\1\6\21\0\54\5\16\6\5\0\1\5"+ - "\u04e0\0\7\5\1\0\4\5\1\0\2\5\1\0\17\5\1\0\305\5"+ - "\13\0\7\6\51\0\104\5\7\6\1\5\4\0\12\6\u0356\0\1\5"+ - "\u014f\0\4\5\1\0\33\5\1\0\2\5\1\0\1\5\2\0\1\5"+ - "\1\0\12\5\1\0\4\5\1\0\1\5\1\0\1\5\6\0\1\5"+ - "\4\0\1\5\1\0\1\5\1\0\1\5\1\0\3\5\1\0\2\5"+ - "\1\0\1\5\2\0\1\5\1\0\1\5\1\0\1\5\1\0\1\5"+ - "\1\0\1\5\1\0\2\5\1\0\1\5\2\0\4\5\1\0\7\5"+ - "\1\0\4\5\1\0\4\5\1\0\1\5\1\0\12\5\1\0\21\5"+ - "\5\0\3\5\1\0\5\5\1\0\21\5\u0d34\0\12\6\u0406\0\ua6e0\5"+ - "\40\0\u1039\5\7\0\336\5\2\0\u1682\5\16\0\u1d31\5\u0c1f\0\u021e\5"+ - "\u05e2\0\u134b\5\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uecc0\0"+ - "\1\6\36\0\140\6\200\0\360\6\uffff\0\uffff\0\ufe12\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED + = "\11\6\1\4\1\2\1\51\1\52\1\1\16\6\4\0\1\4\1\0" + + "\1\43\1\0\1\5\2\0\1\47\3\0\1\35\1\44\1\25\1\33" + + "\1\0\1\30\11\31\1\7\1\3\5\0\4\36\1\34\1\36\2\5" + + "\1\26\4\5\1\32\14\5\1\0\1\37\2\0\1\5\1\0\1\17" + + "\1\45\1\41\1\23\1\15\1\16\1\40\1\5\1\24\2\5\1\20" + + "\1\5\1\22\1\42\2\5\1\13\1\21\1\12\1\14\2\5\1\50" + + "\1\27\1\5\1\10\1\0\1\11\1\0\6\6\1\53\32\6\2\0" + + "\4\5\1\0\1\46\2\0\1\5\2\0\1\6\7\0\1\5\4\0" + + "\1\5\5\0\27\5\1\0\37\5\1\0\u01ca\5\4\0\14\5\16\0" + + "\5\5\7\0\1\5\1\0\1\5\21\0\160\6\5\5\1\0\2\5" + + "\2\0\4\5\1\0\1\5\6\0\1\5\1\0\3\5\1\0\1\5" + + "\1\0\24\5\1\0\123\5\1\0\213\5\1\0\5\6\2\0\246\5" + + "\1\0\46\5\2\0\1\5\6\0\51\5\6\0\1\5\1\0\55\6" + + "\1\0\1\6\1\0\2\6\1\0\2\6\1\0\1\6\10\0\33\5" + + "\4\0\4\5\15\0\6\6\5\0\1\5\4\0\13\6\1\0\1\6" + + "\3\0\53\5\37\6\4\0\2\5\1\6\143\5\1\0\1\5\10\6" + + "\1\0\6\6\2\5\2\6\1\0\4\6\2\5\12\6\3\5\2\0" + + "\1\5\17\0\1\6\1\5\1\6\36\5\33\6\2\0\131\5\13\6" + + "\1\5\16\0\12\6\41\5\11\6\2\5\4\0\1\5\2\0\1\6" + + "\30\5\4\6\1\5\11\6\1\5\3\6\1\5\5\6\22\0\31\5" + + "\3\6\4\0\13\5\5\0\30\5\1\0\6\5\1\0\2\6\6\0" + + "\10\6\52\5\72\6\66\5\3\6\1\5\22\6\1\5\7\6\12\5" + + "\2\6\2\0\12\6\1\0\20\5\3\6\1\0\10\5\2\0\2\5" + + "\2\0\26\5\1\0\7\5\1\0\1\5\3\0\4\5\2\0\1\6" + + "\1\5\7\6\2\0\2\6\2\0\3\6\1\5\10\0\1\6\4\0" + + "\2\5\1\0\3\5\2\6\2\0\12\6\4\5\7\0\2\5\1\0" + + "\1\6\2\0\3\6\1\0\6\5\4\0\2\5\2\0\26\5\1\0" + + "\7\5\1\0\2\5\1\0\2\5\1\0\2\5\2\0\1\6\1\0" + + "\5\6\4\0\2\6\2\0\3\6\3\0\1\6\7\0\4\5\1\0" + + "\1\5\7\0\14\6\3\5\1\6\13\0\3\6\1\0\11\5\1\0" + + "\3\5\1\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5\2\0" + + "\1\6\1\5\10\6\1\0\3\6\1\0\3\6\2\0\1\5\17\0" + + "\2\5\2\6\2\0\12\6\1\0\1\5\7\0\1\5\6\6\1\0" + + "\3\6\1\0\10\5\2\0\2\5\2\0\26\5\1\0\7\5\1\0" + + "\2\5\1\0\5\5\2\0\1\6\1\5\7\6\2\0\2\6\2\0" + + "\3\6\7\0\3\6\4\0\2\5\1\0\3\5\2\6\2\0\12\6" + + "\1\0\1\5\20\0\1\6\1\5\1\0\6\5\3\0\3\5\1\0" + + "\4\5\3\0\2\5\1\0\1\5\1\0\2\5\3\0\2\5\3\0" + + "\3\5\3\0\14\5\4\0\5\6\3\0\3\6\1\0\4\6\2\0" + + "\1\5\6\0\1\6\16\0\12\6\11\0\1\5\6\0\5\6\10\5" + + "\1\0\3\5\1\0\27\5\1\0\20\5\2\0\1\6\1\5\7\6" + + "\1\0\3\6\1\0\4\6\7\0\2\6\1\0\3\5\2\0\1\5" + + "\2\0\2\5\2\6\2\0\12\6\20\0\1\5\3\6\1\0\10\5" + + "\1\0\3\5\1\0\27\5\1\0\12\5\1\0\5\5\2\0\1\6" + + "\1\5\7\6\1\0\3\6\1\0\4\6\7\0\2\6\6\0\2\5" + + "\1\0\2\5\2\6\2\0\12\6\1\0\2\5\15\0\4\6\11\5" + + "\1\0\3\5\1\0\51\5\2\6\1\5\7\6\1\0\3\6\1\0" + + "\4\6\1\5\5\0\3\5\1\6\7\0\3\5\2\6\2\0\12\6" + + "\12\0\6\5\1\0\3\6\1\0\22\5\3\0\30\5\1\0\11\5" + + "\1\0\1\5\2\0\7\5\3\0\1\6\4\0\6\6\1\0\1\6" + + "\1\0\10\6\6\0\12\6\2\0\2\6\15\0\60\5\1\6\2\5" + + "\7\6\4\0\10\5\10\6\1\0\12\6\47\0\2\5\1\0\1\5" + + "\1\0\5\5\1\0\30\5\1\0\1\5\1\0\12\5\1\6\2\5" + + "\11\6\1\5\2\0\5\5\1\0\1\5\1\0\6\6\2\0\12\6" + + "\2\0\4\5\40\0\1\5\27\0\2\6\6\0\12\6\13\0\1\6" + + "\1\0\1\6\1\0\1\6\4\0\2\6\10\5\1\0\44\5\4\0" + + "\24\6\1\0\2\6\5\5\13\6\1\0\44\6\11\0\1\6\71\0" + + "\53\5\24\6\1\5\12\6\6\0\6\5\4\6\4\5\3\6\1\5" + + "\3\6\2\5\7\6\3\5\4\6\15\5\14\6\1\5\17\6\2\0" + + "\46\5\1\0\1\5\5\0\1\5\2\0\53\5\1\0\u014d\5\1\0" + + "\4\5\2\0\7\5\1\0\1\5\1\0\4\5\2\0\51\5\1\0" + + "\4\5\2\0\41\5\1\0\4\5\2\0\7\5\1\0\1\5\1\0" + + "\4\5\2\0\17\5\1\0\71\5\1\0\4\5\2\0\103\5\2\0" + + "\3\6\40\0\20\5\20\0\126\5\2\0\6\5\3\0\u026c\5\2\0" + + "\21\5\1\0\32\5\5\0\113\5\3\0\13\5\7\0\22\5\4\6" + + "\11\0\23\5\3\6\13\0\22\5\2\6\14\0\15\5\1\0\3\5" + + "\1\0\2\6\14\0\64\5\40\6\3\0\1\5\3\0\2\5\1\6" + + "\2\0\12\6\41\0\17\6\6\0\131\5\7\0\5\5\2\6\42\5" + + "\1\6\1\5\5\0\106\5\12\0\37\5\1\0\14\6\4\0\14\6" + + "\12\0\12\6\36\5\2\0\5\5\13\0\54\5\4\0\32\5\6\0" + + "\12\6\46\0\27\5\5\6\4\0\65\5\12\6\1\0\35\6\2\0" + + "\13\6\6\0\12\6\15\0\1\5\10\0\16\6\1\0\20\6\61\0" + + "\5\6\57\5\21\6\10\5\3\0\12\6\21\0\11\6\14\0\3\6" + + "\36\5\15\6\2\5\12\6\54\5\16\6\14\0\44\5\24\6\10\0" + + "\12\6\3\0\3\5\12\6\44\5\2\0\11\5\7\0\53\5\2\0" + + "\3\5\20\0\3\6\1\0\25\6\4\5\1\6\6\5\1\6\2\5" + + "\3\6\1\5\5\0\300\5\100\6\u0116\5\2\0\6\5\2\0\46\5" + + "\2\0\6\5\2\0\10\5\1\0\1\5\1\0\1\5\1\0\1\5" + + "\1\0\37\5\2\0\65\5\1\0\7\5\1\0\1\5\3\0\3\5" + + "\1\0\7\5\3\0\4\5\2\0\6\5\4\0\15\5\5\0\3\5" + + "\1\0\7\5\16\0\5\6\30\0\1\51\1\51\5\6\20\0\2\5" + + "\23\0\1\5\13\0\5\6\1\0\12\6\1\0\1\5\15\0\1\5" + + "\20\0\15\5\3\0\41\5\17\0\15\6\4\0\1\6\3\0\14\6" + + "\21\0\1\5\4\0\1\5\2\0\12\5\1\0\1\5\3\0\5\5" + + "\6\0\1\5\1\0\1\5\1\0\1\5\1\0\4\5\1\0\13\5" + + "\2\0\4\5\5\0\5\5\4\0\1\5\21\0\51\5\u0a77\0\345\5" + + "\6\0\4\5\3\6\2\5\14\0\46\5\1\0\1\5\5\0\1\5" + + "\2\0\70\5\7\0\1\5\17\0\1\6\27\5\11\0\7\5\1\0" + + "\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0" + + "\7\5\1\0\7\5\1\0\40\6\57\0\1\5\u01d5\0\3\5\31\0" + + "\11\5\6\6\1\0\5\5\2\0\5\5\4\0\126\5\2\0\2\6" + + "\2\0\3\5\1\0\132\5\1\0\4\5\5\0\53\5\1\0\136\5" + + "\21\0\40\5\60\0\20\5\u0200\0\u19c0\5\100\0\u568d\5\103\0\56\5" + + "\2\0\u010d\5\3\0\20\5\12\6\2\5\24\0\57\5\1\6\4\0" + + "\12\6\1\0\37\5\2\6\120\5\2\6\45\0\11\5\2\0\147\5" + + "\2\0\100\5\5\0\2\5\1\0\1\5\1\0\5\5\30\0\20\5" + + "\1\6\3\5\1\6\4\5\1\6\27\5\5\6\4\0\1\6\13\0" + + "\1\5\7\0\64\5\14\0\2\6\62\5\22\6\12\0\12\6\6\0" + + "\22\6\6\5\3\0\1\5\1\0\2\5\13\6\34\5\10\6\2\0" + + "\27\5\15\6\14\0\35\5\3\0\4\6\57\5\16\6\16\0\1\5" + + "\12\6\6\0\5\5\1\6\12\5\12\6\5\5\1\0\51\5\16\6" + + "\11\0\3\5\1\6\10\5\2\6\2\0\12\6\6\0\27\5\3\0" + + "\1\5\3\6\62\5\1\6\1\5\3\6\2\5\2\6\5\5\2\6" + + "\1\5\1\6\1\5\30\0\3\5\2\0\13\5\5\6\2\0\3\5" + + "\2\6\12\0\6\5\2\0\6\5\2\0\6\5\11\0\7\5\1\0" + + "\7\5\1\0\53\5\1\0\16\5\6\0\163\5\10\6\1\0\2\6" + + "\2\0\12\6\6\0\u2ba4\5\14\0\27\5\4\0\61\5\u2104\0\u016e\5" + + "\2\0\152\5\46\0\7\5\14\0\5\5\5\0\1\5\1\6\12\5" + + "\1\0\15\5\1\0\5\5\1\0\1\5\1\0\2\5\1\0\2\5" + + "\1\0\154\5\41\0\u016b\5\22\0\100\5\2\0\66\5\50\0\15\5" + + "\3\0\20\6\20\0\20\6\3\0\2\5\30\0\3\5\31\0\1\5" + + "\6\0\5\5\1\0\207\5\2\0\1\6\4\0\1\5\13\0\12\6" + + "\7\0\32\5\4\0\1\5\1\0\32\5\13\0\131\5\3\0\6\5" + + "\2\0\6\5\2\0\6\5\2\0\3\5\3\0\2\5\3\0\2\5" + + "\22\0\3\6\4\0\14\5\1\0\32\5\1\0\23\5\1\0\2\5" + + "\1\0\17\5\2\0\16\5\42\0\173\5\105\0\65\5\210\0\1\6" + + "\202\0\35\5\3\0\61\5\17\0\1\6\37\0\40\5\15\0\36\5" + + "\5\0\46\5\5\6\5\0\36\5\2\0\44\5\4\0\10\5\1\0" + + "\5\5\52\0\236\5\2\0\12\6\6\0\44\5\4\0\44\5\4\0" + + "\50\5\10\0\64\5\14\0\13\5\1\0\17\5\1\0\7\5\1\0" + + "\2\5\1\0\13\5\1\0\17\5\1\0\7\5\1\0\2\5\103\0" + + "\u0137\5\11\0\26\5\12\0\10\5\30\0\6\5\1\0\52\5\1\0" + + "\11\5\105\0\6\5\2\0\1\5\1\0\54\5\1\0\2\5\3\0" + + "\1\5\2\0\27\5\12\0\27\5\11\0\37\5\101\0\23\5\1\0" + + "\2\5\12\0\26\5\12\0\32\5\106\0\70\5\6\0\2\5\100\0" + + "\1\5\3\6\1\0\2\6\5\0\4\6\4\5\1\0\3\5\1\0" + + "\35\5\2\0\3\6\4\0\1\6\40\0\35\5\3\0\35\5\43\0" + + "\10\5\1\0\34\5\2\6\31\0\66\5\12\0\26\5\12\0\23\5" + + "\15\0\22\5\156\0\111\5\67\0\63\5\15\0\63\5\15\0\44\5" + + "\4\6\10\0\12\6\u0146\0\52\5\1\0\2\6\3\0\2\5\116\0" + + "\35\5\12\0\1\5\10\0\26\5\13\6\37\0\22\5\4\6\52\0" + + "\25\5\33\0\27\5\11\0\3\6\65\5\17\6\37\0\13\6\2\5" + + "\2\6\1\5\11\0\4\6\55\5\13\6\2\0\1\6\4\0\1\6" + + "\12\0\1\6\2\0\31\5\7\0\12\6\6\0\3\6\44\5\16\6" + + "\1\0\12\6\4\0\1\5\2\6\1\5\10\0\43\5\1\6\2\0" + + "\1\5\11\0\3\6\60\5\16\6\4\5\4\0\4\6\1\0\14\6" + + "\1\5\1\0\1\5\43\0\22\5\1\0\31\5\14\6\6\0\1\6" + + "\101\0\7\5\1\0\1\5\1\0\4\5\1\0\17\5\1\0\12\5" + + "\7\0\57\5\14\6\5\0\12\6\6\0\4\6\1\0\10\5\2\0" + + "\2\5\2\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5\1\0" + + "\2\6\1\5\7\6\2\0\2\6\2\0\3\6\2\0\1\5\6\0" + + "\1\6\5\0\5\5\2\6\2\0\7\6\3\0\5\6\213\0\65\5" + + "\22\6\4\5\5\0\12\6\4\0\1\6\3\5\36\0\60\5\24\6" + + "\2\5\1\0\1\5\10\0\12\6\246\0\57\5\7\6\2\0\11\6" + + "\27\0\4\5\2\6\42\0\60\5\21\6\3\0\1\5\13\0\12\6" + + "\46\0\53\5\15\6\1\5\7\0\12\6\66\0\33\5\2\0\17\6" + + "\4\0\12\6\6\0\7\5\271\0\54\5\17\6\145\0\100\5\12\6" + + "\25\0\10\5\2\0\1\5\2\0\10\5\1\0\2\5\1\0\30\5" + + "\6\6\1\0\2\6\2\0\4\6\1\5\1\6\1\5\2\6\14\0" + + "\12\6\106\0\10\5\2\0\47\5\7\6\2\0\7\6\1\5\1\0" + + "\1\5\1\6\33\0\1\5\12\6\50\5\7\6\1\5\4\6\10\0" + + "\1\6\10\0\1\5\13\6\56\5\20\6\3\0\1\5\22\0\111\5" + + "\u0107\0\11\5\1\0\45\5\10\6\1\0\10\6\1\5\17\0\12\6" + + "\30\0\36\5\2\0\26\6\1\0\16\6\111\0\7\5\1\0\2\5" + + "\1\0\46\5\6\6\3\0\1\6\1\0\2\6\1\0\7\6\1\5" + + "\1\6\10\0\12\6\6\0\6\5\1\0\2\5\1\0\40\5\5\6" + + "\1\0\2\6\1\0\5\6\1\5\7\0\12\6\u0136\0\23\5\4\6" + + "\271\0\1\5\54\0\4\5\37\0\u039a\5\146\0\157\5\21\0\304\5" + + "\u0a4c\0\141\5\17\0\u042f\5\1\0\11\6\u0fc7\0\u0247\5\u21b9\0\u0239\5" + + "\7\0\37\5\1\0\12\6\6\0\117\5\1\0\12\6\6\0\36\5" + + "\2\0\5\6\13\0\60\5\7\6\11\0\4\5\14\0\12\6\11\0" + + "\25\5\5\0\23\5\u02b0\0\100\5\200\0\113\5\4\0\1\6\1\5" + + "\67\6\7\0\4\6\15\5\100\0\2\5\1\0\1\5\1\6\13\0" + + "\2\6\16\0\u17f8\5\10\0\u04d6\5\52\0\11\5\u22e7\0\4\5\1\0" + + "\7\5\1\0\2\5\1\0\u0123\5\55\0\3\5\21\0\4\5\10\0" + + "\u018c\5\u0904\0\153\5\5\0\15\5\3\0\11\5\7\0\12\5\3\0" + + "\2\6\1\0\4\6\u125c\0\56\6\2\0\27\6\u021e\0\5\6\3\0" + + "\26\6\2\0\7\6\36\0\4\6\224\0\3\6\u01bb\0\125\5\1\0" + + "\107\5\1\0\2\5\2\0\1\5\2\0\2\5\2\0\4\5\1\0" + + "\14\5\1\0\1\5\1\0\7\5\1\0\101\5\1\0\4\5\2\0" + + "\10\5\1\0\7\5\1\0\34\5\1\0\4\5\1\0\5\5\1\0" + + "\1\5\3\0\7\5\1\0\u0154\5\2\0\31\5\1\0\31\5\1\0" + + "\37\5\1\0\31\5\1\0\37\5\1\0\31\5\1\0\37\5\1\0" + + "\31\5\1\0\37\5\1\0\31\5\1\0\10\5\2\0\62\6\u0200\0" + + "\67\6\4\0\62\6\10\0\1\6\16\0\1\6\26\0\5\6\1\0" + + "\17\6\u0450\0\37\5\341\0\7\6\1\0\21\6\2\0\7\6\1\0" + + "\2\6\1\0\5\6\325\0\55\5\3\0\7\6\7\5\2\0\12\6" + + "\4\0\1\5\u0141\0\36\5\1\6\21\0\54\5\16\6\5\0\1\5" + + "\u04e0\0\7\5\1\0\4\5\1\0\2\5\1\0\17\5\1\0\305\5" + + "\13\0\7\6\51\0\104\5\7\6\1\5\4\0\12\6\u0356\0\1\5" + + "\u014f\0\4\5\1\0\33\5\1\0\2\5\1\0\1\5\2\0\1\5" + + "\1\0\12\5\1\0\4\5\1\0\1\5\1\0\1\5\6\0\1\5" + + "\4\0\1\5\1\0\1\5\1\0\1\5\1\0\3\5\1\0\2\5" + + "\1\0\1\5\2\0\1\5\1\0\1\5\1\0\1\5\1\0\1\5" + + "\1\0\1\5\1\0\2\5\1\0\1\5\2\0\4\5\1\0\7\5" + + "\1\0\4\5\1\0\4\5\1\0\1\5\1\0\12\5\1\0\21\5" + + "\5\0\3\5\1\0\5\5\1\0\21\5\u0d34\0\12\6\u0406\0\ua6e0\5" + + "\40\0\u1039\5\7\0\336\5\2\0\u1682\5\16\0\u1d31\5\u0c1f\0\u021e\5" + + "\u05e2\0\u134b\5\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uecc0\0" + + "\1\6\36\0\140\6\200\0\360\6\uffff\0\uffff\0\ufe12\0"; - /** - * Translates characters to character classes - */ - private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int [] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int[] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 = - "\3\0\2\1\1\2\1\3\1\4\2\5\1\1\1\6"+ - "\2\7\1\10\1\11\1\12\5\11\1\1\1\11\2\13"+ - "\1\11\1\1\1\11\1\14\1\15\1\16\2\17\1\20"+ - "\1\21\1\17\1\22\1\23\1\24\1\25\1\26\1\27"+ - "\1\30\1\17\5\11\2\0\1\11\1\0\2\31\2\11"+ - "\4\0\5\11\1\0\1\11\1\0\2\31\1\11\1\32"+ - "\1\0\1\33\1\34\3\11\1\35\1\0\4\11\1\36"+ - "\1\0\4\11\1\0\4\11\1\0\4\11\1\0\1\11"+ - "\2\37\1\40\1\31\2\41"; + private static final String ZZ_ACTION_PACKED_0 + = "\3\0\2\1\1\2\1\3\1\4\2\5\1\1\1\6" + + "\2\7\1\10\1\11\1\12\5\11\1\1\1\11\2\13" + + "\1\11\1\1\1\11\1\14\1\15\1\16\2\17\1\20" + + "\1\21\1\17\1\22\1\23\1\24\1\25\1\26\1\27" + + "\1\30\1\17\5\11\2\0\1\11\1\0\2\31\2\11" + + "\4\0\5\11\1\0\1\11\1\0\2\31\1\11\1\32" + + "\1\0\1\33\1\34\3\11\1\35\1\0\4\11\1\36" + + "\1\0\4\11\1\0\4\11\1\0\4\11\1\0\1\11" + + "\2\37\1\40\1\31\2\41"; - private static int [] zzUnpackAction() { - int [] result = new int[110]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackAction() { + int[] result = new int[110]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\54\0\130\0\204\0\260\0\334\0\204\0\204"+ - "\0\u0108\0\204\0\u0134\0\204\0\u0160\0\204\0\u018c\0\u01b8"+ - "\0\204\0\u01e4\0\u0210\0\u023c\0\u0268\0\u0294\0\u02c0\0\u02ec"+ - "\0\u0318\0\u0344\0\u0370\0\u039c\0\u03c8\0\204\0\204\0\204"+ - "\0\204\0\u03f4\0\204\0\204\0\u0420\0\204\0\204\0\204"+ - "\0\204\0\204\0\204\0\204\0\u044c\0\u0478\0\u04a4\0\u04d0"+ - "\0\u04fc\0\u0528\0\u0554\0\u039c\0\u0580\0\u05ac\0\u0318\0\u05d8"+ - "\0\u0604\0\u0630\0\u065c\0\u0688\0\u06b4\0\u06e0\0\u070c\0\u0738"+ - "\0\u0764\0\u0790\0\u07bc\0\u07e8\0\u0814\0\u0840\0\u0840\0\u01b8"+ - "\0\u086c\0\204\0\u044c\0\204\0\u01b8\0\u0898\0\u08c4\0\u08f0"+ - "\0\u01b8\0\u091c\0\u0948\0\u0974\0\u09a0\0\u09cc\0\u01b8\0\u09f8"+ - "\0\u0a24\0\u0a50\0\u0a7c\0\u0aa8\0\u0ad4\0\u0b00\0\u0b2c\0\u0b58"+ - "\0\u0b84\0\u0bb0\0\u0bdc\0\u0c08\0\u0c34\0\u0c60\0\u0c8c\0\u0cb8"+ - "\0\u01b8\0\u0ce4\0\u01b8\0\204\0\u01b8\0\u0d10"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[110]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); + private static int zzUnpackAction(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; } - return j; - } - /** - * The transition table of the DFA - */ - private static final int [] ZZ_TRANS = zzUnpackTrans(); + /** + * Translates a state to a row index in the transition table + */ + private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - private static final String ZZ_TRANS_PACKED_0 = - "\4\4\1\5\1\6\3\4\1\7\13\6\1\4\2\6"+ - "\2\4\1\6\1\4\1\6\1\4\1\6\1\4\3\6"+ - "\2\4\1\6\2\4\1\6\1\4\1\5\1\4\1\10"+ - "\1\11\1\12\34\10\1\13\3\10\1\14\10\10\1\4"+ - "\1\15\1\16\1\17\1\4\1\20\2\4\1\21\1\4"+ - "\1\22\1\23\1\24\1\20\1\25\3\20\1\26\2\20"+ - "\1\27\1\30\1\20\1\31\1\32\1\33\1\34\1\20"+ - "\1\4\1\20\1\4\1\20\1\35\1\20\1\36\1\37"+ - "\1\20\2\4\1\20\3\4\60\0\1\5\45\0\1\5"+ - "\6\0\2\6\1\40\2\0\13\6\1\0\5\6\1\0"+ - "\1\6\1\0\1\6\1\0\3\6\2\0\1\6\2\0"+ - "\1\6\2\0\1\6\2\0\1\12\51\0\1\41\2\0"+ - "\5\41\1\42\1\41\1\43\1\44\1\45\1\41\1\46"+ - "\3\41\1\47\14\41\1\50\3\41\1\51\1\41\1\52"+ - "\1\53\1\54\1\55\5\0\1\16\51\0\1\17\2\0"+ - "\51\17\5\0\2\20\3\0\13\20\1\0\5\20\1\0"+ - "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0"+ - "\1\20\2\0\1\20\5\0\2\20\3\0\1\20\1\56"+ - "\11\20\1\0\5\20\1\0\1\20\1\0\1\20\1\0"+ - "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0"+ - "\2\20\3\0\3\20\1\57\7\20\1\0\5\20\1\0"+ - "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0"+ - "\1\20\2\0\1\20\5\0\2\20\3\0\10\20\1\60"+ - "\2\20\1\0\5\20\1\0\1\20\1\0\1\20\1\0"+ - "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0"+ - "\2\20\3\0\5\20\1\61\5\20\1\0\5\20\1\0"+ - "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0"+ - "\1\20\2\0\1\20\5\0\2\20\3\0\2\20\1\62"+ - "\10\20\1\0\5\20\1\0\1\20\1\0\1\20\1\0"+ - "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\26\0"+ - "\1\63\1\0\1\31\1\32\1\0\1\64\25\0\2\20"+ - "\3\0\10\20\1\65\2\20\1\0\5\20\1\0\1\20"+ - "\1\0\1\20\1\0\3\20\2\0\1\20\2\0\1\20"+ - "\2\0\1\20\15\0\1\66\12\0\2\67\1\0\1\70"+ - "\1\66\34\0\1\66\12\0\2\32\1\0\1\70\1\66"+ - "\24\0\2\20\3\0\5\20\1\71\5\20\1\0\5\20"+ - "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20"+ - "\2\0\1\20\2\0\1\20\30\0\2\70\27\0\2\20"+ - "\3\0\13\20\1\0\5\20\1\0\1\20\1\0\1\20"+ - "\1\0\2\20\1\72\2\0\1\20\2\0\1\20\2\0"+ - "\1\20\30\0\1\73\1\74\37\0\3\75\3\0\1\75"+ - "\4\0\2\75\2\0\1\75\1\0\1\75\2\0\1\75"+ - "\3\0\1\75\23\0\3\76\3\0\1\76\4\0\2\76"+ - "\2\0\1\76\1\0\1\76\2\0\1\76\3\0\1\76"+ - "\13\0\2\20\3\0\2\20\1\77\10\20\1\0\5\20"+ - "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20"+ - "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\13\20"+ - "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\1\100"+ - "\2\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0"+ - "\2\20\3\0\11\20\1\101\1\20\1\0\5\20\1\0"+ - "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0"+ - "\1\20\2\0\1\20\5\0\2\20\3\0\6\20\1\102"+ - "\4\20\1\0\5\20\1\0\1\20\1\0\1\20\1\0"+ - "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0"+ - "\2\20\3\0\6\20\1\103\4\20\1\0\5\20\1\0"+ - "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0"+ - "\1\20\2\0\1\20\22\0\1\104\36\0\2\20\3\0"+ - "\4\20\1\105\6\20\1\0\5\20\1\0\1\20\1\0"+ - "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0"+ - "\1\20\25\0\1\106\2\0\2\107\3\0\1\106\33\0"+ - "\1\66\12\0\2\70\2\0\1\66\24\0\2\20\3\0"+ - "\13\20\1\0\4\20\1\110\1\0\1\20\1\0\1\20"+ - "\1\0\3\20\2\0\1\20\2\0\1\20\2\0\1\20"+ - "\5\0\2\20\3\0\10\20\1\111\2\20\1\0\5\20"+ - "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20"+ - "\2\0\1\20\2\0\1\20\11\0\1\112\53\0\1\112"+ - "\16\0\2\74\37\0\3\113\3\0\1\113\4\0\2\113"+ - "\2\0\1\113\1\0\1\113\2\0\1\113\3\0\1\113"+ - "\23\0\3\114\3\0\1\114\4\0\2\114\2\0\1\114"+ - "\1\0\1\114\2\0\1\114\3\0\1\114\13\0\2\20"+ - "\3\0\3\20\1\115\7\20\1\0\5\20\1\0\1\20"+ - "\1\0\1\20\1\0\3\20\2\0\1\20\2\0\1\20"+ - "\2\0\1\20\5\0\2\20\3\0\12\20\1\116\1\0"+ - "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\2\0"+ - "\1\20\2\0\1\20\2\0\1\20\5\0\2\20\3\0"+ - "\3\20\1\117\7\20\1\0\5\20\1\0\1\20\1\0"+ - "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0"+ - "\1\20\5\0\2\20\3\0\7\20\1\120\3\20\1\0"+ - "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\2\0"+ - "\1\20\2\0\1\20\2\0\1\20\5\0\2\20\3\0"+ - "\6\20\1\121\4\20\1\0\5\20\1\0\1\20\1\0"+ - "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0"+ - "\1\20\16\0\1\122\42\0\2\20\3\0\12\20\1\123"+ - "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\3\20"+ - "\2\0\1\20\2\0\1\20\2\0\1\20\30\0\2\107"+ - "\27\0\2\20\3\0\7\20\1\124\3\20\1\0\5\20"+ - "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20"+ - "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\7\20"+ - "\1\125\3\20\1\0\5\20\1\0\1\20\1\0\1\20"+ - "\1\0\3\20\2\0\1\20\2\0\1\20\2\0\1\20"+ - "\5\0\2\20\3\0\4\20\1\126\6\20\1\0\5\20"+ - "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20"+ - "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\3\20"+ - "\1\127\7\20\1\0\5\20\1\0\1\20\1\0\1\20"+ - "\1\0\3\20\2\0\1\20\2\0\1\20\2\0\1\20"+ - "\24\0\1\130\34\0\2\20\3\0\10\20\1\131\2\20"+ - "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\3\20"+ - "\2\0\1\20\2\0\1\20\2\0\1\20\5\0\2\20"+ - "\3\0\1\132\12\20\1\0\5\20\1\0\1\20\1\0"+ - "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0"+ - "\1\20\5\0\2\20\3\0\1\133\12\20\1\0\5\20"+ - "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20"+ - "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\12\20"+ - "\1\134\1\0\5\20\1\0\1\20\1\0\1\20\1\0"+ - "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\22\0"+ - "\1\135\36\0\2\20\3\0\12\20\1\136\1\0\5\20"+ - "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20"+ - "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\5\20"+ - "\1\137\5\20\1\0\5\20\1\0\1\20\1\0\1\20"+ - "\1\0\3\20\2\0\1\20\2\0\1\20\2\0\1\20"+ - "\5\0\2\20\3\0\3\20\1\140\7\20\1\0\5\20"+ - "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20"+ - "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\10\20"+ - "\1\141\2\20\1\0\5\20\1\0\1\20\1\0\1\20"+ - "\1\0\3\20\2\0\1\20\2\0\1\20\2\0\1\20"+ - "\24\0\1\142\34\0\2\20\3\0\1\143\12\20\1\0"+ - "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\2\0"+ - "\1\20\2\0\1\20\2\0\1\20\5\0\2\20\3\0"+ - "\10\20\1\144\2\20\1\0\5\20\1\0\1\20\1\0"+ - "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0"+ - "\1\20\5\0\2\20\3\0\1\20\1\145\11\20\1\0"+ - "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\2\0"+ - "\1\20\2\0\1\20\2\0\1\20\5\0\2\20\3\0"+ - "\3\20\1\146\7\20\1\0\5\20\1\0\1\20\1\0"+ - "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0"+ - "\1\20\12\0\1\147\46\0\2\20\3\0\13\20\1\0"+ - "\1\20\1\110\3\20\1\0\1\20\1\0\1\20\1\0"+ - "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0"+ - "\2\20\3\0\1\150\12\20\1\0\5\20\1\0\1\20"+ - "\1\0\1\20\1\0\3\20\2\0\1\20\2\0\1\20"+ - "\2\0\1\20\5\0\2\20\3\0\13\20\1\0\2\20"+ - "\1\151\1\152\1\20\1\0\1\20\1\0\1\20\1\0"+ - "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0"+ - "\2\20\3\0\11\20\1\153\1\20\1\0\5\20\1\0"+ - "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0"+ - "\1\20\2\0\1\20\27\0\1\154\31\0\2\20\3\0"+ - "\13\20\1\0\2\20\1\155\1\156\1\20\1\0\1\20"+ - "\1\0\1\20\1\0\3\20\2\0\1\20\2\0\1\20"+ - "\2\0\1\20\5\0\2\20\3\0\13\20\1\0\2\20"+ - "\2\152\1\20\1\0\1\20\1\0\1\20\1\0\3\20"+ - "\2\0\1\20\2\0\1\20\2\0\1\20\5\0\2\20"+ - "\3\0\13\20\1\0\2\20\2\156\1\20\1\0\1\20"+ - "\1\0\1\20\1\0\3\20\2\0\1\20\2\0\1\20"+ - "\2\0\1\20"; + private static final String ZZ_ROWMAP_PACKED_0 + = "\0\0\0\54\0\130\0\204\0\260\0\334\0\204\0\204" + + "\0\u0108\0\204\0\u0134\0\204\0\u0160\0\204\0\u018c\0\u01b8" + + "\0\204\0\u01e4\0\u0210\0\u023c\0\u0268\0\u0294\0\u02c0\0\u02ec" + + "\0\u0318\0\u0344\0\u0370\0\u039c\0\u03c8\0\204\0\204\0\204" + + "\0\204\0\u03f4\0\204\0\204\0\u0420\0\204\0\204\0\204" + + "\0\204\0\204\0\204\0\204\0\u044c\0\u0478\0\u04a4\0\u04d0" + + "\0\u04fc\0\u0528\0\u0554\0\u039c\0\u0580\0\u05ac\0\u0318\0\u05d8" + + "\0\u0604\0\u0630\0\u065c\0\u0688\0\u06b4\0\u06e0\0\u070c\0\u0738" + + "\0\u0764\0\u0790\0\u07bc\0\u07e8\0\u0814\0\u0840\0\u0840\0\u01b8" + + "\0\u086c\0\204\0\u044c\0\204\0\u01b8\0\u0898\0\u08c4\0\u08f0" + + "\0\u01b8\0\u091c\0\u0948\0\u0974\0\u09a0\0\u09cc\0\u01b8\0\u09f8" + + "\0\u0a24\0\u0a50\0\u0a7c\0\u0aa8\0\u0ad4\0\u0b00\0\u0b2c\0\u0b58" + + "\0\u0b84\0\u0bb0\0\u0bdc\0\u0c08\0\u0c34\0\u0c60\0\u0c8c\0\u0cb8" + + "\0\u01b8\0\u0ce4\0\u01b8\0\204\0\u01b8\0\u0d10"; - private static int [] zzUnpackTrans() { - int [] result = new int[3388]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackRowMap() { + int[] result = new int[110]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\1\11\2\1\2\11\1\1\1\11\1\1\1\11"+ - "\1\1\1\11\2\1\1\11\14\1\4\11\1\1\2\11"+ - "\1\1\7\11\6\1\2\0\1\1\1\0\4\1\4\0"+ - "\5\1\1\0\1\1\1\0\3\1\1\11\1\0\1\11"+ - "\5\1\1\0\5\1\1\0\4\1\1\0\4\1\1\0"+ - "\4\1\1\0\4\1\1\11\2\1"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[110]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + private static int zzUnpackRowMap(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; } - return j; - } - /** the input device */ - private java.io.Reader zzReader; + /** + * The transition table of the DFA + */ + private static final int[] ZZ_TRANS = zzUnpackTrans(); - /** the current state of the DFA */ - private int zzState; + private static final String ZZ_TRANS_PACKED_0 + = "\4\4\1\5\1\6\3\4\1\7\13\6\1\4\2\6" + + "\2\4\1\6\1\4\1\6\1\4\1\6\1\4\3\6" + + "\2\4\1\6\2\4\1\6\1\4\1\5\1\4\1\10" + + "\1\11\1\12\34\10\1\13\3\10\1\14\10\10\1\4" + + "\1\15\1\16\1\17\1\4\1\20\2\4\1\21\1\4" + + "\1\22\1\23\1\24\1\20\1\25\3\20\1\26\2\20" + + "\1\27\1\30\1\20\1\31\1\32\1\33\1\34\1\20" + + "\1\4\1\20\1\4\1\20\1\35\1\20\1\36\1\37" + + "\1\20\2\4\1\20\3\4\60\0\1\5\45\0\1\5" + + "\6\0\2\6\1\40\2\0\13\6\1\0\5\6\1\0" + + "\1\6\1\0\1\6\1\0\3\6\2\0\1\6\2\0" + + "\1\6\2\0\1\6\2\0\1\12\51\0\1\41\2\0" + + "\5\41\1\42\1\41\1\43\1\44\1\45\1\41\1\46" + + "\3\41\1\47\14\41\1\50\3\41\1\51\1\41\1\52" + + "\1\53\1\54\1\55\5\0\1\16\51\0\1\17\2\0" + + "\51\17\5\0\2\20\3\0\13\20\1\0\5\20\1\0" + + "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0" + + "\1\20\2\0\1\20\5\0\2\20\3\0\1\20\1\56" + + "\11\20\1\0\5\20\1\0\1\20\1\0\1\20\1\0" + + "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0" + + "\2\20\3\0\3\20\1\57\7\20\1\0\5\20\1\0" + + "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0" + + "\1\20\2\0\1\20\5\0\2\20\3\0\10\20\1\60" + + "\2\20\1\0\5\20\1\0\1\20\1\0\1\20\1\0" + + "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0" + + "\2\20\3\0\5\20\1\61\5\20\1\0\5\20\1\0" + + "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0" + + "\1\20\2\0\1\20\5\0\2\20\3\0\2\20\1\62" + + "\10\20\1\0\5\20\1\0\1\20\1\0\1\20\1\0" + + "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\26\0" + + "\1\63\1\0\1\31\1\32\1\0\1\64\25\0\2\20" + + "\3\0\10\20\1\65\2\20\1\0\5\20\1\0\1\20" + + "\1\0\1\20\1\0\3\20\2\0\1\20\2\0\1\20" + + "\2\0\1\20\15\0\1\66\12\0\2\67\1\0\1\70" + + "\1\66\34\0\1\66\12\0\2\32\1\0\1\70\1\66" + + "\24\0\2\20\3\0\5\20\1\71\5\20\1\0\5\20" + + "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20" + + "\2\0\1\20\2\0\1\20\30\0\2\70\27\0\2\20" + + "\3\0\13\20\1\0\5\20\1\0\1\20\1\0\1\20" + + "\1\0\2\20\1\72\2\0\1\20\2\0\1\20\2\0" + + "\1\20\30\0\1\73\1\74\37\0\3\75\3\0\1\75" + + "\4\0\2\75\2\0\1\75\1\0\1\75\2\0\1\75" + + "\3\0\1\75\23\0\3\76\3\0\1\76\4\0\2\76" + + "\2\0\1\76\1\0\1\76\2\0\1\76\3\0\1\76" + + "\13\0\2\20\3\0\2\20\1\77\10\20\1\0\5\20" + + "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20" + + "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\13\20" + + "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\1\100" + + "\2\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0" + + "\2\20\3\0\11\20\1\101\1\20\1\0\5\20\1\0" + + "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0" + + "\1\20\2\0\1\20\5\0\2\20\3\0\6\20\1\102" + + "\4\20\1\0\5\20\1\0\1\20\1\0\1\20\1\0" + + "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0" + + "\2\20\3\0\6\20\1\103\4\20\1\0\5\20\1\0" + + "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0" + + "\1\20\2\0\1\20\22\0\1\104\36\0\2\20\3\0" + + "\4\20\1\105\6\20\1\0\5\20\1\0\1\20\1\0" + + "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0" + + "\1\20\25\0\1\106\2\0\2\107\3\0\1\106\33\0" + + "\1\66\12\0\2\70\2\0\1\66\24\0\2\20\3\0" + + "\13\20\1\0\4\20\1\110\1\0\1\20\1\0\1\20" + + "\1\0\3\20\2\0\1\20\2\0\1\20\2\0\1\20" + + "\5\0\2\20\3\0\10\20\1\111\2\20\1\0\5\20" + + "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20" + + "\2\0\1\20\2\0\1\20\11\0\1\112\53\0\1\112" + + "\16\0\2\74\37\0\3\113\3\0\1\113\4\0\2\113" + + "\2\0\1\113\1\0\1\113\2\0\1\113\3\0\1\113" + + "\23\0\3\114\3\0\1\114\4\0\2\114\2\0\1\114" + + "\1\0\1\114\2\0\1\114\3\0\1\114\13\0\2\20" + + "\3\0\3\20\1\115\7\20\1\0\5\20\1\0\1\20" + + "\1\0\1\20\1\0\3\20\2\0\1\20\2\0\1\20" + + "\2\0\1\20\5\0\2\20\3\0\12\20\1\116\1\0" + + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\2\0" + + "\1\20\2\0\1\20\2\0\1\20\5\0\2\20\3\0" + + "\3\20\1\117\7\20\1\0\5\20\1\0\1\20\1\0" + + "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0" + + "\1\20\5\0\2\20\3\0\7\20\1\120\3\20\1\0" + + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\2\0" + + "\1\20\2\0\1\20\2\0\1\20\5\0\2\20\3\0" + + "\6\20\1\121\4\20\1\0\5\20\1\0\1\20\1\0" + + "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0" + + "\1\20\16\0\1\122\42\0\2\20\3\0\12\20\1\123" + + "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\3\20" + + "\2\0\1\20\2\0\1\20\2\0\1\20\30\0\2\107" + + "\27\0\2\20\3\0\7\20\1\124\3\20\1\0\5\20" + + "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20" + + "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\7\20" + + "\1\125\3\20\1\0\5\20\1\0\1\20\1\0\1\20" + + "\1\0\3\20\2\0\1\20\2\0\1\20\2\0\1\20" + + "\5\0\2\20\3\0\4\20\1\126\6\20\1\0\5\20" + + "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20" + + "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\3\20" + + "\1\127\7\20\1\0\5\20\1\0\1\20\1\0\1\20" + + "\1\0\3\20\2\0\1\20\2\0\1\20\2\0\1\20" + + "\24\0\1\130\34\0\2\20\3\0\10\20\1\131\2\20" + + "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\3\20" + + "\2\0\1\20\2\0\1\20\2\0\1\20\5\0\2\20" + + "\3\0\1\132\12\20\1\0\5\20\1\0\1\20\1\0" + + "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0" + + "\1\20\5\0\2\20\3\0\1\133\12\20\1\0\5\20" + + "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20" + + "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\12\20" + + "\1\134\1\0\5\20\1\0\1\20\1\0\1\20\1\0" + + "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\22\0" + + "\1\135\36\0\2\20\3\0\12\20\1\136\1\0\5\20" + + "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20" + + "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\5\20" + + "\1\137\5\20\1\0\5\20\1\0\1\20\1\0\1\20" + + "\1\0\3\20\2\0\1\20\2\0\1\20\2\0\1\20" + + "\5\0\2\20\3\0\3\20\1\140\7\20\1\0\5\20" + + "\1\0\1\20\1\0\1\20\1\0\3\20\2\0\1\20" + + "\2\0\1\20\2\0\1\20\5\0\2\20\3\0\10\20" + + "\1\141\2\20\1\0\5\20\1\0\1\20\1\0\1\20" + + "\1\0\3\20\2\0\1\20\2\0\1\20\2\0\1\20" + + "\24\0\1\142\34\0\2\20\3\0\1\143\12\20\1\0" + + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\2\0" + + "\1\20\2\0\1\20\2\0\1\20\5\0\2\20\3\0" + + "\10\20\1\144\2\20\1\0\5\20\1\0\1\20\1\0" + + "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0" + + "\1\20\5\0\2\20\3\0\1\20\1\145\11\20\1\0" + + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\2\0" + + "\1\20\2\0\1\20\2\0\1\20\5\0\2\20\3\0" + + "\3\20\1\146\7\20\1\0\5\20\1\0\1\20\1\0" + + "\1\20\1\0\3\20\2\0\1\20\2\0\1\20\2\0" + + "\1\20\12\0\1\147\46\0\2\20\3\0\13\20\1\0" + + "\1\20\1\110\3\20\1\0\1\20\1\0\1\20\1\0" + + "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0" + + "\2\20\3\0\1\150\12\20\1\0\5\20\1\0\1\20" + + "\1\0\1\20\1\0\3\20\2\0\1\20\2\0\1\20" + + "\2\0\1\20\5\0\2\20\3\0\13\20\1\0\2\20" + + "\1\151\1\152\1\20\1\0\1\20\1\0\1\20\1\0" + + "\3\20\2\0\1\20\2\0\1\20\2\0\1\20\5\0" + + "\2\20\3\0\11\20\1\153\1\20\1\0\5\20\1\0" + + "\1\20\1\0\1\20\1\0\3\20\2\0\1\20\2\0" + + "\1\20\2\0\1\20\27\0\1\154\31\0\2\20\3\0" + + "\13\20\1\0\2\20\1\155\1\156\1\20\1\0\1\20" + + "\1\0\1\20\1\0\3\20\2\0\1\20\2\0\1\20" + + "\2\0\1\20\5\0\2\20\3\0\13\20\1\0\2\20" + + "\2\152\1\20\1\0\1\20\1\0\1\20\1\0\3\20" + + "\2\0\1\20\2\0\1\20\2\0\1\20\5\0\2\20" + + "\3\0\13\20\1\0\2\20\2\156\1\20\1\0\1\20" + + "\1\0\1\20\1\0\3\20\2\0\1\20\2\0\1\20" + + "\2\0\1\20"; - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + private static int[] zzUnpackTrans() { + int[] result = new int[3388]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + private static int zzUnpackTrans(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } - /** the textposition at the last accepting state */ - private int zzMarkedPos; - /** the current text position in the buffer */ - private int zzCurrentPos; + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - /** number of newlines encountered up to the start of the matched text */ - private int yyline; + private static final String ZZ_ATTRIBUTE_PACKED_0 + = "\3\0\1\11\2\1\2\11\1\1\1\11\1\1\1\11" + + "\1\1\1\11\2\1\1\11\14\1\4\11\1\1\2\11" + + "\1\1\7\11\6\1\2\0\1\1\1\0\4\1\4\0" + + "\5\1\1\0\1\1\1\0\3\1\1\11\1\0\1\11" + + "\5\1\1\0\5\1\1\0\4\1\1\0\4\1\1\0" + + "\4\1\1\0\4\1\1\11\2\1"; - /** the number of characters up to the start of the matched text */ - private int yychar; + private static int[] zzUnpackAttribute() { + int[] result = new int[110]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; + private static int zzUnpackAttribute(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; + /** + * the input device + */ + private java.io.Reader zzReader; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + /** + * the current state of the DFA + */ + private int zzState; - /** denotes if the user-EOF-code has already been executed */ - private boolean zzEOFDone; - - /** - * The number of occupied positions in zzBuffer beyond zzEndRead. - * When a lead/high surrogate has been read from the input stream - * into the final zzBuffer position, this will have a value of 1; - * otherwise, it will have a value of 0. - */ - private int zzFinalHighSurrogate = 0; + /** + * the current lexical state + */ + private int zzLexicalState = YYINITIAL; - /* user code: */ + /** + * this buffer contains the current text to be matched and is the source of + * the yytext() string + */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + /** + * the textposition at the last accepting state + */ + private int zzMarkedPos; + + /** + * the current text position in the buffer + */ + private int zzCurrentPos; + + /** + * startRead marks the beginning of the yytext() string in the buffer + */ + private int zzStartRead; + + /** + * endRead marks the last character in the buffer, that has been read from + * input + */ + private int zzEndRead; + + /** + * number of newlines encountered up to the start of the matched text + */ + private int yyline; + + /** + * the number of characters up to the start of the matched text + */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** + * zzAtEOF == true <=> the scanner is at the EOF + */ + private boolean zzAtEOF; + + /** + * denotes if the user-EOF-code has already been executed + */ + private boolean zzEOFDone; + + /** + * The number of occupied positions in zzBuffer beyond zzEndRead. When a + * lead/high surrogate has been read from the input stream into the final + * zzBuffer position, this will have a value of 1; otherwise, it will have a + * value of 0. + */ + private int zzFinalHighSurrogate = 0; + + /* user code: */ StringBuilder string = new StringBuilder(); private int repeatNum = 1; @@ -635,9 +675,10 @@ public final class FlasmLexer { } ASMParsedSymbol last; - public ASMParsedSymbol lex() throws java.io.IOException, ActionParseException{ + + public ASMParsedSymbol lex() throws java.io.IOException, ActionParseException { ASMParsedSymbol ret = null; - if (!pushedBack.isEmpty()){ + if (!pushedBack.isEmpty()) { ret = last = pushedBack.pop(); } else { ret = last = yylex(); @@ -645,527 +686,592 @@ public final class FlasmLexer { return ret; } - - - /** - * Creates a new scanner - * - * @param in the java.io.Reader to read input from. - */ - public FlasmLexer(java.io.Reader in) { - this.zzReader = in; - } - - - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char [] zzUnpackCMap(String packed) { - char [] map = new char[0x110000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 3802) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do map[j++] = value; while (--count > 0); - } - return map; - } - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public FlasmLexer(java.io.Reader in) { + this.zzReader = in; } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { - /* if not: blow it up */ - char newBuffer[] = new char[zzBuffer.length*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - } - - /* fill the buffer with new input */ - int requested = zzBuffer.length - zzEndRead; - int totalRead = 0; - while (totalRead < requested) { - int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); - if (numRead == -1) { - break; - } - totalRead += numRead; - } - - if (totalRead > 0) { - zzEndRead += totalRead; - if (totalRead == requested) { /* possibly more input available */ - if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { - --zzEndRead; - zzFinalHighSurrogate = 1; + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char[] zzUnpackCMap(String packed) { + char[] map = new char[0x110000]; + int i = 0; + /* index in packed string */ + int j = 0; + /* index in unpacked array */ + while (i < 3802) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do { + map[j++] = value; + } while (--count > 0); } - } - return false; + return map; } - // totalRead = 0: End of stream - return true; - } + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + /* first: make room (if you can) */ + if (zzStartRead > 0) { + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead - zzStartRead); - if (zzReader != null) - zzReader.close(); - } - - - /** - * Resets the scanner to read from a new input stream. - * Does not close the old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). - * Lexical state is set to ZZ_INITIAL. - * - * Internal scan buffer is resized down to its initial length, if it has grown. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - zzFinalHighSurrogate = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Returns the character at position pos from the - * matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. - * A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead+pos]; - } - - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos-zzStartRead; - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. - * This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if ( number > yylength() ) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ - public ASMParsedSymbol yylex() throws java.io.IOException, ActionParseException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; - - int [] zzTransL = ZZ_TRANS; - int [] zzRowMapL = ZZ_ROWMAP; - int [] zzAttrL = ZZ_ATTRIBUTE; - - while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar+= zzMarkedPosL-zzStartRead; - - boolean zzR = false; - int zzCh; - int zzCharCount; - for (zzCurrentPosL = zzStartRead ; - zzCurrentPosL < zzMarkedPosL ; - zzCurrentPosL += zzCharCount ) { - zzCh = Character.codePointAt(zzBufferL, zzCurrentPosL, zzMarkedPosL); - zzCharCount = Character.charCount(zzCh); - switch (zzCh) { - case '\u000B': - case '\u000C': - case '\u0085': - case '\u2028': - case '\u2029': - yyline++; - yycolumn = 0; - zzR = false; - break; - case '\r': - yyline++; - yycolumn = 0; - zzR = true; - break; - case '\n': - if (zzR) - zzR = false; - else { - yyline++; - yycolumn = 0; - } - break; - default: - zzR = false; - yycolumn += zzCharCount; + /* translate stored positions */ + zzEndRead -= zzStartRead; + zzCurrentPos -= zzStartRead; + zzMarkedPos -= zzStartRead; + zzStartRead = 0; } - } - if (zzR) { - // peek one character ahead if it is \n (if we have counted one line too much) - boolean zzPeek; - if (zzMarkedPosL < zzEndReadL) - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; - else if (zzAtEOF) - zzPeek = false; - else { - boolean eof = zzRefill(); - zzEndReadL = zzEndRead; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - if (eof) - zzPeek = false; - else - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { + /* if not: blow it up */ + char newBuffer[] = new char[zzBuffer.length * 2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; } - if (zzPeek) yyline--; - } - zzAction = -1; - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; + /* fill the buffer with new input */ + int requested = zzBuffer.length - zzEndRead; + int totalRead = 0; + while (totalRead < requested) { + int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); + if (numRead == -1) { + break; + } + totalRead += numRead; + } - // set up zzAction for empty match case: - int zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - } + if (totalRead > 0) { + zzEndRead += totalRead; + if (totalRead == requested) { + /* possibly more input available */ + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + --zzEndRead; + zzFinalHighSurrogate = 1; + } + } + return false; + } + // totalRead = 0: End of stream + return true; + } + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; + /* indicate end of file */ + zzEndRead = zzStartRead; + /* invalidate buffer */ + + if (zzReader != null) { + zzReader.close(); + } + } + + /** + * Resets the scanner to read from a new input stream. Does not close the + * old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). Lexical + * state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has + * grown. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + zzFinalHighSurrogate = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) { + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + } + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); + } + + /** + * Returns the character at position pos from the matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. A value from 0 to + * yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead + pos]; + } + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos - zzStartRead; + } + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of yypushback(int) and + * a match-all fallback rule) this method will only be called with things + * that "Can't Possibly Happen". If this method is called, something is + * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done in error + * fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. This number must + * not be greater than yylength()! + */ + public void yypushback(int number) { + if (number > yylength()) { + zzScanError(ZZ_PUSHBACK_2BIG); + } + + zzMarkedPos -= number; + } + + /** + * Resumes scanning until the next regular expression is matched, the end of + * input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public ASMParsedSymbol yylex() throws java.io.IOException, ActionParseException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char[] zzBufferL = zzBuffer; + char[] zzCMapL = ZZ_CMAP; + + int[] zzTransL = ZZ_TRANS; + int[] zzRowMapL = ZZ_ROWMAP; + int[] zzAttrL = ZZ_ATTRIBUTE; - zzForAction: { while (true) { - - if (zzCurrentPosL < zzEndReadL) { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; - if (zzNext == -1) break zzForAction; - zzState = zzNext; + zzMarkedPosL = zzMarkedPos; - zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ( (zzAttributes & 8) == 8 ) break zzForAction; - } + yychar += zzMarkedPosL - zzStartRead; + boolean zzR = false; + int zzCh; + int zzCharCount; + for (zzCurrentPosL = zzStartRead; + zzCurrentPosL < zzMarkedPosL; + zzCurrentPosL += zzCharCount) { + zzCh = Character.codePointAt(zzBufferL, zzCurrentPosL, zzMarkedPosL); + zzCharCount = Character.charCount(zzCh); + switch (zzCh) { + case '\u000B': + case '\u000C': + case '\u0085': + case '\u2028': + case '\u2029': + yyline++; + yycolumn = 0; + zzR = false; + break; + case '\r': + yyline++; + yycolumn = 0; + zzR = true; + break; + case '\n': + if (zzR) { + zzR = false; + } else { + yyline++; + yycolumn = 0; + } + break; + default: + zzR = false; + yycolumn += zzCharCount; + } + } + + if (zzR) { + // peek one character ahead if it is \n (if we have counted one line too much) + boolean zzPeek; + if (zzMarkedPosL < zzEndReadL) { + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + } else if (zzAtEOF) { + zzPeek = false; + } else { + boolean eof = zzRefill(); + zzEndReadL = zzEndRead; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + if (eof) { + zzPeek = false; + } else { + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + } + } + if (zzPeek) { + yyline--; + } + } + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + } + + zzForAction: + { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } else { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } + } + int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; + if (zzNext == -1) { + break zzForAction; + } + zzState = zzNext; + + zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ((zzAttributes & 8) == 8) { + break zzForAction; + } + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: { + } + case 34: + break; + case 2: { + yybegin(PARAMETERS); + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_INSTRUCTION_NAME, yytext()); + } + case 35: + break; + case 3: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_BLOCK_END); + } + case 36: + break; + case 4: { + for (int r = 0; r < repeatNum; r++) { + string.append(yytext()); + } + repeatNum = 1; + } + case 37: + break; + case 5: { + repeatNum = 1; + throw new ActionParseException("Unterminated string at end of line", yyline + 1); + } + case 38: + break; + case 6: { + yybegin(PARAMETERS); + repeatNum = 1; + // length also includes the trailing quote + return new ASMParsedSymbol(stringStartPos, ASMParsedSymbol.TYPE_STRING, string.toString()); + } + case 39: + break; + case 7: { + yybegin(YYINITIAL); + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_EOL); + } + case 40: + break; + case 8: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_COMMENT, yytext().substring(1)); + } + case 41: + break; + case 9: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_IDENTIFIER, yytext()); + } + case 42: + break; + case 10: { + yybegin(YYINITIAL); + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_BLOCK_START); + } + case 43: + break; + case 11: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_INTEGER, Long.parseLong((yytext()))); + } + case 44: + break; + case 12: { + stringStartPos = yychar(); + yybegin(STRING); + string.setLength(0); + } + case 45: + break; + case 13: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_COMMA); + } + case 46: + break; + case 14: { + String s = yytext(); + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_LABEL, s.substring(0, s.length() - 1)); + } + case 47: + break; + case 15: { + repeatNum = 1; + throw new ActionParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 48: + break; + case 16: { + for (int r = 0; r < repeatNum; r++) { + string.append('\t'); + } + repeatNum = 1; + } + case 49: + break; + case 17: { + for (int r = 0; r < repeatNum; r++) { + string.append('\r'); + } + repeatNum = 1; + } + case 50: + break; + case 18: { + for (int r = 0; r < repeatNum; r++) { + string.append('\f'); + } + repeatNum = 1; + } + case 51: + break; + case 19: { + for (int r = 0; r < repeatNum; r++) { + string.append('\n'); + } + repeatNum = 1; + } + case 52: + break; + case 20: { + for (int r = 0; r < repeatNum; r++) { + string.append('\\'); + } + repeatNum = 1; + } + case 53: + break; + case 21: { + for (int r = 0; r < repeatNum; r++) { + string.append('\"'); + } + repeatNum = 1; + } + case 54: + break; + case 22: { + for (int r = 0; r < repeatNum; r++) { + string.append('\b'); + } + repeatNum = 1; + } + case 55: + break; + case 23: { + for (int r = 0; r < repeatNum; r++) { + string.append('\u00A7'); + } + repeatNum = 1; + } + case 56: + break; + case 24: { + for (int r = 0; r < repeatNum; r++) { + string.append('\''); + } + repeatNum = 1; + } + case 57: + break; + case 25: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_FLOAT, Double.parseDouble((yytext()))); + } + case 58: + break; + case 26: { + repeatNum = Integer.parseInt(yytext().substring(2, yytext().length() - 1)); + } + case 59: + break; + case 27: { + char val = (char) Integer.parseInt(yytext().substring(2), 16); + for (int r = 0; r < repeatNum; r++) { + string.append(val); + } + repeatNum = 1; + } + case 60: + break; + case 28: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_BOOLEAN, Boolean.TRUE); + } + case 61: + break; + case 29: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_NULL, Null.INSTANCE); + } + case 62: + break; + case 30: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_BOOLEAN, Boolean.FALSE); + } + case 63: + break; + case 31: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_REGISTER, new RegisterNumber(Integer.parseInt(yytext().substring(8)))); + } + case 64: + break; + case 32: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_UNDEFINED, Undefined.INSTANCE); + } + case 65: + break; + case 33: { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_CONSTANT, new ConstantIndex(Integer.parseInt(yytext().substring(8)))); + } + case 66: + break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_EOF); + } + } else { + zzScanError(ZZ_NO_MATCH); + } + } } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: - { - } - case 34: break; - case 2: - { yybegin(PARAMETERS); - return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_INSTRUCTION_NAME, yytext()); - } - case 35: break; - case 3: - { return new ASMParsedSymbol(yychar(), ASMParsedSymbol.TYPE_BLOCK_END); - } - case 36: break; - case 4: - { for(int r=0;r BUILTIN_CASTS = Arrays.asList(new String[]{ "flash.display.BitmapData", "flash.external.ExternalInterface", diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionSourceGenerator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionSourceGenerator.java index d36410b09..c594155c5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionSourceGenerator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/parser/script/ActionSourceGenerator.java @@ -89,10 +89,8 @@ public class ActionSourceGenerator implements SourceGenerator { private String charset; - private long uniqLast = 0; - public ActionSourceGenerator(int swfVersion, List constantPool, String charset) { this.constantPool = constantPool; this.swfVersion = swfVersion; @@ -103,13 +101,11 @@ public class ActionSourceGenerator implements SourceGenerator { uniqLast++; return "" + uniqLast; } - - + public String getCharset() { return charset; } - - + private List generateToActionList(SourceGeneratorLocalData localData, List commands) throws CompilationException { return toActionList(generate(localData, commands)); } @@ -117,7 +113,7 @@ public class ActionSourceGenerator implements SourceGenerator { private List generateToActionList(SourceGeneratorLocalData localData, GraphTargetItem command) throws CompilationException { return toActionList(command.toSource(localData, this)); } - + public List toActionList(List items) { List ret = new ArrayList<>(); for (GraphSourceItem s : items) { @@ -185,8 +181,7 @@ public class ActionSourceGenerator implements SourceGenerator { } return ret; } - - + private void fixLoop(List code, int breakOffset) { fixLoop(code, breakOffset, Integer.MAX_VALUE); } @@ -208,8 +203,7 @@ public class ActionSourceGenerator implements SourceGenerator { } } } - - + public HashMap getRegisterVars(SourceGeneratorLocalData localData) { return localData.registerVars; } @@ -363,7 +357,7 @@ public class ActionSourceGenerator implements SourceGenerator { public int getSwfVersion() { return swfVersion; - } + } public List getConstantPool() { return constantPool; @@ -386,8 +380,7 @@ public class ActionSourceGenerator implements SourceGenerator { } return new ActionPush(new ConstantIndex(index), charset); } - - + @Override public List generateDiscardValue(SourceGeneratorLocalData localData, GraphTargetItem item) throws CompilationException { List ret = item.toSource(localData, this); @@ -605,7 +598,7 @@ public class ActionSourceGenerator implements SourceGenerator { ret.add(new ActionPop()); return ret; } - + @Override public List generate(SourceGeneratorLocalData localData, FalseItem item) throws CompilationException { return GraphTargetItem.toSourceMerge(localData, this, new ActionPush(Boolean.FALSE, charset)); @@ -889,7 +882,6 @@ public class ActionSourceGenerator implements SourceGenerator { return ret; } - @Override public List generate(SourceGeneratorLocalData localData, List commands) throws CompilationException { List ret = new ArrayList<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java index bcea5b174..c659e0d6e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf3/ActionWaitForFrame.java @@ -100,8 +100,8 @@ public class ActionWaitForFrame extends Action implements ActionStore { public ActionWaitForFrame(FlasmLexer lexer, String charset) throws IOException, ActionParseException { super(0x8A, -1, charset); frame = (int) lexLong(lexer); - lexOptionalComma(lexer); - skipCount = (int) lexLong(lexer); + lexOptionalComma(lexer); + skipCount = (int) lexLong(lexer); skipped = new ArrayList<>(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java index b451cdee4..62d85e932 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGetURL2.java @@ -110,24 +110,24 @@ public class ActionGetURL2 extends Action { public ActionGetURL2(FlasmLexer lexer, String charset) throws IOException, ActionParseException { super(0x9A, -1, charset); - + ASMParsedSymbol symb = lexer.lex(); boolean sendVarsMethodLast = false; if (symb.type == ASMParsedSymbol.TYPE_BOOLEAN) { //backwards compatibility. In 19.1.0 up to 20.0.0 sendVarsMethod is first - sendVarsMethodLast = true; + sendVarsMethodLast = true; } lexer.pushback(symb); if (!sendVarsMethodLast) { sendVarsMethod = (int) lexLong(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); } loadVariablesFlag = lexBoolean(lexer); - lexOptionalComma(lexer); - loadTargetFlag = lexBoolean(lexer); + lexOptionalComma(lexer); + loadTargetFlag = lexBoolean(lexer); if (sendVarsMethodLast) { - lexOptionalComma(lexer); + lexOptionalComma(lexer); sendVarsMethod = (int) lexLong(lexer); - } + } } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java index c12480c8d..d16d32729 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionGotoFrame2.java @@ -104,10 +104,10 @@ public class ActionGotoFrame2 extends Action { public ActionGotoFrame2(FlasmLexer lexer, String charset) throws IOException, ActionParseException { super(0x9F, -1, charset); sceneBiasFlag = lexBoolean(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); playFlag = lexBoolean(lexer); if (sceneBiasFlag) { - lexOptionalComma(lexer); + lexOptionalComma(lexer); sceneBias = (int) lexLong(lexer); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java index 172e4c651..a7188177e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java @@ -265,7 +265,7 @@ public class ActionPush extends Action { super(0x96, 0, charset); this.constantPool = constantPool; values = new ArrayList<>(); - int count = 0; + int count = 0; loop: while (true) { boolean valueExpected = false; @@ -346,14 +346,14 @@ public class ActionPush extends Action { ret = value.toString(); } return ret; - } + } public GraphTextWriter paramsToString(GraphTextWriter writer) { for (int i = 0; i < values.size(); i++) { if (i > 0) { writer.appendNoHilight(", "); } - writer.append(toString(i), getAddress() + i + 1, getFileOffset()); + writer.append(toString(i), getAddress() + i + 1, getFileOffset()); } return writer; } @@ -374,10 +374,10 @@ public class ActionPush extends Action { } return ret; } - + @Override public String toString() { - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); toString(writer); writer.finishHilights(); return writer.toString(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java index 5a6475b7d..a9ce993b0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionConstantPool.java @@ -64,7 +64,7 @@ public class ActionConstantPool extends Action { super(0x88, 0, charset); boolean first = true; while (true) { - boolean valueRequired = false; + boolean valueRequired = false; ASMParsedSymbol symb = lexer.lex(); if (!first && symb.type == ASMParsedSymbol.TYPE_COMMA) { symb = lexer.lex(); @@ -78,7 +78,7 @@ public class ActionConstantPool extends Action { } lexer.pushback(symb); break; - } + } first = false; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java index a0d344d82..c62c67bac 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java @@ -100,7 +100,7 @@ public class ActionDefineFunction extends Action implements GraphSourceItemConta lexOptionalComma(lexer); int numParams = (int) lexLong(lexer); for (int i = 0; i < numParams; i++) { - lexOptionalComma(lexer); + lexOptionalComma(lexer); paramNames.add(lexString(lexer)); } lexBlockOpen(lexer); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java index dc5aedc5b..efeb9e82b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java @@ -145,32 +145,32 @@ public class ActionDefineFunction2 extends Action implements GraphSourceItemCont public ActionDefineFunction2(FlasmLexer lexer, String charset) throws IOException, ActionParseException { super(0x8E, -1, charset); functionName = lexString(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); int numParams = (int) lexLong(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); registerCount = (int) lexLong(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); preloadParentFlag = lexBoolean(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); preloadRootFlag = lexBoolean(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); suppressSuperFlag = lexBoolean(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); preloadSuperFlag = lexBoolean(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); suppressArgumentsFlag = lexBoolean(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); preloadArgumentsFlag = lexBoolean(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); suppressThisFlag = lexBoolean(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); preloadThisFlag = lexBoolean(lexer); - lexOptionalComma(lexer); + lexOptionalComma(lexer); preloadGlobalFlag = lexBoolean(lexer); for (int i = 0; i < numParams; i++) { - lexOptionalComma(lexer); + lexOptionalComma(lexer); paramRegisters.add((int) lexLong(lexer)); - lexOptionalComma(lexer); + lexOptionalComma(lexer); paramNames.add(lexString(lexer)); } lexBlockOpen(lexer); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3OutputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3OutputStream.java index 9539fa1c6..f44a2339b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3OutputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/amf/amf3/Amf3OutputStream.java @@ -193,8 +193,8 @@ public class Amf3OutputStream extends OutputStream { @Override public void write(byte[] b, int off, int len) throws IOException { os.write(b, off, len); - } - + } + private void writeArray(ArrayType val, Map serializers, List stringTable, List traitsTable, List objectTable) throws IOException, NoSerializerExistsException { int objectIndex = objectTable.indexOf(val); if (objectIndex == -1) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java index acd59b04b..dfda5e2b1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java @@ -66,7 +66,7 @@ public final class Configuration { public static final Level logLevel; public static boolean showStat; - + @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") public static ConfigurationItem openMultipleFiles = null; @@ -930,85 +930,85 @@ public final class Configuration { @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") public static ConfigurationItem displayAs12PCodeDocsPanel = null; - + @ConfigurationDefaultDouble(0.85) @ConfigurationName("gui.action.splitPane.docs.dividerLocationPercent") @ConfigurationInternal public static ConfigurationItem guiActionDocsSplitPaneDividerLocationPercent = null; - + @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") public static ConfigurationItem rememberLastScreen = null; - + @ConfigurationDefaultInt(-1) @ConfigurationInternal public static ConfigurationItem lastMainWindowScreenIndex = null; - + @ConfigurationDefaultInt(-1) @ConfigurationInternal public static ConfigurationItem lastMainWindowScreenX = null; - + @ConfigurationDefaultInt(-1) @ConfigurationInternal public static ConfigurationItem lastMainWindowScreenY = null; - + @ConfigurationDefaultInt(-1) @ConfigurationInternal public static ConfigurationItem lastMainWindowScreenWidth = null; - + @ConfigurationDefaultInt(-1) @ConfigurationInternal public static ConfigurationItem lastMainWindowScreenHeight = null; - + @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") public static ConfigurationItem displayAs12PCodePanel = null; - + @ConfigurationDefaultBoolean(true) @ConfigurationCategory("ui") public static ConfigurationItem displayAs3PCodePanel = null; - + @ConfigurationDefaultBoolean(false) @ConfigurationCategory("export") public static ConfigurationItem flaExportUseMappedFontLayout = null; - + @ConfigurationDefaultInt(3) @ConfigurationName("formatting.tab.size") @ConfigurationCategory("format") public static ConfigurationItem tabSize = null; - + @ConfigurationDefaultInt(1000) @ConfigurationCategory("limit") public static ConfigurationItem boxBlurPixelsLimit = null; - + @ConfigurationDefaultBoolean(false) @ConfigurationCategory("export") public static ConfigurationItem as3ExportNamesUseClassNamesOnly = null; - + @ConfigurationDefaultString("") @ConfigurationDirectory public static ConfigurationItem jnaTempDirectory = null; - + @ConfigurationDefaultBoolean(true) @ConfigurationCategory("export") public static ConfigurationItem flaExportFixShapes = null; - + @ConfigurationDefaultBoolean(false) @ConfigurationCategory("export") public static ConfigurationItem lastExportResampleWav = null; - + @ConfigurationDefaultBoolean(true) @ConfigurationCategory("display") public static ConfigurationItem previewResampleSound = null; - + @ConfigurationDefaultBoolean(false) @ConfigurationCategory("export") public static ConfigurationItem lastExportTransparentBackground = null; - + @ConfigurationDefaultBoolean(true) @ConfigurationCategory("script") public static ConfigurationItem warningAbcClean = null; - + private enum OSId { WINDOWS, OSX, UNIX } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/ConfigurationItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/ConfigurationItem.java index 12a54b4d6..8b293eb59 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/ConfigurationItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/ConfigurationItem.java @@ -57,7 +57,7 @@ public class ConfigurationItem { hasValue = true; this.defaultValue = defaultValue; this.value = value; - } + } public T get() { if (!hasValue) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/CustomConfigurationKeys.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/CustomConfigurationKeys.java index fdeb64763..56e7d1674 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/CustomConfigurationKeys.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/CustomConfigurationKeys.java @@ -20,8 +20,8 @@ package com.jpexs.decompiler.flash.configuration; * * @author JPEXS */ -public class CustomConfigurationKeys { - +public class CustomConfigurationKeys { + public static final String KEY_LAST_SELECTED_PATH_RESOURCES = "lastSelectedPath.resources"; public static final String KEY_LAST_SELECTED_PATH_TAGLIST = "lastSelectedPath.taglist"; public static final String KEY_CHARSET = "charset"; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/SwfSpecificCustomConfiguration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/SwfSpecificCustomConfiguration.java index a79e861cd..4b098228a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/SwfSpecificCustomConfiguration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/SwfSpecificCustomConfiguration.java @@ -32,9 +32,8 @@ public class SwfSpecificCustomConfiguration implements Serializable { private static final long serialVersionUID = 0x2acb421da57f5eb4L; private Map customData = new HashMap<>(); - - public static final String LIST_SEPARATOR = "{*sep*}"; + public static final String LIST_SEPARATOR = "{*sep*}"; public List getCustomDataAsList(String key) { String data = getCustomData(key, ""); @@ -47,7 +46,7 @@ public class SwfSpecificCustomConfiguration implements Serializable { } return result; } - + public String getCustomData(String key, String defaultValue) { if (customData.containsKey(key)) { return customData.get(key); @@ -59,7 +58,7 @@ public class SwfSpecificCustomConfiguration implements Serializable { public void setCustomData(String key, String value) { customData.put(key, value); } - + public void setCustomData(String key, Iterable value) { customData.put(key, String.join(LIST_SEPARATOR, value)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/AbstractDocs.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/AbstractDocs.java index 2356a26fb..80efb6c19 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/AbstractDocs.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/AbstractDocs.java @@ -65,7 +65,7 @@ public class AbstractDocs { protected static String meta(String name, String content) { return "\t\t" + As3PCodeOtherDocs.NEWLINE; } - + protected static String meta(String name, Date content) { return "\t\t" + As3PCodeOtherDocs.NEWLINE; } @@ -75,7 +75,7 @@ public class AbstractDocs { dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); return dateFormat.format(date); } - + protected static String hilightArgument(String docs, int argumentIndex) { if (argumentIndex < 0) { return docs; @@ -100,7 +100,7 @@ public class AbstractDocs { symb = lexer.lex(); if (symb.type == ParsedSymbol.TYPE_BRACKET_OPEN) { while (symb.type != ParsedSymbol.TYPE_BRACKET_CLOSE && symb.type != ParsedSymbol.TYPE_EOF) { - symb = lexer.lex(); + symb = lexer.lex(); } endPos = lexer.yychar() + 1; break; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/As12PCodeDocs.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/As12PCodeDocs.java index a25d28f91..69e8633f9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/As12PCodeDocs.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/As12PCodeDocs.java @@ -164,7 +164,7 @@ public class As12PCodeDocs extends AbstractDocs { } } return identName.toString(); - } + } public static String getDocsForIns(String insName, boolean ui, boolean standalone, boolean nightMode, int argumentToHilight) { insName = insName.toLowerCase(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/As3PCodeDocs.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/As3PCodeDocs.java index 434daae4d..0abbe4f82 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/As3PCodeDocs.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/As3PCodeDocs.java @@ -122,7 +122,7 @@ public class As3PCodeDocs extends AbstractDocs { String stack = def.hasFlag(AVM2InstructionFlag.UNKNOWN_STACK) ? getProperty("ui.unknown") : stackBefore + "" + getProperty("ui.stack.to") + "" + stackAfter; String operandsDoc = def.hasFlag(AVM2InstructionFlag.UNKNOWN_OPERANDS) ? getProperty("ui.unknown") : getProperty("instruction." + insName + ".operands"); - + if (standalone) { sb.append(""); + sb.append(""); sb.append(getProperty("instruction.lookupswitch.operands.ui")); sb.append(""); } else { @@ -155,7 +155,7 @@ public class As3PCodeDocs extends AbstractDocs { if (def.operands.length > 0) { sb.append(" "); } - sb.append(""); + sb.append(""); for (int i = 0; i < def.operands.length; i++) { int op = def.operands[i]; String opDoc = operandsDocs[i]; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/DocsOperandLexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/DocsOperandLexer.java index d46108940..fc3a3d3ac 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/DocsOperandLexer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/DocsOperandLexer.java @@ -1,6 +1,6 @@ /* The following code was generated by JFlex 1.6.0 */ -/* + /* * Copyright (C) 2010-2016 JPEXS, All rights reserved. * * This library is free software; you can redistribute it and/or @@ -17,418 +17,459 @@ * License along with this library. */ package com.jpexs.decompiler.flash.docs; + import java.util.Stack; - /** - * This class is a scanner generated by - * JFlex 1.6.0 - * from the specification file C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/docs_operands.flex + * This class is a scanner generated by + * JFlex 1.6.0 from the specification file + * C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/docs_operands.flex */ public final class DocsOperandLexer { - /** This character denotes the end of file */ - public static final int YYEOF = -1; + /** + * This character denotes the end of file + */ + public static final int YYEOF = -1; - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; + /** + * initial size of the lookahead buffer + */ + private static final int ZZ_BUFFERSIZE = 16384; - /** lexical states */ - public static final int YYINITIAL = 0; + /** + * lexical states + */ + public static final int YYINITIAL = 0; - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l - * at the beginning of a line - * l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0 - }; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the + * beginning of a line l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0 + }; - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\5\1\3\1\2\1\0\1\3\1\1\16\5\4\0\1\3\3\0"+ - "\1\4\5\0\1\14\1\0\1\10\1\0\1\6\1\0\12\5\1\7"+ - "\6\0\32\4\1\11\1\0\1\12\1\0\1\4\1\0\32\4\1\0"+ - "\1\13\2\0\41\5\2\0\4\4\4\0\1\4\2\0\1\5\7\0"+ - "\1\4\4\0\1\4\5\0\27\4\1\0\37\4\1\0\u01ca\4\4\0"+ - "\14\4\16\0\5\4\7\0\1\4\1\0\1\4\21\0\160\5\5\4"+ - "\1\0\2\4\2\0\4\4\1\0\1\4\6\0\1\4\1\0\3\4"+ - "\1\0\1\4\1\0\24\4\1\0\123\4\1\0\213\4\1\0\5\5"+ - "\2\0\246\4\1\0\46\4\2\0\1\4\6\0\51\4\6\0\1\4"+ - "\1\0\55\5\1\0\1\5\1\0\2\5\1\0\2\5\1\0\1\5"+ - "\10\0\33\4\4\0\4\4\15\0\6\5\5\0\1\4\4\0\13\5"+ - "\1\0\1\5\3\0\53\4\37\5\4\0\2\4\1\5\143\4\1\0"+ - "\1\4\10\5\1\0\6\5\2\4\2\5\1\0\4\5\2\4\12\5"+ - "\3\4\2\0\1\4\17\0\1\5\1\4\1\5\36\4\33\5\2\0"+ - "\131\4\13\5\1\4\16\0\12\5\41\4\11\5\2\4\4\0\1\4"+ - "\2\0\1\5\30\4\4\5\1\4\11\5\1\4\3\5\1\4\5\5"+ - "\22\0\31\4\3\5\4\0\13\4\5\0\30\4\1\0\6\4\1\0"+ - "\2\5\6\0\10\5\52\4\72\5\66\4\3\5\1\4\22\5\1\4"+ - "\7\5\12\4\2\5\2\0\12\5\1\0\20\4\3\5\1\0\10\4"+ - "\2\0\2\4\2\0\26\4\1\0\7\4\1\0\1\4\3\0\4\4"+ - "\2\0\1\5\1\4\7\5\2\0\2\5\2\0\3\5\1\4\10\0"+ - "\1\5\4\0\2\4\1\0\3\4\2\5\2\0\12\5\4\4\7\0"+ - "\2\4\1\0\1\5\2\0\3\5\1\0\6\4\4\0\2\4\2\0"+ - "\26\4\1\0\7\4\1\0\2\4\1\0\2\4\1\0\2\4\2\0"+ - "\1\5\1\0\5\5\4\0\2\5\2\0\3\5\3\0\1\5\7\0"+ - "\4\4\1\0\1\4\7\0\14\5\3\4\1\5\13\0\3\5\1\0"+ - "\11\4\1\0\3\4\1\0\26\4\1\0\7\4\1\0\2\4\1\0"+ - "\5\4\2\0\1\5\1\4\10\5\1\0\3\5\1\0\3\5\2\0"+ - "\1\4\17\0\2\4\2\5\2\0\12\5\1\0\1\4\7\0\1\4"+ - "\6\5\1\0\3\5\1\0\10\4\2\0\2\4\2\0\26\4\1\0"+ - "\7\4\1\0\2\4\1\0\5\4\2\0\1\5\1\4\7\5\2\0"+ - "\2\5\2\0\3\5\7\0\3\5\4\0\2\4\1\0\3\4\2\5"+ - "\2\0\12\5\1\0\1\4\20\0\1\5\1\4\1\0\6\4\3\0"+ - "\3\4\1\0\4\4\3\0\2\4\1\0\1\4\1\0\2\4\3\0"+ - "\2\4\3\0\3\4\3\0\14\4\4\0\5\5\3\0\3\5\1\0"+ - "\4\5\2\0\1\4\6\0\1\5\16\0\12\5\11\0\1\4\6\0"+ - "\5\5\10\4\1\0\3\4\1\0\27\4\1\0\20\4\2\0\1\5"+ - "\1\4\7\5\1\0\3\5\1\0\4\5\7\0\2\5\1\0\3\4"+ - "\2\0\1\4\2\0\2\4\2\5\2\0\12\5\20\0\1\4\3\5"+ - "\1\0\10\4\1\0\3\4\1\0\27\4\1\0\12\4\1\0\5\4"+ - "\2\0\1\5\1\4\7\5\1\0\3\5\1\0\4\5\7\0\2\5"+ - "\6\0\2\4\1\0\2\4\2\5\2\0\12\5\1\0\2\4\15\0"+ - "\4\5\11\4\1\0\3\4\1\0\51\4\2\5\1\4\7\5\1\0"+ - "\3\5\1\0\4\5\1\4\5\0\3\4\1\5\7\0\3\4\2\5"+ - "\2\0\12\5\12\0\6\4\1\0\3\5\1\0\22\4\3\0\30\4"+ - "\1\0\11\4\1\0\1\4\2\0\7\4\3\0\1\5\4\0\6\5"+ - "\1\0\1\5\1\0\10\5\6\0\12\5\2\0\2\5\15\0\60\4"+ - "\1\5\2\4\7\5\4\0\10\4\10\5\1\0\12\5\47\0\2\4"+ - "\1\0\1\4\1\0\5\4\1\0\30\4\1\0\1\4\1\0\12\4"+ - "\1\5\2\4\11\5\1\4\2\0\5\4\1\0\1\4\1\0\6\5"+ - "\2\0\12\5\2\0\4\4\40\0\1\4\27\0\2\5\6\0\12\5"+ - "\13\0\1\5\1\0\1\5\1\0\1\5\4\0\2\5\10\4\1\0"+ - "\44\4\4\0\24\5\1\0\2\5\5\4\13\5\1\0\44\5\11\0"+ - "\1\5\71\0\53\4\24\5\1\4\12\5\6\0\6\4\4\5\4\4"+ - "\3\5\1\4\3\5\2\4\7\5\3\4\4\5\15\4\14\5\1\4"+ - "\17\5\2\0\46\4\1\0\1\4\5\0\1\4\2\0\53\4\1\0"+ - "\u014d\4\1\0\4\4\2\0\7\4\1\0\1\4\1\0\4\4\2\0"+ - "\51\4\1\0\4\4\2\0\41\4\1\0\4\4\2\0\7\4\1\0"+ - "\1\4\1\0\4\4\2\0\17\4\1\0\71\4\1\0\4\4\2\0"+ - "\103\4\2\0\3\5\40\0\20\4\20\0\126\4\2\0\6\4\3\0"+ - "\u026c\4\2\0\21\4\1\0\32\4\5\0\113\4\3\0\13\4\7\0"+ - "\22\4\4\5\11\0\23\4\3\5\13\0\22\4\2\5\14\0\15\4"+ - "\1\0\3\4\1\0\2\5\14\0\64\4\40\5\3\0\1\4\3\0"+ - "\2\4\1\5\2\0\12\5\41\0\17\5\6\0\131\4\7\0\5\4"+ - "\2\5\42\4\1\5\1\4\5\0\106\4\12\0\37\4\1\0\14\5"+ - "\4\0\14\5\12\0\12\5\36\4\2\0\5\4\13\0\54\4\4\0"+ - "\32\4\6\0\12\5\46\0\27\4\5\5\4\0\65\4\12\5\1\0"+ - "\35\5\2\0\13\5\6\0\12\5\15\0\1\4\10\0\16\5\1\0"+ - "\20\5\61\0\5\5\57\4\21\5\10\4\3\0\12\5\21\0\11\5"+ - "\14\0\3\5\36\4\15\5\2\4\12\5\54\4\16\5\14\0\44\4"+ - "\24\5\10\0\12\5\3\0\3\4\12\5\44\4\2\0\11\4\7\0"+ - "\53\4\2\0\3\4\20\0\3\5\1\0\25\5\4\4\1\5\6\4"+ - "\1\5\2\4\3\5\1\4\5\0\300\4\100\5\u0116\4\2\0\6\4"+ - "\2\0\46\4\2\0\6\4\2\0\10\4\1\0\1\4\1\0\1\4"+ - "\1\0\1\4\1\0\37\4\2\0\65\4\1\0\7\4\1\0\1\4"+ - "\3\0\3\4\1\0\7\4\3\0\4\4\2\0\6\4\4\0\15\4"+ - "\5\0\3\4\1\0\7\4\16\0\5\5\32\0\5\5\20\0\2\4"+ - "\23\0\1\4\13\0\5\5\1\0\12\5\1\0\1\4\15\0\1\4"+ - "\20\0\15\4\3\0\41\4\17\0\15\5\4\0\1\5\3\0\14\5"+ - "\21\0\1\4\4\0\1\4\2\0\12\4\1\0\1\4\3\0\5\4"+ - "\6\0\1\4\1\0\1\4\1\0\1\4\1\0\4\4\1\0\13\4"+ - "\2\0\4\4\5\0\5\4\4\0\1\4\21\0\51\4\u0a77\0\345\4"+ - "\6\0\4\4\3\5\2\4\14\0\46\4\1\0\1\4\5\0\1\4"+ - "\2\0\70\4\7\0\1\4\17\0\1\5\27\4\11\0\7\4\1\0"+ - "\7\4\1\0\7\4\1\0\7\4\1\0\7\4\1\0\7\4\1\0"+ - "\7\4\1\0\7\4\1\0\40\5\57\0\1\4\u01d5\0\3\4\31\0"+ - "\11\4\6\5\1\0\5\4\2\0\5\4\4\0\126\4\2\0\2\5"+ - "\2\0\3\4\1\0\132\4\1\0\4\4\5\0\53\4\1\0\136\4"+ - "\21\0\40\4\60\0\20\4\u0200\0\u19c0\4\100\0\u568d\4\103\0\56\4"+ - "\2\0\u010d\4\3\0\20\4\12\5\2\4\24\0\57\4\1\5\4\0"+ - "\12\5\1\0\37\4\2\5\120\4\2\5\45\0\11\4\2\0\147\4"+ - "\2\0\100\4\5\0\2\4\1\0\1\4\1\0\5\4\30\0\20\4"+ - "\1\5\3\4\1\5\4\4\1\5\27\4\5\5\4\0\1\5\13\0"+ - "\1\4\7\0\64\4\14\0\2\5\62\4\22\5\12\0\12\5\6\0"+ - "\22\5\6\4\3\0\1\4\1\0\2\4\13\5\34\4\10\5\2\0"+ - "\27\4\15\5\14\0\35\4\3\0\4\5\57\4\16\5\16\0\1\4"+ - "\12\5\6\0\5\4\1\5\12\4\12\5\5\4\1\0\51\4\16\5"+ - "\11\0\3\4\1\5\10\4\2\5\2\0\12\5\6\0\27\4\3\0"+ - "\1\4\3\5\62\4\1\5\1\4\3\5\2\4\2\5\5\4\2\5"+ - "\1\4\1\5\1\4\30\0\3\4\2\0\13\4\5\5\2\0\3\4"+ - "\2\5\12\0\6\4\2\0\6\4\2\0\6\4\11\0\7\4\1\0"+ - "\7\4\1\0\53\4\1\0\16\4\6\0\163\4\10\5\1\0\2\5"+ - "\2\0\12\5\6\0\u2ba4\4\14\0\27\4\4\0\61\4\u2104\0\u016e\4"+ - "\2\0\152\4\46\0\7\4\14\0\5\4\5\0\1\4\1\5\12\4"+ - "\1\0\15\4\1\0\5\4\1\0\1\4\1\0\2\4\1\0\2\4"+ - "\1\0\154\4\41\0\u016b\4\22\0\100\4\2\0\66\4\50\0\15\4"+ - "\3\0\20\5\20\0\20\5\3\0\2\4\30\0\3\4\31\0\1\4"+ - "\6\0\5\4\1\0\207\4\2\0\1\5\4\0\1\4\13\0\12\5"+ - "\7\0\32\4\4\0\1\4\1\0\32\4\13\0\131\4\3\0\6\4"+ - "\2\0\6\4\2\0\6\4\2\0\3\4\3\0\2\4\3\0\2\4"+ - "\22\0\3\5\4\0\14\4\1\0\32\4\1\0\23\4\1\0\2\4"+ - "\1\0\17\4\2\0\16\4\42\0\173\4\105\0\65\4\210\0\1\5"+ - "\202\0\35\4\3\0\61\4\17\0\1\5\37\0\40\4\15\0\36\4"+ - "\5\0\46\4\5\5\5\0\36\4\2\0\44\4\4\0\10\4\1\0"+ - "\5\4\52\0\236\4\2\0\12\5\6\0\44\4\4\0\44\4\4\0"+ - "\50\4\10\0\64\4\14\0\13\4\1\0\17\4\1\0\7\4\1\0"+ - "\2\4\1\0\13\4\1\0\17\4\1\0\7\4\1\0\2\4\103\0"+ - "\u0137\4\11\0\26\4\12\0\10\4\30\0\6\4\1\0\52\4\1\0"+ - "\11\4\105\0\6\4\2\0\1\4\1\0\54\4\1\0\2\4\3\0"+ - "\1\4\2\0\27\4\12\0\27\4\11\0\37\4\101\0\23\4\1\0"+ - "\2\4\12\0\26\4\12\0\32\4\106\0\70\4\6\0\2\4\100\0"+ - "\1\4\3\5\1\0\2\5\5\0\4\5\4\4\1\0\3\4\1\0"+ - "\35\4\2\0\3\5\4\0\1\5\40\0\35\4\3\0\35\4\43\0"+ - "\10\4\1\0\34\4\2\5\31\0\66\4\12\0\26\4\12\0\23\4"+ - "\15\0\22\4\156\0\111\4\67\0\63\4\15\0\63\4\15\0\44\4"+ - "\4\5\10\0\12\5\u0146\0\52\4\1\0\2\5\3\0\2\4\116\0"+ - "\35\4\12\0\1\4\10\0\26\4\13\5\37\0\22\4\4\5\52\0"+ - "\25\4\33\0\27\4\11\0\3\5\65\4\17\5\37\0\13\5\2\4"+ - "\2\5\1\4\11\0\4\5\55\4\13\5\2\0\1\5\4\0\1\5"+ - "\12\0\1\5\2\0\31\4\7\0\12\5\6\0\3\5\44\4\16\5"+ - "\1\0\12\5\4\0\1\4\2\5\1\4\10\0\43\4\1\5\2\0"+ - "\1\4\11\0\3\5\60\4\16\5\4\4\4\0\4\5\1\0\14\5"+ - "\1\4\1\0\1\4\43\0\22\4\1\0\31\4\14\5\6\0\1\5"+ - "\101\0\7\4\1\0\1\4\1\0\4\4\1\0\17\4\1\0\12\4"+ - "\7\0\57\4\14\5\5\0\12\5\6\0\4\5\1\0\10\4\2\0"+ - "\2\4\2\0\26\4\1\0\7\4\1\0\2\4\1\0\5\4\1\0"+ - "\2\5\1\4\7\5\2\0\2\5\2\0\3\5\2\0\1\4\6\0"+ - "\1\5\5\0\5\4\2\5\2\0\7\5\3\0\5\5\213\0\65\4"+ - "\22\5\4\4\5\0\12\5\4\0\1\5\3\4\36\0\60\4\24\5"+ - "\2\4\1\0\1\4\10\0\12\5\246\0\57\4\7\5\2\0\11\5"+ - "\27\0\4\4\2\5\42\0\60\4\21\5\3\0\1\4\13\0\12\5"+ - "\46\0\53\4\15\5\1\4\7\0\12\5\66\0\33\4\2\0\17\5"+ - "\4\0\12\5\6\0\7\4\271\0\54\4\17\5\145\0\100\4\12\5"+ - "\25\0\10\4\2\0\1\4\2\0\10\4\1\0\2\4\1\0\30\4"+ - "\6\5\1\0\2\5\2\0\4\5\1\4\1\5\1\4\2\5\14\0"+ - "\12\5\106\0\10\4\2\0\47\4\7\5\2\0\7\5\1\4\1\0"+ - "\1\4\1\5\33\0\1\4\12\5\50\4\7\5\1\4\4\5\10\0"+ - "\1\5\10\0\1\4\13\5\56\4\20\5\3\0\1\4\22\0\111\4"+ - "\u0107\0\11\4\1\0\45\4\10\5\1\0\10\5\1\4\17\0\12\5"+ - "\30\0\36\4\2\0\26\5\1\0\16\5\111\0\7\4\1\0\2\4"+ - "\1\0\46\4\6\5\3\0\1\5\1\0\2\5\1\0\7\5\1\4"+ - "\1\5\10\0\12\5\6\0\6\4\1\0\2\4\1\0\40\4\5\5"+ - "\1\0\2\5\1\0\5\5\1\4\7\0\12\5\u0136\0\23\4\4\5"+ - "\271\0\1\4\54\0\4\4\37\0\u039a\4\146\0\157\4\21\0\304\4"+ - "\u0a4c\0\141\4\17\0\u042f\4\1\0\11\5\u0fc7\0\u0247\4\u21b9\0\u0239\4"+ - "\7\0\37\4\1\0\12\5\6\0\117\4\1\0\12\5\6\0\36\4"+ - "\2\0\5\5\13\0\60\4\7\5\11\0\4\4\14\0\12\5\11\0"+ - "\25\4\5\0\23\4\u02b0\0\100\4\200\0\113\4\4\0\1\5\1\4"+ - "\67\5\7\0\4\5\15\4\100\0\2\4\1\0\1\4\1\5\13\0"+ - "\2\5\16\0\u17f8\4\10\0\u04d6\4\52\0\11\4\u22e7\0\4\4\1\0"+ - "\7\4\1\0\2\4\1\0\u0123\4\55\0\3\4\21\0\4\4\10\0"+ - "\u018c\4\u0904\0\153\4\5\0\15\4\3\0\11\4\7\0\12\4\3\0"+ - "\2\5\1\0\4\5\u125c\0\56\5\2\0\27\5\u021e\0\5\5\3\0"+ - "\26\5\2\0\7\5\36\0\4\5\224\0\3\5\u01bb\0\125\4\1\0"+ - "\107\4\1\0\2\4\2\0\1\4\2\0\2\4\2\0\4\4\1\0"+ - "\14\4\1\0\1\4\1\0\7\4\1\0\101\4\1\0\4\4\2\0"+ - "\10\4\1\0\7\4\1\0\34\4\1\0\4\4\1\0\5\4\1\0"+ - "\1\4\3\0\7\4\1\0\u0154\4\2\0\31\4\1\0\31\4\1\0"+ - "\37\4\1\0\31\4\1\0\37\4\1\0\31\4\1\0\37\4\1\0"+ - "\31\4\1\0\37\4\1\0\31\4\1\0\10\4\2\0\62\5\u0200\0"+ - "\67\5\4\0\62\5\10\0\1\5\16\0\1\5\26\0\5\5\1\0"+ - "\17\5\u0450\0\37\4\341\0\7\5\1\0\21\5\2\0\7\5\1\0"+ - "\2\5\1\0\5\5\325\0\55\4\3\0\7\5\7\4\2\0\12\5"+ - "\4\0\1\4\u0141\0\36\4\1\5\21\0\54\4\16\5\5\0\1\4"+ - "\u04e0\0\7\4\1\0\4\4\1\0\2\4\1\0\17\4\1\0\305\4"+ - "\13\0\7\5\51\0\104\4\7\5\1\4\4\0\12\5\u0356\0\1\4"+ - "\u014f\0\4\4\1\0\33\4\1\0\2\4\1\0\1\4\2\0\1\4"+ - "\1\0\12\4\1\0\4\4\1\0\1\4\1\0\1\4\6\0\1\4"+ - "\4\0\1\4\1\0\1\4\1\0\1\4\1\0\3\4\1\0\2\4"+ - "\1\0\1\4\2\0\1\4\1\0\1\4\1\0\1\4\1\0\1\4"+ - "\1\0\1\4\1\0\2\4\1\0\1\4\2\0\4\4\1\0\7\4"+ - "\1\0\4\4\1\0\4\4\1\0\1\4\1\0\12\4\1\0\21\4"+ - "\5\0\3\4\1\0\5\4\1\0\21\4\u0d34\0\12\5\u0406\0\ua6e0\4"+ - "\40\0\u1039\4\7\0\336\4\2\0\u1682\4\16\0\u1d31\4\u0c1f\0\u021e\4"+ - "\u05e2\0\u134b\4\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uecc0\0"+ - "\1\5\36\0\140\5\200\0\360\5\uffff\0\uffff\0\ufe12\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED + = "\11\5\1\3\1\2\1\0\1\3\1\1\16\5\4\0\1\3\3\0" + + "\1\4\5\0\1\14\1\0\1\10\1\0\1\6\1\0\12\5\1\7" + + "\6\0\32\4\1\11\1\0\1\12\1\0\1\4\1\0\32\4\1\0" + + "\1\13\2\0\41\5\2\0\4\4\4\0\1\4\2\0\1\5\7\0" + + "\1\4\4\0\1\4\5\0\27\4\1\0\37\4\1\0\u01ca\4\4\0" + + "\14\4\16\0\5\4\7\0\1\4\1\0\1\4\21\0\160\5\5\4" + + "\1\0\2\4\2\0\4\4\1\0\1\4\6\0\1\4\1\0\3\4" + + "\1\0\1\4\1\0\24\4\1\0\123\4\1\0\213\4\1\0\5\5" + + "\2\0\246\4\1\0\46\4\2\0\1\4\6\0\51\4\6\0\1\4" + + "\1\0\55\5\1\0\1\5\1\0\2\5\1\0\2\5\1\0\1\5" + + "\10\0\33\4\4\0\4\4\15\0\6\5\5\0\1\4\4\0\13\5" + + "\1\0\1\5\3\0\53\4\37\5\4\0\2\4\1\5\143\4\1\0" + + "\1\4\10\5\1\0\6\5\2\4\2\5\1\0\4\5\2\4\12\5" + + "\3\4\2\0\1\4\17\0\1\5\1\4\1\5\36\4\33\5\2\0" + + "\131\4\13\5\1\4\16\0\12\5\41\4\11\5\2\4\4\0\1\4" + + "\2\0\1\5\30\4\4\5\1\4\11\5\1\4\3\5\1\4\5\5" + + "\22\0\31\4\3\5\4\0\13\4\5\0\30\4\1\0\6\4\1\0" + + "\2\5\6\0\10\5\52\4\72\5\66\4\3\5\1\4\22\5\1\4" + + "\7\5\12\4\2\5\2\0\12\5\1\0\20\4\3\5\1\0\10\4" + + "\2\0\2\4\2\0\26\4\1\0\7\4\1\0\1\4\3\0\4\4" + + "\2\0\1\5\1\4\7\5\2\0\2\5\2\0\3\5\1\4\10\0" + + "\1\5\4\0\2\4\1\0\3\4\2\5\2\0\12\5\4\4\7\0" + + "\2\4\1\0\1\5\2\0\3\5\1\0\6\4\4\0\2\4\2\0" + + "\26\4\1\0\7\4\1\0\2\4\1\0\2\4\1\0\2\4\2\0" + + "\1\5\1\0\5\5\4\0\2\5\2\0\3\5\3\0\1\5\7\0" + + "\4\4\1\0\1\4\7\0\14\5\3\4\1\5\13\0\3\5\1\0" + + "\11\4\1\0\3\4\1\0\26\4\1\0\7\4\1\0\2\4\1\0" + + "\5\4\2\0\1\5\1\4\10\5\1\0\3\5\1\0\3\5\2\0" + + "\1\4\17\0\2\4\2\5\2\0\12\5\1\0\1\4\7\0\1\4" + + "\6\5\1\0\3\5\1\0\10\4\2\0\2\4\2\0\26\4\1\0" + + "\7\4\1\0\2\4\1\0\5\4\2\0\1\5\1\4\7\5\2\0" + + "\2\5\2\0\3\5\7\0\3\5\4\0\2\4\1\0\3\4\2\5" + + "\2\0\12\5\1\0\1\4\20\0\1\5\1\4\1\0\6\4\3\0" + + "\3\4\1\0\4\4\3\0\2\4\1\0\1\4\1\0\2\4\3\0" + + "\2\4\3\0\3\4\3\0\14\4\4\0\5\5\3\0\3\5\1\0" + + "\4\5\2\0\1\4\6\0\1\5\16\0\12\5\11\0\1\4\6\0" + + "\5\5\10\4\1\0\3\4\1\0\27\4\1\0\20\4\2\0\1\5" + + "\1\4\7\5\1\0\3\5\1\0\4\5\7\0\2\5\1\0\3\4" + + "\2\0\1\4\2\0\2\4\2\5\2\0\12\5\20\0\1\4\3\5" + + "\1\0\10\4\1\0\3\4\1\0\27\4\1\0\12\4\1\0\5\4" + + "\2\0\1\5\1\4\7\5\1\0\3\5\1\0\4\5\7\0\2\5" + + "\6\0\2\4\1\0\2\4\2\5\2\0\12\5\1\0\2\4\15\0" + + "\4\5\11\4\1\0\3\4\1\0\51\4\2\5\1\4\7\5\1\0" + + "\3\5\1\0\4\5\1\4\5\0\3\4\1\5\7\0\3\4\2\5" + + "\2\0\12\5\12\0\6\4\1\0\3\5\1\0\22\4\3\0\30\4" + + "\1\0\11\4\1\0\1\4\2\0\7\4\3\0\1\5\4\0\6\5" + + "\1\0\1\5\1\0\10\5\6\0\12\5\2\0\2\5\15\0\60\4" + + "\1\5\2\4\7\5\4\0\10\4\10\5\1\0\12\5\47\0\2\4" + + "\1\0\1\4\1\0\5\4\1\0\30\4\1\0\1\4\1\0\12\4" + + "\1\5\2\4\11\5\1\4\2\0\5\4\1\0\1\4\1\0\6\5" + + "\2\0\12\5\2\0\4\4\40\0\1\4\27\0\2\5\6\0\12\5" + + "\13\0\1\5\1\0\1\5\1\0\1\5\4\0\2\5\10\4\1\0" + + "\44\4\4\0\24\5\1\0\2\5\5\4\13\5\1\0\44\5\11\0" + + "\1\5\71\0\53\4\24\5\1\4\12\5\6\0\6\4\4\5\4\4" + + "\3\5\1\4\3\5\2\4\7\5\3\4\4\5\15\4\14\5\1\4" + + "\17\5\2\0\46\4\1\0\1\4\5\0\1\4\2\0\53\4\1\0" + + "\u014d\4\1\0\4\4\2\0\7\4\1\0\1\4\1\0\4\4\2\0" + + "\51\4\1\0\4\4\2\0\41\4\1\0\4\4\2\0\7\4\1\0" + + "\1\4\1\0\4\4\2\0\17\4\1\0\71\4\1\0\4\4\2\0" + + "\103\4\2\0\3\5\40\0\20\4\20\0\126\4\2\0\6\4\3\0" + + "\u026c\4\2\0\21\4\1\0\32\4\5\0\113\4\3\0\13\4\7\0" + + "\22\4\4\5\11\0\23\4\3\5\13\0\22\4\2\5\14\0\15\4" + + "\1\0\3\4\1\0\2\5\14\0\64\4\40\5\3\0\1\4\3\0" + + "\2\4\1\5\2\0\12\5\41\0\17\5\6\0\131\4\7\0\5\4" + + "\2\5\42\4\1\5\1\4\5\0\106\4\12\0\37\4\1\0\14\5" + + "\4\0\14\5\12\0\12\5\36\4\2\0\5\4\13\0\54\4\4\0" + + "\32\4\6\0\12\5\46\0\27\4\5\5\4\0\65\4\12\5\1\0" + + "\35\5\2\0\13\5\6\0\12\5\15\0\1\4\10\0\16\5\1\0" + + "\20\5\61\0\5\5\57\4\21\5\10\4\3\0\12\5\21\0\11\5" + + "\14\0\3\5\36\4\15\5\2\4\12\5\54\4\16\5\14\0\44\4" + + "\24\5\10\0\12\5\3\0\3\4\12\5\44\4\2\0\11\4\7\0" + + "\53\4\2\0\3\4\20\0\3\5\1\0\25\5\4\4\1\5\6\4" + + "\1\5\2\4\3\5\1\4\5\0\300\4\100\5\u0116\4\2\0\6\4" + + "\2\0\46\4\2\0\6\4\2\0\10\4\1\0\1\4\1\0\1\4" + + "\1\0\1\4\1\0\37\4\2\0\65\4\1\0\7\4\1\0\1\4" + + "\3\0\3\4\1\0\7\4\3\0\4\4\2\0\6\4\4\0\15\4" + + "\5\0\3\4\1\0\7\4\16\0\5\5\32\0\5\5\20\0\2\4" + + "\23\0\1\4\13\0\5\5\1\0\12\5\1\0\1\4\15\0\1\4" + + "\20\0\15\4\3\0\41\4\17\0\15\5\4\0\1\5\3\0\14\5" + + "\21\0\1\4\4\0\1\4\2\0\12\4\1\0\1\4\3\0\5\4" + + "\6\0\1\4\1\0\1\4\1\0\1\4\1\0\4\4\1\0\13\4" + + "\2\0\4\4\5\0\5\4\4\0\1\4\21\0\51\4\u0a77\0\345\4" + + "\6\0\4\4\3\5\2\4\14\0\46\4\1\0\1\4\5\0\1\4" + + "\2\0\70\4\7\0\1\4\17\0\1\5\27\4\11\0\7\4\1\0" + + "\7\4\1\0\7\4\1\0\7\4\1\0\7\4\1\0\7\4\1\0" + + "\7\4\1\0\7\4\1\0\40\5\57\0\1\4\u01d5\0\3\4\31\0" + + "\11\4\6\5\1\0\5\4\2\0\5\4\4\0\126\4\2\0\2\5" + + "\2\0\3\4\1\0\132\4\1\0\4\4\5\0\53\4\1\0\136\4" + + "\21\0\40\4\60\0\20\4\u0200\0\u19c0\4\100\0\u568d\4\103\0\56\4" + + "\2\0\u010d\4\3\0\20\4\12\5\2\4\24\0\57\4\1\5\4\0" + + "\12\5\1\0\37\4\2\5\120\4\2\5\45\0\11\4\2\0\147\4" + + "\2\0\100\4\5\0\2\4\1\0\1\4\1\0\5\4\30\0\20\4" + + "\1\5\3\4\1\5\4\4\1\5\27\4\5\5\4\0\1\5\13\0" + + "\1\4\7\0\64\4\14\0\2\5\62\4\22\5\12\0\12\5\6\0" + + "\22\5\6\4\3\0\1\4\1\0\2\4\13\5\34\4\10\5\2\0" + + "\27\4\15\5\14\0\35\4\3\0\4\5\57\4\16\5\16\0\1\4" + + "\12\5\6\0\5\4\1\5\12\4\12\5\5\4\1\0\51\4\16\5" + + "\11\0\3\4\1\5\10\4\2\5\2\0\12\5\6\0\27\4\3\0" + + "\1\4\3\5\62\4\1\5\1\4\3\5\2\4\2\5\5\4\2\5" + + "\1\4\1\5\1\4\30\0\3\4\2\0\13\4\5\5\2\0\3\4" + + "\2\5\12\0\6\4\2\0\6\4\2\0\6\4\11\0\7\4\1\0" + + "\7\4\1\0\53\4\1\0\16\4\6\0\163\4\10\5\1\0\2\5" + + "\2\0\12\5\6\0\u2ba4\4\14\0\27\4\4\0\61\4\u2104\0\u016e\4" + + "\2\0\152\4\46\0\7\4\14\0\5\4\5\0\1\4\1\5\12\4" + + "\1\0\15\4\1\0\5\4\1\0\1\4\1\0\2\4\1\0\2\4" + + "\1\0\154\4\41\0\u016b\4\22\0\100\4\2\0\66\4\50\0\15\4" + + "\3\0\20\5\20\0\20\5\3\0\2\4\30\0\3\4\31\0\1\4" + + "\6\0\5\4\1\0\207\4\2\0\1\5\4\0\1\4\13\0\12\5" + + "\7\0\32\4\4\0\1\4\1\0\32\4\13\0\131\4\3\0\6\4" + + "\2\0\6\4\2\0\6\4\2\0\3\4\3\0\2\4\3\0\2\4" + + "\22\0\3\5\4\0\14\4\1\0\32\4\1\0\23\4\1\0\2\4" + + "\1\0\17\4\2\0\16\4\42\0\173\4\105\0\65\4\210\0\1\5" + + "\202\0\35\4\3\0\61\4\17\0\1\5\37\0\40\4\15\0\36\4" + + "\5\0\46\4\5\5\5\0\36\4\2\0\44\4\4\0\10\4\1\0" + + "\5\4\52\0\236\4\2\0\12\5\6\0\44\4\4\0\44\4\4\0" + + "\50\4\10\0\64\4\14\0\13\4\1\0\17\4\1\0\7\4\1\0" + + "\2\4\1\0\13\4\1\0\17\4\1\0\7\4\1\0\2\4\103\0" + + "\u0137\4\11\0\26\4\12\0\10\4\30\0\6\4\1\0\52\4\1\0" + + "\11\4\105\0\6\4\2\0\1\4\1\0\54\4\1\0\2\4\3\0" + + "\1\4\2\0\27\4\12\0\27\4\11\0\37\4\101\0\23\4\1\0" + + "\2\4\12\0\26\4\12\0\32\4\106\0\70\4\6\0\2\4\100\0" + + "\1\4\3\5\1\0\2\5\5\0\4\5\4\4\1\0\3\4\1\0" + + "\35\4\2\0\3\5\4\0\1\5\40\0\35\4\3\0\35\4\43\0" + + "\10\4\1\0\34\4\2\5\31\0\66\4\12\0\26\4\12\0\23\4" + + "\15\0\22\4\156\0\111\4\67\0\63\4\15\0\63\4\15\0\44\4" + + "\4\5\10\0\12\5\u0146\0\52\4\1\0\2\5\3\0\2\4\116\0" + + "\35\4\12\0\1\4\10\0\26\4\13\5\37\0\22\4\4\5\52\0" + + "\25\4\33\0\27\4\11\0\3\5\65\4\17\5\37\0\13\5\2\4" + + "\2\5\1\4\11\0\4\5\55\4\13\5\2\0\1\5\4\0\1\5" + + "\12\0\1\5\2\0\31\4\7\0\12\5\6\0\3\5\44\4\16\5" + + "\1\0\12\5\4\0\1\4\2\5\1\4\10\0\43\4\1\5\2\0" + + "\1\4\11\0\3\5\60\4\16\5\4\4\4\0\4\5\1\0\14\5" + + "\1\4\1\0\1\4\43\0\22\4\1\0\31\4\14\5\6\0\1\5" + + "\101\0\7\4\1\0\1\4\1\0\4\4\1\0\17\4\1\0\12\4" + + "\7\0\57\4\14\5\5\0\12\5\6\0\4\5\1\0\10\4\2\0" + + "\2\4\2\0\26\4\1\0\7\4\1\0\2\4\1\0\5\4\1\0" + + "\2\5\1\4\7\5\2\0\2\5\2\0\3\5\2\0\1\4\6\0" + + "\1\5\5\0\5\4\2\5\2\0\7\5\3\0\5\5\213\0\65\4" + + "\22\5\4\4\5\0\12\5\4\0\1\5\3\4\36\0\60\4\24\5" + + "\2\4\1\0\1\4\10\0\12\5\246\0\57\4\7\5\2\0\11\5" + + "\27\0\4\4\2\5\42\0\60\4\21\5\3\0\1\4\13\0\12\5" + + "\46\0\53\4\15\5\1\4\7\0\12\5\66\0\33\4\2\0\17\5" + + "\4\0\12\5\6\0\7\4\271\0\54\4\17\5\145\0\100\4\12\5" + + "\25\0\10\4\2\0\1\4\2\0\10\4\1\0\2\4\1\0\30\4" + + "\6\5\1\0\2\5\2\0\4\5\1\4\1\5\1\4\2\5\14\0" + + "\12\5\106\0\10\4\2\0\47\4\7\5\2\0\7\5\1\4\1\0" + + "\1\4\1\5\33\0\1\4\12\5\50\4\7\5\1\4\4\5\10\0" + + "\1\5\10\0\1\4\13\5\56\4\20\5\3\0\1\4\22\0\111\4" + + "\u0107\0\11\4\1\0\45\4\10\5\1\0\10\5\1\4\17\0\12\5" + + "\30\0\36\4\2\0\26\5\1\0\16\5\111\0\7\4\1\0\2\4" + + "\1\0\46\4\6\5\3\0\1\5\1\0\2\5\1\0\7\5\1\4" + + "\1\5\10\0\12\5\6\0\6\4\1\0\2\4\1\0\40\4\5\5" + + "\1\0\2\5\1\0\5\5\1\4\7\0\12\5\u0136\0\23\4\4\5" + + "\271\0\1\4\54\0\4\4\37\0\u039a\4\146\0\157\4\21\0\304\4" + + "\u0a4c\0\141\4\17\0\u042f\4\1\0\11\5\u0fc7\0\u0247\4\u21b9\0\u0239\4" + + "\7\0\37\4\1\0\12\5\6\0\117\4\1\0\12\5\6\0\36\4" + + "\2\0\5\5\13\0\60\4\7\5\11\0\4\4\14\0\12\5\11\0" + + "\25\4\5\0\23\4\u02b0\0\100\4\200\0\113\4\4\0\1\5\1\4" + + "\67\5\7\0\4\5\15\4\100\0\2\4\1\0\1\4\1\5\13\0" + + "\2\5\16\0\u17f8\4\10\0\u04d6\4\52\0\11\4\u22e7\0\4\4\1\0" + + "\7\4\1\0\2\4\1\0\u0123\4\55\0\3\4\21\0\4\4\10\0" + + "\u018c\4\u0904\0\153\4\5\0\15\4\3\0\11\4\7\0\12\4\3\0" + + "\2\5\1\0\4\5\u125c\0\56\5\2\0\27\5\u021e\0\5\5\3\0" + + "\26\5\2\0\7\5\36\0\4\5\224\0\3\5\u01bb\0\125\4\1\0" + + "\107\4\1\0\2\4\2\0\1\4\2\0\2\4\2\0\4\4\1\0" + + "\14\4\1\0\1\4\1\0\7\4\1\0\101\4\1\0\4\4\2\0" + + "\10\4\1\0\7\4\1\0\34\4\1\0\4\4\1\0\5\4\1\0" + + "\1\4\3\0\7\4\1\0\u0154\4\2\0\31\4\1\0\31\4\1\0" + + "\37\4\1\0\31\4\1\0\37\4\1\0\31\4\1\0\37\4\1\0" + + "\31\4\1\0\37\4\1\0\31\4\1\0\10\4\2\0\62\5\u0200\0" + + "\67\5\4\0\62\5\10\0\1\5\16\0\1\5\26\0\5\5\1\0" + + "\17\5\u0450\0\37\4\341\0\7\5\1\0\21\5\2\0\7\5\1\0" + + "\2\5\1\0\5\5\325\0\55\4\3\0\7\5\7\4\2\0\12\5" + + "\4\0\1\4\u0141\0\36\4\1\5\21\0\54\4\16\5\5\0\1\4" + + "\u04e0\0\7\4\1\0\4\4\1\0\2\4\1\0\17\4\1\0\305\4" + + "\13\0\7\5\51\0\104\4\7\5\1\4\4\0\12\5\u0356\0\1\4" + + "\u014f\0\4\4\1\0\33\4\1\0\2\4\1\0\1\4\2\0\1\4" + + "\1\0\12\4\1\0\4\4\1\0\1\4\1\0\1\4\6\0\1\4" + + "\4\0\1\4\1\0\1\4\1\0\1\4\1\0\3\4\1\0\2\4" + + "\1\0\1\4\2\0\1\4\1\0\1\4\1\0\1\4\1\0\1\4" + + "\1\0\1\4\1\0\2\4\1\0\1\4\2\0\4\4\1\0\7\4" + + "\1\0\4\4\1\0\4\4\1\0\1\4\1\0\12\4\1\0\21\4" + + "\5\0\3\4\1\0\5\4\1\0\21\4\u0d34\0\12\5\u0406\0\ua6e0\4" + + "\40\0\u1039\4\7\0\336\4\2\0\u1682\4\16\0\u1d31\4\u0c1f\0\u021e\4" + + "\u05e2\0\u134b\4\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uecc0\0" + + "\1\5\36\0\140\5\200\0\360\5\uffff\0\uffff\0\ufe12\0"; - /** - * Translates characters to character classes - */ - private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int [] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int[] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 = - "\1\0\1\1\3\2\1\3\1\1\1\4\1\5\1\6"+ - "\1\7\1\10\1\11\1\0\1\12"; + private static final String ZZ_ACTION_PACKED_0 + = "\1\0\1\1\3\2\1\3\1\1\1\4\1\5\1\6" + + "\1\7\1\10\1\11\1\0\1\12"; - private static int [] zzUnpackAction() { - int [] result = new int[15]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackAction() { + int[] result = new int[15]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\15\0\32\0\15\0\47\0\64\0\101\0\15"+ - "\0\15\0\15\0\15\0\15\0\15\0\116\0\15"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[15]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); + private static int zzUnpackAction(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; } - return j; - } - /** - * The transition table of the DFA - */ - private static final int [] ZZ_TRANS = zzUnpackTrans(); + /** + * Translates a state to a row index in the transition table + */ + private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - private static final String ZZ_TRANS_PACKED_0 = - "\1\2\1\3\1\4\1\5\1\6\1\2\1\7\1\10"+ - "\1\11\1\12\1\13\1\14\1\15\17\0\1\4\15\0"+ - "\1\5\15\0\2\6\15\0\1\16\14\0\1\17\6\0"; + private static final String ZZ_ROWMAP_PACKED_0 + = "\0\0\0\15\0\32\0\15\0\47\0\64\0\101\0\15" + + "\0\15\0\15\0\15\0\15\0\15\0\116\0\15"; - private static int [] zzUnpackTrans() { - int [] result = new int[91]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do result[j++] = value; while (--count > 0); + private static int[] zzUnpackRowMap() { + int[] result = new int[15]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\1\11\1\1\1\11\3\1\6\11\1\0\1\11"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[15]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); + private static int zzUnpackRowMap(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; } - return j; - } - /** the input device */ - private java.io.Reader zzReader; + /** + * The transition table of the DFA + */ + private static final int[] ZZ_TRANS = zzUnpackTrans(); - /** the current state of the DFA */ - private int zzState; + private static final String ZZ_TRANS_PACKED_0 + = "\1\2\1\3\1\4\1\5\1\6\1\2\1\7\1\10" + + "\1\11\1\12\1\13\1\14\1\15\17\0\1\4\15\0" + + "\1\5\15\0\2\6\15\0\1\16\14\0\1\17\6\0"; - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + private static int[] zzUnpackTrans() { + int[] result = new int[91]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + private static int zzUnpackTrans(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } - /** the textposition at the last accepting state */ - private int zzMarkedPos; - /** the current text position in the buffer */ - private int zzCurrentPos; + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - /** number of newlines encountered up to the start of the matched text */ - private int yyline; + private static final String ZZ_ATTRIBUTE_PACKED_0 + = "\1\0\1\11\1\1\1\11\3\1\6\11\1\0\1\11"; - /** the number of characters up to the start of the matched text */ - private int yychar; + private static int[] zzUnpackAttribute() { + int[] result = new int[15]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; + private static int zzUnpackAttribute(String packed, int offset, int[] result) { + int i = 0; + /* index in packed string */ + int j = offset; + /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do { + result[j++] = value; + } while (--count > 0); + } + return j; + } - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; + /** + * the input device + */ + private java.io.Reader zzReader; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + /** + * the current state of the DFA + */ + private int zzState; - /** denotes if the user-EOF-code has already been executed */ - private boolean zzEOFDone; - - /** - * The number of occupied positions in zzBuffer beyond zzEndRead. - * When a lead/high surrogate has been read from the input stream - * into the final zzBuffer position, this will have a value of 1; - * otherwise, it will have a value of 0. - */ - private int zzFinalHighSurrogate = 0; + /** + * the current lexical state + */ + private int zzLexicalState = YYINITIAL; - /* user code: */ + /** + * this buffer contains the current text to be matched and is the source of + * the yytext() string + */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + /** + * the textposition at the last accepting state + */ + private int zzMarkedPos; + + /** + * the current text position in the buffer + */ + private int zzCurrentPos; + + /** + * startRead marks the beginning of the yytext() string in the buffer + */ + private int zzStartRead; + + /** + * endRead marks the last character in the buffer, that has been read from + * input + */ + private int zzEndRead; + + /** + * number of newlines encountered up to the start of the matched text + */ + private int yyline; + + /** + * the number of characters up to the start of the matched text + */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** + * zzAtEOF == true <=> the scanner is at the EOF + */ + private boolean zzAtEOF; + + /** + * denotes if the user-EOF-code has already been executed + */ + private boolean zzEOFDone; + + /** + * The number of occupied positions in zzBuffer beyond zzEndRead. When a + * lead/high surrogate has been read from the input stream into the final + * zzBuffer position, this will have a value of 1; otherwise, it will have a + * value of 0. + */ + private int zzFinalHighSurrogate = 0; + + /* user code: */ StringBuilder string = new StringBuilder(); - + public int yychar() { return yychar; } @@ -439,7 +480,6 @@ public final class DocsOperandLexer { return yyline + 1; } - public void pushback(ParsedSymbol symb) { pushedBack.push(symb); last = null; @@ -450,9 +490,10 @@ public final class DocsOperandLexer { } ParsedSymbol last; + public ParsedSymbol lex() throws java.io.IOException { ParsedSymbol ret = null; - if (!pushedBack.isEmpty()){ + if (!pushedBack.isEmpty()) { ret = last = pushedBack.pop(); } else { ret = last = yylex(); @@ -460,371 +501,373 @@ public final class DocsOperandLexer { return ret; } - - - /** - * Creates a new scanner - * - * @param in the java.io.Reader to read input from. - */ - public DocsOperandLexer(java.io.Reader in) { - this.zzReader = in; - } - - - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char [] zzUnpackCMap(String packed) { - char [] map = new char[0x110000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 3722) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do map[j++] = value; while (--count > 0); - } - return map; - } - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public DocsOperandLexer(java.io.Reader in) { + this.zzReader = in; } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { - /* if not: blow it up */ - char newBuffer[] = new char[zzBuffer.length*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - } - - /* fill the buffer with new input */ - int requested = zzBuffer.length - zzEndRead; - int totalRead = 0; - while (totalRead < requested) { - int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); - if (numRead == -1) { - break; - } - totalRead += numRead; - } - - if (totalRead > 0) { - zzEndRead += totalRead; - if (totalRead == requested) { /* possibly more input available */ - if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { - --zzEndRead; - zzFinalHighSurrogate = 1; + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char[] zzUnpackCMap(String packed) { + char[] map = new char[0x110000]; + int i = 0; + /* index in packed string */ + int j = 0; + /* index in unpacked array */ + while (i < 3722) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do { + map[j++] = value; + } while (--count > 0); } - } - return false; + return map; } - // totalRead = 0: End of stream - return true; - } + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + /* first: make room (if you can) */ + if (zzStartRead > 0) { + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead - zzStartRead); - if (zzReader != null) - zzReader.close(); - } + /* translate stored positions */ + zzEndRead -= zzStartRead; + zzCurrentPos -= zzStartRead; + zzMarkedPos -= zzStartRead; + zzStartRead = 0; + } + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { + /* if not: blow it up */ + char newBuffer[] = new char[zzBuffer.length * 2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + } - /** - * Resets the scanner to read from a new input stream. - * Does not close the old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). - * Lexical state is set to ZZ_INITIAL. - * - * Internal scan buffer is resized down to its initial length, if it has grown. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - zzFinalHighSurrogate = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) - zzBuffer = new char[ZZ_BUFFERSIZE]; - } + /* fill the buffer with new input */ + int requested = zzBuffer.length - zzEndRead; + int totalRead = 0; + while (totalRead < requested) { + int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); + if (numRead == -1) { + break; + } + totalRead += numRead; + } + if (totalRead > 0) { + zzEndRead += totalRead; + if (totalRead == requested) { + /* possibly more input available */ + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + --zzEndRead; + zzFinalHighSurrogate = 1; + } + } + return false; + } - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Returns the character at position pos from the - * matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. - * A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead+pos]; - } - - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos-zzStartRead; - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + // totalRead = 0: End of stream + return true; } - throw new Error(message); - } + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; + /* indicate end of file */ + zzEndRead = zzStartRead; + /* invalidate buffer */ + if (zzReader != null) { + zzReader.close(); + } + } - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. - * This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if ( number > yylength() ) - zzScanError(ZZ_PUSHBACK_2BIG); + /** + * Resets the scanner to read from a new input stream. Does not close the + * old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). Lexical + * state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has + * grown. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + zzFinalHighSurrogate = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) { + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + } - zzMarkedPos -= number; - } + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ - public ParsedSymbol yylex() throws java.io.IOException { - int zzInput; - int zzAction; + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); + } - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; + /** + * Returns the character at position pos from the matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. A value from 0 to + * yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead + pos]; + } - int [] zzTransL = ZZ_TRANS; - int [] zzRowMapL = ZZ_ROWMAP; - int [] zzAttrL = ZZ_ATTRIBUTE; + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos - zzStartRead; + } - while (true) { - zzMarkedPosL = zzMarkedPos; + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of yypushback(int) and + * a match-all fallback rule) this method will only be called with things + * that "Can't Possibly Happen". If this method is called, something is + * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done in error + * fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } - yychar+= zzMarkedPosL-zzStartRead; + throw new Error(message); + } - zzAction = -1; + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. This number must + * not be greater than yylength()! + */ + public void yypushback(int number) { + if (number > yylength()) { + zzScanError(ZZ_PUSHBACK_2BIG); + } - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; + zzMarkedPos -= number; + } - // set up zzAction for empty match case: - int zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - } + /** + * Resumes scanning until the next regular expression is matched, the end of + * input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public ParsedSymbol yylex() throws java.io.IOException { + int zzInput; + int zzAction; + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char[] zzBufferL = zzBuffer; + char[] zzCMapL = ZZ_CMAP; + + int[] zzTransL = ZZ_TRANS; + int[] zzRowMapL = ZZ_ROWMAP; + int[] zzAttrL = ZZ_ATTRIBUTE; - zzForAction: { while (true) { - - if (zzCurrentPosL < zzEndReadL) { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; - if (zzNext == -1) break zzForAction; - zzState = zzNext; + zzMarkedPosL = zzMarkedPos; - zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ( (zzAttributes & 8) == 8 ) break zzForAction; - } + yychar += zzMarkedPosL - zzStartRead; + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + } + + zzForAction: + { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } else { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } + } + int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; + if (zzNext == -1) { + break zzForAction; + } + zzState = zzNext; + + zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ((zzAttributes & 8) == 8) { + break zzForAction; + } + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: { + } + case 11: + break; + case 2: { + /*ignore*/ + } + case 12: + break; + case 3: { + return new ParsedSymbol(ParsedSymbol.TYPE_IDENTIFIER, yytext()); + } + case 13: + break; + case 4: { + return new ParsedSymbol(ParsedSymbol.TYPE_COLON, yytext()); + } + case 14: + break; + case 5: { + return new ParsedSymbol(ParsedSymbol.TYPE_COMMA, yytext()); + } + case 15: + break; + case 6: { + return new ParsedSymbol(ParsedSymbol.TYPE_BRACKET_OPEN, yytext()); + } + case 16: + break; + case 7: { + return new ParsedSymbol(ParsedSymbol.TYPE_BRACKET_CLOSE, yytext()); + } + case 17: + break; + case 8: { + return new ParsedSymbol(ParsedSymbol.TYPE_PIPE, yytext()); + } + case 18: + break; + case 9: { + return new ParsedSymbol(ParsedSymbol.TYPE_STAR, yytext()); + } + case 19: + break; + case 10: { + return new ParsedSymbol(ParsedSymbol.TYPE_DOTS, yytext()); + } + case 20: + break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ParsedSymbol(ParsedSymbol.TYPE_EOF, null); + } + } else { + zzScanError(ZZ_NO_MATCH); + } + } } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: - { - } - case 11: break; - case 2: - { /*ignore*/ - } - case 12: break; - case 3: - { return new ParsedSymbol(ParsedSymbol.TYPE_IDENTIFIER, yytext()); - } - case 13: break; - case 4: - { return new ParsedSymbol(ParsedSymbol.TYPE_COLON, yytext()); - } - case 14: break; - case 5: - { return new ParsedSymbol(ParsedSymbol.TYPE_COMMA, yytext()); - } - case 15: break; - case 6: - { return new ParsedSymbol(ParsedSymbol.TYPE_BRACKET_OPEN, yytext()); - } - case 16: break; - case 7: - { return new ParsedSymbol(ParsedSymbol.TYPE_BRACKET_CLOSE, yytext()); - } - case 17: break; - case 8: - { return new ParsedSymbol(ParsedSymbol.TYPE_PIPE, yytext()); - } - case 18: break; - case 9: - { return new ParsedSymbol(ParsedSymbol.TYPE_STAR, yytext()); - } - case 19: break; - case 10: - { return new ParsedSymbol(ParsedSymbol.TYPE_DOTS, yytext()); - } - case 20: break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return new ParsedSymbol(ParsedSymbol.TYPE_EOF, null); - } - } - else { - zzScanError(ZZ_NO_MATCH); - } - } } - } - } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/DocsParseException.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/DocsParseException.java index 6ad680232..4613c3b77 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/DocsParseException.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/DocsParseException.java @@ -21,5 +21,5 @@ package com.jpexs.decompiler.flash.docs; * @author JPEXS */ public class DocsParseException extends Exception { - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/ParsedSymbol.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/ParsedSymbol.java index c1232eabd..3b15444ec 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/ParsedSymbol.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/docs/ParsedSymbol.java @@ -21,6 +21,7 @@ package com.jpexs.decompiler.flash.docs; * @author JPEXS */ public class ParsedSymbol { + public static int TYPE_EOF = 0; public static int TYPE_IDENTIFIER = 1; public static int TYPE_COLON = 2; @@ -30,7 +31,7 @@ public class ParsedSymbol { public static int TYPE_COMMA = 6; public static int TYPE_PIPE = 7; public static int TYPE_STAR = 8; - + public final int type; public final String value; @@ -42,5 +43,5 @@ public class ParsedSymbol { @Override public String toString() { return "symbol[type=" + type + ", value=" + value + "]"; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ecma/EcmaScript.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ecma/EcmaScript.java index 51250a479..22b0d711a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ecma/EcmaScript.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ecma/EcmaScript.java @@ -92,7 +92,7 @@ public class EcmaScript { return object_defaultValue((ObjectType) o, prefferedType); } return Undefined.INSTANCE; //?? - } + } public static Object object_get(ObjectType o, String p) { //TODO: isDataDesciptor, etc. ECMA 8.12.3 @@ -281,12 +281,12 @@ public class EcmaScript { } return 0; } - } + } public static boolean strictEquals(Object x, Object y) { return strictEquals(false, x, y); } - + public static boolean strictEquals(boolean as2, Object x, Object y) { if (type(x) != type(y)) { return false; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ecma/ObjectType.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ecma/ObjectType.java index 94264869e..184cb230a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ecma/ObjectType.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ecma/ObjectType.java @@ -66,7 +66,7 @@ public class ObjectType implements Callable { public Object toPrimitive() { return toString(); - } + } public Object valueOf() { return EcmaScript.toNumber(toString()); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/BinaryDataExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/BinaryDataExporter.java index 9050872d2..cebafda96 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/BinaryDataExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/BinaryDataExporter.java @@ -53,7 +53,7 @@ public class BinaryDataExporter { } return exportBinaryData(handler, outdir, binaryDatas, settings, evl); } - + public List exportBinaryData(AbortRetryIgnoreHandler handler, String outdir, List binaryDatas, BinaryDataExportSettings settings, EventListener evl) throws IOException, InterruptedException { List ret = new ArrayList<>(); if (Thread.currentThread().isInterrupted()) { @@ -75,8 +75,8 @@ public class BinaryDataExporter { int currentIndex = 1; for (final BinaryDataInterface t : binaryDatas) { - if (evl != null) { - evl.handleExportingEvent("binarydata", currentIndex, count, t.getName()); + if (evl != null) { + evl.handleExportingEvent("binarydata", currentIndex, count, t.getName()); } String ext = t.getInnerSwf() == null ? ".bin" : ".swf"; @@ -86,10 +86,10 @@ public class BinaryDataExporter { fos.write(t.getDataBytes().getRangeData()); } }, handler).run(); - + DefineBinaryDataTag bdt = (DefineBinaryDataTag) t.getTopLevelBinaryData(); - Set classNames = bdt.getClassNames(); + Set classNames = bdt.getClassNames(); if (Configuration.as3ExportNamesUseClassNamesOnly.get() && !classNames.isEmpty()) { for (String className : classNames) { File classFile = new File(outdir + File.separator + Helper.makeFileName(t.getClassExportFileName(className) + ext)); @@ -99,7 +99,7 @@ public class BinaryDataExporter { ret.add(classFile); } file.delete(); - } else { + } else { ret.add(file); } @@ -111,7 +111,7 @@ public class BinaryDataExporter { evl.handleExportedEvent("binarydata", currentIndex, count, t.getName()); } - currentIndex++; + currentIndex++; } return ret; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/DualPdfGraphics2D.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/DualPdfGraphics2D.java index bde6956bf..a10717ab9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/DualPdfGraphics2D.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/DualPdfGraphics2D.java @@ -133,7 +133,7 @@ public class DualPdfGraphics2D extends Graphics2D implements BlendModeSetable, G boolean ok2 = pdfGraphics.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, bgcolor, observer); return ok1 && ok2; } - + @Override public void drawRenderedImage(RenderedImage img, AffineTransform xform) { imageGraphics.drawRenderedImage(img, xform); @@ -383,7 +383,7 @@ public class DualPdfGraphics2D extends Graphics2D implements BlendModeSetable, G public void clipRect(int x, int y, int width, int height) { imageGraphics.clearRect(x, y, width, height); pdfGraphics.clipRect(x, y, width, height); - } + } @Override public Shape getClip() { @@ -395,7 +395,7 @@ public class DualPdfGraphics2D extends Graphics2D implements BlendModeSetable, G imageGraphics.setClip(x, y, width, height); pdfGraphics.setClip(x, y, width, height); } - + @Override public void setClip(Shape clip) { imageGraphics.setClip(clip); @@ -478,7 +478,7 @@ public class DualPdfGraphics2D extends Graphics2D implements BlendModeSetable, G public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) { imageGraphics.fillPolygon(xPoints, yPoints, nPoints); pdfGraphics.fillPolygon(xPoints, yPoints, nPoints); - } + } @Override public void dispose() { @@ -609,8 +609,8 @@ public class DualPdfGraphics2D extends Graphics2D implements BlendModeSetable, G int spacing = entry.glyphAdvance - calcAdvance; char ch = font.glyphToChar(entry.glyphIndex); if (spacing != 0) { - text.append(currentChar); - drawText(swf, x, y, trans, textColor, existingFonts, font, text.toString(), textHeight, pdfGraphics); + text.append(currentChar); + drawText(swf, x, y, trans, textColor, existingFonts, font, text.toString(), textHeight, pdfGraphics); text = new StringBuilder(); x = x + deltaX + entry.glyphAdvance; deltaX = 0; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/Font4Exporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/Font4Exporter.java index 6c33759e5..811f1158c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/Font4Exporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/Font4Exporter.java @@ -88,7 +88,7 @@ public class Font4Exporter { exportFont(st, settings.mode, file); }, handler).run(); - Set classNames = st.getClassNames(); + Set classNames = st.getClassNames(); if (Configuration.as3ExportNamesUseClassNamesOnly.get() && !classNames.isEmpty()) { for (String className : classNames) { File classFile = new File(outdir + File.separator + Helper.makeFileName(className + ext)); @@ -98,7 +98,7 @@ public class Font4Exporter { ret.add(classFile); } file.delete(); - } else { + } else { ret.add(file); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.java index 398064def..1948fb6b3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FontExporter.java @@ -102,8 +102,8 @@ public class FontExporter { new RetryTask(() -> { exportFont(st, settings.mode, file); }, handler).run(); - - Set classNames = st.getClassNames(); + + Set classNames = st.getClassNames(); if (Configuration.as3ExportNamesUseClassNamesOnly.get() && !classNames.isEmpty()) { for (String className : classNames) { File classFile = new File(outdir + File.separator + Helper.makeFileName(className + ext)); @@ -113,10 +113,10 @@ public class FontExporter { ret.add(classFile); } file.delete(); - } else { + } else { ret.add(file); } - + if (Thread.currentThread().isInterrupted()) { break; } @@ -128,7 +128,7 @@ public class FontExporter { currentIndex++; } } - + return ret; } @@ -158,7 +158,7 @@ public class FontExporter { final double divider = t.getDivider(); File ttfFile = file; - + if (mode == FontExportMode.WOFF) { ttfFile = File.createTempFile("ffdec_export", ".ttf"); } @@ -167,7 +167,7 @@ public class FontExporter { if (fontName.length() == 0) { fontName = "noname"; } - + Fontastic f = new Fontastic(fontName, ttfFile); String cop = t.getCopyright(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java index efff2ed66..aeb490661 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java @@ -166,7 +166,7 @@ public class FrameExporter { FrameExportSettings fes = new FrameExportSettings(fem, settings.zoom, true); return exportFrames(handler, outdir, swf, containerId, frames, fes, evl); } - + private class MyFrameIterator implements Iterator { private int pos = 0; @@ -174,11 +174,11 @@ public class FrameExporter { private final List fframes; private final EventListener evl; private final boolean usesTransparency; - private final Color backgroundColor; + private final Color backgroundColor; private final FrameExportSettings settings; - + public MyFrameIterator( - Timeline tim, + Timeline tim, List fframes, final EventListener evl, boolean usesTransparency, @@ -196,7 +196,7 @@ public class FrameExporter { public void reset() { pos = 0; } - + @Override public boolean hasNext() { if (Thread.currentThread().isInterrupted()) { @@ -233,7 +233,7 @@ public class FrameExporter { } return result; - } + } } public List exportFrames(AbortRetryIgnoreHandler handler, String outdir, final SWF swf, int containerId, List frames, final FrameExportSettings settings, final EventListener evl) throws IOException, InterruptedException { @@ -252,13 +252,13 @@ public class FrameExporter { paths.add(""); } else { tim0 = ((Timelined) swf.getCharacter(containerId)).getTimeline(); - + Set classNames = swf.getCharacter(containerId).getClassNames(); if (Configuration.as3ExportNamesUseClassNamesOnly.get() && !classNames.isEmpty()) { for (String className : classNames) { paths.add(File.separator + Helper.makeFileName(className)); } - } else { + } else { paths.add(File.separator + Helper.makeFileName(swf.getCharacter(containerId).getExportFileName())); } } @@ -274,13 +274,12 @@ public class FrameExporter { } final List foutdirs = new ArrayList<>(); - + for (String path : paths) { File foutdir = new File(outdir + path); foutdirs.add(foutdir); - Path.createDirectorySafe(foutdir); + Path.createDirectorySafe(foutdir); } - final List fframes = frames; @@ -310,7 +309,7 @@ public class FrameExporter { rect.xMin *= settings.zoom; rect.yMin *= settings.zoom; SVGExporter exporter = new SVGExporter(rect, settings.zoom, "frame", fbackgroundColor); - + tim.toSVG(frame, 0, null, 0, exporter, null, 0); fos.write(Utf8Helper.getBytes(exporter.getSVG())); } @@ -517,13 +516,13 @@ public class FrameExporter { ret.add(f); }, handler).run(); } - } + } break; case PNG: for (File foutdir : foutdirs) { frameImages.reset(); for (int i = 0; frameImages.hasNext(); i++) { - final int fi = i; + final int fi = i; new RetryTask(() -> { File file = new File(foutdir + File.separator + (fframes.get(fi) + 1) + ".png"); BufferedImage img = frameImages.next(); @@ -877,7 +876,7 @@ public class FrameExporter { } if (filter instanceof CONVOLUTIONFILTER) { - CONVOLUTIONFILTER cf = (CONVOLUTIONFILTER) filter; + CONVOLUTIONFILTER cf = (CONVOLUTIONFILTER) filter; float[] matrix2 = new float[cf.matrixX * cf.matrixY]; for (int y = 0; y < cf.matrixY; y++) { for (int x = 0; x < cf.matrixX; x++) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageExporter.java index 27599dae2..859b3e8bc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageExporter.java @@ -149,7 +149,7 @@ public class ImageExporter { }, handler).run(); } } - Set classNames = imageTag.getClassNames(); + Set classNames = imageTag.getClassNames(); if (Configuration.as3ExportNamesUseClassNamesOnly.get() && !classNames.isEmpty()) { for (String className : classNames) { File classFile = new File(outdir + File.separator + Helper.makeFileName(className + "." + ImageHelper.getImageFormatString(fileFormat))); @@ -166,7 +166,7 @@ public class ImageExporter { if (alphaPngFile.exists()) { alphaPngFile.delete(); } - } else { + } else { ret.add(file); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageTagBufferedImage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageTagBufferedImage.java index c8cdf59b8..059d721f2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageTagBufferedImage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ImageTagBufferedImage.java @@ -259,13 +259,13 @@ public class ImageTagBufferedImage extends BufferedImage { @Override public ImageProducer getSource() { return image.getSource(); - } + } @Override public int getWidth(ImageObserver observer) { return image.getWidth(observer); } - + @Override public int getWidth() { return image.getWidth(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MorphShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MorphShapeExporter.java index 8649ed525..eb1e5d1fd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MorphShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MorphShapeExporter.java @@ -109,7 +109,7 @@ public class MorphShapeExporter { final File fileStart = new File(outdir + File.separator + characterID + ".start" + settings.getFileExtension()); final File fileEnd = new File(outdir + File.separator + characterID + ".end" + settings.getFileExtension()); MorphShapeTag mst = (MorphShapeTag) t; - + new RetryTask(() -> { switch (settings.mode) { case SVG_START_END: @@ -171,7 +171,7 @@ public class MorphShapeExporter { } else { BMPFile.saveBitmap(img.getBufferedImage(), fileStart); } - + st = mst.getEndShapeTag(); rect = st.getRect(); newWidth = (int) (rect.getWidth() * settings.zoom / SWF.unitDivisor) + 1; @@ -194,7 +194,7 @@ public class MorphShapeExporter { } else { BMPFile.saveBitmap(img.getBufferedImage(), fileEnd); } - break; + break; case CANVAS: try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(file))) { int deltaX = -Math.min(mst.getStartBounds().Xmin, mst.getEndBounds().Xmin); @@ -221,9 +221,8 @@ public class MorphShapeExporter { break; } }, handler).run(); - - - Set classNames = mst.getClassNames(); + + Set classNames = mst.getClassNames(); if (Configuration.as3ExportNamesUseClassNamesOnly.get() && !classNames.isEmpty()) { for (String className : classNames) { File classFile = new File(outdir + File.separator + Helper.makeFileName(className + settings.getFileExtension())); @@ -233,17 +232,17 @@ public class MorphShapeExporter { Files.copy(file.toPath(), classFile.toPath(), StandardCopyOption.REPLACE_EXISTING); }, handler).run(); ret.add(classFile); - + if (fileStart.exists()) { new RetryTask(() -> { Files.copy(fileStart.toPath(), classFileStart.toPath(), StandardCopyOption.REPLACE_EXISTING); - }, handler).run(); + }, handler).run(); } - + if (fileEnd.exists()) { new RetryTask(() -> { Files.copy(fileEnd.toPath(), classFileEnd.toPath(), StandardCopyOption.REPLACE_EXISTING); - }, handler).run(); + }, handler).run(); } } file.delete(); @@ -253,10 +252,10 @@ public class MorphShapeExporter { if (fileEnd.exists()) { fileEnd.delete(); } - } else { + } else { ret.add(file); } - + if (Thread.currentThread().isInterrupted()) { break; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MovieExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MovieExporter.java index 608f35503..84b3840ca 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MovieExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MovieExporter.java @@ -94,7 +94,7 @@ public class MovieExporter { } }, handler).run(); - Set classNames = videoStream.getClassNames(); + Set classNames = videoStream.getClassNames(); if (Configuration.as3ExportNamesUseClassNamesOnly.get() && !classNames.isEmpty()) { for (String className : classNames) { File classFile = new File(outdir + File.separator + Helper.makeFileName(className + ".flv")); @@ -104,10 +104,10 @@ public class MovieExporter { ret.add(classFile); } file.delete(); - } else { + } else { ret.add(file); } - + if (Thread.currentThread().isInterrupted()) { break; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java index 0aff26592..017f22c46 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java @@ -164,8 +164,8 @@ public class ShapeExporter { break; } }, handler).run(); - - Set classNames = st.getClassNames(); + + Set classNames = st.getClassNames(); if (Configuration.as3ExportNamesUseClassNamesOnly.get() && !classNames.isEmpty()) { for (String className : classNames) { File classFile = new File(outdir + File.separator + Helper.makeFileName(className + settings.getFileExtension())); @@ -175,7 +175,7 @@ public class ShapeExporter { ret.add(classFile); } file.delete(); - } else { + } else { ret.add(file); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/SoundExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/SoundExporter.java index be4de5671..b19e7407e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/SoundExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/SoundExporter.java @@ -59,6 +59,7 @@ import java.util.Set; * @author JPEXS */ public class SoundExporter { + public List exportSounds(AbortRetryIgnoreHandler handler, String outdir, ReadOnlyTagList tags, final SoundExportSettings settings, EventListener evl) throws IOException, InterruptedException { List sounds = new ArrayList<>(); for (Tag t : tags) { @@ -68,8 +69,8 @@ public class SoundExporter { } return exportSounds(handler, outdir, sounds, settings, evl); } - - public List exportSounds(AbortRetryIgnoreHandler handler, String outdir, List tags, final SoundExportSettings settings, EventListener evl) throws IOException, InterruptedException { + + public List exportSounds(AbortRetryIgnoreHandler handler, String outdir, List tags, final SoundExportSettings settings, EventListener evl) throws IOException, InterruptedException { List ret = new ArrayList<>(); if (Thread.currentThread().isInterrupted()) { return ret; @@ -127,7 +128,7 @@ public class SoundExporter { ret.add(classFile); } file.delete(); - } else { + } else { ret.add(file); } @@ -139,7 +140,7 @@ public class SoundExporter { evl.handleExportedEvent("sound", currentIndex, tags.size(), st.getName()); } - currentIndex++; + currentIndex++; } return ret; } @@ -178,11 +179,11 @@ public class SoundExporter { } else { blocks = ((SoundStreamFrameRange) st).blocks; } - + SoundStreamFrameRange sh = (SoundStreamFrameRange) st; FLVOutputStream flv = new FLVOutputStream(fos); flv.writeHeader(true, false); - + int ms = (int) (1000.0 / ((Tag) st).getSwf().frameRate); for (int b = 0; b < blocks.size(); b++) { byte[] data = blocks.get(b).streamSoundData.getRangeData(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java index 4f97deaa5..67cf721a2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java @@ -43,17 +43,17 @@ public final class Matrix implements Cloneable { mat.scale(scale); return mat; } - + public static Matrix getScaleInstance(double scaleX, double scaleY) { Matrix mat = new Matrix(); mat.scale(scaleX, scaleY); return mat; } - + public static Matrix getRotateInstance(double rotateAngle) { return getRotateInstance(rotateAngle, 0, 0); } - + public static Matrix getRotateInstance(double rotateAngle, double tx, double ty) { double angleRad = -rotateAngle * Math.PI / 180; Matrix mat = new Matrix(); @@ -65,7 +65,7 @@ public final class Matrix implements Cloneable { .concatenate(getTranslateInstance(-tx, -ty)); return mat; } - + public static Matrix getSkewXInstance(double skewAngle) { double angleRad = skewAngle * Math.PI / 180; Matrix mat = new Matrix(); @@ -148,7 +148,6 @@ public final class Matrix implements Cloneable { return new java.awt.Point((int) p.x, (int) p.y); } - public Point transform(double x, double y) { Point result = new Point( scaleX * x + rotateSkew1 * y + translateX, @@ -164,7 +163,7 @@ public final class Matrix implements Cloneable { Point p = transform(point.x, point.y); return new java.awt.Point((int) p.x, (int) p.y); } - + public Point2D transform(Point2D point) { Point p = transform(point.getX(), point.getY()); return new Point2D.Double(p.x, p.y); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java index a66e1b6e3..47c80d434 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java @@ -61,7 +61,7 @@ public class SVGExporter { protected static final String sNamespace = "http://www.w3.org/2000/svg"; protected static final String xlinkNamespace = "http://www.w3.org/1999/xlink"; - + protected static final String ffdecNamespace = "https://www.free-decompiler.com/flash"; protected Document _svg; @@ -112,7 +112,7 @@ public class SVGExporter { svgRoot.setAttribute("height", (bounds.getHeight() / SWF.unitDivisor) + "px"); } createDefGroup(bounds, null, zoom); - + if (backgroundColor != null) { Element rect = _svg.createElement("rect"); rect.setAttribute("fill", new RGBA(backgroundColor).toHexRGB()); @@ -127,12 +127,12 @@ public class SVGExporter { } } svgRoot.setAttribute("ffdec:objectType", objectType); - + } catch (ParserConfigurationException ex) { Logger.getLogger(SVGExporter.class.getName()).log(Level.SEVERE, null, ex); } gradients = new ArrayList<>(); - } + } private Element getDefs() { if (_svgDefs == null) { @@ -248,7 +248,6 @@ public class SVGExporter { Attr attr = _svg.createAttribute("style"); attr.setValue("background: " + new RGBA(backGroundColor).toHexARGB()); }*/ - private String addClip(String path) { lastClipId++; Element clipPathElement = _svg.createElement("clipPath"); @@ -474,7 +473,7 @@ public class SVGExporter { public Element addUse(Matrix transform, RECT boundRect, String href, String instanceName, RECT scalingRect) { return addUse(transform, boundRect, href, instanceName, scalingRect, null, null, BlendMode.NORMAL, new ArrayList<>()); } - + public Element addUse(Matrix transform, RECT boundRect, String href, String instanceName, RECT scalingRect, String characterId, String characterName, int blendMode, List filters) { if (scalingRect != null && (transform == null || (Double.compare(transform.rotateSkew0, 0.0) == 0 && Double.compare(transform.rotateSkew1, 0.0) == 0))) { addScalingGridUse(transform, boundRect, href, instanceName, scalingRect, characterId, characterName, blendMode, filters); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/CanvasMorphShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/CanvasMorphShapeExporter.java index 343523e0e..ed392a3f6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/CanvasMorphShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/CanvasMorphShapeExporter.java @@ -45,7 +45,7 @@ public class CanvasMorphShapeExporter extends MorphShapeExporterBase { protected static final String DRAW_COMMAND_L = "L"; protected static final String DRAW_COMMAND_Q = "Q"; - + protected static final String DRAW_COMMAND_Z = "Z"; protected String currentDrawCommand = ""; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/DefaultSVGMorphShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/DefaultSVGMorphShapeExporter.java index b76b87953..9a37ed8b2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/DefaultSVGMorphShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/DefaultSVGMorphShapeExporter.java @@ -72,7 +72,7 @@ public abstract class DefaultSVGMorphShapeExporter extends MorphShapeExporterBas pathData.append("Z"); pathDataEnd.append("Z"); } - finalizePath(); + finalizePath(); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/IMorphShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/IMorphShapeExporter.java index e5f5ec384..c65cfefcd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/IMorphShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/IMorphShapeExporter.java @@ -52,7 +52,7 @@ public interface IMorphShapeExporter { public void lineGradientStyle(int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio, float focalPointRatioEnd); public void lineBitmapStyle(int bitmapId, Matrix matrix, Matrix matrixEnd, boolean repeat, boolean smooth, ColorTransform colorTransform); - + public void moveTo(double x, double y, double x2, double y2); public void lineTo(double x, double y, double x2, double y2); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/MorphShapeExporterBase.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/MorphShapeExporterBase.java index 67c6037d1..beb11e783 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/MorphShapeExporterBase.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/MorphShapeExporterBase.java @@ -426,7 +426,7 @@ public abstract class MorphShapeExporterBase implements IMorphShapeExporter { autoClose = true; if (lineStyle instanceof LINESTYLE2) { LINESTYLE2 lineStyle2 = (LINESTYLE2) lineStyle; - + if (lineStyle2.noClose) { autoClose = false; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java index 5116c4de8..c71dca7a6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java @@ -114,7 +114,7 @@ public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { } path.setAttribute("fill", "#ff0000"); } - + public String getPattern(int bitmapId, Matrix matrix, Matrix matrixEnd, boolean smooth) { ImageTag image = swf.getImage(bitmapId); if (image != null) { @@ -138,7 +138,7 @@ public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { pattern.setAttribute("width", "" + width); pattern.setAttribute("height", "" + height); pattern.setAttribute("viewBox", "0 0 " + width + " " + height); - pattern.setAttribute("ffdec:smoothed", smooth ? "true" : "false"); + pattern.setAttribute("ffdec:smoothed", smooth ? "true" : "false"); if (matrix != null) { matrix = matrix.clone(); matrix.rotateSkew0 *= zoom / SWF.unitDivisor; @@ -259,7 +259,7 @@ public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { // QR decomposition double translateX = roundPixels400(matrix.translateX * zoom / SWF.unitDivisor); - double translateY = roundPixels400(matrix.translateY * zoom / SWF.unitDivisor); + double translateY = roundPixels400(matrix.translateY * zoom / SWF.unitDivisor); double a = matrix.scaleX; double b = matrix.rotateSkew0; double c = matrix.rotateSkew1; @@ -474,18 +474,18 @@ public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { @Override public void lineBitmapStyle(int bitmapId, Matrix matrix, Matrix matrixEnd, boolean repeat, boolean smooth, ColorTransform colorTransform) { - path.removeAttribute("stroke-opacity"); - - String patternId = getPattern(bitmapId, matrix, matrixEnd, smooth); + path.removeAttribute("stroke-opacity"); + + String patternId = getPattern(bitmapId, matrix, matrixEnd, smooth); path.setAttribute("ffdec:stroke-bitmapId", "" + bitmapId); - + if (patternId != null) { path.setAttribute("style", "stroke:url(#" + patternId + ")"); return; } path.setAttribute("stroke", "#ff0000"); } - + protected double roundPixels400(double pixels) { return Math.round(pixels * 10000) / 10000.0; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java index 40d56e3b9..d15d56fa2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/AS3ScriptExporter.java @@ -574,7 +574,7 @@ public class AS3ScriptExporter { st.getNeededCharactersDeep(neededCharacters); neededCharacters.add(st.spriteId); } - for (int n : neededCharacters) { + for (int n : neededCharacters) { CharacterTag ct = (CharacterTag) swf.getCharacter(n); if (ct == null) { continue; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DependencyParser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DependencyParser.java index 6ba2ce7df..13c01e699 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DependencyParser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DependencyParser.java @@ -83,8 +83,8 @@ public class DependencyParser { if (pkg.equals(InitVectorAVM2Item.VECTOR_PACKAGE)) { //special case - is imported always return; } - dependencies.add(dep); - } + dependencies.add(dep); + } } public static void parseDependenciesFromMultiname(AbcIndexing abcIndex, String ignoredCustom, ABC abc, List dependencies, Multiname m, DottedChain ignorePackage, List fullyQualifiedNames, DependencyType dependencyType, List uses) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DotId.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DotId.java index 3e9c93346..05e27202f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DotId.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/script/DotId.java @@ -30,7 +30,7 @@ public final class DotId { static final Pattern RESERVED_PATTERN = Pattern.compile("^" + String.join("|", RESERVED_WORDS) + "$", Pattern.CASE_INSENSITIVE); static final Pattern NUMERAL_PATTERN = Pattern.compile("^[-]?(.[0-9]+|[0-9]+(.[0-9]*)?)$"); static final String IDENTIFIER_FIRST_CHARS = "a-zA-Z\\u0200-\\u0377_"; - static final String IDENTIFIER_NEXT_CHARS = IDENTIFIER_FIRST_CHARS + "0-9"; + static final String IDENTIFIER_NEXT_CHARS = IDENTIFIER_FIRST_CHARS + "0-9"; static final String CH = "^[" + IDENTIFIER_FIRST_CHARS + "][" + IDENTIFIER_NEXT_CHARS + "]*$"; static final Pattern IDENTIFIER_PATTERN = Pattern.compile(CH); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/FrameExportSettings.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/FrameExportSettings.java index 1207f14b6..57b6e4f18 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/FrameExportSettings.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/FrameExportSettings.java @@ -29,7 +29,7 @@ public class FrameExportSettings { public FrameExportMode mode; public double zoom; - + public boolean transparentBackground; public FrameExportSettings(FrameExportMode mode, double zoom, boolean transparentBackground) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/ScriptExportSettings.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/ScriptExportSettings.java index 403e45bd8..db311a8f3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/ScriptExportSettings.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/ScriptExportSettings.java @@ -38,7 +38,7 @@ public class ScriptExportSettings { public boolean exportEmbed; public boolean exportEmbedFlaMode; - + public boolean resampleWav; public ScriptExportSettings( diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/SoundExportSettings.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/SoundExportSettings.java index 9e7708bd9..8c980a7c5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/SoundExportSettings.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/SoundExportSettings.java @@ -27,7 +27,7 @@ public class SoundExportSettings { public static final String EXPORT_FOLDER_NAME = "sounds"; public SoundExportMode mode; - + public boolean resampleWav; public SoundExportSettings(SoundExportMode mode, boolean resampleWav) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java index 618591679..d82ecb6df 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java @@ -249,7 +249,7 @@ public class BitmapExporter extends ShapeExporterBase { finalizePath(); if (color == null) { fillPaint = defaultColor; - } else { + } else { fillPaint = color.toColor(); } } @@ -261,18 +261,18 @@ public class BitmapExporter extends ShapeExporterBase { if (interpolationMethod == GRADIENT.INTERPOLATION_LINEAR_RGB_MODE) { cstype = MultipleGradientPaint.ColorSpaceType.LINEAR_RGB; } - + List colors = new ArrayList<>(); List ratios = new ArrayList<>(); int lastRatio = -1; for (int i = 0; i < gradientRecords.length; i++) { if ((i > 0) && (gradientRecords[i - 1].ratio == gradientRecords[i].ratio)) { if (lastRatio < 255) { - lastRatio++; + lastRatio++; } } else { if (gradientRecords[i].ratio > lastRatio) { - lastRatio = gradientRecords[i].ratio; + lastRatio = gradientRecords[i].ratio; } else if (lastRatio < 255) { lastRatio++; } @@ -281,7 +281,7 @@ public class BitmapExporter extends ShapeExporterBase { colors.add(gradientRecords[i].color.toColor()); if (lastRatio == 255) { break; - } + } } if (colors.size() == 1) { @@ -308,12 +308,12 @@ public class BitmapExporter extends ShapeExporterBase { cm = MultipleGradientPaint.CycleMethod.REPEAT; break; } - + switch (type) { case FILLSTYLE.LINEAR_GRADIENT: fillPaint = new LinearGradientPaint(POINT_NEG16384_0, POINT_16384_0, ratiosArr, colorsArr, cm, cstype, IDENTITY_TRANSFORM); break; - case FILLSTYLE.RADIAL_GRADIENT: + case FILLSTYLE.RADIAL_GRADIENT: fillPaint = new RadialGradientPaint(new java.awt.Point(0, 0), 16384, new java.awt.Point(0, 0), ratiosArr, colorsArr, cm, cstype, new AffineTransform()); break; case FILLSTYLE.FOCAL_RADIAL_GRADIENT: @@ -361,12 +361,12 @@ public class BitmapExporter extends ShapeExporterBase { finalizePath(); linePaint = null; lineTransform = null; - + if (thickness == 0) { lineColor = null; return; } - + lineColor = color == null ? null : color.toColor(); int capStyle = BasicStroke.CAP_ROUND; switch (startCaps) { @@ -438,18 +438,18 @@ public class BitmapExporter extends ShapeExporterBase { if (interpolationMethod == GRADIENT.INTERPOLATION_LINEAR_RGB_MODE) { cstype = MultipleGradientPaint.ColorSpaceType.LINEAR_RGB; } - + List colors = new ArrayList<>(); List ratios = new ArrayList<>(); int lastRatio = -1; for (int i = 0; i < gradientRecords.length; i++) { if ((i > 0) && (gradientRecords[i - 1].ratio == gradientRecords[i].ratio)) { if (lastRatio < 255) { - lastRatio++; + lastRatio++; } } else { if (gradientRecords[i].ratio > lastRatio) { - lastRatio = gradientRecords[i].ratio; + lastRatio = gradientRecords[i].ratio; } else if (lastRatio < 255) { lastRatio++; } @@ -458,7 +458,7 @@ public class BitmapExporter extends ShapeExporterBase { colors.add(gradientRecords[i].color.toColor()); if (lastRatio == 255) { break; - } + } } if (colors.size() == 1) { @@ -472,7 +472,7 @@ public class BitmapExporter extends ShapeExporterBase { ratiosArr[i] = ratios.get(i); } Color[] colorsArr = colors.toArray(new Color[colors.size()]); - + MultipleGradientPaint.CycleMethod cm = MultipleGradientPaint.CycleMethod.NO_CYCLE; switch (spreadMethod) { case GRADIENT.SPREAD_PAD_MODE: @@ -485,19 +485,19 @@ public class BitmapExporter extends ShapeExporterBase { cm = MultipleGradientPaint.CycleMethod.REPEAT; break; } - + switch (type) { - case FILLSTYLE.LINEAR_GRADIENT: - linePaint = new LinearGradientPaint(POINT_NEG16384_0, POINT_16384_0, ratiosArr, colorsArr, cm, cstype, IDENTITY_TRANSFORM); + case FILLSTYLE.LINEAR_GRADIENT: + linePaint = new LinearGradientPaint(POINT_NEG16384_0, POINT_16384_0, ratiosArr, colorsArr, cm, cstype, IDENTITY_TRANSFORM); break; case FILLSTYLE.RADIAL_GRADIENT: - linePaint = new RadialGradientPaint(new java.awt.Point(0, 0), 16384, ratiosArr, colorsArr, cm); + linePaint = new RadialGradientPaint(new java.awt.Point(0, 0), 16384, ratiosArr, colorsArr, cm); break; case FILLSTYLE.FOCAL_RADIAL_GRADIENT: linePaint = new RadialGradientPaint(new java.awt.Point(0, 0), 16384, new java.awt.Point((int) (focalPointRatio * 16384), 0), ratiosArr, colorsArr, cm, cstype, AffineTransform.getTranslateInstance(0, 0)); break; } - + lineTransform = matrix.toTransform(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/CurvedEdge.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/CurvedEdge.java index dceb09558..03202badf 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/CurvedEdge.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/CurvedEdge.java @@ -48,8 +48,7 @@ public class CurvedEdge extends StraightEdge implements IEdge { @Override public IEdge sameWithNewFillStyle(int newFillStyleIdx) { return new CurvedEdge(fromX, fromY, controlX, controlY, toX, toY, lineStyleIdx, newFillStyleIdx); - } - + } @Override public String toString() { @@ -59,5 +58,5 @@ public class CurvedEdge extends StraightEdge implements IEdge { @Override public IEdge reverse() { return new CurvedEdge(toX, toY, controlX, controlY, fromX, fromY, lineStyleIdx, getFillStyleIdx()); - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/IEdge.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/IEdge.java index 829784bac..40b9b33e4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/IEdge.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/IEdge.java @@ -35,8 +35,8 @@ public interface IEdge { public int getFillStyleIdx(); public IEdge reverseWithNewFillStyle(int newFillStyleIdx); - + public IEdge reverse(); - + public IEdge sameWithNewFillStyle(int newFillStyleIdx); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/StraightEdge.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/StraightEdge.java index 7ce32ee24..de7b7e4ce 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/StraightEdge.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/StraightEdge.java @@ -86,12 +86,11 @@ public class StraightEdge implements IEdge { @Override public IEdge sameWithNewFillStyle(int newFillStyleIdx) { return new StraightEdge(fromX, fromY, toX, toY, lineStyleIdx, newFillStyleIdx); - } + } @Override public IEdge reverse() { return new StraightEdge(toX, toY, fromX, fromY, lineStyleIdx, getFillStyleIdx()); } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToExeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToExeExporter.java index 0ac4a7363..3b625bc56 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToExeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfToExeExporter.java @@ -18,6 +18,7 @@ import java.util.logging.Logger; * @author JPEXS */ public class SwfToExeExporter { + public static void saveFileToExe(SWF swf, ExeExportMode exeExportMode, File tmpFile) throws IOException { try (FileOutputStream fos = new FileOutputStream(tmpFile); BufferedOutputStream bos = new BufferedOutputStream(fos)) { switch (exeExportMode) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfXmlExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfXmlExporter.java index 316acd6b3..e15dae63b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfXmlExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/swf/SwfXmlExporter.java @@ -158,7 +158,7 @@ public class SwfXmlExporter { if (isListItem) { writer.writeStartElement(name); - writer.writeCharacters(stringValue); + writer.writeCharacters(stringValue); writer.writeEndElement(); } else { writer.writeAttribute(name, stringValue); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java index 0f9e93b8d..4e14faa19 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcAs3ScriptReplacer.java @@ -135,19 +135,19 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl try { //Compile it (and subclasses stubs) - List args = new ArrayList<>(Arrays.asList("-strict=false", + List args = new ArrayList<>(Arrays.asList("-strict=false", "-include-inheritance-dependencies-only", "-warnings=false", "-library-path", swcFile.getAbsolutePath())); - + for (File depSwcFile : dependenciesSwcFiles) { args.add("-library-path"); args.add(depSwcFile.getAbsolutePath()); } args.addAll(Arrays.asList("-source-path", tempDir.getAbsolutePath(), - "-output", compiledSwfFile.getAbsolutePath(), - "-debug=true", + "-output", compiledSwfFile.getAbsolutePath(), + "-debug=true", scriptFileToCompile.getAbsolutePath())); mxmlc(args); } catch (MxmlcException ex1) { @@ -290,7 +290,7 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl //Make copy without the old script Openable openable = pack.getOpenable(); - SWF swf = (openable instanceof SWF) ? (SWF) openable : ((ABC) openable).getSwf(); + SWF swf = (openable instanceof SWF) ? (SWF) openable : ((ABC) openable).getSwf(); SWF swfCopy = recompileSWF(swf); List modAbcs = new ArrayList<>(); @@ -333,7 +333,7 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl //Flex then uses the code already present in the SWC, no need to decompile it (hurray!) SwfToSwcExporter swcExport = new SwfToSwcExporter(); swcExport.exportSwf(swfCopy, swcFile, true); - + dependenciesSwcFiles = new ArrayList<>(); int i = 0; for (SWF depSwf : dependencies) { @@ -341,7 +341,7 @@ public class MxmlcAs3ScriptReplacer extends MxmlcRunner implements As3ScriptRepl File depSwcFile = new File(tempDir, "dep" + i + ".swc"); swcExport.exportSwf(depSwf, depSwcFile, false); dependenciesSwcFiles.add(depSwcFile); - } + } } catch (IOException iex) { //ignore } catch (InterruptedException ex) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcRunner.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcRunner.java index 74cae2b7f..7b21fffcf 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcRunner.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flexsdk/MxmlcRunner.java @@ -33,10 +33,10 @@ public class MxmlcRunner { public static String getMxmlcPath(String flexSdkPath) { boolean isWin = System.getProperty("os.name").toLowerCase().contains("win"); String path = flexSdkPath + File.separator + "bin" + File.separator + "mxmlc"; - + String exePath = path + ".exe"; String batPath = path + ".bat"; - + if (isWin) { if (new File(exePath).exists()) { return exePath; @@ -47,7 +47,7 @@ public class MxmlcRunner { } else { if (new File(path).exists()) { return exePath; - } + } } return null; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flv/FLVOutputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flv/FLVOutputStream.java index f5c916905..8257f16b7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flv/FLVOutputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/flv/FLVOutputStream.java @@ -61,14 +61,14 @@ public class FLVOutputStream extends OutputStream { alignByte(); os.write(b); pos += b.length; - } + } @Override public void write(byte[] b, int off, int len) throws IOException { alignByte(); os.write(b, off, len); pos += len; - } + } private void alignByte() throws IOException { if (bitPos > 0) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/harman/HarmanBinaryDataEncrypt.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/harman/HarmanBinaryDataEncrypt.java index 7830c49b1..fb6500b2a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/harman/HarmanBinaryDataEncrypt.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/harman/HarmanBinaryDataEncrypt.java @@ -32,8 +32,8 @@ import javax.crypto.spec.SecretKeySpec; public class HarmanBinaryDataEncrypt { - private static final String GLOBAL_KEY = "Adobe AIR SDK (c) 2021 HARMAN Internation Industries Incorporated"; - + private static final String GLOBAL_KEY = "Adobe AIR SDK (c) 2021 HARMAN Internation Industries Incorporated"; + public static byte[] encrypt(byte[] data) { byte[] result; try { @@ -51,14 +51,13 @@ public class HarmanBinaryDataEncrypt { random.nextBytes(keyBytes); long random1 = unpack(randomBytes1, 0); long random2 = unpack(randomBytes2, 0); - - + byte[] ivBytes = getIv(hashBytes, random1, random2); IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); byte[] dataPadded = new byte[(int) encryptedDataLen]; random.nextBytes(dataPadded); - System.arraycopy(data, 0, dataPadded, 0, data.length); + System.arraycopy(data, 0, dataPadded, 0, data.length); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); @@ -71,14 +70,14 @@ public class HarmanBinaryDataEncrypt { System.arraycopy(pack(dataLenXorRandom1), 0, result, 4, 4); System.arraycopy(randomBytes1, 0, result, 8, 4); System.arraycopy(randomBytes2, 0, result, 12, 4); - + addBytes(keyBytes, 0, randomBytes2, 1); addBytes(keyBytes, 4, randomBytes2, -1); addBytes(keyBytes, 8, randomBytes2, 1); addBytes(keyBytes, 12, randomBytes2, -1); System.arraycopy(keyBytes, 0, result, 16, 16); - System.arraycopy(encryptedBytes, 0, result, 32, encryptedDataLen); + System.arraycopy(encryptedBytes, 0, result, 32, encryptedDataLen); } catch (UnsupportedEncodingException | InvalidAlgorithmParameterException | InvalidKeyException | NoSuchAlgorithmException | BadPaddingException | IllegalBlockSizeException | NoSuchPaddingException ex) { result = null; } @@ -138,14 +137,14 @@ public class HarmanBinaryDataEncrypt { if (data.length < 32) { return null; } - long encryptedLen = data.length; + long encryptedLen = data.length; long encryptedLenXorHash = unpack(data, 0); long decryptedLenXorRandom1 = unpack(data, 4); long random1 = unpack(data, 8); long random2 = unpack(data, 12); - byte[] random2Bytes = Arrays.copyOfRange(data, 12, 16); - byte[] keyBytes = Arrays.copyOfRange(data, 16, 32); + byte[] random2Bytes = Arrays.copyOfRange(data, 12, 16); + byte[] keyBytes = Arrays.copyOfRange(data, 16, 32); byte[] encryptedBytes = Arrays.copyOfRange(data, 32, data.length); long decryptedLen = decryptedLenXorRandom1 ^ random1; @@ -154,7 +153,7 @@ public class HarmanBinaryDataEncrypt { addBytes(keyBytes, 0, random2Bytes, -1); addBytes(keyBytes, 4, random2Bytes, 1); addBytes(keyBytes, 8, random2Bytes, -1); - addBytes(keyBytes, 12, random2Bytes, 1); + addBytes(keyBytes, 12, random2Bytes, 1); try { byte[] ivBytes = getIv(hashBytes, random1, random2); @@ -171,10 +170,10 @@ public class HarmanBinaryDataEncrypt { } catch (UnsupportedEncodingException | InvalidAlgorithmParameterException | InvalidKeyException | NoSuchAlgorithmException | BadPaddingException | IllegalBlockSizeException | NoSuchPaddingException ex) { return null; } - } + } public static void main(String[] args) throws IOException { - byte[] data = new byte[] {'A', 'B', 'C'}; + byte[] data = new byte[]{'A', 'B', 'C'}; byte[] encrypted = encrypt(data); byte[] decrypted = decrypt(encrypted); if (!Arrays.equals(data, decrypted)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/harman/HarmanSwfEncrypt.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/harman/HarmanSwfEncrypt.java index 70f8b1707..3add52a72 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/harman/HarmanSwfEncrypt.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/harman/HarmanSwfEncrypt.java @@ -41,8 +41,8 @@ import javax.crypto.spec.SecretKeySpec; */ public class HarmanSwfEncrypt { - private static final String GLOBAL_KEY = "Adobe AIR SDK (c) 2021 HARMAN Internation Industries Incorporated"; - + private static final String GLOBAL_KEY = "Adobe AIR SDK (c) 2021 HARMAN Internation Industries Incorporated"; + private static int sum(byte[] data) { int s = 0; for (int i = 0; i < data.length; i++) { @@ -74,13 +74,13 @@ public class HarmanSwfEncrypt { + ((long) (data[start + 2] & 0xff) << 16) + ((long) (data[start + 3] & 0xff) << 24); } - + private static byte[] pack(long value) { return new byte[]{ (byte) (value & 0xff), (byte) ((value >> 8) & 0xff), (byte) ((value >> 16) & 0xff), - (byte) ((value >> 24) & 0xff) + (byte) ((value >> 24) & 0xff) }; } @@ -95,34 +95,33 @@ public class HarmanSwfEncrypt { return outputStream.toByteArray(); } - - public static byte[] encrypt(byte[] data) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { + + public static byte[] encrypt(byte[] data) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { return encrypt(new ByteArrayInputStream(data)); } - - public static byte[] encrypt(InputStream is) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { + + public static byte[] encrypt(InputStream is) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { byte[] header = new byte[8]; DataInputStream dais = new DataInputStream(is); dais.readFully(header); return encrypt(is, header); } - - public static byte[] encrypt(InputStream is, byte[] header) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + public static byte[] encrypt(InputStream is, byte[] header) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); long key = getkey(header); - + byte[] data = readStream(is); - + int decryptedLength = data.length; long encryptedLength = decryptedLength ^ key; byte[] encryptedLengthBytes = pack(encryptedLength); - - + int paddedLength = (int) (decryptedLength + 0x1F) & ~0x1F; - + byte[] dataPadded = new byte[paddedLength]; - System.arraycopy(data, 0, dataPadded, 0, data.length); - + System.arraycopy(data, 0, dataPadded, 0, data.length); + byte[] aesIV = new byte[16]; System.arraycopy(header, 0, aesIV, 0, header.length); //header System.arraycopy(encryptedLengthBytes, 0, aesIV, 8, 4); //encrypted length @@ -134,23 +133,23 @@ public class HarmanSwfEncrypt { for (int i = 0; i < 16; i++) { aesIV[i] ^= GLOBAL_KEY.charAt(i); } - - byte[] aesKey = new byte[32]; - + + byte[] aesKey = new byte[32]; + SecureRandom random = new SecureRandom(); - random.nextBytes(aesKey); - + random.nextBytes(aesKey); + SecretKeySpec secretKeySpec = new SecretKeySpec(aesKey, "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, new IvParameterSpec(aesIV)); byte[] encryptedData = cipher.doFinal(dataPadded); header[0] += 32; //to lowercase - - baos.write(header); + + baos.write(header); baos.write(pack(encryptedLength)); baos.write(encryptedData, 0, paddedLength); - - byte[] aesKeyData = new byte[32]; + + byte[] aesKeyData = new byte[32]; for (int i = 0; i < 32; i += 4) { long value = unpack(aesKey, i); if ((i & 4) == 4) { @@ -163,17 +162,16 @@ public class HarmanSwfEncrypt { aesKeyData[i + 2] = (byte) ((value >> 16) & 0xff); aesKeyData[i + 3] = (byte) ((value >> 24) & 0xff); } - + baos.write(aesKeyData); - + return baos.toByteArray(); } - - + public static byte[] decrypt(byte[] data) throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { return decrypt(new ByteArrayInputStream(data)); } - + public static byte[] decrypt(InputStream is) throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { DataInputStream dais = new DataInputStream(is); byte[] header = new byte[8]; @@ -241,13 +239,13 @@ public class HarmanSwfEncrypt { return Arrays.copyOfRange(decryptedData, 0, decryptedLength); } - public static void main(String[] args) throws Exception { - byte[] data = new byte[] {'C', 'W', 'S', 0x32, 0x01, 0x02, 0x03, 0x04, 0x41, 0x42, 0x43, 0xd, 0xa}; + public static void main(String[] args) throws Exception { + byte[] data = new byte[]{'C', 'W', 'S', 0x32, 0x01, 0x02, 0x03, 0x04, 0x41, 0x42, 0x43, 0xd, 0xa}; byte[] encrypted = encrypt(data); byte[] decrypted = decrypt(encrypted); - + if (!Arrays.equals(data, decrypted)) { throw new RuntimeException("Cannot encrypt/decrypt"); - } + } } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/GraphTextWriter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/GraphTextWriter.java index 3032fdc4e..a4e7fa01c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/GraphTextWriter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/GraphTextWriter.java @@ -251,7 +251,7 @@ public abstract class GraphTextWriter { } return this; } - + public GraphTextWriter addCurrentMethodData(HighlightData data) { return this; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.java index 409399e46..38a9fbd16 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.java @@ -66,7 +66,7 @@ public class HighlightedTextWriter extends GraphTextWriter { instructionHilights.finish(); specialHilights.finish(); } - + public HighlightedTextWriter(CodeFormatting formatting, boolean hilight) { super(formatting); this.hilight = hilight; @@ -193,7 +193,7 @@ public class HighlightedTextWriter extends GraphTextWriter { appendNoHilight(text); return end(HighlightType.SPECIAL); } - + @Override public HighlightedTextWriter appendWithData(String str, HighlightData data) { Highlighting h = null; @@ -310,7 +310,7 @@ public class HighlightedTextWriter extends GraphTextWriter { private HighlightedTextWriter start(HighlightData data, HighlightType type) { if (hilight) { Highlighting h = new Highlighting(sb.length() - newLineCount, data, type, null); - hilightStack.add(h); + hilightStack.add(h); } return this; } @@ -378,7 +378,7 @@ public class HighlightedTextWriter extends GraphTextWriter { appendNoHilight(formatting.indentString); } } - + @Override public GraphTextWriter addCurrentMethodData(HighlightData data) { for (int i = hilightStack.size() - 1; i >= 0; i--) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/NulWriter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/NulWriter.java index 0b082f34b..834ac2cc8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/NulWriter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/NulWriter.java @@ -99,7 +99,7 @@ public class NulWriter extends GraphTextWriter { public NulWriter hilightSpecial(String text, HighlightSpecialType type, String specialValue, HighlightData data) { stringAdded = true; return this; - } + } @Override public GraphTextWriter appendWithData(String str, HighlightData data) { @@ -130,7 +130,7 @@ public class NulWriter extends GraphTextWriter { stringAdded = true; return this; } - + @Override public NulWriter append(String str, long offset, long fileOffset) { stringAdded = true; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/StreamTextWriter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/StreamTextWriter.java index ae5e4d385..680eddb5f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/StreamTextWriter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/StreamTextWriter.java @@ -50,7 +50,7 @@ public class StreamTextWriter extends GraphTextWriter implements AutoCloseable { public GraphTextWriter hilightSpecial(String text, HighlightSpecialType type, String specialValue, HighlightData data) { writeToOutputStream(text); return this; - } + } @Override public GraphTextWriter appendWithData(String str, HighlightData data) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/StringBuilderTextWriter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/StringBuilderTextWriter.java index ea165fc92..f8d2d3b76 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/StringBuilderTextWriter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/StringBuilderTextWriter.java @@ -43,7 +43,7 @@ public class StringBuilderTextWriter extends GraphTextWriter { public GraphTextWriter hilightSpecial(String text, HighlightSpecialType type, String specialValue, HighlightData data) { writeToOutputStream(text); return this; - } + } @Override public GraphTextWriter appendWithData(String str, HighlightData data) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/HighlightData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/HighlightData.java index 6515b07d5..4514a0d6a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/HighlightData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/HighlightData.java @@ -46,7 +46,7 @@ public class HighlightData implements Cloneable, Serializable { public int regIndex = -1; public int namespaceIndex = -1; - + public int activationRegIndex = -1; public boolean isStatic = false; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/Highlighting.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/Highlighting.java index 69652a15e..655f8b0b9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/Highlighting.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/Highlighting.java @@ -88,12 +88,12 @@ public class Highlighting implements Serializable { public static Highlighting searchPos(HighlightingList list, long pos) { return searchPos(list, pos, -1, -1); } - - public static Highlighting searchPos(HighlightingList list, long pos, long from, long to) { + + public static Highlighting searchPos(HighlightingList list, long pos, long from, long to) { return searchPosNew(list, pos, from, to); } - public static Highlighting searchPosNew(HighlightingList list, long pos, long from, long to) { + public static Highlighting searchPosNew(HighlightingList list, long pos, long from, long to) { Highlighting[] hmap = posToHighlightMap(list); if (pos > -1) { if (pos >= hmap.length) { @@ -115,9 +115,7 @@ public class Highlighting implements Serializable { } return null; } - - - + /*public static Highlighting searchPosOld(HighlightingList list, long pos, long from, long to) { Highlighting ret = null; @@ -145,9 +143,8 @@ public class Highlighting implements Serializable { return ret; }*/ - private static final Map listToPosMap = new WeakHashMap<>(); - + private static Highlighting[] posToHighlightMap(HighlightingList list) { if (list.isEmpty()) { return new Highlighting[0]; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/HighlightingList.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/HighlightingList.java index d3dab5dfd..00ca8e614 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/HighlightingList.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/hilight/HighlightingList.java @@ -35,15 +35,14 @@ public class HighlightingList extends ArrayList { public boolean isFinished() { return finished; - } + } - private void checkWriteAccess() { if (finished) { throw new RuntimeException("Cannot add to readonly list"); } } - + @Override public boolean add(Highlighting e) { checkWriteAccess(); @@ -114,8 +113,8 @@ public class HighlightingList extends ArrayList { public void clear() { checkWriteAccess(); super.clear(); - } - + } + @Override public int hashCode() { return System.identityHashCode(this); @@ -124,5 +123,5 @@ public class HighlightingList extends ArrayList { @Override public boolean equals(Object o) { return o == this; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/streams/AbstractDataStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/streams/AbstractDataStream.java index 54216e48c..73e48717f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/streams/AbstractDataStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/streams/AbstractDataStream.java @@ -111,7 +111,7 @@ public abstract class AbstractDataStream implements DataStreamInterface { write(val & 0xff); write((val >> 8) & 0xff); return true; - } + } @Override public boolean writeUI8(int val) throws IOException { @@ -215,22 +215,22 @@ public abstract class AbstractDataStream implements DataStreamInterface { switch (pad8) { case 1: write(0); - //fallthrough + //fallthrough case 2: write(0); - //fallthrough + //fallthrough case 3: write(0); - //fallthrough + //fallthrough case 4: write(0); - //fallthrough + //fallthrough case 5: write(0); - //fallthrough + //fallthrough case 6: write(0); - //fallthrough + //fallthrough case 7: write(0); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/AS2ScriptImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/AS2ScriptImporter.java index 2f5b994f8..a1926f4f0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/AS2ScriptImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/AS2ScriptImporter.java @@ -88,16 +88,16 @@ public class AS2ScriptImporter { asm.setActions(par.actionsFromString(txt, asm.getSwf().getCharset())); } catch (ValueTooLargeException ex) { logger.log(Level.SEVERE, "Script or some of its functions are too large, file: {0}", fileName); - errored = true; + errored = true; } catch (ActionParseException ex) { logger.log(Level.SEVERE, "%error% on line %line%, file: %file%".replace("%error%", ex.text).replace("%line%", Long.toString(ex.line)).replace("%file%", fileName), ex); - errored = true; + errored = true; } catch (CompilationException ex) { logger.log(Level.SEVERE, "%error% on line %line%, file: %file%".replace("%error%", ex.text).replace("%line%", Long.toString(ex.line)).replace("%file%", fileName), ex); - errored = true; + errored = true; } catch (IOException ex) { logger.log(Level.SEVERE, "error during script import, file: %file%".replace("%file%", fileName), ex); - errored = true; + errored = true; } catch (InterruptedException ex) { return importCount; } catch (Exception ex) { @@ -172,7 +172,7 @@ public class AS2ScriptImporter { logger.log(Level.SEVERE, null, ex); errored = true; } - + if (!errored) { asm.setModified(); importCount++; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplaceException.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplaceException.java index dd763084d..120733dc9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplaceException.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/As3ScriptReplaceException.java @@ -31,12 +31,12 @@ public class As3ScriptReplaceException extends Exception { super(message); this.exceptionItems = new ArrayList<>(); } - + public As3ScriptReplaceException(List exceptionItems) { super("Script replace exception"); this.exceptionItems = exceptionItems; } - + public As3ScriptReplaceException(As3ScriptReplaceExceptionItem exceptionItem) { this.exceptionItems = new ArrayList<>(); this.exceptionItems.add(exceptionItem); @@ -57,7 +57,7 @@ public class As3ScriptReplaceException extends Exception { @Override public String getLocalizedMessage() { return getMessage(); - } + } public List getExceptionItems() { return exceptionItems; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ImageImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ImageImporter.java index 971bf4ec9..6bece3b59 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ImageImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ImageImporter.java @@ -54,12 +54,12 @@ public class ImageImporter extends TagImporter { } /** - * + * * @param it * @param newData * @param tagType 0 = can change for defineBits, -1 = detect based on data * @return - * @throws IOException + * @throws IOException */ public Tag importImage(ImageTag it, byte[] newData, int tagType) throws IOException { if (newData.length >= 2 && newData[0] == 'B' && newData[1] == 'M') { @@ -78,16 +78,15 @@ public class ImageImporter extends TagImporter { } } if (tagType == -1) { - if (newData.length >= 4 - && newData[0] == (byte) 0xff + if (newData.length >= 4 + && newData[0] == (byte) 0xff && newData[1] == (byte) 0xd8 && newData[2] == (byte) 0xff - && newData[3] == (byte) 0xe0 - ) { + && newData[3] == (byte) 0xe0) { tagType = DefineBitsJPEG2Tag.ID; } else { tagType = DefineBitsLosslessTag.ID; - } + } } if (it.getId() == tagType) { @@ -237,10 +236,10 @@ public class ImageImporter extends TagImporter { List existingAlphaFilesForImageTag = new ArrayList<>(); List classNameExpectedFileNames = new ArrayList<>(); for (String className : imageTag.getClassNames()) { - classNameExpectedFileNames.add(Helper.makeFileName(className)); + classNameExpectedFileNames.add(Helper.makeFileName(className)); } - for (File f : allFiles) { + for (File f : allFiles) { if (f.getName().startsWith("" + characterId + ".") || f.getName().startsWith("" + characterId + "_")) { existingFilesForImageTag.add(f); } else { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/MovieImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/MovieImporter.java index e2d29f917..1d788b560 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/MovieImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/MovieImporter.java @@ -77,12 +77,12 @@ public class MovieImporter { if (tag instanceof DefineVideoStreamTag) { DefineVideoStreamTag movieTag = (DefineVideoStreamTag) tag; List existingFilesForMovieTag = new ArrayList<>(); - + List classNameExpectedFileNames = new ArrayList<>(); for (String className : movieTag.getClassNames()) { - classNameExpectedFileNames.add(Helper.makeFileName(className)); + classNameExpectedFileNames.add(Helper.makeFileName(className)); } - + for (File f : allFiles) { if (f.getName().startsWith("" + characterId + ".") || f.getName().startsWith("" + characterId + "_")) { existingFilesForMovieTag.add(f); @@ -302,16 +302,16 @@ public class MovieImporter { } } if (placeDepth == -1) { - placeDepth = maxPlaceDepth + 1; + placeDepth = maxPlaceDepth + 1; startFrame = 0; } int numTimelineFrames = timelined == null ? 0 : timelined.getFrameCount(); int importLastFrame = -1; if (timelined != null) { - + boolean placeWithCharacterIdFound = false; - ReadOnlyTagList tagList1 = timelined.getTags(); + ReadOnlyTagList tagList1 = timelined.getTags(); for (int p = 0; p < tagList1.size(); p++) { Tag t = tagList1.get(p); if (t instanceof PlaceObjectTypeTag) { @@ -330,10 +330,10 @@ public class MovieImporter { placeObject.placeFlagMove = false; timelined.addTag(p, placeObject); break; - } + } } } - + VideoFrameTag lastVideoFrame = null; for (FLVTAG ftag : videoTags) { videoData = ((VIDEODATA) ftag.data); @@ -381,9 +381,9 @@ public class MovieImporter { PlaceObjectTypeTag place = (PlaceObjectTypeTag) t; if (place.getDepth() == placeDepth) { placeFound = true; - } + } } - if (t instanceof ShowFrameTag) { + if (t instanceof ShowFrameTag) { swfFrameNum++; if (!placeFound) { PlaceObject2Tag placeObject = new PlaceObject2Tag(swf); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ScriptImporterProgressListener.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ScriptImporterProgressListener.java index eb57dc539..02a928aa2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ScriptImporterProgressListener.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ScriptImporterProgressListener.java @@ -23,6 +23,6 @@ package com.jpexs.decompiler.flash.importers; public interface ScriptImporterProgressListener { public void scriptImported(); - + public void scriptImportError(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ShapeImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ShapeImporter.java index dbcf3c2eb..f06558f62 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ShapeImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/ShapeImporter.java @@ -64,15 +64,15 @@ public class ShapeImporter { public Tag importImage(MorphShapeTag mst, byte[] newData) throws IOException { return importImage((Tag) mst, newData, 0, true); } - + public Tag importImage(MorphShapeTag mst, byte[] newData, int tagType, boolean fill) throws IOException { return importImage((Tag) mst, newData, tagType, fill); } - + public Tag importImage(ShapeTag st, byte[] newData, int tagType, boolean fill) throws IOException { return importImage((Tag) st, newData, tagType, fill); } - + private Tag importImage(Tag st, byte[] newData, int tagType, boolean fill) throws IOException { ImageTag imageTag = addImage(st, newData, tagType); st.setModified(true); @@ -215,12 +215,12 @@ public class ShapeImporter { if (tag instanceof ShapeTag) { ShapeTag shapeTag = (ShapeTag) tag; List existingFilesForShapeTag = new ArrayList<>(); - + List classNameExpectedFileNames = new ArrayList<>(); for (String className : shapeTag.getClassNames()) { - classNameExpectedFileNames.add(Helper.makeFileName(className)); + classNameExpectedFileNames.add(Helper.makeFileName(className)); } - + for (File f : allFiles) { if (f.getName().startsWith("" + characterId + ".") || f.getName().startsWith("" + characterId + "_")) { existingFilesForShapeTag.add(f); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SoundImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SoundImporter.java index c5a798c58..2e26e3927 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SoundImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SoundImporter.java @@ -331,13 +331,12 @@ public class SoundImporter { ByteArrayInputStream bais = uncompressedSoundData == null ? null : new ByteArrayInputStream(uncompressedSoundData); List ranges = streamHead.getRanges(); - + List existingBlocks = new ArrayList<>(); for (SoundStreamFrameRange range : ranges) { existingBlocks.addAll(range.blocks); } - - + int startFrame = 0; Timelined timelined = streamHead.getTimelined(); if (!existingBlocks.isEmpty()) { @@ -523,14 +522,14 @@ public class SoundImporter { for (SoundTag tag : soundTags) { int characterId = tag.getCharacterId(); List existingFilesForSoundTag = new ArrayList<>(); - + List classNameExpectedFileNames = new ArrayList<>(); if (tag instanceof CharacterTag) { for (String className : ((CharacterTag) tag).getClassNames()) { - classNameExpectedFileNames.add(Helper.makeFileName(className)); + classNameExpectedFileNames.add(Helper.makeFileName(className)); } } - + for (File f : allFiles) { if (f.getName().startsWith("" + characterId + ".") || f.getName().startsWith("" + characterId + "_")) { existingFilesForSoundTag.add(f); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SpriteImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SpriteImporter.java index 8ec8571eb..4bdcc5e03 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SpriteImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/SpriteImporter.java @@ -174,12 +174,12 @@ public class SpriteImporter { if (tag instanceof DefineSpriteTag) { DefineSpriteTag spriteTag = (DefineSpriteTag) tag; List existingFilesForSpriteTag = new ArrayList<>(); - + List classNameExpectedFileNames = new ArrayList<>(); for (String className : spriteTag.getClassNames()) { - classNameExpectedFileNames.add(Helper.makeFileName(className)); + classNameExpectedFileNames.add(Helper.makeFileName(className)); } - + for (File f : allFiles) { if (f.getName().startsWith("" + characterId + ".") || f.getName().startsWith("" + characterId + "_")) { existingFilesForSpriteTag.add(f); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/amf/amf3/Amf3Importer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/amf/amf3/Amf3Importer.java index fe0e6fc66..776801bf2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/amf/amf3/Amf3Importer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/amf/amf3/Amf3Importer.java @@ -164,7 +164,7 @@ public class Amf3Importer { public JsObject getJsObject(Object key) throws Amf3ParseException { return (JsObject) getRequired(key, "JsObject"); - } + } public List getJsArrayOfObject(Object key) throws Amf3ParseException { return getJsArray(key).getValues(); @@ -190,7 +190,7 @@ public class Amf3Importer { public List getJsArrayOfNumber(Object key) throws Amf3ParseException { return (List) getJsArray(key, "Number"); } - + public JsArray getJsArray(Object key) throws Amf3ParseException { return (JsArray) getRequired(key, "JsArray"); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/MorphShapeGenerator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/MorphShapeGenerator.java index c9ceb17e5..7129b8c67 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/MorphShapeGenerator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/MorphShapeGenerator.java @@ -47,9 +47,9 @@ import java.util.Set; public class MorphShapeGenerator { public void generate(DefineMorphShape2Tag morphShape, ShapeTag startShape, ShapeTag endShape) throws StyleMismatchException { - + SWF swf = morphShape.getSwf(); - + ShapeForMorphExporter startExport = new ShapeForMorphExporter(startShape); startExport.export(); ShapeForMorphExporter endExport = new ShapeForMorphExporter(endShape); @@ -64,12 +64,12 @@ public class MorphShapeGenerator { List endFillStyles = new ArrayList<>(); List endLineStyles = new ArrayList<>(); - + Set usedBs = new HashSet<>(); List startShapeIndices = new ArrayList<>(); List endShapeIndices = new ArrayList<>(); - + for (int a = 0; a < startExport.shapes.size(); a++) { double minDistance = Double.MAX_VALUE; double minDistanceNoUsed = Double.MAX_VALUE; @@ -112,13 +112,13 @@ public class MorphShapeGenerator { } if (selectedBNoUsed != -1) { selectedB = selectedBNoUsed; - } + } startShapeIndices.add(a); endShapeIndices.add(selectedB); usedBs.add(selectedB); - } + } - if (usedBs.size() < endExport.shapes.size()) { + if (usedBs.size() < endExport.shapes.size()) { for (int b = 0; b < endExport.shapes.size(); b++) { if (!usedBs.contains(b)) { @@ -153,26 +153,26 @@ public class MorphShapeGenerator { } if (selectedA == -1) { throw new StyleMismatchException(); - } + } startShapeIndices.add(selectedA); endShapeIndices.add(b); } - } + } } for (int i = 0; i < startShapeIndices.size(); i++) { int a = startShapeIndices.get(i); int b = endShapeIndices.get(i); - + List shapeStart = Helper.deepCopy(startExport.shapes.get(a)); split(shapeStart, startExport.pointsPosPercent.get(a), endExport.pointsPosPercent.get(b)); List shapeEnd = Helper.deepCopy(endExport.shapes.get(b)); split(shapeEnd, endExport.pointsPosPercent.get(b), startExport.pointsPosPercent.get(a)); - + startBeziers.add(shapeStart); endBeziers.add(shapeEnd); - + if (startExport.fillStyleIndices.get(a) != -1) { startFillStyles.add(startExport.fillStyles.get(startExport.fillStyleIndices.get(a))); } @@ -187,10 +187,9 @@ public class MorphShapeGenerator { } if (endExport.lineStyleIndices.get(b) != -1) { endLineStyles.add(endExport.lineStyles.get(endExport.lineStyleIndices.get(b))); - } + } } - - + List startRecords = new ArrayList<>(); List endRecords = new ArrayList<>(); @@ -209,7 +208,7 @@ public class MorphShapeGenerator { } morphFillStyleArray.fillStyles[i] = morphFillStyle; } - + for (int i = 0; i < endFillStyles.size(); i++) { FILLSTYLE fsStart = startFillStyles.get(i); FILLSTYLE fsEnd = endFillStyles.get(i); @@ -233,10 +232,10 @@ public class MorphShapeGenerator { morphShape.usesScalingStrokes = true; } } - + for (int i = 0; i < startLineStyles.size(); i++) { LINESTYLE2 lsStart = startLineStyles.get(i); - LINESTYLE2 lsEnd = endLineStyles.get(i); + LINESTYLE2 lsEnd = endLineStyles.get(i); if (lsEnd.hasFillFlag && lsEnd.fillType.hasBitmap() && lsStart.fillType.bitmapId != lsEnd.fillType.bitmapId) { swf.removeTag(swf.getImage(lsEnd.fillType.bitmapId)); } @@ -303,10 +302,10 @@ public class MorphShapeGenerator { morphShape.setModified(true); morphShape.updateBounds(); } - + private void split(List shape, List originalPointsPosPercent, List newPointPosPercent) { List pointPointsPercent = new ArrayList<>(originalPointsPosPercent); - + int nppPos = 0; for (int i = 0; i < shape.size() && nppPos < newPointPosPercent.size(); i++) { BezierEdge be = shape.get(i); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/ShapeForMorphExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/ShapeForMorphExporter.java index 9bfc2ab76..d868c89c9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/ShapeForMorphExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/ShapeForMorphExporter.java @@ -54,7 +54,7 @@ public class ShapeForMorphExporter extends ShapeExporterBase { private int currentSegmentCount = 0; private int currentLineStyle = -1; private int currentFillStyle = -1; - + public List fillStyles = new ArrayList<>(); public List lineStyles = new ArrayList<>(); @@ -128,7 +128,7 @@ public class ShapeForMorphExporter extends ShapeExporterBase { } } } - + if (w > 0) { //clockwise } else { @@ -385,7 +385,7 @@ public class ShapeForMorphExporter extends ShapeExporterBase { return; } BezierEdge be = new BezierEdge(lastX, lastY, x, y); - + currentPointsSum.x += x; // - lastX; currentPointsSum.y += y; // - lastY; @@ -399,27 +399,27 @@ public class ShapeForMorphExporter extends ShapeExporterBase { @Override public void curveTo(double controlX, double controlY, double anchorX, double anchorY) { - + if (anchorX == lastX && anchorY == lastY) { return; } - + BezierEdge be = new BezierEdge(lastX, lastY, controlX, controlY, anchorX, anchorY); currentShape.add(be); - + currentPointsSum.x += anchorX; // - lastX; currentPointsSum.y += anchorY; // - lastY; - + lastX = anchorX; lastY = anchorY; currentBezierLengths.add(be.length()); - + currentSegmentCount++; } private double roundPct(double pct) { double precision = 1000000d; return Math.round(pct * precision) / precision; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/StyleMismatchException.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/StyleMismatchException.java index 01fbfe264..64134293e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/StyleMismatchException.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/morphshape/StyleMismatchException.java @@ -21,5 +21,5 @@ package com.jpexs.decompiler.flash.importers.morphshape; * @author JPEXS */ public class StyleMismatchException extends Exception { - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgBitmapFill.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgBitmapFill.java index 682e8fbaa..53b917147 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgBitmapFill.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgBitmapFill.java @@ -27,7 +27,7 @@ class SvgBitmapFill extends SvgFill { public String patternTransform; public int characterId; - + public boolean smoothed = true; @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java index ca4b9a3ce..0cc7021a3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java @@ -249,11 +249,9 @@ public class SvgImporter { } processSvgObject(idMap, shapeNum, shapes, rootElement, transform, style, morphShape, cachedBitmaps, false); - if ( - rootElement.hasAttribute("ffdec:objectType") + if (rootElement.hasAttribute("ffdec:objectType") && "morphshape".equals(rootElement.getAttribute("ffdec:objectType")) - && applyAnimation(rootElement) - ) { + && applyAnimation(rootElement)) { processSvgObject(idMap, shapeNum, shapes2, rootElement, transform, style, morphShape, cachedBitmaps, true); } } catch (SAXException | IOException | ParserConfigurationException ex) { @@ -307,13 +305,12 @@ public class SvgImporter { } } } else if ("animateTransform".equals(childElement.getTagName())) { - if (childElement.hasAttribute("attributeName") + if (childElement.hasAttribute("attributeName") && childElement.hasAttribute("type") - && (childElement.hasAttribute("to") || childElement.hasAttribute("values")) - ) { + && (childElement.hasAttribute("to") || childElement.hasAttribute("values"))) { String type = childElement.getAttribute("type"); String additive = childElement.hasAttribute("additive") ? childElement.getAttribute("additive") : "replace"; - String attributeName = childElement.getAttribute("attributeName"); + String attributeName = childElement.getAttribute("attributeName"); Matrix originalMatrix = Matrix.parseSvgMatrix(element.getAttribute(attributeName), 1, 1); String to = ""; if (childElement.hasAttribute("values") && childElement.getAttribute("values").contains(";")) { @@ -322,12 +319,12 @@ public class SvgImporter { to = childElement.getAttribute("to"); } String[] toParts = Matrix.parseSvgNumberList(to); - + Matrix newMatrix = null; switch (type) { case "scale": double scaleX; - double scaleY; + double scaleY; if (toParts.length == 2) { scaleX = parseNumber(toParts[0]); scaleY = parseNumber(toParts[1]); @@ -336,7 +333,7 @@ public class SvgImporter { scaleY = scaleX; } else { break; - } + } newMatrix = Matrix.getScaleInstance(scaleX, scaleY); break; case "translate": @@ -369,7 +366,7 @@ public class SvgImporter { double skewYAngle = parseNumber(toParts[0]); newMatrix = Matrix.getSkewYInstance(skewYAngle); } - break; + break; } if (newMatrix != null) { if ("replace".equals(additive)) { @@ -557,7 +554,7 @@ public class SvgImporter { private void processCommands(int shapeNum, SHAPEWITHSTYLE shapes, List commands, Matrix transform, SvgStyle style, boolean morphShape, boolean shape2) { if ("nonzero".equals(style.getFillRule())) { - SvgFill fill = style.getFill(); + SvgFill fill = style.getFill(); if (fill != null && !(fill instanceof SvgTransparentFill)) { if (!shape2 && (shapeTag instanceof DefineShape4Tag)) { DefineShape4Tag shape4 = (DefineShape4Tag) shapeTag; @@ -1711,7 +1708,7 @@ public class SvgImporter { } return Math.atan2(dy, dx); } - + private void applyFillGradients(SvgFill fill, FILLSTYLE fillStyle, RECT bounds, StyleChangeRecord scr, Matrix transform, int shapeNum, SvgStyle style) { if (fill == null || fillStyle == null) { return; @@ -1719,7 +1716,7 @@ public class SvgImporter { if (fill instanceof SvgGradient) { SvgGradient gfill = (SvgGradient) fill; Matrix gradientMatrix = Matrix.parseSvgMatrix(gfill.gradientTransform, SWF.unitDivisor, 1); - gradientMatrix = transform.concatenate(Matrix.getScaleInstance(1 / SWF.unitDivisor)).concatenate(gradientMatrix); + gradientMatrix = transform.concatenate(Matrix.getScaleInstance(1 / SWF.unitDivisor)).concatenate(gradientMatrix); fillStyle.gradientMatrix = gradientMatrix.toMATRIX(); if (fill instanceof SvgLinearGradient) { SvgLinearGradient lgfill = (SvgLinearGradient) fill; @@ -1739,7 +1736,7 @@ public class SvgImporter { xyMatrix.scaleY = xyMatrix.scaleX; Matrix gmatrix = new Matrix(); - + gmatrix.scaleX = (bounds.Xmax - bounds.Xmin) / SWF.unitDivisor; gmatrix.rotateSkew0 = 0; gmatrix.rotateSkew1 = 0; @@ -1748,30 +1745,29 @@ public class SvgImporter { gmatrix.translateY = bounds.Ymin; x1 *= bounds.getWidth(); y1 *= bounds.getHeight(); - + Matrix zeroStartMatrix = Matrix.getTranslateInstance(0.5, 0); Matrix scaleMatrix = Matrix.getScaleInstance(1 / 16384.0 / 2); Matrix transMatrix = Matrix.getTranslateInstance(x1, y1); - tMatrix = tMatrix.concatenate(transMatrix) - .concatenate(gmatrix) - .concatenate(xyMatrix) - .concatenate(zeroStartMatrix) - .concatenate(scaleMatrix); + .concatenate(gmatrix) + .concatenate(xyMatrix) + .concatenate(zeroStartMatrix) + .concatenate(scaleMatrix); } else { x1 *= SWF.unitDivisor; y1 *= SWF.unitDivisor; x2 *= SWF.unitDivisor; y2 *= SWF.unitDivisor; - + Point a = new Point(-16384.0, 0.0); Point b = new Point(16384.0, 0.0); Point c = new Point(x1, y1); Point d = new Point(x2, y2); - - if (!(a.equals(c) && b.equals(d))) { + + if (!(a.equals(c) && b.equals(d))) { double AdeltaX = b.x - a.x; double AdeltaY = b.y - a.y; @@ -1790,10 +1786,9 @@ public class SvgImporter { .concatenate(Matrix.getTranslateInstance(c.x, c.y)) .concatenate(Matrix.getRotateInstance(rotation * 180 / Math.PI)) .concatenate(Matrix.getScaleInstance(scale)) - .concatenate(Matrix.getTranslateInstance(-a.x, -a.y)) - ; + .concatenate(Matrix.getTranslateInstance(-a.x, -a.y)); } - } + } fillStyle.gradientMatrix = tMatrix.toMATRIX(); } else if (fill instanceof SvgRadialGradient) { SvgRadialGradient rgfill = (SvgRadialGradient) fill; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyle.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyle.java index bd9900c52..6b12a5789 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyle.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyle.java @@ -46,7 +46,7 @@ class SvgStyle { private final SvgImporter importer; private final Map idMap; - + private final Map cachedBitmaps; private final double epsilon = 0.001; @@ -171,7 +171,7 @@ class SvgStyle { public double getFillOpacity() { return getValue(element, "fill-opacity"); } - + public String getFillRule() { return getValue(element, "fill-rule"); } @@ -211,7 +211,7 @@ class SvgStyle { public double getStopOpacity() { return getValue(element, "stop-opacity"); } - + public String getVectorEffect() { return getValue(element, "vector-effect"); } @@ -563,7 +563,7 @@ class SvgStyle { if (mPat.matches()) { String elementId = mPat.group(1); - Element e = idMap.get(elementId); + Element e = idMap.get(elementId); if (e != null) { if (cachedBitmaps.containsKey(elementId)) { SvgBitmapFill bitmapFill = new SvgBitmapFill(); @@ -583,9 +583,9 @@ class SvgStyle { } else { bitmapFill.smoothed = true; } - return bitmapFill; + return bitmapFill; } - + String tagName = e.getTagName(); if ("linearGradient".equals(tagName)) { SvgFill ret = parseGradient(idMap, e); @@ -602,14 +602,14 @@ class SvgStyle { NodeList childNodes = e.getChildNodes(); for (int i = 0; i < childNodes.getLength(); i++) { if (childNodes.item(i) instanceof Element) { - + if ("animateTransform".equals(((Element) childNodes.item(i)).getTagName())) { continue; } - - if (element != null) { + + if (element != null) { element = null; - break; + break; } element = (Element) childNodes.item(i); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/css/CssSelectorToXPath.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/css/CssSelectorToXPath.java index ccbd6ae1f..cc8a11933 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/css/CssSelectorToXPath.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/css/CssSelectorToXPath.java @@ -476,7 +476,7 @@ public class CssSelectorToXPath { if (depth == 0) { return ++i + offset; } - //fallthrough (?) + //fallthrough (?) default: offset = 0; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/BezierEdge.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/BezierEdge.java index e1cffc59e..da56cc071 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/BezierEdge.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/BezierEdge.java @@ -35,22 +35,22 @@ import java.util.Stack; public class BezierEdge implements Serializable { public List points = new ArrayList<>(3); - + private List revPoints = new ArrayList<>(); - + private int hash; - + private int revHash; - + private Rectangle2D bbox; private boolean empty; - + public BezierEdge(List points) { this.points = points; calcParams(); } - + @Override public BezierEdge clone() { return new BezierEdge(new ArrayList<>(points)); @@ -127,17 +127,15 @@ public class BezierEdge implements Serializable { } } - - this.bbox = new Rectangle2D.Double(minX, minY, maxX - minX, maxY - minY); + this.bbox = new Rectangle2D.Double(minX, minY, maxX - minX, maxY - minY); this.hash = points.hashCode(); - + revPoints = new ArrayList<>(); for (int i = points.size() - 1; i >= 0; i--) { revPoints.add(points.get(i)); } this.revHash = revPoints.hashCode(); - - + empty = true; Point2D p1 = getBeginPoint(); for (int i = 1; i < points.size(); i++) { @@ -147,7 +145,7 @@ public class BezierEdge implements Serializable { } } } - + public Rectangle2D bbox() { return bbox; } @@ -398,7 +396,7 @@ public class BezierEdge implements Serializable { right.setVal(new BezierEdge(rightPoints)); } - public BezierEdge reverse() { + public BezierEdge reverse() { return new BezierEdge(revPoints); } @@ -430,7 +428,7 @@ public class BezierEdge implements Serializable { } @Override - public boolean equals(Object obj) { + public boolean equals(Object obj) { if (this == obj) { return true; } @@ -446,7 +444,7 @@ public class BezierEdge implements Serializable { } return Objects.equals(this.points, other.points); } - + public boolean equalsReverse(BezierEdge other) { if (hash != other.revHash) { return false; @@ -538,8 +536,8 @@ public class BezierEdge implements Serializable { System.err.println("t1 is " + t1); System.err.println("t2 is " + t2); System.err.println("intersections is " + ps); -*/ - /*Shape r1 = new Rectangle2D.Double(0, 0, 200, 100); + */ + /*Shape r1 = new Rectangle2D.Double(0, 0, 200, 100); GeneralPath r2 = new GeneralPath(GeneralPath.WIND_EVEN_ODD); r2.moveTo(0, 0); r2.lineTo(100, 0); @@ -573,9 +571,8 @@ public class BezierEdge implements Serializable { //a1.exclusiveOr(a2); - */ - - /*GeneralPath p1 = new GeneralPath(GeneralPath.WIND_EVEN_ODD); + */ + /*GeneralPath p1 = new GeneralPath(GeneralPath.WIND_EVEN_ODD); p1.moveTo(0, 0); p1.lineTo(200, 0); p1.lineTo(200, 200); @@ -590,10 +587,8 @@ public class BezierEdge implements Serializable { p1.closePath(); System.err.println("cont:" + p1.contains(100, 100)); - System.err.println("cont:" + p1.contains(150, 150)); */ - + System.err.println("cont:" + p1.contains(150, 150)); */ //System.err.println("minDist = " + minDist+", maxDist = "+ maxDist); - //System.err.println("eArea = " + Areas.calcArea(a1)); /*Point2D c = new Point2D.Double( diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/Distances.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/Distances.java index 69d8e6851..b0bc03715 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/Distances.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/Distances.java @@ -28,12 +28,13 @@ import java.util.List; * @author JPEXS */ public class Distances { + public static double getBatchDistance(List batch1, List batch2) { Area a1 = batchToArea(batch1); Area a2 = batchToArea(batch2); return areaDist(a1, a2); } - + private static Area batchToArea(List batch) { GeneralPath path = new GeneralPath(GeneralPath.WIND_EVEN_ODD); if (batch.isEmpty()) { @@ -53,7 +54,7 @@ public class Distances { path.closePath(); return new Area(path); } - + private static double areaDist(Area a1, Area a2) { List points1 = getAreaPoints(a1); List points2 = getAreaPoints(a2); @@ -76,7 +77,7 @@ public class Distances { } return maxDist; } - + private static List getAreaPoints(Area area) { double F = 1.0; List points = new ArrayList<>(); @@ -110,13 +111,13 @@ public class Distances { for (int d = 1; d <= divisor; d++) { Point2D p2 = new Point2D.Double(xPrev + d * dx / divisor, yPrev + d * dy / divisor); points.add(p2); - } + } //points.add(np); //System.err.println("dx, dy: "+dx+", "+dy); break; case PathIterator.SEG_CLOSE: - - break; + + break; default: throw new RuntimeException("Curved edge not expected"); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/Intersections.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/Intersections.java index 7fc6315d2..3c25cd243 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/Intersections.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/math/Intersections.java @@ -166,7 +166,6 @@ public class Intersections { return intersectPolylinePolyline(a, b); } - public static boolean rectIntersection(Rectangle2D r1, Rectangle2D r2) { double xmin = Math.max(r1.getX(), r2.getX()); double xmax1 = r1.getX() + r1.getWidth(); @@ -183,8 +182,8 @@ public class Intersections { } return false; } - - public static Rectangle2D getBBox(Point2D ...points) { + + public static Rectangle2D getBBox(Point2D... points) { double minX = Double.MAX_VALUE; double minY = Double.MAX_VALUE; double maxX = -Double.MAX_VALUE; @@ -206,8 +205,8 @@ public class Intersections { return new Rectangle2D.Double(minX, minY, maxX - minX, maxY - minY); } - - public static List intersectBezier2Bezier2(Point2D a1, Point2D a2, Point2D a3, Point2D b1, Point2D b2, Point2D b3) { + + public static List intersectBezier2Bezier2(Point2D a1, Point2D a2, Point2D a3, Point2D b1, Point2D b2, Point2D b3) { Point2D pa; Point2D pb; List result = new ArrayList<>(); @@ -259,7 +258,7 @@ public class Intersections { Samples where this happens: M 6369 13040 Q 6380 13030 6427 13018 and M 6338 13099 Q 6358 13050 6369 13040 M 6369 13040 Q 6380 13030 6427 13018 and M 6338 13099 Q 6358 13050 6369 13040 - */ + */ roots = new ArrayList<>(); } for (double s : roots) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/HarmanAirPacker.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/HarmanAirPacker.java index 2fabb7671..52fe58fca 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/HarmanAirPacker.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/HarmanAirPacker.java @@ -43,7 +43,7 @@ public class HarmanAirPacker implements Packer { return false; } return null; - } + } @Override public boolean decrypt(InputStream is, OutputStream os) throws IOException { @@ -75,5 +75,5 @@ public class HarmanAirPacker implements Packer { @Override public String getIdentifier() { return "harmanair"; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/MochiCryptPacker16Bit.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/MochiCryptPacker16Bit.java index 5f3fd28f7..15d185672 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/MochiCryptPacker16Bit.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/MochiCryptPacker16Bit.java @@ -51,7 +51,7 @@ public class MochiCryptPacker16Bit implements Packer { } catch (IOException ex) { return false; } - + return true; } @@ -131,5 +131,5 @@ public class MochiCryptPacker16Bit implements Packer { @Override public String getIdentifier() { return "mochicrypt16"; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/MochiCryptPacker32Bit.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/MochiCryptPacker32Bit.java index f73d2daa7..2dcf74213 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/MochiCryptPacker32Bit.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/MochiCryptPacker32Bit.java @@ -51,7 +51,7 @@ public class MochiCryptPacker32Bit implements Packer { } catch (IOException ex) { return false; } - + return true; } @@ -131,5 +131,5 @@ public class MochiCryptPacker32Bit implements Packer { @Override public String getIdentifier() { return "mochicrypt32"; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/Packer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/Packer.java index 234c293d6..f9ec5949a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/Packer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/packers/Packer.java @@ -37,7 +37,7 @@ public interface Packer { * work */ public Boolean suitableForBinaryData(DefineBinaryDataTag dataTag); - + /** * Is this data packed with this packer? * @@ -75,6 +75,6 @@ public interface Packer { * @return */ public String getName(); - + public String getIdentifier(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMTextSettingsTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMTextSettingsTag.java index efa57d8a5..9e3e756f6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMTextSettingsTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/CSMTextSettingsTag.java @@ -121,15 +121,13 @@ public class CSMTextSettingsTag extends Tag implements CharacterIdTag { public void setCharacterId(int characterId) { this.textID = characterId; } - + @Override public Map getNameProperties() { Map ret = super.getNameProperties(); ret.put("tid", "" + textID); return ret; } - - @Override public void getNeededCharacters(Set needed, SWF swf) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBinaryDataTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBinaryDataTag.java index 552ef2ac7..2d9af27d7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBinaryDataTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBinaryDataTag.java @@ -67,7 +67,7 @@ public class DefineBinaryDataTag extends CharacterTag implements BinaryDataInter @Internal public Packer usedPacker; - + @Internal private PackedBinaryData sub; @@ -80,7 +80,7 @@ public class DefineBinaryDataTag extends CharacterTag implements BinaryDataInter public static Packer[] getAvailablePackers() { return PACKERS; } - + /** * Constructor * @@ -100,7 +100,7 @@ public class DefineBinaryDataTag extends CharacterTag implements BinaryDataInter public PackedBinaryData getSub() { return sub; } - + @Override public boolean unpack(Packer packer) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -115,7 +115,7 @@ public class DefineBinaryDataTag extends CharacterTag implements BinaryDataInter usedPacker = packer; return true; } - + @Override public final void readData(SWFInputStream sis, ByteArrayRange data, int level, boolean parallel, boolean skipUnusualTags, boolean lazy) throws IOException { tag = sis.readUI16("tag"); @@ -212,7 +212,7 @@ public class DefineBinaryDataTag extends CharacterTag implements BinaryDataInter @Override public Packer getUsedPacker() { return usedPacker; - } + } @Override public void setDataBytes(ByteArrayRange data) { @@ -223,7 +223,7 @@ public class DefineBinaryDataTag extends CharacterTag implements BinaryDataInter public ByteArrayRange getDataBytes() { return binaryData; } - + @Override public boolean pack() { if (sub == null) { @@ -241,7 +241,7 @@ public class DefineBinaryDataTag extends CharacterTag implements BinaryDataInter setDataBytes(new ByteArrayRange(baos.toByteArray())); return true; } - + @Override public void setInnerSwf(SWF swf) { this.innerSwf = swf; @@ -255,17 +255,17 @@ public class DefineBinaryDataTag extends CharacterTag implements BinaryDataInter @Override public String getPathIdentifier() { return "DefineBinaryData (" + getCharacterId() + ")"; - } + } @Override public String getStoragesPathIdentifier() { return "binaryData[" + getCharacterId() + "]"; - } + } @Override public BinaryDataInterface getTopLevelBinaryData() { return this; - } + } @Override public void setModified(boolean value) { @@ -275,7 +275,7 @@ public class DefineBinaryDataTag extends CharacterTag implements BinaryDataInter sub.setModified(false); } } - } + } @Override public String getClassExportFileName(String className) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonCxformTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonCxformTag.java index ad923bf4a..c3ad23b2a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonCxformTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonCxformTag.java @@ -94,7 +94,7 @@ public class DefineButtonCxformTag extends Tag implements CharacterIdTag { public void setCharacterId(int characterId) { this.buttonId = characterId; } - + @Override public Map getNameProperties() { Map ret = super.getNameProperties(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonSoundTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonSoundTag.java index 2e757312f..af55007e9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonSoundTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonSoundTag.java @@ -159,7 +159,6 @@ public class DefineButtonSoundTag extends Tag implements CharacterIdTag { needed.add(buttonId); } - @Override public Map getNameProperties() { Map ret = super.getNameProperties(); @@ -170,7 +169,7 @@ public class DefineButtonSoundTag extends Tag implements CharacterIdTag { @Override public boolean removeCharacter(int characterId) { boolean modified = false; - + if (buttonSoundChar0 == characterId) { buttonSoundChar0 = 0; buttonSoundInfo0 = null; @@ -191,7 +190,7 @@ public class DefineButtonSoundTag extends Tag implements CharacterIdTag { buttonSoundInfo3 = null; modified = true; } - + if (modified) { setModified(true); } @@ -201,11 +200,11 @@ public class DefineButtonSoundTag extends Tag implements CharacterIdTag { @Override public boolean replaceCharacter(int oldCharacterId, int newCharacterId) { boolean modified = false; - + if (buttonId == oldCharacterId) { buttonId = newCharacterId; modified = true; - } + } if (buttonSoundChar0 == oldCharacterId) { buttonSoundChar0 = newCharacterId; modified = true; @@ -222,10 +221,10 @@ public class DefineButtonSoundTag extends Tag implements CharacterIdTag { buttonSoundChar3 = newCharacterId; modified = true; } - + if (modified) { setModified(true); } return modified; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java index 16eff1b2f..dbc65bf47 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java @@ -416,7 +416,7 @@ public class DefineEditTextTag extends TextTag { case "b": style = style.clone(); style.bold = true; - styles.add(style); + styles.add(style); break; case "i": style = style.clone(); @@ -441,33 +441,33 @@ public class DefineEditTextTag extends TextTag { char firstChar = size.charAt(0); if (firstChar != '+' && firstChar != '-') { int fontSize = Integer.parseInt(size); - style.fontHeight = (int) Math.round(fontSize * SWF.unitDivisor); + style.fontHeight = (int) Math.round(fontSize * SWF.unitDivisor); } else { int fontSizeDelta = (int) Math.round(Integer.parseInt(size.substring(1)) * SWF.unitDivisor); if (firstChar == '+') { style.fontHeight = style.fontHeight + fontSizeDelta; } else { style.fontHeight = style.fontHeight - fontSizeDelta; - } + } } style.fontLeading = leading; } String face = unescape(attributes.getValue("face")); - + if (face != null && face.length() > 0) { - style.fontFace = face; + style.fontFace = face; } - + String letterspacing = unescape(attributes.getValue("letterSpacing")); if (letterspacing != null && letterspacing.length() > 0) { style.letterSpacing = Double.parseDouble(letterspacing); } - + String kerning = unescape(attributes.getValue("kerning")); if (kerning != null && kerning.length() > 0) { style.kerning = kerning.equals("1"); } - + styles.add(style); break; case "br": @@ -1018,7 +1018,7 @@ public class DefineEditTextTag extends TextTag { } @Override - public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) { + public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) { render(TextRenderMode.SVG, null, exporter, null, new Matrix(), colorTransform, 1); } @@ -1122,16 +1122,16 @@ public class DefineEditTextTag extends TextTag { } textModel.calculateTextWidths(); - + Set noIndentLineIndices = new HashSet<>(); - + List> lines; if (multiline && wordWrap) { lines = new ArrayList<>(); for (Paragraph paragraph : textModel.paragraphs) { List line = new ArrayList<>(); int lineLength = 0; - for (Word word : paragraph.words) { + for (Word word : paragraph.words) { int indentVal = noIndentLineIndices.contains(lines.size()) ? 0 : indent; int maxLineWidth = bounds.getWidth() - leftMargin - indentVal; if (word.width > maxLineWidth) { @@ -1143,11 +1143,11 @@ public class DefineEditTextTag extends TextTag { int ga = gc.glyphEntry.glyphAdvance; indentVal = noIndentLineIndices.contains(lines.size()) ? 0 : indent; maxLineWidth = bounds.getWidth() - leftMargin - indentVal; - if (lineLength + ga > maxLineWidth) { + if (lineLength + ga > maxLineWidth) { recs.add(rec); line.addAll(recs); - lines.add(line); - + lines.add(line); + recs = new ArrayList<>(); SameStyleTextRecord rec2 = new SameStyleTextRecord(); rec2.style = rec.style.clone(); @@ -1156,27 +1156,27 @@ public class DefineEditTextTag extends TextTag { for (int g2 = g; g2 < glen; g2++) { rec2.glyphEntries.add(rec.glyphEntries.remove(g)); } - rec2.calculateTextWidths(); + rec2.calculateTextWidths(); rec.calculateTextWidths(); - + rec = rec2; g = 0; - - noIndentLineIndices.add(lines.size()); - line = new ArrayList<>(); - lineLength = 0; + + noIndentLineIndices.add(lines.size()); + line = new ArrayList<>(); + lineLength = 0; } lineLength += ga; - } + } recs.add(rec); } if (!recs.isEmpty()) { - line.addAll(recs); + line.addAll(recs); } } else if (lineLength + word.width <= maxLineWidth) { line.addAll(word.records); lineLength += word.width; - } else { + } else { lines.add(line); noIndentLineIndices.add(lines.size()); line = new ArrayList<>(); @@ -1251,12 +1251,12 @@ public class DefineEditTextTag extends TextTag { firstLine = false; yOffset += currentOffset; int alignOffset = 0; - + int currentIndent = 0; if (!noIndentLineIndices.contains(k)) { currentIndent = indent; } - + switch (align) { case ALIGN_LEFT: alignOffset = 0; @@ -1270,7 +1270,7 @@ public class DefineEditTextTag extends TextTag { case ALIGN_JUSTIFY: // todo; break; - } + } for (SameStyleTextRecord tr : line) { tr.xOffset = alignOffset; alignOffset += tr.width; @@ -1290,9 +1290,9 @@ public class DefineEditTextTag extends TextTag { } if (tr.style.font != null) { fid = swf.getCharacterId(tr.style.font); - } - - tr2.styleFlagsHasFont = fid != 0; + } + + tr2.styleFlagsHasFont = fid != 0; tr2.fontId = fid; tr2.textHeight = tr.style.fontHeight; if (tr.style.textColor != null) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont2Tag.java index e4959da54..81283463f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont2Tag.java @@ -104,10 +104,10 @@ public class DefineFont2Tag extends FontTag { @Internal public long unknownGfx; - + @Internal public boolean strippedShapes = false; - + /** * Constructor * @@ -148,9 +148,9 @@ public class DefineFont2Tag extends FontTag { languageCode = sis.readLANGCODE("languageCode"); fontName = sis.readNetString("fontName"); int numGlyphs = sis.readUI16("numGlyphs"); - + strippedShapes = swf.hasStrippedShapesFromFonts(); - + if (!strippedShapes) { long[] offsetTable = new long[numGlyphs]; long pos = sis.getPos(); @@ -281,7 +281,7 @@ public class DefineFont2Tag extends FontTag { int numGlyphs = glyphShapeTable.size(); sos.writeUI16(numGlyphs); - if (!swf.hasStrippedShapesFromFonts()) { + if (!swf.hasStrippedShapesFromFonts()) { List offsetTable = new ArrayList<>(); ByteArrayOutputStream baosGlyphShapes = new ByteArrayOutputStream(); @@ -297,7 +297,7 @@ public class DefineFont2Tag extends FontTag { } else { sos.writeUI16((int) (long) offset); } - } + } if (numGlyphs > 0 || fontFlagsHasLayout) { long offset = (glyphShapeTable.size() + 1/*CodeTableOffset*/) * (fontFlagsWideOffsets ? 4 : 2) + baGlyphShapes.length; @@ -311,7 +311,7 @@ public class DefineFont2Tag extends FontTag { sos.write(baGlyphShapes); } } else { - sos.writeUI32(unknownGfx); + sos.writeUI32(unknownGfx); } for (int i = 0; i < numGlyphs; i++) { if (fontFlagsWideCodes) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont3Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont3Tag.java index 63b51ebf8..4233a0b52 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont3Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFont3Tag.java @@ -102,10 +102,10 @@ public class DefineFont3Tag extends FontTag { @Conditional("fontFlagsHasLayout") public List fontKerningTable; - + @Internal public long unknownGfx; - + @Internal public boolean strippedShapes = false; @@ -143,7 +143,7 @@ public class DefineFont3Tag extends FontTag { fontName = sis.readNetString("fontName"); int numGlyphs = sis.readUI16("numGlyphs"); strippedShapes = swf.hasStrippedShapesFromFonts(); - + if (!strippedShapes) { long[] offsetTable = new long[numGlyphs]; long pos = sis.getPos(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontAlignZonesTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontAlignZonesTag.java index d5e4d46b5..9cc54b89d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontAlignZonesTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontAlignZonesTag.java @@ -114,7 +114,6 @@ public class DefineFontAlignZonesTag extends Tag implements CharacterIdTag { this.fontID = characterId; } - @Override public Map getNameProperties() { Map ret = super.getNameProperties(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontNameTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontNameTag.java index feaa1b6b1..25089dbe7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontNameTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontNameTag.java @@ -92,7 +92,6 @@ public class DefineFontNameTag extends Tag implements CharacterIdTag { this.fontId = characterId; } - @Override public Map getNameProperties() { Map ret = super.getNameProperties(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java index 9d670e30c..1d6a0ef34 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java @@ -56,10 +56,10 @@ public class DefineFontTag extends FontTag { @Internal private FontInfoTag fontInfoTag = null; - + @Internal public long unknownGfx; - + @Internal public boolean strippedShapes = false; @@ -92,7 +92,7 @@ public class DefineFontTag extends FontTag { glyphShapeTable = new ArrayList<>(); strippedShapes = swf.hasStrippedShapesFromFonts(); - + if (!strippedShapes && sis.available() > 0) { long pos = sis.getPos(); int firstOffset = sis.readUI16("firstOffset"); @@ -136,7 +136,7 @@ public class DefineFontTag extends FontTag { sos.write(baos2.toByteArray()); } else { sos.writeUI32(unknownGfx); - } + } } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java index 212cd20ea..44b22ebc5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java @@ -111,7 +111,7 @@ public class DefineMorphShapeTag extends MorphShapeTag { public int getShapeNum() { return 1; } - + @Override public ShapeTag getShapeTagAtRatio(int ratio) { DefineShape3Tag ret = new DefineShape3Tag(swf); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineScalingGridTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineScalingGridTag.java index 88b6dc8b5..48de7ff36 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineScalingGridTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineScalingGridTag.java @@ -212,7 +212,6 @@ public class DefineScalingGridTag extends Tag implements CharacterIdTag { } } - @Override public Map getNameProperties() { Map ret = super.getNameProperties(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShape2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShape2Tag.java index d41bf83a0..d9ac1d8a3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShape2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShape2Tag.java @@ -87,5 +87,5 @@ public class DefineShape2Tag extends ShapeTag { @Override public int getWindingRule() { return WIND_EVEN_ODD; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShape3Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShape3Tag.java index 442225cf2..d037798f9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShape3Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShape3Tag.java @@ -83,7 +83,7 @@ public class DefineShape3Tag extends ShapeTag { public int getShapeNum() { return 3; } - + @Override public int getWindingRule() { return WIND_EVEN_ODD; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShapeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShapeTag.java index 4322e320e..1f0d5bcbd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShapeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineShapeTag.java @@ -83,7 +83,7 @@ public class DefineShapeTag extends ShapeTag { public int getShapeNum() { return 1; } - + @Override public int getWindingRule() { return WIND_EVEN_ODD; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineSoundTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineSoundTag.java index 0c0228561..5a807aca0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineSoundTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineSoundTag.java @@ -242,33 +242,33 @@ public class DefineSoundTag extends CharacterTag implements SoundTag { public void setSoundRate(int soundRate) { this.soundRate = soundRate; } - + @Override public String getFlaExportName() { return "sound" + getCharacterId(); - } - + } + @Override public int getInitialLatency() { if (soundFormat == SoundFormat.FORMAT_MP3) { SWFInputStream sis; try { sis = new SWFInputStream(null, soundData.getRangeData(0, 2)); - return sis.readSI16("seekSamples"); + return sis.readSI16("seekSamples"); } catch (IOException ex) { //ignore - } + } } return 0; } - + private boolean isMp3HigherThan160Kbps() { if (soundFormat != SoundFormat.FORMAT_MP3) { return false; } try { - SWFInputStream sis = new SWFInputStream(swf, soundData.getRangeData()); - MP3SOUNDDATA s = new MP3SOUNDDATA(sis, false); + SWFInputStream sis = new SWFInputStream(swf, soundData.getRangeData()); + MP3SOUNDDATA s = new MP3SOUNDDATA(sis, false); if (!s.frames.isEmpty()) { MP3FRAME frame = s.frames.get(0); int bitRate = frame.getBitRate() / 1000; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineVideoStreamTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineVideoStreamTag.java index 5e249740a..fae680653 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineVideoStreamTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineVideoStreamTag.java @@ -142,7 +142,7 @@ public class DefineVideoStreamTag extends DrawableTag implements BoundedTag, Tim @Internal private boolean renderingPaused = false; - + public static final int CODEC_JPEG = 1; public static final int CODEC_SORENSON_H263 = 2; public static final int CODEC_SCREEN_VIDEO = 3; @@ -277,7 +277,7 @@ public class DefineVideoStreamTag extends DrawableTag implements BoundedTag, Tim private void initPlayer() { if (mediaPlayer != null) { // && !mediaPlayer.isFinished()) { return; - } + } MovieExporter exp = new MovieExporter(); try { byte[] data = exp.exportMovie(this, MovieExportMode.FLV, true); @@ -286,7 +286,7 @@ public class DefineVideoStreamTag extends DrawableTag implements BoundedTag, Tim } File tempFile = File.createTempFile("ffdec_video", ".flv"); Helper.writeFile(tempFile.getAbsolutePath(), data); - + mediaPlayer = new SimpleMediaPlayer(); players.add(mediaPlayer); mediaPlayer.addFrameListener(new FrameListener() { @@ -335,7 +335,7 @@ public class DefineVideoStreamTag extends DrawableTag implements BoundedTag, Tim @Override public synchronized void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, SerializableImage fullImage, boolean isClip, Matrix transformation, Matrix prevTransformation, Matrix absoluteTransformation, Matrix fullTransformation, ColorTransform colorTransform, double unzoom, boolean sameImage, ExportRectangle viewRect, boolean scaleStrokes, int drawMode, int blendMode, boolean canUseSmoothing) { - + if (renderingPaused || !SimpleMediaPlayer.isAvailable()) { Graphics2D g = (Graphics2D) image.getBufferedImage().getGraphics(); Matrix mat = transformation; @@ -370,7 +370,7 @@ public class DefineVideoStreamTag extends DrawableTag implements BoundedTag, Tim synchronized (DefineVideoStreamTag.class) { if (!(activeFrame != null && lastFrame == f)) { initPlayer(); - + if (mediaPlayer == null) { return; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoABC2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoABC2Tag.java index b35306aa0..eccde6230 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoABC2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoABC2Tag.java @@ -117,7 +117,7 @@ public class DoABC2Tag extends Tag implements ABCContainerTag { public ABC getABC() { return abc; } - + @Override public Map getNameProperties() { Map ret = super.getNameProperties(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java index e636b1c24..dec58131c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java @@ -61,7 +61,7 @@ public class DoActionTag extends Tag implements ASMSource { @Internal private String scriptName = "-"; - + @Internal private String exportedScriptName = "-"; @@ -261,12 +261,12 @@ public class DoActionTag extends Tag implements ASMSource { return new ArrayList<>(); } } - + @Override public String getExportedScriptName() { return exportedScriptName; } - + @Override public void setExportedScriptName(String scriptName) { this.exportedScriptName = scriptName; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java index 3d3e4508a..a0917413c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java @@ -69,7 +69,7 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { @Internal private String scriptName = "-"; - + @Internal private String exportedScriptName = "-"; @@ -237,14 +237,13 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { return pathParts[pathParts.length - 1]; } - @Override public Map getNameProperties() { String expName = swf == null ? "" : swf.getExportName(spriteId); - + Map ret = super.getNameProperties(); ret.put("sid", "" + spriteId); - + if (expName == null || expName.isEmpty()) { return ret; } @@ -252,7 +251,7 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { //ret.put("exp", pathParts[pathParts.length - 1]); ret.put("exp", expName); return ret; - } + } @Override public GraphTextWriter getActionSourcePrefix(GraphTextWriter writer) { @@ -302,12 +301,12 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { return new ArrayList<>(); } } - + @Override public String getExportedScriptName() { return exportedScriptName; } - + @Override public void setExportedScriptName(String scriptName) { this.exportedScriptName = scriptName; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java index 5d3518d9c..553623028 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/ExportAssetsTag.java @@ -155,8 +155,6 @@ public class ExportAssetsTag extends SymbolClassTypeTag { needed.addAll(tags); } - - @Override public Map getNameProperties() { Map ret = super.getNameProperties(); @@ -165,6 +163,6 @@ public class ExportAssetsTag extends SymbolClassTypeTag { ret.put("ex", "" + names.get(0)); } return ret; - } - + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/FrameLabelTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/FrameLabelTag.java index a7188ef1e..6d53411d5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/FrameLabelTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/FrameLabelTag.java @@ -88,7 +88,6 @@ public class FrameLabelTag extends Tag { return namedAnchor; } - @Override public Map getNameProperties() { Map ret = super.getNameProperties(); @@ -96,6 +95,6 @@ public class FrameLabelTag extends Tag { ret.put("name", name); } return ret; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject2Tag.java index 28399b88b..1ae5c7695 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject2Tag.java @@ -478,7 +478,7 @@ public class PlaceObject2Tag extends PlaceObjectTypeTag implements ASMSourceCont public void setPlaceFlagHasMatrix(boolean placeFlagHasMatrix) { this.placeFlagHasMatrix = placeFlagHasMatrix; } - + @Override public void setPlaceFlagMove(boolean placeFlagMove) { this.placeFlagMove = placeFlagMove; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject3Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject3Tag.java index ace277edf..eb4ab4a74 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject3Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject3Tag.java @@ -686,7 +686,7 @@ public class PlaceObject3Tag extends PlaceObjectTypeTag implements ASMSourceCont public void setPlaceFlagMove(boolean placeFlagMove) { this.placeFlagMove = placeFlagMove; } - + @Override public boolean hasImage() { return placeFlagHasImage; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java index 196b1ac6e..47e816625 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObject4Tag.java @@ -707,7 +707,7 @@ public class PlaceObject4Tag extends PlaceObjectTypeTag implements ASMSourceCont public void setPlaceFlagMove(boolean placeFlagMove) { this.placeFlagMove = placeFlagMove; } - + @Override public boolean hasImage() { return placeFlagHasImage; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObjectTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObjectTag.java index 42f830023..ee82fe140 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObjectTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/PlaceObjectTag.java @@ -294,9 +294,9 @@ public class PlaceObjectTag extends PlaceObjectTypeTag { @Override public void setPlaceFlagMove(boolean placeFlagMove) { - + } - + @Override public boolean hasImage() { return false; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SoundStreamHead2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SoundStreamHead2Tag.java index 3dd6ff599..935995ecb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SoundStreamHead2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SoundStreamHead2Tag.java @@ -265,11 +265,11 @@ public class SoundStreamHead2Tag extends SoundStreamHeadTypeTag { ret.put("cid", "" + virtualCharacterId); return ret; } - + @Override public String getUniqueId() { return "" + virtualCharacterId; - } + } //getNeededCharacters intentionally not defined @Override @@ -296,12 +296,12 @@ public class SoundStreamHead2Tag extends SoundStreamHeadTypeTag { public void setSoundRate(int soundRate) { this.streamSoundRate = soundRate; } - + @Override public String getFlaExportName() { return "sound" + getCharacterId(); } - + @Override public int getInitialLatency() { return latencySeek; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SoundStreamHeadTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SoundStreamHeadTag.java index caac5c13a..fdcc4dea7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SoundStreamHeadTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/SoundStreamHeadTag.java @@ -148,7 +148,7 @@ public class SoundStreamHeadTag extends SoundStreamHeadTypeTag { } @Override - public SoundExportFormat getExportFormat() { + public SoundExportFormat getExportFormat() { if (streamSoundCompression == SoundFormat.FORMAT_MP3) { if (getInitialLatency() > 0 || isMp3HigherThan160Kbps()) { return SoundExportFormat.WAV; @@ -278,7 +278,7 @@ public class SoundStreamHeadTag extends SoundStreamHeadTypeTag { @Override public String getUniqueId() { return "" + virtualCharacterId; - } + } //getNeededCharacters intentionally not defined @Override @@ -305,12 +305,12 @@ public class SoundStreamHeadTag extends SoundStreamHeadTypeTag { public void setSoundRate(int soundRate) { this.streamSoundRate = soundRate; } - + @Override public String getFlaExportName() { return "sound" + getCharacterId(); } - + @Override public int getInitialLatency() { return latencySeek; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/StartSound2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/StartSound2Tag.java index 82bc765bf..34df67a09 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/StartSound2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/StartSound2Tag.java @@ -80,7 +80,7 @@ public class StartSound2Tag extends Tag { sos.writeString(soundClassName); sos.writeSOUNDINFO(soundInfo); } - + @Override public Map getNameProperties() { Map ret = super.getNameProperties(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/StartSoundTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/StartSoundTag.java index 98201b431..dcac75708 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/StartSoundTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/StartSoundTag.java @@ -93,11 +93,11 @@ public class StartSoundTag extends Tag implements CharacterIdTag { public void setCharacterId(int characterId) { soundId = characterId; } - + @Override public Map getNameProperties() { Map ret = super.getNameProperties(); ret.put("cid", "" + soundId); return ret; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java index 59be9c2c5..24880568f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java @@ -150,15 +150,15 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { public Map getNameProperties() { return new LinkedHashMap<>(); } - + public String getName() { - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(); sb.append(tagName); - + Map props = getNameProperties(); if (!props.isEmpty()) { sb.append(" ("); - List parts = new ArrayList<>(); + List parts = new ArrayList<>(); for (String key : props.keySet()) { parts.add(key + ": " + props.get(key)); } @@ -478,7 +478,7 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { return originalRange != null && isModified(); } - public void undo() throws InterruptedException, IOException { + public void undo() throws InterruptedException, IOException { if (originalRange == null) { //If the tag is newly created in GUI it has no original data return; } @@ -496,7 +496,7 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { @Override public String toString() { return getName(); - } + } /** * Gets data bytes @@ -790,7 +790,7 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { } return swf.getCharset(); } - + public String getUniqueId() { return null; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/TagStub.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/TagStub.java index 2f8b07791..d433f0459 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/TagStub.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/TagStub.java @@ -73,14 +73,14 @@ public class TagStub extends Tag { public String toString() { return tagName + " [ID = " + id + "]"; } - + @Override - public Map getNameProperties() { + public Map getNameProperties() { Map ret = super.getNameProperties(); Map classes = Tag.getKnownClasses(); if (classes.containsKey(id)) { ret.put("tcl", classes.get(id).getName()); - } + } ret.put("tid", "" + id); return ret; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/UnknownTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/UnknownTag.java index 01d1b2b02..86ea47292 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/UnknownTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/UnknownTag.java @@ -58,7 +58,7 @@ public class UnknownTag extends Tag { public void getData(SWFOutputStream sos) throws IOException { sos.write(unknownData); } - + @Override public Map getNameProperties() { Map ret = super.getNameProperties(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java index e03fbf4c8..8cd41d7e0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java @@ -123,8 +123,8 @@ public interface ASMSource extends Exportable, HasSwfAndTag { public String getScriptName(); public void setScriptName(String scriptName); - + public String getExportedScriptName(); - + public void setExportedScriptName(String scriptName); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/BinaryDataInterface.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/BinaryDataInterface.java index e12e7d5bb..25ce510d1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/BinaryDataInterface.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/BinaryDataInterface.java @@ -35,7 +35,7 @@ public interface BinaryDataInterface extends Exportable { public void detectPacker(); - public Packer getUsedPacker(); + public Packer getUsedPacker(); public void setDataBytes(ByteArrayRange data); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/BoundedTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/BoundedTag.java index 360abaff3..85c41af17 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/BoundedTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/BoundedTag.java @@ -28,6 +28,6 @@ public interface BoundedTag { public RECT getRect(); public RECT getRect(Set added); - - public RECT getRectWithStrokes(); + + public RECT getRectWithStrokes(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonAction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonAction.java index 7f0828544..8ed1d6648 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonAction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ButtonAction.java @@ -45,7 +45,7 @@ public class ButtonAction implements ASMSource { List listeners = new ArrayList<>(); private String scriptName = "-"; - + private String exportedScriptName = "-"; private final DefineButtonTag buttonTag; @@ -229,12 +229,12 @@ public class ButtonAction implements ASMSource { return new ArrayList<>(); } } - + @Override public String getExportedScriptName() { return exportedScriptName; } - + @Override public void setExportedScriptName(String scriptName) { this.exportedScriptName = scriptName; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/CharacterTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/CharacterTag.java index 575a6a6f6..573079c53 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/CharacterTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/CharacterTag.java @@ -48,7 +48,6 @@ public abstract class CharacterTag extends Tag implements CharacterIdTag { classNames.add(className); } - @Override public Map getNameProperties() { Map ret = super.getNameProperties(); @@ -57,13 +56,13 @@ public abstract class CharacterTag extends Tag implements CharacterIdTag { ret.put("chid", "" + chid); } if (exportName != null) { - ret.put ("exp", Helper.escapePCodeString(exportName)); + ret.put("exp", Helper.escapePCodeString(exportName)); } if (!classNames.isEmpty()) { ret.put("cls", Helper.joinEscapePCodeString(", ", classNames)); } return ret; - } + } @Override public String getExportFileName() { @@ -115,5 +114,5 @@ public abstract class CharacterTag extends Tag implements CharacterIdTag { return null; } return "" + getCharacterId(); - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/DepthTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/DepthTag.java index 7551f257d..206c49745 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/DepthTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/DepthTag.java @@ -21,7 +21,8 @@ package com.jpexs.decompiler.flash.tags.base; * @author JPEXS */ public interface DepthTag { + public int getDepth(); - + public void setDepth(int depth); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontInfoTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontInfoTag.java index bcc3bb0e4..41ccff010 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontInfoTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontInfoTag.java @@ -66,7 +66,7 @@ public abstract class FontInfoTag extends Tag implements CharacterIdTag { public abstract boolean isShiftJIS(); public abstract boolean isAnsi(); - + @Override public Map getNameProperties() { Map ret = super.getNameProperties(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java index 7f52960f9..c12d58acb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/FontTag.java @@ -175,7 +175,7 @@ public abstract class FontTag extends DrawableTag implements AloneTag { reload(); } firstLoaded = true; - } + } public boolean hasLayout() { return false; @@ -210,7 +210,7 @@ public abstract class FontTag extends DrawableTag implements AloneTag { } return ret; } - + @Override public String getExportFileName() { String result = super.getExportFileName(); @@ -431,7 +431,7 @@ public abstract class FontTag extends DrawableTag implements AloneTag { @Override public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) { - + } @Override @@ -475,7 +475,7 @@ public abstract class FontTag extends DrawableTag implements AloneTag { public RECT getRect(Set added) { return new RECT(0, (int) (PREVIEWSIZE * SWF.unitDivisor), 0, (int) (PREVIEWSIZE * SWF.unitDivisor)); } - + @Override public RECT getRectWithStrokes() { return getRect(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java index bc06c93f6..3e5f549cc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java @@ -77,7 +77,7 @@ public abstract class MorphShapeTag extends DrawableTag { super(swf, id, name, data); } - public abstract int getShapeNum(); + public abstract int getShapeNum(); @Override public RECT getRectWithStrokes() { @@ -151,7 +151,7 @@ public abstract class MorphShapeTag extends DrawableTag { public void setCharacterId(int characterId) { this.characterId = characterId; } - + @Override public RECT getRect() { return getRect(new HashSet<>()); @@ -189,18 +189,18 @@ public abstract class MorphShapeTag extends DrawableTag { public SHAPE getEndEdges() { return endEdges; - } - + } + public abstract ShapeTag getShapeTagAtRatio(int ratio); - + public ShapeTag getStartShapeTag() { return getShapeTagAtRatio(0); } - + public ShapeTag getEndShapeTag() { return getShapeTagAtRatio(65535); } - + public SHAPEWITHSTYLE getShapeAtRatio(int ratio) { List finalRecords = new ArrayList<>(); FILLSTYLEARRAY fillStyles = morphFillStyles.getFillStylesAt(ratio); @@ -342,7 +342,7 @@ public abstract class MorphShapeTag extends DrawableTag { @Override public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) { - + if (ratio == -2) { SHAPEWITHSTYLE beginShapes = getShapeAtRatio(0); SHAPEWITHSTYLE endShapes = getShapeAtRatio(65535); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/PackedBinaryData.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/PackedBinaryData.java index beeefe9cd..ef1ede7c1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/PackedBinaryData.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/PackedBinaryData.java @@ -48,7 +48,7 @@ public class PackedBinaryData implements TreeItem, BinaryDataInterface { this.parent = parent; this.data = data; } - + @Override public boolean unpack(Packer packer) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -67,12 +67,12 @@ public class PackedBinaryData implements TreeItem, BinaryDataInterface { @Override public PackedBinaryData getSub() { return sub; - } - + } + public BinaryDataInterface getParent() { return parent; - } - + } + @Override public Openable getOpenable() { return swf; @@ -81,25 +81,25 @@ public class PackedBinaryData implements TreeItem, BinaryDataInterface { @Override public SWF getSwf() { return swf; - } - + } + @Override public void setModified(boolean value) { - modified = value; + modified = value; if (value) { - parent.setModified(value); + parent.setModified(value); } else { if (sub != null) { sub.setModified(false); } } } - + @Override public boolean isModified() { return modified; } - + @Override public boolean isSwfData() { try { @@ -114,12 +114,12 @@ public class PackedBinaryData implements TreeItem, BinaryDataInterface { } return false; } - + @Override public Packer getUsedPacker() { return usedPacker; } - + @Override public void detectPacker() { for (Packer packer : DefineBinaryDataTag.getAvailablePackers()) { @@ -133,12 +133,12 @@ public class PackedBinaryData implements TreeItem, BinaryDataInterface { @Override public ByteArrayRange getDataBytes() { return data; - } + } @Override public void setDataBytes(ByteArrayRange data) { this.data = data; - setModified(true); + setModified(true); } @Override @@ -161,7 +161,7 @@ public class PackedBinaryData implements TreeItem, BinaryDataInterface { @Override public String toString() { return "(Data - " + parent.getUsedPacker().getName() + ")"; - } + } @Override public void setInnerSwf(SWF swf) { @@ -190,7 +190,7 @@ public class PackedBinaryData implements TreeItem, BinaryDataInterface { packed = (PackedBinaryData) packed.parent; } return packed.parent; - } + } @Override public String getExportFileName() { @@ -200,7 +200,7 @@ public class PackedBinaryData implements TreeItem, BinaryDataInterface { parts.add(0, ((PackedBinaryData) binaryData).parent.getUsedPacker().getIdentifier()); binaryData = ((PackedBinaryData) binaryData).parent; } - + parts.add(0, binaryData.getExportFileName()); return String.join("_", parts); } @@ -213,10 +213,10 @@ public class PackedBinaryData implements TreeItem, BinaryDataInterface { parts.add(0, ((PackedBinaryData) binaryData).parent.getUsedPacker().getIdentifier()); binaryData = ((PackedBinaryData) binaryData).parent; } - + parts.add(0, binaryData.getCharacterExportFileName()); return String.join("_", parts); - } + } @Override public String getName() { @@ -226,10 +226,10 @@ public class PackedBinaryData implements TreeItem, BinaryDataInterface { parts.add(0, ((PackedBinaryData) binaryData).parent.getUsedPacker().getName()); binaryData = ((PackedBinaryData) binaryData).parent; } - + parts.add(0, binaryData.getName()); return String.join(" / ", parts); - } + } @Override public String getClassExportFileName(String className) { @@ -239,8 +239,8 @@ public class PackedBinaryData implements TreeItem, BinaryDataInterface { parts.add(0, binaryData.getStoragesPathIdentifier()); binaryData = ((PackedBinaryData) binaryData).parent; } - + parts.add(0, binaryData.getClassExportFileName(className)); return String.join("_", parts); - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/PlaceObjectTypeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/PlaceObjectTypeTag.java index bdfdda7d5..5fa93e89c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/PlaceObjectTypeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/PlaceObjectTypeTag.java @@ -90,9 +90,9 @@ public abstract class PlaceObjectTypeTag extends Tag implements CharacterIdTag, public abstract void setPlaceFlagHasClipActions(boolean placeFlagHasClipActions); public abstract void setPlaceFlagHasMatrix(boolean placeFlagHasMatrix); - + public abstract void setPlaceFlagMove(boolean placeFlagMove); - + public boolean placeEquals(PlaceObjectTypeTag other) { if (getDepth() != other.getDepth()) { return false; @@ -147,7 +147,7 @@ public abstract class PlaceObjectTypeTag extends Tag implements CharacterIdTag, if (ch != null) { charId = ch.getCharacterId(); ret.put("chid", "" + charId); - } + } } else { String exportName = swf.getExportName(charId); if (charId > -1) { @@ -157,7 +157,7 @@ public abstract class PlaceObjectTypeTag extends Tag implements CharacterIdTag, ret.put("exp", exportName); } } - + int depth = getDepth(); ret.put("dpt", "" + depth); int clipDepth = getClipDepth(); @@ -165,7 +165,7 @@ public abstract class PlaceObjectTypeTag extends Tag implements CharacterIdTag, ret.put("cdp", "" + clipDepth); } return ret; - } + } @Override public String getExportFileName() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/RemoveTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/RemoveTag.java index 324a318e5..e23dcd332 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/RemoveTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/RemoveTag.java @@ -33,8 +33,8 @@ public abstract class RemoveTag extends Tag implements DepthTag { @Override public Map getNameProperties() { - String exportName = swf.getExportName(getCharacterId()); - + String exportName = swf.getExportName(getCharacterId()); + Map ret = super.getNameProperties(); if (getCharacterId() != -1) { ret.put("chid", "" + getCharacterId()); @@ -43,9 +43,9 @@ public abstract class RemoveTag extends Tag implements DepthTag { ret.put("exp", exportName); } ret.put("dpt", "" + getDepth()); - + return ret; - } + } @Override public String getExportFileName() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java index 97f0f883f..e61e65614 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java @@ -66,9 +66,9 @@ public abstract class ShapeTag extends DrawableTag implements LazyObject { protected ByteArrayRange shapeData; private final int markerSize = 10; - + public static final int WIND_EVEN_ODD = 0; - + public static final int WIND_NONZERO = 1; public ShapeTag(SWF swf, int id, String name, ByteArrayRange data) { @@ -79,7 +79,7 @@ public abstract class ShapeTag extends DrawableTag implements LazyObject { public void load() { getShapes(); } - + public abstract int getWindingRule(); public abstract int getShapeNum(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SoundStreamHeadTypeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SoundStreamHeadTypeTag.java index 3a5cc2901..54d3f347b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SoundStreamHeadTypeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SoundStreamHeadTypeTag.java @@ -45,15 +45,14 @@ public abstract class SoundStreamHeadTypeTag extends Tag implements CharacterIdT public abstract List getRanges(); - - protected boolean isMp3HigherThan160Kbps() { + protected boolean isMp3HigherThan160Kbps() { List ranges = getRanges(); if (ranges.isEmpty()) { return false; } try { SWFInputStream sis = new SWFInputStream(swf, ranges.get(0).blocks.get(0).streamSoundData.getRangeData()); - MP3SOUNDDATA s = new MP3SOUNDDATA(sis, false); + MP3SOUNDDATA s = new MP3SOUNDDATA(sis, false); if (!s.frames.isEmpty()) { MP3FRAME frame = s.frames.get(0); int bitRate = frame.getBitRate() / 1000; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SoundTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SoundTag.java index 7acd0a3e8..c9b9c4d64 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SoundTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/SoundTag.java @@ -59,12 +59,12 @@ public interface SoundTag extends TreeItem { public void setSoundRate(int soundRate); public int getCharacterId(); - + public boolean isReadOnly(); - + public String getName(); - + public String getFlaExportName(); - + public int getInitialLatency(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java index 5107901b8..82af9521a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/StaticTextTag.java @@ -447,7 +447,7 @@ public abstract class StaticTextTag extends TextTag { throw new TextParseException("Invalid scaley value - number expected. Found: " + paramValue, lexer.yyline()); } break; - + case "scalexf": try { textMatrix.scaleX = Float.parseFloat(paramValue); @@ -464,7 +464,7 @@ public abstract class StaticTextTag extends TextTag { throw new TextParseException("Invalid scaleyf value - float number expected. Found: " + paramValue, lexer.yyline()); } break; - + case "rotateskew0": try { textMatrix.rotateSkew0 = MATRIX.toFloat(Integer.parseInt(paramValue)); @@ -523,7 +523,7 @@ public abstract class StaticTextTag extends TextTag { } } catch (NumberFormatException nfe) { throw new TextParseException("Invalid space value - number expected. Found: " + paramValue, lexer.yyline()); - } + } break; default: throw new TextParseException("Unrecognized parameter name: " + paramName, lexer.yyline()); @@ -647,7 +647,7 @@ public abstract class StaticTextTag extends TextTag { advance = (int) Math.round(((double) textHeight * (font.getGlyphAdvance(glyphIndex) + kerningAdjustment)) / (font.getDivider() * 1024.0)); } else { String fontName = font.getSystemFontName(); - advance = (int) Math.round(SWF.unitDivisor * FontTag.getSystemFontAdvance(fontName, font.getFontStyle(), (int) (textHeight / SWF.unitDivisor), c, nextChar)); + advance = (int) Math.round(SWF.unitDivisor * FontTag.getSystemFontAdvance(fontName, font.getFontStyle(), (int) (textHeight / SWF.unitDivisor), c, nextChar)); } return advance; @@ -661,7 +661,7 @@ public abstract class StaticTextTag extends TextTag { if (glyphEntries.size() < 2) { return 0; } - + int numMin = 0; for (int i = 0; i < glyphEntries.size() - 1; i++) { GLYPHENTRY glyph = glyphEntries.get(i); @@ -685,7 +685,7 @@ public abstract class StaticTextTag extends TextTag { if (letterSpacing < minLetterSpacing) { minLetterSpacing = letterSpacing; numMin = 1; - } + } } if (minLetterSpacing < 0 && numNegatives < glyphEntries.size() / 2) { //a hack, use negative letterspacing only when 50% letters use it minLetterSpacing = 0; @@ -758,7 +758,7 @@ public abstract class StaticTextTag extends TextTag { @Override public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) { - + staticTextToSVG(swf, textRecords, getTextNum(), exporter, getRect(), textMatrix, colorTransform, 1); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java index 4785d0468..36c0683ff 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java @@ -91,13 +91,13 @@ public abstract class TextTag extends DrawableTag { public abstract HighlightedText getFormattedText(boolean ignoreLetterSpacing); // use the texts from the "texts" argument when it is not null - public abstract boolean setFormattedText(MissingCharacterHandler missingCharHandler, String formattedText, String[] texts) throws TextParseException; + public abstract boolean setFormattedText(MissingCharacterHandler missingCharHandler, String formattedText, String[] texts) throws TextParseException; public abstract boolean translateText(int diff); public abstract RECT getBounds(); - public abstract void setBounds(RECT r); + public abstract void setBounds(RECT r); @Override public RECT getRect() { @@ -119,9 +119,8 @@ public abstract class TextTag extends DrawableTag { } } - public abstract boolean alignText(TextAlign textAlign); - + public static void alignText(SWF swf, List textRecords, TextAlign textAlign) { // Remove Justify align entries for (TEXTRECORD tr : textRecords) { @@ -346,8 +345,8 @@ public abstract class TextTag extends DrawableTag { if (nextEntry != null) { kerningAdjustment = font.getGlyphKerningAdjustment(entry.glyphIndex, nextEntry.glyphIndex); } - defaultAdvance = (int) (Math.round(textHeight * (font.getGlyphAdvance(entry.glyphIndex) + kerningAdjustment) / (1024.0 * font.getDivider()))); - + defaultAdvance = (int) (Math.round(textHeight * (font.getGlyphAdvance(entry.glyphIndex) + kerningAdjustment) / (1024.0 * font.getDivider()))); + } else { defaultAdvance = (int) Math.round(SWF.unitDivisor * FontTag.getSystemFontAdvance(aFont, font.glyphToChar(entry.glyphIndex), nextEntry == null ? null : font.glyphToChar(nextEntry.glyphIndex))); } @@ -542,7 +541,7 @@ public abstract class TextTag extends DrawableTag { } public abstract ExportRectangle calculateTextBounds(); - + public static ExportRectangle calculateTextBounds(SWF swf, List textRecords, MATRIX textMatrix) { FontTag font = null; int textHeight = 12; @@ -599,8 +598,8 @@ public abstract class TextTag extends DrawableTag { return result; } - - public abstract void updateTextBounds(); + + public abstract void updateTextBounds(); protected void updateTextBounds(RECT textBounds) { TextImportResizeTextBoundsMode resizeMode = Configuration.textImportResizeTextBoundsMode.get(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/dynamictext/TextStyle.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/dynamictext/TextStyle.java index e22e9bcdb..cb1a68b1d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/dynamictext/TextStyle.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/dynamictext/TextStyle.java @@ -40,11 +40,11 @@ public final class TextStyle implements Cloneable { public boolean underlined; public RGBA textColor; - + public double letterSpacing; - + public boolean kerning; - + public double leftMargin; @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/AbstractGfxImageTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/AbstractGfxImageTag.java index d03b18c88..2c364f556 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/AbstractGfxImageTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/AbstractGfxImageTag.java @@ -16,10 +16,10 @@ */ package com.jpexs.decompiler.flash.tags.gfx; -import com.jpexs.decompiler.flash.tags.gfx.enums.FileFormatType; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.gfx.TgaSupport; import com.jpexs.decompiler.flash.tags.base.ImageTag; +import com.jpexs.decompiler.flash.tags.gfx.enums.FileFormatType; import com.jpexs.helpers.ByteArrayRange; import java.awt.image.BufferedImage; import java.io.IOException; @@ -34,44 +34,44 @@ import net.npe.dds.DDSReader; * @author JPEXS */ public abstract class AbstractGfxImageTag extends ImageTag { - + public AbstractGfxImageTag(SWF swf, int id, String name, ByteArrayRange data) { super(swf, id, name, data); } - + private BufferedImage loadDds(byte[] imageData) { int[] pixels = DDSReader.read(imageData, DDSReader.ARGB, 0); BufferedImage bufImage = new BufferedImage(DDSReader.getWidth(imageData), DDSReader.getHeight(imageData), BufferedImage.TYPE_INT_ARGB); bufImage.getRaster().setDataElements(0, 0, bufImage.getWidth(), bufImage.getHeight(), pixels); - return bufImage; + return bufImage; } - + protected BufferedImage getExternalBufferedImage(String fileName, int bitmapFormat) { Path imagePath = getSwf().getFile() == null ? null : Paths.get(getSwf().getFile()).getParent().resolve(Paths.get(fileName)); if (imagePath == null || !imagePath.toFile().exists()) { return null; } - + byte[] imageData; try { imageData = Files.readAllBytes(imagePath); } catch (IOException ex) { return null; } - if (imageData.length >= 4 && - imageData[0] == 0x44 && - imageData[1] == 0x44 && - imageData[2] == 0x53 && - imageData[3] == 0x20) { + if (imageData.length >= 4 + && imageData[0] == 0x44 + && imageData[1] == 0x44 + && imageData[2] == 0x53 + && imageData[3] == 0x20) { return loadDds(imageData); } - + if (fileName.toLowerCase().endsWith(".tga") || bitmapFormat == FileFormatType.FILE_TGA) { TgaSupport.init(); } - - try { + + try { return ImageIO.read(imagePath.toFile()); } catch (IOException ex) { return null; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalGradient.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalGradient.java index 51f408583..877b9006e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalGradient.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalGradient.java @@ -87,24 +87,24 @@ public class DefineExternalGradient extends Tag { gradientSize = sis.readUI16("gradientSize"); fileName = sis.readNetString("fileName"); } - + @Override public Map getNameProperties() { Map ret = super.getNameProperties(); ret.put("gid", "" + getUniqueId()); return ret; } - + @Override public String getUniqueId() { return "g" + gradientId; - } - + } + @Override public void getTagInfo(TagInfo tagInfo) { super.getTagInfo(tagInfo); - - tagInfo.addInfo("general", "fileName", fileName); + + tagInfo.addInfo("general", "fileName", fileName); String bitmapFormatStr = "0x" + Integer.toHexString(bitmapsFormat); switch (bitmapsFormat) { case BITMAP_FORMAT_DEFAULT: diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage.java index b42ff4e73..810a11f4c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage.java @@ -16,13 +16,13 @@ */ package com.jpexs.decompiler.flash.tags.gfx; -import com.jpexs.decompiler.flash.tags.gfx.enums.FileFormatType; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.helpers.ImageHelper; import com.jpexs.decompiler.flash.tags.TagInfo; import com.jpexs.decompiler.flash.tags.enums.ImageFormat; +import com.jpexs.decompiler.flash.tags.gfx.enums.FileFormatType; import com.jpexs.decompiler.flash.types.annotations.Conditional; import com.jpexs.decompiler.flash.types.annotations.HideInRawEdit; import com.jpexs.helpers.ByteArrayRange; @@ -53,13 +53,12 @@ public class DefineExternalImage extends AbstractGfxImageTag { //I guess this probably depends on ExporterInfo version - version 1 probably has shortFormat public boolean shortFormat = false; - + public String exportName; - @Conditional(value = "shortFormat", revert = true) - public String fileName; - - + @Conditional(value = "shortFormat", revert = true) + public String fileName; + @HideInRawEdit private SerializableImage serImage; @@ -115,7 +114,7 @@ public class DefineExternalImage extends AbstractGfxImageTag { targetHeight = sis.readUI16("targetHeight"); exportName = sis.readNetString("exportName"); if (sis.available() > 0) { - fileName = sis.readNetString("fileName"); + fileName = sis.readNetString("fileName"); shortFormat = false; } else { shortFormat = true; @@ -176,7 +175,7 @@ public class DefineExternalImage extends AbstractGfxImageTag { } return fileName; } - + private void initImage() { String fname = getFilename(); if (Objects.equals(cachedImageFilename, fname) @@ -206,12 +205,12 @@ public class DefineExternalImage extends AbstractGfxImageTag { public boolean importSupported() { return false; } - + @Override public void getTagInfo(TagInfo tagInfo) { super.getTagInfo(tagInfo); - - tagInfo.addInfo("general", "exportName", exportName); + + tagInfo.addInfo("general", "exportName", exportName); if (!shortFormat) { tagInfo.addInfo("general", "fileName", fileName); } @@ -219,7 +218,7 @@ public class DefineExternalImage extends AbstractGfxImageTag { String fileFormatStr = FileFormatType.fileFormatToString(bitmapFormat); if (fileFormatStr != null) { bitmapFormatStr = fileFormatStr + " (" + bitmapFormat + ")"; - } + } tagInfo.addInfo("general", "bitmapFormat", bitmapFormatStr); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage2.java index 06c86da93..14981fae8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalImage2.java @@ -16,14 +16,14 @@ */ package com.jpexs.decompiler.flash.tags.gfx; -import com.jpexs.decompiler.flash.tags.gfx.enums.IdType; -import com.jpexs.decompiler.flash.tags.gfx.enums.FileFormatType; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.helpers.ImageHelper; import com.jpexs.decompiler.flash.tags.TagInfo; import com.jpexs.decompiler.flash.tags.enums.ImageFormat; +import com.jpexs.decompiler.flash.tags.gfx.enums.FileFormatType; +import com.jpexs.decompiler.flash.tags.gfx.enums.IdType; import com.jpexs.decompiler.flash.types.annotations.HideInRawEdit; import com.jpexs.helpers.ByteArrayRange; import com.jpexs.helpers.SerializableImage; @@ -202,7 +202,7 @@ public class DefineExternalImage2 extends AbstractGfxImageTag { public boolean importSupported() { return false; } - + @Override public Map getNameProperties() { Map ret = super.getNameProperties(); @@ -216,26 +216,26 @@ public class DefineExternalImage2 extends AbstractGfxImageTag { return super.getUniqueId(); } return "i" + imageID; - } + } @Override public void setCharacterId(int characterId) { } - + @Override public void getTagInfo(TagInfo tagInfo) { super.getTagInfo(tagInfo); - + tagInfo.addInfo("general", "exportName", exportName); tagInfo.addInfo("general", "fileName", fileName); String bitmapFormatStr = "0x" + Integer.toHexString(bitmapFormat); String fileFormatStr = FileFormatType.fileFormatToString(bitmapFormat); if (fileFormatStr != null) { bitmapFormatStr = fileFormatStr + " (" + bitmapFormat + ")"; - } + } tagInfo.addInfo("general", "bitmapFormat", bitmapFormatStr); - + if (idType != IdType.IDTYPE_NONE) { tagInfo.addInfo("general", "imageId", imageID); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalSound.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalSound.java index c268e14cc..219c4abfd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalSound.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalSound.java @@ -247,8 +247,8 @@ public class DefineExternalSound extends CharacterTag implements SoundTag { @Override public String getFlaExportName() { return "sound" + getCharacterId(); - } - + } + @Override public int getInitialLatency() { return 0; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalStreamSound.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalStreamSound.java index 134e511de..492ab251b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalStreamSound.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineExternalStreamSound.java @@ -239,14 +239,14 @@ public class DefineExternalStreamSound extends Tag implements CharacterIdTag, So public String getCharacterExportFileName() { return "" + getCharacterId(); } - + @Override public Map getNameProperties() { Map ret = super.getNameProperties(); ret.put("chid", "" + virtualCharacterId); return ret; } - + @Override public String getUniqueId() { return "" + virtualCharacterId; @@ -263,12 +263,12 @@ public class DefineExternalStreamSound extends Tag implements CharacterIdTag, So tagInfo.addInfo("general", "stereo", soundFormat.stereo); tagInfo.addInfo("general", "sampleCount", sampleCount); } - + @Override public String getFlaExportName() { return "sound" + getCharacterId(); } - + @Override public int getInitialLatency() { return 0; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineGradientMap.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineGradientMap.java index 7ad8178f6..a3c9ada12 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineGradientMap.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineGradientMap.java @@ -77,16 +77,16 @@ public class DefineGradientMap extends Tag { indices[i] = sis.readUI16("index"); } } - + @Override public void getTagInfo(TagInfo tagInfo) { super.getTagInfo(tagInfo); - + List indicesStr = new ArrayList<>(); for (int index : indices) { indicesStr.add("" + index); } - + tagInfo.addInfo("general", "indices", String.join(", ", indicesStr)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineSubImage.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineSubImage.java index 1e4dd2387..753d77cfa 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineSubImage.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/DefineSubImage.java @@ -191,8 +191,8 @@ public class DefineSubImage extends AbstractGfxImageTag { && Objects.equals(cachedX2, (Integer) x2) && Objects.equals(cachedY1, (Integer) y1) && Objects.equals(cachedY2, (Integer) y2) - && serImage != null - && serImage.getWidth() == targetWidth + && serImage != null + && serImage.getWidth() == targetWidth && serImage.getHeight() == targetHeight) { return; } @@ -201,14 +201,14 @@ public class DefineSubImage extends AbstractGfxImageTag { serImage = new SerializableImage(1, 1, BufferedImage.TYPE_4BYTE_ABGR_PRE); serImage.fillTransparent(); return; - } - + } + BufferedImage bufImage = getExternalBufferedImage(image.fileName, bitmapFormat); if (bufImage == null) { createFailedImage(); return; } - + Image scaled = bufImage.getScaledInstance(image.targetWidth, image.targetHeight, Image.SCALE_DEFAULT); bufImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_ARGB); bufImage.getGraphics().drawImage(scaled, -x1, -y1, null); @@ -217,13 +217,13 @@ public class DefineSubImage extends AbstractGfxImageTag { cachedX1 = x1; cachedX2 = x2; cachedY1 = y1; - cachedY2 = y2; + cachedY2 = y2; } - + @Override public void getTagInfo(TagInfo tagInfo) { super.getTagInfo(tagInfo); - + tagInfo.addInfo("general", "imageId", imageId); tagInfo.addInfo("general", "x1", x1); tagInfo.addInfo("general", "y1", y1); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/ExporterInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/ExporterInfo.java index 595660a7d..1a892c835 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/ExporterInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/ExporterInfo.java @@ -16,12 +16,12 @@ */ package com.jpexs.decompiler.flash.tags.gfx; -import com.jpexs.decompiler.flash.tags.gfx.enums.FileFormatType; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.tags.TagInfo; +import com.jpexs.decompiler.flash.tags.gfx.enums.FileFormatType; import com.jpexs.helpers.ByteArrayRange; import java.io.IOException; import java.util.ArrayList; @@ -49,16 +49,15 @@ public class ExporterInfo extends Tag { public String swfName; - public List codeOffsets; + public List codeOffsets; public static final int FLAG_CONTAINS_GLYPH_TEXTURES = 1; public static final int FLAG_GLYPHS_STRIPPED_FROM_DEFINEFONT = 2; public static final int FLAG_GRADIENT_IMAGES_EXPORTED = 4; - - public static final int FLAG_SHAPES_STRIPPED_FROM_DEFINEFONT = 16; + public static final int FLAG_SHAPES_STRIPPED_FROM_DEFINEFONT = 16; /** * Gets data bytes @@ -118,22 +117,22 @@ public class ExporterInfo extends Tag { } } } - + @Override public void getTagInfo(TagInfo tagInfo) { super.getTagInfo(tagInfo); - + tagInfo.addInfo("general", "version", version); tagInfo.addInfo("general", "flags", "0x" + Long.toHexString(flags)); String bitmapFormatStr = "0x" + Integer.toHexString(bitmapFormat); String fileFormatStr = FileFormatType.fileFormatToString(bitmapFormat); if (fileFormatStr != null) { bitmapFormatStr = fileFormatStr + " (" + bitmapFormat + ")"; - } + } tagInfo.addInfo("general", "bitmapFormat", bitmapFormatStr); tagInfo.addInfo("general", "prefix", prefix); tagInfo.addInfo("general", "swfName", swfName); - + if (codeOffsets != null) { List codeOffsetsStr = new ArrayList<>(); for (long codeOffset : codeOffsets) { @@ -143,7 +142,7 @@ public class ExporterInfo extends Tag { tagInfo.addInfo("general", "codeOffsets", String.join(", ", codeOffsetsStr)); } } - + public boolean hasFlagShapesStrippedFromDefineFont() { return (flags & FLAG_SHAPES_STRIPPED_FROM_DEFINEFONT) == FLAG_SHAPES_STRIPPED_FROM_DEFINEFONT; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/FontTextureInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/FontTextureInfo.java index 29e7b0255..b59d726fd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/FontTextureInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/FontTextureInfo.java @@ -41,7 +41,7 @@ public class FontTextureInfo extends Tag { public static final String NAME = "FontTextureInfo"; public int textureID; - + public int unknownID; public int textureFormat; @@ -65,7 +65,7 @@ public class FontTextureInfo extends Tag { public static final int TEXTURE_FORMAT_TGA = 1; public static final int TEXTURE_FORMAT_DDS = 2; - + //It looks like gfxexport produces TEXTURE_FORMAT2_* values for format, //but BITMAP_FORMAT_* works the same way public static final int TEXTURE_FORMAT2_JPEG = 10; @@ -76,7 +76,7 @@ public class FontTextureInfo extends Tag { public static final int UNKNOWN_IS_SINGLE = 0; public static final int UNKNOWN_IS_MULTIPLE = 6; - + /** * Gets data bytes * @@ -144,31 +144,31 @@ public class FontTextureInfo extends Tag { int numFonts = sis.readUI16("numFonts"); fonts = new FONTINFO[numFonts]; mis = sis.getBaseStream(); - misStartPos = mis.getPos(); + misStartPos = mis.getPos(); for (int i = 0; i < numFonts; i++) { GFxInputStream gis = new GFxInputStream(mis); gis.dumpInfo = sis.dumpInfo; fonts[i] = new FONTINFO(gis); } - sis.skipBytes(mis.getPos() - misStartPos); + sis.skipBytes(mis.getPos() - misStartPos); } - + @Override public Map getNameProperties() { Map ret = super.getNameProperties(); ret.put("chid", "" + getUniqueId()); return ret; } - + @Override public String getUniqueId() { return "ft" + textureID; - } - + } + @Override public void getTagInfo(TagInfo tagInfo) { super.getTagInfo(tagInfo); - + tagInfo.addInfo("general", "textureId", textureID); String textureFormatStr = "0x" + Integer.toHexString(textureFormat); switch (textureFormat) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/enums/FileFormatType.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/enums/FileFormatType.java index ff8cd6766..0bd79c438 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/enums/FileFormatType.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/enums/FileFormatType.java @@ -20,7 +20,7 @@ import java.lang.reflect.Field; /** * All File formats supported and/or used by GFx. - * + * * @author JPEXS */ public class FileFormatType { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/enums/IdType.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/enums/IdType.java index e0ce3716d..0b35c8ee1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/enums/IdType.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/gfx/enums/IdType.java @@ -23,17 +23,17 @@ import java.lang.reflect.Field; * @author JPEXS */ public class IdType { - + private static final int IDTYPE_BIT_SWF = 0; // Id comes from SWF File. private static final int IDTYPE_BIT_STATIC = 1; // Id assigned uniquely during loading. private static final int IDTYPE_BIT_EXPORT = 2; // Id assigned uniquely during export. - + public static final int IDTYPE_NONE = 0; public static final int IDTYPE_INTERNALCONSTANT = 0 | IDTYPE_BIT_STATIC; public static final int IDTYPE_GRADIENTIMAGE = 4 | IDTYPE_BIT_STATIC; public static final int IDTYPE_DYNFONTIMAGE = 8 | IDTYPE_BIT_STATIC; public static final int IDTYPE_FONTIMAGE = 4 | IDTYPE_BIT_EXPORT; - + public static String idTypeToString(int idType) { try { for (Field f : IdType.class.getDeclaredFields()) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/DepthState.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/DepthState.java index 0ec2fea04..07f69d2a0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/DepthState.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/DepthState.java @@ -79,7 +79,7 @@ public class DepthState { private final SWF swf; public Frame frame; - + public Frame placeFrame; public PlaceObjectTypeTag placeObjectTag; @@ -253,6 +253,6 @@ public class DepthState { if (!Objects.equals(this.clipActions, other.clipActions)) { return false; } - return Arrays.equals(this.amfData, other.amfData); - } + return Arrays.equals(this.amfData, other.amfData); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Scene.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Scene.java index 4e7a9c099..104949a5f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Scene.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Scene.java @@ -26,10 +26,11 @@ import java.util.Objects; * @author JPEXS */ public class Scene implements TreeItem { + private SWF swf; public int startFrame; public int endFrame; - public String name; + public String name; public Scene(SWF swf, int startFrame, int endFrame, String name) { this.swf = swf; @@ -37,11 +38,11 @@ public class Scene implements TreeItem { this.endFrame = endFrame; this.name = name; } - + public int getSceneFrameCount() { - return endFrame - startFrame + 1; + return endFrame - startFrame + 1; } - + public SceneFrame getSceneFrame(int sceneFrameIndex) { if (sceneFrameIndex >= getSceneFrameCount()) { throw new IndexOutOfBoundsException("Invalid sceneframe index"); @@ -57,7 +58,7 @@ public class Scene implements TreeItem { @Override public boolean isModified() { return false; //?? - } + } @Override public int hashCode() { @@ -88,5 +89,5 @@ public class Scene implements TreeItem { @Override public String toString() { return name; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/SceneFrame.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/SceneFrame.java index efa62f1c5..77a6eb7a7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/SceneFrame.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/SceneFrame.java @@ -26,6 +26,7 @@ import java.util.Objects; * @author JPEXS */ public class SceneFrame implements TreeItem { + private final SWF swf; private final Scene scene; private final int realFrameIndex; @@ -34,12 +35,12 @@ public class SceneFrame implements TreeItem { this.swf = swf; this.scene = scene; this.realFrameIndex = realFrameIndex; - } - + } + public int getSceneFrameIndex() { return realFrameIndex - scene.startFrame; } - + public Frame getFrame() { return swf.getTimeline().getFrame(realFrameIndex); } @@ -83,5 +84,5 @@ public class SceneFrame implements TreeItem { return false; } return Objects.equals(this.scene, other.scene); - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/SoundStreamFrameRange.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/SoundStreamFrameRange.java index 5285740d7..4bd24307b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/SoundStreamFrameRange.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/SoundStreamFrameRange.java @@ -32,15 +32,16 @@ import java.util.List; * @author JPEXS */ public class SoundStreamFrameRange implements TreeItem, SoundTag { + public int startFrame; public int endFrame; - public List blocks = new ArrayList<>(); - + public List blocks = new ArrayList<>(); + private final SoundStreamHeadTypeTag head; - + public SoundStreamFrameRange(SoundStreamHeadTypeTag head) { this.head = head; - } + } @Override public Openable getOpenable() { @@ -105,7 +106,7 @@ public class SoundStreamFrameRange implements TreeItem, SoundTag { public String getCharacterExportFileName() { return head.getCharacterExportFileName() + "_" + (startFrame + 1) + "-" + (endFrame + 1); } - + @Override public String getName() { return "SoundStreamBlocks"; @@ -153,18 +154,18 @@ public class SoundStreamFrameRange implements TreeItem, SoundTag { @Override public String toString() { return "SoundStreamBlocks (frame " + (startFrame + 1) + " - " + (endFrame + 1) + ")"; - } + } @Override public boolean isReadOnly() { return head.isReadOnly(); - } + } @Override public String getFlaExportName() { return head.getFlaExportName() + "_" + (startFrame + 1) + "-" + (endFrame + 1); - } - + } + @Override public int getInitialLatency() { return 0; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java index 8733dd659..8d30f0dd8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java @@ -128,8 +128,8 @@ public class Timeline { private boolean initialized = false; private Map labelToFrame = new HashMap<>(); - - private List scenes = new ArrayList<>(); + + private List scenes = new ArrayList<>(); public static final int DRAW_MODE_ALL = 0; public static final int DRAW_MODE_SHAPES = 1; @@ -148,9 +148,9 @@ public class Timeline { } /** - * + * * @param index 0-based frame index - * @return + * @return */ public synchronized Frame getFrame(int index) { ensureInitialized(); @@ -285,7 +285,7 @@ public class Timeline { frame.layersChanged = true; boolean newFrameNeeded = false; scenes = new ArrayList<>(); - Scene prevScene = null; + Scene prevScene = null; for (Tag t : timelined.getTags()) { newFrameNeeded = true; boolean isNested = ShowFrameTag.isNestedTagType(t.getId()); @@ -305,9 +305,9 @@ public class Timeline { prevScene.endFrame = ioffset - 1; } prevScene = currentScene; - } + } } - + if (t instanceof ASMSourceContainer) { ASMSourceContainer asmSourceContainer = (ASMSourceContainer) t; if (!asmSourceContainer.getSubItems().isEmpty()) { @@ -382,7 +382,7 @@ public class Timeline { } else { fl.key = characterId != -1 || className != null; } - + if (po.flagMove()) { MATRIX matrix2 = po.getMatrix(); if (matrix2 != null) { @@ -439,7 +439,7 @@ public class Timeline { fl.clipDepth = po.getClipDepth(); fl.isVisible = po.isVisible(); } - } + } } else if (t instanceof RemoveTag) { RemoveTag r = (RemoveTag) t; @@ -463,7 +463,7 @@ public class Timeline { if (newFrameNeeded) { frames.add(frame); } - + if (prevScene != null) { prevScene.endFrame = frames.size() - 1; } @@ -620,7 +620,7 @@ public class Timeline { ranges = new ArrayList<>(); range = new SoundStreamFrameRange(head); range.startFrame = -1; - range.endFrame = -1; + range.endFrame = -1; numFramesNoSound = MIN_NUM_FRAMES_NO_SOUND; soundStreamRanges.put(containerId, ranges); continue; @@ -635,13 +635,13 @@ public class Timeline { DefineSpriteTag sprite = (DefineSpriteTag) t; populateSoundStreamBlocks(sprite.getCharacterId(), sprite.getTags()); } - + if (t instanceof ShowFrameTag) { frame++; if (frameHasSound) { numFramesNoSound = 0; } else { - numFramesNoSound++; + numFramesNoSound++; } frameHasSound = false; if (sceneOffsets.contains(frame) && range != null) { @@ -661,20 +661,20 @@ public class Timeline { continue; } - if (t instanceof SoundStreamBlockTag) { + if (t instanceof SoundStreamBlockTag) { if (numFramesNoSound >= MIN_NUM_FRAMES_NO_SOUND && range.endFrame > -1) { ranges.add(range); range = new SoundStreamFrameRange(head); range.startFrame = -1; - range.endFrame = -1; - } + range.endFrame = -1; + } range.blocks.add((SoundStreamBlockTag) t); if (range.startFrame == -1) { range.startFrame = frame; } range.endFrame = frame; frameHasSound = true; - } + } } if (range != null && ranges != null && range.endFrame > -1) { ranges.add(range); @@ -850,7 +850,7 @@ public class Timeline { double deltaXMax = 0; double deltaYMax = 0; - + if (filters != null && filters.size() > 0) { // calculate size after applying the filters for (FILTER filter : filters) { @@ -949,7 +949,7 @@ public class Timeline { if (blendMode > 1) { clrTrans2 = null; } - + if (filters != null && !filters.isEmpty()) { clrTrans2 = null; } @@ -1133,7 +1133,7 @@ public class Timeline { } if (clipChanged) { - if (clips.size() > 0) { + if (clips.size() > 0) { Area clip = null; if (prevClip != null) { clip = new Area(prevClip); @@ -1543,7 +1543,7 @@ public class Timeline { return false; } - + public List getScenes() { ensureInitialized(); return new ArrayList<>(scenes); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timelined.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timelined.java index dd2789eea..307506803 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timelined.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timelined.java @@ -28,7 +28,7 @@ import com.jpexs.decompiler.flash.tags.base.BoundedTag; public interface Timelined extends BoundedTag { public SWF getSwf(); - + public Timeline getTimeline(); public void resetTimeline(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/OpenableList.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/OpenableList.java index 58b114b96..c117d5404 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/OpenableList.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/OpenableList.java @@ -85,12 +85,12 @@ public class OpenableList implements List, SWFContainerItem { @Override public T[] toArray(T[] ts) { return items.toArray(ts); - } + } @Override public boolean containsAll(Collection clctn) { return items.containsAll(clctn); - } + } @Override public boolean removeAll(Collection clctn) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java index 638cb4109..c86a6013c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java @@ -55,7 +55,7 @@ public class BUTTONCONDACTION implements ASMSource, Serializable, HasSwfAndTag { private Tag tag; private String scriptName = "-"; - + private String exportedScriptName = "-"; @Override @@ -384,12 +384,12 @@ public class BUTTONCONDACTION implements ASMSource, Serializable, HasSwfAndTag { return new ArrayList<>(); } } - + @Override public String getExportedScriptName() { return exportedScriptName; } - + @Override public void setExportedScriptName(String scriptName) { this.exportedScriptName = scriptName; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java index 00eff73f0..6fe18e414 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java @@ -372,12 +372,12 @@ public class CLIPACTIONRECORD implements ASMSource, Serializable, HasSwfAndTag { return new ArrayList<>(); } } - + @Override public String getExportedScriptName() { return exportedScriptName; } - + @Override public void setExportedScriptName(String scriptName) { this.exportedScriptName = scriptName; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java index 985494028..cf9d7ec26 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java @@ -295,6 +295,5 @@ public class FILLSTYLE implements NeedsCharacters, FieldChangeObserver, Serializ } return Objects.equals(this.bitmapMatrix, other.bitmapMatrix); } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLEARRAY.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLEARRAY.java index 26751b13a..e574827d4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLEARRAY.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLEARRAY.java @@ -55,7 +55,7 @@ public class FILLSTYLEARRAY implements NeedsCharacters, Serializable { } return modified; } - + public MORPHFILLSTYLEARRAY toMorphFillStyleArray() { MORPHFILLSTYLEARRAY morphFillStyleArray = new MORPHFILLSTYLEARRAY(); morphFillStyleArray.fillStyles = new MORPHFILLSTYLE[fillStyles.length]; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FOCALGRADIENT.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FOCALGRADIENT.java index 37da0061e..e137529ca 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FOCALGRADIENT.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FOCALGRADIENT.java @@ -27,7 +27,7 @@ public class FOCALGRADIENT extends GRADIENT implements Serializable { @SWFType(BasicType.FIXED8) public float focalPoint; - + @Override public boolean isCompatibleGradient(GRADIENT otherGradient) { if (interpolationMode != otherGradient.interpolationMode) { @@ -41,7 +41,7 @@ public class FOCALGRADIENT extends GRADIENT implements Serializable { } return true; } - + @Override public MORPHGRADIENT toMorphGradient() { MORPHFOCALGRADIENT morphGradient = new MORPHFOCALGRADIENT(); @@ -53,10 +53,10 @@ public class FOCALGRADIENT extends GRADIENT implements Serializable { } morphGradient.startFocalPoint = focalPoint; morphGradient.startFocalPoint = focalPoint; - + return morphGradient; } - + @Override public MORPHGRADIENT toMorphGradient(GRADIENT endGradient) { if (!isCompatibleGradient(endGradient)) { @@ -68,7 +68,7 @@ public class FOCALGRADIENT extends GRADIENT implements Serializable { morphGradient.gradientRecords = new MORPHGRADRECORD[gradientRecords.length]; for (int i = 0; i < gradientRecords.length; i++) { morphGradient.gradientRecords[i] = gradientRecords[i].toMorphGradRecord(endGradient.gradientRecords[i]); - } + } morphGradient.startFocalPoint = focalPoint; if (endGradient instanceof FOCALGRADIENT) { morphGradient.endFocalPoint = ((FOCALGRADIENT) endGradient).focalPoint; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/GRADIENT.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/GRADIENT.java index 89e05fbc0..1290d5efb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/GRADIENT.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/GRADIENT.java @@ -62,9 +62,9 @@ public class GRADIENT implements Serializable { public static final int INTERPOLATION_RESERVED2 = 3; @SWFArray(value = "record") - public GRADRECORD[] gradientRecords = new GRADRECORD[0]; - - public boolean isCompatibleGradient(GRADIENT otherGradient) { + public GRADRECORD[] gradientRecords = new GRADRECORD[0]; + + public boolean isCompatibleGradient(GRADIENT otherGradient) { if (interpolationMode != otherGradient.interpolationMode) { return false; } @@ -76,7 +76,7 @@ public class GRADIENT implements Serializable { } return true; } - + public MORPHGRADIENT toMorphGradient() { MORPHGRADIENT morphGradient = new MORPHGRADIENT(); morphGradient.interPolationMode = interpolationMode; @@ -87,7 +87,7 @@ public class GRADIENT implements Serializable { } return morphGradient; } - + public MORPHGRADIENT toMorphGradient(GRADIENT endGradient) { if (!isCompatibleGradient(endGradient)) { return null; @@ -140,6 +140,5 @@ public class GRADIENT implements Serializable { } return Arrays.deepEquals(this.gradientRecords, other.gradientRecords); } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/GRADRECORD.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/GRADRECORD.java index 035e2e665..c32152f01 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/GRADRECORD.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/GRADRECORD.java @@ -38,7 +38,7 @@ public class GRADRECORD implements Serializable { public float getRatioFloat() { return ((float) ratio) / 255.0f; } - + public MORPHGRADRECORD toMorphGradRecord() { MORPHGRADRECORD morphGradRecord = new MORPHGRADRECORD(); morphGradRecord.startColor = new RGBA(color); @@ -47,7 +47,7 @@ public class GRADRECORD implements Serializable { morphGradRecord.endRatio = ratio; return morphGradRecord; } - + public MORPHGRADRECORD toMorphGradRecord(GRADRECORD endGradRecord) { MORPHGRADRECORD morphGradRecord = new MORPHGRADRECORD(); morphGradRecord.startColor = new RGBA(color); @@ -86,6 +86,5 @@ public class GRADRECORD implements Serializable { } return Objects.equals(this.color, other.color); } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java index 971d69d32..62c3bdfb6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java @@ -76,7 +76,7 @@ public class LINESTYLE implements NeedsCharacters, Serializable, ILINESTYLE { public void setWidth(int width) { this.width = width; } - + public MORPHLINESTYLE toMorphLineStyle() { MORPHLINESTYLE morphLineStyle = new MORPHLINESTYLE(); morphLineStyle.startColor = new RGBA(color); @@ -111,6 +111,5 @@ public class LINESTYLE implements NeedsCharacters, Serializable, ILINESTYLE { } return Objects.equals(this.color, other.color); } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE2.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE2.java index cdf716a49..3bb39289b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE2.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE2.java @@ -142,8 +142,8 @@ public class LINESTYLE2 implements NeedsCharacters, Serializable, ILINESTYLE { @Override public void setWidth(int width) { this.width = width; - } - + } + public boolean isCompatibleLineStyle(LINESTYLE2 otherLineStyle, SWF swf) { if (startCapStyle != otherLineStyle.startCapStyle) { return false; @@ -151,15 +151,15 @@ public class LINESTYLE2 implements NeedsCharacters, Serializable, ILINESTYLE { if (endCapStyle != otherLineStyle.endCapStyle) { return false; } - + if (joinStyle != otherLineStyle.joinStyle) { return false; } - + if (hasFillFlag != otherLineStyle.hasFillFlag) { return false; } - + if (noVScaleFlag != otherLineStyle.noVScaleFlag) { return false; } @@ -172,16 +172,16 @@ public class LINESTYLE2 implements NeedsCharacters, Serializable, ILINESTYLE { if (miterLimitFactor != otherLineStyle.miterLimitFactor) { return false; } - + if (hasFillFlag) { if (!fillType.isCompatibleFillStyle(otherLineStyle.fillType, swf)) { return false; } } - + return true; } - + public MORPHLINESTYLE2 toMorphLineStyle2() { MORPHLINESTYLE2 morphLineStyle2 = new MORPHLINESTYLE2(); morphLineStyle2.startWidth = width; @@ -209,11 +209,11 @@ public class LINESTYLE2 implements NeedsCharacters, Serializable, ILINESTYLE { if (!isCompatibleLineStyle(endLineStyle, swf)) { return null; } - + MORPHLINESTYLE2 morphLineStyle2 = new MORPHLINESTYLE2(); morphLineStyle2.startWidth = width; morphLineStyle2.endWidth = endLineStyle.width; - morphLineStyle2.startCapStyle = startCapStyle; + morphLineStyle2.startCapStyle = startCapStyle; morphLineStyle2.joinStyle = joinStyle; morphLineStyle2.hasFillFlag = hasFillFlag; morphLineStyle2.noHScaleFlag = noHScaleFlag; @@ -303,6 +303,5 @@ public class LINESTYLE2 implements NeedsCharacters, Serializable, ILINESTYLE { } return Objects.equals(this.fillType, other.fillType); } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLEARRAY.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLEARRAY.java index 1eb209cb6..112cc9d6c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLEARRAY.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLEARRAY.java @@ -87,7 +87,7 @@ public class LINESTYLEARRAY implements NeedsCharacters, Serializable { } return modified; } - + public MORPHLINESTYLEARRAY toMorphLineStyleArray() { MORPHLINESTYLEARRAY morphLineStyleArray = new MORPHLINESTYLEARRAY(); if (lineStyles != null) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MATRIX.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MATRIX.java index 6b2a1108d..e57710840 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MATRIX.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/MATRIX.java @@ -120,7 +120,7 @@ public class MATRIX implements Serializable { public Point apply(Point p) { Point ret = new Point(); - ret.x = (int) (p.x * (hasScale ? scaleX : 1) + p.y * (hasRotate ? rotateSkew1 : 0) + translateX); + ret.x = (int) (p.x * (hasScale ? scaleX : 1) + p.y * (hasRotate ? rotateSkew1 : 0) + translateX); ret.y = (int) (p.x * (hasRotate ? rotateSkew0 : 0) + p.y * (hasScale ? scaleY : 1) + translateY); return ret; } @@ -135,7 +135,7 @@ public class MATRIX implements Serializable { return new RECT(Xmin, Xmax, Ymin, Ymax); } - + private int fromFloat(double f) { return (int) (f * (1 << 16)); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RECT.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RECT.java index 972fdd414..7582519e8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RECT.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RECT.java @@ -94,11 +94,11 @@ public class RECT implements Serializable { public Point getBottomRight() { return new Point(Xmax, Ymax); } - + public void calculateBits() { nbits = SWFOutputStream.getNeededBitsS(Xmin, Xmax, Ymin, Ymax); } - + public boolean isTooLarge() { calculateBits(); return !SWFOutputStream.fitsInUB(5, nbits); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RGB.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RGB.java index 1933d63c6..953f91fac 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RGB.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RGB.java @@ -51,7 +51,7 @@ public class RGB implements Serializable { this.green = color.green; this.blue = color.blue; } - + public RGB(int red, int green, int blue) { this.red = red; this.green = green; @@ -142,6 +142,5 @@ public class RGB implements Serializable { } return this.blue == other.blue; } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RGBA.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RGBA.java index caaf02703..c760df1e6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RGBA.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/RGBA.java @@ -72,14 +72,14 @@ public class RGBA extends RGB implements Serializable { super(rgb); alpha = (rgb >> 24) & 0xFF; } - + public RGBA(RGB color) { super(color); if (color instanceof RGBA) { alpha = ((RGBA) color).alpha; } else { alpha = 255; - } + } } public RGBA() { @@ -159,5 +159,5 @@ public class RGBA extends RGB implements Serializable { return false; } return this.alpha == other.alpha; - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java index 3428bb4f8..eb6596f53 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java @@ -53,8 +53,8 @@ public class SHAPE implements NeedsCharacters, Serializable { public SHAPE() { shapeRecords = new ArrayList<>(); shapeRecords.add(new EndShapeRecord()); - } - + } + @Override public void getNeededCharacters(Set needed, SWF swf) { for (SHAPERECORD r : shapeRecords) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java index 8c3bbbce8..2c5ddff5a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java @@ -111,22 +111,22 @@ public class SHAPEWITHSTYLE extends SHAPE implements NeedsCharacters, Serializab public void updateMorphShapeTag(MorphShapeTag morphShapeTag, boolean fill) { morphShapeTag.startEdges.shapeRecords.clear(); morphShapeTag.endEdges.shapeRecords.clear(); - - FILLSTYLEARRAY mergedFillStyles = new FILLSTYLEARRAY(); + + FILLSTYLEARRAY mergedFillStyles = new FILLSTYLEARRAY(); LINESTYLEARRAY mergedLineStyles = new LINESTYLEARRAY(); - + List mergedFillStyleList = new ArrayList<>(); List mergedLineStyleList = new ArrayList<>(); List mergedLineStyle2List = new ArrayList<>(); - + int lastFillCount = fillStyles.fillStyles.length; - + for (int i = 0; i < fillStyles.fillStyles.length; i++) { mergedFillStyleList.add(fillStyles.fillStyles[i]); } - + int lastLineCount = 0; - + if (lineStyles.lineStyles != null) { lastLineCount = lineStyles.lineStyles.length; for (int i = 0; i < lineStyles.lineStyles.length; i++) { @@ -139,22 +139,22 @@ public class SHAPEWITHSTYLE extends SHAPE implements NeedsCharacters, Serializab mergedLineStyle2List.add(lineStyles.lineStyles2[i]); } } - + int fillOffset = 0; int lineOffset = 0; List newShapeRecords = new ArrayList<>(); for (int r = 0; r < shapeRecords.size(); r++) { SHAPERECORD rec = shapeRecords.get(r); rec = Helper.deepCopy(rec); - if (rec instanceof StyleChangeRecord) { - StyleChangeRecord scr = (StyleChangeRecord) rec; + if (rec instanceof StyleChangeRecord) { + StyleChangeRecord scr = (StyleChangeRecord) rec; if (scr.stateNewStyles) { for (int i = 0; i < scr.fillStyles.fillStyles.length; i++) { mergedFillStyleList.add(scr.fillStyles.fillStyles[i]); } fillOffset += lastFillCount; lastFillCount = scr.fillStyles.fillStyles.length; - if (scr.lineStyles.lineStyles != null) { + if (scr.lineStyles.lineStyles != null) { for (int i = 0; i < scr.lineStyles.lineStyles.length; i++) { mergedLineStyleList.add(scr.lineStyles.lineStyles[i]); } @@ -167,7 +167,7 @@ public class SHAPEWITHSTYLE extends SHAPE implements NeedsCharacters, Serializab } lineOffset += lastLineCount; lastLineCount = scr.lineStyles.lineStyles2.length; - } + } scr.stateNewStyles = false; } if (scr.stateFillStyle0) { @@ -182,7 +182,7 @@ public class SHAPEWITHSTYLE extends SHAPE implements NeedsCharacters, Serializab } newShapeRecords.add(rec); } - + mergedFillStyles.fillStyles = new FILLSTYLE[mergedFillStyleList.size()]; for (int i = 0; i < mergedFillStyleList.size(); i++) { mergedFillStyles.fillStyles[i] = mergedFillStyleList.get(i); @@ -195,14 +195,13 @@ public class SHAPEWITHSTYLE extends SHAPE implements NeedsCharacters, Serializab for (int i = 0; i < mergedLineStyle2List.size(); i++) { mergedLineStyles.lineStyles2[i] = mergedLineStyle2List.get(i); } - - + morphShapeTag.morphFillStyles = mergedFillStyles.toMorphFillStyleArray(); - morphShapeTag.morphLineStyles = mergedLineStyles.toMorphLineStyleArray(); + morphShapeTag.morphLineStyles = mergedLineStyles.toMorphLineStyleArray(); SHAPE startShapes = new SHAPE(); startShapes.numFillBits = SWFOutputStream.getNeededBitsU(mergedFillStyleList.size()); startShapes.numLineBits = SWFOutputStream.getNeededBitsU(mergedLineStyleList.size() + mergedLineStyle2List.size()); - startShapes.shapeRecords = newShapeRecords; + startShapes.shapeRecords = newShapeRecords; morphShapeTag.startEdges = startShapes; SHAPE endShapes = new SHAPE(); @@ -232,5 +231,5 @@ public class SHAPEWITHSTYLE extends SHAPE implements NeedsCharacters, Serializab morphShapeTag.updateBounds(); } } - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/annotations/SWFType.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/annotations/SWFType.java index e198e5693..00cf767c4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/annotations/SWFType.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/annotations/SWFType.java @@ -48,6 +48,6 @@ public @interface SWFType { //Count to add to countField int countAdd() default 0; - + boolean canAdd() default true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/BEVELFILTER.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/BEVELFILTER.java index 717de8ffb..426c3f61f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/BEVELFILTER.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/BEVELFILTER.java @@ -59,7 +59,7 @@ public class BEVELFILTER extends FILTER { * Radian angle of the drop shadow */ @SWFType(BasicType.FIXED) - public double angle = 45 * Math.PI / 180; + public double angle = 45 * Math.PI / 180; /** * Distance of the drop shadow diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/COLORMATRIXFILTER.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/COLORMATRIXFILTER.java index 550987f34..979de1a95 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/COLORMATRIXFILTER.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/COLORMATRIXFILTER.java @@ -38,7 +38,7 @@ public class COLORMATRIXFILTER extends FILTER { */ @SWFType(BasicType.FLOAT) @SWFArray(count = 20) - public float[] matrix = new float[] { + public float[] matrix = new float[]{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/CONVOLUTIONFILTER.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/CONVOLUTIONFILTER.java index 37d26e11a..ea629c9f6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/CONVOLUTIONFILTER.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/CONVOLUTIONFILTER.java @@ -62,8 +62,8 @@ public class CONVOLUTIONFILTER extends FILTER { /** * Matrix values */ - @SWFType(value = BasicType.FLOAT, countField = "matrixX * matrixY", canAdd = false) - public float[] matrix = new float[] { + @SWFType(value = BasicType.FLOAT, countField = "matrixX * matrixY", canAdd = false) + public float[] matrix = new float[]{ 0, 0, 0, 0, 1, 0, 0, 0, 0 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/ConvolveOp.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/ConvolveOp.java index d5a8d621f..15a44bccf 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/ConvolveOp.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/ConvolveOp.java @@ -54,7 +54,7 @@ public class ConvolveOp implements BufferedImageOp, RasterOp { this.srcY = srcY; this.srcWidth = srcWidth; this.srcHeight = srcHeight; - } + } @Override public BufferedImage createCompatibleDestImage(BufferedImage src, diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/DROPSHADOWFILTER.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/DROPSHADOWFILTER.java index 2e7e8632c..8738195a7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/DROPSHADOWFILTER.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/DROPSHADOWFILTER.java @@ -54,7 +54,7 @@ public class DROPSHADOWFILTER extends FILTER { * Radian angle of the drop shadow */ @SWFType(BasicType.FIXED) - public double angle = 45 * Math.PI / 180; + public double angle = 45 * Math.PI / 180; /** * Distance of the drop shadow diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/Filtering.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/Filtering.java index 0c594f134..4a2909911 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/Filtering.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/Filtering.java @@ -63,26 +63,26 @@ public class Filtering { if (radiusY == 0) { radiusY = 1; } - + long limit = Configuration.boxBlurPixelsLimit.get() * 10000L; - + if ((long) w * (long) h > limit) { return; } - - while (((long) radiusY * (long) radiusX * (long) w * (long) h) > limit) { + + while (((long) radiusY * (long) radiusX * (long) w * (long) h) > limit) { // decrease radius if (radiusY > 1) { radiusY--; } if (radiusX > 1) { radiusX--; - } + } } - + int radiusXHalf = radiusX / 2; int radiusYHalf = radiusY / 2; - double divisor = radiusX * radiusY; + double divisor = radiusX * radiusY; for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { @@ -113,7 +113,7 @@ public class Filtering { sumA += a; sumR += r; sumG += g; - sumB += b; + sumB += b; } } int da = (int) Math.floor(sumA / divisor); @@ -132,7 +132,7 @@ public class Filtering { db = 255; } - newColors[index] = RGBA.toInt(dr, dg, db, da); + newColors[index] = RGBA.toInt(dr, dg, db, da); } } for (int y = 0; y < h; y++) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/GRADIENTBEVELFILTER.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/GRADIENTBEVELFILTER.java index 55f449f35..973480b3c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/GRADIENTBEVELFILTER.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/GRADIENTBEVELFILTER.java @@ -38,8 +38,8 @@ public class GRADIENTBEVELFILTER extends FILTER { /** * Gradient colors */ - @SWFArray(value = "color", countField = "numColors") - public RGBA[] gradientColors = new RGBA[] { + @SWFArray(value = "color", countField = "numColors") + public RGBA[] gradientColors = new RGBA[]{ new RGBA(Color.WHITE), new RGBA(255, 0, 0, 0), new RGBA(Color.BLACK) @@ -49,8 +49,8 @@ public class GRADIENTBEVELFILTER extends FILTER { * Gradient ratios */ @SWFType(value = BasicType.UI8) - @SWFArray(value = "ratio", countField = "numColors") - public int[] gradientRatio = new int[] { + @SWFArray(value = "ratio", countField = "numColors") + public int[] gradientRatio = new int[]{ 0, 128, 255 }; @@ -70,7 +70,7 @@ public class GRADIENTBEVELFILTER extends FILTER { * Radian angle of the gradient bevel */ @SWFType(BasicType.FIXED) - public double angle = 45 * Math.PI / 180; + public double angle = 45 * Math.PI / 180; /** * Distance of the gradient bevel diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/GRADIENTGLOWFILTER.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/GRADIENTGLOWFILTER.java index 98926df9d..33773ca05 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/GRADIENTGLOWFILTER.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/filters/GRADIENTGLOWFILTER.java @@ -39,7 +39,7 @@ public class GRADIENTGLOWFILTER extends FILTER { * Gradient colors */ @SWFArray(value = "color", countField = "numColors") - public RGBA[] gradientColors = new RGBA[] { + public RGBA[] gradientColors = new RGBA[]{ new RGBA(255, 255, 255, 0), new RGBA(Color.BLACK) }; @@ -49,7 +49,7 @@ public class GRADIENTGLOWFILTER extends FILTER { */ @SWFType(value = BasicType.UI8) @SWFArray(value = "ratio", countField = "numColors") - public int[] gradientRatio = new int[] { + public int[] gradientRatio = new int[]{ 0, 255 }; @@ -69,7 +69,7 @@ public class GRADIENTGLOWFILTER extends FILTER { * Radian angle of the gradient glow */ @SWFType(BasicType.FIXED) - public double angle = 45 * Math.PI / 180; + public double angle = 45 * Math.PI / 180; /** * Distance of the gradient glow @@ -150,7 +150,7 @@ public class GRADIENTGLOWFILTER extends FILTER { public double getDeltaY() { return blurY + Math.abs(distance * Math.sin(angle)); } - + @Override public String toSvg(Document document, Element filtersElement, SVGExporter exporter, String in) { return null; //NOT SUPPORTED diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/gfx/GFxInputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/gfx/GFxInputStream.java index 07719bec7..ca436de40 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/gfx/GFxInputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/gfx/GFxInputStream.java @@ -73,7 +73,7 @@ public class GFxInputStream { public long getPos() { return is.getPos(); - } + } public int readUI8(String name) throws IOException { newDumpLevel(name, "UI8"); @@ -222,7 +222,7 @@ public class GFxInputStream { endDumpLevel(); return ret; } - + private int read() throws IOException { return is.read(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/gfx/GFxOutputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/gfx/GFxOutputStream.java index 084ee49c8..ac943b410 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/gfx/GFxOutputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/gfx/GFxOutputStream.java @@ -121,14 +121,14 @@ public class GFxOutputStream extends OutputStream { public void write(byte[] b) throws IOException { os.write(b); pos += b.length; - } + } @Override public void write(byte[] b, int off, int len) throws IOException { os.write(b, off, len); pos += len; } - + /** * Writes SI32 (Signed 32bit integer) value to the stream * diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/CurvedEdgeRecord.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/CurvedEdgeRecord.java index a0e94f367..4e220b329 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/CurvedEdgeRecord.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/CurvedEdgeRecord.java @@ -86,7 +86,7 @@ public class CurvedEdgeRecord extends SHAPERECORD { numBits = 0; } } - + @Override public boolean isTooLarge() { calculateBits(); @@ -126,6 +126,5 @@ public class CurvedEdgeRecord extends SHAPERECORD { } return this.anchorDeltaY == other.anchorDeltaY; } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/EndShapeRecord.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/EndShapeRecord.java index 74b9763c4..8071f0b98 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/EndShapeRecord.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/EndShapeRecord.java @@ -61,7 +61,7 @@ public class EndShapeRecord extends SHAPERECORD { @Override public boolean isTooLarge() { return false; - } + } @Override public int hashCode() { @@ -84,6 +84,5 @@ public class EndShapeRecord extends SHAPERECORD { final EndShapeRecord other = (EndShapeRecord) obj; return this.endOfShape == other.endOfShape; } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java index b96df97b2..5ad51b024 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java @@ -536,6 +536,6 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters, Seriali throw new RuntimeException(); } } - + public abstract boolean isTooLarge(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StraightEdgeRecord.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StraightEdgeRecord.java index 1784b2426..8c9334b58 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StraightEdgeRecord.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StraightEdgeRecord.java @@ -118,7 +118,7 @@ public class StraightEdgeRecord extends SHAPERECORD { } } } - + @Override public boolean isTooLarge() { calculateBits(); @@ -158,6 +158,5 @@ public class StraightEdgeRecord extends SHAPERECORD { } return this.deltaY == other.deltaY; } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StyleChangeRecord.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StyleChangeRecord.java index 2ca8f5f34..dd4ad2f05 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StyleChangeRecord.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/StyleChangeRecord.java @@ -149,7 +149,7 @@ public final class StyleChangeRecord extends SHAPERECORD implements Cloneable { public void calculateBits() { moveBits = SWFOutputStream.getNeededBitsS(moveDeltaX, moveDeltaY); } - + @Override public boolean isTooLarge() { if (!stateMoveTo) { @@ -225,6 +225,5 @@ public final class StyleChangeRecord extends SHAPERECORD implements Cloneable { return Objects.equals(this.lineStyles, other.lineStyles);*/ return true; } - - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/sound/SoundFormat.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/sound/SoundFormat.java index 6c9fc2594..b364a6cb8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/sound/SoundFormat.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/sound/SoundFormat.java @@ -87,7 +87,7 @@ public class SoundFormat { this.samplingRate = samplingRate; this.stereo = stereo; ensureFormat(); - } + } public boolean play(SWFInputStream sis) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -200,7 +200,7 @@ public class SoundFormat { return false; } } - + public byte[] decode(SOUNDINFO soundInfo, List dataRanges, int skipSamples) throws IOException { ensureFormat(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -214,22 +214,22 @@ public class SoundFormat { if (skipSamples > 0) { byte[] data = decodedData; data = Arrays.copyOfRange( - data, + data, skipSamples * 2 * (stereo ? 2 : 1), data.length - ); + ); return data; } - + return decodedData; } - + private byte[] resample(byte[] decodedData) throws IOException { if (samplingRate == 44100) { return decodedData; } boolean resamplingFromStereo = true; - + ByteArrayOutputStream baosResampled = new ByteArrayOutputStream(); for (int i = 0; i < decodedData.length; i += (resamplingFromStereo ? 4 : 2)) { if (i + 1 >= decodedData.length) { @@ -237,8 +237,7 @@ public class SoundFormat { } int left = ((decodedData[i] & 0xff) + ((decodedData[i + 1] & 0xff) << 8)) << 16 >> 16; int right = left; - if (resamplingFromStereo) - { + if (resamplingFromStereo) { if (i + 3 >= decodedData.length) { break; } @@ -258,7 +257,7 @@ public class SoundFormat { nextRight = ((decodedData[nextI + 2] & 0xff) + ((decodedData[nextI + 3] & 0xff) << 8)) << 16 >> 16; } } - } + } writeLE(baosResampled, left, 2); writeLE(baosResampled, right, 2); @@ -286,17 +285,16 @@ public class SoundFormat { writeLE(baosResampled, left + (nextLeft - left) * 3 / 4, 2); writeLE(baosResampled, right + (nextRight - right) * 3 / 4, 2); } - if (samplingRate == 22050) - { + if (samplingRate == 22050) { writeLE(baosResampled, (left + nextLeft) / 2, 2); writeLE(baosResampled, (right + nextRight) / 2, 2); - } + } } return baosResampled.toByteArray(); } - + public boolean createWav(SOUNDINFO soundInfo, List dataRanges, OutputStream os, int skipSamples, boolean resample) throws IOException { - + byte[] decodedData = decode(soundInfo, dataRanges, skipSamples); boolean convertedStereo = stereo; @@ -310,7 +308,7 @@ public class SoundFormat { baosFiltered = new ByteArrayOutputStream(); int inPointBytes = inPoint * 2 /*16bit*/ * (stereo ? 2 : 1); //Q: Use skipSamples value? - + int outPointBytes = soundInfo.hasOutPoint ? outPoint * 2 /*16bit*/ * (stereo ? 2 : 1) : decodedData.length; for (int i = inPointBytes; i < outPointBytes; i += (stereo ? 4 : 2)) { if (i + 1 >= decodedData.length) { @@ -323,8 +321,8 @@ public class SoundFormat { break; } right = ((decodedData[i + 2] & 0xff) + ((decodedData[i + 3] & 0xff) << 8)) << 16 >> 16; - } - + } + if (soundInfo.hasEnvelope) { for (int e = 0; e < soundInfo.envelopeRecords.length - 1; e++) { int envPosBytes = inPointBytes + (int) (soundInfo.envelopeRecords[e].pos44 * samplingRate / 44100.0 * 2 * (stereo ? 2 : 1)); @@ -345,12 +343,11 @@ public class SoundFormat { } writeLE(baosFiltered, left, 2); - writeLE(baosFiltered, right, 2); + writeLE(baosFiltered, right, 2); } convertedStereo = true; } - - + byte[] resampled = resample ? resample(baosFiltered.toByteArray()) : baosFiltered.toByteArray(); try { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/sound/SoundInfoSoundCacheEntry.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/sound/SoundInfoSoundCacheEntry.java index e25813c11..83869a665 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/sound/SoundInfoSoundCacheEntry.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/sound/SoundInfoSoundCacheEntry.java @@ -65,5 +65,5 @@ public class SoundInfoSoundCacheEntry { } return Objects.equals(this.soundTag, other.soundTag); } - + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java index 854bee3e4..e08c4b19a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java @@ -244,38 +244,38 @@ public class XFLConverter { EDGE_DECIMAL_FORMAT.setGroupingUsed(false); } - private static class StatusStack { + private Stack statuses = new Stack<>(); private ProgressListener progressListener; public StatusStack(ProgressListener progressListener) { this.progressListener = progressListener; - } - + } + public String getStatusString() { return String.join(", ", statuses); } - + private void update() { if (progressListener == null) { return; } - + progressListener.status(getStatusString()); } - + public void pushStatus(String status) { statuses.push(status); update(); } - + public void popStatus() { statuses.pop(); update(); } } - + private static String formatEdgeDouble(double value, boolean curved, boolean morphshape) { if (value % 1 == 0) { return "" + (int) value; @@ -816,12 +816,11 @@ public class XFLConverter { if (mat == null) { mat = new MATRIX(); } - + List shapeRecordsAdvanced; - + ShapeFixer fixer = morphshape ? new MorphShapeFixer() : new ShapeFixer(); shapeRecordsAdvanced = fixer.fix(shapeRecords, shapeNum, fillStyles, lineStyles); - List edges = new ArrayList<>(); int lineStyleCount = 0; @@ -1101,7 +1100,7 @@ public class XFLConverter { if ("0".equals(strokeStyle)) { strokeStyle = null; } - + if (prevStrokeOnly != null && strokeStyle != null && strokeStyle.equals(prevStrokeOnly) @@ -1169,10 +1168,10 @@ public class XFLConverter { depthCacheAsBitmap.remove(d); depthHasNonemptyMatrix.remove(d); } - if (t instanceof PlaceObjectTypeTag) { + if (t instanceof PlaceObjectTypeTag) { PlaceObjectTypeTag po = (PlaceObjectTypeTag) t; int d = po.getDepth(); - + if (po.flagMove() == depthMap.containsKey(d)) { if (!po.flagMove()) { depthHasInstanceName.put(d, false); @@ -1180,7 +1179,7 @@ public class XFLConverter { depthCacheAsBitmap.put(d, false); depthHasNonemptyMatrix.put(d, false); } - + if (po.getInstanceName() != null) { depthHasInstanceName.put(d, true); } else if (po.getColorTransform() != null) { @@ -1706,7 +1705,7 @@ public class XFLConverter { convertMedia(swf, characterVariables, characterClasses, nonLibraryShapes, backgroundColor, tags, characters, files, datfiles, flaVersion, writer, statusStack); statusStack.popStatus(); statusStack.pushStatus("symbols"); - convertSymbols(swf, characterVariables, characterClasses, characterScriptPacks, nonLibraryShapes, backgroundColor, tags, characters, files, datfiles, flaVersion, writer, placeToMaskedSymbol, multiUsageMorphShapes, statusStack); + convertSymbols(swf, characterVariables, characterClasses, characterScriptPacks, nonLibraryShapes, backgroundColor, tags, characters, files, datfiles, flaVersion, writer, placeToMaskedSymbol, multiUsageMorphShapes, statusStack); statusStack.popStatus(); } @@ -1719,11 +1718,11 @@ public class XFLConverter { if (symbol == null) { continue; } - + if ((symbol instanceof ShapeTag) && nonLibraryShapes.contains(symbol.getCharacterId())) { continue; //shapes with 1 ocurrence and single layer are not added to library - } - + } + if ((symbol instanceof ShapeTag) || (symbol instanceof DefineSpriteTag) || (symbol instanceof ButtonTag)) { statusStack.pushStatus(symbol.toString()); XFLXmlWriter symbolStr = new XFLXmlWriter(); @@ -1818,7 +1817,7 @@ public class XFLConverter { DefineSoundTag sound = (DefineSoundTag) soundCharTag; convertSoundUsage(symbolStr, sound, soundInfo); } else { - logger.log(Level.WARNING, "Tag (ID={0}) expected to be DefineSound, {1} found. It is referenced from DefineButtonSound({2}).", new Object[] {soundChar, soundCharTag.getClass().getSimpleName(), defineButtonSound.buttonId}); + logger.log(Level.WARNING, "Tag (ID={0}) expected to be DefineSound, {1} found. It is referenced from DefineButtonSound({2}).", new Object[]{soundChar, soundCharTag.getClass().getSimpleName(), defineButtonSound.buttonId}); } } symbolStr.writeStartElement("elements"); @@ -1885,16 +1884,16 @@ public class XFLConverter { statusStack.pushStatus(character.toString()); convertShape(characterId, swf, characters, matrix, shape.getShapeNum(), shape.getShapes().shapeRecords, shape.getShapes().fillStyles, shape.getShapes().lineStyles, false, false, recCharWriter); statusStack.popStatus(); - } else if (character instanceof TextTag) { - statusStack.pushStatus(character.toString()); + } else if (character instanceof TextTag) { + statusStack.pushStatus(character.toString()); convertText(null, (TextTag) character, matrix, filters, null, recCharWriter); statusStack.popStatus(); } else if (character instanceof DefineVideoStreamTag) { - statusStack.pushStatus(character.toString()); + statusStack.pushStatus(character.toString()); convertVideoInstance(null, matrix, (DefineVideoStreamTag) character, null, recCharWriter); statusStack.popStatus(); } else if (character instanceof ImageTag) { - statusStack.pushStatus(character.toString()); + statusStack.pushStatus(character.toString()); convertImageInstance(null, matrix, (ImageTag) character, null, recCharWriter); statusStack.popStatus(); } else { @@ -1978,13 +1977,13 @@ public class XFLConverter { writer.writeEndElement(); //hasSymbol = true; statusStack.popStatus(); - } + } } statusStack.pushStatus("extracting multilevel clips"); extractMultilevelClips(swf.getTags(), writer, swf, nextClipId, nonLibraryShapes, backgroundColor, characters, flaVersion, files, placeToMaskedSymbol, multiUsageMorphShapes, statusStack); statusStack.popStatus(); - + statusStack.pushStatus("converting multiusage morphshapes"); extractMultiUsageMorphShapes(writer, swf, nonLibraryShapes, backgroundColor, characters, flaVersion, files, multiUsageMorphShapes, statusStack); statusStack.popStatus(); @@ -2002,7 +2001,7 @@ public class XFLConverter { long soundSampleCount = 0; byte[] soundData = SWFInputStream.BYTE_ARRAY_EMPTY; int[] rateMap = {5, 11, 22, 44}; - String exportFormat = "flv"; + String exportFormat = "flv"; if (symbol instanceof SoundStreamFrameRange) { SoundStreamHeadTypeTag head = ((SoundStreamFrameRange) symbol).getHead(); soundFormat = head.getSoundFormatId(); @@ -2082,7 +2081,7 @@ public class XFLConverter { seekSamples = s.seekSamples; exportFormat = "wav"; convertMp3ToWav = true; - } + } if (!s.frames.isEmpty()) { MP3FRAME frame = s.frames.get(0); int bitRate = frame.getBitRate() / 1000; @@ -2129,7 +2128,7 @@ public class XFLConverter { exportFormat = "wav"; convertMp3ToWav = true; break; - } + } } } catch (IOException | IndexOutOfBoundsException ex) { logger.log(Level.SEVERE, null, ex); @@ -2143,7 +2142,7 @@ public class XFLConverter { } catch (IOException ex) { logger.log(Level.SEVERE, null, ex); } - + byte[] decodedData = null; try { decodedData = st.getSoundFormat().decode(null, st.getRawSoundData(), seekSamples); @@ -2154,7 +2153,6 @@ public class XFLConverter { logger.log(Level.SEVERE, null, ex); } - String datFileName = null; if (convertMp3ToWav && decodedData != null) { long ts = getTimestamp(swf); @@ -2177,7 +2175,7 @@ public class XFLConverter { writer.writeAttribute("exportBits", bits); writer.writeAttribute("sampleCount", soundSampleCount); } - + private void convertMedia(SWF swf, Map characterVariables, Map characterClasses, List nonLibraryShapes, String backgroundColor, ReadOnlyTagList tags, HashMap characters, HashMap files, HashMap datfiles, FLAVersion flaVersion, XFLXmlWriter writer, StatusStack statusStack) throws XMLStreamException { boolean hasMedia = false; for (int ch : characters.keySet()) { @@ -2195,12 +2193,11 @@ public class XFLConverter { } writer.writeStartElement("media"); - - + for (int ch : characters.keySet()) { CharacterTag symbol = characters.get(ch); if (symbol instanceof ImageTag) { - + statusStack.pushStatus(symbol.toString()); ImageTag imageTag = (ImageTag) symbol; boolean allowSmoothing = false; @@ -2401,7 +2398,7 @@ public class XFLConverter { convertSoundMedia(swf, tags, range, writer, files, datfiles); writer.writeEndElement(); statusStack.popStatus(); - } + } } if (t instanceof DefineSpriteTag) { DefineSpriteTag sprite = (DefineSpriteTag) t; @@ -2419,7 +2416,7 @@ public class XFLConverter { } } } - + writer.writeEndElement(); } @@ -2554,7 +2551,7 @@ public class XFLConverter { writer.writeStartElement("SoundEnvelope"); writer.writeEmptyElement("SoundEnvelopePoint", new String[]{"level0", "32768", "level1", "32768"}); writer.writeEndElement(); - + } if (startSound != null && sound != null) { convertSoundUsage(writer, sound, startSound.soundInfo); @@ -2611,7 +2608,7 @@ public class XFLConverter { boolean lastIn = false; XFLXmlWriter writer2 = new XFLXmlWriter(); prevStr += ""; - int frame = -1; + int frame = -1; String lastElements = ""; CharacterTag lastCharacter = null; MATRIX lastMatrix = null; @@ -2637,7 +2634,7 @@ public class XFLConverter { int lastTweenRatio = -1; MorphShapeTag standaloneShapeTweener = null; MATRIX standaloneShapeTweenerMatrix = null; - + //Add ShowFrameTag to the end when there is one last missing List timTags = timelineTags.toArrayList(); boolean needsFrameAdd = false; @@ -2654,7 +2651,6 @@ public class XFLConverter { timTags.add(new ShowFrameTag(swf)); } - for (Tag t : timTags) { if (t instanceof PlaceObjectTypeTag) { PlaceObjectTypeTag po = (PlaceObjectTypeTag) t; @@ -2725,7 +2721,7 @@ public class XFLConverter { } } } - + if (t instanceof RemoveTag) { RemoveTag rt = (RemoveTag) t; if (rt.getDepth() == depth) { @@ -2752,7 +2748,7 @@ public class XFLConverter { if (t instanceof ShowFrameTag) { frame++; - if (frame < startFrame || frame > endFrame || (onlyFrames != null && !onlyFrames.contains(frame))) { + if (frame < startFrame || frame > endFrame || (onlyFrames != null && !onlyFrames.contains(frame))) { if (lastIn) { if (!lastElements.isEmpty()) { convertFrame(scene, false, null, null, frame - duration, duration, "", lastElements, files, writer2, null); @@ -2772,13 +2768,13 @@ public class XFLConverter { continue; } lastIn = true; - + XFLXmlWriter elementsWriter = new XFLXmlWriter(); - + if (shapeTweener != null) { MorphShapeTag m = shapeTweener; XFLXmlWriter addLastWriter = new XFLXmlWriter(); - + if ((character instanceof MorphShapeTag) && (!multiUsageMorphShapes.contains(character.getCharacterId()))) { MorphShapeTag m2 = (MorphShapeTag) character; statusStack.pushStatus(m2.toString()); @@ -2789,11 +2785,11 @@ public class XFLConverter { SHAPEWITHSTYLE endShape = m.getShapeAtRatio(65535); //lastTweenRatio); convertShape(m.getCharacterId(), swf, characters, matrix, m.getShapeNum() == 1 ? 3 : 4, endShape.shapeRecords, m.getFillStyles().getFillStylesAt(65535), m.getLineStyles().getLineStylesAt(m.getShapeNum(), 65535), true, false, addLastWriter); } - + Integer ease = EasingDetector.getEaseFromShapeRatios(morphShapeRatios); Integer acceleration = null; if (ease != null) { - acceleration = -ease; + acceleration = -ease; } convertFrame(scene, true, null, null, frame - duration, duration, "", lastElements, files, writer2, acceleration); duration = 1; @@ -2801,10 +2797,10 @@ public class XFLConverter { lastMatrix = matrix; lastCharacter = character; shapeTweener = null; - morphShapeRatios.clear(); + morphShapeRatios.clear(); continue; } - + if (character instanceof ShapeTag && standaloneShapeTweener != null) { convertSymbolInstance(instanceName, standaloneShapeTweenerMatrix, colorTransForm, cacheAsBitmap, blendMode, filters, isVisible, backGroundColor, clipActions, metadata, standaloneShapeTweener, characters, tags, flaVersion, elementsWriter); standaloneShapeTweener = null; @@ -2813,7 +2809,7 @@ public class XFLConverter { elementsWriter.writeCharactersRaw(lastElements); } else { ShapeTag shape = (ShapeTag) character; - statusStack.pushStatus(character.toString()); + statusStack.pushStatus(character.toString()); convertShape(shape.getCharacterId(), swf, characters, matrix, shape.getShapeNum(), shape.getShapes().shapeRecords, shape.getShapes().fillStyles, shape.getShapes().lineStyles, false, false, elementsWriter); statusStack.popStatus(); } @@ -2827,11 +2823,11 @@ public class XFLConverter { standaloneShapeTweener = m; standaloneShapeTweenerMatrix = matrix; convertSymbolInstance(instanceName, matrix, colorTransForm, cacheAsBitmap, blendMode, filters, isVisible, backGroundColor, clipActions, metadata, character, characters, tags, flaVersion, elementsWriter); - } else { + } else { morphShapeRatios.add(ratio == -1 ? 0 : ratio); if (lastCharacter == m && Objects.equals(matrix, lastMatrix)) { elementsWriter.writeCharactersRaw(lastElements); - } else { + } else { statusStack.pushStatus(m.toString()); convertShape(m.getCharacterId(), swf, characters, matrix, m.getShapeNum() == 1 ? 3 : 4, m.getStartEdges().shapeRecords, m.getFillStyles().getStartFillStyles(), m.getLineStyles().getStartLineStyles(m.getShapeNum()), true, false, elementsWriter); statusStack.popStatus(); @@ -2851,8 +2847,8 @@ public class XFLConverter { } else if (character != null) { convertSymbolInstance(instanceName, matrix, colorTransForm, cacheAsBitmap, blendMode, filters, isVisible, backGroundColor, clipActions, metadata, character, characters, tags, flaVersion, elementsWriter); } - } - + } + String elements = elementsWriter.toString(); if (!elements.equals(lastElements) && frame > 0) { convertFrame(scene, false, null, null, frame - duration, duration, "", lastElements, files, writer2, null); @@ -2864,10 +2860,10 @@ public class XFLConverter { } lastElements = elements; lastCharacter = character; - lastMatrix = matrix; + lastMatrix = matrix; } } - + if ((!lastElements.isEmpty() || writer2.length() > 0) && lastIn) { if (frame >= startFrame && frame <= endFrame && (onlyFrames == null || onlyFrames.contains(frame))) { frame++; @@ -3176,7 +3172,7 @@ public class XFLConverter { return hasScript; } - private int convertLabelsLayers(ReadOnlyTagList tags, ReadOnlyTagList timeLineTags, String backgroundColor, XFLXmlWriter writer) throws XMLStreamException { + private int convertLabelsLayers(ReadOnlyTagList tags, ReadOnlyTagList timeLineTags, String backgroundColor, XFLXmlWriter writer) throws XMLStreamException { Map> frameToLabels = new HashMap<>(); int frame = 0; int layerCount = 0; @@ -3196,7 +3192,7 @@ public class XFLConverter { } int frameCount = frame; - for (int lay = 0; lay < layerCount; lay++) { + for (int lay = 0; lay < layerCount; lay++) { writer.writeStartElement("DOMLayer", new String[]{"name", "Labels Layer" + (layerCount > 1 ? " " + (lay + 1) : ""), "color", randomOutlineColor()}); writer.writeStartElement("frames"); int duration = 0; @@ -3238,7 +3234,7 @@ public class XFLConverter { writer.writeEndElement(); // frames writer.writeEndElement(); // DOMLayer } - + return layerCount; } @@ -3269,7 +3265,7 @@ public class XFLConverter { } } else if (t instanceof SoundStreamHeadTypeTag) { SoundStreamHeadTypeTag soundStreamHead = (SoundStreamHeadTypeTag) t; - + for (SoundStreamFrameRange range : soundStreamHead.getRanges()) { if (files.containsKey(range.getFlaExportName() + "." + soundStreamHead.getExportFormat().toString().toLowerCase())) { //Sound was really exported soundStreamRanges.add(range); @@ -3287,7 +3283,7 @@ public class XFLConverter { if (soundStreamRanges.get(i).startFrame >= scene.startFrame + frame) { continue; } - + writer.writeStartElement("DOMLayer", new String[]{"name", "Sound Layer " + (soundLayerIndex++), "color", randomOutlineColor()}); writer.writeStartElement("frames"); @@ -3380,8 +3376,8 @@ public class XFLConverter { ) throws XMLStreamException { XFLXmlWriter symbolStr = new XFLXmlWriter(); - extractMultilevelClips(timelineTags, writer, swf, nextClipId, nonLibraryShapes, backgroundColor, characters, flaVersion, files, placeToMaskedSymbol, multiUsageMorphShapes, statusStack); - + extractMultilevelClips(timelineTags, writer, swf, nextClipId, nonLibraryShapes, backgroundColor, characters, flaVersion, files, placeToMaskedSymbol, multiUsageMorphShapes, statusStack); + if (nextClipId.getVal() < 0) { nextClipId.setVal(swf.getNextCharacterId()); } else { @@ -3396,7 +3392,7 @@ public class XFLConverter { "name", generateMaskedSymbolName(objectId), "lastModified", Long.toString(getTimestamp(swf))}); symbolStr.writeAttribute("symbolType", "graphic"); - + convertTimelines(swf, swf.getAbcIndex(), objectId, "", nonLibraryShapes, backgroundColor, timelineTags, timelineTags, characters, generateMaskedSymbolName(objectId), flaVersion, files, symbolStr, null, placeToMaskedSymbol, multiUsageMorphShapes, statusStack); symbolStr.writeEndElement(); // DOMSymbolItem @@ -3488,8 +3484,8 @@ public class XFLConverter { ) throws XMLStreamException { for (int objectId : multiUsageMorphShapes) { - statusStack.pushStatus(characters.get(objectId).toString()); - + statusStack.pushStatus(characters.get(objectId).toString()); + XFLXmlWriter symbolStr = new XFLXmlWriter(); symbolStr.writeStartElement("DOMSymbolItem", new String[]{ "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance", @@ -3554,7 +3550,7 @@ public class XFLConverter { Map clipStartFrames = new HashMap<>(); Set occupiedDepths = new HashSet<>(); - + int maxDepth = getMaxDepth(timelineTags); Tag lastTag = null; for (Tag t : timelineTags) { @@ -3563,9 +3559,9 @@ public class XFLConverter { } if (t instanceof PlaceObjectTypeTag) { PlaceObjectTypeTag po = (PlaceObjectTypeTag) t; - + if (po.flagMove() == occupiedDepths.contains(po.getDepth())) { - + if (po.flagMove()) { if (po.getCharacterId() != -1 || po.getClassName() != null) { occupiedDepths.add(po.getDepth()); @@ -3573,7 +3569,7 @@ public class XFLConverter { } else { occupiedDepths.add(po.getDepth()); } - + if (po.getClipDepth() > -1) { clipStartFrames.put(po, f); clipPlaces.add(po); @@ -3587,12 +3583,12 @@ public class XFLConverter { depthToClipPlace.remove(po.getDepth()); } } - } + } } if (t instanceof RemoveTag) { RemoveTag re = (RemoveTag) t; occupiedDepths.remove(re.getDepth()); - + if (depthToClipPlace.containsKey(re.getDepth())) { clipFinishFrames.put(depthToClipPlace.get(re.getDepth()), f - 1); depthToClipPlace.remove(re.getDepth()); @@ -3732,15 +3728,16 @@ public class XFLConverter { ShowFrameTag showFrame = new ShowFrameTag(swf); //set timelined? delegatedTimeline.add(showFrame); - } + } addExtractedClip(new ReadOnlyTagList(delegatedTimeline), writer, swf, nextClipId, nonLibraryShapes, backgroundColor, characters, flaVersion, files, placeToMaskedSymbol, multiUsageMorphShapes, statusStack); placeToMaskedSymbol.put(secondPlace, new MultiLevelClip(secondPlace, nextClipId.getVal(), numFrames)); } } } } - + private class Scene { + public int startFrame; public int endFrame; public String name; @@ -3750,12 +3747,12 @@ public class XFLConverter { this.startFrame = startFrame; this.endFrame = endFrame; this.name = name; - } + } } private void convertTimelines(SWF swf, AbcIndexing abcIndex, int spriteId, String linkageIdentifier, List nonLibraryShapes, String backgroundColor, ReadOnlyTagList tags, ReadOnlyTagList timelineTags, HashMap characters, String spriteName, FLAVersion flaVersion, HashMap files, XFLXmlWriter writer, ScriptPack scriptPack, Map placeToMaskedSymbol, List multiUsageMorphShapes, StatusStack statusStack) throws XMLStreamException { - List classNames = new ArrayList<>(); + List classNames = new ArrayList<>(); //Searches for Object.registerClass("linkageIdentifier",mypkg.MyClass); ActionTreeOperation getRegisterClassOp = new ActionTreeOperation() { @Override @@ -3828,15 +3825,15 @@ public class XFLConverter { } else { writer.writeStartElement("timeline"); } - + List scenes = new ArrayList<>(); - + DefineSceneAndFrameLabelDataTag sceneLabelTag = null; int fc = 0; boolean lastShowFrame = true; for (Tag t : timelineTags) { if (t instanceof DefineSceneAndFrameLabelDataTag) { - sceneLabelTag = (DefineSceneAndFrameLabelDataTag) t; + sceneLabelTag = (DefineSceneAndFrameLabelDataTag) t; } if (t instanceof ShowFrameTag) { @@ -3853,23 +3850,22 @@ public class XFLConverter { if (sceneLabelTag != null) { for (int i = 0; i < sceneLabelTag.sceneOffsets.length; i++) { scenes.add(new Scene( - (int) sceneLabelTag.sceneOffsets[i], - sceneLabelTag.sceneOffsets.length - 1 == i + (int) sceneLabelTag.sceneOffsets[i], + sceneLabelTag.sceneOffsets.length - 1 == i ? fc - 1 : (int) sceneLabelTag.sceneOffsets[i + 1] - 1, sceneLabelTag.sceneNames[i])); } - + if (!scenes.isEmpty()) { int sceneId = 0; int f = 0; List sceneTags = new ArrayList<>(); - + //TODO: The sound stream heads needs better handling, like splitting them into two or something... - SoundStreamHeadTypeTag soundStreamHead = null; SoundStreamHeadTypeTag soundStreamHeadThisScene = null; for (Tag t : timelineTags) { - sceneTags.add(t); + sceneTags.add(t); if (t instanceof SoundStreamHeadTypeTag) { soundStreamHeadThisScene = (SoundStreamHeadTypeTag) t; soundStreamHead = soundStreamHeadThisScene; @@ -3894,9 +3890,9 @@ public class XFLConverter { scenes.get(sceneId).timelineSubTags = new ReadOnlyTagList(sceneTags); } } - + } - + if (scenes.isEmpty()) { Scene scene = new Scene(0, fc - 1, "Scene 1"); scene.timelineSubTags = timelineTags; @@ -3907,11 +3903,10 @@ public class XFLConverter { scene.timelineSubTags = timelineTags; scenes.add(scene); } - - + for (Scene scene : scenes) { writer.writeStartElement("DOMTimeline", new String[]{"name", scene.name}); - writer.writeStartElement("layers"); + writer.writeStartElement("layers"); ReadOnlyTagList sceneTimelineTags = scene.timelineSubTags; Reference labelLayerCountRef = new Reference<>(0); @@ -3919,9 +3914,9 @@ public class XFLConverter { boolean hasScript = convertActionScriptLayer(scene, initClipScript, abcIndex, spriteId, tags, sceneTimelineTags, backgroundColor, writer, scriptPack); int index = 0; - + index += labelLayerCount; - + if (hasScript) { index++; } @@ -4029,7 +4024,7 @@ public class XFLConverter { Map>> frameToDepthToClips = new TreeMap<>(); - for (f = 0; f < frameCount; f++) { + for (f = 0; f < frameCount; f++) { for (int d = 0; d < maxDepth; d++) { for (int p = 0; p < clipPlaces.size() - 1; p++) { PlaceObjectTypeTag po = clipPlaces.get(p); @@ -4121,7 +4116,7 @@ public class XFLConverter { int parentIndex = index; index++; - + for (int fx = clipFrame; fx <= lastFrame; fx++) { for (int nd = po.getClipDepth() - 1; nd > po.getDepth(); nd--) { if (!depthToFramesList.containsKey(nd) || !depthToFramesList.get(nd).contains(fx)) { @@ -4136,7 +4131,7 @@ public class XFLConverter { continue; } handledClips.add(po2); - + for (int ndx = po.getClipDepth() - 1; ndx > po2.getClipDepth(); ndx--) { boolean nonEmpty = writeLayer(scene, swf, index, depthToFramesList.get(ndx), ndx, clipFrame, lastFrame, parentIndex, writer, nonLibraryShapes, tags, sceneTimelineTags, characters, flaVersion, files, multiUsageMorphShapes, statusStack); for (int i = clipFrame; i <= lastFrame; i++) { @@ -4146,9 +4141,9 @@ public class XFLConverter { index++; } } - + MultiLevelClip mlc = placeToMaskedSymbol.get(po2); - + writer.writeStartElement("DOMLayer", new String[]{ "name", "Layer " + (index + 1) + (DEBUG_EXPORT_LAYER_DEPTHS ? " (depth " + po2.getDepth() + " clipdepth:" + po2.getClipDepth() + " maskedid:" + mlc.symbol + ")" : ""), "color", randomOutlineColor(), @@ -4213,7 +4208,7 @@ public class XFLConverter { } } } - + for (int nd = po.getClipDepth() - 1; nd > po.getDepth(); nd--) { boolean nonEmpty = writeLayer(scene, swf, index, depthToFramesList.get(nd), nd, clipFrame, lastFrame, parentIndex, writer, nonLibraryShapes, tags, sceneTimelineTags, characters, flaVersion, files, multiUsageMorphShapes, statusStack); for (int i = clipFrame; i <= lastFrame; i++) { @@ -4223,7 +4218,7 @@ public class XFLConverter { index++; } } - + if (index == parentIndex + 1) { //put at least one empty layer as masked, otherwise the mask layer will be visible writer.writeStartElement("DOMLayer", new String[]{ @@ -4711,7 +4706,7 @@ public class XFLConverter { if (rightMargin > -1) { writer.writeAttribute("rightMargin", twipToPixel(rightMargin)); } - + writer.writeAttribute("autoKern", "false"); if (size > -1) { writer.writeAttribute("size", twipToPixel(size)); @@ -4760,7 +4755,7 @@ public class XFLConverter { } return false; } - + private SoundStreamHeadTypeTag getFirstNonEmptySoundStreamHead(ReadOnlyTagList tags, Reference foundTags) { for (Tag t : tags) { if (t instanceof SoundStreamHeadTypeTag) { @@ -4861,7 +4856,7 @@ public class XFLConverter { } Map placeToMaskedSymbol = new HashMap<>(); - + StatusStack statusStack = new StatusStack(progressListener); convertFonts(characterClasses, swf.getTags(), domDocument, statusStack); @@ -5025,7 +5020,7 @@ public class XFLConverter { found = true; } } - + int streamFormat = 0; int streamCompress = 0; if ((soundFormat == SoundFormat.FORMAT_ADPCM) @@ -5117,7 +5112,7 @@ public class XFLConverter { default: streamCompress = 17; break; - } + } } } catch (IOException | IndexOutOfBoundsException ex) { logger.log(Level.SEVERE, null, ex); @@ -5126,7 +5121,7 @@ public class XFLConverter { } publishSettings.writeElementValue("StreamFormat", streamFormat); publishSettings.writeElementValue("StreamCompress", streamCompress); - } + } publishSettings.writeElementValue("EventFormat", 0); publishSettings.writeElementValue("EventCompress", 7); publishSettings.writeElementValue("OverrideSounds", 0); @@ -5517,7 +5512,7 @@ public class XFLConverter { private String color = ""; private boolean autoKern = false; - + private int size = -1; private int indent = -1; @@ -5545,13 +5540,12 @@ public class XFLConverter { private String url = null; private String target = null; - + private Stack fontLetterSpacingStack = new Stack<>(); private Stack fontSizeStack = new Stack<>(); private Stack fontFaceStack = new Stack<>(); private Stack fontColorStack = new Stack<>(); private Stack fontKerningStack = new Stack<>(); - @Override public void error(SAXParseException e) throws SAXException { @@ -5576,7 +5570,7 @@ public class XFLConverter { } } if (u instanceof FontTag) { - if (((FontTag) u).getCharacterId()== det.fontId) { + if (((FontTag) u).getCharacterId() == det.fontId) { ft = (FontTag) u; } } @@ -5668,7 +5662,7 @@ public class XFLConverter { } String s = attributes.getValue("size"); if (s != null) { - + try { if (s.startsWith("+")) { size += Integer.parseInt(s.substring(1)); @@ -5746,7 +5740,7 @@ public class XFLConverter { fontFaceStack.pop(); fontKerningStack.pop(); fontLetterSpacingStack.pop(); - fontSizeStack.pop(); + fontSizeStack.pop(); color = null; if (!fontColorStack.isEmpty()) { color = fontColorStack.peek(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLXmlWriter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLXmlWriter.java index eecef88c6..45eee8449 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLXmlWriter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLXmlWriter.java @@ -131,13 +131,13 @@ public class XFLXmlWriter implements XMLStreamWriter { tagsStack.add(localName); startElementClosed = false; newLineNeeded = false; - } + } private void writeEmptyElementInternal(String prefix, String localName, String namespaceURI) throws XMLStreamException { writeStartElement(prefix, localName, namespaceURI); writeEndElement(); } - + @Override public void writeEmptyElement(String namespaceURI, String localName) throws XMLStreamException { writeEmptyElementInternal(getPrefix(namespaceURI), localName, namespaceURI); @@ -183,7 +183,6 @@ public class XFLXmlWriter implements XMLStreamWriter { writeEndElement(); } - public void writeElementValue(String localName, String value) throws XMLStreamException { writeStartElement(localName); writeCharacters(value); @@ -314,7 +313,7 @@ public class XFLXmlWriter implements XMLStreamWriter { @Override public void writeStartDocument(String encoding, String version) throws XMLStreamException { - } + } public void writeCharactersRaw(String text) throws XMLStreamException { closeStartElement(); @@ -326,7 +325,7 @@ public class XFLXmlWriter implements XMLStreamWriter { closeStartElement(); append(escapeText(text)); } - + @Override public void writeCharacters(char[] text, int start, int len) throws XMLStreamException { writeCharacters(new String(text, start, len)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/MorphShapeFixer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/MorphShapeFixer.java index b3ee2d88a..642a5615b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/MorphShapeFixer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/MorphShapeFixer.java @@ -69,15 +69,15 @@ public class MorphShapeFixer extends ShapeFixer { mergeSamePathsWithOppositeFillstyles(shapes, fillStyles0, fillStyles1, lineStyles, layers); } - /** - * shape 1 [FS0:A, FS1:-, LS:n], shape 2 [FS0:-, FS1:B, LS:n] - * => shape 1 [FS0:A, FS1:B], remove shape 2 + * shape 1 [FS0:A, FS1:-, LS:n], shape 2 [FS0:-, FS1:B, LS:n] => shape 1 + * [FS0:A, FS1:B], remove shape 2 + * * @param shapes * @param fillStyles0 * @param fillStyles1 * @param lineStyles - * @param layers + * @param layers */ private void mergeSamePathsWithOppositeFillstyles( List> shapes, @@ -101,32 +101,28 @@ public class MorphShapeFixer extends ShapeFixer { continue; } boolean doRemove = false; - if ( - fillStyles0.get(i1) != 0 && fillStyles1.get(i1) == 0 - && fillStyles1.get(i2) != 0 && fillStyles0.get(i2) == 0 - ) { + if (fillStyles0.get(i1) != 0 && fillStyles1.get(i1) == 0 + && fillStyles1.get(i2) != 0 && fillStyles0.get(i2) == 0) { fillStyles1.set(i1, fillStyles1.get(i2)); doRemove = true; - } else if ( - fillStyles1.get(i1) != 0 && fillStyles0.get(i1) == 0 - && fillStyles0.get(i2) != 0 && fillStyles1.get(i2) == 0 - ) { + } else if (fillStyles1.get(i1) != 0 && fillStyles0.get(i1) == 0 + && fillStyles0.get(i2) != 0 && fillStyles1.get(i2) == 0) { fillStyles0.set(i1, fillStyles0.get(i2)); - doRemove = true; + doRemove = true; } - + if (doRemove) { shapes.remove(i2); fillStyles0.remove(i2); fillStyles1.remove(i2); lineStyles.remove(i2); layers.remove(i2); - i2--; + i2--; } } } } - + private boolean isEmptyPath(List path) { for (BezierEdge be : path) { if (!be.isEmpty()) { @@ -267,8 +263,7 @@ public class MorphShapeFixer extends ShapeFixer { px = r.getX() + r.getWidth() * Math.random(); py = r.getY() + r.getHeight() * Math.random(); } while (!region.contains(px, py));*/ - - + PathIterator pi = region.getPathIterator(null); Rectangle2D bounds = region.getBounds2D(); double centerX = bounds.getCenterX(); @@ -289,15 +284,15 @@ public class MorphShapeFixer extends ShapeFixer { break; case PathIterator.SEG_QUADTO: x = points[2]; - y = points[3]; + y = points[3]; } - + numPoints++; double p = Math.sqrt((centerX - x) * (centerX - x) + (centerY - y) * (centerY - y)); double x1 = (centerX - x) * 0.1 / p; double y1 = (centerY - y) * 0.1 / p; - if (path.contains(x + x1, y + y1)) { - numContains++; + if (path.contains(x + x1, y + y1)) { + numContains++; } else { numNotContains++; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/PathConverterApp.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/PathConverterApp.java index 3bcbb6ce9..e3f9699d9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/PathConverterApp.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/PathConverterApp.java @@ -31,12 +31,13 @@ import javax.swing.event.DocumentListener; /** * App that converts between FLA and SVG paths. + * * @author JPEXS */ public class PathConverterApp { private static boolean updating = false; - + public static void main(String[] args) { JFrame fr = new JFrame(); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); @@ -60,7 +61,7 @@ public class PathConverterApp { public void changedUpdate(DocumentEvent e) { update(); } - + private void update() { if (updating) { return; @@ -70,31 +71,30 @@ public class PathConverterApp { String newText = t1.getText(); newText = newText.replaceAll(" *", ""); - - + StringBuffer resultString = new StringBuffer(); Pattern regex = Pattern.compile("#([A-F0-9]+)\\.([A-F0-9]+)"); Matcher m = regex.matcher(newText); while (m.find()) { int p1 = Integer.parseInt(m.group(1), 16); int p2 = Integer.parseInt(m.group(2), 16); - + if ((p1 & 0x800000) > 0) { p1 = 0xFF000000 | p1; } - + DecimalFormat df = new DecimalFormat("0.##", DecimalFormatSymbols.getInstance(Locale.ENGLISH)); df.setGroupingUsed(false); - String strValue = "" + df.format((double) p1 + p2 / 256.0); + String strValue = "" + df.format((double) p1 + p2 / 256.0); m.appendReplacement(resultString, strValue); } m.appendTail(resultString); - + newText = resultString.toString(); - + t2.setText(newText.replace("!", "M").replace("|", "L").replace("[", "Q")); updating = false; - } + } }); t2.getDocument().addDocumentListener(new DocumentListener() { @Override @@ -111,7 +111,7 @@ public class PathConverterApp { public void changedUpdate(DocumentEvent e) { update(); } - + private void update() { if (updating) { return; @@ -119,7 +119,7 @@ public class PathConverterApp { updating = true; t1.setText(t2.getText().replace("M", "!").replace("L", "|").replace("Q", "[")); updating = false; - } + } }); cnt.add(new JScrollPane(t1)); cnt.add(new JScrollPane(t2)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/ShapeFixer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/ShapeFixer.java index e27daeda9..1578a4039 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/ShapeFixer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/shapefixer/ShapeFixer.java @@ -82,7 +82,7 @@ public class ShapeFixer { } } - + protected void beforeHandle( int shapeNum, List> shapes, @@ -94,10 +94,9 @@ public class ShapeFixer { LINESTYLEARRAY baseLineStyles, List fillStyleLayers, List lineStyleLayers - ) { + ) { } - - + private void detectOverlappingEdges( List> shapes, List fillStyles0, @@ -125,7 +124,7 @@ public class ShapeFixer { } oldpct = pct; }*/ - + loopj1: for (int j1 = 0; j1 < shapes.get(i1).size(); j1++) { BezierEdge be1 = shapes.get(i1).get(j1); @@ -199,12 +198,12 @@ public class ShapeFixer { || be1.getEndPoint().equals(be2.getEndPoint())) && (t1Ref.size() == 1)) { continue; } - + if (t1Ref.size() == 2) { if ((t1Ref.get(0) == 0 || t1Ref.get(0) == 1) - && (t2Ref.get(0) == 0 || t2Ref.get(0) == 1)) { + && (t2Ref.get(0) == 0 || t2Ref.get(0) == 1)) { continue; - } + } } if (DEBUG_PRINT) { @@ -314,13 +313,13 @@ public class ShapeFixer { } j1--; - continue loopj1; + continue loopj1; } } } } - } - + } + private void splitToLayers( List records, List> shapes, @@ -329,10 +328,10 @@ public class ShapeFixer { List lineStyles, List layers, List fillStyleLayers, - List lineStyleLayers - ) { + List lineStyleLayers + ) { List currentShape = new ArrayList<>(); - + int fillStyle0 = 0; int fillStyle1 = 0; int lineStyle = 0; @@ -403,7 +402,7 @@ public class ShapeFixer { y = rec.changeY(y); } } - + private List combineLayers( List> shapes, List fillStyles0, @@ -411,7 +410,7 @@ public class ShapeFixer { List lineStyles, List layers, List fillStyleLayers, - List lineStyleLayers + List lineStyleLayers ) { List ret = new ArrayList<>(); int layer = -1; @@ -473,16 +472,16 @@ public class ShapeFixer { List layers = new ArrayList<>(); List fillStyleLayers = new ArrayList<>(); List lineStyleLayers = new ArrayList<>(); - + splitToLayers(records, shapes, fillStyles0, fillStyles1, lineStyles, layers, fillStyleLayers, lineStyleLayers); - + beforeHandle(shapeNum, shapes, fillStyles0, fillStyles1, lineStyles, layers, baseFillStyles, baseLineStyles, fillStyleLayers, lineStyleLayers); - + if (Configuration.flaExportFixShapes.get()) { detectOverlappingEdges(shapes, fillStyles0, fillStyles1, lineStyles, layers); } - - return combineLayers(shapes, fillStyles0, fillStyles1, lineStyles, layers, fillStyleLayers, lineStyleLayers); + + return combineLayers(shapes, fillStyles0, fillStyles1, lineStyles, layers, fillStyleLayers, lineStyleLayers); } private ShapeRecordAdvanced bezierToAdvancedRecord(BezierEdge be) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java index 814d52eee..8fa8a0908 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java @@ -266,7 +266,7 @@ public class DottedChain implements Serializable, Comparable { public String toString() { return toRawString(); } - + protected String toString(boolean as3, boolean raw, boolean withSuffix) { if (isNull) { return ""; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java index bcdfcc857..3623af4d2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java @@ -286,7 +286,7 @@ public class Graph { stack.add(queue); stacknext: while (!stack.isEmpty()) { - + queue = stack.peek(); if (!queue.isEmpty()) { part = queue.remove(); @@ -472,9 +472,9 @@ public class Graph { } Comparator comparator = new Comparator() { @Override - public int compare(PartCommon o1, PartCommon o2) { + public int compare(PartCommon o1, PartCommon o2) { int levelCompare = o2.level - o1.level; - if (levelCompare == 0) { + if (levelCompare == 0) { try { if (o1.part.leadsTo(localData, Graph.this, code, o2.part, loops, throwStates, false)) { return -1; @@ -637,7 +637,7 @@ public class Graph { } @Override - public int compareTo(PartCommon o) { + public int compareTo(PartCommon o) { int ret = o.level - level; if (ret == 0) { ret = part.closedTime - o.part.closedTime; @@ -824,20 +824,20 @@ public class Graph { makeAllCommands(ret, stack); finalProcessAll(ret, 0, getFinalData(localData, loops, throwStates), path); return ret; - } + } protected SecondPassData prepareSecondPass(List list) { return null; } - + protected void processOther(List list, long lastLoopId) { - + } - + protected void processSwitches(List list) { processSwitches(list, -1); } - + /* while(something){ @@ -934,7 +934,7 @@ public class Graph { } } } - + if (breakCount == 2) { if (breakCaseIndex <= 0) { continue loopi; @@ -950,8 +950,8 @@ public class Graph { if (br.loopId != swi.loop.id) { continue loopi; } - swi.caseCommands.get(breakCaseIndex - 1).remove(swi.caseCommands.get(breakCaseIndex - 1).size() - 1); - } + swi.caseCommands.get(breakCaseIndex - 1).remove(swi.caseCommands.get(breakCaseIndex - 1).size() - 1); + } boolean hasContinues = false; for (int c = 0; c < swi.caseCommands.size(); c++) { @@ -1495,7 +1495,7 @@ public class Graph { } } } - + /* if (xx) { A; @@ -1510,7 +1510,7 @@ public class Graph { } break/continue x; - */ + */ if (i + 1 < list.size()) { GraphTargetItem nextItem = list.get(i + 1); if (onFalse.isEmpty() && !onTrue.isEmpty()) { @@ -1577,7 +1577,7 @@ public class Graph { } return ret; } - + private void checkContinueAtTheEnd(List commands, Loop loop) { if (!commands.isEmpty()) { int i = commands.size() - 1; @@ -1720,7 +1720,7 @@ public class Graph { } return null; } - + protected GraphTargetItem checkLoop(List output, LoopItem loopItem, BaseLocalData localData, List loops, List throwStates, TranslateStack stack) { return loopItem; } @@ -2225,7 +2225,7 @@ public class Graph { protected List printGraph(List foundGotos, Map> partCodes, Map partCodePos, Set visited, BaseLocalData localData, TranslateStack stack, Set allParts, GraphPart parent, GraphPart part, List stopPart, List stopPartKind, List loops, List throwStates, int staticOperation, String path) throws InterruptedException { return printGraph(foundGotos, partCodes, partCodePos, visited, localData, stack, allParts, parent, part, stopPart, stopPartKind, loops, throwStates, null, staticOperation, path, 0); } - + protected List printGraph(List foundGotos, Map> partCodes, Map partCodePos, Set visited, BaseLocalData localData, TranslateStack stack, Set allParts, GraphPart parent, GraphPart part, List stopPart, List stopPartKind, List loops, List throwStates, List ret, int staticOperation, String path, int recursionLevel) throws InterruptedException { loopPrintGraph: while (true) { @@ -2990,7 +2990,7 @@ public class Graph { if (continueCommands.isEmpty()) { commands.addAll(precoCommands); precoCommands = new ArrayList<>(); - + //Single continue and there is break/continue/return/throw at end of the commands } else if (!commands.isEmpty() && continueCommands.size() == 1) { GraphTargetItem lastItem = commands.get(commands.size() - 1); @@ -3150,7 +3150,7 @@ public class Graph { } protected void checkGraph(List allBlocks) { - } + } protected int checkIp(int ip) { return ip; @@ -3420,7 +3420,7 @@ public class Graph { } } } - + protected SwitchItem handleSwitch(GraphTargetItem switchedObject, GraphSourceItem switchStartItem, List foundGotos, Map> partCodes, Map partCodePos, Set visited, Set allParts, TranslateStack stack, List stopPart, List stopPartKind, List loops, List throwStates, BaseLocalData localData, int staticOperation, String path, List caseValuesMap, GraphPart defaultPart, List caseBodyParts, Reference nextRef, Reference tiRef) throws InterruptedException { @@ -3624,7 +3624,7 @@ public class Graph { } } } - + //If the lastone is default empty and alone, remove it if (!caseCommands.isEmpty()) { List lastc = caseCommands.get(caseCommands.size() - 1); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphPart.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphPart.java index 77c153948..3728f151f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphPart.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphPart.java @@ -134,7 +134,7 @@ public class GraphPart implements Serializable { next.setNumblocks(numBlocks); } } - } + } private boolean leadsToRecursive(BaseLocalData localData, Graph gr, GraphSource code, GraphPart prev, GraphPart part, HashSet visited, List loops, List throwStates, boolean useThrow) throws InterruptedException { if (Thread.currentThread().isInterrupted()) { @@ -357,7 +357,7 @@ public class GraphPart implements Serializable { public boolean containsIP(int ip) { return (ip >= start) && (ip <= end); - } + } public int getHeight() { return end - start + 1; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSource.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSource.java index fae4ea87b..20c0eaf5b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSource.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSource.java @@ -113,7 +113,7 @@ public abstract class GraphSource implements Serializable { public abstract int adr2pos(long adr); - public abstract int adr2pos(long adr, boolean nearest); + public abstract int adr2pos(long adr, boolean nearest); public long getAddressAfterCode() { if (isEmpty()) { @@ -122,7 +122,7 @@ public abstract class GraphSource implements Serializable { long lastAddr = pos2adr(size() - 1); return lastAddr + get(size() - 1).getBytesLength(); } - + public abstract long pos2adr(int pos); public final long pos2adr(int pos, boolean allowPosAfterCode) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java index 3c3197f8c..e161a6f89 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java @@ -287,7 +287,7 @@ public abstract class GraphTargetItem implements Serializable, Cloneable { public boolean needsSemicolon() { return true; - } + } public GraphTextWriter toStringBoolean(GraphTextWriter writer, LocalData localData) throws InterruptedException { return toString(writer, localData, "Boolean"); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/precontinues/GraphPrecontinueDetector.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/precontinues/GraphPrecontinueDetector.java index a91b0708a..9308b9453 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/precontinues/GraphPrecontinueDetector.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/precontinues/GraphPrecontinueDetector.java @@ -205,7 +205,7 @@ public class GraphPrecontinueDetector { for (Node n : node.next) { populateNodes(n, populated); } - } + } private boolean handleWhile(List headNodes) { Set visited = new HashSet<>(); @@ -290,7 +290,7 @@ public class GraphPrecontinueDetector { } return result; } - + private boolean joinNodes(List headNodes) { Set visited = new HashSet<>(); Reference numChanged = new Reference<>(0); @@ -354,7 +354,7 @@ public class GraphPrecontinueDetector { return result; } - + private boolean checkIfs(List headNodes) { Set visited = new HashSet<>(); Reference numChanged = new Reference<>(0); @@ -364,7 +364,7 @@ public class GraphPrecontinueDetector { headNodes.set(h, newHeadNode); } return numChanged.getVal() > 0; - } + } private Node checkIfs(Node node, Set visited, Reference numIfs) { if (visited.contains(node)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/FakeMemoryInputStream.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/FakeMemoryInputStream.java index e75a4dac7..6e5d5216d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/FakeMemoryInputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/FakeMemoryInputStream.java @@ -20,8 +20,9 @@ import java.io.IOException; import java.io.InputStream; /** - * Special MemoryInputStream that is not a MemoryInputStream in fact. - * Input stream to handle some edge cases + * Special MemoryInputStream that is not a MemoryInputStream in fact. Input + * stream to handle some edge cases + * * @author JPEXS */ public class FakeMemoryInputStream extends MemoryInputStream { @@ -29,12 +30,12 @@ public class FakeMemoryInputStream extends MemoryInputStream { private long pos; private final int maxLength; - + private final InputStream is; - + public FakeMemoryInputStream(InputStream is) throws IOException { super(new byte[0]); - this.maxLength = Integer.MAX_VALUE; + this.maxLength = Integer.MAX_VALUE; this.is = is; } @@ -63,7 +64,7 @@ public class FakeMemoryInputStream extends MemoryInputStream { @Override public int read() throws IOException { - if (pos < maxLength) { + if (pos < maxLength) { pos++; return is.read(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/Helper.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/Helper.java index 032b2b0cd..9ae9b39e6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/Helper.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/Helper.java @@ -129,7 +129,7 @@ public class Helper { } sb.append("]"); return sb.toString(); - } + } /** * Formats specified address to four numbers xxxx (or five numbers when @@ -596,7 +596,7 @@ public class Helper { public static String byteToHex(byte b) { return hexStringCache[b & 0xff]; - } + } public static String format(String str, int len) { if (len <= str.length()) { @@ -787,15 +787,15 @@ public class Helper { return baos.toByteArray(); } - public static void copyStreamEx(InputStream is, OutputStream os) throws IOException { + public static void copyStreamEx(InputStream is, OutputStream os) throws IOException { final int bufSize = 4096; byte[] buf = new byte[bufSize]; int cnt = 0; while ((cnt = is.read(buf)) > 0) { os.write(buf, 0, cnt); - } + } } - + public static void copyStream(InputStream is, OutputStream os) { try { final int bufSize = 4096; @@ -1079,7 +1079,7 @@ public class Helper { public static String bytesToHexString(byte[] bytes) { return bytesToHexString(bytes, 0); } - + public static String bytesToHexString(byte[] bytes, int start) { StringBuilder sb = new StringBuilder(); if (start < bytes.length) { @@ -1109,7 +1109,7 @@ public class Helper { } return sb.toString(); } - + public static String byteArrayToHex(byte[] data) { StringBuilder sb = new StringBuilder(data.length * 2); for (byte b : data) { @@ -1118,7 +1118,7 @@ public class Helper { return sb.toString(); } - + public static GraphTextWriter byteArrayToHex(GraphTextWriter writer, byte[] data, int bytesPerRow, int groupSize, boolean addChars, boolean showAddress) { /* // hex data from decompiled actions @@ -1328,7 +1328,7 @@ public class Helper { } return ret.toString(); } - + StringBuilder ret = new StringBuilder(s.length()); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/LinkedIdentityHashSet.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/LinkedIdentityHashSet.java index ba997e94a..b3100359b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/LinkedIdentityHashSet.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/LinkedIdentityHashSet.java @@ -25,25 +25,27 @@ import java.util.Set; /** * Identity hash set which maintains insertion order. + * * @author JPEXS * @param */ public class LinkedIdentityHashSet implements Set { private class MyObj { + private final Object obj; public MyObj(Object obj) { this.obj = obj; - } - + } + @Override public int hashCode() { return System.identityHashCode(obj); - } + } @Override - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") public boolean equals(Object obj) { if (this == obj) { return true; @@ -56,18 +58,18 @@ public class LinkedIdentityHashSet implements Set { } final MyObj other = (MyObj) obj; return this.obj == other.obj; - } + } } - + private final Set set = new LinkedHashSet<>(); public LinkedIdentityHashSet() { } - + public LinkedIdentityHashSet(Collection c) { addAll(c); } - + @Override public int size() { return set.size(); @@ -76,7 +78,7 @@ public class LinkedIdentityHashSet implements Set { @Override public boolean isEmpty() { return set.isEmpty(); - } + } @Override public boolean contains(Object o) { @@ -85,7 +87,7 @@ public class LinkedIdentityHashSet implements Set { @Override public Iterator iterator() { - final Iterator setIterator = set.iterator(); + final Iterator setIterator = set.iterator(); return new Iterator() { @Override public boolean hasNext() { @@ -93,7 +95,7 @@ public class LinkedIdentityHashSet implements Set { } @Override - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") public E next() { return (E) setIterator.next().obj; } @@ -109,9 +111,9 @@ public class LinkedIdentityHashSet implements Set { } return objs; } - + @Override - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") public T[] toArray(T[] a) { T[] ret = prepareArray(a); Object[] objs = set.toArray(); @@ -120,7 +122,7 @@ public class LinkedIdentityHashSet implements Set { } return ret; } - + @SuppressWarnings("unchecked") private T[] prepareArray(T[] a) { int size = this.set.size(); @@ -135,7 +137,7 @@ public class LinkedIdentityHashSet implements Set { @Override public boolean add(E e) { - return set.add(new MyObj(e)); + return set.add(new MyObj(e)); } @Override @@ -188,5 +190,5 @@ public class LinkedIdentityHashSet implements Set { @Override public void clear() { set.clear(); - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/MD5Crypt.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/MD5Crypt.java index c670c5399..279735fc8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/MD5Crypt.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/MD5Crypt.java @@ -62,7 +62,7 @@ public class MD5Crypt { sb.append(SALT_CHARS.charAt(rnd.nextInt(SALT_CHARS.length()))); } return sb.toString(); - } + } public static String cryptApache(String password, int saltLength) { return crypt(password, generateSalt(saltLength), MAGIC_APACHE); @@ -71,7 +71,7 @@ public class MD5Crypt { public static String cryptApache(String password, String salt) { return crypt(password, salt, MAGIC_APACHE); } - + public static String crypt(String password, int saltLength, String magic) { return crypt(password, generateSalt(saltLength), magic); } @@ -79,7 +79,7 @@ public class MD5Crypt { public static String crypt(String password, int saltLength) { return crypt(password, generateSalt(saltLength), MAGIC); } - + public static String crypt(String password, String salt) { return crypt(password, salt, MAGIC); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/NulStream.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/NulStream.java index a8f61ca12..17ea4ee09 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/NulStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/NulStream.java @@ -27,5 +27,5 @@ public class NulStream extends OutputStream { @Override public void write(int i) { - } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/utf8/Utf8Helper.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/utf8/Utf8Helper.java index affef52c6..8cfba43c8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/utf8/Utf8Helper.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/utf8/Utf8Helper.java @@ -106,9 +106,9 @@ public class Utf8Helper { public static String stripEscapes(String string) { return string.replaceAll("\\{invalid_utf8=[0-9]+\\}", "") - .replaceAll("\\{\\+(\\+*invalid_utf8=[0-9]+)\\}", "{$1}"); + .replaceAll("\\{\\+(\\+*invalid_utf8=[0-9]+)\\}", "{$1}"); } - + public static byte[] getBytes(String string) { if (!string.contains("invalid_utf8")) { return string.getBytes(charset); @@ -119,7 +119,7 @@ public class Utf8Helper { try { Pattern invPattern = Pattern.compile("^(\\{invalid_utf8[=:]([0-9]+)\\}).*", Pattern.DOTALL); for (int i = 0; i < string.length(); i++) { - char c = string.charAt(i); + char c = string.charAt(i); if (c == '{') { String subStr = string.substring(i); if (!subStr.isEmpty() && subStr.charAt(0) == '+') { @@ -127,7 +127,7 @@ public class Utf8Helper { i++; continue; } - + Matcher m = invPattern.matcher(subStr); if (m.matches()) { int v = Integer.parseInt(m.group(2)); @@ -136,7 +136,7 @@ public class Utf8Helper { i--; continue; } - + } baos.write(("" + c).getBytes(charset)); } @@ -150,7 +150,7 @@ public class Utf8Helper { public static int getBytesLength(String string) { // todo: make it faster without actually writing it to an array return getBytes(string).length; - } + } private static String escapeInvalidUtf8Char(int v) { //Note: for writing the string "{invalid_utf8=xxx}" itself, you can escape it with "{+invalid_utf8=xxx}" @@ -160,7 +160,7 @@ public class Utf8Helper { public static String decode(byte[] data) { return decode(data, 0, data.length); } - + public static String decode(byte[] data, int start, int length) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/utf8/charset/ShiftJis.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/utf8/charset/ShiftJis.java index 7308fd3c3..51e4b57b7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/utf8/charset/ShiftJis.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/utf8/charset/ShiftJis.java @@ -21,7 +21,7 @@ import java.nio.charset.Charset; public class ShiftJis extends AbstractCharsetConverter { private static final Charset SHIFT_JIS_ENCODING = Charset.forName("Shift_JIS"); - + @Override public int toUnicode(int codePoint) { byte[] b; @@ -31,19 +31,18 @@ public class ShiftJis extends AbstractCharsetConverter { b = new byte[]{(byte) codePoint}; } - return new String(b, SHIFT_JIS_ENCODING).charAt(0); } @Override - public int fromUnicode(int codePoint) { + public int fromUnicode(int codePoint) { byte[] b = ("" + (char) codePoint).getBytes(SHIFT_JIS_ENCODING); int r = 0; for (int i = 0; i < b.length; i++) { int v = b[b.length - 1 - i] & 0xff; r = r + (v << (8 * i)); } - return r; + return r; } } diff --git a/libsrc/ffdec_lib/src/com/sun/jna/platform/win32/Advapi32Util.java b/libsrc/ffdec_lib/src/com/sun/jna/platform/win32/Advapi32Util.java index 0032f8131..51935eb96 100644 --- a/libsrc/ffdec_lib/src/com/sun/jna/platform/win32/Advapi32Util.java +++ b/libsrc/ffdec_lib/src/com/sun/jna/platform/win32/Advapi32Util.java @@ -75,10 +75,10 @@ public abstract class Advapi32Util { public String fqn; } - public static boolean registryKeyExists(HKEY root, String key) { return registryKeyExists(root, key, false); } + /** * Checks whether a registry key exists. * @@ -103,6 +103,7 @@ public abstract class Advapi32Util { public static boolean registryValueExists(HKEY root, String key, String value) { return registryValueExists(root, key, value, false); } + /** * Checks whether a registry value exists. * @@ -149,6 +150,7 @@ public abstract class Advapi32Util { public static String registryGetStringValue(HKEY root, String key, String value) { return registryGetStringValue(root, key, value, false); } + /** * Get a registry REG_SZ value. * diff --git a/libsrc/ffdec_lib/src/natorder/NaturalOrderComparator.java b/libsrc/ffdec_lib/src/natorder/NaturalOrderComparator.java index c655e8b6d..f3d3022e3 100644 --- a/libsrc/ffdec_lib/src/natorder/NaturalOrderComparator.java +++ b/libsrc/ffdec_lib/src/natorder/NaturalOrderComparator.java @@ -23,21 +23,18 @@ package natorder; misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ - import java.util.*; -public class NaturalOrderComparator implements Comparator -{ - int compareRight(String a, String b) - { +public class NaturalOrderComparator implements Comparator { + + int compareRight(String a, String b) { int bias = 0, ia = 0, ib = 0; // The longest run of digits wins. That aside, the greatest // value wins, but we can't know that it will until we've scanned // both numbers to know that they have the same magnitude, so we // remember it in BIAS. - for (;; ia++, ib++) - { + for (;; ia++, ib++) { char ca = charAt(a, ia); char cb = charAt(b, ib); @@ -64,8 +61,7 @@ public class NaturalOrderComparator implements Comparator } } - public int compare(Object o1, Object o2) - { + public int compare(Object o1, Object o2) { String a = o1.toString(); String b = o2.toString(); @@ -127,7 +123,7 @@ public class NaturalOrderComparator implements Comparator ++ib; } } - + static boolean isDigit(char c) { return Character.isDigit(c) || c == '.' || c == ','; } @@ -135,24 +131,25 @@ public class NaturalOrderComparator implements Comparator static char charAt(String s, int i) { return i >= s.length() ? 0 : s.charAt(i); } - - static int compareEqual(String a, String b, int nza, int nzb) { - if (nza - nzb != 0) - return nza - nzb; - if (a.length() == b.length()) + static int compareEqual(String a, String b, int nza, int nzb) { + if (nza - nzb != 0) { + return nza - nzb; + } + + if (a.length() == b.length()) { return a.compareTo(b); + } return a.length() - b.length(); } @SuppressWarnings("unchecked") // JPEXS - public static void main(String[] args) - { - String[] strings = new String[] { "1-2", "1-02", "1-20", "10-20", "fred", "jane", "pic01", + public static void main(String[] args) { + String[] strings = new String[]{"1-2", "1-02", "1-20", "10-20", "fred", "jane", "pic01", "pic2", "pic02", "pic02a", "pic3", "pic4", "pic 4 else", "pic 5", "pic05", "pic 5", "pic 5 something", "pic 6", "pic 7", "pic100", "pic100a", "pic120", "pic121", - "pic02000", "tom", "x2-g8", "x2-y7", "x2-y08", "x8-y8" }; + "pic02000", "tom", "x2-g8", "x2-y7", "x2-y08", "x8-y8"}; List orig = Arrays.asList(strings); @@ -170,10 +167,10 @@ public class NaturalOrderComparator implements Comparator shuffle3000(scrambled); compareSymmetric(); - + floatsWithCommas(); } - + @SuppressWarnings("unchecked") // JPEXS static void shuffle3000(List scrambled) { Collections.shuffle(scrambled, new Random(3000)); @@ -195,7 +192,7 @@ public class NaturalOrderComparator implements Comparator System.out.println(compare1 + " == " + compare2); } - + @SuppressWarnings("unchecked") // JPEXS static void floatsWithCommas() { List unSorted = Arrays.asList("0.9", "1.0c", "1.2", "1.3", "0.6", "1.1", "0.7", "0.3", "1.0b", "1.0", "0.8"); diff --git a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java index a6534d682..ffb9be24e 100644 --- a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java +++ b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java @@ -968,7 +968,7 @@ public class CommandLineArgumentParser { } final File inFile = new File(args.pop()); final File outFile = new File(args.pop()); - + processModifyAbc(inFile, outFile, null, new AbcAction() { @Override public void abcAction(ABC abc, OutputStream stdout) throws IOException { @@ -4425,11 +4425,11 @@ public class CommandLineArgumentParser { switch (key.toLowerCase()) { case "version": try { - version = Integer.valueOf(value); - } catch (NumberFormatException nfe) { - badArguments("header"); - } - break; + version = Integer.valueOf(value); + } catch (NumberFormatException nfe) { + badArguments("header"); + } + break; case "gfx": gfx = parseBooleanConfigValue(value); if (gfx == null) { @@ -4519,18 +4519,18 @@ public class CommandLineArgumentParser { break; case "framecount": try { - frameCount = Integer.valueOf(value); - } catch (NumberFormatException nfe) { - badArguments("header"); - } - break; + frameCount = Integer.valueOf(value); + } catch (NumberFormatException nfe) { + badArguments("header"); + } + break; case "framerate": try { - frameRate = Float.valueOf(value); - } catch (NumberFormatException nfe) { - badArguments("header"); - } - break; + frameRate = Float.valueOf(value); + } catch (NumberFormatException nfe) { + badArguments("header"); + } + break; default: badArguments("header"); } @@ -4754,7 +4754,7 @@ public class CommandLineArgumentParser { } private static void processModifyAbc(File inFile, File outFile, File stdOutFile, AbcAction action, String charset) { - + //It does not have .abc extension, assuming its SWF - process all its ABC tags if (!inFile.getAbsolutePath().toLowerCase().endsWith(".abc")) { SwfAction swfAction = new SwfAction() { @@ -4769,7 +4769,7 @@ public class CommandLineArgumentParser { processModifySWF(inFile, outFile, stdOutFile, swfAction, charset); return; } - + OutputStream stdout = null; try { diff --git a/src/com/jpexs/decompiler/flash/console/CommandLineHelp.java b/src/com/jpexs/decompiler/flash/console/CommandLineHelp.java index 9e7acb5e6..db537308c 100644 --- a/src/com/jpexs/decompiler/flash/console/CommandLineHelp.java +++ b/src/com/jpexs/decompiler/flash/console/CommandLineHelp.java @@ -37,15 +37,16 @@ import org.fusesource.jansi.AnsiConsole; * @author JPEXS */ public class CommandLineHelp { + private static Map> commands = new LinkedHashMap<>(); private static Map preOptions = new LinkedHashMap<>(); private static String preface = null; private static Map aliasMap = new HashMap<>(); - + static { - parse(); + parse(); } - + private static String getPreface(String command, String arguments) { String ret = preface; if (command != null) { @@ -55,32 +56,33 @@ public class CommandLineHelp { ret = ret.replace("Executable:", "@|bold,underline Executable|@:"); return ret; } - + private static String hilight(String str) { str = str.replaceAll("<[a-zA-Z_0-9]+>", "@|italic $0|@"); str = str.replaceAll("(^|[ \\[\\(\\|\n])(-[a-zA-Z_0-9]+)", "$1@|yellow $2|@"); str = str.replaceAll("@\\|yellow (-[a-zA-Z_0-9]+)\\|@ command", "@|bold $1|@ command"); - + return str; } - + private static String indentArguments(String arguments, String commandName) { - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(); for (int i = 0; i < commandName.length(); i++) { sb.append(" "); } sb.append(" "); - return arguments.replace("\r\n", "\r\n" + sb.toString()); + return arguments.replace("\r\n", "\r\n" + sb.toString()); } - + private static class Command { + String name; String customSynopsis; String arguments; String header; String description; List aliases; - + List