<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>48101</bug_id>
          
          <creation_ts>2010-10-21 16:43:01 -0700</creation_ts>
          <short_desc>Yarr gives different results for /(?:a*?){2,}/</short_desc>
          <delta_ts>2010-11-29 08:29:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>https://bugzilla.mozilla.org/show_bug.cgi?id=576822</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>msaboff</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>297719</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-10-21 16:43:01 -0700</bug_when>
    <thetext>The discussion in the referenced bug concludes that yarr behaviour is wrong in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314147</commentid>
    <comment_count>1</comment_count>
      <attachid>74965</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-27 13:45:31 -0800</bug_when>
    <thetext>Created attachment 74965
The patch

No performance impact, will update linked mozilla bug with info this afternoon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314224</commentid>
    <comment_count>2</comment_count>
      <attachid>74965</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-11-28 12:46:22 -0800</bug_when>
    <thetext>Comment on attachment 74965
The patch

View in context: https://bugs.webkit.org/attachment.cgi?id=74965&amp;action=review

Any perf change?  r+.

&gt; JavaScriptCore/yarr/RegexInterpreter.cpp:1552
&gt; +        // then fix this up at the end! - simplyfying this should make it mch clearer.

Typo: mch -&gt; much.  You may also want to file a bug on this and put the bug number in the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314225</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-11-28 12:46:52 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 74965 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74965&amp;action=review
&gt; 
&gt; Any perf change? 

Ignore that, I see your comment above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314238</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-28 16:45:55 -0800</bug_when>
    <thetext>Fixed in r72781.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314423</commentid>
    <comment_count>5</comment_count>
      <attachid>74965</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-29 08:29:06 -0800</bug_when>
    <thetext>Comment on attachment 74965
The patch

View in context: https://bugs.webkit.org/attachment.cgi?id=74965&amp;action=review

&gt; JavaScriptCore/ChangeLog:7
&gt; +        The test cases in the linked mozilla bug demostrate a couple of

Typo: demostrate

&gt; JavaScriptCore/ChangeLog:14
&gt; +        matches. In the case of parenthese-single matches (quantity count

Is “parenthese-single” the intended phrase or a typo?

&gt; JavaScriptCore/ChangeLog:16
&gt; +        of terminal subpattern matches we do currenty check, however there

Typo: currenty

&gt; JavaScriptCore/ChangeLog:28
&gt; +        Terminal sunpattern matching contains a second bug, too. The frame

Typo: sunpattern

&gt; JavaScriptCore/yarr/RegexCompiler.cpp:739
&gt; +    //   * a set of parens at the end of the regular expression (last term in any of the alternatives of the main body disjunction).
&gt; +    //   * where the parens are non-capturing, and quantified unbounded greedy (*).
&gt; +    //   * where the parens do not contain any capturing subpatterns.

Non-parallel grammar here.

&gt; JavaScriptCore/yarr/RegexCompiler.cpp:748
&gt; +        for (unsigned i =0; i &lt; alternatives.size(); ++i) {

Missing space after the &quot;=&quot;. Should also probably use size_t for the type here instead of unsigned.

&gt; JavaScriptCore/yarr/RegexCompiler.cpp:754
&gt; +                    &amp;&amp; term.quantityCount == UINT_MAX

Better to use a named constant instead of UINT_MAX here. We’d normally use numeric_limits&lt;unsigned&gt;::max() instead of UINT_MAX, by the way, but neither seems right since the maximum value has a special meaning.

&gt; JavaScriptCore/yarr/RegexInterpreter.cpp:722
&gt; +                    // Technically this access to inputPosition should be accessing the begin term&apos;s
&gt; +                    // inputPosition, but for repeats other than fixed these values should be
&gt; +                    // the same anyway! (we don&apos;t pre-check for greedy or non-greedy matches.)

Should capitalize the word “we” here.

&gt; JavaScriptCore/yarr/RegexInterpreter.cpp:780
&gt; +        // should always be returned as a successful match - we should never becktrack to here.

Typo: becktrack

&gt;&gt; JavaScriptCore/yarr/RegexInterpreter.cpp:1552
&gt;&gt; +        // then fix this up at the end! - simplyfying this should make it mch clearer.
&gt; 
&gt; Typo: mch -&gt; much.  You may also want to file a bug on this and put the bug number in the comment.

Typo: simplyfying

&gt; JavaScriptCore/yarr/RegexJIT.cpp:957
&gt; +            Jump success = (term.quantityType == QuantifierFixedCount) ?
&gt; +                jump() :
&gt; +                branch32(NotEqual, index, Address(stackPointerRegister, (parenthesesFrameLocation * sizeof(void*))));

We normally put the ? and the : at the starts of the lines, not the ends.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314425</commentid>
    <comment_count>6</comment_count>
      <attachid>74965</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-29 08:29:31 -0800</bug_when>
    <thetext>Comment on attachment 74965
The patch

View in context: https://bugs.webkit.org/attachment.cgi?id=74965&amp;action=review

&gt; LayoutTests/fast/regex/script-tests/repeat-match-waldemar.js:38
&gt;  Property changes on: LayoutTests/fast/regex/script-tests/repeat-match-waldemar.js
&gt;  ___________________________________________________________________
&gt;  Added: svn:executable
&gt;    + *

This should not be checked in executable.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74965</attachid>
            <date>2010-11-27 13:45:31 -0800</date>
            <delta_ts>2010-11-29 08:29:31 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>RepeatMatch.patch</filename>
            <type>text/plain</type>
            <size>50357</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyNzc2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODkgQEAKKzIwMTAtMTEtMjcgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0ODEwMSAtIFlhcnIgZ2l2ZXMgZGlmZmVy
ZW50IHJlc3VsdHMgZm9yIC8oPzphKj8pezIsfS8KKworICAgICAgICBUaGUgdGVzdCBjYXNlcyBp
biB0aGUgbGlua2VkIG1vemlsbGEgYnVnIGRlbW9zdHJhdGUgYSBjb3VwbGUgb2YKKyAgICAgICAg
cHJvYmxlbXMgaW4gc3VicGF0dGVybiBtYXRjaGluZy4gVGhlc2UgYnVncyBsaWUgaW4gdGhlIG9w
dGltaXplZAorICAgICAgICBjYXNlcyAtIGZvciBtYXRjaGluZyBwYXJlbnRoZXNlcyB3aXRoIGEg
cXVhbnRpdHkgY291bnQgb2YgMSwgYW5kCisgICAgICAgIGZvciBtYXRjaGluZyBncmVlZHkgcXVh
bnRpZmllZCBwYXJlbnRoZXNlcyBhdCB0aGUgZW5kIG9mIGEgcmVnZXgKKyAgICAgICAgKHdoaWNo
IGRvIG5vdCBiYWNrdHJhY2spLgorCisgICAgICAgIEluIGJvdGggb2YgdGhlc2UgY2FzZXMgd2Ug
YXJlIGZhaWxpbmcgdG8gY29ycmVjdGx5IGhhbmRsZSBlbXB0eQorICAgICAgICBtYXRjaGVzLiBJ
biB0aGUgY2FzZSBvZiBwYXJlbnRoZXNlLXNpbmdsZSBtYXRjaGVzIChxdWFudGl0eSBjb3VudAor
ICAgICAgICBvbmUpIHdlIGFyZSBmYWlsaW5nIHRvIHRlc3QgZm9yIGVtcHR5IG1hdGNoZXMgYXQg
YWxsLiBJbiB0aGUgY2FzZQorICAgICAgICBvZiB0ZXJtaW5hbCBzdWJwYXR0ZXJuIG1hdGNoZXMg
d2UgZG8gY3VycmVudHkgY2hlY2ssIGhvd2V2ZXIgdGhlcmUKKyAgICAgICAgaXMgYSBzdWJ0bGVy
IGJ1ZyBoZXJlIHRvby4gSW4gdGhlIGNhc2Ugb2YgYW4gZW1wdHkgbWF0Y2ggd2Ugd2lsbAorICAg
ICAgICBwcmVzZW50bHkgaW1tZWRpYXRlbHkgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGFsdGVy
bmF0aXZlIChvcgorICAgICAgICBjb21wbGV0ZSB0aGUgcmVnZXggbWF0Y2gpLCB3aGVyZWFzIHVw
b24gYSBmYWlsZWQgbWF0Y2ggd2Ugc2hvdWxkCisgICAgICAgIGJlIGJhY2t0cmFja2luZyBpbnRv
IHRoZSBmYWlsaW5nIGFsdGVybmF0aXZlLCB0byBnaXZlIGl0IGEgY2hhbmNlCisgICAgICAgIHRv
IG1hdGNoIGZ1cnRoZXIgKGUuZy4gY29uc2lkZXIgL2E/P2I/fGEvLmV4ZWMoImFiIikgLSB1cG9u
IGZpcnN0CisgICAgICAgIGF0dGVtcHRpbmcgdG8gbWF0Y2ggdGhlIGZpcnN0IGFsdGVybmF0aXZl
IHRoaXMgd2lsbCBtYXRjaCB0aGUgZW1wdHkKKyAgICAgICAgc3RyaW5nIC0gc2luY2UgYT8/IGlz
IG5vbi1ncmVlZHksIGhvd2V2ZXIgcmF0aGVyIHRoYW4gbW92aW5nIG9uIHRvCisgICAgICAgIHRo
ZSBzZWNvbmQgYWx0ZXJuYXRpdmUgd2Ugc2hvdWxkIGJlIHJlLW1hdGNoaW5nIHRoZSBmaXJzdCBv
bmUsIGF0CisgICAgICAgIHdoaWNoIHBvaW50IHRoZSBub24tZ3JlZWR5IGE/PyB3aWxsIG1hdGNo
LCBhbmQgYXMgc3VjaCB0aGUgcmVzdWx0CisgICAgICAgIHNob3VsZCBiZSAiYWIiLCBub3QgImEi
KS4KKworICAgICAgICBUZXJtaW5hbCBzdW5wYXR0ZXJuIG1hdGNoaW5nIGNvbnRhaW5zIGEgc2Vj
b25kIGJ1ZywgdG9vLiBUaGUgZnJhbWUKKyAgICAgICAgbG9jYXRpb24gdmFsdWVzIGluIHRoZSBz
dWJwYXR0ZXJuIHNob3VsZCBiZSBiZWluZyBhbGxvY2F0ZWQgd2l0aAorICAgICAgICB0aGUgb3V0
ZXIgZGlzanVuY3Rpb24ncyBmcmFtZSAoYXMgd2UgZG8gZm9yIHRoZSBwYXJlbnRoZXNlcy1zaW5n
bGUKKyAgICAgICAgb3B0aW1pemF0aW9uKS4gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyB0aHJlZSBy
ZWdleGVzOgorICAgICAgICAgICAgL2EqKD86YiopKmMqLworICAgICAgICAgICAgL2EqKD86Yiop
YyovCisgICAgICAgICAgICAvYSooPzpiKikqLworICAgICAgICBDb25zaWRlcmluZyBvbmx5IHRo
ZSBmcmFtZSBsb2NhdGlvbiByZXF1aXJlZCBieSB0aGUgYXRvbXMgYSxiLCBhbmQKKyAgICAgICAg
YywgKGlnbm9yaW5nIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmVzdGVkIHN1YnBhdHRlcm4p
IHRoZSBmaXJzdAorICAgICAgICByZWdleCAoYSBub3JtYWwgc3VicGF0dGVybiBtYXRjaCkgcmVx
dWlyZXMgYSBmcmFtZSBzaXplIG9mIDIgZm9yCisgICAgICAgIHRoZSBvdXRlciBkaXNqdW5jdGlv
biwgKHRvIGJhY2t0cmFjayB0ZXJtcyBhICYgYyksIHdpdGggZWFjaAorICAgICAgICBpdGVyYXRp
b24gb2YgdGhlIHN1YnBhdHRlcm4gcmVxdWlyaW5nIGEgZnJhbWUgb2Ygc2l6ZSAxIChpbiBvcmRl
cgorICAgICAgICB0byBiYWNrdHJhY2sgYikuIEluIHRoZSBjYXNlIG9mIHRoZSBzZWNvbmQgcmVn
ZXggKHdoZXJlIHRoZQorICAgICAgICBwYXJlbnRoZXNlcy1zaW5nbGUgb3B0aW1pemF0aW9uIHdp
bGwga2ljayBpbikgdGhlIG91dGVyIGZyYW1lIG11c3QKKyAgICAgICAgYmUgc2V0IHVwIHdpdGgg
YSBmcmFtZSBzaXplIG9mIDMsIHNpbmNlIHRoZSBvdXRlciBmcmFtZSB3aWxsIGFsc28KKyAgICAg
ICAgYmUgdXNlZCB3aGVuIHJ1bm5pbmcgdGhlIG5lc3RlZCBzdWJwYXR0ZXJuLiBXZSB3aWxsIGN1
cnJlbnRseSBvbmx5CisgICAgICAgIGFsbG9jYXRlIGEgZmFybWUgb2Ygc2l6ZSAxIGZvciB0aGUg
b3V0ZXIgZGlzanVudGlvbiAodG8gY29udGFpbiBhKSwKKyAgICAgICAgaG93dmVyIHRoZSBmcmFt
ZSBzaXplIHNob3VsZCBiZSAyIChzaW5jZSB0aGUgc3VicGF0dGVybiB3aWxsIGJlCisgICAgICAg
IGV2YWx1YXRlZCBpbiB0aGUgb3V0ZXIgZnJhbWUpLiBJbiBhZGRpdGlvbiB0byBmYWlsaW5nIHRv
IGFsbG9jYXRlCisgICAgICAgIGZyYW1lIHNwYWNlIHRoZSBmcmFtZSBvZmZzZXRzIGFyZSBhbHNv
IHByZXNlbnRseSBpbnZhbGlkIC0gaW4gdGhlCisgICAgICAgIGNhc2Ugb2YgdGhlIGxhc3QgcmVn
ZXggYidzIGZyYW1lIGxvY2F0aW9uIHdpbGwgYmUgc2V0IGFzc3VtaW5nIGl0CisgICAgICAgIHRv
IGJlIHRoZSBmaXJzdCB0ZXJtIGluIHRoZSBmcmFtZSwgd2hlcmVhcyBpbiB0aGlzIGNhc2UgYiBs
aWVzCisgICAgICAgIGFmdGVyIHRoZSB0ZXJtIGEsIGFuZCBzaG91bGQgYmUgdGFraW5nIGEgc2Vw
YXJhdGUgZnJhbWUgbG9jYXRpb24uCisKKyAgICAgICAgSW4gb3JkZXIgdG8gY29ycmVjdGx5IGFs
bG9jYXRlIHRoZSBmcmFtZSBmb3IgdGVybWluYWwgc3VicGF0dGVybgorICAgICAgICBtYXRjaGVz
IHdlIG11c3QgbW92ZSB0aGlzIG9wdGltaXphdGlvbiBiYWNrIHVwIGZyb20gdGhlIEpJVCBpbnRv
CisgICAgICAgIHRoZSBjb21waWxlciAoYW5kIHRodXMgaW50ZXJwcmV0ZXIgdG9vKSwgc2luY2Ug
dGhpcyBpcyB3aGVyZSB0aGUKKyAgICAgICAgZnJhbWUgYWxsb2NhdGlvbiB0YWtlcyBwbGFjZS4K
KworICAgICAgICAqIHlhcnIvUmVnZXhDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OllhcnI6
OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjpzZXR1cEFsdGVybmF0aXZlT2Zmc2V0cyk6CisgICAg
ICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjpjaGVja0ZvclRlcm1pbmFs
UGFyZW50aGVzZXMpOgorICAgICAgICAoSlNDOjpZYXJyOjpjb21waWxlUmVnZXgpOgorICAgICAg
ICAqIHlhcnIvUmVnZXhJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OkludGVy
cHJldGVyOjptYXRjaFBhcmVudGhlc2VzT25jZUJlZ2luKToKKyAgICAgICAgKEpTQzo6WWFycjo6
SW50ZXJwcmV0ZXI6Om1hdGNoUGFyZW50aGVzZXNPbmNlRW5kKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6SW50ZXJwcmV0ZXI6OmJhY2t0cmFja1BhcmVudGhlc2VzT25jZUJlZ2luKToKKyAgICAgICAg
KEpTQzo6WWFycjo6SW50ZXJwcmV0ZXI6OmJhY2t0cmFja1BhcmVudGhlc2VzT25jZUVuZCk6Cisg
ICAgICAgIChKU0M6OllhcnI6OkludGVycHJldGVyOjptYXRjaFBhcmVudGhlc2VzVGVybWluYWxC
ZWdpbik6CisgICAgICAgIChKU0M6OllhcnI6OkludGVycHJldGVyOjptYXRjaFBhcmVudGhlc2Vz
VGVybWluYWxFbmQpOgorICAgICAgICAoSlNDOjpZYXJyOjpJbnRlcnByZXRlcjo6YmFja3RyYWNr
UGFyZW50aGVzZXNUZXJtaW5hbEJlZ2luKToKKyAgICAgICAgKEpTQzo6WWFycjo6SW50ZXJwcmV0
ZXI6OmJhY2t0cmFja1BhcmVudGhlc2VzVGVybWluYWxFbmQpOgorICAgICAgICAoSlNDOjpZYXJy
OjpJbnRlcnByZXRlcjo6bWF0Y2hEaXNqdW5jdGlvbik6CisgICAgICAgIChKU0M6OllhcnI6OkJ5
dGVDb21waWxlcjo6YXRvbVBhcmVudGhlc2VzT25jZUJlZ2luKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6Qnl0ZUNvbXBpbGVyOjphdG9tUGFyZW50aGVzZXNUZXJtaW5hbEJlZ2luKToKKyAgICAgICAg
KEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjphdG9tUGFyZW50aGVzZXNTdWJwYXR0ZXJuQmVnaW4p
OgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlQ29tcGlsZXI6OmF0b21QYXJlbnRoZXRpY2FsQXNz
ZXJ0aW9uRW5kKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjphdG9tUGFyZW50
aGVzZXNTdWJwYXR0ZXJuRW5kKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjph
dG9tUGFyZW50aGVzZXNPbmNlRW5kKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVy
OjphdG9tUGFyZW50aGVzZXNUZXJtaW5hbEVuZCk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVD
b21waWxlcjo6ZW1pdERpc2p1bmN0aW9uKToKKyAgICAgICAgKiB5YXJyL1JlZ2V4SW50ZXJwcmV0
ZXIuaDoKKyAgICAgICAgKiB5YXJyL1JlZ2V4SklULmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6
UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlUGFyZW50aGVzZXNTaW5nbGUpOgorICAgICAgICAoSlND
OjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVQYXJlbnRoZXNlc0dyZWVkeU5vQmFja3Ry
YWNrKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlVGVybSk6
CisgICAgICAgICogeWFyci9SZWdleFBhdHRlcm4uaDoKKyAgICAgICAgKEpTQzo6WWFycjo6UGF0
dGVyblRlcm06OlBhdHRlcm5UZXJtKToKKwogMjAxMC0xMS0yNCAgUGF0cmljayBHYW5zdGVyZXIg
IDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9n
b27DoWMuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAJKHJldmlzaW9u
IDcyNzc2KQorKysgSmF2YVNjcmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjY3LDE0ICs2NjcsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBQ
YXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybjoKICAgICAgICAgICAgICAgICAv
LyBOb3RlOiBmb3IgZml4ZWQgb25jZSBwYXJlbnRoZXNlcyB3ZSB3aWxsIGVuc3VyZSBhdCBsZWFz
dCB0aGUgbWluaW11bSBpcyBhdmFpbGFibGU7IG90aGVycyBhcmUgb24gdGhlaXIgb3duLgogICAg
ICAgICAgICAgICAgIHRlcm0uZnJhbWVMb2NhdGlvbiA9IGN1cnJlbnRDYWxsRnJhbWVTaXplOwot
ICAgICAgICAgICAgICAgIGlmICgodGVybS5xdWFudGl0eUNvdW50ID09IDEpICYmICF0ZXJtLnBh
cmVudGhlc2VzLmlzQ29weSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0
eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRDYWxsRnJhbWVTaXplID0gc2V0dXBEaXNqdW5jdGlvbk9mZnNldHModGVybS5wYXJl
bnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENhbGxGcmFtZVNpemUsIGN1cnJlbnRJbnB1dFBv
c2l0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbnB1dFBvc2l0aW9uICs9
IHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fbWluaW11bVNpemU7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlDb3Vu
dCA9PSAxICYmICF0ZXJtLnBhcmVudGhlc2VzLmlzQ29weSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodGVybS5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllckZpeGVkQ291bnQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSArPSBSZWdleFN0YWNrU3BhY2VG
b3JCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudENhbGxGcmFtZVNpemUgPSBzZXR1cERpc2p1bmN0aW9uT2Zmc2V0cyh0ZXJtLnBhcmVu
dGhlc2VzLmRpc2p1bmN0aW9uLCBjdXJyZW50Q2FsbEZyYW1lU2l6ZSwgY3VycmVudElucHV0UG9z
aXRpb24pOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRDYWxsRnJhbWVTaXplID0gc2V0dXBEaXNqdW5jdGlvbk9mZnNldHModGVybS5wYXJlbnRoZXNl
cy5kaXNqdW5jdGlvbiwgY3VycmVudENhbGxGcmFtZVNpemUsIGN1cnJlbnRJbnB1dFBvc2l0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgcXVhbnRpdHkgaXMgZml4ZWQsIHRoZW4gcHJl
LWNoZWNrIGl0cyBtaW5pbXVtIHNpemUuCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1
YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRDb3VudCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRJbnB1dFBvc2l0aW9uICs9IHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24t
Pm1fbWluaW11bVNpemU7CisgICAgICAgICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlvbiA9
IGN1cnJlbnRJbnB1dFBvc2l0aW9uOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVybS5w
YXJlbnRoZXNlcy5pc1Rlcm1pbmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYWxs
RnJhbWVTaXplICs9IFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlc1Rl
cm1pbmFsOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2FsbEZyYW1lU2l6ZSA9IHNldHVw
RGlzanVuY3Rpb25PZmZzZXRzKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRD
YWxsRnJhbWVTaXplLCBjdXJyZW50SW5wdXRQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAg
IHRlcm0uaW5wdXRQb3NpdGlvbiA9IGN1cnJlbnRJbnB1dFBvc2l0aW9uOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHRlcm0uaW5wdXRQb3NpdGlvbiA9IGN1
cnJlbnRJbnB1dFBvc2l0aW9uOwpAQCAtNzI4LDYgKzczMSwzMyBAQCBwdWJsaWM6CiAgICAgICAg
IHNldHVwRGlzanVuY3Rpb25PZmZzZXRzKG1fcGF0dGVybi5tX2JvZHksIDAsIDApOwogICAgIH0K
IAorICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIGlkZW50aWZpZXMgc2V0cyBvZiBwYXJlbnRoZXNl
cyB0aGF0IHdlIHdpbGwgbmV2ZXIgbmVlZCB0byBiYWNrdHJhY2suCisgICAgLy8gSW4gdGhlc2Ug
Y2FzZXMgd2UgZG8gbm90IG5lZWQgdG8gc3RvcmUgc3RhdGUgZnJvbSBwcmlvciBpdGVyYXRpb25z
LgorICAgIC8vIFdlIGNhbiBwcmVzZW50bHkgYXZvaWQgYmFja3RyYWNraW5nIGZvcjoKKyAgICAv
LyAgICogYSBzZXQgb2YgcGFyZW5zIGF0IHRoZSBlbmQgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lv
biAobGFzdCB0ZXJtIGluIGFueSBvZiB0aGUgYWx0ZXJuYXRpdmVzIG9mIHRoZSBtYWluIGJvZHkg
ZGlzanVuY3Rpb24pLgorICAgIC8vICAgKiB3aGVyZSB0aGUgcGFyZW5zIGFyZSBub24tY2FwdHVy
aW5nLCBhbmQgcXVhbnRpZmllZCB1bmJvdW5kZWQgZ3JlZWR5ICgqKS4KKyAgICAvLyAgICogd2hl
cmUgdGhlIHBhcmVucyBkbyBub3QgY29udGFpbiBhbnkgY2FwdHVyaW5nIHN1YnBhdHRlcm5zLgor
ICAgIHZvaWQgY2hlY2tGb3JUZXJtaW5hbFBhcmVudGhlc2VzKCkKKyAgICB7CisgICAgICAgIC8v
IFRoaXMgY2hlY2sgaXMgbXVjaCB0b28gY3J1ZGU7IHNob3VsZCBiZSBqdXN0IGNoZWNraW5nIHdo
ZXRoZXIgdGhlIGNhbmRpZGF0ZQorICAgICAgICAvLyBub2RlIGNvbnRhaW5zIG5lc3RlZCBjYXB0
dXJpbmcgc3VicGF0dGVybnMsIG5vdCB0aGUgd2hvbGUgZXhwcmVzc2lvbiEKKyAgICAgICAgaWYg
KG1fcGF0dGVybi5tX251bVN1YnBhdHRlcm5zKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIFZlY3RvcjxQYXR0ZXJuQWx0ZXJuYXRpdmUqPiYgYWx0ZXJuYXRpdmVzID0gbV9wYXR0ZXJu
Lm1fYm9keS0+bV9hbHRlcm5hdGl2ZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9MDsgaSA8
IGFsdGVybmF0aXZlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgVmVjdG9yPFBhdHRlcm5U
ZXJtPiYgdGVybXMgPSBhbHRlcm5hdGl2ZXNbaV0tPm1fdGVybXM7CisgICAgICAgICAgICBpZiAo
dGVybXMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSB0ZXJt
cy5sYXN0KCk7CisgICAgICAgICAgICAgICAgaWYgKHRlcm0udHlwZSA9PSBQYXR0ZXJuVGVybTo6
VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybgorICAgICAgICAgICAgICAgICAgICAmJiB0ZXJtLnF1
YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyR3JlZWR5CisgICAgICAgICAgICAgICAgICAgICYmIHRl
cm0ucXVhbnRpdHlDb3VudCA9PSBVSU5UX01BWAorICAgICAgICAgICAgICAgICAgICAmJiAhdGVy
bS5jYXB0dXJlKCkpCisgICAgICAgICAgICAgICAgICAgIHRlcm0ucGFyZW50aGVzZXMuaXNUZXJt
aW5hbCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICB2b2lk
IG9wdGltaXplQk9MKCkKICAgICB7CiAgICAgICAgIC8vIExvb2sgZm9yIGV4cHJlc3Npb25zIGNv
bnRhaW5pbmcgYmVnaW5uaW5nIG9mIGxpbmUgKF4pIGFuY2hvcmluZyBhbmQgdW5yb2xsIHRoZW0u
CkBAIC05MzAsNiArOTYwLDcgQEAgY29uc3QgY2hhciogY29tcGlsZVJlZ2V4KGNvbnN0IFVTdHJp
bmcmIAogICAgICAgICBBU1NFUlQobnVtU3VicGF0dGVybnMgPT0gcGF0dGVybi5tX251bVN1YnBh
dHRlcm5zKTsKICAgICB9CiAKKyAgICBjb25zdHJ1Y3Rvci5jaGVja0ZvclRlcm1pbmFsUGFyZW50
aGVzZXMoKTsKICAgICBjb25zdHJ1Y3Rvci5vcHRpbWl6ZUJPTCgpOwogICAgICAgICAKICAgICBj
b25zdHJ1Y3Rvci5zZXR1cE9mZnNldHMoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVn
ZXhJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUveWFyci9SZWdl
eEludGVycHJldGVyLmNwcAkocmV2aXNpb24gNzI3NzYpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJy
L1JlZ2V4SW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIHVpbnRwdHJfdCBiZWdpbjsKICAgICB9OwogICAgIHN0cnVjdCBCYWNr
VHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlIHsKLSAgICAgICAgdWludHB0cl90IGluUGFyZW50aGVz
ZXM7CisgICAgICAgIHVpbnRwdHJfdCBiZWdpbjsKKyAgICB9OworICAgIHN0cnVjdCBCYWNrVHJh
Y2tJbmZvUGFyZW50aGVzZXNUZXJtaW5hbCB7CisgICAgICAgIHVpbnRwdHJfdCBiZWdpbjsKICAg
ICB9OwogICAgIHN0cnVjdCBCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXMgewogICAgICAgICB1aW50
cHRyX3QgbWF0Y2hBbW91bnQ7CkBAIC02MzEsMTEgKzYzNCwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IHN3aXRjaCAodGVybS5hdG9tLnF1YW50aXR5VHlwZSkgewogICAgICAgICBjYXNlIFF1YW50aWZp
ZXJHcmVlZHk6IHsKICAgICAgICAgICAgIC8vIHNldCB0aGlzIHNwZWN1bGF0aXZlbHk7IGlmIHdl
IGdldCB0byB0aGUgcGFyZW5zIGVuZCB0aGlzIHdpbGwgYmUgdHJ1ZS4KLSAgICAgICAgICAgIGJh
Y2tUcmFjay0+aW5QYXJlbnRoZXNlcyA9IDE7CisgICAgICAgICAgICBiYWNrVHJhY2stPmJlZ2lu
ID0gaW5wdXQuZ2V0UG9zKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIFF1YW50aWZpZXJOb25HcmVlZHk6IHsKLSAgICAgICAgICAgIGJhY2tUcmFjay0+aW5Q
YXJlbnRoZXNlcyA9IDA7CisgICAgICAgICAgICBiYWNrVHJhY2stPmJlZ2luID0gbm90Rm91bmQ7
CiAgICAgICAgICAgICBjb250ZXh0LT50ZXJtICs9IHRlcm0uYXRvbS5wYXJlbnRoZXNlc1dpZHRo
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTY1MSw3ICs2NTQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgbWF0Y2hQ
YXJlbnRoZXNlc09uY2VFbmQoQnl0ZVRlcm0mIHRlcm0sIERpc2p1bmN0aW9uQ29udGV4dCopCisg
ICAgYm9vbCBtYXRjaFBhcmVudGhlc2VzT25jZUVuZChCeXRlVGVybSYgdGVybSwgRGlzanVuY3Rp
b25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKICAgICAgICAgQVNTRVJUKHRlcm0udHlwZSA9PSBC
eXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VFbmQpOwogICAgICAgICBBU1NF
UlQodGVybS5hdG9tLnF1YW50aXR5Q291bnQgPT0gMSk7CkBAIC02NjAsNyArNjYzLDEyIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHRlcm0uYXRvbS5zdWJw
YXR0ZXJuSWQ7CiAgICAgICAgICAgICBvdXRwdXRbKHN1YnBhdHRlcm5JZCA8PCAxKSArIDFdID0g
aW5wdXQuZ2V0UG9zKCkgKyB0ZXJtLmlucHV0UG9zaXRpb247CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHRlcm0uYXRvbS5xdWFudGl0eVR5cGUgPT0gUXVh
bnRpZmllckZpeGVkQ291bnQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBC
YWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlKiBiYWNrVHJhY2sgPSByZWludGVycHJldF9jYXN0
PEJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2UqPihjb250ZXh0LT5mcmFtZSArIHRlcm0uZnJh
bWVMb2NhdGlvbik7CisgICAgICAgIHJldHVybiBiYWNrVHJhY2stPmJlZ2luICE9IGlucHV0Lmdl
dFBvcygpOwogICAgIH0KIAogICAgIGJvb2wgYmFja3RyYWNrUGFyZW50aGVzZXNPbmNlQmVnaW4o
Qnl0ZVRlcm0mIHRlcm0sIERpc2p1bmN0aW9uQ29udGV4dCogY29udGV4dCkKQEAgLTY3OSwxMiAr
Njg3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoICh0ZXJtLmF0b20ucXVhbnRpdHlUeXBl
KSB7CiAgICAgICAgIGNhc2UgUXVhbnRpZmllckdyZWVkeToKICAgICAgICAgICAgIC8vIGlmIHdl
IGJhY2t0cmFjayB0byB0aGlzIHBvaW50LCB0aGVyZSBpcyBhbm90aGVyIGNoYW5jZSAtIHRyeSBt
YXRjaGluZyBub3RoaW5nLgotICAgICAgICAgICAgQVNTRVJUKGJhY2tUcmFjay0+aW5QYXJlbnRo
ZXNlcyk7Ci0gICAgICAgICAgICBiYWNrVHJhY2stPmluUGFyZW50aGVzZXMgPSAwOworICAgICAg
ICAgICAgQVNTRVJUKGJhY2tUcmFjay0+YmVnaW4gIT0gbm90Rm91bmQpOworICAgICAgICAgICAg
YmFja1RyYWNrLT5iZWdpbiA9IG5vdEZvdW5kOwogICAgICAgICAgICAgY29udGV4dC0+dGVybSAr
PSB0ZXJtLmF0b20ucGFyZW50aGVzZXNXaWR0aDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBjYXNlIFF1YW50aWZpZXJOb25HcmVlZHk6Ci0gICAgICAgICAgICBBU1NFUlQoYmFj
a1RyYWNrLT5pblBhcmVudGhlc2VzKTsKKyAgICAgICAgICAgIEFTU0VSVChiYWNrVHJhY2stPmJl
Z2luICE9IG5vdEZvdW5kKTsKICAgICAgICAgY2FzZSBRdWFudGlmaWVyRml4ZWRDb3VudDoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03MDEsMTUgKzcwOSwxOSBAQCBwdWJsaWM6
CiAKICAgICAgICAgc3dpdGNoICh0ZXJtLmF0b20ucXVhbnRpdHlUeXBlKSB7CiAgICAgICAgIGNh
c2UgUXVhbnRpZmllckdyZWVkeToKLSAgICAgICAgICAgIGlmICghYmFja1RyYWNrLT5pblBhcmVu
dGhlc2VzKSB7CisgICAgICAgICAgICBpZiAoYmFja1RyYWNrLT5iZWdpbiA9PSBub3RGb3VuZCkg
ewogICAgICAgICAgICAgICAgIGNvbnRleHQtPnRlcm0gLT0gdGVybS5hdG9tLnBhcmVudGhlc2Vz
V2lkdGg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAg
ICAgICBjYXNlIFF1YW50aWZpZXJOb25HcmVlZHk6Ci0gICAgICAgICAgICBpZiAoIWJhY2tUcmFj
ay0+aW5QYXJlbnRoZXNlcykgewotICAgICAgICAgICAgICAgIC8vIG5vdyB0cnkgdG8gbWF0Y2gg
dGhlIHBhcmVuczsgc2V0IHRoaXMgc3BlY3VsYXRpdmVseS4KLSAgICAgICAgICAgICAgICBiYWNr
VHJhY2stPmluUGFyZW50aGVzZXMgPSAxOworICAgICAgICAgICAgaWYgKGJhY2tUcmFjay0+YmVn
aW4gPT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgICAgICBiYWNrVHJhY2stPmJlZ2luID0gaW5w
dXQuZ2V0UG9zKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRlcm0uY2FwdHVyZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFRlY2huaWNhbGx5IHRoaXMgYWNjZXNzIHRvIGlucHV0UG9zaXRp
b24gc2hvdWxkIGJlIGFjY2Vzc2luZyB0aGUgYmVnaW4gdGVybSdzCisgICAgICAgICAgICAgICAg
ICAgIC8vIGlucHV0UG9zaXRpb24sIGJ1dCBmb3IgcmVwZWF0cyBvdGhlciB0aGFuIGZpeGVkIHRo
ZXNlIHZhbHVlcyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNhbWUgYW55
d2F5ISAod2UgZG9uJ3QgcHJlLWNoZWNrIGZvciBncmVlZHkgb3Igbm9uLWdyZWVkeSBtYXRjaGVz
LikKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCgmdGVybSAtIHRlcm0uYXRvbS5wYXJlbnRo
ZXNlc1dpZHRoKS0+dHlwZSA9PSBCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9u
Y2VCZWdpbik7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgoJnRlcm0gLSB0ZXJtLmF0b20u
cGFyZW50aGVzZXNXaWR0aCktPmlucHV0UG9zaXRpb24gPT0gdGVybS5pbnB1dFBvc2l0aW9uKTsK
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gdGVybS5hdG9tLnN1
YnBhdHRlcm5JZDsKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W3N1YnBhdHRlcm5JZCA8PCAx
XSA9IGlucHV0LmdldFBvcygpICsgdGVybS5pbnB1dFBvc2l0aW9uOwogICAgICAgICAgICAgICAg
IH0KQEAgLTcyMyw2ICs3MzUsNTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCisgICAgYm9vbCBtYXRjaFBhcmVudGhlc2VzVGVybWluYWxCZWdpbihCeXRlVGVybSYg
dGVybSwgRGlzanVuY3Rpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHRlcm0udHlwZSA9PSBCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFs
QmVnaW4pOworICAgICAgICBBU1NFUlQodGVybS5hdG9tLnF1YW50aXR5VHlwZSA9PSBRdWFudGlm
aWVyR3JlZWR5KTsKKyAgICAgICAgQVNTRVJUKHRlcm0uYXRvbS5xdWFudGl0eUNvdW50ID09IFVJ
TlRfTUFYKTsKKyAgICAgICAgQVNTRVJUKCF0ZXJtLmNhcHR1cmUoKSk7CisKKyAgICAgICAgQmFj
a1RyYWNrSW5mb1BhcmVudGhlc2VzVGVybWluYWwqIGJhY2tUcmFjayA9IHJlaW50ZXJwcmV0X2Nh
c3Q8QmFja1RyYWNrSW5mb1BhcmVudGhlc2VzVGVybWluYWwqPihjb250ZXh0LT5mcmFtZSArIHRl
cm0uZnJhbWVMb2NhdGlvbik7CisgICAgICAgIGJhY2tUcmFjay0+YmVnaW4gPSBpbnB1dC5nZXRQ
b3MoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBtYXRjaFBhcmVu
dGhlc2VzVGVybWluYWxFbmQoQnl0ZVRlcm0mIHRlcm0sIERpc2p1bmN0aW9uQ29udGV4dCogY29u
dGV4dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0ZXJtLnR5cGUgPT0gQnl0ZVRlcm06OlR5cGVQ
YXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEVuZCk7CisKKyAgICAgICAgQmFja1RyYWNrSW5m
b1BhcmVudGhlc2VzVGVybWluYWwqIGJhY2tUcmFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8QmFja1Ry
YWNrSW5mb1BhcmVudGhlc2VzVGVybWluYWwqPihjb250ZXh0LT5mcmFtZSArIHRlcm0uZnJhbWVM
b2NhdGlvbik7CisgICAgICAgIC8vIEVtcHR5IG1hdGNoIGlzIGEgZmFpbGVkIG1hdGNoLgorICAg
ICAgICBpZiAoYmFja1RyYWNrLT5iZWdpbiA9PSBpbnB1dC5nZXRQb3MoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBTdWNjZXNzZnVsIG1hdGNoISBPa2F5LCB3aGF0
J3MgbmV4dD8gLSBsb29wIGFyb3VuZCBhbmQgdHJ5IHRvIG1hdGNoIG1vYXIhCisgICAgICAgIGNv
bnRleHQtPnRlcm0gLT0gKHRlcm0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoICsgMSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgYmFja3RyYWNrUGFyZW50aGVzZXNUZXJt
aW5hbEJlZ2luKEJ5dGVUZXJtJiB0ZXJtLCBEaXNqdW5jdGlvbkNvbnRleHQqIGNvbnRleHQpCisg
ICAgeworICAgICAgICBBU1NFUlQodGVybS50eXBlID09IEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVz
ZXNTdWJwYXR0ZXJuVGVybWluYWxCZWdpbik7CisgICAgICAgIEFTU0VSVCh0ZXJtLmF0b20ucXVh
bnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkpOworICAgICAgICBBU1NFUlQodGVybS5hdG9t
LnF1YW50aXR5Q291bnQgPT0gVUlOVF9NQVgpOworICAgICAgICBBU1NFUlQoIXRlcm0uY2FwdHVy
ZSgpKTsKKworICAgICAgICAvLyBJZiB3ZSBiYWNrdHJhY2sgdG8gdGhpcyBwb2ludCwgd2UgaGF2
ZSBmYWlsZWQgdG8gbWF0Y2ggdGhpcyBpdGVyYXRpb24gb2YgdGhlIHBhcmVucy4KKyAgICAgICAg
Ly8gU2luY2UgdGhpcyBpcyBncmVlZHkgLyB6ZXJvIG1pbmltdW0gYSBmYWlsZWQgaXMgYWxzbyBh
Y2NlcHRlZCBhcyBhIG1hdGNoIQorICAgICAgICBjb250ZXh0LT50ZXJtICs9IHRlcm0uYXRvbS5w
YXJlbnRoZXNlc1dpZHRoOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29s
IGJhY2t0cmFja1BhcmVudGhlc2VzVGVybWluYWxFbmQoQnl0ZVRlcm0mLCBEaXNqdW5jdGlvbkNv
bnRleHQqKQorICAgIHsKKyAgICAgICAgLy8gJ1Rlcm1pbmFsJyBwYXJlbnRoZXNlcyBhcmUgYXQg
dGhlIGVuZCBvZiB0aGUgcmVnZXgsIGFuZCBhcyBzdWNoIGEgbWF0Y2ggcGFzdCBlbmQKKyAgICAg
ICAgLy8gc2hvdWxkIGFsd2F5cyBiZSByZXR1cm5lZCBhcyBhIHN1Y2Nlc3NmdWwgbWF0Y2ggLSB3
ZSBzaG91bGQgbmV2ZXIgYmVja3RyYWNrIHRvIGhlcmUuCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgYm9vbCBtYXRjaFBh
cmVudGhldGljYWxBc3NlcnRpb25CZWdpbihCeXRlVGVybSYgdGVybSwgRGlzanVuY3Rpb25Db250
ZXh0KiBjb250ZXh0KQogICAgIHsKICAgICAgICAgQVNTRVJUKHRlcm0udHlwZSA9PSBCeXRlVGVy
bTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb25CZWdpbik7CkBAIC0xMTcxLDYgKzEyMzAsMTQg
QEAgcHVibGljOgogICAgICAgICAgICAgaWYgKG1hdGNoUGFyZW50aGVzZXNPbmNlRW5kKGN1cnJl
bnRUZXJtKCksIGNvbnRleHQpKQogICAgICAgICAgICAgICAgIE1BVENIX05FWFQoKTsKICAgICAg
ICAgICAgIEJBQ0tUUkFDSygpOworICAgICAgICBjYXNlIEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVz
ZXNTdWJwYXR0ZXJuVGVybWluYWxCZWdpbjoKKyAgICAgICAgICAgIGlmIChtYXRjaFBhcmVudGhl
c2VzVGVybWluYWxCZWdpbihjdXJyZW50VGVybSgpLCBjb250ZXh0KSkKKyAgICAgICAgICAgICAg
ICBNQVRDSF9ORVhUKCk7CisgICAgICAgICAgICBCQUNLVFJBQ0soKTsKKyAgICAgICAgY2FzZSBC
eXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsRW5kOgorICAgICAgICAg
ICAgaWYgKG1hdGNoUGFyZW50aGVzZXNUZXJtaW5hbEVuZChjdXJyZW50VGVybSgpLCBjb250ZXh0
KSkKKyAgICAgICAgICAgICAgICBNQVRDSF9ORVhUKCk7CisgICAgICAgICAgICBCQUNLVFJBQ0so
KTsKICAgICAgICAgY2FzZSBCeXRlVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb25CZWdp
bjoKICAgICAgICAgICAgIGlmIChtYXRjaFBhcmVudGhldGljYWxBc3NlcnRpb25CZWdpbihjdXJy
ZW50VGVybSgpLCBjb250ZXh0KSkKICAgICAgICAgICAgICAgICBNQVRDSF9ORVhUKCk7CkBAIC0x
Mjg0LDYgKzEzNTEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmIChiYWNrdHJhY2tQ
YXJlbnRoZXNlc09uY2VFbmQoY3VycmVudFRlcm0oKSwgY29udGV4dCkpCiAgICAgICAgICAgICAg
ICAgICAgIE1BVENIX05FWFQoKTsKICAgICAgICAgICAgICAgICBCQUNLVFJBQ0soKTsKKyAgICAg
ICAgICAgIGNhc2UgQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEJl
Z2luOgorICAgICAgICAgICAgICAgIGlmIChiYWNrdHJhY2tQYXJlbnRoZXNlc1Rlcm1pbmFsQmVn
aW4oY3VycmVudFRlcm0oKSwgY29udGV4dCkpCisgICAgICAgICAgICAgICAgICAgIE1BVENIX05F
WFQoKTsKKyAgICAgICAgICAgICAgICBCQUNLVFJBQ0soKTsKKyAgICAgICAgICAgIGNhc2UgQnl0
ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEVuZDoKKyAgICAgICAgICAg
ICAgICBpZiAoYmFja3RyYWNrUGFyZW50aGVzZXNUZXJtaW5hbEVuZChjdXJyZW50VGVybSgpLCBj
b250ZXh0KSkKKyAgICAgICAgICAgICAgICAgICAgTUFUQ0hfTkVYVCgpOworICAgICAgICAgICAg
ICAgIEJBQ0tUUkFDSygpOwogICAgICAgICAgICAgY2FzZSBCeXRlVGVybTo6VHlwZVBhcmVudGhl
dGljYWxBc3NlcnRpb25CZWdpbjoKICAgICAgICAgICAgICAgICBpZiAoYmFja3RyYWNrUGFyZW50
aGV0aWNhbEFzc2VydGlvbkJlZ2luKGN1cnJlbnRUZXJtKCksIGNvbnRleHQpKQogICAgICAgICAg
ICAgICAgICAgICBNQVRDSF9ORVhUKCk7CkBAIC0xNDQ1LDggKzE1MjAsMzcgQEAgcHVibGljOgog
ICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
LnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogICAgIH0KIAorICAg
IHZvaWQgYXRvbVBhcmVudGhlc2VzT25jZUJlZ2luKHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgYm9v
bCBjYXB0dXJlLCBpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgdW5z
aWduZWQgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaW50IGJlZ2lu
VGVybSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCk7CisKKyAgICAgICAgbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhl
c2VzU3VicGF0dGVybk9uY2VCZWdpbiwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBpbnB1dFBvc2l0
aW9uKSk7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlv
bi0+dGVybXMuc2l6ZSgpIC0gMV0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9jYXRpb247CisgICAg
ICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm06OkFsdGVybmF0aXZl
QmVnaW4oKSk7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5j
dGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uZnJhbWVMb2NhdGlvbiA9IGFsdGVybmF0aXZlRnJhbWVM
b2NhdGlvbjsKKworICAgICAgICBtX3BhcmVudGhlc2VzU3RhY2suYXBwZW5kKFBhcmVudGhlc2Vz
U3RhY2tFbnRyeShiZWdpblRlcm0sIG1fY3VycmVudEFsdGVybmF0aXZlSW5kZXgpKTsKKyAgICAg
ICAgbV9jdXJyZW50QWx0ZXJuYXRpdmVJbmRleCA9IGJlZ2luVGVybSArIDE7CisgICAgfQorCisg
ICAgdm9pZCBhdG9tUGFyZW50aGVzZXNUZXJtaW5hbEJlZ2luKHVuc2lnbmVkIHN1YnBhdHRlcm5J
ZCwgYm9vbCBjYXB0dXJlLCBpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlv
biwgdW5zaWduZWQgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaW50
IGJlZ2luVGVybSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCk7CisKKyAgICAgICAg
bV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBh
cmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsQmVnaW4sIHN1YnBhdHRlcm5JZCwgY2FwdHVyZSwg
aW5wdXRQb3NpdGlvbikpOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0
aW9uOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtOjpB
bHRlcm5hdGl2ZUJlZ2luKCkpOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9i
b2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24gPSBhbHRlcm5h
dGl2ZUZyYW1lTG9jYXRpb247CisKKyAgICAgICAgbV9wYXJlbnRoZXNlc1N0YWNrLmFwcGVuZChQ
YXJlbnRoZXNlc1N0YWNrRW50cnkoYmVnaW5UZXJtLCBtX2N1cnJlbnRBbHRlcm5hdGl2ZUluZGV4
KSk7CisgICAgICAgIG1fY3VycmVudEFsdGVybmF0aXZlSW5kZXggPSBiZWdpblRlcm0gKyAxOwor
ICAgIH0KKwogICAgIHZvaWQgYXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkJlZ2luKHVuc2lnbmVk
IHN1YnBhdHRlcm5JZCwgYm9vbCBjYXB0dXJlLCBpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQg
ZnJhbWVMb2NhdGlvbiwgdW5zaWduZWQgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKQogICAgIHsK
KyAgICAgICAgLy8gRXJycmshIC0gdGhpcyBpcyBhIGxpdHRsZSBjcmF6eSwgd2UgaW5pdGlhbGx5
IGdlbmVyYXRlIGFzIGEgVHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbiwKKyAgICAg
ICAgLy8gdGhlbiBmaXggdGhpcyB1cCBhdCB0aGUgZW5kISAtIHNpbXBseWZ5aW5nIHRoaXMgc2hv
dWxkIG1ha2UgaXQgbWNoIGNsZWFyZXIuCisKICAgICAgICAgaW50IGJlZ2luVGVybSA9IG1fYm9k
eURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCk7CiAKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24t
PnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVy
bk9uY2VCZWdpbiwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CkBAIC0x
NDcxLDYgKzE1NzUsMjggQEAgcHVibGljOgogICAgICAgICBtX2N1cnJlbnRBbHRlcm5hdGl2ZUlu
ZGV4ID0gYmVnaW5UZXJtICsgMTsKICAgICB9CiAKKyAgICB2b2lkIGF0b21QYXJlbnRoZXRpY2Fs
QXNzZXJ0aW9uRW5kKGludCBpbnB1dFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCB1
bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCisgICAg
eworICAgICAgICB1bnNpZ25lZCBiZWdpblRlcm0gPSBwb3BQYXJlbnRoZXNlc1N0YWNrKCk7Cisg
ICAgICAgIGNsb3NlQWx0ZXJuYXRpdmUoYmVnaW5UZXJtICsgMSk7CisgICAgICAgIHVuc2lnbmVk
IGVuZFRlcm0gPSBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpOworCisgICAgICAgIEFT
U0VSVChtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS50eXBlID09IEJ5dGVUZXJt
OjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbkJlZ2luKTsKKworICAgICAgICBib29sIGludmVy
dE9yQ2FwdHVyZSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmludmVydE9y
Q2FwdHVyZTsKKyAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gbV9ib2R5RGlzanVuY3Rp
b24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5zdWJwYXR0ZXJuSWQ7CisKKyAgICAgICAgbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhl
dGljYWxBc3NlcnRpb25FbmQsIHN1YnBhdHRlcm5JZCwgaW52ZXJ0T3JDYXB0dXJlLCBpbnB1dFBv
c2l0aW9uKSk7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0
b20ucGFyZW50aGVzZXNXaWR0aCA9IGVuZFRlcm0gLSBiZWdpblRlcm07CisgICAgICAgIG1fYm9k
eURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9tLnBhcmVudGhlc2VzV2lkdGggPSBlbmRU
ZXJtIC0gYmVnaW5UZXJtOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVy
bV0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9jYXRpb247CisKKyAgICAgICAgbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3Vu
dDsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5xdWFu
dGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
c1tlbmRUZXJtXS5hdG9tLnF1YW50aXR5Q291bnQgPSBxdWFudGl0eUNvdW50OworICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFu
dGl0eVR5cGU7CisgICAgfQorCiAgICAgdW5zaWduZWQgcG9wUGFyZW50aGVzZXNTdGFjaygpCiAg
ICAgewogICAgICAgICBBU1NFUlQobV9wYXJlbnRoZXNlc1N0YWNrLnNpemUoKSk7CkBAIC0xNTQy
LDUwICsxNjY4LDc5IEBAIHB1YmxpYzoKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
W2VuZEluZGV4XS5mcmFtZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKICAgICB9CiAKLSAgICB2
b2lkIGF0b21QYXJlbnRoZXNlc0VuZChib29sIGRvSW5saW5lLCB1bnNpZ25lZCBsYXN0U3VicGF0
dGVybklkLCBpbnQgaW5wdXRQb3NpdGlvbiwgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgdW5zaWdu
ZWQgcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlLCB1bnNpZ25lZCBj
YWxsRnJhbWVTaXplID0gMCkKKyAgICB2b2lkIGF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5FbmQo
dW5zaWduZWQgbGFzdFN1YnBhdHRlcm5JZCwgaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZy
YW1lTG9jYXRpb24sIHVuc2lnbmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50
aXR5VHlwZSwgdW5zaWduZWQgY2FsbEZyYW1lU2l6ZSA9IDApCisgICAgeworICAgICAgICB1bnNp
Z25lZCBiZWdpblRlcm0gPSBwb3BQYXJlbnRoZXNlc1N0YWNrKCk7CisgICAgICAgIGNsb3NlQWx0
ZXJuYXRpdmUoYmVnaW5UZXJtICsgMSk7CisgICAgICAgIHVuc2lnbmVkIGVuZFRlcm0gPSBtX2Jv
ZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpOworCisgICAgICAgIEFTU0VSVChtX2JvZHlEaXNq
dW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS50eXBlID09IEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVz
ZXNTdWJwYXR0ZXJuT25jZUJlZ2luKTsKKworICAgICAgICBCeXRlVGVybSYgcGFyZW50aGVzZXNC
ZWdpbiA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dOworCisgICAgICAgIGJv
b2wgaW52ZXJ0T3JDYXB0dXJlID0gcGFyZW50aGVzZXNCZWdpbi5pbnZlcnRPckNhcHR1cmU7Cisg
ICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHBhcmVudGhlc2VzQmVnaW4uYXRvbS5zdWJw
YXR0ZXJuSWQ7CisKKyAgICAgICAgdW5zaWduZWQgbnVtU3VicGF0dGVybnMgPSBsYXN0U3VicGF0
dGVybklkIC0gc3VicGF0dGVybklkICsgMTsKKyAgICAgICAgQnl0ZURpc2p1bmN0aW9uKiBwYXJl
bnRoZXNlc0Rpc2p1bmN0aW9uID0gbmV3IEJ5dGVEaXNqdW5jdGlvbihudW1TdWJwYXR0ZXJucywg
Y2FsbEZyYW1lU2l6ZSk7CisKKyAgICAgICAgcGFyZW50aGVzZXNEaXNqdW5jdGlvbi0+dGVybXMu
YXBwZW5kKEJ5dGVUZXJtOjpTdWJwYXR0ZXJuQmVnaW4oKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgdGVybUluUGFyZW50aGVzZXMgPSBiZWdpblRlcm0gKyAxOyB0ZXJtSW5QYXJlbnRoZXNlcyA8
IGVuZFRlcm07ICsrdGVybUluUGFyZW50aGVzZXMpCisgICAgICAgICAgICBwYXJlbnRoZXNlc0Rp
c2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQobV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW3Rlcm1JblBh
cmVudGhlc2VzXSk7CisgICAgICAgIHBhcmVudGhlc2VzRGlzanVuY3Rpb24tPnRlcm1zLmFwcGVu
ZChCeXRlVGVybTo6U3VicGF0dGVybkVuZCgpKTsKKworICAgICAgICBtX2JvZHlEaXNqdW5jdGlv
bi0+dGVybXMuc2hyaW5rKGJlZ2luVGVybSk7CisKKyAgICAgICAgbV9hbGxQYXJlbnRoZXNlc0lu
Zm8uYXBwZW5kKHBhcmVudGhlc2VzRGlzanVuY3Rpb24pOworICAgICAgICBtX2JvZHlEaXNqdW5j
dGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJw
YXR0ZXJuLCBzdWJwYXR0ZXJuSWQsIHBhcmVudGhlc2VzRGlzanVuY3Rpb24sIGludmVydE9yQ2Fw
dHVyZSwgaW5wdXRQb3NpdGlvbikpOworCisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
c1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0g
cXVhbnRpdHlUeXBlOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJt
XS5mcmFtZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKKyAgICB9CisKKyAgICB2b2lkIGF0b21Q
YXJlbnRoZXNlc09uY2VFbmQoaW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRp
b24sIHVuc2lnbmVkIHF1YW50aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkK
ICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGJlZ2luVGVybSA9IHBvcFBhcmVudGhlc2VzU3RhY2so
KTsKICAgICAgICAgY2xvc2VBbHRlcm5hdGl2ZShiZWdpblRlcm0gKyAxKTsKICAgICAgICAgdW5z
aWduZWQgZW5kVGVybSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCk7CiAKLSAgICAg
ICAgYm9vbCBpc0Fzc2VydGlvbiA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1d
LnR5cGUgPT0gQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVnaW47CisgICAg
ICAgIEFTU0VSVChtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS50eXBlID09IEJ5
dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUJlZ2luKTsKKwogICAgICAgICBi
b29sIGludmVydE9yQ2FwdHVyZSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1d
LmludmVydE9yQ2FwdHVyZTsKICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5zdWJwYXR0ZXJuSWQ7CiAKLSAgICAg
ICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShpc0Fzc2VydGlvbiA/
IEJ5dGVUZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbkVuZCA6IEJ5dGVUZXJtOjpUeXBl
UGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUVuZCwgc3VicGF0dGVybklkLCBpbnZlcnRPckNhcHR1
cmUsIGlucHV0UG9zaXRpb24pKTsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFw
cGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VFbmQs
IHN1YnBhdHRlcm5JZCwgaW52ZXJ0T3JDYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CiAgICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucGFyZW50aGVzZXNXaWR0
aCA9IGVuZFRlcm0gLSBiZWdpblRlcm07CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
c1tlbmRUZXJtXS5hdG9tLnBhcmVudGhlc2VzV2lkdGggPSBlbmRUZXJtIC0gYmVnaW5UZXJtOwog
ICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uZnJhbWVMb2NhdGlvbiA9
IGZyYW1lTG9jYXRpb247CiAKLSAgICAgICAgaWYgKGRvSW5saW5lKSB7Ci0gICAgICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnF1YW50aXR5Q291bnQgPSBx
dWFudGl0eUNvdW50OwotICAgICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2lu
VGVybV0uYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7Ci0gICAgICAgICAgICBtX2Jv
ZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRp
dHlDb3VudDsKLSAgICAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5h
dG9tLnF1YW50aXR5VHlwZSA9IHF1YW50aXR5VHlwZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEJ5dGVUZXJtJiBwYXJlbnRoZXNlc0JlZ2luID0gbV9ib2R5RGlzanVuY3Rpb24tPnRl
cm1zW2JlZ2luVGVybV07Ci0gICAgICAgICAgICBBU1NFUlQocGFyZW50aGVzZXNCZWdpbi50eXBl
ID09IEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUJlZ2luKTsKLQotICAg
ICAgICAgICAgYm9vbCBpbnZlcnRPckNhcHR1cmUgPSBwYXJlbnRoZXNlc0JlZ2luLmludmVydE9y
Q2FwdHVyZTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHBhcmVudGhlc2Vz
QmVnaW4uYXRvbS5zdWJwYXR0ZXJuSWQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
c1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CisgICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0g
cXVhbnRpdHlUeXBlOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0u
YXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudDsKKyAgICAgICAgbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwor
ICAgIH0KIAotICAgICAgICAgICAgdW5zaWduZWQgbnVtU3VicGF0dGVybnMgPSBsYXN0U3VicGF0
dGVybklkIC0gc3VicGF0dGVybklkICsgMTsKLSAgICAgICAgICAgIEJ5dGVEaXNqdW5jdGlvbiog
cGFyZW50aGVzZXNEaXNqdW5jdGlvbiA9IG5ldyBCeXRlRGlzanVuY3Rpb24obnVtU3VicGF0dGVy
bnMsIGNhbGxGcmFtZVNpemUpOworICAgIHZvaWQgYXRvbVBhcmVudGhlc2VzVGVybWluYWxFbmQo
aW50IGlucHV0UG9zaXRpb24sIHVuc2lnbmVkIGZyYW1lTG9jYXRpb24sIHVuc2lnbmVkIHF1YW50
aXR5Q291bnQsIFF1YW50aWZpZXJUeXBlIHF1YW50aXR5VHlwZSkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIGJlZ2luVGVybSA9IHBvcFBhcmVudGhlc2VzU3RhY2soKTsKKyAgICAgICAgY2xvc2VB
bHRlcm5hdGl2ZShiZWdpblRlcm0gKyAxKTsKKyAgICAgICAgdW5zaWduZWQgZW5kVGVybSA9IG1f
Ym9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCk7CiAKLSAgICAgICAgICAgIHBhcmVudGhlc2Vz
RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybTo6U3VicGF0dGVybkJlZ2luKCkpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0ZXJtSW5QYXJlbnRoZXNlcyA9IGJlZ2luVGVybSAr
IDE7IHRlcm1JblBhcmVudGhlc2VzIDwgZW5kVGVybTsgKyt0ZXJtSW5QYXJlbnRoZXNlcykKLSAg
ICAgICAgICAgICAgICBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQobV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zW3Rlcm1JblBhcmVudGhlc2VzXSk7Ci0gICAgICAgICAgICBwYXJl
bnRoZXNlc0Rpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm06OlN1YnBhdHRlcm5FbmQo
KSk7CisgICAgICAgIEFTU0VSVChtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS50
eXBlID09IEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxCZWdpbik7
CiAKLSAgICAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaHJpbmsoYmVnaW5UZXJt
KTsKKyAgICAgICAgYm9vbCBpbnZlcnRPckNhcHR1cmUgPSBtX2JvZHlEaXNqdW5jdGlvbi0+dGVy
bXNbYmVnaW5UZXJtXS5pbnZlcnRPckNhcHR1cmU7CisgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRl
cm5JZCA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20uc3VicGF0dGVy
bklkOwogCi0gICAgICAgICAgICBtX2FsbFBhcmVudGhlc2VzSW5mby5hcHBlbmQocGFyZW50aGVz
ZXNEaXNqdW5jdGlvbik7Ci0gICAgICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBw
ZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuLCBzdWJwYXR0
ZXJuSWQsIHBhcmVudGhlc2VzRGlzanVuY3Rpb24sIGludmVydE9yQ2FwdHVyZSwgaW5wdXRQb3Np
dGlvbikpOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJt
KEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxFbmQsIHN1YnBhdHRl
cm5JZCwgaW52ZXJ0T3JDYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAgIG1fYm9keURp
c2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucGFyZW50aGVzZXNXaWR0aCA9IGVuZFRl
cm0gLSBiZWdpblRlcm07CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJt
XS5hdG9tLnBhcmVudGhlc2VzV2lkdGggPSBlbmRUZXJtIC0gYmVnaW5UZXJtOworICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9j
YXRpb247CiAKLSAgICAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1d
LmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7Ci0gICAgICAgICAgICBtX2JvZHlE
aXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnF1YW50aXR5VHlwZSA9IHF1YW50aXR5
VHlwZTsKLSAgICAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmZy
YW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwotICAgICAgICB9CisgICAgICAgIG1fYm9keURp
c2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5
Q291bnQ7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20u
cXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+
dGVybXNbZW5kVGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudDsKKyAgICAg
ICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0g
cXVhbnRpdHlUeXBlOwogICAgIH0KIAogICAgIHZvaWQgcmVnZXhCZWdpbih1bnNpZ25lZCBudW1T
dWJwYXR0ZXJucywgdW5zaWduZWQgY2FsbEZyYW1lU2l6ZSwgYm9vbCBvbmNlVGhyb3VnaCkKQEAg
LTE2ODAsMjQgKzE4MzUsMjcgQEAgcHVibGljOgogCiAgICAgICAgICAgICAgICAgY2FzZSBQYXR0
ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybjogewogICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQgPSAwOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoKHRlcm0ucXVhbnRpdHlDb3VudCA9PSAxKSAmJiAhdGVybS5wYXJlbnRo
ZXNlcy5pc0NvcHkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5
VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRDb3VudCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dGVybS5xdWFudGl0eUNvdW50ID09IDEgJiYgIXRlcm0ucGFyZW50aGVzZXMuaXNDb3B5KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24g
PSB0ZXJtLmZyYW1lTG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgUXVh
bnRpZmllckZpeGVkQ291bnQgd2UgcHJlLWNoZWNrIHRoZSBtaW5pbXVtIHNpemU7IGZvciBncmVl
ZHkvbm9uLWdyZWVkeSB3ZSByZXNlcnZlIGEgc2xvdCBpbiB0aGUgZnJhbWUuCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291
bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tl
ZENvdW50ID0gdGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9taW5pbXVtU2l6ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0
ID0gdGVybS5pbnB1dFBvc2l0aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkJlZ2luKHRl
cm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLmludmVydE9yQ2FwdHVyZSwgZGVsZWdh
dGVFbmRJbnB1dE9mZnNldCAtIGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCwgdGVybS5m
cmFtZUxvY2F0aW9uLCB0ZXJtLmZyYW1lTG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVtaXREaXNqdW5jdGlvbih0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBjdXJy
ZW50Q291bnRBbHJlYWR5Q2hlY2tlZCwgdGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9t
aW5pbXVtU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvbVBhcmVudGhlc2Vz
RW5kKHRydWUsIHRlcm0ucGFyZW50aGVzZXMubGFzdFN1YnBhdHRlcm5JZCwgZGVsZWdhdGVFbmRJ
bnB1dE9mZnNldCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJtLnF1YW50aXR5Q291bnQsIHRlcm0u
cXVhbnRpdHlUeXBlLCB0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLT5tX2NhbGxGcmFtZVNp
emUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0ID0gdGVybS5pbnB1dFBv
c2l0aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkJlZ2luKHRlcm0ucGFyZW50aGVzZXMu
c3VicGF0dGVybklkLCB0ZXJtLmludmVydE9yQ2FwdHVyZSwgZGVsZWdhdGVFbmRJbnB1dE9mZnNl
dCAtIGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0
ZXJtLmZyYW1lTG9jYXRpb24gKyBSZWdleFN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50
aGVzZXNPbmNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RGlzanVuY3Rpb24o
dGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQs
IDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc0VuZCh0cnVl
LCB0ZXJtLnBhcmVudGhlc2VzLmxhc3RTdWJwYXR0ZXJuSWQsIGRlbGVnYXRlRW5kSW5wdXRPZmZz
ZXQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgdGVybS5xdWFudGl0eUNvdW50LCB0ZXJtLnF1YW50aXR5
VHlwZSwgdGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9jYWxsRnJhbWVTaXplKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24gKz0gUmVn
ZXhTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgPSB0ZXJtLmlucHV0
UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF0b21QYXJlbnRoZXNlc09uY2VCZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRl
cm5JZCwgdGVybS5pbnZlcnRPckNhcHR1cmUsIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgLSBkaXNq
dW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgYWx0ZXJuYXRp
dmVGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtaXREaXNqdW5jdGlv
bih0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tl
ZCwgZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tlZENvdW50KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF0b21QYXJlbnRoZXNlc09uY2VFbmQoZGVsZWdhdGVFbmRJbnB1dE9mZnNldCwgdGVybS5m
cmFtZUxvY2F0aW9uLCB0ZXJtLnF1YW50aXR5Q291bnQsIHRlcm0ucXVhbnRpdHlUeXBlKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnBhcmVudGhlc2VzLmlzVGVybWluYWwp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZz
ZXQgPSB0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc1Rlcm1pbmFsQmVnaW4odGVybS5w
YXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uaW52ZXJ0T3JDYXB0dXJlLCBkZWxlZ2F0ZUVu
ZElucHV0T2Zmc2V0IC0gZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tlZENvdW50LCB0ZXJtLmZyYW1l
TG9jYXRpb24sIHRlcm0uZnJhbWVMb2NhdGlvbiArIFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFj
a0luZm9QYXJlbnRoZXNlc09uY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgZW1pdERpc2p1
bmN0aW9uKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDb3VudEFscmVhZHlD
aGVja2VkLCBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYXRvbVBhcmVudGhlc2VzVGVybWluYWxFbmQoZGVsZWdhdGVFbmRJbnB1dE9mZnNl
dCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJtLnF1YW50aXR5Q291bnQsIHRlcm0ucXVhbnRpdHlU
eXBlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgPSB0ZXJtLmlucHV0UG9zaXRpb24g
LSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZDsKICAgICAgICAgICAgICAgICAgICAgICAgIGF0
b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5CZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5J
ZCwgdGVybS5pbnZlcnRPckNhcHR1cmUsIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgLSBkaXNqdW5j
dGlvbkFscmVhZHlDaGVja2VkQ291bnQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgMCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBlbWl0RGlzanVuY3Rpb24odGVybS5wYXJlbnRoZXNlcy5kaXNqdW5j
dGlvbiwgY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQsIDApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYXRvbVBhcmVudGhlc2VzRW5kKGZhbHNlLCB0ZXJtLnBhcmVudGhlc2VzLmxhc3RTdWJw
YXR0ZXJuSWQsIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgdGVy
bS5xdWFudGl0eUNvdW50LCB0ZXJtLnF1YW50aXR5VHlwZSwgdGVybS5wYXJlbnRoZXNlcy5kaXNq
dW5jdGlvbi0+bV9jYWxsRnJhbWVTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0b21Q
YXJlbnRoZXNlc1N1YnBhdHRlcm5FbmQodGVybS5wYXJlbnRoZXNlcy5sYXN0U3VicGF0dGVybklk
LCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0LCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0ucXVhbnRp
dHlDb3VudCwgdGVybS5xdWFudGl0eVR5cGUsIHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24t
Pm1fY2FsbEZyYW1lU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTcxMCw3ICsxODY4LDcgQEAgcHVi
bGljOgogCiAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVn
aW4odGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uaW52ZXJ0T3JDYXB0dXJlLCB0
ZXJtLmZyYW1lTG9jYXRpb24sIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbik7CiAgICAgICAgICAg
ICAgICAgICAgIGVtaXREaXNqdW5jdGlvbih0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBj
dXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZCwgcG9zaXRpdmVJbnB1dE9mZnNldCwgdHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc0VuZCh0cnVlLCB0ZXJtLnBhcmVudGhl
c2VzLmxhc3RTdWJwYXR0ZXJuSWQsIDAsIHRlcm0uZnJhbWVMb2NhdGlvbiwgdGVybS5xdWFudGl0
eUNvdW50LCB0ZXJtLnF1YW50aXR5VHlwZSk7CisgICAgICAgICAgICAgICAgICAgIGF0b21QYXJl
bnRoZXRpY2FsQXNzZXJ0aW9uRW5kKDAsIHRlcm0uZnJhbWVMb2NhdGlvbiwgdGVybS5xdWFudGl0
eUNvdW50LCB0ZXJtLnF1YW50aXR5VHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS95YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS95
YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gNzI3NzYpCisrKyBKYXZhU2NyaXB0Q29y
ZS95YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsOCBA
QCBzdHJ1Y3QgQnl0ZVRlcm0gewogICAgICAgICBUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuLAog
ICAgICAgICBUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUJlZ2luLAogICAgICAgICBUeXBl
UGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUVuZCwKKyAgICAgICAgVHlwZVBhcmVudGhlc2VzU3Vi
cGF0dGVyblRlcm1pbmFsQmVnaW4sCisgICAgICAgIFR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5U
ZXJtaW5hbEVuZCwKICAgICAgICAgVHlwZVBhcmVudGhldGljYWxBc3NlcnRpb25CZWdpbiwKICAg
ICAgICAgVHlwZVBhcmVudGhldGljYWxBc3NlcnRpb25FbmQsCiAgICAgICAgIFR5cGVDaGVja0lu
cHV0LApJbmRleDogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAJKHJldmlzaW9uIDcyNzc2KQorKysg
SmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMCwx
MiArOTEwLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAg
ICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uID0gdGVybS5wYXJlbnRoZXNlcy5k
aXNqdW5jdGlvbjsKICAgICAgICAgQVNTRVJUKHRlcm0ucXVhbnRpdHlDb3VudCA9PSAxKTsKIAot
ICAgICAgICBpZiAodGVybS5wYXJlbnRoZXNlcy5pc0NvcHkpIHsKLSAgICAgICAgICAgIG1fc2hv
dWxkRmFsbEJhY2sgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdW5zaWduZWQgcHJlQ2hlY2tlZENvdW50ID0gKCh0ZXJtLnF1YW50aXR5Q291bnQgPT0g
MSkgJiYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50KSkgPyBkaXNq
dW5jdGlvbi0+bV9taW5pbXVtU2l6ZSA6IDA7CisgICAgICAgIHVuc2lnbmVkIHByZUNoZWNrZWRD
b3VudCA9ICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyRml4ZWRDb3VudCkgPyBkaXNq
dW5jdGlvbi0+bV9taW5pbXVtU2l6ZSA6IDA7CiAKICAgICAgICAgdW5zaWduZWQgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uID0gdGVybS5mcmFtZUxvY2F0aW9uOwogICAgICAgICB1bnNpZ25lZCBh
bHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24gPSBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb247CkBAIC05
MzQsMTIgKzkyOSwxMiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
CiAgICAgICAgICAgICBKdW1wIG5vbkdyZWVkeVNraXBQYXJlbnRoZXNlczsKICAgICAgICAgICAg
IExhYmVsIG5vbkdyZWVkeVRyeVBhcmVudGhlc2VzOwogICAgICAgICAgICAgaWYgKHRlcm0ucXVh
bnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkpCi0gICAgICAgICAgICAgICAgc3RvcmVUb0Zy
YW1lKEltbTMyKDEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOworICAgICAgICAgICAgICAg
IHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJOb25HcmVlZHkpIHsK
LSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoSW1tMzIoMCksIHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbik7CisgICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKEltbTMyKC0xKSwgcGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAgICAgICBub25HcmVlZHlTa2lwUGFyZW50
aGVzZXMgPSBqdW1wKCk7CiAgICAgICAgICAgICAgICAgbm9uR3JlZWR5VHJ5UGFyZW50aGVzZXMg
PSBsYWJlbCgpOwotICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShJbW0zMigxKSwgcGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoaW5kZXgs
IHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IC8vIHN0b3JlIHRoZSBtYXRjaCBzdGFydCBpbmRleApAQCAtOTU3LDI5ICs5NTIsMjEgQEAgY2xh
c3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgVGVybUdl
bmVyYXRpb25TdGF0ZSBwYXJlbnRoZXNlc1N0YXRlKGRpc2p1bmN0aW9uLCBzdGF0ZS5jaGVja2Vk
VG90YWwpOwogICAgICAgICAgICAgZ2VuZXJhdGVQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKHN0YXRl
LnRlcm0oKSwgcGFyZW50aGVzZXNTdGF0ZSwgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKIAot
ICAgICAgICAgICAgLy8gc3RvcmUgdGhlIG1hdGNoIGVuZCBpbmRleAotICAgICAgICAgICAgaWYg
KHRlcm0uaW52ZXJ0T3JDYXB0dXJlKSB7Ci0gICAgICAgICAgICAgICAgaW50IGlucHV0T2Zmc2V0
ID0gc3RhdGUuaW5wdXRPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5wdXRPZmZzZXQp
IHsKLSAgICAgICAgICAgICAgICAgICAgbW92ZShpbmRleCwgaW5kZXhUZW1wb3JhcnkpOwotICAg
ICAgICAgICAgICAgICAgICBhZGQzMihJbW0zMihzdGF0ZS5pbnB1dE9mZnNldCgpKSwgaW5kZXhU
ZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4VGVtcG9yYXJ5LCBB
ZGRyZXNzKG91dHB1dCwgKCh0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCA8PCAxKSArIDEp
ICogc2l6ZW9mKGludCkpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgc3RvcmUzMihpbmRleCwgQWRkcmVzcyhvdXRwdXQsICgodGVybS5wYXJlbnRoZXNlcy5z
dWJwYXR0ZXJuSWQgPDwgMSkgKyAxKSAqIHNpemVvZihpbnQpKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CisgICAgICAgICAgICBKdW1wIHN1Y2Nl
c3MgPSAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpID8KKyAgICAg
ICAgICAgICAgICBqdW1wKCkgOgorICAgICAgICAgICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBp
bmRleCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgKHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiAqIHNpemVvZih2b2lkKikpKSk7CiAKICAgICAgICAgICAgIC8vIEEgZmFpbHVyZSBBRlRF
UiB0aGUgcGFyZW5zIGp1bXBzIGhlcmUKICAgICAgICAgICAgIExhYmVsIGJhY2t0cmFja0Zyb21B
ZnRlclBhcmVucyh0aGlzKTsKIAogICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09
IFF1YW50aWZpZXJHcmVlZHkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHplcm8g
d2UgaGF2ZSBub3cgdGVzdGVkIHdpdGggYm90aCB3aXRoIGFuZCB3aXRob3V0IHRoZSBwYXJlbnMu
CisgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyAtMSB3ZSBoYXZlIG5vdyB0ZXN0ZWQgd2l0
aCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlIHBhcmVucy4KICAgICAgICAgICAgICAgICBsb2Fk
RnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXhUZW1wb3JhcnkpOwotICAg
ICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhicmFuY2hUZXN0MzIoWmVybywgaW5k
ZXhUZW1wb3JhcnkpLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJh
Y2soYnJhbmNoMzIoRXF1YWwsIGluZGV4VGVtcG9yYXJ5LCBJbW0zMigtMSkpLCB0aGlzKTsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdy
ZWVkeSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgemVybyB3ZSBoYXZlIG5vdyB0
ZXN0ZWQgd2l0aCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlIHBhcmVucy4KKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIC0xIHdlIGhhdmUgbm93IHRlc3RlZCB3aXRob3V0IHRoZSBwYXJl
bnMsIG5vdyB0ZXN0IHdpdGguCiAgICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRo
ZXNlc0ZyYW1lTG9jYXRpb24sIGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICAgICBicmFu
Y2hUZXN0MzIoWmVybywgaW5kZXhUZW1wb3JhcnkpLmxpbmtUbyhub25HcmVlZHlUcnlQYXJlbnRo
ZXNlcywgdGhpcyk7CisgICAgICAgICAgICAgICAgYnJhbmNoMzIoRXF1YWwsIGluZGV4VGVtcG9y
YXJ5LCBJbW0zMigtMSkpLmxpbmtUbyhub25HcmVlZHlUcnlQYXJlbnRoZXNlcywgdGhpcyk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUucGxhbnRKdW1wVG9C
YWNrdHJhY2tJZkV4aXN0cyh0aGlzKTsKQEAgLTk4OSw3ICs5NzYsNyBAQCBjbGFzcyBSZWdleEdl
bmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICAgICAgc3RvcmUzMihJbW0z
MigtMSksIEFkZHJlc3Mob3V0cHV0LCAodGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQgPDwg
MSkgKiBzaXplb2YoaW50KSkpOwogCiAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUg
PT0gUXVhbnRpZmllckdyZWVkeSkKLSAgICAgICAgICAgICAgICBzdG9yZVRvRnJhbWUoSW1tMzIo
MCksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgc3RvcmVUb0Zy
YW1lKEltbTMyKC0xKSwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsK
IApAQCAtOTk3LDYgKzk4NCwxNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlCiAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5v
bkdyZWVkeSkKICAgICAgICAgICAgICAgICBub25HcmVlZHlTa2lwUGFyZW50aGVzZXMubGluayh0
aGlzKTsKICAgICAgICAgICAgIHN1Y2Nlc3MubGluayh0aGlzKTsKKworICAgICAgICAgICAgLy8g
c3RvcmUgdGhlIG1hdGNoIGVuZCBpbmRleAorICAgICAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JD
YXB0dXJlKSB7CisgICAgICAgICAgICAgICAgaW50IGlucHV0T2Zmc2V0ID0gc3RhdGUuaW5wdXRP
ZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXRPZmZzZXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbW92ZShpbmRleCwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAgICAgICAg
ICBhZGQzMihJbW0zMihzdGF0ZS5pbnB1dE9mZnNldCgpKSwgaW5kZXhUZW1wb3JhcnkpOworICAg
ICAgICAgICAgICAgICAgICBzdG9yZTMyKGluZGV4VGVtcG9yYXJ5LCBBZGRyZXNzKG91dHB1dCwg
KCh0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCA8PCAxKSArIDEpICogc2l6ZW9mKGludCkp
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3RvcmUzMihp
bmRleCwgQWRkcmVzcyhvdXRwdXQsICgodGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQgPDwg
MSkgKyAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTEwMDcsMjUgKzEwMDUsNiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlCiAgICAgICAgIEFTU0VSVChwYXJlbnRoZXNlc1Rlcm0udHlwZSA9PSBQYXR0ZXJu
VGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybik7CiAgICAgICAgIEFTU0VSVChwYXJlbnRo
ZXNlc1Rlcm0ucXVhbnRpdHlDb3VudCAhPSAxKTsgLy8gSGFuZGxlZCBieSBnZW5lcmF0ZVBhcmVu
dGhlc2VzU2luZ2xlLgogCi0gICAgICAgIC8vIENhcHR1cmluZyBub3QgeWV0IGltcGxlbWVudGVk
IQotICAgICAgICBpZiAocGFyZW50aGVzZXNUZXJtLmludmVydE9yQ2FwdHVyZSkgewotICAgICAg
ICAgICAgbV9zaG91bGRGYWxsQmFjayA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBRdWFudGlmaWNhdGlvbiBsaW1pdCBub3QgeWV0IGltcGxlbWVu
dGVkIQotICAgICAgICBpZiAocGFyZW50aGVzZXNUZXJtLnF1YW50aXR5Q291bnQgIT0gMHhmZmZm
ZmZmZikgewotICAgICAgICAgICAgbV9zaG91bGRGYWxsQmFjayA9IHRydWU7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBOZWVkIHRvIHJlc2V0IG5lc3RlZCBz
dWJwYXR0ZXJucyBiZXR3ZWVuIGl0ZXJhdGlvbnMuLi4KLSAgICAgICAgLy8gZm9yIHRoZSBtaW51
dGUgdGhpcyBjcnVkZSBjaGVjayByZWplY3RzIGFsbCBwYXR0ZXJucyB3aXRoIGFueSBzdWJwYXR0
ZXJucyEKLSAgICAgICAgaWYgKG1fcGF0dGVybi5tX251bVN1YnBhdHRlcm5zKSB7Ci0gICAgICAg
ICAgICBtX3Nob3VsZEZhbGxCYWNrID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCiAgICAgICAgIFRlcm1HZW5lcmF0aW9uU3RhdGUgcGFyZW50aGVzZXNTdGF0ZShkaXNq
dW5jdGlvbiwgc3RhdGUuY2hlY2tlZFRvdGFsKTsKIAogICAgICAgICBMYWJlbCBtYXRjaEFnYWlu
KHRoaXMpOwpAQCAtMTA0Nyw3ICsxMDI2LDExIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgICAgICBnZW5lcmF0ZVRlcm0ocGFyZW50aGVzZXNT
dGF0ZSk7CiAKICAgICAgICAgICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSBtYXRjaGVkISBJZiB0
aGUgaW5kZXggYWR2YW5jZWQgdGhlbiB0cnkgdG8gbWF0Y2ggbW9yZSBzaW5jZSBsaW1pdCBpc24n
dCBzdXBwb3J0ZWQgeWV0LgotICAgICAgICAgICAgYnJhbmNoMzIoR3JlYXRlclRoYW4sIGluZGV4
LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50aGVzZXNUZXJtLmZyYW1lTG9j
YXRpb24gKiBzaXplb2Yodm9pZCopKSksIG1hdGNoQWdhaW4pOworICAgICAgICAgICAgYnJhbmNo
MzIoTm90RXF1YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAocGFyZW50
aGVzZXNUZXJtLmZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSksIG1hdGNoQWdhaW4pOwor
CisgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSB3ZSBtYXRjaGVkLCBidXQgd2UgbWF0Y2hl
ZCAiIiAtIGNhbm5vdCBhY2NlcHQgdGhpcyBhbHRlcm5hdGl2ZSBhcyBpcywgc28gZWl0aGVyIGJh
Y2t0cmFjaywKKyAgICAgICAgICAgIC8vIG9yIGZhbGwgdGhyb3VnaCB0byB0cnkgdGhlIG5leHQg
YWx0ZXJuYXRpdmUgaWYgbm8gYmFja3RyYWNrIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIHBh
cmVudGhlc2VzU3RhdGUucGxhbnRKdW1wVG9CYWNrdHJhY2tJZkV4aXN0cyh0aGlzKTsKIAogICAg
ICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMp
OwogICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgdGhlIGFsdGVybmF0aXZlIGZhaWxzIHRv
IG1hdGNoIC0gZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbiwgb3Igb3V0IG9mIHRo
ZSBsb29wLgpAQCAtMTE4MCwxNyArMTE2MywxMiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFBhdHRl
cm5UZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuOgotICAgICAgICAgICAgaWYgKHRlcm0u
cXVhbnRpdHlDb3VudCA9PSAxKSB7CisgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eUNvdW50
ID09IDEgJiYgIXRlcm0ucGFyZW50aGVzZXMuaXNDb3B5KQogICAgICAgICAgICAgICAgIGdlbmVy
YXRlUGFyZW50aGVzZXNTaW5nbGUoc3RhdGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5pc0xhc3RUZXJtKCkgJiYgc3RhdGUuaXNNYWluRGlz
anVuY3Rpb24oKSkgeyAvLyBJcyB0aGlzIGlzIHRoZSBsYXN0IHRlcm0gb2YgdGhlIG1haW4gZGlz
anVuY3Rpb24/Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBoYXMgYSBncmVlZHkgcXVhbnRp
ZmllciwgdGhlbiBpdCB3aWxsIG5ldmVyIG5lZWQgdG8gYmFja3RyYWNrIQotICAgICAgICAgICAg
ICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyR3JlZWR5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGdlbmVyYXRlUGFyZW50aGVzZXNHcmVlZHlOb0JhY2t0cmFjayhzdGF0ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fc2hvdWxkRmFsbEJhY2sgPSB0cnVlOworICAgICAgICAgICAg
ZWxzZSBpZiAodGVybS5wYXJlbnRoZXNlcy5pc1Rlcm1pbmFsKQorICAgICAgICAgICAgICAgIGdl
bmVyYXRlUGFyZW50aGVzZXNHcmVlZHlOb0JhY2t0cmFjayhzdGF0ZSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9zaG91bGRGYWxsQmFjayA9IHRydWU7CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFz
c2VydGlvbjoKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaAkocmV2aXNpb24gNzI3
NzYpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgWWFyciB7CiAjZGVm
aW5lIFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9BbHRlcm5hdGl2ZSAxIC8vIE9uZSBw
ZXIgYWx0ZXJuYXRpdmUuCiAjZGVmaW5lIFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9Q
YXJlbnRoZXRpY2FsQXNzZXJ0aW9uIDEKICNkZWZpbmUgUmVnZXhTdGFja1NwYWNlRm9yQmFja1Ry
YWNrSW5mb1BhcmVudGhlc2VzT25jZSAxIC8vIE9ubHkgZm9yICFmaXhlZCBxdWFudGlmaWVycy4K
KyNkZWZpbmUgUmVnZXhTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzVGVybWlu
YWwgMQogI2RlZmluZSBSZWdleFN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50aGVzZXMg
NAogCiBzdHJ1Y3QgUGF0dGVybkRpc2p1bmN0aW9uOwpAQCAtMTEyLDYgKzExMyw3IEBAIHN0cnVj
dCBQYXR0ZXJuVGVybSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQ7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBsYXN0U3VicGF0dGVybklkOwogICAgICAgICAgICAgYm9vbCBpc0Nv
cHk7CisgICAgICAgICAgICBib29sIGlzVGVybWluYWw7CiAgICAgICAgIH0gcGFyZW50aGVzZXM7
CiAgICAgfTsKICAgICBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGU7CkBAIC0xNDMsNiArMTQ1
LDcgQEAgc3RydWN0IFBhdHRlcm5UZXJtIHsKICAgICAgICAgcGFyZW50aGVzZXMuZGlzanVuY3Rp
b24gPSBkaXNqdW5jdGlvbjsKICAgICAgICAgcGFyZW50aGVzZXMuc3VicGF0dGVybklkID0gc3Vi
cGF0dGVybklkOwogICAgICAgICBwYXJlbnRoZXNlcy5pc0NvcHkgPSBmYWxzZTsKKyAgICAgICAg
cGFyZW50aGVzZXMuaXNUZXJtaW5hbCA9IGZhbHNlOwogICAgICAgICBxdWFudGl0eVR5cGUgPSBR
dWFudGlmaWVyRml4ZWRDb3VudDsKICAgICAgICAgcXVhbnRpdHlDb3VudCA9IDE7CiAgICAgfQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9lY21hLXJlZ2V4LWV4YW1wbGVzLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L2VjbWEtcmVnZXgtZXhh
bXBsZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9yZWdl
eC9lY21hLXJlZ2V4LWV4YW1wbGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMSBAQAorVGhpcyBwYWdlIHRlc3RzIHRoZSByZWdleCBleGFtcGxlcyBmcm9tIHRoZSBFQ01B
LTI2MiBzcGVjaWZpY2F0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyByZWdleDAxLmV4ZWMoImFiYyIpIGlzIFsiYSJdCitQQVNTIHJlZ2V4MDIuZXhlYygiYWJjIikg
aXMgWyJhYmMiLCAiYSIsICJhIiwgdW5kZWZpbmVkLCAiYmMiLCB1bmRlZmluZWQsICJiYyJdCitQ
QVNTIHJlZ2V4MDMuZXhlYygiYWJjZGVmZ2hpIikgaXMgWyJhYmNkZSJdCitQQVNTIHJlZ2V4MDQu
ZXhlYygiYWJjZGVmZ2hpIikgaXMgWyJhYmMiXQorUEFTUyByZWdleDA1LmV4ZWMoImFhYmFhYyIp
IGlzIFsiYWFiYSIsICJiYSJdCitQQVNTICJhYWFhYWFhYWFhLGFhYWFhYWFhYWFhYWFhYSIucmVw
bGFjZShyZWdleDA2LCIkMSIpIGlzICJhYWFhYSIKK1BBU1MgcmVnZXgwNy5leGVjKCJ6YWFjYmJi
Y2FjIikgaXMgWyJ6YWFjYmJiY2FjIiwgInoiLCAiYWMiLCAiYSIsIHVuZGVmaW5lZCwgImMiXQor
UEFTUyByZWdleDA4LmV4ZWMoImIiKSBpcyBbIiIsIHVuZGVmaW5lZF0KK1BBU1MgcmVnZXgwOS5l
eGVjKCJiYWFhYWMiKSBpcyBbImIiLCAiIl0KK1BBU1MgcmVnZXgxMC5leGVjKCJiYWFhYmFjIikg
aXMgWyIiLCAiYWFhIl0KK1BBU1MgcmVnZXgxMS5leGVjKCJiYWFhYmFjIikgaXMgWyJhYmEiLCAi
YSJdCitQQVNTIHJlZ2V4MTIuZXhlYygiYmFhYWJhYWMiKSBpcyBbImJhYWFiYWFjIiwgImJhIiwg
dW5kZWZpbmVkLCAiYWJhYWMiXQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcmVnZXgvZWNtYS1yZWdleC1l
eGFtcGxlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvZWNtYS1y
ZWdleC1leGFtcGxlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9yZWdl
eC9lY21hLXJlZ2V4LWV4YW1wbGVzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZWNt
YS1yZWdleC1leGFtcGxlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3JlcGVhdC1tYXRjaC13YWxkZW1hci1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9yZXBlYXQtbWF0Y2gtd2FsZGVt
YXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9y
ZXBlYXQtbWF0Y2gtd2FsZGVtYXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMwIEBACitTb21lIHRlc3QgY2FzZXMgaWRlbnRpZmllZCBieSBXYWxkZW1hciBIb3J3YXQgaW4g
cmVzcG9uc2UgdG8gdGhpcyBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00ODEwMQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyAvKD86YSo/
KXsyLH0vLmV4ZWMoImFhIikgaXMgWyJhYSJdCitQQVNTIC8oPzphKj8pezIsfS8uZXhlYygiYSIp
IGlzIFsiYSJdCitQQVNTIC8oPzphKj8pezIsfS8uZXhlYygiIikgaXMgWyIiXQorUEFTUyAvKD86
YSo/KS8uZXhlYygiYWEiKSBpcyBbIiJdCitQQVNTIC8oPzphKj8pLy5leGVjKCJhIikgaXMgWyIi
XQorUEFTUyAvKD86YSo/KS8uZXhlYygiIikgaXMgWyIiXQorUEFTUyAvKD86YSo/KSg/OmEqPyko
PzphKj8pLy5leGVjKCJhYSIpIGlzIFsiIl0KK1BBU1MgLyg/OmEqPykoPzphKj8pKD86YSo/KS8u
ZXhlYygiYSIpIGlzIFsiIl0KK1BBU1MgLyg/OmEqPykoPzphKj8pKD86YSo/KS8uZXhlYygiIikg
aXMgWyIiXQorUEFTUyAvKD86YSo/KXsyfS8uZXhlYygiYWEiKSBpcyBbIiJdCitQQVNTIC8oPzph
Kj8pezJ9Ly5leGVjKCJhIikgaXMgWyIiXQorUEFTUyAvKD86YSo/KXsyfS8uZXhlYygiIikgaXMg
WyIiXQorUEFTUyAvKD86YSo/KXsyLDN9Ly5leGVjKCJhYSIpIGlzIFsiYSJdCitQQVNTIC8oPzph
Kj8pezIsM30vLmV4ZWMoImEiKSBpcyBbImEiXQorUEFTUyAvKD86YSo/KXsyLDN9Ly5leGVjKCIi
KSBpcyBbIiJdCitQQVNTIC8oPzphKj8pPy8uZXhlYygiYWEiKSBpcyBbImEiXQorUEFTUyAvKD86
YSo/KT8vLmV4ZWMoImEiKSBpcyBbImEiXQorUEFTUyAvKD86YSo/KT8vLmV4ZWMoIiIpIGlzIFsi
Il0KK1BBU1MgLyg/OmEqPykqLy5leGVjKCJhYSIpIGlzIFsiYWEiXQorUEFTUyAvKD86YSo/KSov
LmV4ZWMoImEiKSBpcyBbImEiXQorUEFTUyAvKD86YSo/KSovLmV4ZWMoIiIpIGlzIFsiIl0KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3JlcGVhdC1tYXRjaC13YWxkZW1hci5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvcmVwZWF0LW1hdGNoLXdhbGRlbWFyLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3JlcGVhdC1tYXRjaC13YWxk
ZW1hci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3JlcGVhdC1tYXRjaC13YWxkZW1h
ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3JlZ2V4L3NjcmlwdC10ZXN0cy9lY21hLXJlZ2V4LWV4YW1wbGVzLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvcmVnZXgvc2NyaXB0LXRlc3RzL2VjbWEtcmVnZXgtZXhhbXBsZXMu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3NjcmlwdC10ZXN0cy9l
Y21hLXJlZ2V4LWV4YW1wbGVzLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACitkZXNj
cmlwdGlvbigKKyJUaGlzIHBhZ2UgdGVzdHMgdGhlIHJlZ2V4IGV4YW1wbGVzIGZyb20gdGhlIEVD
TUEtMjYyIHNwZWNpZmljYXRpb24uIgorKTsKKwordmFyIHJlZ2V4MDEgPSAvYXxhYi87CitzaG91
bGRCZSgncmVnZXgwMS5leGVjKCJhYmMiKScsICdbImEiXScpOworCit2YXIgcmVnZXgwMiA9IC8o
KGEpfChhYikpKChjKXwoYmMpKS87CitzaG91bGRCZSgncmVnZXgwMi5leGVjKCJhYmMiKScsICdb
ImFiYyIsICJhIiwgImEiLCB1bmRlZmluZWQsICJiYyIsIHVuZGVmaW5lZCwgImJjIl0nKTsKKwor
dmFyIHJlZ2V4MDMgPSAvYVthLXpdezIsNH0vOworc2hvdWxkQmUoJ3JlZ2V4MDMuZXhlYygiYWJj
ZGVmZ2hpIiknLCAnWyJhYmNkZSJdJyk7CisKK3ZhciByZWdleDA0ID0gL2FbYS16XXsyLDR9Py87
CitzaG91bGRCZSgncmVnZXgwNC5leGVjKCJhYmNkZWZnaGkiKScsICdbImFiYyJdJyk7CisKK3Zh
ciByZWdleDA1ID0gLyhhYXxhYWJhYWN8YmF8YnxjKSovOworc2hvdWxkQmUoJ3JlZ2V4MDUuZXhl
YygiYWFiYWFjIiknLCAnWyJhYWJhIiwgImJhIl0nKTsKKwordmFyIHJlZ2V4MDYgPSAvXihhKylc
MSosXDErJC87CitzaG91bGRCZSgnImFhYWFhYWFhYWEsYWFhYWFhYWFhYWFhYWFhIi5yZXBsYWNl
KHJlZ2V4MDYsIiQxIiknLCAnImFhYWFhIicpOworCit2YXIgcmVnZXgwNyA9IC8oeikoKGErKT8o
YispPyhjKSkqLzsKK3Nob3VsZEJlKCdyZWdleDA3LmV4ZWMoInphYWNiYmJjYWMiKScsICdbInph
YWNiYmJjYWMiLCAieiIsICJhYyIsICJhIiwgdW5kZWZpbmVkLCAiYyJdJyk7CisKK3ZhciByZWdl
eDA4ID0gLyhhKikqLzsKK3Nob3VsZEJlKCdyZWdleDA4LmV4ZWMoImIiKScsICdbIiIsIHVuZGVm
aW5lZF0nKTsKKwordmFyIHJlZ2V4MDkgPSAvKGEqKWJcMSsvOworc2hvdWxkQmUoJ3JlZ2V4MDku
ZXhlYygiYmFhYWFjIiknLCAnWyJiIiwgIiJdJyk7CisKK3ZhciByZWdleDEwID0gLyg/PShhKykp
LzsKK3Nob3VsZEJlKCdyZWdleDEwLmV4ZWMoImJhYWFiYWMiKScsICdbIiIsICJhYWEiXScpOwor
Cit2YXIgcmVnZXgxMSA9IC8oPz0oYSspKWEqYlwxLzsKK3Nob3VsZEJlKCdyZWdleDExLmV4ZWMo
ImJhYWFiYWMiKScsICdbImFiYSIsICJhIl0nKTsKKwordmFyIHJlZ2V4MTIgPSAvKC4qPylhKD8h
KGErKWJcMmMpXDIoLiopLzsKK3Nob3VsZEJlKCdyZWdleDEyLmV4ZWMoImJhYWFiYWFjIiknLCAn
WyJiYWFhYmFhYyIsICJiYSIsIHVuZGVmaW5lZCwgImFiYWFjIl0nKTsKKwordmFyIHN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0
L3JlZ2V4L3NjcmlwdC10ZXN0cy9lY21hLXJlZ2V4LWV4YW1wbGVzLmpzCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcmVnZXgv
c2NyaXB0LXRlc3RzL3JlcGVhdC1tYXRjaC13YWxkZW1hci5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3JlZ2V4L3NjcmlwdC10ZXN0cy9yZXBlYXQtbWF0Y2gtd2FsZGVtYXIuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3NjcmlwdC10ZXN0cy9yZXBl
YXQtbWF0Y2gtd2FsZGVtYXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMgQEAKK2Rlc2Ny
aXB0aW9uKAorIlNvbWUgdGVzdCBjYXNlcyBpZGVudGlmaWVkIGJ5IFdhbGRlbWFyIEhvcndhdCBp
biByZXNwb25zZSB0byB0aGlzIGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ4MTAxIgorKTsKKworc2hvdWxkQmUoJy8oPzphKj8pezIsfS8uZXhlYygiYWEiKScs
ICdbImFhIl0nKTsKK3Nob3VsZEJlKCcvKD86YSo/KXsyLH0vLmV4ZWMoImEiKScsICdbImEiXScp
Oworc2hvdWxkQmUoJy8oPzphKj8pezIsfS8uZXhlYygiIiknLCAnWyIiXScpOworCitzaG91bGRC
ZSgnLyg/OmEqPykvLmV4ZWMoImFhIiknLCAnWyIiXScpOworc2hvdWxkQmUoJy8oPzphKj8pLy5l
eGVjKCJhIiknLCAnWyIiXScpOworc2hvdWxkQmUoJy8oPzphKj8pLy5leGVjKCIiKScsICdbIiJd
Jyk7CisKK3Nob3VsZEJlKCcvKD86YSo/KSg/OmEqPykoPzphKj8pLy5leGVjKCJhYSIpJywgJ1si
Il0nKTsKK3Nob3VsZEJlKCcvKD86YSo/KSg/OmEqPykoPzphKj8pLy5leGVjKCJhIiknLCAnWyIi
XScpOworc2hvdWxkQmUoJy8oPzphKj8pKD86YSo/KSg/OmEqPykvLmV4ZWMoIiIpJywgJ1siIl0n
KTsKKworc2hvdWxkQmUoJy8oPzphKj8pezJ9Ly5leGVjKCJhYSIpJywgJ1siIl0nKTsKK3Nob3Vs
ZEJlKCcvKD86YSo/KXsyfS8uZXhlYygiYSIpJywgJ1siIl0nKTsKK3Nob3VsZEJlKCcvKD86YSo/
KXsyfS8uZXhlYygiIiknLCAnWyIiXScpOworCitzaG91bGRCZSgnLyg/OmEqPyl7MiwzfS8uZXhl
YygiYWEiKScsICdbImEiXScpOworc2hvdWxkQmUoJy8oPzphKj8pezIsM30vLmV4ZWMoImEiKScs
ICdbImEiXScpOworc2hvdWxkQmUoJy8oPzphKj8pezIsM30vLmV4ZWMoIiIpJywgJ1siIl0nKTsK
Kworc2hvdWxkQmUoJy8oPzphKj8pPy8uZXhlYygiYWEiKScsICdbImEiXScpOworc2hvdWxkQmUo
Jy8oPzphKj8pPy8uZXhlYygiYSIpJywgJ1siYSJdJyk7CitzaG91bGRCZSgnLyg/OmEqPyk/Ly5l
eGVjKCIiKScsICdbIiJdJyk7CisKK3Nob3VsZEJlKCcvKD86YSo/KSovLmV4ZWMoImFhIiknLCAn
WyJhYSJdJyk7CitzaG91bGRCZSgnLyg/OmEqPykqLy5leGVjKCJhIiknLCAnWyJhIl0nKTsKK3No
b3VsZEJlKCcvKD86YSo/KSovLmV4ZWMoIiIpJywgJ1siIl0nKTsKKwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L3Jl
Z2V4L3NjcmlwdC10ZXN0cy9yZXBlYXQtbWF0Y2gtd2FsZGVtYXIuanMKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgo=
</data>
<flag name="review"
          id="65678"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>