<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">To sanity check the JVMS changes relative to â€œtransitive” overriding in the JVMS update for JEP 181: nestmates: <a href="http://cr.openjdk.java.net/~dlsmith/nestmates.html" class="">http://cr.openjdk.java.net/~dlsmith/nestmates.html</a><div class=""><br class=""></div><div class=""><div class="">The first goal here is to ensure that we are all in agreement on the intended behavior of invoke virtual relative</div><div class="">to transitive overriding. Once we are sure about that - then we can double-check that the new wording of 5.4.4.</div><div class="">Overriding works for all of us. While I agree that the transitive overriding only applies in cases where there</div><div class="">is a package private method in the hierarchy, it is not the case that it only applies if the resolved method is</div><div class="">package private.</div><div class=""><br class=""></div><div class="">I went back to the pre-default method changes in JDK7 when the transitive overriding was added to find the</div><div class="">reasoning, examples, and in particular to find the test cases which demonstrated a change in behavior in invoke virtual</div><div class="">due to the JVMS change from JVMS 2nd edition to JVMS 3rd edition based on the JVMS Clarifications and Addenda</div><div class="">to 2nd edition. I have appended first my notes at the time, then the explicit list of tests that had behavioral changes</div><div class="">due to the JVMS change for us.</div><div class=""><br class=""></div><div class="">In practice, we create a virtual method table, or vtable, at preparation time, as an invoke virtual selection cache.</div><div class="">The conceptual model is that each potential resolved class creates a new index in the vtable which will be overridden</div><div class="">for each potential receiver to contain the selected method based on the search and overriding rules.</div><div class="">To save space we actually don’t always create a new index - if A.m is public and B extends A has public m as well,</div><div class="">they can share an index. We are extremely careful that any package private method does create a new index</div><div class="">because even if it overrides a superclass’s public method, a subclass may not override it.</div><div class=""><br class=""></div><div class="">So the theory is that we are testing overriding on the root of the index. In practice we are testing overriding</div><div class="">of the latest overrider. I think that is where we have a translation from the JVMS and need to make sure</div><div class="">we are all saying the same thing.</div><div class=""><br class=""></div><div class="">The set of tests that changed behavior when we added the transitive overriding all look like:</div><div class=""> </div><div class="">class A public or protected m()</div><div class="">class B extends A package private m()</div><div class="">class C extends B public or protected or package private m()</div><div class=""><br class=""></div><div class="">call: invoke virtual A.m object ref C</div><div class=""><br class=""></div><div class="">The old result was B.m or AME (if B.m is abstract), the new result was C.m (unless IAE due to caller access of A.m protected)</div><div class=""><br class=""></div><div class="">I am appending my notes from the change at the time.</div><div class="">Below that is the test matrix reporting the tests that changed and the results are listed as : 1.6 results/1.7 expected results.</div><div class=""><br class=""></div><div class="">We are internally in the process of cleaning up the tests and making them open jtreg tests. They currently use a very old ASM.</div><div class="">However you can find them in JDK-8163974. Give a shout if you need help figuring out how to run them.</div><div class="">If you run them on our jvm - you might need to run -Xint -Xverify:none right now.</div><div class=""><br class=""></div><div class="">thanks,</div><div class="">Karen</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Here are my notes from the change at the time:</div><h3 style="font-family: 'Lucida Grande', helvetica, lucida, verdana, sans-serif; line-height: 18.928001403808594px; padding: 0px; margin: 1em 0px 0.1em; font-size: 18.200000762939453px; color: rgb(153, 0, 0);" class="">Changes in Invoke-Virtual behavior due to specification changes </h3><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class="">With classfile version 51, which will be introduced in JDK7, the invokevirtual behavior will be fixed to match the clarifications in the JVMS which were made to handle the following test case: </li></ul><div style="margin: 1em 0px 0px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><br class="webkit-block-placeholder"></div><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class="">Sample test case from: <a href="http://java.sun.com/docs/books/jls/method-override-rationale.html" target="_top" style="color: rgb(102, 102, 102);" class="">Why the Definition of Method Override was Revised</a></li></ul><pre style="font-size: 10.5625px; line-height: 1.4em; color: rgb(122, 71, 7);" class="">package P1;

class A {
  void m(){System.out.println("A.m");}
  public void callM(){ m();}
}

public class B extends A {
   protected void m() { System.out.println("B.m");}
}

package P2;

class C extends P1.B {
  protected void m(){ System.out.println("C.m");}

  public static void main(String[] args) {
    C c = new C();
    c.callM();
}
</pre><div style="margin: 1em 0px 0px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><br class="webkit-block-placeholder"></div><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class="">Given the original definition of override, we find that the method m() declared in C overrides the method m<span style="font-size: small; background-color: rgb(255, 255, 255);" class="">() declared in B(), since it has the same name and signature and is accessible from class C. However, we a lso find that the method m() declared in C does not override the method m() declared in A(), since it is pr ivate to package P1 and therefore not accessible from class C.</span></li></ul><div style="margin: 1em 0px 0px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><br class="webkit-block-placeholder"></div><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class="">In this case, invoking callM() on an instance of C causes a call of m() where the target of the method invo<span style="font-size: small; background-color: rgb(255, 255, 255);" class="">cation is an instance of C as well. However, this call is in the class P1.A, and is attempting to invoke a package private method of A. Since this method is not overridden by C, the code will not print "C.m" as expected. Instead, it prints "B.m".</span></li></ul><div style="margin: 1em 0px 0px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><br class="webkit-block-placeholder"></div><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class="">This is quite unintuitive, and also incompatible with the behavior of the classic VM.</li></ul><div style="margin: 1em 0px 0px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><br class="webkit-block-placeholder"></div><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class="">We believe that this interpretation, while literally accurate, is undesirable. It prevents a package private method from ever being overridden outside its package, even if a subclass within the package has increased the method's accessibility.</li></ul><p style="margin: 1em 0px 0px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class="">* Invokevirtual modifications: * Invokevirtual, JVMS Clarifications and Addenda to 2nd edition</p><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class=""><ul style="margin-top: 0px; line-height: 16.899999618530273px;" class=""><li class="">Let C be the class of objectref. The actual method to be invoked is selected by the following lookup procedure:</li></ul></li></ul><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class=""><ul style="margin-top: 0px; line-height: 16.899999618530273px;" class=""><li class=""><ul style="margin-top: 0px; line-height: 16.899999618530273px;" class=""><li class="">If C contains a declaration for an instance method M with the same name and descriptor as the resolved method, and M overrides the resolved method, then M is the method to be invoked, and the lookup procedure terminates.</li><li class="">Otherwise, if C has a superclass, this same lookup procedure is performed recursively using the direct superclass of C ; the method to be invoked is the result of the recursive invocation of this lookup procedure.</li><li class="">Otherwise, an <span class="twikiNewLink" style="background-color: rgb(255, 255, 206); background-position: initial initial; background-repeat: initial initial;"><font color="#0000FF" class="">AbstractMethodError</font><a href="http://j2se.us.oracle.com/web/bin/edit/HotspotRuntime/AbstractMethodError?topicparent=HotspotRuntime.VtableAccess" style="color: rgb(102, 102, 102); background-color: transparent;" class=""><sup class="">?</sup></a></span> is raised.</li></ul></li></ul></li></ul><div style="margin: 1em 0px 0px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><br class="webkit-block-placeholder"></div><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class="">JVMS 2nd edition invokevirtual:<ul style="margin-top: 0px; line-height: 16.899999618530273px;" class=""><li class="">Let C be the class of objectref. The actual method to be invoked is selected by the following lookup procedure:<ul style="margin-top: 0px; line-height: 16.899999618530273px;" class=""><li class="">If C contains a declaration for an instance method with the same name and descriptor as the resolved method, and the resolved method is accessible from C, then this is the method to be invoked, and the lookup procedure terminates.</li><li class="">Otherwise, if C has a superclass, this same lookup procedure is performed recursively using the direct superclass of C ; the method to be invoked is the result of the recursive invocation of this lookup procedure.</li><li class="">Otherwise, an <span class="twikiNewLink" style="background-color: rgb(255, 255, 206); background-position: initial initial; background-repeat: initial initial;"><font color="#0000FF" class="">AbstractMethodError</font><a href="http://j2se.us.oracle.com/web/bin/edit/HotspotRuntime/AbstractMethodError?topicparent=HotspotRuntime.VtableAccess" style="color: rgb(102, 102, 102); background-color: transparent;" class=""><sup class="">?</sup></a></span> is raised.</li></ul></li></ul></li><li class="">Note: the key difference here is the phrase: "the resolved method is accessible from C" which in the Clarifications and Addenda has been replaced with "M overrides the resolved method”</li></ul><div class=""><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class="">Inheritance rules: JLS 3rd edition, 8.4.8 Inheritance, Overriding, and Hiding</li></ul><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class=""><ul style="margin-top: 0px; line-height: 16.899999618530273px;" class=""><li class="">A class C inherits from its direct superclass and direct superinterfaces all non-private methods (whether abstract or not) of the superclass and superinterfaces that are public, protected or declared with default access in the same package as C and are neither overridden ('8.4.8.1) nor hidden ('8.4.8.2) by a declaration in the class.</li></ul></li></ul><div style="margin: 1em 0px 0px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><br class="webkit-block-placeholder"></div><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class="">JLS 3rd edition 8.4.8.1 Overriding (by Instance Methods)</li><li class="">An instance method m1 declared in a class C overrides another instance method, m2, declared in class A iff all of the following are true:</li></ul><pre style="font-size: 10.5625px; line-height: 1.4em; color: rgb(122, 71, 7);" class="">      1. C is a subclass of A.
      2. The signature of m1 is a subsignature (§8.4.2) of the signature of m2.
      3. Either
         o m2 is public, protected or declared with default access in the same package as C, or
         o m1 overrides a method m3, m3 distinct from m1, m3 distinct from m2, such that m3 overrides m2.
</pre><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class=""><ul style="margin-top: 0px; line-height: 16.899999618530273px;" class=""><li class="">Moreover, if m1 is not abstract, then m1 is said to implement any and all declarations of abstract methods that it overrides.</li></ul></li></ul><div style="margin: 1em 0px 0px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><br class="webkit-block-placeholder"></div><ul style="margin-top: 0px; line-height: 16.899999618530273px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class=""><li class="">Note that based on the JVMS 3rd edition transitive overriding rules, we need to do an override check first for the direct superclass and if the current class does not override the direct superclass, recursively for the superclass' superclass.</li></ul><p style="margin: 1em 0px 0px; font-family: 'Lucida Grande', verdana, lucida, helvetica, sans-serif;" class="">Thanks to Alex Buckley and Vladimir V. Ivanov for help understanding this.</p><div class=""><br class=""></div></div><div class="">========</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">Invokevirtual behavior differences between JDK 1.6 and upcoming 1.7.</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">Changes in behavior due to clarification of overriding behavior as transitive,</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">clarified Invokevirtual JVMS 3rd edition and JLS 3rd edition: 8.4.8.1 Overriding (by Instance Methods)</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">This test represents a run of a 1.6 JDK relative to 1.7 expected results.</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">The 1.6 results are listed/expected results are listed. In all of these examples,</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">B.m was the old expected result (sometimes resulting in AME),</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">but with the clarification of overriding behavior as transitive, C.m is now the expected result.</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""></span><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">       Method access modifiers                            Call site location               Status</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  #   A.m()        B.m()        C.m()              A     pkgA      B      pkgB     C     pkgC</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">-------------------------------------------------------------------------------------------------</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 841|   A PUB        a.B PP     b.C PUB     |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 842| ! A PUB        a.B PP     b.C PUB     |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 843|   A PUB      ! a.B PP     b.C PUB     |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 844| ! A PUB      ! a.B PP     b.C PUB     |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div></div><div class=""><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 845|   A PUB        a.B PP     b.C PROT    |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 846| ! A PUB        a.B PP     b.C PROT    |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 847|   A PUB      ! a.B PP     b.C PROT    |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 848| ! A PUB      ! a.B PP     b.C PROT    |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 849|   A PUB        a.B PP     b.C PP      |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 850| ! A PUB        a.B PP     b.C PP      |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 851|   A PUB      ! a.B PP     b.C PP      |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 852| ! A PUB      ! a.B PP     b.C PP      |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 941|   A PROT       a.B PP     b.C PUB     |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 942| ! A PROT       a.B PP     b.C PUB     |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 943|   A PROT     ! a.B PP     b.C PUB     |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 944| ! A PROT     ! a.B PP     b.C PUB     |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 945|   A PROT       a.B PP     b.C PROT    |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 946| ! A PROT       a.B PP     b.C PROT    |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 947|   A PROT     ! a.B PP     b.C PROT    |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 948| ! A PROT     ! a.B PP     b.C PROT    |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 949|   A PROT       a.B PP     b.C PP      |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 950| ! A PROT       a.B PP     b.C PP      |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 951|   A PROT     ! a.B PP     b.C PP      |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""> 952| ! A PROT     ! a.B PP     b.C PP      |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1641|   a.A PUB      a.B PP     b.C PUB     |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1642| ! a.A PUB      a.B PP     b.C PUB     |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1643|   a.A PUB    ! a.B PP     b.C PUB     |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1644| ! a.A PUB    ! a.B PP     b.C PUB     |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1645|   a.A PUB      a.B PP     b.C PROT    |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1646| ! a.A PUB      a.B PP     b.C PROT    |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1647|   a.A PUB    ! a.B PP     b.C PROT    |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1648| ! a.A PUB    ! a.B PP     b.C PROT    |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1649|   a.A PUB      a.B PP     b.C PP      |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1650| ! a.A PUB      a.B PP     b.C PP      |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1651|   a.A PUB    ! a.B PP     b.C PP      |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1652| ! a.A PUB    ! a.B PP     b.C PP      |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1741|   a.A PROT     a.B PP     b.C PUB     |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1742| ! a.A PROT     a.B PP     b.C PUB     |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1743|   a.A PROT   ! a.B PP     b.C PUB     |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1744| ! a.A PROT   ! a.B PP     b.C PUB     |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1745|   a.A PROT     a.B PP     b.C PROT    |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1746| ! a.A PROT     a.B PP     b.C PROT    |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1747|   a.A PROT   ! a.B PP     b.C PROT    |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1748| ! a.A PROT   ! a.B PP     b.C PROT    |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1749|   a.A PROT     a.B PP     b.C PP      |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1750| ! a.A PROT     a.B PP     b.C PP      |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1751|   a.A PROT   ! a.B PP     b.C PP      |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">1752| ! a.A PROT   ! a.B PP     b.C PP      |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m     IAE |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2041|   a.A PUB      b.B PP     a.C PUB     |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2042| ! a.A PUB      b.B PP     a.C PUB     |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2043|   a.A PUB    ! b.B PP     a.C PUB     |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2044| ! a.A PUB    ! b.B PP     a.C PUB     |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2045|   a.A PUB      b.B PP     a.C PROT    |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2046| ! a.A PUB      b.B PP     a.C PROT    |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2047|   a.A PUB    ! b.B PP     a.C PROT    |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2048| ! a.A PUB    ! b.B PP     a.C PROT    |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2049|   a.A PUB      b.B PP     a.C PP      |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2050| ! a.A PUB      b.B PP     a.C PP      |  B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2051|   a.A PUB    ! b.B PP     a.C PP      |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2052| ! a.A PUB    ! b.B PP     a.C PP      |  AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2141|   a.A PROT     b.B PP     a.C PUB     |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2142| ! a.A PROT     b.B PP     a.C PUB     |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2143|   a.A PROT   ! b.B PP     a.C PUB     |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2144| ! a.A PROT   ! b.B PP     a.C PUB     |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2145|   a.A PROT     b.B PP     a.C PROT    |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2146| ! a.A PROT     b.B PP     a.C PROT    |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2147|   a.A PROT   ! b.B PP     a.C PROT    |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2148| ! a.A PROT   ! b.B PP     a.C PROT    |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2149|   a.A PROT     b.B PP     a.C PP      |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2150| ! a.A PROT     b.B PP     a.C PP      |  B.m/C.m B.m/C.m B.m/C.m     IAE B.m/C.m B.m/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2151|   a.A PROT   ! b.B PP     a.C PP      |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m AME/C.m |   FAILED</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">2152| ! a.A PROT   ! b.B PP     a.C PP      |  AME/C.m AME/C.m AME/C.m     IAE AME/C.m AME/C.m |   FAILED</span></div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div></div></body></html>