<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>
    
  </head>
  <body>
    <div class="markdown-here-wrapper">
      <p style="margin-bottom: 19.2px; margin-top: 0px;">On 23/10/2025
        11:25, Stephan Herrmann wrote:</p>
      <blockquote type="cite" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(114, 159, 207) rgb(119, 119, 119); border-inline-start: 2px solid rgb(114, 159, 207); border-left: 2px solid rgb(114, 159, 207); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); margin: 19.2px 0px; outline-color: rgb(119, 119, 119); padding-inline: 16px; padding-left: 16px; padding-right: 16px; quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);">
        <div class="external-content" id="extcontent-0" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(119, 119, 119); border-left-color: rgb(119, 119, 119); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); outline-color: rgb(119, 119, 119); quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);">Hi
          Maurizio
          <br>
          <br>
          thanks for taking the time.
          <br>
          <br>
          Am 22.10.25 um 12:05 schrieb Maurizio Cimadamore:
          <br>
          <blockquote type="cite">first, I'll note that this issue seems
            dangerously close to this open spec issue:
            <br>
            <br>
            <a class="moz-txt-link-freetext" href="https://bugs.openjdk.org/browse/JDK-8016196">https://bugs.openjdk.org/browse/JDK-8016196</a> </blockquote>
          <br>
          In this particular issue I'm puzzled by this statement:
          <br>
          <br>
          "The correct behavior is unspecified: what is the
          parameterization of List that is a supertype of
          ArrayList<?>? How do we derive it?"
          <br>
          <br>
          Doesn't 4.10.2 clearly state that type arguments should be
          captured here? <br>
        </div>
      </blockquote>
      <p style="margin-bottom: 19.2px; margin-top: 0px;">Yes, but that
        means that we will generate “spurious” capture variables during
        inference which will end up in the result. Depending on the
        case, this might result in failures.</p>
      <p style="margin-bottom: 19.2px; margin-top: 0px;">Dan (CC’ed)
        might add more details.</p>
      <blockquote type="cite" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(114, 159, 207) rgb(119, 119, 119); border-inline-start: 2px solid rgb(114, 159, 207); border-left: 2px solid rgb(114, 159, 207); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); margin: 19.2px 0px; outline-color: rgb(119, 119, 119); padding-inline: 16px; padding-left: 16px; padding-right: 16px; quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);">
        <div class="external-content" id="extcontent-1" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(119, 119, 119); border-left-color: rgb(119, 119, 119); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); outline-color: rgb(119, 119, 119); quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);">
          <blockquote type="cite">We have other examples where applying
            capture conversion during incorporation this way leads to
            issues:
            <br>
            <br>
            <a class="moz-txt-link-freetext" href="https://bugs.openjdk.org/browse/JDK-8206142">https://bugs.openjdk.org/browse/JDK-8206142</a> </blockquote>
          <br>
          The issue states that rejecting the example is a regression
          (in 9). FWIW, ecj accepts the example ever since Java 1.8.
          Seeing that a fix for javac exists for many years, why is that
          fix not applied? Is this an indication that perhaps JLS is to
          be changed rather than javac? <br>
        </div>
      </blockquote>
      IIRC, we realized that this is a case where we’re doomed no matter
      what we do. When running that fix through our tests we got some
      compatibility issues, so in general we were skeptical of applying
      it w/o having some kind of spec coverage.
      <blockquote type="cite" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(114, 159, 207) rgb(119, 119, 119); border-inline-start: 2px solid rgb(114, 159, 207); border-left: 2px solid rgb(114, 159, 207); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); margin: 19.2px 0px; outline-color: rgb(119, 119, 119); padding-inline: 16px; padding-left: 16px; padding-right: 16px; quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);">
        <div class="external-content" id="extcontent-2" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(119, 119, 119); border-left-color: rgb(119, 119, 119); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); outline-color: rgb(119, 119, 119); quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);"><br>
          What do you recommend for the current issue? Is it OK for ecj
          to accept the program, and if people complain about the
          difference to javac, explain that this is a bug in javac? Or
          are there any fine points in the spec which we are missing,
          that justify rejecting? <br>
        </div>
      </blockquote>
      <p style="margin-bottom: 19.2px; margin-top: 0px;">If this is
        indeed connected to the spec issue I mentioned above, then I’d
        say that it’s sad but also sort of ok for the compilers to
        diverge, given that a “real” fix will in reality be a lot more
        convoluted than just applying capture.</p>
      <blockquote type="cite" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(114, 159, 207) rgb(119, 119, 119); border-inline-start: 2px solid rgb(114, 159, 207); border-left: 2px solid rgb(114, 159, 207); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); margin: 19.2px 0px; outline-color: rgb(119, 119, 119); padding-inline: 16px; padding-left: 16px; padding-right: 16px; quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);">
        <div class="external-content" id="extcontent-3" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(119, 119, 119); border-left-color: rgb(119, 119, 119); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); outline-color: rgb(119, 119, 119); quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);"><br>
          <blockquote type="cite">(That said, I would have expected
            javac to perform a capture there -- @Vicente, when you have
            time, can you please take a look and see why javac is not
            capturing?)
            <br>
          </blockquote>
          <br>
          OK, I might just wait for Vicente's answer here :) <br>
        </div>
      </blockquote>
      <p style="margin-bottom: 19.2px; margin-top: 0px;">Ok.</p>
      <p style="margin-bottom: 19.2px; margin-top: 0px;">Thanks<br>
        Maurizio</p>
      <blockquote type="cite" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(114, 159, 207) rgb(119, 119, 119); border-inline-start: 2px solid rgb(114, 159, 207); border-left: 2px solid rgb(114, 159, 207); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); margin: 19.2px 0px; outline-color: rgb(119, 119, 119); padding-inline: 16px; padding-left: 16px; padding-right: 16px; quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);">
        <div class="external-content" id="extcontent-4" style="border-block-color: rgb(119, 119, 119); border-bottom-color: rgb(119, 119, 119); border-inline-color: rgb(119, 119, 119); border-left-color: rgb(119, 119, 119); border-right-color: rgb(119, 119, 119); border-top-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-color: rgb(119, 119, 119); outline-color: rgb(119, 119, 119); quotes: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: rgb(119, 119, 119);"><br>
          thanks,
          <br>
          Stephan
          <br>
          <blockquote type="cite">Thanks
            <br>
            Maurizio
            <br>
            <br>
            On 21/10/2025 20:26, Stephan Herrmann wrote:
            <br>
            <blockquote type="cite">Once more, I have a bunch of tests
              on my desk where javac and ecj disagree.
              <br>
              <br>
              The pending fix for one case, makes ecj accept the
              following program, which is rejected by javac:
              <br>
              <br>
              //---
              <br>
              import java.util.function.Function;
              <br>
              public class Test {
              <br>
                  public static void main(String[] args) {
              <br>
                      C<B<?>> c = null;
              <br>
                      m(
              <br>
                              _ -> new A<>(c),
              <br>
                              b -> b.intValue());
              <br>
                  }
              <br>
                  static <T, R> void
              m(Function<B<Number>, A<T>> f1,
              Function<T, R> f2) {}
              <br>
                  static class A<U> {
              <br>
                      public A(C<? extends C<U>> t) {}
              <br>
                  }
              <br>
                  private record B<V extends Number>(V t)
              implements C<V> {
              <br>
              <br>
                  }
              <br>
                  private interface C<W> {
              <br>
                      W t();
              <br>
                  }
              <br>
              }
              <br>
              //---
              <br>
              <br>
              javac reports:
              <br>
              Test.java:5: error: cannot infer type arguments for
              A<>
              <br>
                              _ -> new
              A<>((C<B<?>>) null),
              <br>
                                   ^
              <br>
                reason: cannot infer type-variable(s) U
              <br>
                  (argument mismatch; C<B<?>> cannot be
              converted to C<? extends C<U>>)
              <br>
                where U is a type-variable:
              <br>
                  U extends Object declared in class A
              <br>
              Test.java:6: error: cannot find symbol
              <br>
                              b -> b.intValue());
              <br>
                                    ^
              <br>
                symbol:   method intValue()
              <br>
                location: variable b of type Object
              <br>
              2 errors
              <br>
              <br>
              <br>
              With my pending fix ecj would accept, with these details:
              <br>
              <br>
              Outer inference of m() yields:
              <br>
                  T#0    :    capture#1-of ?
              <br>
                  R#1    :    java.lang.Integer
              <br>
                  U#3    :    capture#1-of ?
              <br>
              so m() resolves as:
              <br>
              void m(Function<B<Number>,A<capture#1-of
              ?>>, Function<capture#1-of ?,Integer>)
              <br>
              <br>
              With target types
              Function<B<Number>,A<capture#1-of ?>>
              and Function<capture#1-of ?,Integer> the two lambdas
              complete resolution just fine.
              <br>
              <br>
              <br>
              Am I missing any detail, why this inference solution is
              not valid?
              <br>
              <br>
              <br>
              FYI, the pending fix relates to capturing while computing
              super types of A<?>. While normally we ensure
              uniqueness of captures per source location, when type
              inference requests a capture for supertype computation we
              use the current invocation as the point of reference,
              i.e., repeatedly capturing the same wildcard during one
              invocation of type inference will share one unified
              capture. Is this OK? Or what are the rules for uniqueness
              vs. unification in this case?
              <br>
              <br>
              <br>
              <br>
              thanks,
              <br>
              Stephan
              <br>
            </blockquote>
          </blockquote>
          <br>
          <br>
          <br>
        </div>
      </blockquote>
    </div>
    <div class="mdhr-raw" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0;padding:0;margin:0;" aria-hidden="true" title="MDH:PHA+PGJyPjwvcD48ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPk9uIDIzLzEwLzIwMjUgMTE6MjUsIFN0ZXBoYW4gSGVycm1hbm4gd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDo5NjIzNjI5ZC0wNzE0LTQwNmItYjg5YS1mYjZjYTgyOWFhN2NAYmVybGluLmRlIj5IaSBNYXVyaXppbwo8YnI+Cjxicj50aGFua3MgZm9yIHRha2luZyB0aGUgdGltZS4KPGJyPgo8YnI+QW0gMjIuMTAuMjUgdW0gMTI6MDUgc2NocmllYiBNYXVyaXppbyBDaW1hZGFtb3JlOgo8YnI+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+Zmlyc3QsIEknbGwgbm90ZSB0aGF0IHRoaXMgaXNzdWUgc2VlbXMgZGFuZ2Vyb3VzbHkgY2xvc2UgdG8gdGhpcyBvcGVuIHNwZWMgaXNzdWU6Cjxicj4KPGJyPmh0dHBzOi8vYnVncy5vcGVuamRrLm9yZy9icm93c2UvSkRLLTgwMTYxOTYgCjwvYmxvY2txdW90ZT4KPGJyPkluIHRoaXMgcGFydGljdWxhciBpc3N1ZSBJJ20gcHV6emxlZCBieSB0aGlzIHN0YXRlbWVudDoKPGJyPgo8YnI+IlRoZSBjb3JyZWN0IGJlaGF2aW9yIGlzIHVuc3BlY2lmaWVkOiB3aGF0IGlzIHRoZSBwYXJhbWV0ZXJpemF0aW9uIG9mIExpc3QgdGhhdCAKaXMgYSBzdXBlcnR5cGUgb2YgQXJyYXlMaXN0Jmx0Oz8mZ3Q7PyBIb3cgZG8gd2UgZGVyaXZlIGl0PyIKPGJyPgo8YnI+RG9lc24ndCA0LjEwLjIgY2xlYXJseSBzdGF0ZSB0aGF0IHR5cGUgYXJndW1lbnRzIHNob3VsZCBiZSBjYXB0dXJlZCBoZXJlPyZuYnNwOzxicj48L2Jsb2NrcXVvdGU+PHA+WWVzLCBidXQgdGhhdCBtZWFucyB0aGF0IHdlIHdpbGwgZ2VuZXJhdGUgInNwdXJpb3VzIiBjYXB0dXJlIHZhcmlhYmxlcyBkdXJpbmcgaW5mZXJlbmNlIHdoaWNoIHdpbGwgZW5kIHVwIGluIHRoZSByZXN1bHQuIERlcGVuZGluZyBvbiB0aGUgY2FzZSwgdGhpcyBtaWdodCByZXN1bHQgaW4gZmFpbHVyZXMuPC9wPjxwPkRhbiAoQ0MnZWQpIG1pZ2h0IGFkZCBtb3JlIGRldGFpbHMuPC9wPjxwPiZsdDtzbmlwJmd0OzwvcD48YmxvY2txdW90ZSB0eXBlPSJjaXRlIiBjaXRlPSJtaWQ6OTYyMzYyOWQtMDcxNC00MDZiLWI4OWEtZmI2Y2E4MjlhYTdjQGJlcmxpbi5kZSI+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+V2UgaGF2ZSBvdGhlciBleGFtcGxlcyB3aGVyZSBhcHBseWluZyBjYXB0dXJlIGNvbnZlcnNpb24gZHVyaW5nIGluY29ycG9yYXRpb24gCnRoaXMgd2F5IGxlYWRzIHRvIGlzc3VlczoKPGJyPgo8YnI+aHR0cHM6Ly9idWdzLm9wZW5qZGsub3JnL2Jyb3dzZS9KREstODIwNjE0MiAKPC9ibG9ja3F1b3RlPgo8YnI+VGhlIGlzc3VlIHN0YXRlcyB0aGF0IHJlamVjdGluZyB0aGUgZXhhbXBsZSBpcyBhIHJlZ3Jlc3Npb24gKGluIDkpLiBGV0lXLCBlY2ogCmFjY2VwdHMgdGhlIGV4YW1wbGUgZXZlciBzaW5jZSBKYXZhIDEuOC4gU2VlaW5nIHRoYXQgYSBmaXggZm9yIGphdmFjIGV4aXN0cyBmb3IgCm1hbnkgeWVhcnMsIHdoeSBpcyB0aGF0IGZpeCBub3QgYXBwbGllZD8gSXMgdGhpcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGVyaGFwcyBKTFMgCmlzIHRvIGJlIGNoYW5nZWQgcmF0aGVyIHRoYW4gamF2YWM/Jm5ic3A7PGJyPjwvYmxvY2txdW90ZT5JSVJDLCB3ZSByZWFsaXplZCB0aGF0IHRoaXMgaXMgYSBjYXNlIHdoZXJlIHdlJ3JlIGRvb21lZCBubyBtYXR0ZXIgd2hhdCB3ZSBkby4gV2hlbiBydW5uaW5nIHRoYXQgZml4IHRocm91Z2ggb3VyIHRlc3RzIHdlIGdvdCBzb21lIGNvbXBhdGliaWxpdHkgaXNzdWVzLCBzbyBpbiBnZW5lcmFsIHdlIHdlcmUgc2tlcHRpY2FsIG9mIGFwcGx5aW5nIGl0IHcvbyBoYXZpbmcgc29tZSBraW5kIG9mIHNwZWMgY292ZXJhZ2UuPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOjk2MjM2MjlkLTA3MTQtNDA2Yi1iODlhLWZiNmNhODI5YWE3Y0BiZXJsaW4uZGUiPjxicj5XaGF0IGRvIHlvdSByZWNvbW1lbmQgZm9yIHRoZSBjdXJyZW50IGlzc3VlPyBJcyBpdCBPSyBmb3IgZWNqIHRvIGFjY2VwdCB0aGUgCnByb2dyYW0sIGFuZCBpZiBwZW9wbGUgY29tcGxhaW4gYWJvdXQgdGhlIGRpZmZlcmVuY2UgdG8gamF2YWMsIGV4cGxhaW4gdGhhdCB0aGlzIAppcyBhIGJ1ZyBpbiBqYXZhYz8gT3IgYXJlIHRoZXJlIGFueSBmaW5lIHBvaW50cyBpbiB0aGUgc3BlYyB3aGljaCB3ZSBhcmUgCm1pc3NpbmcsIHRoYXQganVzdGlmeSByZWplY3Rpbmc/Jm5ic3A7PGJyPjwvYmxvY2txdW90ZT48cD5JZiB0aGlzIGlzIGluZGVlZCBjb25uZWN0ZWQgdG8gdGhlIHNwZWMgaXNzdWUgSSBtZW50aW9uZWQgYWJvdmUsIHRoZW4gSSdkIHNheSB0aGF0IGl0J3Mgc2FkIGJ1dCBhbHNvIHNvcnQgb2Ygb2sgZm9yIHRoZSBjb21waWxlcnMgdG8gZGl2ZXJnZSwgZ2l2ZW4gdGhhdCBhICJyZWFsIiBmaXggd2lsbCBpbiByZWFsaXR5IGJlIGEgbG90IG1vcmUgY29udm9sdXRlZCB0aGFuIGp1c3QgYXBwbHlpbmcgY2FwdHVyZS48L3A+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOjk2MjM2MjlkLTA3MTQtNDA2Yi1iODlhLWZiNmNhODI5YWE3Y0BiZXJsaW4uZGUiPjxicj48YmxvY2txdW90ZSB0eXBlPSJjaXRlIj4oVGhhdCBzYWlkLCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgamF2YWMgdG8gcGVyZm9ybSBhIGNhcHR1cmUgdGhlcmUgLS0gQFZpY2VudGUsIAp3aGVuIHlvdSBoYXZlIHRpbWUsIGNhbiB5b3UgcGxlYXNlIHRha2UgYSBsb29rIGFuZCBzZWUgd2h5IGphdmFjIGlzIG5vdCBjYXB0dXJpbmc/KQo8YnI+PC9ibG9ja3F1b3RlPgo8YnI+T0ssIEkgbWlnaHQganVzdCB3YWl0IGZvciBWaWNlbnRlJ3MgYW5zd2VyIGhlcmUgOikmbmJzcDs8YnI+PC9ibG9ja3F1b3RlPjxwPk9rLjwvcD48cD5UaGFua3M8YnI+TWF1cml6aW88L3A+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOjk2MjM2MjlkLTA3MTQtNDA2Yi1iODlhLWZiNmNhODI5YWE3Y0BiZXJsaW4uZGUiPjxicj50aGFua3MsCjxicj5TdGVwaGFuCjxicj48YmxvY2txdW90ZSB0eXBlPSJjaXRlIj5UaGFua3MKPGJyPk1hdXJpemlvCjxicj4KPGJyPk9uIDIxLzEwLzIwMjUgMjA6MjYsIFN0ZXBoYW4gSGVycm1hbm4gd3JvdGU6Cjxicj48YmxvY2txdW90ZSB0eXBlPSJjaXRlIj5PbmNlIG1vcmUsIEkgaGF2ZSBhIGJ1bmNoIG9mIHRlc3RzIG9uIG15IGRlc2sgd2hlcmUgamF2YWMgYW5kIGVjaiBkaXNhZ3JlZS4KPGJyPgo8YnI+VGhlIHBlbmRpbmcgZml4IGZvciBvbmUgY2FzZSwgbWFrZXMgZWNqIGFjY2VwdCB0aGUgZm9sbG93aW5nIHByb2dyYW0sIHdoaWNoIGlzIApyZWplY3RlZCBieSBqYXZhYzoKPGJyPgo8YnI+Ly8tLS0KPGJyPmltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uRnVuY3Rpb247Cjxicj5wdWJsaWMgY2xhc3MgVGVzdCB7Cjxicj4mbmJzcDsmbmJzcDsmbmJzcDsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewo8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IEMmbHQ7QiZsdDs/Jmd0OyZndDsgYyA9IG51bGw7Cjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgbSgKPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBfIC0mZ3Q7IG5ldyBBJmx0OyZndDsoYyksCjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYiAtJmd0OyBiLmludFZhbHVlKCkpOwo8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IH0KPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgJmx0O1QsIFImZ3Q7IHZvaWQgbShGdW5jdGlvbiZsdDtCJmx0O051bWJlciZndDssIEEmbHQ7VCZndDsmZ3Q7IGYxLCBGdW5jdGlvbiZsdDtULCBSJmd0OyBmMikge30KPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyBzdGF0aWMgY2xhc3MgQSZsdDtVJmd0OyB7Cjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcHVibGljIEEoQyZsdDs/IGV4dGVuZHMgQyZsdDtVJmd0OyZndDsgdCkge30KPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyB9Cjxicj4mbmJzcDsmbmJzcDsmbmJzcDsgcHJpdmF0ZSByZWNvcmQgQiZsdDtWIGV4dGVuZHMgTnVtYmVyJmd0OyhWIHQpIGltcGxlbWVudHMgQyZsdDtWJmd0OyB7Cjxicj4KPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyB9Cjxicj4mbmJzcDsmbmJzcDsmbmJzcDsgcHJpdmF0ZSBpbnRlcmZhY2UgQyZsdDtXJmd0OyB7Cjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgVyB0KCk7Cjxicj4mbmJzcDsmbmJzcDsmbmJzcDsgfQo8YnI+fQo8YnI+Ly8tLS0KPGJyPgo8YnI+amF2YWMgcmVwb3J0czoKPGJyPlRlc3QuamF2YTo1OiBlcnJvcjogY2Fubm90IGluZmVyIHR5cGUgYXJndW1lbnRzIGZvciBBJmx0OyZndDsKPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBfIC0mZ3Q7IG5ldyBBJmx0OyZndDsoKEMmbHQ7QiZsdDs/Jmd0OyZndDspIG51bGwpLAo8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IF4KPGJyPiZuYnNwOyByZWFzb246IGNhbm5vdCBpbmZlciB0eXBlLXZhcmlhYmxlKHMpIFUKPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyAoYXJndW1lbnQgbWlzbWF0Y2g7IEMmbHQ7QiZsdDs/Jmd0OyZndDsgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBDJmx0Oz8gZXh0ZW5kcyBDJmx0O1UmZ3Q7Jmd0OykKPGJyPiZuYnNwOyB3aGVyZSBVIGlzIGEgdHlwZS12YXJpYWJsZToKPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyBVIGV4dGVuZHMgT2JqZWN0IGRlY2xhcmVkIGluIGNsYXNzIEEKPGJyPlRlc3QuamF2YTo2OiBlcnJvcjogY2Fubm90IGZpbmQgc3ltYm9sCjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYiAtJmd0OyBiLmludFZhbHVlKCkpOwo8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IF4KPGJyPiZuYnNwOyBzeW1ib2w6Jm5ic3A7Jm5ic3A7IG1ldGhvZCBpbnRWYWx1ZSgpCjxicj4mbmJzcDsgbG9jYXRpb246IHZhcmlhYmxlIGIgb2YgdHlwZSBPYmplY3QKPGJyPjIgZXJyb3JzCjxicj4KPGJyPgo8YnI+V2l0aCBteSBwZW5kaW5nIGZpeCBlY2ogd291bGQgYWNjZXB0LCB3aXRoIHRoZXNlIGRldGFpbHM6Cjxicj4KPGJyPk91dGVyIGluZmVyZW5jZSBvZiBtKCkgeWllbGRzOgo8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VCMwJm5ic3A7Jm5ic3A7Jm5ic3A7IDombmJzcDsmbmJzcDsmbmJzcDsgY2FwdHVyZSMxLW9mID8KPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1IjMSZuYnNwOyZuYnNwOyZuYnNwOyA6Jm5ic3A7Jm5ic3A7Jm5ic3A7IGphdmEubGFuZy5JbnRlZ2VyCjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVIzMmbmJzcDsmbmJzcDsmbmJzcDsgOiZuYnNwOyZuYnNwOyZuYnNwOyBjYXB0dXJlIzEtb2YgPwo8YnI+c28gbSgpIHJlc29sdmVzIGFzOgo8YnI+dm9pZCBtKEZ1bmN0aW9uJmx0O0ImbHQ7TnVtYmVyJmd0OyxBJmx0O2NhcHR1cmUjMS1vZiA/Jmd0OyZndDssIEZ1bmN0aW9uJmx0O2NhcHR1cmUjMS1vZiA/LEludGVnZXImZ3Q7KQo8YnI+Cjxicj5XaXRoIHRhcmdldCB0eXBlcyBGdW5jdGlvbiZsdDtCJmx0O051bWJlciZndDssQSZsdDtjYXB0dXJlIzEtb2YgPyZndDsmZ3Q7IGFuZCAKRnVuY3Rpb24mbHQ7Y2FwdHVyZSMxLW9mID8sSW50ZWdlciZndDsgdGhlIHR3byBsYW1iZGFzIGNvbXBsZXRlIHJlc29sdXRpb24ganVzdCBmaW5lLgo8YnI+Cjxicj4KPGJyPkFtIEkgbWlzc2luZyBhbnkgZGV0YWlsLCB3aHkgdGhpcyBpbmZlcmVuY2Ugc29sdXRpb24gaXMgbm90IHZhbGlkPwo8YnI+Cjxicj4KPGJyPkZZSSwgdGhlIHBlbmRpbmcgZml4IHJlbGF0ZXMgdG8gY2FwdHVyaW5nIHdoaWxlIGNvbXB1dGluZyBzdXBlciB0eXBlcyBvZiBBJmx0Oz8mZ3Q7LiAKV2hpbGUgbm9ybWFsbHkgd2UgZW5zdXJlIHVuaXF1ZW5lc3Mgb2YgY2FwdHVyZXMgcGVyIHNvdXJjZSBsb2NhdGlvbiwgd2hlbiB0eXBlIAppbmZlcmVuY2UgcmVxdWVzdHMgYSBjYXB0dXJlIGZvciBzdXBlcnR5cGUgY29tcHV0YXRpb24gd2UgdXNlIHRoZSBjdXJyZW50IAppbnZvY2F0aW9uIGFzIHRoZSBwb2ludCBvZiByZWZlcmVuY2UsIGkuZS4sIHJlcGVhdGVkbHkgY2FwdHVyaW5nIHRoZSBzYW1lIAp3aWxkY2FyZCBkdXJpbmcgb25lIGludm9jYXRpb24gb2YgdHlwZSBpbmZlcmVuY2Ugd2lsbCBzaGFyZSBvbmUgdW5pZmllZCAKY2FwdHVyZS4gSXMgdGhpcyBPSz8gT3Igd2hhdCBhcmUgdGhlIHJ1bGVzIGZvciB1bmlxdWVuZXNzIHZzLiB1bmlmaWNhdGlvbiBpbiAKdGhpcyBjYXNlPwo8YnI+Cjxicj4KPGJyPgo8YnI+dGhhbmtzLAo8YnI+U3RlcGhhbgo8YnI+PC9ibG9ja3F1b3RlPjwvYmxvY2txdW90ZT4KPGJyPgo8YnI+Cjxicj48L2Jsb2NrcXVvdGU+PHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IHRleHRjb21wbGV0ZS1kcm9wZG93biIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDogMTAwMDsiIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiIHBvcG92ZXI9ImF1dG8iPjwvdWw+">&#8203;</div>
  </body>
</html>