<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Hi Steven,<br>
<br>
I ran the command you suggested and it produces a number of class
files in sootOutput directory. But not an instrumented app. How
can I achieve that?<br>
<br>
Also, I thought I needed the <a
href="https://raw.githubusercontent.com/wiki/Sable/soot/code/androidinstr/AndroidInstrument.java_.txt">AndroidInstument</a>
java file. The moment I add that, I get the same error:<br>
behnam@behnam-Precision-T1600:~/tcal/responsiveness/soot/stable$
/usr/lib/jvm/java-8-oracle/bin/java -jar soot-trunk-nightly.jar
AndroidInstrument -cp . -src-prec apk -allow-phantom-refs
-android-jars
/home/behnam/tcal/responsiveness/soot/stable/android-platforms
-process-dir respdroid.apk<br>
Soot started on Sun Apr 02 12:51:11 EDT 2017<br>
Warning: java.lang.Throwable is a phantom class!<br>
Warning: java.lang.Void is a phantom class!<br>
Warning: java.lang.Float is a phantom class!<br>
Warning: java.lang.Double is a phantom class!<br>
Warning: java.lang.AssertionError is a phantom class!<br>
Warning: java.lang.Integer is a phantom class!<br>
Warning: java.lang.NullPointerException is a phantom class!<br>
Warning: java.lang.Character is a phantom class!<br>
Warning: java.lang.Long is a phantom class!<br>
Warning: java.lang.Short is a phantom class!<br>
Warning: java.lang.StringBuffer is a phantom class!<br>
Warning: java.lang.Boolean is a phantom class!<br>
Warning: java.lang.Class is a phantom class!<br>
Warning: java.lang.Byte is a phantom class!<br>
Warning: java.lang.NoClassDefFoundError is a phantom class!<br>
Warning: java.lang.IndexOutOfBoundsException is a phantom class!<br>
Warning: java.lang.StackOverflowError is a phantom class!<br>
Warning: java.lang.invoke.LambdaMetafactory is a phantom class!<br>
Warning: java.lang.Error is a phantom class!<br>
Warning: java.lang.AbstractMethodError is a phantom class!<br>
Warning: java.lang.ClassCastException is a phantom class!<br>
Warning: java.lang.Runnable is a phantom class!<br>
Warning: java.lang.VerifyError is a phantom class!<br>
Warning: java.lang.NoSuchFieldError is a phantom class!<br>
Warning: java.lang.IllegalMonitorStateException is a phantom
class!<br>
Warning: java.lang.Thread is a phantom class!<br>
Warning: java.lang.UnknownError is a phantom class!<br>
Warning: java.lang.InternalError is a phantom class!<br>
Warning: java.lang.ArithmeticException is a phantom class!<br>
Warning: java.lang.String is a phantom class!<br>
Warning: java.lang.NegativeArraySizeException is a phantom class!<br>
Warning: java.lang.ClassCircularityError is a phantom class!<br>
Warning: java.lang.Cloneable is a phantom class!<br>
Warning: java.lang.ref.Finalizer is a phantom class!<br>
Warning: java.lang.LinkageError is a phantom class!<br>
Warning: java.lang.IncompatibleClassChangeError is a phantom
class!<br>
Warning: java.lang.NoSuchMethodError is a phantom class!<br>
Warning: java.lang.RuntimeException is a phantom class!<br>
Warning: java.lang.ArrayIndexOutOfBoundsException is a phantom
class!<br>
Warning: java.lang.ThreadDeath is a phantom class!<br>
Warning: java.io.Serializable is a phantom class!<br>
Warning: java.lang.InstantiationError is a phantom class!<br>
Warning: java.lang.IllegalAccessError is a phantom class!<br>
Warning: java.lang.Object is a phantom class!<br>
Warning: java.lang.ClassNotFoundException is a phantom class!<br>
Warning: java.lang.ClassFormatError is a phantom class!<br>
Warning: java.lang.UnsatisfiedLinkError is a phantom class!<br>
Warning: java.lang.ArrayStoreException is a phantom class!<br>
Warning: java.lang.ExceptionInInitializerError is a phantom class!<br>
Warning: java.lang.OutOfMemoryError is a phantom class!<br>
Exception in thread "main" java.lang.Error: Error: Failed to load
java.util.Map$Entry.<br>
at
soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:109)<br>
at soot.JastAddJ.Program.getCompilationUnit(Program.java:873)<br>
at
soot.JastAddJ.Program.getLibCompilationUnit_compute(Program.java:1517)<br>
at
soot.JastAddJ.Program.getLibCompilationUnit(Program.java:1500)<br>
at
soot.JastAddJ.Program.lookupLibType_compute(Program.java:1465)<br>
at soot.JastAddJ.Program.lookupLibType(Program.java:1433)<br>
at soot.JastAddJ.Program.lookupType_compute(Program.java:1412)<br>
at soot.JastAddJ.Program.lookupType(Program.java:1393)<br>
at
soot.JastAddJ.Program.Define_TypeDecl_lookupType(Program.java:1981)<br>
at
soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)<br>
at
soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)<br>
at
soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)<br>
at
soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)<br>
at soot.JastAddJ.Expr.lookupType(Expr.java:1186)<br>
at soot.JastAddJ.TypeAccess.decls_compute(TypeAccess.java:425)<br>
at soot.JastAddJ.TypeAccess.decls(TypeAccess.java:414)<br>
at
soot.JastAddJ.TypeAccess.refined_TypeScopePropagation_TypeAccess_decl(TypeAccess.java:387)<br>
at soot.JastAddJ.TypeAccess.decl_compute(TypeAccess.java:460)<br>
at soot.JastAddJ.TypeAccess.decl(TypeAccess.java:452)<br>
at soot.JastAddJ.TypeAccess.type_compute(TypeAccess.java:590)<br>
at soot.JastAddJ.TypeAccess.type(TypeAccess.java:583)<br>
at
soot.JastAddJ.CompilationUnit.refined_NameCheck_CompilationUnit_nameCheck(CompilationUnit.java:200)<br>
at
soot.JastAddJ.CompilationUnit.nameCheck(CompilationUnit.java:611)<br>
at soot.JastAddJ.ASTNode.collectErrors(ASTNode.java:1283)<br>
at
soot.JastAddJ.CompilationUnit.errorCheck(CompilationUnit.java:178)<br>
at
soot.JastAddInitialResolver.formAst(JastAddInitialResolver.java:58)<br>
at soot.JavaClassSource.resolve(JavaClassSource.java:54)<br>
at soot.SootResolver.bringToHierarchy(SootResolver.java:243)<br>
at soot.SootResolver.bringToSignatures(SootResolver.java:275)<br>
at
soot.SootResolver.processResolveWorklist(SootResolver.java:173)<br>
at soot.SootResolver.resolveClass(SootResolver.java:134)<br>
at soot.Scene.loadClass(Scene.java:873)<br>
at soot.Scene.loadClassAndSupport(Scene.java:858)<br>
at soot.Scene.loadNecessaryClass(Scene.java:1575)<br>
at soot.Scene.loadNecessaryClasses(Scene.java:1586)<br>
at soot.Main.run(Main.java:250)<br>
at soot.Main.main(Main.java:147)<br>
Caused by: java.lang.RuntimeException:
java.lang.ClassCastException: soot.JastAddJ.CONSTANT_Utf8_Info
cannot be cast to soot.JastAddJ.CONSTANT_Class_Info<br>
at
soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:424)<br>
at
soot.JastAddJ.Attributes$TypeAttributes.processAttribute(Attributes.java:316)<br>
at soot.JastAddJ.Attributes.attributes(Attributes.java:61)<br>
at
soot.JastAddJ.Attributes$TypeAttributes.<init>(Attributes.java:307)<br>
at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:337)<br>
at soot.JastAddJ.BytecodeParser.read(BytecodeParser.java:27)<br>
at soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:87)<br>
... 36 more<br>
Caused by: java.lang.ClassCastException:
soot.JastAddJ.CONSTANT_Utf8_Info cannot be cast to
soot.JastAddJ.CONSTANT_Class_Info<br>
at
soot.JastAddJ.BytecodeParser.parseThisClass(BytecodeParser.java:437)<br>
at
soot.JastAddJ.BytecodeParser.parseTypeDecl(BytecodeParser.java:404)<br>
at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:331)<br>
at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:301)<br>
at
soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:405)<br>
... 42 more<br>
</p>
<p>Thanks for the support.</p>
<p><br>
</p>
<p>Bests,<br>
<br>
Behnam<br>
</p>
<br>
<div class="moz-cite-prefix">On 03/30/2017 12:48 PM, Arzt, Steven
wrote:<br>
</div>
<blockquote
cite="mid:72554BC2B275D5419CAE35494C16CEF5139B7518@EXCH2010A.sit.fraunhofer.de"
type="cite">
<pre wrap="">Hi Behnam,
I'm not sure why you prepend the VM's classpath to the Soot classpath and I don't think it's necessary for your scenario. Can you try the following command line:
</pre>
<blockquote type="cite">
<pre wrap="">/usr/lib/jvm/java-8-oracle/bin/java -jar soot-trunk-nightly.jar -cp . -src-prec apk -allow-phantom-refs -android-jars /home/behnam/tcal/responsiveness/soot/stable/android-platforms
</pre>
</blockquote>
<pre wrap="">-process-dir respdroid.apk
I hope that does the trick.
Best regards,
Steven
-----Original Message-----
From: Soot-list [<a class="moz-txt-link-freetext" href="mailto:soot-list-bounces@cs.mcgill.ca">mailto:soot-list-bounces@cs.mcgill.ca</a>] On Behalf Of Behnam
Sent: Thursday, March 30, 2017 3:05 PM
To: Bernhard Berger <a class="moz-txt-link-rfc2396E" href="mailto:berber@tzi.de"><berber@tzi.de></a>
Cc: <a class="moz-txt-link-abbreviated" href="mailto:soot-list@cs.mcgill.ca">soot-list@cs.mcgill.ca</a>
Subject: Re: [Soot-list] Problem running the Android Instrumentation example
Hi Bernhard,
Thank you. I added the -src-prec and this is what I get when I run soot with java-1.7:
behnam@behnam-Precision-T1600:~/tcal/responsiveness/soot/stable$
/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -cp
soot-trunk-nightly.jar soot.Main -cp . -pp AndroidInstrument -src-prec
apk -android-jars
/home/behnam/tcal/responsiveness/soot/stable/android-platforms
-process-dir respdroid.apk
Soot started on Thu Mar 30 08:55:06 EDT 2017
Using
'/home/behnam/tcal/responsiveness/soot/stable/android-platforms/android-17/android.jar'
as android.jar
Exception in thread "main" java.lang.NoSuchMethodError:
java.util.Map.putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
at soot.util.StringNumberer.findOrAdd(StringNumberer.java:38)
at soot.SootMethod.<init>(SootMethod.java:179)
at soot.asm.SootClassBuilder.visitMethod(SootClassBuilder.java:164)
at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:911)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:693)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:506)
at soot.asm.AsmClassSource.resolve(AsmClassSource.java:59)
at soot.SootResolver.bringToHierarchy(SootResolver.java:243)
at soot.SootResolver.bringToSignatures(SootResolver.java:275)
at soot.SootResolver.processResolveWorklist(SootResolver.java:173)
at soot.SootResolver.resolveClass(SootResolver.java:134)
at soot.Scene.tryLoadClass(Scene.java:842)
at soot.Scene.loadBasicClasses(Scene.java:1504)
at soot.Scene.loadNecessaryClasses(Scene.java:1583)
at soot.Main.run(Main.java:250)
at soot.Main.main(Main.java:147)
I did some research and noticed that the function Map.putIfAbsent is not
present in Java 7, and was only introduced in Java 8. So I use Java 8 to
execute Soot, and this happens:
behnam@behnam-Precision-T1600:~/tcal/responsiveness/soot/stable$
/usr/lib/jvm/java-8-oracle/bin/java -cp soot-trunk-nightly.jar soot.Main
-cp . -pp AndroidInstrument -src-prec apk -android-jars
/home/behnam/tcal/responsiveness/soot/stable/android-platforms
-process-dir respdroid.apk
Soot started on Thu Mar 30 08:59:10 EDT 2017
Using
'/home/behnam/tcal/responsiveness/soot/stable/android-platforms/android-17/android.jar'
as android.jar
Exception in thread "main" java.lang.Error: Error: Failed to load
java.util.Map$Entry.
at soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:109)
at soot.JastAddJ.Program.getCompilationUnit(Program.java:873)
at
soot.JastAddJ.Program.getLibCompilationUnit_compute(Program.java:1517)
at soot.JastAddJ.Program.getLibCompilationUnit(Program.java:1500)
at soot.JastAddJ.Program.lookupLibType_compute(Program.java:1465)
at soot.JastAddJ.Program.lookupLibType(Program.java:1433)
at soot.JastAddJ.Program.lookupType_compute(Program.java:1412)
at soot.JastAddJ.Program.lookupType(Program.java:1393)
at soot.JastAddJ.Program.Define_TypeDecl_lookupType(Program.java:1981)
at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
at soot.JastAddJ.Expr.lookupType(Expr.java:1186)
at soot.JastAddJ.TypeAccess.decls_compute(TypeAccess.java:425)
at soot.JastAddJ.TypeAccess.decls(TypeAccess.java:414)
at
soot.JastAddJ.TypeAccess.refined_TypeScopePropagation_TypeAccess_decl(TypeAccess.java:387)
at soot.JastAddJ.TypeAccess.decl_compute(TypeAccess.java:460)
at soot.JastAddJ.TypeAccess.decl(TypeAccess.java:452)
at soot.JastAddJ.TypeAccess.type_compute(TypeAccess.java:590)
at soot.JastAddJ.TypeAccess.type(TypeAccess.java:583)
at
soot.JastAddJ.CompilationUnit.refined_NameCheck_CompilationUnit_nameCheck(CompilationUnit.java:200)
at soot.JastAddJ.CompilationUnit.nameCheck(CompilationUnit.java:611)
at soot.JastAddJ.ASTNode.collectErrors(ASTNode.java:1283)
at soot.JastAddJ.CompilationUnit.errorCheck(CompilationUnit.java:178)
at soot.JastAddInitialResolver.formAst(JastAddInitialResolver.java:58)
at soot.JavaClassSource.resolve(JavaClassSource.java:54)
at soot.SootResolver.bringToHierarchy(SootResolver.java:243)
at soot.SootResolver.bringToSignatures(SootResolver.java:275)
at soot.SootResolver.processResolveWorklist(SootResolver.java:173)
at soot.SootResolver.resolveClass(SootResolver.java:134)
at soot.Scene.loadClass(Scene.java:873)
at soot.Scene.loadClassAndSupport(Scene.java:858)
at soot.Scene.loadNecessaryClass(Scene.java:1575)
at soot.Scene.loadNecessaryClasses(Scene.java:1586)
at soot.Main.run(Main.java:250)
at soot.Main.main(Main.java:147)
Caused by: java.lang.RuntimeException: java.lang.ClassCastException:
soot.JastAddJ.CONSTANT_Utf8_Info cannot be cast to
soot.JastAddJ.CONSTANT_Class_Info
at
soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:424)
at
soot.JastAddJ.Attributes$TypeAttributes.processAttribute(Attributes.java:316)
at soot.JastAddJ.Attributes.attributes(Attributes.java:61)
at soot.JastAddJ.Attributes$TypeAttributes.<init>(Attributes.java:307)
at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:337)
at soot.JastAddJ.BytecodeParser.read(BytecodeParser.java:27)
at soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:87)
... 36 more
Caused by: java.lang.ClassCastException:
soot.JastAddJ.CONSTANT_Utf8_Info cannot be cast to
soot.JastAddJ.CONSTANT_Class_Info
at soot.JastAddJ.BytecodeParser.parseThisClass(BytecodeParser.java:437)
at soot.JastAddJ.BytecodeParser.parseTypeDecl(BytecodeParser.java:404)
at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:331)
at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:301)
at
soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:405)
... 42 more
Now I am not sure if I should use Java 8 or 7. And searching online, I
did not find any solutions to either.
Thank you for helping me.
Bests,
Behnam
On 03/30/2017 02:07 AM, Bernhard Berger wrote:
</pre>
<blockquote type="cite">
<pre wrap="">Hi Behnam,
I’m not quite sure if this may help but I’ve two pointers for you: First of all, you forgot to use the -src-prec option. The log says: "APK file on process dir, but chosen src-prec does not support loading APKs“. Secondly, it looks like Soot is using the Java frontend (it’s parsing the Java files) which fails to load the java.util.Map$Entry. Try using the -src-prec apk option. I hope this will fix your problem.
Regards, Bernhard
</pre>
<blockquote type="cite">
<pre wrap="">Am 29.03.2017 um 23:09 schrieb Behnam <a class="moz-txt-link-rfc2396E" href="mailto:behnam@eecs.tufts.edu"><behnam@eecs.tufts.edu></a>:
Hi all,
I'm still stuck here. Any help is so much appreciated.
Bests,
-Behnam
On 03/16/2017 03:52 AM, Behnam wrote:
</pre>
<blockquote type="cite">
<pre wrap="">Hi All,
I am trying to run the example AndroidInstrument driver on a very simple app, and after hours of work, this is where I am stuck.
behnam@behnam-Precision-T1600:~/tcal/responsiveness/soot/stable$ /usr/lib/jvm/java-8-oracle/bin/java -cp soot-trunk-nightly.jar soot.Main -cp . -pp AndroidInstrument -android-jars /home/behnam/tcal/responsiveness/soot/stable/android-platforms -process-dir respdroid.apk
Soot started on Thu Mar 16 03:40:27 EDT 2017
APK file on process dir, but chosen src-prec does not support loading APKs
Exception in thread "main" java.lang.Error: Error: Failed to load java.util.Map$Entry.
at soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:109)
at soot.JastAddJ.Program.getCompilationUnit(Program.java:844)
at soot.JastAddJ.Program.getLibCompilationUnit_compute(Program.java:1517)
at soot.JastAddJ.Program.getLibCompilationUnit(Program.java:1500)
at soot.JastAddJ.Program.lookupLibType_compute(Program.java:1465)
at soot.JastAddJ.Program.lookupLibType(Program.java:1433)
at soot.JastAddJ.Program.lookupType_compute(Program.java:1412)
at soot.JastAddJ.Program.lookupType(Program.java:1393)
at soot.JastAddJ.Program.Define_TypeDecl_lookupType(Program.java:1981)
at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
at soot.JastAddJ.ASTNode.Define_TypeDecl_lookupType(ASTNode.java:1657)
at soot.JastAddJ.Expr.lookupType(Expr.java:1186)
at soot.JastAddJ.TypeAccess.decls_compute(TypeAccess.java:425)
at soot.JastAddJ.TypeAccess.decls(TypeAccess.java:414)
at soot.JastAddJ.TypeAccess.refined_TypeScopePropagation_TypeAccess_decl(TypeAccess.java:387)
at soot.JastAddJ.TypeAccess.decl_compute(TypeAccess.java:460)
at soot.JastAddJ.TypeAccess.decl(TypeAccess.java:452)
at soot.JastAddJ.TypeAccess.type_compute(TypeAccess.java:590)
at soot.JastAddJ.TypeAccess.type(TypeAccess.java:583)
at soot.JastAddJ.CompilationUnit.refined_NameCheck_CompilationUnit_nameCheck(CompilationUnit.java:200)
at soot.JastAddJ.CompilationUnit.nameCheck(CompilationUnit.java:611)
at soot.JastAddJ.ASTNode.collectErrors(ASTNode.java:1283)
at soot.JastAddJ.CompilationUnit.errorCheck(CompilationUnit.java:178)
at soot.JastAddInitialResolver.formAst(JastAddInitialResolver.java:58)
at soot.JavaClassSource.resolve(JavaClassSource.java:54)
at soot.SootResolver.bringToHierarchy(SootResolver.java:243)
at soot.SootResolver.bringToSignatures(SootResolver.java:275)
at soot.SootResolver.processResolveWorklist(SootResolver.java:173)
at soot.SootResolver.resolveClass(SootResolver.java:134)
at soot.Scene.loadClass(Scene.java:873)
at soot.Scene.loadClassAndSupport(Scene.java:858)
at soot.Scene.loadNecessaryClass(Scene.java:1575)
at soot.Scene.loadNecessaryClasses(Scene.java:1586)
at soot.Main.run(Main.java:250)
at soot.Main.main(Main.java:147)
Caused by: java.lang.RuntimeException: java.lang.ClassCastException: soot.JastAddJ.CONSTANT_Utf8_Info cannot be cast to soot.JastAddJ.CONSTANT_Class_Info
at soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:424)
at soot.JastAddJ.Attributes$TypeAttributes.processAttribute(Attributes.java:316)
at soot.JastAddJ.Attributes.attributes(Attributes.java:61)
at soot.JastAddJ.Attributes$TypeAttributes.<init>(Attributes.java:307)
at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:337)
at soot.JastAddJ.BytecodeParser.read(BytecodeParser.java:27)
at soot.JastAddJ.PathPart.getCompilationUnit(PathPart.java:87)
... 36 more
Caused by: java.lang.ClassCastException: soot.JastAddJ.CONSTANT_Utf8_Info cannot be cast to soot.JastAddJ.CONSTANT_Class_Info
at soot.JastAddJ.BytecodeParser.parseThisClass(BytecodeParser.java:437)
at soot.JastAddJ.BytecodeParser.parseTypeDecl(BytecodeParser.java:404)
at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:331)
at soot.JastAddJ.BytecodeParser.parse(BytecodeParser.java:301)
at soot.JastAddJ.Attributes$TypeAttributes.innerClasses(Attributes.java:405)
... 42 more
Note 1: the app's target api was 17.
Note 2: I used the default JDK for Android Studio, which is 1.8.
Note 3: AndroidInstrument is the same exact example file from Soot Android Instrumentation tutorial.
I would highly appreciate any help.
-Behnam
</pre>
</blockquote>
<pre wrap="">_______________________________________________
Soot-list mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a>
<a class="moz-txt-link-freetext" href="https://mailman.CS.McGill.CA/mailman/listinfo/soot-list">https://mailman.CS.McGill.CA/mailman/listinfo/soot-list</a>
</pre>
</blockquote>
</blockquote>
<pre wrap="">
_______________________________________________
Soot-list mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Soot-list@CS.McGill.CA">Soot-list@CS.McGill.CA</a>
<a class="moz-txt-link-freetext" href="https://mailman.CS.McGill.CA/mailman/listinfo/soot-list">https://mailman.CS.McGill.CA/mailman/listinfo/soot-list</a>
</pre>
</blockquote>
<br>
</body>
</html>