<?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>72939</bug_id>
          
          <creation_ts>2011-11-22 04:46:17 -0800</creation_ts>
          <short_desc>Asynchronous SpellChecker should consider multiple requests</short_desc>
          <delta_ts>2011-12-05 00:47:53 -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>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>73706</dependson>
          <blocked>71991</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shinya Kawanaka">shinyak</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>morrita</cc>
    
    <cc>shinyak</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>507521</commentid>
    <comment_count>0</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-11-22 04:46:17 -0800</bug_when>
    <thetext>The current implementation of asynchronous spellchecker ignores spellcheck requests if a request is being processed.

It might suffice if the last request of queue requests is processed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511587</commentid>
    <comment_count>1</comment_count>
      <attachid>117160</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-11-30 03:07:31 -0800</bug_when>
    <thetext>Created attachment 117160
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512348</commentid>
    <comment_count>2</comment_count>
      <attachid>117160</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-11-30 19:14:00 -0800</bug_when>
    <thetext>Comment on attachment 117160
Patch

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

Thanks for doing this. Let us iterate once.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Now Spellchecker saves a request when it is processing the previous spellcheck request.

nit: Spellchecker -&gt; SpellChecker.

&gt; Source/WebCore/editing/SpellChecker.cpp:48
&gt; +class SpellChecker::SpellCheckRequest {

Making a class like this looks a good idea. Thanks for doing this.

&gt; Source/WebCore/editing/SpellChecker.cpp:59
&gt; +    PassRefPtr&lt;Range&gt; range() const { return m_range; }

Use Range* because this API doesn&apos;t release the ownership of the range
(Making a PassRefPtr instance causes m_range to become null.)

&gt; Source/WebCore/editing/SpellChecker.cpp:89
&gt; +PassOwnPtr&lt;SpellChecker::SpellCheckRequest&gt; SpellChecker::initRequest(TextCheckingTypeMask mask, PassRefPtr&lt;Range&gt; range)

Now this becomes a factory method so calling &quot;createRequest&quot;  or something sounds more conventional.

&gt; Source/WebCore/editing/SpellChecker.cpp:130
&gt; +    return m_processingRequest.get() &amp;&amp; m_processingRequest-&gt;text().length() &amp;&amp; m_processingRequest-&gt;sequence() == sequence;

Is it possible to |!m_processingRequest-&gt;text().length()| ?

&gt; Source/WebCore/editing/SpellChecker.cpp:151
&gt; +    if (!request.get())

OwnPtr has operator! so you don&apos;t need get().

&gt; Source/WebCore/editing/SpellChecker.cpp:154
&gt; +    if (m_processingRequest.get())

You don&apos;t need get() here. It uses UnspecifiedBool pattern.

&gt; Source/WebCore/editing/SpellChecker.cpp:155
&gt; +        m_queuedRequest = request.release();

I guess you don&apos;t need release(). 
Also, let&apos;s return early here to eliminate following else clause.

&gt; Source/WebCore/editing/SpellChecker.cpp:158
&gt; +        m_processingRequest = request.release();

I guess you don&apos;t need release().

&gt; Source/WebCore/editing/SpellChecker.cpp:198
&gt; +    if (!isCheckable(m_processingRequest-&gt;range().get())) {

Is this can be false?
I guess original check had a intention to guard an accidental call of didCheck().
Now we checked it in isValid() so we no longer need this change.

&gt; Source/WebCore/editing/SpellChecker.h:67
&gt; +    int m_maxRequestedSequence;

Sounds like this is the upper bound of the sequence. How about &quot;last&quot; or something?

&gt; Source/WebCore/editing/SpellChecker.h:69
&gt; +    Timer&lt;SpellChecker&gt; m_timer;

Please give a name which explains the purpose of the timer.

&gt; LayoutTests/editing/spelling/spellcheck-queue.html:69
&gt; +        ok = ok &amp;&amp; layoutTestController.hasSpellingMarker(expectedMarked[i][0], expectedMarked[i][1]);

Let&apos;s use |window.internals|. I&apos;d love to kill hasSpellingMarker someday.

&gt; LayoutTests/editing/spelling/spellcheck-queue.html:87
&gt; +function verify(id, source, dest, expectedMarked)

Why do we need |id| ?

&gt; LayoutTests/editing/spelling/spellcheck-queue.html:112
&gt; +function pasteAndVerify(source, dests, expectedMarked)

It doesn&apos;t looks to do any verify. Is the name intentional?

&gt; LayoutTests/editing/spelling/spellcheck-queue.html:122
&gt; +done();

done() here looks storage because the test is just started, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512438</commentid>
    <comment_count>3</comment_count>
      <attachid>117330</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-11-30 21:35:39 -0800</bug_when>
    <thetext>Created attachment 117330
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512493</commentid>
    <comment_count>4</comment_count>
      <attachid>117330</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-11-30 22:41:43 -0800</bug_when>
    <thetext>Comment on attachment 117330
Patch

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

Let&apos;s have another round. I realized that the problem is more tricky than what I thought....

&gt; Source/WebCore/editing/SpellChecker.cpp:102
&gt; +    if (!m_queuedRequest.get())

Is this possible to true? If not, please add ASSERT().
It&apos;s ok to return here for safety, though.

&gt; Source/WebCore/editing/SpellChecker.cpp:105
&gt; +    m_processingRequest = m_queuedRequest.release();

I think it is possible to overwrite existing m_processingRequest here and it&apos;s node desirable.

&gt; Source/WebCore/editing/SpellChecker.cpp:112
&gt; +    if (!m_queuedRequest.get())

NIt: you don&apos;t need get() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512618</commentid>
    <comment_count>5</comment_count>
      <attachid>117377</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-12-01 01:30:39 -0800</bug_when>
    <thetext>Created attachment 117377
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512633</commentid>
    <comment_count>6</comment_count>
      <attachid>117377</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-12-01 01:52:17 -0800</bug_when>
    <thetext>Comment on attachment 117377
Patch

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

&gt; Source/WebCore/editing/SpellChecker.cpp:134
&gt;  {

It looks we now can merge doRequestCheckingFor and requestCheckingFor().

&gt; Source/WebCore/editing/SpellChecker.cpp:162
&gt; +        if (request-&gt;rootEditableElement() != (*it)-&gt;rootEditableElement())

Could you store |request-&gt;rootEditableElement()| to a local var to save extra computation?

&gt; Source/WebCore/editing/SpellChecker.cpp:165
&gt; +        fprintf(stderr, &quot;REMOVED!\n&quot;);

Please remove this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512642</commentid>
    <comment_count>7</comment_count>
      <attachid>117385</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-12-01 02:13:41 -0800</bug_when>
    <thetext>Created attachment 117385
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513366</commentid>
    <comment_count>8</comment_count>
      <attachid>117385</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-01 18:16:06 -0800</bug_when>
    <thetext>Comment on attachment 117385
Patch

Clearing flags on attachment: 117385

Committed r101731: &lt;http://trac.webkit.org/changeset/101731&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513367</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-01 18:16:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514809</commentid>
    <comment_count>10</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-12-04 18:21:30 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514810</commentid>
    <comment_count>11</comment_count>
      <attachid>117819</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-12-04 18:21:34 -0800</bug_when>
    <thetext>Created attachment 117819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514812</commentid>
    <comment_count>12</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-12-04 18:25:09 -0800</bug_when>
    <thetext>Note that original patch was rolled out. See Bug 73706.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514814</commentid>
    <comment_count>13</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-12-04 18:28:29 -0800</bug_when>
    <thetext>Sorry for Bug 73706.
The implementation of invokeRequest() was broken.
In chromium, requestCheckingOfString was synchronous. So didCheck was called before returning requestCheckingOfString.
I&apos;ve changed the code so that m_processingRequest is set before invoking requestCheckingOfString.

(In reply to comment #11)
&gt; Created an attachment (id=117819) [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514963</commentid>
    <comment_count>14</comment_count>
      <attachid>117819</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-05 00:47:48 -0800</bug_when>
    <thetext>Comment on attachment 117819
Patch

Clearing flags on attachment: 117819

Committed r101978: &lt;http://trac.webkit.org/changeset/101978&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514964</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-05 00:47:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117160</attachid>
            <date>2011-11-30 03:07:31 -0800</date>
            <delta_ts>2011-11-30 21:35:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72939-20111130200729.patch</filename>
            <type>text/plain</type>
            <size>15772</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDExZjI3MDdhNmY0OWNl
NTkyYzRjNjlmZDJmMTRkMzZhYzZjZDVhYy4uMjRiNThlN2M4YmFiMTEyOGE5MjFjNWMyYmQ1OTA2
ODM4ZmE4YmFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTExLTMwICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgQXN5bmNocm9ub3Vz
IFNwZWxsQ2hlY2tlciBzaG91bGQgY29uc2lkZXIgbXVsdGlwbGUgcmVxdWVzdHMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyBTcGVsbGNoZWNrZXIg
c2F2ZXMgYSByZXF1ZXN0IHdoZW4gaXQgaXMgcHJvY2Vzc2luZyB0aGUgcHJldmlvdXMgc3BlbGxj
aGVjayByZXF1ZXN0LgorICAgICAgICBDdXJyZW50bHkgb25seSB0aGUgbGF0ZXN0IHJlcXVlc3Qg
aXMgc2F2ZWQuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1
ZXVlLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1
ZXN0KToKKyAgICAgICAgICBBIHN0cnVjdHVyZSB0byBoYXZlIHNwZWxsIGNoZWNrIHJlcXVlc3Qu
CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tSZXF1ZXN0OjpzZXF1
ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tSZXF1ZXN0
OjpyYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tSZXF1
ZXN0Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja1Jl
cXVlc3Q6Om1hc2spOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpTcGVsbENoZWNr
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjppbml0UmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAgIFdoZW4g
dGltZXIgaXMgZmlyZWQsIHF1ZXVlZCByZXF1ZXN0IGlzIHByb2Nlc3NlZCBpZiBhbnkuCisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OnByb2Nlc3NRdWV1ZWRSZXF1ZXN0KTogU2V0cyBh
IHRpbWVyLgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJv
bm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6aXNWYWxpZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmRvUmVxdWVzdENoZWNraW5nRm9yKToKKyAgICAg
ICAgICBXaGVuIHRoZSBzcGVsbGNoZWNrZXIgaXMgcHJvY2Vzc2luZyBhbm90aGVyIHJlcXVlc3Qs
IHRoZSBsYXRlc3QgcmVxdWVzdCBpcyBxdWV1ZWQuCisgICAgICAgIChXZWJDb3JlOjpTcGVsbENo
ZWNrZXI6OmRpZENoZWNrKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5oOgorCiAy
MDExLTExLTI4ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBwdXQgaW5zcGVjdG9yIGFnZW50cyBpbnRvIGEgdmVjdG9yIGluIHRo
ZSBJbnNwZWN0b3JDb250cm9sbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwCmluZGV4IDFiYzk3NWFmMTcxNjVjYmExOTQyMGU4Y2E2MWYxZDBiMjAxZDE2YTUuLmU0MTA5
Y2U3YzIzOWU1YmQ3ZmIxZGYzYThhYzViODVjNzI1MTQ3NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsQ2hlY2tlci5jcHAKQEAgLTQ1LDkgKzQ1LDMyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgU3BlbGxDaGVja2VyOjpTcGVsbENoZWNrUmVxdWVzdCB7CitwdWJsaWM6
CisgICAgU3BlbGxDaGVja1JlcXVlc3QoaW50IHNlcXVlbmNlLCBQYXNzUmVmUHRyPFJhbmdlPiBy
YW5nZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBtYXNrKQorICAg
ICAgICA6IG1fc2VxdWVuY2Uoc2VxdWVuY2UpCisgICAgICAgICwgbV9yYW5nZShyYW5nZSkKKyAg
ICAgICAgLCBtX3RleHQodGV4dCkKKyAgICAgICAgLCBtX21hc2sobWFzaykKKyAgICB7CisgICAg
fQorCisgICAgaW50IHNlcXVlbmNlKCkgY29uc3QgeyByZXR1cm4gbV9zZXF1ZW5jZTsgfQorICAg
IFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZTsgfQorICAg
IGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQorICAgIFRleHRD
aGVja2luZ1R5cGVNYXNrIG1hc2soKSBjb25zdCB7IHJldHVybiBtX21hc2s7IH0KKworcHJpdmF0
ZToKKyAgICBpbnQgbV9zZXF1ZW5jZTsKKyAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2U7CisgICAg
U3RyaW5nIG1fdGV4dDsKKyAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBtX21hc2s7Cit9OworCiBT
cGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tlcihGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZy
YW1lKQotICAgICwgbV9yZXF1ZXN0U2VxdWVuY2UoMCkKKyAgICAsIG1fbWF4UmVxdWVzdGVkU2Vx
dWVuY2UoMCkKKyAgICAsIG1fdGltZXIodGhpcywgJlNwZWxsQ2hlY2tlcjo6dGltZXJGaXJlZCkK
IHsKIH0KIApAQCAtNjMsMjUgKzg2LDMzIEBAIFRleHRDaGVja2VyQ2xpZW50KiBTcGVsbENoZWNr
ZXI6OmNsaWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UtPmVkaXRvckNsaWVudCgpLT50ZXh0
Q2hlY2tlcigpOwogfQogCi1ib29sIFNwZWxsQ2hlY2tlcjo6aW5pdFJlcXVlc3QoUGFzc1JlZlB0
cjxSYW5nZT4gcmFuZ2UpCitQYXNzT3duUHRyPFNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja1JlcXVl
c3Q+IFNwZWxsQ2hlY2tlcjo6aW5pdFJlcXVlc3QoVGV4dENoZWNraW5nVHlwZU1hc2sgbWFzaywg
UGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UpCiB7CiAgICAgQVNTRVJUKGNhbkNoZWNrQXN5bmNocm9u
b3VzbHkocmFuZ2UuZ2V0KCkpKTsKIAogICAgIFN0cmluZyB0ZXh0ID0gcmFuZ2UtPnRleHQoKTsK
ICAgICBpZiAoIXRleHQubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIFBhc3NPd25QdHI8U3BlbGxDaGVja1JlcXVlc3Q+KCk7CiAKLSAgICBtX3JlcXVlc3RS
YW5nZSA9IHJhbmdlOwotICAgIG1fcmVxdWVzdFRleHQgPSB0ZXh0OwotICAgIG1fcmVxdWVzdFNl
cXVlbmNlKys7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTcGVsbENoZWNrUmVxdWVzdCgrK21f
bWF4UmVxdWVzdGVkU2VxdWVuY2UsIHJhbmdlLCB0ZXh0LCBtYXNrKSk7Cit9CisKK3ZvaWQgU3Bl
bGxDaGVja2VyOjp0aW1lckZpcmVkKFRpbWVyPFNwZWxsQ2hlY2tlcj4qKQoreworICAgIGlmICgh
bV9xdWV1ZWRSZXF1ZXN0LmdldCgpKQorICAgICAgICByZXR1cm47CiAKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0gbV9xdWV1ZWRSZXF1ZXN0LnJlbGVhc2UoKTsK
KyAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcodGhpcywgbV9wcm9jZXNzaW5n
UmVxdWVzdC0+c2VxdWVuY2UoKSwgbV9wcm9jZXNzaW5nUmVxdWVzdC0+bWFzaygpLCBtX3Byb2Nl
c3NpbmdSZXF1ZXN0LT50ZXh0KCkpOwogfQogCi12b2lkIFNwZWxsQ2hlY2tlcjo6Y2xlYXJSZXF1
ZXN0KCkKK3ZvaWQgU3BlbGxDaGVja2VyOjpwcm9jZXNzUXVldWVkUmVxdWVzdCgpCiB7Ci0gICAg
bV9yZXF1ZXN0UmFuZ2UuY2xlYXIoKTsKLSAgICBtX3JlcXVlc3RUZXh0ID0gU3RyaW5nKCk7Cisg
ICAgbV9wcm9jZXNzaW5nUmVxdWVzdC5jbGVhcigpOworICAgIGlmICghbV9xdWV1ZWRSZXF1ZXN0
LmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
IH0KIAogYm9vbCBTcGVsbENoZWNrZXI6OmlzQXN5bmNocm9ub3VzRW5hYmxlZCgpIGNvbnN0CkBA
IC05MSwxNyArMTIyLDEyIEBAIGJvb2wgU3BlbGxDaGVja2VyOjppc0FzeW5jaHJvbm91c0VuYWJs
ZWQoKSBjb25zdAogCiBib29sIFNwZWxsQ2hlY2tlcjo6Y2FuQ2hlY2tBc3luY2hyb25vdXNseShS
YW5nZSogcmFuZ2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNsaWVudCgpICYmIGlzQ2hlY2thYmxl
KHJhbmdlKSAmJiBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSAmJiAhaXNCdXN5KCk7Ci19Ci0KLWJv
b2wgU3BlbGxDaGVja2VyOjppc0J1c3koKSBjb25zdAotewotICAgIHJldHVybiBtX3JlcXVlc3RS
YW5nZS5nZXQoKTsKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgaXNDaGVja2FibGUocmFuZ2UpICYm
IGlzQXN5bmNocm9ub3VzRW5hYmxlZCgpOwogfQogCiBib29sIFNwZWxsQ2hlY2tlcjo6aXNWYWxp
ZChpbnQgc2VxdWVuY2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmVxdWVzdFJhbmdlLmdldCgp
ICYmIG1fcmVxdWVzdFRleHQubGVuZ3RoKCkgJiYgbV9yZXF1ZXN0U2VxdWVuY2UgPT0gc2VxdWVu
Y2U7CisgICAgcmV0dXJuIG1fcHJvY2Vzc2luZ1JlcXVlc3QuZ2V0KCkgJiYgbV9wcm9jZXNzaW5n
UmVxdWVzdC0+dGV4dCgpLmxlbmd0aCgpICYmIG1fcHJvY2Vzc2luZ1JlcXVlc3QtPnNlcXVlbmNl
KCkgPT0gc2VxdWVuY2U7CiB9CiAKIGJvb2wgU3BlbGxDaGVja2VyOjppc0NoZWNrYWJsZShSYW5n
ZSogcmFuZ2UpIGNvbnN0CkBAIC0xMjEsOSArMTQ3LDE2IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpk
b1JlcXVlc3RDaGVja2luZ0ZvcihUZXh0Q2hlY2tpbmdUeXBlTWFzayBtYXNrLCBQYXNzUmVmUHRy
PFJhCiB7CiAgICAgQVNTRVJUKGNhbkNoZWNrQXN5bmNocm9ub3VzbHkocmFuZ2UuZ2V0KCkpKTsK
IAotICAgIGlmICghaW5pdFJlcXVlc3QocmFuZ2UpKQorICAgIE93blB0cjxTcGVsbENoZWNrUmVx
dWVzdD4gcmVxdWVzdChpbml0UmVxdWVzdChtYXNrLCByYW5nZSkpOworICAgIGlmICghcmVxdWVz
dC5nZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNsaWVudCgpLT5yZXF1ZXN0Q2hlY2tpbmdP
ZlN0cmluZyh0aGlzLCBtX3JlcXVlc3RTZXF1ZW5jZSwgbWFzaywgbV9yZXF1ZXN0VGV4dCk7CisK
KyAgICBpZiAobV9wcm9jZXNzaW5nUmVxdWVzdC5nZXQoKSkKKyAgICAgICAgbV9xdWV1ZWRSZXF1
ZXN0ID0gcmVxdWVzdC5yZWxlYXNlKCk7CisgICAgZWxzZSB7CisgICAgICAgIGNsaWVudCgpLT5y
ZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh0aGlzLCByZXF1ZXN0LT5zZXF1ZW5jZSgpLCByZXF1ZXN0
LT5tYXNrKCksIHJlcXVlc3QtPnRleHQoKSk7CisgICAgICAgIG1fcHJvY2Vzc2luZ1JlcXVlc3Qg
PSByZXF1ZXN0LnJlbGVhc2UoKTsKKyAgICB9CiB9CiAKIHN0YXRpYyBib29sIGZvcndhcmRJdGVy
YXRvcihQb3NpdGlvbkl0ZXJhdG9yJiBpdGVyYXRvciwgaW50IGRpc3RhbmNlKQpAQCAtMTYyLDEz
ICsxOTUsMTMgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKGludCBzZXF1ZW5jZSwgY29u
c3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3UKICAgICBpZiAoIWlzVmFsaWQoc2Vx
dWVuY2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWlzQ2hlY2thYmxlKG1fcmVxdWVz
dFJhbmdlLmdldCgpKSkgewotICAgICAgICBjbGVhclJlcXVlc3QoKTsKKyAgICBpZiAoIWlzQ2hl
Y2thYmxlKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPnJhbmdlKCkuZ2V0KCkpKSB7CisgICAgICAgIHBy
b2Nlc3NRdWV1ZWRSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpbnQg
c3RhcnRPZmZzZXQgPSAwOwotICAgIFBvc2l0aW9uSXRlcmF0b3Igc3RhcnQgPSBtX3JlcXVlc3RS
YW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgIFBvc2l0aW9uSXRlcmF0b3Igc3RhcnQgPSBtX3By
b2Nlc3NpbmdSZXF1ZXN0LT5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChyZXN1bHRz
W2ldLnR5cGUgIT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdHNbaV0udHlwZSAh
PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTg2
LDE3ICsyMTksMTcgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKGludCBzZXF1ZW5jZSwg
Y29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3UKICAgICAgICAgLy8gc3BlbGxp
bmdzIGluIHRoZSBiYWNrZ3JvdW5kLiBUbyBhdm9pZCBhZGRpbmcgbWFya2VycyB0byB0aGUgd29y
ZHMgbW9kaWZpZWQgYnkgdXNlcnMgb3IKICAgICAgICAgLy8gSmF2YVNjcmlwdCBhcHBsaWNhdGlv
bnMsIHJldHJpZXZlIHRoZSB3b3JkcyBpbiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBhbmQgY29tcGFy
ZSB0aGVtIHdpdGgKICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIG9uZXMuCi0gICAgICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fcmVxdWVzdFJhbmdlLT5vd25lckRvY3Vt
ZW50KCksIHN0YXJ0LCBlbmQpOworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5yYW5nZSgpLT5vd25lckRvY3VtZW50KCksIHN0
YXJ0LCBlbmQpOwogICAgICAgICAvLyBGSVhNRTogVXNlIHRleHRDb250ZW50KCkgY29tcGF0aWJs
ZSBzdHJpbmcgY29udmVyc2lvbi4KICAgICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gcmFuZ2Ut
PnRleHQoKTsKLSAgICAgICAgU3RyaW5nIHNvdXJjZSA9IG1fcmVxdWVzdFRleHQuc3Vic3RyaW5n
KHJlc3VsdHNbaV0ubG9jYXRpb24sIHJlc3VsdHNbaV0ubGVuZ3RoKTsKKyAgICAgICAgU3RyaW5n
IHNvdXJjZSA9IG1fcHJvY2Vzc2luZ1JlcXVlc3QtPnRleHQoKS5zdWJzdHJpbmcocmVzdWx0c1tp
XS5sb2NhdGlvbiwgcmVzdWx0c1tpXS5sZW5ndGgpOwogICAgICAgICBpZiAoZGVzdGluYXRpb24g
PT0gc291cmNlKQotICAgICAgICAgICAgbV9yZXF1ZXN0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+
bWFya2VycygpLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIHRvTWFya2VyVHlwZShyZXN1bHRzW2ld
LnR5cGUpKTsKKyAgICAgICAgICAgIG1fcHJvY2Vzc2luZ1JlcXVlc3QtPnJhbmdlKCktPm93bmVy
RG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIHRvTWFya2VyVHlw
ZShyZXN1bHRzW2ldLnR5cGUpKTsKIAogICAgICAgICBzdGFydE9mZnNldCA9IHJlc3VsdHNbaV0u
bG9jYXRpb247CiAgICAgfQogCi0gICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgcHJvY2Vzc1F1ZXVl
ZFJlcXVlc3QoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAppbmRl
eCAzYTQxNDg5OTNhYTdhMzkwZDM0MzQyOTg3YzJhYjA4ODM4N2M4YTkxLi5hYWI3OGNjZmQ4YzI1
NDk0ZjcwN2ZjODE2MTJiZDBmMjZlNTczNzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxD
aGVja2VyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgpAQCAtNDcsMjQgKzQ4LDI4IEBAIHB1YmxpYzoKICAgICB+U3BlbGxDaGVj
a2VyKCk7CiAKICAgICBib29sIGlzQXN5bmNocm9ub3VzRW5hYmxlZCgpIGNvbnN0OwotICAgIGJv
b2wgY2FuQ2hlY2tBc3luY2hyb25vdXNseShSYW5nZSopIGNvbnN0OwotICAgIGJvb2wgaXNCdXN5
KCkgY29uc3Q7CiAgICAgYm9vbCBpc1ZhbGlkKGludCBzZXF1ZW5jZSkgY29uc3Q7CiAgICAgYm9v
bCBpc0NoZWNrYWJsZShSYW5nZSopIGNvbnN0OwogICAgIHZvaWQgcmVxdWVzdENoZWNraW5nRm9y
KFRleHRDaGVja2luZ1R5cGVNYXNrLCBQYXNzUmVmUHRyPFJhbmdlPik7CiAgICAgdm9pZCBkaWRD
aGVjayhpbnQgc2VxdWVuY2UsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAK
IHByaXZhdGU6Ci0gICAgYm9vbCBpbml0UmVxdWVzdChQYXNzUmVmUHRyPFJhbmdlPik7Ci0gICAg
dm9pZCBjbGVhclJlcXVlc3QoKTsKKyAgICBjbGFzcyBTcGVsbENoZWNrUmVxdWVzdDsKKworICAg
IGJvb2wgY2FuQ2hlY2tBc3luY2hyb25vdXNseShSYW5nZSopIGNvbnN0OworICAgIFBhc3NPd25Q
dHI8U3BlbGxDaGVja1JlcXVlc3Q+IGluaXRSZXF1ZXN0KFRleHRDaGVja2luZ1R5cGVNYXNrLCBQ
YXNzUmVmUHRyPFJhbmdlPik7CisgICAgdm9pZCBwcm9jZXNzUXVldWVkUmVxdWVzdCgpOwogICAg
IHZvaWQgZG9SZXF1ZXN0Q2hlY2tpbmdGb3IoVGV4dENoZWNraW5nVHlwZU1hc2ssIFBhc3NSZWZQ
dHI8UmFuZ2U+KTsKICAgICBUZXh0Q2hlY2tlckNsaWVudCogY2xpZW50KCkgY29uc3Q7CisgICAg
dm9pZCB0aW1lckZpcmVkKFRpbWVyPFNwZWxsQ2hlY2tlcj4qKTsKIAogICAgIEZyYW1lKiBtX2Zy
YW1lOworICAgIGludCBtX21heFJlcXVlc3RlZFNlcXVlbmNlOworCisgICAgVGltZXI8U3BlbGxD
aGVja2VyPiBtX3RpbWVyOwogCi0gICAgUmVmUHRyPFJhbmdlPiBtX3JlcXVlc3RSYW5nZTsKLSAg
ICBTdHJpbmcgbV9yZXF1ZXN0VGV4dDsKLSAgICBpbnQgbV9yZXF1ZXN0U2VxdWVuY2U7CisgICAg
T3duUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiBtX3Byb2Nlc3NpbmdSZXF1ZXN0OworICAgIE93blB0
cjxTcGVsbENoZWNrUmVxdWVzdD4gbV9xdWV1ZWRSZXF1ZXN0OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDg1NWY4N2EwNDIzMTQyYjdjZGM3YTdiNWNkZDVkMjJhMzZjNWM1
MGUuLjc2NWRlYzg4NTMwNzgzOTQzNzJhZTFlY2E2MmRlNjRiOGE5YjliYTYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxMS0xMS0zMCAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUu
Y29tPgorCisgICAgICAgIEFzeW5jaHJvbm91cyBTcGVsbENoZWNrZXIgc2hvdWxkIGNvbnNpZGVy
IG11bHRpcGxlIHJlcXVlc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzI5MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUZXN0cyBmb3IgbXVsdGlwbGUgc3BlbGxjaGVjayByZXF1ZXN0cy4KKworICAg
ICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1xdWV1ZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1xdWV1ZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9Ta2lwcGVkOgorCiAyMDExLTExLTI5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgU1ZHIDxwYXRoPiBEUlQgZHVtcHMgaGF2ZSByb3VuZGluZyBw
cm9ibGVtcyBhY3Jvc3MgcGxhdGZvcm1zCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5n
L3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRp
dGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
MDIyNGIxMTg1MDY4MTcyZTBjMGFiMDBmN2U2Mzc5MzZhMzU4ZGQwCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDExIEBACitGb3IgQnVnIDcyOTM5OiBBc3luY2hyb25vdXMgU3BlbGxD
aGVja2VyIHNob3VsZCBjb25zaWRlciBtdWx0aXBsZSByZXF1ZXN0cy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorUEFTUyBJTlBVVCBoYXMgYSBtYXJrZXIgb24gJ2ZvbyBiYXInCitQQVNTIElO
UFVUIGhhcyBhIG1hcmtlciBvbiAnZm9vIGJhcicKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZGYxNWE0MWI0
NDI2MTNkM2UxMmRjMTQ3NTQ1NmUyMjhlNWIzMmIyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLmh0bWwKQEAgLTAsMCArMSwx
MjkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXNlbGVj
dGlvbi1zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3Jp
cHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0
aW9uKCdGb3IgQnVnIDcyOTM5OiBBc3luY2hyb25vdXMgU3BlbGxDaGVja2VyIHNob3VsZCBjb25z
aWRlciBtdWx0aXBsZSByZXF1ZXN0cy4nKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK3ZhciB0
ZXN0Um9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworZG9jdW1lbnQuYm9keS5p
bnNlcnRCZWZvcmUodGVzdFJvb3QsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CisKK3ZhciB0
ZXN0U291cmNlUGxhaW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK3Rlc3RTb3Vy
Y2VQbGFpbi5pbm5lckhUTUwgPSAiZm9vIGJhciI7Cit0ZXN0Um9vdC5hcHBlbmRDaGlsZCh0ZXN0
U291cmNlUGxhaW4pOworCit2YXIgdGVzdElucHV0MSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImlucHV0Iik7Cit0ZXN0SW5wdXQxLnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0Iik7Cit0ZXN0
Um9vdC5hcHBlbmRDaGlsZCh0ZXN0SW5wdXQxKTsKK3ZhciB0ZXN0SW5wdXQyID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKK3Rlc3RJbnB1dDIuc2V0QXR0cmlidXRlKCJ0eXBlIiwg
InRleHQiKTsKK3Rlc3RSb290LmFwcGVuZENoaWxkKHRlc3RJbnB1dDIpOwordmFyIHRlc3RJbnB1
dDMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwordGVzdElucHV0My5zZXRBdHRy
aWJ1dGUoInR5cGUiLCAidGV4dCIpOwordGVzdFJvb3QuYXBwZW5kQ2hpbGQodGVzdElucHV0Myk7
CisKK3ZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisKKy8vIEF0IGxlYXN0LCB0ZXN0
SW5wdXQxIGFuZCB0ZXN0SW5wdXQzIHNob3VsZCBoYXZlIG1hcmtlcnMuCit2YXIgdGVzdHMgPSBb
CisgICAgZnVuY3Rpb24oKSB7IHZlcmlmeSgxLCB0ZXN0U291cmNlUGxhaW4sIHRlc3RJbnB1dDEs
IFtbMCwgM11dKTsgfSwKKyAgICBmdW5jdGlvbigpIHsgdmVyaWZ5KDMsIHRlc3RTb3VyY2VQbGFp
biwgdGVzdElucHV0MywgW1swLCAzXV0pOyB9CitdOworCitmdW5jdGlvbiBkb25lKCkKK3sKKyAg
ICB2YXIgbmV4dCA9IHRlc3RzLnNoaWZ0KCk7CisgICAgaWYgKG5leHQpIHsKKyAgICAgICAgbmV4
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGVzdFJvb3Quc3R5bGUuZGlzcGxh
eSA9ICJub25lIjsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGZhbHNlKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gdmVyaWZ5TWFya2VyKG5vZGUsIGV4cGVjdGVkTWFya2VkKQor
eworICAgIGlmIChub2RlIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCBub2RlIGluc3Rh
bmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkgeworICAgICAgICBub2RlLmZvY3VzKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgc2VsLnNlbGVjdEFsbENoaWxkcmVuKG5vZGUpOworICAgIH0KKwor
ICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICB2YXIgb2sgPSB0cnVlOworICAgIGZvciAodmFyIGkgPSAwOyBvayAmJiBpIDwgZXhwZWN0
ZWRNYXJrZWQubGVuZ3RoOyArK2kpCisgICAgICAgIG9rID0gb2sgJiYgbGF5b3V0VGVzdENvbnRy
b2xsZXIuaGFzU3BlbGxpbmdNYXJrZXIoZXhwZWN0ZWRNYXJrZWRbaV1bMF0sIGV4cGVjdGVkTWFy
a2VkW2ldWzFdKTsKKyAgICByZXR1cm4gb2s7Cit9CisKK2Z1bmN0aW9uIGNvcHlBbmRQYXN0ZShz
b3VyY2UsIGRlc3QpCit7CisgICAgc2VsLnNlbGVjdEFsbENoaWxkcmVuKHNvdXJjZSk7CisgICAg
ZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkNvcHkiKTsKKyAgICBpZiAoZGVzdCBpbnN0YW5jZW9mIEhU
TUxJbnB1dEVsZW1lbnQgfHwgZGVzdCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHsK
KyAgICAgICAgZGVzdC52YWx1ZSA9ICIiOworICAgICAgICBkZXN0LmZvY3VzKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZGVzdC5pbm5lckhUTUwgPSAiIjsKKyAgICAgICAgc2VsLnNlbGVjdEFs
bENoaWxkcmVuKGRlc3QpOworICAgIH0KKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiUGFzdGUi
KTsKK30KKworZnVuY3Rpb24gdmVyaWZ5KGlkLCBzb3VyY2UsIGRlc3QsIGV4cGVjdGVkTWFya2Vk
KQoreworICAgIHZhciBucmV0cnkgPSAxMDsKKyAgICB2YXIgbnNsZWVwID0gMTsKKyAgICBmdW5j
dGlvbiB0cmlhbCgpIHsKKyAgICAgICAgdmFyIHZlcmlmaWVkID0gdmVyaWZ5TWFya2VyKGRlc3Qs
IGV4cGVjdGVkTWFya2VkKTsKKyAgICAgICAgaWYgKHZlcmlmaWVkKSB7CisgICAgICAgICAgICB0
ZXN0UGFzc2VkKGRlc3QudGFnTmFtZSArICIgaGFzIGEgbWFya2VyIG9uICciICsgc291cmNlLmlu
bmVySFRNTCArICInIik7CisgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBucmV0cnktLTsKKyAgICAgICAgaWYgKDAgPT0gbnJldHJ5
KSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKGRlc3QudGFnTmFtZSArICIgc2hvdWxkIGhhdmUg
YSBtYXJrZXIgb24gZm9yICciICsgc291cmNlLmlubmVySFRNTCArICInIik7CisgICAgICAgICAg
ICBkb25lKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBuc2xl
ZXAgKj0gMjsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQodHJpYWwsIG5zbGVlcCk7CisgICAg
fTsKKyAgICB0cmlhbCgpOworfQorCitmdW5jdGlvbiBwYXN0ZUFuZFZlcmlmeShzb3VyY2UsIGRl
c3RzLCBleHBlY3RlZE1hcmtlZCkKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlc3RzLmxl
bmd0aDsgKytpKQorICAgICAgICBjb3B5QW5kUGFzdGUoc291cmNlLCBkZXN0c1tpXSk7Cit9Owor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKHRydWUpOworCitwYXN0ZUFu
ZFZlcmlmeSh0ZXN0U291cmNlUGxhaW4sIFt0ZXN0SW5wdXQxLCB0ZXN0SW5wdXQyLCB0ZXN0SW5w
dXQzXSwgW1swLCAzXV0pOworZG9uZSgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1NraXBwZWQKaW5kZXggMjc5ZjFjNWFkY2Q5MzAyYzc5MzRmZWFiYTYxZmRkZTYyM2Y5MjI2OS4u
ZDk4MTEzZDllOTk5NzdjMzAyYTA0MDZiMGEzMzQ2NWJiYWQwNGZlNCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL1NraXBwZWQKQEAgLTEzNTEsNiArMTM1MSw3IEBAIG1lZGlhL2V2ZW50LWF0dHJpYnV0ZXMu
aHRtbAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3NDAKIGVk
aXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctYmFja3NwYWNlLWJldHdlZW4tbGluZXMuaHRtbAogZWRp
dGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXBhc3RlLmh0bWwKK2VkaXRpbmcvc3BlbGxpbmcvc3Bl
bGxjaGVjay1xdWV1ZS5odG1sCiAKICMgRm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MDc1OAogIyBUaGVzZSByZXF1aXJlIERSVCBzZXRTZXJpYWxpemVIVFRQTG9h
ZHMgaW1wbGVtZW50YXRpb24gdG8gYmUgcmVsaWFibGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApp
bmRleCAyNmFlNDc4MWRjOTdmMTczZDUxMzhlZTFlYzE1NDU0ZDNiMjY0NWY0Li5mMGUzZTQwMDFk
Y2I5NDg2YmUxNDEzZjljOTU2YTI3ZjI2Yzc1NmNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQK
QEAgLTEwMDEsNiArMTAwMSw3IEBAIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctYXR0cmlidXRl
LWF0LWNoaWxkLmh0bWwKIAogIyBFZGl0b3JDbGllbnQ6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5n
KCkgaXMgbm90IGltcGxlbWVudGVkCiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcGFzdGUu
aHRtbAorZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLmh0bWwKIAogIyBbUXRdW0dU
S10gZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLWFzeW5jLmh0bWwgZmFpbHMKICMgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDAzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117330</attachid>
            <date>2011-11-30 21:35:39 -0800</date>
            <delta_ts>2011-12-01 01:30:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72939-20111201143537.patch</filename>
            <type>text/plain</type>
            <size>15987</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJhNjU5M2ViYjI2MjQy
ZTljOGVkZDU2ZGM0YzlmMzllMGYyZTQwOC4uNTcxODAyZjAyMjhiMWExYzc4NWQ4YTAxM2NmZTg0
MTVmNTZkMGY5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDExLTExLTMwICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgQXN5bmNocm9ub3Vz
IFNwZWxsQ2hlY2tlciBzaG91bGQgY29uc2lkZXIgbXVsdGlwbGUgcmVxdWVzdHMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyBTcGVsbENoZWNrZXIg
c2F2ZXMgYSByZXF1ZXN0IHdoZW4gaXQgaXMgcHJvY2Vzc2luZyB0aGUgcHJldmlvdXMgc3BlbGxj
aGVjayByZXF1ZXN0LgorICAgICAgICBDdXJyZW50bHkgb25seSB0aGUgbGF0ZXN0IHJlcXVlc3Qg
aXMgc2F2ZWQuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1
ZXVlLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja1JlcXVlc3Q6OlNwZWxsQ2hlY2tSZXF1
ZXN0KToKKyAgICAgICAgICBBIHN0cnVjdHVyZSB0byBoYXZlIHNwZWxsIGNoZWNrIHJlcXVlc3Qu
CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tSZXF1ZXN0OjpzZXF1
ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tSZXF1ZXN0
OjpyYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tSZXF1
ZXN0Ojp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja1Jl
cXVlc3Q6Om1hc2spOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpTcGVsbENoZWNr
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpjcmVhdGVSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6dGltZXJGaXJlZFRvUHJvY2Vzc1F1ZXVlZFJl
cXVlc3QpOgorICAgICAgICAgIFdoZW4gdGltZXIgaXMgZmlyZWQsIHF1ZXVlZCByZXF1ZXN0IGlz
IHByb2Nlc3NlZCBpZiBhbnkuCisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OnByb2Nl
c3NRdWV1ZWRSZXF1ZXN0KToKKyAgICAgICAgICBTZXRzIGEgdGltZXIuCisgICAgICAgIChXZWJD
b3JlOjpTcGVsbENoZWNrZXI6OmlzQXN5bmNocm9ub3VzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbENoZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6U3BlbGxDaGVja2VyOjpkb1JlcXVlc3RDaGVja2luZ0Zvcik6CisgICAgICAgICAgV2hl
biB0aGUgc3BlbGxjaGVja2VyIGlzIHByb2Nlc3NpbmcgYW5vdGhlciByZXF1ZXN0LCB0aGUgbGF0
ZXN0IHJlcXVlc3QgaXMgcXVldWVkLgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpk
aWRDaGVjayk6CisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuaDoKKwogMjAxMS0xMS0z
MCAgTGVvIFlhbmcgIDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgW0Js
YWNrQmVycnldIEFkZCAyIGNwcCBmaWxlcyB0byB0aGUgQmxhY2tCZXJyeSBidWlsZCBzeXN0ZW0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCAxYmM5NzVhZjE3MTY1
Y2JhMTk0MjBlOGNhNjFmMWQwYjIwMWQxNmE1Li4xMzgxNWUzOWIzOTUwYjA3YTgwNjNmNTJlNmQ4
MmVhZDlmZDY1NTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hl
Y2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCkBA
IC00NSw5ICs0NSwzMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNwZWxsQ2hl
Y2tlcjo6U3BlbGxDaGVja1JlcXVlc3QgeworcHVibGljOgorICAgIFNwZWxsQ2hlY2tSZXF1ZXN0
KGludCBzZXF1ZW5jZSwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UsIGNvbnN0IFN0cmluZyYgdGV4
dCwgVGV4dENoZWNraW5nVHlwZU1hc2sgbWFzaykKKyAgICAgICAgOiBtX3NlcXVlbmNlKHNlcXVl
bmNlKQorICAgICAgICAsIG1fcmFuZ2UocmFuZ2UpCisgICAgICAgICwgbV90ZXh0KHRleHQpCisg
ICAgICAgICwgbV9tYXNrKG1hc2spCisgICAgeworICAgIH0KKworICAgIGludCBzZXF1ZW5jZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2VxdWVuY2U7IH0KKyAgICBSYW5nZSogcmFuZ2UoKSBjb25zdCB7
IHJldHVybiBtX3JhbmdlLmdldCgpOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0OyB9CisgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgbWFzaygpIGNvbnN0
IHsgcmV0dXJuIG1fbWFzazsgfQorCitwcml2YXRlOgorICAgIGludCBtX3NlcXVlbmNlOworICAg
IFJlZlB0cjxSYW5nZT4gbV9yYW5nZTsKKyAgICBTdHJpbmcgbV90ZXh0OworICAgIFRleHRDaGVj
a2luZ1R5cGVNYXNrIG1fbWFzazsKK307CisKIFNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKEZy
YW1lKiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX3JlcXVlc3RTZXF1ZW5j
ZSgwKQorICAgICwgbV9sYXN0UmVxdWVzdGVkU2VxdWVuY2UoMCkKKyAgICAsIG1fdGltZXJUb1By
b2Nlc3NRdWV1ZWRSZXF1ZXN0KHRoaXMsICZTcGVsbENoZWNrZXI6OnRpbWVyRmlyZWRUb1Byb2Nl
c3NRdWV1ZWRSZXF1ZXN0KQogewogfQogCkBAIC02Myw0NSArODYsNDMgQEAgVGV4dENoZWNrZXJD
bGllbnQqIFNwZWxsQ2hlY2tlcjo6Y2xpZW50KCkgY29uc3QKICAgICByZXR1cm4gcGFnZS0+ZWRp
dG9yQ2xpZW50KCktPnRleHRDaGVja2VyKCk7CiB9CiAKLWJvb2wgU3BlbGxDaGVja2VyOjppbml0
UmVxdWVzdChQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSkKK1Bhc3NPd25QdHI8U3BlbGxDaGVja2Vy
OjpTcGVsbENoZWNrUmVxdWVzdD4gU3BlbGxDaGVja2VyOjpjcmVhdGVSZXF1ZXN0KFRleHRDaGVj
a2luZ1R5cGVNYXNrIG1hc2ssIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQogewogICAgIEFTU0VS
VChjYW5DaGVja0FzeW5jaHJvbm91c2x5KHJhbmdlLmdldCgpKSk7CiAKICAgICBTdHJpbmcgdGV4
dCA9IHJhbmdlLT50ZXh0KCk7CiAgICAgaWYgKCF0ZXh0Lmxlbmd0aCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBtX3JlcXVlc3RSYW5nZSA9IHJhbmdlOwotICAgIG1fcmVxdWVzdFRl
eHQgPSB0ZXh0OwotICAgIG1fcmVxdWVzdFNlcXVlbmNlKys7CisgICAgICAgIHJldHVybiBQYXNz
T3duUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PigpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBTcGVsbENoZWNrUmVxdWVzdCgrK21fbGFzdFJlcXVlc3RlZFNlcXVl
bmNlLCByYW5nZSwgdGV4dCwgbWFzaykpOwogfQogCi12b2lkIFNwZWxsQ2hlY2tlcjo6Y2xlYXJS
ZXF1ZXN0KCkKK3ZvaWQgU3BlbGxDaGVja2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVx
dWVzdChUaW1lcjxTcGVsbENoZWNrZXI+KikKIHsKLSAgICBtX3JlcXVlc3RSYW5nZS5jbGVhcigp
OwotICAgIG1fcmVxdWVzdFRleHQgPSBTdHJpbmcoKTsKLX0KKyAgICBpZiAoIW1fcXVldWVkUmVx
dWVzdC5nZXQoKSkKKyAgICAgICAgcmV0dXJuOwogCi1ib29sIFNwZWxsQ2hlY2tlcjo6aXNBc3lu
Y2hyb25vdXNFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mcmFtZS0+c2V0dGluZ3Mo
KSAmJiBtX2ZyYW1lLT5zZXR0aW5ncygpLT5hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpOworICAgIG1fcHJvY2Vzc2luZ1JlcXVlc3QgPSBtX3F1ZXVlZFJlcXVlc3QucmVsZWFzZSgp
OworICAgIGNsaWVudCgpLT5yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh0aGlzLCBtX3Byb2Nlc3Np
bmdSZXF1ZXN0LT5zZXF1ZW5jZSgpLCBtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5tYXNrKCksIG1fcHJv
Y2Vzc2luZ1JlcXVlc3QtPnRleHQoKSk7CiB9CiAKLWJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVj
a0FzeW5jaHJvbm91c2x5KFJhbmdlKiByYW5nZSkgY29uc3QKK3ZvaWQgU3BlbGxDaGVja2VyOjpw
cm9jZXNzUXVldWVkUmVxdWVzdCgpCiB7Ci0gICAgcmV0dXJuIGNsaWVudCgpICYmIGlzQ2hlY2th
YmxlKHJhbmdlKSAmJiBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSAmJiAhaXNCdXN5KCk7CisgICAg
bV9wcm9jZXNzaW5nUmVxdWVzdC5jbGVhcigpOworICAgIGlmICghbV9xdWV1ZWRSZXF1ZXN0Lmdl
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVz
dC5zdGFydE9uZVNob3QoMCk7CiB9CiAKLWJvb2wgU3BlbGxDaGVja2VyOjppc0J1c3koKSBjb25z
dAorYm9vbCBTcGVsbENoZWNrZXI6OmlzQXN5bmNocm9ub3VzRW5hYmxlZCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fcmVxdWVzdFJhbmdlLmdldCgpOworICAgIHJldHVybiBtX2ZyYW1lLT5zZXR0
aW5ncygpICYmIG1fZnJhbWUtPnNldHRpbmdzKCktPmFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCk7CiB9CiAKLWJvb2wgU3BlbGxDaGVja2VyOjppc1ZhbGlkKGludCBzZXF1ZW5jZSkg
Y29uc3QKK2Jvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdlKiBy
YW5nZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXF1ZXN0UmFuZ2UuZ2V0KCkgJiYgbV9yZXF1
ZXN0VGV4dC5sZW5ndGgoKSAmJiBtX3JlcXVlc3RTZXF1ZW5jZSA9PSBzZXF1ZW5jZTsKKyAgICBy
ZXR1cm4gY2xpZW50KCkgJiYgaXNDaGVja2FibGUocmFuZ2UpICYmIGlzQXN5bmNocm9ub3VzRW5h
YmxlZCgpOwogfQogCiBib29sIFNwZWxsQ2hlY2tlcjo6aXNDaGVja2FibGUoUmFuZ2UqIHJhbmdl
KSBjb25zdApAQCAtMTIxLDkgKzE0MiwxNyBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6ZG9SZXF1ZXN0
Q2hlY2tpbmdGb3IoVGV4dENoZWNraW5nVHlwZU1hc2sgbWFzaywgUGFzc1JlZlB0cjxSYQogewog
ICAgIEFTU0VSVChjYW5DaGVja0FzeW5jaHJvbm91c2x5KHJhbmdlLmdldCgpKSk7CiAKLSAgICBp
ZiAoIWluaXRSZXF1ZXN0KHJhbmdlKSkKKyAgICBPd25QdHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJl
cXVlc3QoY3JlYXRlUmVxdWVzdChtYXNrLCByYW5nZSkpOworICAgIGlmICghcmVxdWVzdCkKICAg
ICAgICAgcmV0dXJuOwotICAgIGNsaWVudCgpLT5yZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh0aGlz
LCBtX3JlcXVlc3RTZXF1ZW5jZSwgbWFzaywgbV9yZXF1ZXN0VGV4dCk7CisKKyAgICBpZiAobV9w
cm9jZXNzaW5nUmVxdWVzdCkgeworICAgICAgICBtX3F1ZXVlZFJlcXVlc3QgPSByZXF1ZXN0LnJl
bGVhc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNsaWVudCgpLT5yZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyh0aGlzLCByZXF1ZXN0LT5zZXF1ZW5jZSgpLCByZXF1ZXN0LT5tYXNr
KCksIHJlcXVlc3QtPnRleHQoKSk7CisgICAgbV9wcm9jZXNzaW5nUmVxdWVzdCA9IHJlcXVlc3Qu
cmVsZWFzZSgpOwogfQogCiBzdGF0aWMgYm9vbCBmb3J3YXJkSXRlcmF0b3IoUG9zaXRpb25JdGVy
YXRvciYgaXRlcmF0b3IsIGludCBkaXN0YW5jZSkKQEAgLTE1OSwxNiArMTg4LDEzIEBAIHN0YXRp
YyBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0b01hcmtlclR5cGUoVGV4dENoZWNraW5nVHlw
ZSB0eXBlKQogLy8gQ3VycmVubnRseSBpZ25vcmluZyBUZXh0Q2hlY2tpbmdSZXN1bHQ6OmRldGFp
bHMgYnV0IHNob3VsZCBiZSBoYW5kbGVkLiBTZWUgQnVnIDU2MzY4Lgogdm9pZCBTcGVsbENoZWNr
ZXI6OmRpZENoZWNrKGludCBzZXF1ZW5jZSwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4mIHJlc3VsdHMpCiB7Ci0gICAgaWYgKCFpc1ZhbGlkKHNlcXVlbmNlKSkKLSAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVChtX3Byb2Nlc3NpbmdSZXF1ZXN0KTsKIAotICAgIGlmICghaXNDaGVj
a2FibGUobV9yZXF1ZXN0UmFuZ2UuZ2V0KCkpKSB7Ci0gICAgICAgIGNsZWFyUmVxdWVzdCgpOwor
ICAgIGlmIChtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5zZXF1ZW5jZSgpICE9IHNlcXVlbmNlKQogICAg
ICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICBQb3Np
dGlvbkl0ZXJhdG9yIHN0YXJ0ID0gbV9yZXF1ZXN0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAg
ICBQb3NpdGlvbkl0ZXJhdG9yIHN0YXJ0ID0gbV9wcm9jZXNzaW5nUmVxdWVzdC0+cmFuZ2UoKS0+
c3RhcnRQb3NpdGlvbigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0cy5zaXpl
KCk7ICsraSkgewogICAgICAgICBpZiAocmVzdWx0c1tpXS50eXBlICE9IFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZyAmJiByZXN1bHRzW2ldLnR5cGUgIT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIp
CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE4NiwxNyArMjEyLDE3IEBAIHZvaWQgU3BlbGxD
aGVja2VyOjpkaWRDaGVjayhpbnQgc2VxdWVuY2UsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+JiByZXN1CiAgICAgICAgIC8vIHNwZWxsaW5ncyBpbiB0aGUgYmFja2dyb3VuZC4gVG8g
YXZvaWQgYWRkaW5nIG1hcmtlcnMgdG8gdGhlIHdvcmRzIG1vZGlmaWVkIGJ5IHVzZXJzIG9yCiAg
ICAgICAgIC8vIEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCByZXRyaWV2ZSB0aGUgd29yZHMgaW4g
dGhlIHNwZWNpZmllZCByZWdpb24gYW5kIGNvbXBhcmUgdGhlbSB3aXRoCiAgICAgICAgIC8vIHRo
ZSBvcmlnaW5hbCBvbmVzLgotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShtX3JlcXVlc3RSYW5nZS0+b3duZXJEb2N1bWVudCgpLCBzdGFydCwgZW5kKTsKKyAgICAg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9wcm9jZXNzaW5nUmVxdWVz
dC0+cmFuZ2UoKS0+b3duZXJEb2N1bWVudCgpLCBzdGFydCwgZW5kKTsKICAgICAgICAgLy8gRklY
TUU6IFVzZSB0ZXh0Q29udGVudCgpIGNvbXBhdGlibGUgc3RyaW5nIGNvbnZlcnNpb24uCiAgICAg
ICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IHJhbmdlLT50ZXh0KCk7Ci0gICAgICAgIFN0cmluZyBz
b3VyY2UgPSBtX3JlcXVlc3RUZXh0LnN1YnN0cmluZyhyZXN1bHRzW2ldLmxvY2F0aW9uLCByZXN1
bHRzW2ldLmxlbmd0aCk7CisgICAgICAgIFN0cmluZyBzb3VyY2UgPSBtX3Byb2Nlc3NpbmdSZXF1
ZXN0LT50ZXh0KCkuc3Vic3RyaW5nKHJlc3VsdHNbaV0ubG9jYXRpb24sIHJlc3VsdHNbaV0ubGVu
Z3RoKTsKICAgICAgICAgaWYgKGRlc3RpbmF0aW9uID09IHNvdXJjZSkKLSAgICAgICAgICAgIG1f
cmVxdWVzdFJhbmdlLT5vd25lckRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJhbmdl
LmdldCgpLCB0b01hcmtlclR5cGUocmVzdWx0c1tpXS50eXBlKSk7CisgICAgICAgICAgICBtX3By
b2Nlc3NpbmdSZXF1ZXN0LT5yYW5nZSgpLT5vd25lckRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRk
TWFya2VyKHJhbmdlLmdldCgpLCB0b01hcmtlclR5cGUocmVzdWx0c1tpXS50eXBlKSk7CiAKICAg
ICAgICAgc3RhcnRPZmZzZXQgPSByZXN1bHRzW2ldLmxvY2F0aW9uOwogICAgIH0KIAotICAgIGNs
ZWFyUmVxdWVzdCgpOworICAgIHByb2Nlc3NRdWV1ZWRSZXF1ZXN0KCk7CiB9CiAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggM2E0MTQ4OTkzYWE3YTM5MGQzNDM0Mjk4
N2MyYWIwODgzODdjOGE5MS4uYWI4MDdiNzhiNmMzMTBlNGU4ZDUyZmZmNTg0MzYwMzYwZjFiMWMx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5o
IgorI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ3LDI0ICs0
OCwyNyBAQCBwdWJsaWM6CiAgICAgflNwZWxsQ2hlY2tlcigpOwogCiAgICAgYm9vbCBpc0FzeW5j
aHJvbm91c0VuYWJsZWQoKSBjb25zdDsKLSAgICBib29sIGNhbkNoZWNrQXN5bmNocm9ub3VzbHko
UmFuZ2UqKSBjb25zdDsKLSAgICBib29sIGlzQnVzeSgpIGNvbnN0OwotICAgIGJvb2wgaXNWYWxp
ZChpbnQgc2VxdWVuY2UpIGNvbnN0OwogICAgIGJvb2wgaXNDaGVja2FibGUoUmFuZ2UqKSBjb25z
dDsKICAgICB2b2lkIHJlcXVlc3RDaGVja2luZ0ZvcihUZXh0Q2hlY2tpbmdUeXBlTWFzaywgUGFz
c1JlZlB0cjxSYW5nZT4pOwogICAgIHZvaWQgZGlkQ2hlY2soaW50IHNlcXVlbmNlLCBjb25zdCBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpOwogCiBwcml2YXRlOgotICAgIGJvb2wgaW5pdFJl
cXVlc3QoUGFzc1JlZlB0cjxSYW5nZT4pOwotICAgIHZvaWQgY2xlYXJSZXF1ZXN0KCk7CisgICAg
Y2xhc3MgU3BlbGxDaGVja1JlcXVlc3Q7CisKKyAgICBib29sIGNhbkNoZWNrQXN5bmNocm9ub3Vz
bHkoUmFuZ2UqKSBjb25zdDsKKyAgICBQYXNzT3duUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiBjcmVh
dGVSZXF1ZXN0KFRleHRDaGVja2luZ1R5cGVNYXNrLCBQYXNzUmVmUHRyPFJhbmdlPik7CisgICAg
dm9pZCBwcm9jZXNzUXVldWVkUmVxdWVzdCgpOwogICAgIHZvaWQgZG9SZXF1ZXN0Q2hlY2tpbmdG
b3IoVGV4dENoZWNraW5nVHlwZU1hc2ssIFBhc3NSZWZQdHI8UmFuZ2U+KTsKICAgICBUZXh0Q2hl
Y2tlckNsaWVudCogY2xpZW50KCkgY29uc3Q7CisgICAgdm9pZCB0aW1lckZpcmVkVG9Qcm9jZXNz
UXVldWVkUmVxdWVzdChUaW1lcjxTcGVsbENoZWNrZXI+Kik7CiAKICAgICBGcmFtZSogbV9mcmFt
ZTsKKyAgICBpbnQgbV9sYXN0UmVxdWVzdGVkU2VxdWVuY2U7CisKKyAgICBUaW1lcjxTcGVsbENo
ZWNrZXI+IG1fdGltZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0OwogCi0gICAgUmVmUHRyPFJhbmdl
PiBtX3JlcXVlc3RSYW5nZTsKLSAgICBTdHJpbmcgbV9yZXF1ZXN0VGV4dDsKLSAgICBpbnQgbV9y
ZXF1ZXN0U2VxdWVuY2U7CisgICAgT3duUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiBtX3Byb2Nlc3Np
bmdSZXF1ZXN0OworICAgIE93blB0cjxTcGVsbENoZWNrUmVxdWVzdD4gbV9xdWV1ZWRSZXF1ZXN0
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBlMWUwMmU1NTgxNWY1OGRm
NWJjYTI5MzMyMTA4YjQ5NTQxNWNjNDcuLmRhOWJmYTUzZWUxZTc5YWUwMDdkNjVmOGJjYzkwYTM4
YTBlNDNkZjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMS0zMCAgU2hpbnlhIEthd2Fu
YWthICA8c2hpbnlha0Bnb29nbGUuY29tPgorCisgICAgICAgIEFzeW5jaHJvbm91cyBTcGVsbENo
ZWNrZXIgc2hvdWxkIGNvbnNpZGVyIG11bHRpcGxlIHJlcXVlc3RzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5MzkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBmb3IgbXVsdGlwbGUgc3BlbGxj
aGVjayByZXF1ZXN0cy4KKworICAgICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1x
dWV1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3Bl
bGxjaGVjay1xdWV1ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBl
ZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorCiAyMDExLTExLTMwICBWaW5jZW50
IFNjaGVpYiAgPHNjaGVpYkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmViYXNpbmcgbWFueSBT
VkcgdGV4dCAmIHBpeGVsIHRlc3RzIGR1ZSB0byByMTAxNTE3IEFkZCBuZXcgcmVuZGVyZXIgZm9y
IFNWR1JlY3RFbGVtZW50LiBEaWZmZXJlbmNlcyBhcmUgcHJpbWFyaWx5IDEgcGl4ZWwgYm91bmRz
IGRpZmZlcmVuY2VzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3Nw
ZWxsY2hlY2stcXVldWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGlu
Zy9zcGVsbGNoZWNrLXF1ZXVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDIyNGIxMTg1MDY4
MTcyZTBjMGFiMDBmN2U2Mzc5MzZhMzU4ZGQwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDExIEBACitGb3IgQnVnIDcyOTM5OiBBc3luY2hyb25vdXMgU3BlbGxDaGVja2VyIHNob3Vs
ZCBjb25zaWRlciBtdWx0aXBsZSByZXF1ZXN0cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
UEFTUyBJTlBVVCBoYXMgYSBtYXJrZXIgb24gJ2ZvbyBiYXInCitQQVNTIElOUFVUIGhhcyBhIG1h
cmtlciBvbiAnZm9vIGJhcicKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVs
bGluZy9zcGVsbGNoZWNrLXF1ZXVlLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5n
L3NwZWxsY2hlY2stcXVldWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDA5NmUzY2U3MzBkNzlmNjM3ZGQw
ZTRiMDU3ZGI0ZTM3M2JmN2IwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLmh0bWwKQEAgLTAsMCArMSwxMjEgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXNlbGVjdGlvbi1zaGFyZWQu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdGb3IgQnVn
IDcyOTM5OiBBc3luY2hyb25vdXMgU3BlbGxDaGVja2VyIHNob3VsZCBjb25zaWRlciBtdWx0aXBs
ZSByZXF1ZXN0cy4nKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5zZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCh0cnVlKTsKK30KKwor
dmFyIHRlc3RSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Citkb2N1bWVudC5i
b2R5Lmluc2VydEJlZm9yZSh0ZXN0Um9vdCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsKKwor
Cit2YXIgc291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Citzb3VyY2UuaW5u
ZXJIVE1MID0gImZvbyBiYXIiOwordGVzdFJvb3QuYXBwZW5kQ2hpbGQoc291cmNlKTsKKwordmFy
IHRlc3RJbnB1dDEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwordGVzdElucHV0
MS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dCIpOwordGVzdFJvb3QuYXBwZW5kQ2hpbGQodGVz
dElucHV0MSk7Cit2YXIgdGVzdElucHV0MiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0
Iik7Cit0ZXN0SW5wdXQyLnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0Iik7Cit0ZXN0Um9vdC5h
cHBlbmRDaGlsZCh0ZXN0SW5wdXQyKTsKK3ZhciB0ZXN0SW5wdXQzID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiaW5wdXQiKTsKK3Rlc3RJbnB1dDMuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQi
KTsKK3Rlc3RSb290LmFwcGVuZENoaWxkKHRlc3RJbnB1dDMpOworCit2YXIgc2VsID0gd2luZG93
LmdldFNlbGVjdGlvbigpOworCisvLyBBdCBsZWFzdCwgdGVzdElucHV0MSBhbmQgdGVzdElucHV0
MyBzaG91bGQgaGF2ZSBtYXJrZXJzLgordmFyIHRlc3RzID0gWworICAgIGZ1bmN0aW9uKCkgeyB2
ZXJpZnkoc291cmNlLCB0ZXN0SW5wdXQxLCBbWzAsIDNdXSk7IH0sCisgICAgZnVuY3Rpb24oKSB7
IHZlcmlmeShzb3VyY2UsIHRlc3RJbnB1dDMsIFtbMCwgM11dKTsgfQorXTsKKworZnVuY3Rpb24g
dmVyaWZ5SWZBbnkoKQoreworICAgIHZhciBuZXh0ID0gdGVzdHMuc2hpZnQoKTsKKyAgICBpZiAo
bmV4dCkgeworICAgICAgICBuZXh0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0
ZXN0Um9vdC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0QXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoZmFsc2UpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfQorCitmdW5jdGlvbiB2ZXJpZnlNYXJrZXIobm9k
ZSwgZXhwZWN0ZWRNYXJrZWQpCit7CisgICAgbm9kZS5mb2N1cygpOworCisgICAgaWYgKCF3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHZhciBvayA9
IHRydWU7CisgICAgZm9yICh2YXIgaSA9IDA7IG9rICYmIGkgPCBleHBlY3RlZE1hcmtlZC5sZW5n
dGg7ICsraSkKKyAgICAgICAgb2sgPSBvayAmJiBsYXlvdXRUZXN0Q29udHJvbGxlci5oYXNTcGVs
bGluZ01hcmtlcihleHBlY3RlZE1hcmtlZFtpXVswXSwgZXhwZWN0ZWRNYXJrZWRbaV1bMV0pOwor
ICAgIHJldHVybiBvazsKK30KKworZnVuY3Rpb24gY29weUFuZFBhc3RlKHNvdXJjZSwgZGVzdCkK
K3sKKyAgICBzZWwuc2VsZWN0QWxsQ2hpbGRyZW4oc291cmNlKTsKKyAgICBkb2N1bWVudC5leGVj
Q29tbWFuZCgiQ29weSIpOworICAgIGlmIChkZXN0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVu
dCB8fCBkZXN0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkgeworICAgICAgICBkZXN0
LnZhbHVlID0gIiI7CisgICAgICAgIGRlc3QuZm9jdXMoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBkZXN0LmlubmVySFRNTCA9ICIiOworICAgICAgICBzZWwuc2VsZWN0QWxsQ2hpbGRyZW4oZGVz
dCk7CisgICAgfQorICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJQYXN0ZSIpOworfQorCitmdW5j
dGlvbiB2ZXJpZnkoc291cmNlLCBkZXN0LCBleHBlY3RlZE1hcmtlZCkKK3sKKyAgICB2YXIgbnJl
dHJ5ID0gMTA7CisgICAgdmFyIG5zbGVlcCA9IDE7CisgICAgZnVuY3Rpb24gdHJpYWwoKSB7Cisg
ICAgICAgIHZhciB2ZXJpZmllZCA9IHZlcmlmeU1hcmtlcihkZXN0LCBleHBlY3RlZE1hcmtlZCk7
CisgICAgICAgIGlmICh2ZXJpZmllZCkgeworICAgICAgICAgICAgdGVzdFBhc3NlZChkZXN0LnRh
Z05hbWUgKyAiIGhhcyBhIG1hcmtlciBvbiAnIiArIHNvdXJjZS5pbm5lckhUTUwgKyAiJyIpOwor
ICAgICAgICAgICAgdmVyaWZ5SWZBbnkoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIG5yZXRyeS0tOworICAgICAgICBpZiAoMCA9PSBucmV0cnkpIHsKKyAgICAg
ICAgICAgIHRlc3RGYWlsZWQoZGVzdC50YWdOYW1lICsgIiBzaG91bGQgaGF2ZSBhIG1hcmtlciBv
biBmb3IgJyIgKyBzb3VyY2UuaW5uZXJIVE1MICsgIiciKTsKKyAgICAgICAgICAgIHZlcmlmeUlm
QW55KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBuc2xlZXAg
Kj0gMjsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQodHJpYWwsIG5zbGVlcCk7CisgICAgfTsK
KyAgICB0cmlhbCgpOworfQorCit2YXIgZGVzdGluYXRpb25zID0gW3Rlc3RJbnB1dDEsIHRlc3RJ
bnB1dDIsIHRlc3RJbnB1dDNdOworZm9yICh2YXIgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMubGVu
Z3RoOyArK2kpCisgICAgY29weUFuZFBhc3RlKHNvdXJjZSwgZGVzdGluYXRpb25zW2ldKTsKK3Zl
cmlmeUlmQW55KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRl
eCA4OTlhMzgwOTQ2NWQ0MmNhZTJlM2E5NGE3MzMzNWM5NzA2OTQ1MTlmLi44M2Q5NTBjNzc2ZmQ0
YmQyNmYxMmMwNWVhNDU0N2I4MDI0MTQ0NGNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApA
QCAtMTIxNiw2ICsxMjE2LDcgQEAgbWVkaWEvZXZlbnQtYXR0cmlidXRlcy5odG1sCiAjIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDc0MAogZWRpdGluZy9zcGVsbGlu
Zy9zcGVsbGluZy1iYWNrc3BhY2UtYmV0d2Vlbi1saW5lcy5odG1sCiBlZGl0aW5nL3NwZWxsaW5n
L3NwZWxsY2hlY2stcGFzdGUuaHRtbAorZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVl
Lmh0bWwKIAogIyBGb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUw
NzU4CiAjIFRoZXNlIHJlcXVpcmUgRFJUIHNldFNlcmlhbGl6ZUhUVFBMb2FkcyBpbXBsZW1lbnRh
dGlvbiB0byBiZSByZWxpYWJsZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0
L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCmluZGV4IDVhNWUyMWRl
MGE3OGVhYjAxMDE3ODY0MWVjMDlmY2E3ZTRkMDc5YzguLmMyMTYyODQ5ZDY4N2IzYzM3ZWVhZTU0
NzdkZDAxZDY5YTI5NzljYTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1Nr
aXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApAQCAtMTAwMSw2ICsx
MDAxLDcgQEAgZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1hdHRyaWJ1dGUtYXQtY2hpbGQuaHRt
bAogCiAjIEVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoKSBpcyBub3QgaW1w
bGVtZW50ZWQKIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1wYXN0ZS5odG1sCitlZGl0aW5n
L3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUuaHRtbAogCiAjIFtRdF1bR1RLXSBlZGl0aW5nL3Nw
ZWxsaW5nL3NwZWxsY2hlY2stYXN5bmMuaHRtbCBmYWlscwogIyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwMDMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117377</attachid>
            <date>2011-12-01 01:30:39 -0800</date>
            <delta_ts>2011-12-01 02:13:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72939-20111201183037.patch</filename>
            <type>text/plain</type>
            <size>18297</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJhNjU5M2ViYjI2MjQy
ZTljOGVkZDU2ZGM0YzlmMzllMGYyZTQwOC4uNDhlMmI2N2VkYjA4Y2E4ZWQyMDIxZTM2NTQ2YjIz
NzRmNDRjOGQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTEyLTAxICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgQXN5bmNocm9ub3Vz
IFNwZWxsQ2hlY2tlciBzaG91bGQgY29uc2lkZXIgbXVsdGlwbGUgcmVxdWVzdHMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyBTcGVsbENoZWNrZXIg
c2F2ZXMgYSByZXF1ZXN0IHdoZW4gaXQgaXMgcHJvY2Vzc2luZyB0aGUgcHJldmlvdXMgc3BlbGxj
aGVjayByZXF1ZXN0LgorICAgICAgICBJZiB0aGVyZSBpcyBhIHJlcXVlc3QgaGF2aW5nIHRoZSBz
YW1lIHJvb3QgZWRpdGFibGUgZWxlbWVudCwgdGhlIG9sZGVyIHJlcXVlc3QgaXMgcmVwbGFjZWQg
YnkgbmV3ZXIgcmVxdWVzdC4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxs
Y2hlY2stcXVldWUuaHRtbAorCisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpTcGVsbENoZWNrUmVxdWVzdDo6U3BlbGxD
aGVja1JlcXVlc3QpOgorICAgICAgICAgIEEgc3RydWN0dXJlIHRvIGhhdmUgc3BlbGwgY2hlY2sg
cmVxdWVzdC4KKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja1JlcXVl
c3Q6OnNlcXVlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVj
a1JlcXVlc3Q6OnJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxD
aGVja1JlcXVlc3Q6OnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpTcGVs
bENoZWNrUmVxdWVzdDo6bWFzayk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OlNw
ZWxsQ2hlY2tSZXF1ZXN0Ojpyb290RWRpdGFibGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hl
Y2tlcjo6Y3JlYXRlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OnRp
bWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KToKKyAgICAgICAgICBXaGVuIHRpbWVyIGlz
IGZpcmVkLCBxdWV1ZWQgcmVxdWVzdCBpcyBwcm9jZXNzZWQgaWYgYW55LgorICAgICAgICAoV2Vi
Q29yZTo6U3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsQ2hlY2tlcjo6ZG9SZXF1ZXN0Q2hlY2tpbmdGb3IpOgorICAgICAgICAgIFdo
ZW4gdGhlIHNwZWxsY2hlY2tlciBpcyBwcm9jZXNzaW5nIGFub3RoZXIgcmVxdWVzdCwgdGhlIGxh
dGVzdCByZXF1ZXN0IGlzIHF1ZXVlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6
aW52b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmVucXVldWVS
ZXF1ZXN0KToKKyAgICAgICAgICBFbnF1ZXVlcyBhIHJlcXVlc3QuIElmIHRoZXJlIGlzIGFuIG9s
ZGVyIHJlcXVlc3Qgd2hvc2Ugcm9vdCBlZGl0YWJsZSBlbGVtZW50IGlzIHRoZSBzYW1lIGFzIHRo
ZSByZXF1ZXN0LAorICAgICAgICAgIGl0IHdpbGwgYmUgcmVwbGFjZWQuCisgICAgICAgIChXZWJD
b3JlOjpTcGVsbENoZWNrZXI6OmRpZENoZWNrKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hl
Y2tlci5oOgorCiAyMDExLTExLTMwICBMZW8gWWFuZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNv
bS5jbj4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gQWRkIDIgY3BwIGZpbGVzIHRvIHRoZSBCbGFj
a0JlcnJ5IGJ1aWxkIHN5c3RlbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3Bw
CmluZGV4IDFiYzk3NWFmMTcxNjVjYmExOTQyMGU4Y2E2MWYxZDBiMjAxZDE2YTUuLjc1NTdkM2Q2
Y2NiMjE3YTc1YzZkZTk5M2FjYmRlZDMyMTA3ZDU3NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsQ2hlY2tlci5jcHAKQEAgLTQ1LDkgKzQ1LDMzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgU3BlbGxDaGVja2VyOjpTcGVsbENoZWNrUmVxdWVzdCA6IHB1YmxpYyBSZWZD
b3VudGVkPFNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja1JlcXVlc3Q+IHsKK3B1YmxpYzoKKyAgICBT
cGVsbENoZWNrUmVxdWVzdChpbnQgc2VxdWVuY2UsIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlLCBj
b25zdCBTdHJpbmcmIHRleHQsIFRleHRDaGVja2luZ1R5cGVNYXNrIG1hc2spCisgICAgICAgIDog
bV9zZXF1ZW5jZShzZXF1ZW5jZSkKKyAgICAgICAgLCBtX3JhbmdlKHJhbmdlKQorICAgICAgICAs
IG1fdGV4dCh0ZXh0KQorICAgICAgICAsIG1fbWFzayhtYXNrKQorICAgIHsKKyAgICB9CisKKyAg
ICBpbnQgc2VxdWVuY2UoKSBjb25zdCB7IHJldHVybiBtX3NlcXVlbmNlOyB9CisgICAgUmFuZ2Uq
IHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZS5nZXQoKTsgfQorICAgIGNvbnN0IFN0cmlu
ZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQorICAgIFRleHRDaGVja2luZ1R5cGVN
YXNrIG1hc2soKSBjb25zdCB7IHJldHVybiBtX21hc2s7IH0KKyAgICBFbGVtZW50KiByb290RWRp
dGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gcmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fc2VxdWVuY2U7
CisgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOworICAgIFN0cmluZyBtX3RleHQ7CisgICAgVGV4
dENoZWNraW5nVHlwZU1hc2sgbV9tYXNrOworfTsKKwogU3BlbGxDaGVja2VyOjpTcGVsbENoZWNr
ZXIoRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fcmVxdWVzdFNl
cXVlbmNlKDApCisgICAgLCBtX2xhc3RSZXF1ZXN0ZWRTZXF1ZW5jZSgwKQorICAgICwgbV90aW1l
clRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QodGhpcywgJlNwZWxsQ2hlY2tlcjo6dGltZXJGaXJlZFRv
UHJvY2Vzc1F1ZXVlZFJlcXVlc3QpCiB7CiB9CiAKQEAgLTYzLDI1ICs4NywyNCBAQCBUZXh0Q2hl
Y2tlckNsaWVudCogU3BlbGxDaGVja2VyOjpjbGllbnQoKSBjb25zdAogICAgIHJldHVybiBwYWdl
LT5lZGl0b3JDbGllbnQoKS0+dGV4dENoZWNrZXIoKTsKIH0KIAotYm9vbCBTcGVsbENoZWNrZXI6
OmluaXRSZXF1ZXN0KFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQorUGFzc1JlZlB0cjxTcGVsbENo
ZWNrZXI6OlNwZWxsQ2hlY2tSZXF1ZXN0PiBTcGVsbENoZWNrZXI6OmNyZWF0ZVJlcXVlc3QoVGV4
dENoZWNraW5nVHlwZU1hc2sgbWFzaywgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UpCiB7CiAgICAg
QVNTRVJUKGNhbkNoZWNrQXN5bmNocm9ub3VzbHkocmFuZ2UuZ2V0KCkpKTsKIAogICAgIFN0cmlu
ZyB0ZXh0ID0gcmFuZ2UtPnRleHQoKTsKICAgICBpZiAoIXRleHQubGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVl
c3Q+KCk7CiAKLSAgICBtX3JlcXVlc3RSYW5nZSA9IHJhbmdlOwotICAgIG1fcmVxdWVzdFRleHQg
PSB0ZXh0OwotICAgIG1fcmVxdWVzdFNlcXVlbmNlKys7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNwZWxsQ2hlY2tSZXF1ZXN0KCsrbV9sYXN0UmVxdWVzdGVk
U2VxdWVuY2UsIHJhbmdlLCB0ZXh0LCBtYXNrKSk7CiB9CiAKLXZvaWQgU3BlbGxDaGVja2VyOjpj
bGVhclJlcXVlc3QoKQordm9pZCBTcGVsbENoZWNrZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1
ZWRSZXF1ZXN0KFRpbWVyPFNwZWxsQ2hlY2tlcj4qKQogewotICAgIG1fcmVxdWVzdFJhbmdlLmNs
ZWFyKCk7Ci0gICAgbV9yZXF1ZXN0VGV4dCA9IFN0cmluZygpOworICAgIEFTU0VSVCghbV9yZXF1
ZXN0UXVldWUuaXNFbXB0eSgpKTsKKyAgICBpZiAobV9yZXF1ZXN0UXVldWUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbnZva2VSZXF1ZXN0KG1fcmVxdWVzdFF1ZXVlLnRha2VG
aXJzdCgpKTsKIH0KIAogYm9vbCBTcGVsbENoZWNrZXI6OmlzQXN5bmNocm9ub3VzRW5hYmxlZCgp
IGNvbnN0CkBAIC05MSwxNyArMTE0LDcgQEAgYm9vbCBTcGVsbENoZWNrZXI6OmlzQXN5bmNocm9u
b3VzRW5hYmxlZCgpIGNvbnN0CiAKIGJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJv
bm91c2x5KFJhbmdlKiByYW5nZSkgY29uc3QKIHsKLSAgICByZXR1cm4gY2xpZW50KCkgJiYgaXND
aGVja2FibGUocmFuZ2UpICYmIGlzQXN5bmNocm9ub3VzRW5hYmxlZCgpICYmICFpc0J1c3koKTsK
LX0KLQotYm9vbCBTcGVsbENoZWNrZXI6OmlzQnVzeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cmVxdWVzdFJhbmdlLmdldCgpOwotfQotCi1ib29sIFNwZWxsQ2hlY2tlcjo6aXNWYWxpZChpbnQg
c2VxdWVuY2UpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVxdWVzdFJhbmdlLmdldCgpICYmIG1f
cmVxdWVzdFRleHQubGVuZ3RoKCkgJiYgbV9yZXF1ZXN0U2VxdWVuY2UgPT0gc2VxdWVuY2U7Cisg
ICAgcmV0dXJuIGNsaWVudCgpICYmIGlzQ2hlY2thYmxlKHJhbmdlKSAmJiBpc0FzeW5jaHJvbm91
c0VuYWJsZWQoKTsKIH0KIAogYm9vbCBTcGVsbENoZWNrZXI6OmlzQ2hlY2thYmxlKFJhbmdlKiBy
YW5nZSkgY29uc3QKQEAgLTEyMSw5ICsxMzQsNDAgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRvUmVx
dWVzdENoZWNraW5nRm9yKFRleHRDaGVja2luZ1R5cGVNYXNrIG1hc2ssIFBhc3NSZWZQdHI8UmEK
IHsKICAgICBBU1NFUlQoY2FuQ2hlY2tBc3luY2hyb25vdXNseShyYW5nZS5nZXQoKSkpOwogCi0g
ICAgaWYgKCFpbml0UmVxdWVzdChyYW5nZSkpCisgICAgUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0
PiByZXF1ZXN0KGNyZWF0ZVJlcXVlc3QobWFzaywgcmFuZ2UpKTsKKyAgICBpZiAoIXJlcXVlc3Qp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVz
dC5pc0FjdGl2ZSgpIHx8IG1fcHJvY2Vzc2luZ1JlcXVlc3QpIHsKKyAgICAgICAgZW5xdWV1ZVJl
cXVlc3QocmVxdWVzdC5yZWxlYXNlKCkpOwogICAgICAgICByZXR1cm47Ci0gICAgY2xpZW50KCkt
PnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHRoaXMsIG1fcmVxdWVzdFNlcXVlbmNlLCBtYXNrLCBt
X3JlcXVlc3RUZXh0KTsKKyAgICB9CisKKyAgICBpbnZva2VSZXF1ZXN0KHJlcXVlc3QucmVsZWFz
ZSgpKTsKK30KKwordm9pZCBTcGVsbENoZWNrZXI6Omludm9rZVJlcXVlc3QoUGFzc1JlZlB0cjxT
cGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoIW1fcHJvY2Vzc2luZ1Jl
cXVlc3QpOworCisgICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHRoaXMsIHJl
cXVlc3QtPnNlcXVlbmNlKCksIHJlcXVlc3QtPm1hc2soKSwgcmVxdWVzdC0+dGV4dCgpKTsKKyAg
ICBtX3Byb2Nlc3NpbmdSZXF1ZXN0ID0gcmVxdWVzdDsKK30KKwordm9pZCBTcGVsbENoZWNrZXI6
OmVucXVldWVSZXF1ZXN0KFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVlc3QpCit7
CisgICAgQVNTRVJUKHJlcXVlc3QpOworCisgICAgZm9yIChSZXF1ZXN0UXVldWU6Oml0ZXJhdG9y
IGl0ID0gbV9yZXF1ZXN0UXVldWUuYmVnaW4oKTsgaXQgIT0gbV9yZXF1ZXN0UXVldWUuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgaWYgKHJlcXVlc3QtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSAo
Kml0KS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJSRU1PVkVEIVxuIik7CisgICAgICAgICppdCA9IHJlcXVl
c3Q7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3JlcXVlc3RRdWV1ZS5hcHBlbmQo
cmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBib29sIGZvcndhcmRJdGVyYXRvcihQb3NpdGlvbkl0ZXJh
dG9yJiBpdGVyYXRvciwgaW50IGRpc3RhbmNlKQpAQCAtMTU5LDE2ICsyMDMsMTYgQEAgc3RhdGlj
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHRvTWFya2VyVHlwZShUZXh0Q2hlY2tpbmdUeXBl
IHR5cGUpCiAvLyBDdXJyZW5udGx5IGlnbm9yaW5nIFRleHRDaGVja2luZ1Jlc3VsdDo6ZGV0YWls
cyBidXQgc2hvdWxkIGJlIGhhbmRsZWQuIFNlZSBCdWcgNTYzNjguCiB2b2lkIFNwZWxsQ2hlY2tl
cjo6ZGlkQ2hlY2soaW50IHNlcXVlbmNlLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiYgcmVzdWx0cykKIHsKLSAgICBpZiAoIWlzVmFsaWQoc2VxdWVuY2UpKQotICAgICAgICByZXR1
cm47CisgICAgQVNTRVJUKG1fcHJvY2Vzc2luZ1JlcXVlc3QpOwogCi0gICAgaWYgKCFpc0NoZWNr
YWJsZShtX3JlcXVlc3RSYW5nZS5nZXQoKSkpIHsKLSAgICAgICAgY2xlYXJSZXF1ZXN0KCk7Cisg
ICAgQVNTRVJUKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPnNlcXVlbmNlKCkgPT0gc2VxdWVuY2UpOwor
ICAgIGlmIChtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5zZXF1ZW5jZSgpICE9IHNlcXVlbmNlKSB7Cisg
ICAgICAgIG1fcmVxdWVzdFF1ZXVlLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIFBvc2l0aW9uSXRlcmF0b3Igc3RhcnQgPSBt
X3JlcXVlc3RSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgIFBvc2l0aW9uSXRlcmF0b3Igc3Rh
cnQgPSBtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5yYW5nZSgpLT5zdGFydFBvc2l0aW9uKCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlm
IChyZXN1bHRzW2ldLnR5cGUgIT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdHNb
aV0udHlwZSAhPSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikKICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtMTg2LDE3ICsyMzAsMTkgQEAgdm9pZCBTcGVsbENoZWNrZXI6OmRpZENoZWNrKGludCBz
ZXF1ZW5jZSwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3UKICAgICAgICAg
Ly8gc3BlbGxpbmdzIGluIHRoZSBiYWNrZ3JvdW5kLiBUbyBhdm9pZCBhZGRpbmcgbWFya2VycyB0
byB0aGUgd29yZHMgbW9kaWZpZWQgYnkgdXNlcnMgb3IKICAgICAgICAgLy8gSmF2YVNjcmlwdCBh
cHBsaWNhdGlvbnMsIHJldHJpZXZlIHRoZSB3b3JkcyBpbiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBh
bmQgY29tcGFyZSB0aGVtIHdpdGgKICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIG9uZXMuCi0gICAg
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fcmVxdWVzdFJhbmdlLT5v
d25lckRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5yYW5nZSgpLT5vd25lckRvY3Vt
ZW50KCksIHN0YXJ0LCBlbmQpOwogICAgICAgICAvLyBGSVhNRTogVXNlIHRleHRDb250ZW50KCkg
Y29tcGF0aWJsZSBzdHJpbmcgY29udmVyc2lvbi4KICAgICAgICAgU3RyaW5nIGRlc3RpbmF0aW9u
ID0gcmFuZ2UtPnRleHQoKTsKLSAgICAgICAgU3RyaW5nIHNvdXJjZSA9IG1fcmVxdWVzdFRleHQu
c3Vic3RyaW5nKHJlc3VsdHNbaV0ubG9jYXRpb24sIHJlc3VsdHNbaV0ubGVuZ3RoKTsKKyAgICAg
ICAgU3RyaW5nIHNvdXJjZSA9IG1fcHJvY2Vzc2luZ1JlcXVlc3QtPnRleHQoKS5zdWJzdHJpbmco
cmVzdWx0c1tpXS5sb2NhdGlvbiwgcmVzdWx0c1tpXS5sZW5ndGgpOwogICAgICAgICBpZiAoZGVz
dGluYXRpb24gPT0gc291cmNlKQotICAgICAgICAgICAgbV9yZXF1ZXN0UmFuZ2UtPm93bmVyRG9j
dW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIHRvTWFya2VyVHlwZShy
ZXN1bHRzW2ldLnR5cGUpKTsKKyAgICAgICAgICAgIG1fcHJvY2Vzc2luZ1JlcXVlc3QtPnJhbmdl
KCktPm93bmVyRG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIHRv
TWFya2VyVHlwZShyZXN1bHRzW2ldLnR5cGUpKTsKIAogICAgICAgICBzdGFydE9mZnNldCA9IHJl
c3VsdHNbaV0ubG9jYXRpb247CiAgICAgfQogCi0gICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgbV9w
cm9jZXNzaW5nUmVxdWVzdC5jbGVhcigpOworICAgIGlmICghbV9yZXF1ZXN0UXVldWUuaXNFbXB0
eSgpKQorICAgICAgICBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVxdWVzdC5zdGFydE9uZVNob3Qo
MCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNr
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKaW5kZXggM2E0MTQ4
OTkzYWE3YTM5MGQzNDM0Mjk4N2MyYWIwODgzODdjOGE5MS4uYzBmZTI1MGQ3MTViYTFmNzdjMDcx
NDAxMzc4MmFlNTNkOTI3NTA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbENoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5o
CkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgIlRleHRDaGVja2luZy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ3LDI0ICs0OSwyOSBAQCBwdWJsaWM6
CiAgICAgflNwZWxsQ2hlY2tlcigpOwogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0VuYWJsZWQo
KSBjb25zdDsKLSAgICBib29sIGNhbkNoZWNrQXN5bmNocm9ub3VzbHkoUmFuZ2UqKSBjb25zdDsK
LSAgICBib29sIGlzQnVzeSgpIGNvbnN0OwotICAgIGJvb2wgaXNWYWxpZChpbnQgc2VxdWVuY2Up
IGNvbnN0OwogICAgIGJvb2wgaXNDaGVja2FibGUoUmFuZ2UqKSBjb25zdDsKICAgICB2b2lkIHJl
cXVlc3RDaGVja2luZ0ZvcihUZXh0Q2hlY2tpbmdUeXBlTWFzaywgUGFzc1JlZlB0cjxSYW5nZT4p
OwogICAgIHZvaWQgZGlkQ2hlY2soaW50IHNlcXVlbmNlLCBjb25zdCBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiYpOwogCiBwcml2YXRlOgotICAgIGJvb2wgaW5pdFJlcXVlc3QoUGFzc1JlZlB0
cjxSYW5nZT4pOwotICAgIHZvaWQgY2xlYXJSZXF1ZXN0KCk7CisgICAgY2xhc3MgU3BlbGxDaGVj
a1JlcXVlc3Q7CisgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+ID4g
UmVxdWVzdFF1ZXVlOworCisgICAgYm9vbCBjYW5DaGVja0FzeW5jaHJvbm91c2x5KFJhbmdlKikg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gY3JlYXRlUmVxdWVzdChU
ZXh0Q2hlY2tpbmdUeXBlTWFzaywgUGFzc1JlZlB0cjxSYW5nZT4pOwogICAgIHZvaWQgZG9SZXF1
ZXN0Q2hlY2tpbmdGb3IoVGV4dENoZWNraW5nVHlwZU1hc2ssIFBhc3NSZWZQdHI8UmFuZ2U+KTsK
ICAgICBUZXh0Q2hlY2tlckNsaWVudCogY2xpZW50KCkgY29uc3Q7CisgICAgdm9pZCB0aW1lckZp
cmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdChUaW1lcjxTcGVsbENoZWNrZXI+Kik7CisgICAgdm9p
ZCBpbnZva2VSZXF1ZXN0KFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+KTsKKyAgICB2b2lk
IGVucXVldWVSZXF1ZXN0KFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+KTsKIAogICAgIEZy
YW1lKiBtX2ZyYW1lOworICAgIGludCBtX2xhc3RSZXF1ZXN0ZWRTZXF1ZW5jZTsKKworICAgIFRp
bWVyPFNwZWxsQ2hlY2tlcj4gbV90aW1lclRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3Q7CiAKLSAgICBS
ZWZQdHI8UmFuZ2U+IG1fcmVxdWVzdFJhbmdlOwotICAgIFN0cmluZyBtX3JlcXVlc3RUZXh0Owot
ICAgIGludCBtX3JlcXVlc3RTZXF1ZW5jZTsKKyAgICBSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+
IG1fcHJvY2Vzc2luZ1JlcXVlc3Q7CisgICAgUmVxdWVzdFF1ZXVlIG1fcmVxdWVzdFF1ZXVlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBlMWUwMmU1NTgxNWY1OGRmNWJj
YTI5MzMyMTA4YjQ5NTQxNWNjNDcuLmIxZTY5MzZhMjQzMDQyYTQ4MmM5ZmIwNTIzY2ZmZTk0M2Zi
ZGE4NmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMi0wMSAgU2hpbnlhIEthd2FuYWth
ICA8c2hpbnlha0Bnb29nbGUuY29tPgorCisgICAgICAgIEFzeW5jaHJvbm91cyBTcGVsbENoZWNr
ZXIgc2hvdWxkIGNvbnNpZGVyIG11bHRpcGxlIHJlcXVlc3RzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5MzkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBmb3IgbXVsdGlwbGUgc3BlbGxjaGVj
ayByZXF1ZXN0cy4KKworICAgICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1xdWV1
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxj
aGVjay1xdWV1ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorCiAyMDExLTExLTMwICBWaW5jZW50IFNj
aGVpYiAgPHNjaGVpYkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmViYXNpbmcgbWFueSBTVkcg
dGV4dCAmIHBpeGVsIHRlc3RzIGR1ZSB0byByMTAxNTE3IEFkZCBuZXcgcmVuZGVyZXIgZm9yIFNW
R1JlY3RFbGVtZW50LiBEaWZmZXJlbmNlcyBhcmUgcHJpbWFyaWx5IDEgcGl4ZWwgYm91bmRzIGRp
ZmZlcmVuY2VzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxs
Y2hlY2stcXVldWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9z
cGVsbGNoZWNrLXF1ZXVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODhjNTVjYzgyNDIyMTcy
NmMzODIyNTYwNzI2MzA3MWUyNjRiNmRiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDE4IEBACitGb3IgQnVnIDcyOTM5OiBBc3luY2hyb25vdXMgU3BlbGxDaGVja2VyIHNob3VsZCBj
b25zaWRlciBtdWx0aXBsZSByZXF1ZXN0cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorUEFT
UyBJTlBVVCBoYXMgYSBtYXJrZXIgb24gJ3p6IGFwcGxlIG9yYW5nZScKK1BBU1MgVEVYVEFSRUEg
aGFzIGEgbWFya2VyIG9uICd6eiBhcHBsZSBvcmFuZ2UnCitQQVNTIERJViBoYXMgYSBtYXJrZXIg
b24gJ3p6IGFwcGxlIG9yYW5nZScKK1BBU1MgSU5QVVQgaGFzIGEgbWFya2VyIG9uICd6eiBhcHBs
ZSBvcmFuZ2UnCitQQVNTIFRFWFRBUkVBIGhhcyBhIG1hcmtlciBvbiAnenogYXBwbGUgb3Jhbmdl
JworUEFTUyBESVYgaGFzIGEgbWFya2VyIG9uICd6eiBhcHBsZSBvcmFuZ2UnCitQQVNTIElOUFVU
IGhhcyBhIG1hcmtlciBvbiAnenogYXBwbGUgb3JhbmdlJworUEFTUyBURVhUQVJFQSBoYXMgYSBt
YXJrZXIgb24gJ3p6IGFwcGxlIG9yYW5nZScKK1BBU1MgRElWIGhhcyBhIG1hcmtlciBvbiAnenog
YXBwbGUgb3JhbmdlJworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5n
L3NwZWxsY2hlY2stcXVldWUuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3Bl
bGxjaGVjay1xdWV1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmZWVlMmY1YzQ3YzU1ODFmY2MwZTU4ZTQ3
NzJjMGJiZTlkZGJhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Nw
ZWxsaW5nL3NwZWxsY2hlY2stcXVldWUuaHRtbApAQCAtMCwwICsxLDE3MyBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3Qtc2VsZWN0aW9uLXNoYXJlZC5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ0ZvciBCdWcgNzI5
Mzk6IEFzeW5jaHJvbm91cyBTcGVsbENoZWNrZXIgc2hvdWxkIGNvbnNpZGVyIG11bHRpcGxlIHJl
cXVlc3RzLicpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKHRydWUpOworfQorCit2YXIg
dGVzdFJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKK2RvY3VtZW50LmJvZHku
aW5zZXJ0QmVmb3JlKHRlc3RSb290LCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOworCit2YXIg
c291cmNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Citzb3VyY2UuaW5uZXJIVE1M
ID0gInp6IGFwcGxlIG9yYW5nZSI7Cit0ZXN0Um9vdC5hcHBlbmRDaGlsZChzb3VyY2UpOworCitm
dW5jdGlvbiBjcmVhdGVJbnB1dCh0ZXN0Um9vdCkgeworICAgIHZhciBlID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnaW5wdXQnKTsKKyAgICBlLnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0Iik7
CisgICAgdGVzdFJvb3QuYXBwZW5kQ2hpbGQoZSk7CisKKyAgICByZXR1cm4gZTsKK30KKworZnVu
Y3Rpb24gY3JlYXRlVGV4dEFyZWEodGVzdFJvb3QpIHsKKyAgICB2YXIgZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CisgICAgdGVzdFJvb3QuYXBwZW5kQ2hpbGQoZSk7CisK
KyAgICByZXR1cm4gZTsKK30KKworZnVuY3Rpb24gY3JlYXRlQ29udGVudEVkaXRhYmxlKHRlc3RS
b290KSB7CisgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBl
LnNldEF0dHJpYnV0ZSgiY29udGVudEVkaXRhYmxlIiwgInRydWUiKTsKKyAgICB0ZXN0Um9vdC5h
cHBlbmRDaGlsZChlKTsKKworICAgIHJldHVybiBlOworfQorCit2YXIgZGVzdGluYXRpb25zID0g
WworICAgIGNyZWF0ZUlucHV0KHRlc3RSb290KSwKKyAgICBjcmVhdGVUZXh0QXJlYSh0ZXN0Um9v
dCksCisgICAgY3JlYXRlQ29udGVudEVkaXRhYmxlKHRlc3RSb290KSwKKyAgICBjcmVhdGVJbnB1
dCh0ZXN0Um9vdCksCisgICAgY3JlYXRlVGV4dEFyZWEodGVzdFJvb3QpLAorICAgIGNyZWF0ZUNv
bnRlbnRFZGl0YWJsZSh0ZXN0Um9vdCksCisgICAgY3JlYXRlSW5wdXQodGVzdFJvb3QpLAorICAg
IGNyZWF0ZVRleHRBcmVhKHRlc3RSb290KSwKKyAgICBjcmVhdGVDb250ZW50RWRpdGFibGUodGVz
dFJvb3QpLAorXTsKKwordmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKwordmFyIHRl
c3RzID0gW107Citmb3IgKHZhciBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5sZW5ndGg7ICsraSkg
eworICAgIHZhciB0ID0gZnVuY3Rpb24oaSkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7
IHZlcmlmeShzb3VyY2UsIGRlc3RpbmF0aW9uc1tpXSwgWyJ6eiJdKTsgfQorICAgIH0oaSk7Cisg
ICAgdGVzdHMucHVzaCh0KTsKK30KKworZnVuY3Rpb24gdmVyaWZ5SWZBbnkoKQoreworICAgIHZh
ciBuZXh0ID0gdGVzdHMuc2hpZnQoKTsKKyAgICBpZiAobmV4dCkgeworICAgICAgICBuZXh0KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0ZXN0Um9vdC5zdHlsZS5kaXNwbGF5ID0g
Im5vbmUiOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
ZmFsc2UpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAg
fQorfQorCitmdW5jdGlvbiBmaW5kRmlyc3RUZXh0Tm9kZShub2RlKQoreworICAgIGlmIChub2Rl
Lm5vZGVUeXBlID09IDMpIC8vIHRleHQgbm9kZT8KKyAgICAgICAgcmV0dXJuIG5vZGU7CisKKyAg
ICB2YXIgY2hpbGROb2RlcyA9IG5vZGUuY2hpbGROb2RlczsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNoaWxkTm9kZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIG4gPSBmaW5kRmlyc3RU
ZXh0Tm9kZShjaGlsZE5vZGVzW2ldKTsKKyAgICAgICAgaWYgKG4pCisgICAgICAgICAgICByZXR1
cm4gbjsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbDsKK30KKworZnVuY3Rpb24gdmVyaWZ5TWFy
a2VyKG5vZGUsIGV4cGVjdGVkTWFya2VkKQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyIHx8ICF3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB2YXIgdGV4dE5vZGUgPSBudWxsOworICAgIGlmIChub2RlIGluc3RhbmNlb2YgSFRNTElu
cHV0RWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkgeworICAg
ICAgICB2YXIgc2hhZG93ID0gaW50ZXJuYWxzLnNoYWRvd1Jvb3Qobm9kZSk7CisgICAgICAgIHRl
eHROb2RlID0gZmluZEZpcnN0VGV4dE5vZGUoc2hhZG93KTsKKyAgICB9IGVsc2UKKyAgICAgICAg
dGV4dE5vZGUgPSBmaW5kRmlyc3RUZXh0Tm9kZShub2RlKTsKKworICAgIHZhciBudW0gPSBpbnRl
cm5hbHMubWFya2VyQ291bnRGb3JOb2RlKHRleHROb2RlLCAic3BlbGxpbmciKTsKKyAgICBpZiAo
bnVtICE9IGV4cGVjdGVkTWFya2VkLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKKyAgICAgICAgdmFyIHJhbmdlID0gaW50
ZXJuYWxzLm1hcmtlclJhbmdlRm9yTm9kZSh0ZXh0Tm9kZSwgInNwZWxsaW5nIiwgaSk7CisgICAg
ICAgIGlmIChyYW5nZS50b1N0cmluZygpICE9IGV4cGVjdGVkTWFya2VkW2ldKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlv
biBjb3B5QW5kUGFzdGUoc291cmNlLCBkZXN0KQoreworICAgIHNlbC5zZWxlY3RBbGxDaGlsZHJl
bihzb3VyY2UpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJDb3B5Iik7CisKKyAgICBpZiAo
ZGVzdCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHwgZGVzdCBpbnN0YW5jZW9mIEhUTUxU
ZXh0QXJlYUVsZW1lbnQpIHsKKyAgICAgICAgZGVzdC52YWx1ZSA9ICIiOworICAgICAgICBkZXN0
LmZvY3VzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzdC5pbm5lckhUTUwgPSAiIjsKKyAg
ICAgICAgc2VsLnNlbGVjdEFsbENoaWxkcmVuKGRlc3QpOworICAgIH0KKyAgICBkb2N1bWVudC5l
eGVjQ29tbWFuZCgiUGFzdGUiKTsKK30KKworZnVuY3Rpb24gdmVyaWZ5KHNvdXJjZSwgZGVzdCwg
ZXhwZWN0ZWRNYXJrZWQpCit7CisgICAgdmFyIG5yZXRyeSA9IDEwOworICAgIHZhciBuc2xlZXAg
PSAxOworICAgIGZ1bmN0aW9uIHRyaWFsKCkgeworICAgICAgICB2YXIgdmVyaWZpZWQgPSB2ZXJp
ZnlNYXJrZXIoZGVzdCwgZXhwZWN0ZWRNYXJrZWQpOworICAgICAgICBpZiAodmVyaWZpZWQpIHsK
KyAgICAgICAgICAgIHRlc3RQYXNzZWQoZGVzdC50YWdOYW1lICsgIiBoYXMgYSBtYXJrZXIgb24g
JyIgKyBzb3VyY2UuaW5uZXJIVE1MICsgIiciKTsKKyAgICAgICAgICAgIHZlcmlmeUlmQW55KCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBucmV0cnktLTsKKyAg
ICAgICAgaWYgKDAgPT0gbnJldHJ5KSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKGRlc3QudGFn
TmFtZSArICIgc2hvdWxkIGhhdmUgYSBtYXJrZXIgb24gZm9yICciICsgc291cmNlLmlubmVySFRN
TCArICInIik7CisgICAgICAgICAgICB2ZXJpZnlJZkFueSgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgbnNsZWVwICo9IDI7CisgICAgICAgIHdpbmRvdy5zZXRU
aW1lb3V0KHRyaWFsLCBuc2xlZXApOworICAgIH07CisgICAgdHJpYWwoKTsKK30KKworZm9yICh2
YXIgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMubGVuZ3RoOyArK2kpCisgICAgY29weUFuZFBhc3Rl
KHNvdXJjZSwgZGVzdGluYXRpb25zW2ldKTsKK3ZlcmlmeUlmQW55KCk7CisKK3ZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA4OTlhMzgwOTQ2NWQ0MmNhZTJlM2E5NGE3
MzMzNWM5NzA2OTQ1MTlmLi44M2Q5NTBjNzc2ZmQ0YmQyNmYxMmMwNWVhNDU0N2I4MDI0MTQ0NGNj
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtMTIxNiw2ICsxMjE2LDcgQEAgbWVkaWEv
ZXZlbnQtYXR0cmlidXRlcy5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDc0MAogZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy1iYWNrc3BhY2UtYmV0d2Vl
bi1saW5lcy5odG1sCiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcGFzdGUuaHRtbAorZWRp
dGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLmh0bWwKIAogIyBGb3IgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNzU4CiAjIFRoZXNlIHJlcXVpcmUgRFJUIHNl
dFNlcmlhbGl6ZUhUVFBMb2FkcyBpbXBsZW1lbnRhdGlvbiB0byBiZSByZWxpYWJsZS4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9Ta2lwcGVkCmluZGV4IDVhNWUyMWRlMGE3OGVhYjAxMDE3ODY0MWVjMDlmY2E3ZTRk
MDc5YzguLmMyMTYyODQ5ZDY4N2IzYzM3ZWVhZTU0NzdkZDAxZDY5YTI5NzljYTkgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvU2tpcHBlZApAQCAtMTAwMSw2ICsxMDAxLDcgQEAgZWRpdGluZy9zcGVsbGluZy9z
cGVsbGluZy1hdHRyaWJ1dGUtYXQtY2hpbGQuaHRtbAogCiAjIEVkaXRvckNsaWVudDo6cmVxdWVz
dENoZWNraW5nT2ZTdHJpbmcoKSBpcyBub3QgaW1wbGVtZW50ZWQKIGVkaXRpbmcvc3BlbGxpbmcv
c3BlbGxjaGVjay1wYXN0ZS5odG1sCitlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUu
aHRtbAogCiAjIFtRdF1bR1RLXSBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stYXN5bmMuaHRt
bCBmYWlscwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwMDMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117385</attachid>
            <date>2011-12-01 02:13:41 -0800</date>
            <delta_ts>2011-12-04 18:21:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72939-20111201191340.patch</filename>
            <type>text/plain</type>
            <size>18887</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJhNjU5M2ViYjI2MjQy
ZTljOGVkZDU2ZGM0YzlmMzllMGYyZTQwOC4uMGE4MmI1MTMzZWQ4OWNjNTQ4M2VlYWViNjI0NzVj
MDJjNmQ4YWFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTEyLTAxICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgQXN5bmNocm9ub3Vz
IFNwZWxsQ2hlY2tlciBzaG91bGQgY29uc2lkZXIgbXVsdGlwbGUgcmVxdWVzdHMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyBTcGVsbENoZWNrZXIg
c2F2ZXMgYSByZXF1ZXN0IHdoZW4gaXQgaXMgcHJvY2Vzc2luZyB0aGUgcHJldmlvdXMgc3BlbGxj
aGVjayByZXF1ZXN0LgorICAgICAgICBJZiB0aGVyZSBpcyBhIHJlcXVlc3QgaGF2aW5nIHRoZSBz
YW1lIHJvb3QgZWRpdGFibGUgZWxlbWVudCwgdGhlIG9sZGVyIHJlcXVlc3QgaXMgcmVwbGFjZWQg
YnkgbmV3ZXIgcmVxdWVzdC4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxs
Y2hlY2stcXVldWUuaHRtbAorCisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpTcGVsbENoZWNrUmVxdWVzdDo6U3BlbGxD
aGVja1JlcXVlc3QpOgorICAgICAgICAgIEEgc3RydWN0dXJlIHRvIGhhdmUgc3BlbGwgY2hlY2sg
cmVxdWVzdC4KKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja1JlcXVl
c3Q6OnNlcXVlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVj
a1JlcXVlc3Q6OnJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3BlbGxD
aGVja1JlcXVlc3Q6OnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpTcGVs
bENoZWNrUmVxdWVzdDo6bWFzayk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OlNw
ZWxsQ2hlY2tSZXF1ZXN0Ojpyb290RWRpdGFibGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hl
Y2tlcjo6Y3JlYXRlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OnRp
bWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KToKKyAgICAgICAgICBXaGVuIHRpbWVyIGlz
IGZpcmVkLCBxdWV1ZWQgcmVxdWVzdCBpcyBwcm9jZXNzZWQgaWYgYW55LgorICAgICAgICAoV2Vi
Q29yZTo6U3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWxsQ2hlY2tlcjo6cmVxdWVzdENoZWNraW5nRm9yKToKKyAgICAgICAgICBXaGVu
IHRoZSBzcGVsbGNoZWNrZXIgaXMgcHJvY2Vzc2luZyBhbm90aGVyIHJlcXVlc3QsIHRoZSBsYXRl
c3QgcmVxdWVzdCBpcyBxdWV1ZWQuCisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6Omlu
dm9rZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjplbnF1ZXVlUmVx
dWVzdCk6CisgICAgICAgICAgRW5xdWV1ZXMgYSByZXF1ZXN0LiBJZiB0aGVyZSBpcyBhbiBvbGRl
ciByZXF1ZXN0IHdob3NlIHJvb3QgZWRpdGFibGUgZWxlbWVudCBpcyB0aGUgc2FtZSBhcyB0aGUg
cmVxdWVzdCwKKyAgICAgICAgICBpdCB3aWxsIGJlIHJlcGxhY2VkLgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxDaGVja2VyOjpkaWRDaGVjayk6CisgICAgICAgICogZWRpdGluZy9TcGVsbENoZWNr
ZXIuaDoKKwogMjAxMS0xMS0zMCAgTGVvIFlhbmcgIDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20u
Y24+CiAKICAgICAgICAgW0JsYWNrQmVycnldIEFkZCAyIGNwcCBmaWxlcyB0byB0aGUgQmxhY2tC
ZXJyeSBidWlsZCBzeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcApp
bmRleCAxYmM5NzVhZjE3MTY1Y2JhMTk0MjBlOGNhNjFmMWQwYjIwMWQxNmE1Li4xMTA0YTg3ZTVi
ODQ1NzUyMjM3NTU2YjEzNjRkNmIyZjJkYmU3OTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwCkBAIC00NSw5ICs0NSwzNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIFNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja1JlcXVlc3QgOiBwdWJsaWMgUmVmQ291
bnRlZDxTcGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tSZXF1ZXN0PiB7CitwdWJsaWM6CisgICAgU3Bl
bGxDaGVja1JlcXVlc3QoaW50IHNlcXVlbmNlLCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBtYXNrKQorICAgICAgICA6IG1f
c2VxdWVuY2Uoc2VxdWVuY2UpCisgICAgICAgICwgbV9yYW5nZShyYW5nZSkKKyAgICAgICAgLCBt
X3RleHQodGV4dCkKKyAgICAgICAgLCBtX21hc2sobWFzaykKKyAgICAgICAgLCBtX3Jvb3RFZGl0
YWJsZUVsZW1lbnQobV9yYW5nZS0+c3RhcnRDb250YWluZXIoKS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpKQorICAgIHsKKyAgICB9CisKKyAgICBpbnQgc2VxdWVuY2UoKSBjb25zdCB7IHJldHVybiBt
X3NlcXVlbmNlOyB9CisgICAgUmFuZ2UqIHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZS5n
ZXQoKTsgfQorICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsg
fQorICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIG1hc2soKSBjb25zdCB7IHJldHVybiBtX21hc2s7
IH0KKyAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9y
b290RWRpdGFibGVFbGVtZW50OyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1fc2VxdWVuY2U7Cisg
ICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOworICAgIFN0cmluZyBtX3RleHQ7CisgICAgVGV4dENo
ZWNraW5nVHlwZU1hc2sgbV9tYXNrOworICAgIEVsZW1lbnQqIG1fcm9vdEVkaXRhYmxlRWxlbWVu
dDsKK307CisKIFNwZWxsQ2hlY2tlcjo6U3BlbGxDaGVja2VyKEZyYW1lKiBmcmFtZSkKICAgICA6
IG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX3JlcXVlc3RTZXF1ZW5jZSgwKQorICAgICwgbV9sYXN0
UmVxdWVzdGVkU2VxdWVuY2UoMCkKKyAgICAsIG1fdGltZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0
KHRoaXMsICZTcGVsbENoZWNrZXI6OnRpbWVyRmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KQog
ewogfQogCkBAIC02MywyNSArODksMjQgQEAgVGV4dENoZWNrZXJDbGllbnQqIFNwZWxsQ2hlY2tl
cjo6Y2xpZW50KCkgY29uc3QKICAgICByZXR1cm4gcGFnZS0+ZWRpdG9yQ2xpZW50KCktPnRleHRD
aGVja2VyKCk7CiB9CiAKLWJvb2wgU3BlbGxDaGVja2VyOjppbml0UmVxdWVzdChQYXNzUmVmUHRy
PFJhbmdlPiByYW5nZSkKK1Bhc3NSZWZQdHI8U3BlbGxDaGVja2VyOjpTcGVsbENoZWNrUmVxdWVz
dD4gU3BlbGxDaGVja2VyOjpjcmVhdGVSZXF1ZXN0KFRleHRDaGVja2luZ1R5cGVNYXNrIG1hc2ss
IFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQogewogICAgIEFTU0VSVChjYW5DaGVja0FzeW5jaHJv
bm91c2x5KHJhbmdlLmdldCgpKSk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHJhbmdlLT50ZXh0KCk7
CiAgICAgaWYgKCF0ZXh0Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBQYXNzUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PigpOwogCi0gICAgbV9yZXF1ZXN0
UmFuZ2UgPSByYW5nZTsKLSAgICBtX3JlcXVlc3RUZXh0ID0gdGV4dDsKLSAgICBtX3JlcXVlc3RT
ZXF1ZW5jZSsrOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
cGVsbENoZWNrUmVxdWVzdCgrK21fbGFzdFJlcXVlc3RlZFNlcXVlbmNlLCByYW5nZSwgdGV4dCwg
bWFzaykpOwogfQogCi12b2lkIFNwZWxsQ2hlY2tlcjo6Y2xlYXJSZXF1ZXN0KCkKK3ZvaWQgU3Bl
bGxDaGVja2VyOjp0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdChUaW1lcjxTcGVsbENo
ZWNrZXI+KikKIHsKLSAgICBtX3JlcXVlc3RSYW5nZS5jbGVhcigpOwotICAgIG1fcmVxdWVzdFRl
eHQgPSBTdHJpbmcoKTsKKyAgICBBU1NFUlQoIW1fcmVxdWVzdFF1ZXVlLmlzRW1wdHkoKSk7Cisg
ICAgaWYgKG1fcmVxdWVzdFF1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW52b2tlUmVxdWVzdChtX3JlcXVlc3RRdWV1ZS50YWtlRmlyc3QoKSk7CiB9CiAKIGJvb2wgU3Bl
bGxDaGVja2VyOjppc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdApAQCAtOTEsMTcgKzExNiw3
IEBAIGJvb2wgU3BlbGxDaGVja2VyOjppc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogCiBi
b29sIFNwZWxsQ2hlY2tlcjo6Y2FuQ2hlY2tBc3luY2hyb25vdXNseShSYW5nZSogcmFuZ2UpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGNsaWVudCgpICYmIGlzQ2hlY2thYmxlKHJhbmdlKSAmJiBpc0Fz
eW5jaHJvbm91c0VuYWJsZWQoKSAmJiAhaXNCdXN5KCk7Ci19Ci0KLWJvb2wgU3BlbGxDaGVja2Vy
Ojppc0J1c3koKSBjb25zdAotewotICAgIHJldHVybiBtX3JlcXVlc3RSYW5nZS5nZXQoKTsKLX0K
LQotYm9vbCBTcGVsbENoZWNrZXI6OmlzVmFsaWQoaW50IHNlcXVlbmNlKSBjb25zdAotewotICAg
IHJldHVybiBtX3JlcXVlc3RSYW5nZS5nZXQoKSAmJiBtX3JlcXVlc3RUZXh0Lmxlbmd0aCgpICYm
IG1fcmVxdWVzdFNlcXVlbmNlID09IHNlcXVlbmNlOworICAgIHJldHVybiBjbGllbnQoKSAmJiBp
c0NoZWNrYWJsZShyYW5nZSkgJiYgaXNBc3luY2hyb25vdXNFbmFibGVkKCk7CiB9CiAKIGJvb2wg
U3BlbGxDaGVja2VyOjppc0NoZWNrYWJsZShSYW5nZSogcmFuZ2UpIGNvbnN0CkBAIC0xMTQsMTYg
KzEyOSwzOSBAQCB2b2lkIFNwZWxsQ2hlY2tlcjo6cmVxdWVzdENoZWNraW5nRm9yKFRleHRDaGVj
a2luZ1R5cGVNYXNrIG1hc2ssIFBhc3NSZWZQdHI8UmFuZwogICAgIGlmICghY2FuQ2hlY2tBc3lu
Y2hyb25vdXNseShyYW5nZS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvUmVxdWVz
dENoZWNraW5nRm9yKG1hc2ssIHJhbmdlKTsKKyAgICBSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+
IHJlcXVlc3QoY3JlYXRlUmVxdWVzdChtYXNrLCByYW5nZSkpOworICAgIGlmICghcmVxdWVzdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fdGltZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0
LmlzQWN0aXZlKCkgfHwgbV9wcm9jZXNzaW5nUmVxdWVzdCkgeworICAgICAgICBlbnF1ZXVlUmVx
dWVzdChyZXF1ZXN0LnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
bnZva2VSZXF1ZXN0KHJlcXVlc3QucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBTcGVsbENoZWNrZXI6
OmRvUmVxdWVzdENoZWNraW5nRm9yKFRleHRDaGVja2luZ1R5cGVNYXNrIG1hc2ssIFBhc3NSZWZQ
dHI8UmFuZ2U+IHJhbmdlKQordm9pZCBTcGVsbENoZWNrZXI6Omludm9rZVJlcXVlc3QoUGFzc1Jl
ZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCkKIHsKLSAgICBBU1NFUlQoY2FuQ2hlY2tB
c3luY2hyb25vdXNseShyYW5nZS5nZXQoKSkpOworICAgIEFTU0VSVCghbV9wcm9jZXNzaW5nUmVx
dWVzdCk7CisKKyAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcodGhpcywgcmVx
dWVzdC0+c2VxdWVuY2UoKSwgcmVxdWVzdC0+bWFzaygpLCByZXF1ZXN0LT50ZXh0KCkpOworICAg
IG1fcHJvY2Vzc2luZ1JlcXVlc3QgPSByZXF1ZXN0OworfQogCi0gICAgaWYgKCFpbml0UmVxdWVz
dChyYW5nZSkpCit2b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3QoUGFzc1JlZlB0cjxT
cGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQocmVxdWVzdCk7CisKKyAg
ICBmb3IgKFJlcXVlc3RRdWV1ZTo6aXRlcmF0b3IgaXQgPSBtX3JlcXVlc3RRdWV1ZS5iZWdpbigp
OyBpdCAhPSBtX3JlcXVlc3RRdWV1ZS5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAocmVxdWVz
dC0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9ICgqaXQpLT5yb290RWRpdGFibGVFbGVtZW50KCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAqaXQgPSByZXF1ZXN0OwogICAgICAg
ICByZXR1cm47Ci0gICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHRoaXMsIG1f
cmVxdWVzdFNlcXVlbmNlLCBtYXNrLCBtX3JlcXVlc3RUZXh0KTsKKyAgICB9CisKKyAgICBtX3Jl
cXVlc3RRdWV1ZS5hcHBlbmQocmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBib29sIGZvcndhcmRJdGVy
YXRvcihQb3NpdGlvbkl0ZXJhdG9yJiBpdGVyYXRvciwgaW50IGRpc3RhbmNlKQpAQCAtMTU5LDE2
ICsxOTcsMTYgQEAgc3RhdGljIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHRvTWFya2VyVHlw
ZShUZXh0Q2hlY2tpbmdUeXBlIHR5cGUpCiAvLyBDdXJyZW5udGx5IGlnbm9yaW5nIFRleHRDaGVj
a2luZ1Jlc3VsdDo6ZGV0YWlscyBidXQgc2hvdWxkIGJlIGhhbmRsZWQuIFNlZSBCdWcgNTYzNjgu
CiB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2soaW50IHNlcXVlbmNlLCBjb25zdCBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKLSAgICBpZiAoIWlzVmFsaWQoc2VxdWVu
Y2UpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fcHJvY2Vzc2luZ1JlcXVlc3QpOwog
Ci0gICAgaWYgKCFpc0NoZWNrYWJsZShtX3JlcXVlc3RSYW5nZS5nZXQoKSkpIHsKLSAgICAgICAg
Y2xlYXJSZXF1ZXN0KCk7CisgICAgQVNTRVJUKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPnNlcXVlbmNl
KCkgPT0gc2VxdWVuY2UpOworICAgIGlmIChtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5zZXF1ZW5jZSgp
ICE9IHNlcXVlbmNlKSB7CisgICAgICAgIG1fcmVxdWVzdFF1ZXVlLmNsZWFyKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIFBvc2l0aW9u
SXRlcmF0b3Igc3RhcnQgPSBtX3JlcXVlc3RSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgIFBv
c2l0aW9uSXRlcmF0b3Igc3RhcnQgPSBtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5yYW5nZSgpLT5zdGFy
dFBvc2l0aW9uKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIGlmIChyZXN1bHRzW2ldLnR5cGUgIT0gVGV4dENoZWNraW5nVHlwZVNw
ZWxsaW5nICYmIHJlc3VsdHNbaV0udHlwZSAhPSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTg2LDE3ICsyMjQsMTkgQEAgdm9pZCBTcGVsbENoZWNr
ZXI6OmRpZENoZWNrKGludCBzZXF1ZW5jZSwgY29uc3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4mIHJlc3UKICAgICAgICAgLy8gc3BlbGxpbmdzIGluIHRoZSBiYWNrZ3JvdW5kLiBUbyBhdm9p
ZCBhZGRpbmcgbWFya2VycyB0byB0aGUgd29yZHMgbW9kaWZpZWQgYnkgdXNlcnMgb3IKICAgICAg
ICAgLy8gSmF2YVNjcmlwdCBhcHBsaWNhdGlvbnMsIHJldHJpZXZlIHRoZSB3b3JkcyBpbiB0aGUg
c3BlY2lmaWVkIHJlZ2lvbiBhbmQgY29tcGFyZSB0aGVtIHdpdGgKICAgICAgICAgLy8gdGhlIG9y
aWdpbmFsIG9uZXMuCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KG1fcmVxdWVzdFJhbmdlLT5vd25lckRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOworICAgICAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5y
YW5nZSgpLT5vd25lckRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogICAgICAgICAvLyBGSVhNRTog
VXNlIHRleHRDb250ZW50KCkgY29tcGF0aWJsZSBzdHJpbmcgY29udmVyc2lvbi4KICAgICAgICAg
U3RyaW5nIGRlc3RpbmF0aW9uID0gcmFuZ2UtPnRleHQoKTsKLSAgICAgICAgU3RyaW5nIHNvdXJj
ZSA9IG1fcmVxdWVzdFRleHQuc3Vic3RyaW5nKHJlc3VsdHNbaV0ubG9jYXRpb24sIHJlc3VsdHNb
aV0ubGVuZ3RoKTsKKyAgICAgICAgU3RyaW5nIHNvdXJjZSA9IG1fcHJvY2Vzc2luZ1JlcXVlc3Qt
PnRleHQoKS5zdWJzdHJpbmcocmVzdWx0c1tpXS5sb2NhdGlvbiwgcmVzdWx0c1tpXS5sZW5ndGgp
OwogICAgICAgICBpZiAoZGVzdGluYXRpb24gPT0gc291cmNlKQotICAgICAgICAgICAgbV9yZXF1
ZXN0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmFuZ2UuZ2V0
KCksIHRvTWFya2VyVHlwZShyZXN1bHRzW2ldLnR5cGUpKTsKKyAgICAgICAgICAgIG1fcHJvY2Vz
c2luZ1JlcXVlc3QtPnJhbmdlKCktPm93bmVyRG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJr
ZXIocmFuZ2UuZ2V0KCksIHRvTWFya2VyVHlwZShyZXN1bHRzW2ldLnR5cGUpKTsKIAogICAgICAg
ICBzdGFydE9mZnNldCA9IHJlc3VsdHNbaV0ubG9jYXRpb247CiAgICAgfQogCi0gICAgY2xlYXJS
ZXF1ZXN0KCk7CisgICAgbV9wcm9jZXNzaW5nUmVxdWVzdC5jbGVhcigpOworICAgIGlmICghbV9y
ZXF1ZXN0UXVldWUuaXNFbXB0eSgpKQorICAgICAgICBtX3RpbWVyVG9Qcm9jZXNzUXVldWVkUmVx
dWVzdC5zdGFydE9uZVNob3QoMCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbENoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVj
a2VyLmgKaW5kZXggM2E0MTQ4OTkzYWE3YTM5MGQzNDM0Mjk4N2MyYWIwODgzODdjOGE5MS4uNzAy
ZjM2OWQ1NjU3YWViYzQ1OWI1MTEzZjZlMjE2YTVkYzI4ZjFmZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgorI2luY2x1ZGUgIlRpbWVyLmgi
CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ3LDI0
ICs0OSwyOCBAQCBwdWJsaWM6CiAgICAgflNwZWxsQ2hlY2tlcigpOwogCiAgICAgYm9vbCBpc0Fz
eW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKLSAgICBib29sIGNhbkNoZWNrQXN5bmNocm9ub3Vz
bHkoUmFuZ2UqKSBjb25zdDsKLSAgICBib29sIGlzQnVzeSgpIGNvbnN0OwotICAgIGJvb2wgaXNW
YWxpZChpbnQgc2VxdWVuY2UpIGNvbnN0OwogICAgIGJvb2wgaXNDaGVja2FibGUoUmFuZ2UqKSBj
b25zdDsKICAgICB2b2lkIHJlcXVlc3RDaGVja2luZ0ZvcihUZXh0Q2hlY2tpbmdUeXBlTWFzaywg
UGFzc1JlZlB0cjxSYW5nZT4pOwogICAgIHZvaWQgZGlkQ2hlY2soaW50IHNlcXVlbmNlLCBjb25z
dCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpOwogCiBwcml2YXRlOgotICAgIGJvb2wgaW5p
dFJlcXVlc3QoUGFzc1JlZlB0cjxSYW5nZT4pOwotICAgIHZvaWQgY2xlYXJSZXF1ZXN0KCk7Ci0g
ICAgdm9pZCBkb1JlcXVlc3RDaGVja2luZ0ZvcihUZXh0Q2hlY2tpbmdUeXBlTWFzaywgUGFzc1Jl
ZlB0cjxSYW5nZT4pOworICAgIGNsYXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OworICAgIHR5cGVkZWYg
RGVxdWU8UmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiA+IFJlcXVlc3RRdWV1ZTsKKworICAgIGJv
b2wgY2FuQ2hlY2tBc3luY2hyb25vdXNseShSYW5nZSopIGNvbnN0OworICAgIFBhc3NSZWZQdHI8
U3BlbGxDaGVja1JlcXVlc3Q+IGNyZWF0ZVJlcXVlc3QoVGV4dENoZWNraW5nVHlwZU1hc2ssIFBh
c3NSZWZQdHI8UmFuZ2U+KTsKICAgICBUZXh0Q2hlY2tlckNsaWVudCogY2xpZW50KCkgY29uc3Q7
CisgICAgdm9pZCB0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdChUaW1lcjxTcGVsbENo
ZWNrZXI+Kik7CisgICAgdm9pZCBpbnZva2VSZXF1ZXN0KFBhc3NSZWZQdHI8U3BlbGxDaGVja1Jl
cXVlc3Q+KTsKKyAgICB2b2lkIGVucXVldWVSZXF1ZXN0KFBhc3NSZWZQdHI8U3BlbGxDaGVja1Jl
cXVlc3Q+KTsKIAogICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIGludCBtX2xhc3RSZXF1ZXN0ZWRT
ZXF1ZW5jZTsKKworICAgIFRpbWVyPFNwZWxsQ2hlY2tlcj4gbV90aW1lclRvUHJvY2Vzc1F1ZXVl
ZFJlcXVlc3Q7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IG1fcmVxdWVzdFJhbmdlOwotICAgIFN0cmlu
ZyBtX3JlcXVlc3RUZXh0OwotICAgIGludCBtX3JlcXVlc3RTZXF1ZW5jZTsKKyAgICBSZWZQdHI8
U3BlbGxDaGVja1JlcXVlc3Q+IG1fcHJvY2Vzc2luZ1JlcXVlc3Q7CisgICAgUmVxdWVzdFF1ZXVl
IG1fcmVxdWVzdFF1ZXVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBl
MWUwMmU1NTgxNWY1OGRmNWJjYTI5MzMyMTA4YjQ5NTQxNWNjNDcuLmIxZTY5MzZhMjQzMDQyYTQ4
MmM5ZmIwNTIzY2ZmZTk0M2ZiZGE4NmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMi0w
MSAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgorCisgICAgICAgIEFzeW5j
aHJvbm91cyBTcGVsbENoZWNrZXIgc2hvdWxkIGNvbnNpZGVyIG11bHRpcGxlIHJlcXVlc3RzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5MzkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBmb3Ig
bXVsdGlwbGUgc3BlbGxjaGVjayByZXF1ZXN0cy4KKworICAgICAgICAqIGVkaXRpbmcvc3BlbGxp
bmcvc3BlbGxjaGVjay1xdWV1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvc3BlbGxpbmcvc3BlbGxjaGVjay1xdWV1ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorCiAyMDEx
LTExLTMwICBWaW5jZW50IFNjaGVpYiAgPHNjaGVpYkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmViYXNpbmcgbWFueSBTVkcgdGV4dCAmIHBpeGVsIHRlc3RzIGR1ZSB0byByMTAxNTE3IEFkZCBu
ZXcgcmVuZGVyZXIgZm9yIFNWR1JlY3RFbGVtZW50LiBEaWZmZXJlbmNlcyBhcmUgcHJpbWFyaWx5
IDEgcGl4ZWwgYm91bmRzIGRpZmZlcmVuY2VzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0
aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41ODhjNTVjYzgyNDIyMTcyNmMzODIyNTYwNzI2MzA3MWUyNjRiNmRiCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDE4IEBACitGb3IgQnVnIDcyOTM5OiBBc3luY2hyb25vdXMgU3Bl
bGxDaGVja2VyIHNob3VsZCBjb25zaWRlciBtdWx0aXBsZSByZXF1ZXN0cy4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorUEFTUyBJTlBVVCBoYXMgYSBtYXJrZXIgb24gJ3p6IGFwcGxlIG9yYW5n
ZScKK1BBU1MgVEVYVEFSRUEgaGFzIGEgbWFya2VyIG9uICd6eiBhcHBsZSBvcmFuZ2UnCitQQVNT
IERJViBoYXMgYSBtYXJrZXIgb24gJ3p6IGFwcGxlIG9yYW5nZScKK1BBU1MgSU5QVVQgaGFzIGEg
bWFya2VyIG9uICd6eiBhcHBsZSBvcmFuZ2UnCitQQVNTIFRFWFRBUkVBIGhhcyBhIG1hcmtlciBv
biAnenogYXBwbGUgb3JhbmdlJworUEFTUyBESVYgaGFzIGEgbWFya2VyIG9uICd6eiBhcHBsZSBv
cmFuZ2UnCitQQVNTIElOUFVUIGhhcyBhIG1hcmtlciBvbiAnenogYXBwbGUgb3JhbmdlJworUEFT
UyBURVhUQVJFQSBoYXMgYSBtYXJrZXIgb24gJ3p6IGFwcGxlIG9yYW5nZScKK1BBU1MgRElWIGhh
cyBhIG1hcmtlciBvbiAnenogYXBwbGUgb3JhbmdlJworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUuaHRtbCBiL0xheW91dFRlc3RzL2Vk
aXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1xdWV1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhN2U4OWFk
NmJiY2U3NGU2ODNmYmNjMGNjNDY5MjhlOTYzZWIyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUuaHRtbApAQCAtMCwwICsx
LDE4OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3Qtc2Vs
ZWN0aW9uLXNoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3Jp
cHRpb24oJ0ZvciBCdWcgNzI5Mzk6IEFzeW5jaHJvbm91cyBTcGVsbENoZWNrZXIgc2hvdWxkIGNv
bnNpZGVyIG11bHRpcGxlIHJlcXVlc3RzLicpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KHRydWUpOworfQorCit2YXIgdGVzdFJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKK2RvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHRlc3RSb290LCBkb2N1bWVudC5ib2R5LmZp
cnN0Q2hpbGQpOworCit2YXIgc291cmNlMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
Oworc291cmNlMS5pbm5lckhUTUwgPSAiZm9vIGJhciI7Cit0ZXN0Um9vdC5hcHBlbmRDaGlsZChz
b3VyY2UxKTsKKwordmFyIHNvdXJjZTIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
K3NvdXJjZTIuaW5uZXJIVE1MID0gInp6IGFwcGxlIG9yYW5nZSI7Cit0ZXN0Um9vdC5hcHBlbmRD
aGlsZChzb3VyY2UyKTsKKworZnVuY3Rpb24gY3JlYXRlSW5wdXQodGVzdFJvb3QpIHsKKyAgICB2
YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAgZS5zZXRBdHRyaWJ1
dGUoInR5cGUiLCAidGV4dCIpOworICAgIHRlc3RSb290LmFwcGVuZENoaWxkKGUpOworCisgICAg
cmV0dXJuIGU7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRleHRBcmVhKHRlc3RSb290KSB7CisgICAg
dmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOworICAgIHRlc3RSb290
LmFwcGVuZENoaWxkKGUpOworCisgICAgcmV0dXJuIGU7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUNv
bnRlbnRFZGl0YWJsZSh0ZXN0Um9vdCkgeworICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgZS5zZXRBdHRyaWJ1dGUoImNvbnRlbnRFZGl0YWJsZSIsICJ0cnVl
Iik7CisgICAgdGVzdFJvb3QuYXBwZW5kQ2hpbGQoZSk7CisKKyAgICByZXR1cm4gZTsKK30KKwor
dmFyIGRlc3RpbmF0aW9ucyA9IFsKKyAgICBjcmVhdGVJbnB1dCh0ZXN0Um9vdCksCisgICAgY3Jl
YXRlVGV4dEFyZWEodGVzdFJvb3QpLAorICAgIGNyZWF0ZUNvbnRlbnRFZGl0YWJsZSh0ZXN0Um9v
dCksCisgICAgY3JlYXRlSW5wdXQodGVzdFJvb3QpLAorICAgIGNyZWF0ZVRleHRBcmVhKHRlc3RS
b290KSwKKyAgICBjcmVhdGVDb250ZW50RWRpdGFibGUodGVzdFJvb3QpLAorICAgIGNyZWF0ZUlu
cHV0KHRlc3RSb290KSwKKyAgICBjcmVhdGVUZXh0QXJlYSh0ZXN0Um9vdCksCisgICAgY3JlYXRl
Q29udGVudEVkaXRhYmxlKHRlc3RSb290KSwKK107CisKK3ZhciBzZWwgPSB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCk7CisKK3ZhciB0ZXN0cyA9IFtdOworZm9yICh2YXIgaSA9IDA7IGkgPCBkZXN0aW5h
dGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgdCA9IGZ1bmN0aW9uKGkpIHsKKyAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKCkgeyB2ZXJpZnkoc291cmNlMiwgZGVzdGluYXRpb25zW2ldLCBbInp6
Il0pOyB9CisgICAgfShpKTsKKyAgICB0ZXN0cy5wdXNoKHQpOworfQorCitmdW5jdGlvbiB2ZXJp
ZnlJZkFueSgpCit7CisgICAgdmFyIG5leHQgPSB0ZXN0cy5zaGlmdCgpOworICAgIGlmIChuZXh0
KSB7CisgICAgICAgIG5leHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRlc3RS
b290LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRBc3luY2hyb25vdXNT
cGVsbENoZWNraW5nRW5hYmxlZChmYWxzZSk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGZpbmRGaXJzdFRleHROb2RlKG5v
ZGUpCit7CisgICAgZnVuY3Rpb24gaXRlclRvRmluZEZpcnN0VGV4dE5vZGUobm9kZSkKKyAgICB7
CisgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgVGV4dCkKKyAgICAgICAgICAgIHJldHVybiBu
b2RlOworCisgICAgICAgIHZhciBjaGlsZE5vZGVzID0gbm9kZS5jaGlsZE5vZGVzOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgIHZhciBuID0gaXRlclRvRmluZEZpcnN0VGV4dE5vZGUoY2hpbGROb2Rlc1tpXSk7CisgICAg
ICAgICAgICBpZiAobikKKyAgICAgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworCisgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBI
VE1MSW5wdXRFbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KQor
ICAgICAgICByZXR1cm4gaXRlclRvRmluZEZpcnN0VGV4dE5vZGUoaW50ZXJuYWxzLnNoYWRvd1Jv
b3Qobm9kZSkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGl0ZXJUb0ZpbmRGaXJzdFRleHRO
b2RlKG5vZGUpOworfQorCitmdW5jdGlvbiB2ZXJpZnlNYXJrZXIobm9kZSwgZXhwZWN0ZWRNYXJr
ZWQpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIgfHwgIXdpbmRvdy5p
bnRlcm5hbHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhciB0ZXh0Tm9kZSA9IGZp
bmRGaXJzdFRleHROb2RlKG5vZGUpOworCisgICAgdmFyIG51bSA9IGludGVybmFscy5tYXJrZXJD
b3VudEZvck5vZGUodGV4dE5vZGUsICJzcGVsbGluZyIpOworICAgIGlmIChudW0gIT0gZXhwZWN0
ZWRNYXJrZWQubGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW07ICsraSkgeworICAgICAgICB2YXIgcmFuZ2UgPSBpbnRlcm5hbHMubWFya2Vy
UmFuZ2VGb3JOb2RlKHRleHROb2RlLCAic3BlbGxpbmciLCBpKTsKKyAgICAgICAgaWYgKHJhbmdl
LnRvU3RyaW5nKCkgIT0gZXhwZWN0ZWRNYXJrZWRbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGNvcHlBbmRQYXN0
ZShzb3VyY2UsIGRlc3QpCit7CisgICAgc2VsLnNlbGVjdEFsbENoaWxkcmVuKHNvdXJjZSk7Cisg
ICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkNvcHkiKTsKKworICAgIGlmIChkZXN0IGluc3RhbmNl
b2YgSFRNTElucHV0RWxlbWVudCB8fCBkZXN0IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVu
dCkgeworICAgICAgICBkZXN0LnZhbHVlID0gIiI7CisgICAgICAgIGRlc3QuZm9jdXMoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBkZXN0LmlubmVySFRNTCA9ICIiOworICAgICAgICBzZWwuc2Vs
ZWN0QWxsQ2hpbGRyZW4oZGVzdCk7CisgICAgfQorICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJQ
YXN0ZSIpOworfQorCitmdW5jdGlvbiB2ZXJpZnkoc291cmNlLCBkZXN0LCBleHBlY3RlZE1hcmtl
ZCkKK3sKKyAgICB2YXIgbnJldHJ5ID0gMTA7CisgICAgdmFyIG5zbGVlcCA9IDE7CisgICAgZnVu
Y3Rpb24gdHJpYWwoKSB7CisgICAgICAgIHZhciB2ZXJpZmllZCA9IHZlcmlmeU1hcmtlcihkZXN0
LCBleHBlY3RlZE1hcmtlZCk7CisgICAgICAgIGlmICh2ZXJpZmllZCkgeworICAgICAgICAgICAg
dGVzdFBhc3NlZChkZXN0LnRhZ05hbWUgKyAiIGhhcyBhIG1hcmtlciBvbiAnIiArIHNvdXJjZS5p
bm5lckhUTUwgKyAiJyIpOworICAgICAgICAgICAgdmVyaWZ5SWZBbnkoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG5yZXRyeS0tOworICAgICAgICBpZiAoMCA9
PSBucmV0cnkpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoZGVzdC50YWdOYW1lICsgIiBzaG91
bGQgaGF2ZSBhIG1hcmtlciBvbiBmb3IgJyIgKyBzb3VyY2UuaW5uZXJIVE1MICsgIiciKTsKKyAg
ICAgICAgICAgIHZlcmlmeUlmQW55KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBuc2xlZXAgKj0gMjsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQodHJpYWws
IG5zbGVlcCk7CisgICAgfTsKKyAgICB0cmlhbCgpOworfQorCisKKy8vIHBhc3RlICJmb28gYmFy
IgorZm9yICh2YXIgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMubGVuZ3RoOyArK2kpCisgICAgY29w
eUFuZFBhc3RlKHNvdXJjZTEsIGRlc3RpbmF0aW9uc1tpXSk7CisKKy8vIHBhc3RlICJ6eiBhcHBs
ZSBvcmFuZ2UiCitmb3IgKHZhciBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5sZW5ndGg7ICsraSkK
KyAgICBjb3B5QW5kUGFzdGUoc291cmNlMiwgZGVzdGluYXRpb25zW2ldKTsKKwordmVyaWZ5SWZB
bnkoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDg5OWEz
ODA5NDY1ZDQyY2FlMmUzYTk0YTczMzM1Yzk3MDY5NDUxOWYuLjgzZDk1MGM3NzZmZDRiZDI2ZjEy
YzA1ZWE0NTQ3YjgwMjQxNDQ0Y2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC0xMjE2
LDYgKzEyMTYsNyBAQCBtZWRpYS9ldmVudC1hdHRyaWJ1dGVzLmh0bWwKICMgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNzQwCiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxs
aW5nLWJhY2tzcGFjZS1iZXR3ZWVuLWxpbmVzLmh0bWwKIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxj
aGVjay1wYXN0ZS5odG1sCitlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUuaHRtbAog
CiAjIEZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3NTgKICMg
VGhlc2UgcmVxdWlyZSBEUlQgc2V0U2VyaWFsaXplSFRUUExvYWRzIGltcGxlbWVudGF0aW9uIHRv
IGJlIHJlbGlhYmxlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBl
ZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKaW5kZXggNWE1ZTIxZGUwYTc4ZWFi
MDEwMTc4NjQxZWMwOWZjYTdlNGQwNzljOC4uYzIxNjI4NDlkNjg3YjNjMzdlZWFlNTQ3N2RkMDFk
NjlhMjk3OWNhOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCkBAIC0xMDAxLDYgKzEwMDEsNyBA
QCBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWF0dHJpYnV0ZS1hdC1jaGlsZC5odG1sCiAKICMg
RWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZygpIGlzIG5vdCBpbXBsZW1lbnRl
ZAogZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXBhc3RlLmh0bWwKK2VkaXRpbmcvc3BlbGxp
bmcvc3BlbGxjaGVjay1xdWV1ZS5odG1sCiAKICMgW1F0XVtHVEtdIGVkaXRpbmcvc3BlbGxpbmcv
c3BlbGxjaGVjay1hc3luYy5odG1sIGZhaWxzCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzAwMwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117819</attachid>
            <date>2011-12-04 18:21:34 -0800</date>
            <delta_ts>2011-12-05 00:47:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72939-20111205112132.patch</filename>
            <type>text/plain</type>
            <size>18899</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxOTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTY5YjFiOTlmMDEwZmNh
Mjk3ZjdlYWEyODVmZTkzNDA5OGIzOWFjNi4uYjczNTljOTgzYmVkMzM5MTA0MDZjOGIyMjg4MzRh
MjBhNGQ0MDNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTEyLTA0ICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+CisKKyAgICAgICAgQXN5bmNocm9ub3Vz
IFNwZWxsQ2hlY2tlciBzaG91bGQgY29uc2lkZXIgbXVsdGlwbGUgcmVxdWVzdHMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkzOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyBTcGVsbENoZWNrZXIg
c2F2ZXMgYSByZXF1ZXN0IHdoZW4gaXQgaXMgcHJvY2Vzc2luZyB0aGUgcHJldmlvdXMgc3BlbGxj
aGVjayByZXF1ZXN0LgorICAgICAgICBJZiB0aGVyZSBpcyBhIHJlcXVlc3QgaGF2aW5nIHRoZSBz
YW1lIHJvb3QgZWRpdGFibGUgZWxlbWVudCwgdGhlIG9sZGVyIHJlcXVlc3QgaXMgcmVwbGFjZWQg
YnkgbmV3ZXIgcmVxdWVzdAorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxj
aGVjay1xdWV1ZS5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OlNwZWxsQ2hlY2tSZXF1ZXN0OjpTcGVsbENo
ZWNrUmVxdWVzdCk6CisgICAgICAgICAgQSBzdHJ1Y3R1cmUgdG8gaGF2ZSBzcGVsbCBjaGVjayBy
ZXF1ZXN0LgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpTcGVsbENoZWNrUmVxdWVz
dDo6c2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpTcGVsbENoZWNr
UmVxdWVzdDo6cmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpTcGVsbENo
ZWNrUmVxdWVzdDo6dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OlNwZWxs
Q2hlY2tSZXF1ZXN0OjptYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6U3Bl
bGxDaGVja1JlcXVlc3Q6OnJvb3RFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3BlbGxDaGVja2VyOjpTcGVsbENoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVj
a2VyOjpjcmVhdGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6dGlt
ZXJGaXJlZFRvUHJvY2Vzc1F1ZXVlZFJlcXVlc3QpOgorICAgICAgICAgIFdoZW4gdGltZXIgaXMg
ZmlyZWQsIHF1ZXVlZCByZXF1ZXN0IGlzIHByb2Nlc3NlZCBpZiBhbnkuCisgICAgICAgIChXZWJD
b3JlOjpTcGVsbENoZWNrZXI6OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6U3BlbGxDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdGb3IpOgorICAgICAgICAgIFdoZW4g
dGhlIHNwZWxsY2hlY2tlciBpcyBwcm9jZXNzaW5nIGFub3RoZXIgcmVxdWVzdCwgdGhlIGxhdGVz
dCByZXF1ZXN0IGlzIHF1ZXVlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6aW52
b2tlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbENoZWNrZXI6OmVucXVldWVSZXF1
ZXN0KToKKyAgICAgICAgICBFbnF1ZXVlcyBhIHJlcXVlc3QuIElmIHRoZXJlIGlzIGFuIG9sZGVy
IHJlcXVlc3Qgd2hvc2Ugcm9vdCBlZGl0YWJsZSBlbGVtZW50IGlzIHRoZSBzYW1lIGFzIHRoZSBy
ZXF1ZXN0LAorICAgICAgICAgIGl0IHdpbGwgYmUgcmVwbGFjZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTcGVsbENoZWNrZXI6OmRpZENoZWNrKToKKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsQ2hlY2tl
ci5oOgorCiAyMDExLTEyLTA0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEhJRVJBUkNIWV9SRVFVRVNUX0VSUiBjaGVjayBpbiBjaGVja0FjY2VwdENoaWxkIHNo
b3VsZCBiZSBvcHRpbWl6ZWQgZm9yIG5ld0NoaWxkIHdpdGhvdXQgY2hpbGRyZW4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCAxYmM5NzVhZjE3MTY1Y2JhMTk0MjBl
OGNhNjFmMWQwYjIwMWQxNmE1Li44ZmY1NzQyMTc0MjI2YjRmMjIwNzliYTMxMDc5NTM0ZTFiNmEx
NGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCkBAIC00NSw5ICs0
NSwzNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNwZWxsQ2hlY2tlcjo6U3Bl
bGxDaGVja1JlcXVlc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxTcGVsbENoZWNrZXI6OlNwZWxsQ2hl
Y2tSZXF1ZXN0PiB7CitwdWJsaWM6CisgICAgU3BlbGxDaGVja1JlcXVlc3QoaW50IHNlcXVlbmNl
LCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBUZXh0Q2hlY2tp
bmdUeXBlTWFzayBtYXNrKQorICAgICAgICA6IG1fc2VxdWVuY2Uoc2VxdWVuY2UpCisgICAgICAg
ICwgbV9yYW5nZShyYW5nZSkKKyAgICAgICAgLCBtX3RleHQodGV4dCkKKyAgICAgICAgLCBtX21h
c2sobWFzaykKKyAgICAgICAgLCBtX3Jvb3RFZGl0YWJsZUVsZW1lbnQobV9yYW5nZS0+c3RhcnRD
b250YWluZXIoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQorICAgIHsKKyAgICB9CisKKyAgICBp
bnQgc2VxdWVuY2UoKSBjb25zdCB7IHJldHVybiBtX3NlcXVlbmNlOyB9CisgICAgUmFuZ2UqIHJh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZS5nZXQoKTsgfQorICAgIGNvbnN0IFN0cmluZyYg
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQorICAgIFRleHRDaGVja2luZ1R5cGVNYXNr
IG1hc2soKSBjb25zdCB7IHJldHVybiBtX21hc2s7IH0KKyAgICBFbGVtZW50KiByb290RWRpdGFi
bGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9yb290RWRpdGFibGVFbGVtZW50OyB9CisKK3By
aXZhdGU6CisgICAgaW50IG1fc2VxdWVuY2U7CisgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOwor
ICAgIFN0cmluZyBtX3RleHQ7CisgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgbV9tYXNrOworICAg
IEVsZW1lbnQqIG1fcm9vdEVkaXRhYmxlRWxlbWVudDsKK307CisKIFNwZWxsQ2hlY2tlcjo6U3Bl
bGxDaGVja2VyKEZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX3Jl
cXVlc3RTZXF1ZW5jZSgwKQorICAgICwgbV9sYXN0UmVxdWVzdGVkU2VxdWVuY2UoMCkKKyAgICAs
IG1fdGltZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KHRoaXMsICZTcGVsbENoZWNrZXI6OnRpbWVy
RmlyZWRUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0KQogewogfQogCkBAIC02MywyNSArODksMjQgQEAg
VGV4dENoZWNrZXJDbGllbnQqIFNwZWxsQ2hlY2tlcjo6Y2xpZW50KCkgY29uc3QKICAgICByZXR1
cm4gcGFnZS0+ZWRpdG9yQ2xpZW50KCktPnRleHRDaGVja2VyKCk7CiB9CiAKLWJvb2wgU3BlbGxD
aGVja2VyOjppbml0UmVxdWVzdChQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSkKK1Bhc3NSZWZQdHI8
U3BlbGxDaGVja2VyOjpTcGVsbENoZWNrUmVxdWVzdD4gU3BlbGxDaGVja2VyOjpjcmVhdGVSZXF1
ZXN0KFRleHRDaGVja2luZ1R5cGVNYXNrIG1hc2ssIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQog
ewogICAgIEFTU0VSVChjYW5DaGVja0FzeW5jaHJvbm91c2x5KHJhbmdlLmdldCgpKSk7CiAKICAg
ICBTdHJpbmcgdGV4dCA9IHJhbmdlLT50ZXh0KCk7CiAgICAgaWYgKCF0ZXh0Lmxlbmd0aCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPFNwZWxsQ2hl
Y2tSZXF1ZXN0PigpOwogCi0gICAgbV9yZXF1ZXN0UmFuZ2UgPSByYW5nZTsKLSAgICBtX3JlcXVl
c3RUZXh0ID0gdGV4dDsKLSAgICBtX3JlcXVlc3RTZXF1ZW5jZSsrOwotCi0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTcGVsbENoZWNrUmVxdWVzdCgrK21fbGFzdFJl
cXVlc3RlZFNlcXVlbmNlLCByYW5nZSwgdGV4dCwgbWFzaykpOwogfQogCi12b2lkIFNwZWxsQ2hl
Y2tlcjo6Y2xlYXJSZXF1ZXN0KCkKK3ZvaWQgU3BlbGxDaGVja2VyOjp0aW1lckZpcmVkVG9Qcm9j
ZXNzUXVldWVkUmVxdWVzdChUaW1lcjxTcGVsbENoZWNrZXI+KikKIHsKLSAgICBtX3JlcXVlc3RS
YW5nZS5jbGVhcigpOwotICAgIG1fcmVxdWVzdFRleHQgPSBTdHJpbmcoKTsKKyAgICBBU1NFUlQo
IW1fcmVxdWVzdFF1ZXVlLmlzRW1wdHkoKSk7CisgICAgaWYgKG1fcmVxdWVzdFF1ZXVlLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW52b2tlUmVxdWVzdChtX3JlcXVlc3RRdWV1
ZS50YWtlRmlyc3QoKSk7CiB9CiAKIGJvb2wgU3BlbGxDaGVja2VyOjppc0FzeW5jaHJvbm91c0Vu
YWJsZWQoKSBjb25zdApAQCAtOTEsMTcgKzExNiw3IEBAIGJvb2wgU3BlbGxDaGVja2VyOjppc0Fz
eW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdAogCiBib29sIFNwZWxsQ2hlY2tlcjo6Y2FuQ2hlY2tB
c3luY2hyb25vdXNseShSYW5nZSogcmFuZ2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNsaWVudCgp
ICYmIGlzQ2hlY2thYmxlKHJhbmdlKSAmJiBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSAmJiAhaXNC
dXN5KCk7Ci19Ci0KLWJvb2wgU3BlbGxDaGVja2VyOjppc0J1c3koKSBjb25zdAotewotICAgIHJl
dHVybiBtX3JlcXVlc3RSYW5nZS5nZXQoKTsKLX0KLQotYm9vbCBTcGVsbENoZWNrZXI6OmlzVmFs
aWQoaW50IHNlcXVlbmNlKSBjb25zdAotewotICAgIHJldHVybiBtX3JlcXVlc3RSYW5nZS5nZXQo
KSAmJiBtX3JlcXVlc3RUZXh0Lmxlbmd0aCgpICYmIG1fcmVxdWVzdFNlcXVlbmNlID09IHNlcXVl
bmNlOworICAgIHJldHVybiBjbGllbnQoKSAmJiBpc0NoZWNrYWJsZShyYW5nZSkgJiYgaXNBc3lu
Y2hyb25vdXNFbmFibGVkKCk7CiB9CiAKIGJvb2wgU3BlbGxDaGVja2VyOjppc0NoZWNrYWJsZShS
YW5nZSogcmFuZ2UpIGNvbnN0CkBAIC0xMTQsMTYgKzEyOSwzOSBAQCB2b2lkIFNwZWxsQ2hlY2tl
cjo6cmVxdWVzdENoZWNraW5nRm9yKFRleHRDaGVja2luZ1R5cGVNYXNrIG1hc2ssIFBhc3NSZWZQ
dHI8UmFuZwogICAgIGlmICghY2FuQ2hlY2tBc3luY2hyb25vdXNseShyYW5nZS5nZXQoKSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGRvUmVxdWVzdENoZWNraW5nRm9yKG1hc2ssIHJhbmdlKTsK
KyAgICBSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVlc3QoY3JlYXRlUmVxdWVzdChtYXNr
LCByYW5nZSkpOworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fdGltZXJUb1Byb2Nlc3NRdWV1ZWRSZXF1ZXN0LmlzQWN0aXZlKCkgfHwgbV9wcm9jZXNzaW5n
UmVxdWVzdCkgeworICAgICAgICBlbnF1ZXVlUmVxdWVzdChyZXF1ZXN0LnJlbGVhc2UoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnZva2VSZXF1ZXN0KHJlcXVlc3QucmVsZWFz
ZSgpKTsKIH0KIAotdm9pZCBTcGVsbENoZWNrZXI6OmRvUmVxdWVzdENoZWNraW5nRm9yKFRleHRD
aGVja2luZ1R5cGVNYXNrIG1hc2ssIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQordm9pZCBTcGVs
bENoZWNrZXI6Omludm9rZVJlcXVlc3QoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVx
dWVzdCkKIHsKLSAgICBBU1NFUlQoY2FuQ2hlY2tBc3luY2hyb25vdXNseShyYW5nZS5nZXQoKSkp
OworICAgIEFTU0VSVCghbV9wcm9jZXNzaW5nUmVxdWVzdCk7CisKKyAgICBtX3Byb2Nlc3NpbmdS
ZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICBjbGllbnQoKS0+cmVxdWVzdENoZWNraW5nT2ZTdHJpbmco
dGhpcywgbV9wcm9jZXNzaW5nUmVxdWVzdC0+c2VxdWVuY2UoKSwgbV9wcm9jZXNzaW5nUmVxdWVz
dC0+bWFzaygpLCBtX3Byb2Nlc3NpbmdSZXF1ZXN0LT50ZXh0KCkpOworfQogCi0gICAgaWYgKCFp
bml0UmVxdWVzdChyYW5nZSkpCit2b2lkIFNwZWxsQ2hlY2tlcjo6ZW5xdWV1ZVJlcXVlc3QoUGFz
c1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQocmVxdWVz
dCk7CisKKyAgICBmb3IgKFJlcXVlc3RRdWV1ZTo6aXRlcmF0b3IgaXQgPSBtX3JlcXVlc3RRdWV1
ZS5iZWdpbigpOyBpdCAhPSBtX3JlcXVlc3RRdWV1ZS5lbmQoKTsgKytpdCkgeworICAgICAgICBp
ZiAocmVxdWVzdC0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9ICgqaXQpLT5yb290RWRpdGFibGVF
bGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAqaXQgPSByZXF1ZXN0
OwogICAgICAgICByZXR1cm47Ci0gICAgY2xpZW50KCktPnJlcXVlc3RDaGVja2luZ09mU3RyaW5n
KHRoaXMsIG1fcmVxdWVzdFNlcXVlbmNlLCBtYXNrLCBtX3JlcXVlc3RUZXh0KTsKKyAgICB9CisK
KyAgICBtX3JlcXVlc3RRdWV1ZS5hcHBlbmQocmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBib29sIGZv
cndhcmRJdGVyYXRvcihQb3NpdGlvbkl0ZXJhdG9yJiBpdGVyYXRvciwgaW50IGRpc3RhbmNlKQpA
QCAtMTU5LDE2ICsxOTcsMTYgQEAgc3RhdGljIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHRv
TWFya2VyVHlwZShUZXh0Q2hlY2tpbmdUeXBlIHR5cGUpCiAvLyBDdXJyZW5udGx5IGlnbm9yaW5n
IFRleHRDaGVja2luZ1Jlc3VsdDo6ZGV0YWlscyBidXQgc2hvdWxkIGJlIGhhbmRsZWQuIFNlZSBC
dWcgNTYzNjguCiB2b2lkIFNwZWxsQ2hlY2tlcjo6ZGlkQ2hlY2soaW50IHNlcXVlbmNlLCBjb25z
dCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKLSAgICBpZiAoIWlzVmFs
aWQoc2VxdWVuY2UpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fcHJvY2Vzc2luZ1Jl
cXVlc3QpOwogCi0gICAgaWYgKCFpc0NoZWNrYWJsZShtX3JlcXVlc3RSYW5nZS5nZXQoKSkpIHsK
LSAgICAgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgQVNTRVJUKG1fcHJvY2Vzc2luZ1JlcXVlc3Qt
PnNlcXVlbmNlKCkgPT0gc2VxdWVuY2UpOworICAgIGlmIChtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5z
ZXF1ZW5jZSgpICE9IHNlcXVlbmNlKSB7CisgICAgICAgIG1fcmVxdWVzdFF1ZXVlLmNsZWFyKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAg
IFBvc2l0aW9uSXRlcmF0b3Igc3RhcnQgPSBtX3JlcXVlc3RSYW5nZS0+c3RhcnRQb3NpdGlvbigp
OworICAgIFBvc2l0aW9uSXRlcmF0b3Igc3RhcnQgPSBtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5yYW5n
ZSgpLT5zdGFydFBvc2l0aW9uKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChyZXN1bHRzW2ldLnR5cGUgIT0gVGV4dENoZWNr
aW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdHNbaV0udHlwZSAhPSBUZXh0Q2hlY2tpbmdUeXBlR3Jh
bW1hcikKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTg2LDE3ICsyMjQsMTkgQEAgdm9pZCBT
cGVsbENoZWNrZXI6OmRpZENoZWNrKGludCBzZXF1ZW5jZSwgY29uc3QgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4mIHJlc3UKICAgICAgICAgLy8gc3BlbGxpbmdzIGluIHRoZSBiYWNrZ3JvdW5k
LiBUbyBhdm9pZCBhZGRpbmcgbWFya2VycyB0byB0aGUgd29yZHMgbW9kaWZpZWQgYnkgdXNlcnMg
b3IKICAgICAgICAgLy8gSmF2YVNjcmlwdCBhcHBsaWNhdGlvbnMsIHJldHJpZXZlIHRoZSB3b3Jk
cyBpbiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBhbmQgY29tcGFyZSB0aGVtIHdpdGgKICAgICAgICAg
Ly8gdGhlIG9yaWdpbmFsIG9uZXMuCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKG1fcmVxdWVzdFJhbmdlLT5vd25lckRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwor
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX3Byb2Nlc3NpbmdS
ZXF1ZXN0LT5yYW5nZSgpLT5vd25lckRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogICAgICAgICAv
LyBGSVhNRTogVXNlIHRleHRDb250ZW50KCkgY29tcGF0aWJsZSBzdHJpbmcgY29udmVyc2lvbi4K
ICAgICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gcmFuZ2UtPnRleHQoKTsKLSAgICAgICAgU3Ry
aW5nIHNvdXJjZSA9IG1fcmVxdWVzdFRleHQuc3Vic3RyaW5nKHJlc3VsdHNbaV0ubG9jYXRpb24s
IHJlc3VsdHNbaV0ubGVuZ3RoKTsKKyAgICAgICAgU3RyaW5nIHNvdXJjZSA9IG1fcHJvY2Vzc2lu
Z1JlcXVlc3QtPnRleHQoKS5zdWJzdHJpbmcocmVzdWx0c1tpXS5sb2NhdGlvbiwgcmVzdWx0c1tp
XS5sZW5ndGgpOwogICAgICAgICBpZiAoZGVzdGluYXRpb24gPT0gc291cmNlKQotICAgICAgICAg
ICAgbV9yZXF1ZXN0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIo
cmFuZ2UuZ2V0KCksIHRvTWFya2VyVHlwZShyZXN1bHRzW2ldLnR5cGUpKTsKKyAgICAgICAgICAg
IG1fcHJvY2Vzc2luZ1JlcXVlc3QtPnJhbmdlKCktPm93bmVyRG9jdW1lbnQoKS0+bWFya2Vycygp
LT5hZGRNYXJrZXIocmFuZ2UuZ2V0KCksIHRvTWFya2VyVHlwZShyZXN1bHRzW2ldLnR5cGUpKTsK
IAogICAgICAgICBzdGFydE9mZnNldCA9IHJlc3VsdHNbaV0ubG9jYXRpb247CiAgICAgfQogCi0g
ICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgbV9wcm9jZXNzaW5nUmVxdWVzdC5jbGVhcigpOworICAg
IGlmICghbV9yZXF1ZXN0UXVldWUuaXNFbXB0eSgpKQorICAgICAgICBtX3RpbWVyVG9Qcm9jZXNz
UXVldWVkUmVxdWVzdC5zdGFydE9uZVNob3QoMCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmgKaW5kZXggM2E0MTQ4OTkzYWE3YTM5MGQzNDM0Mjk4N2MyYWIwODgzODdj
OGE5MS4uNzAyZjM2OWQ1NjU3YWViYzQ1OWI1MTEzZjZlMjE2YTVkYzI4ZjFmZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgorI2luY2x1ZGUg
IlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
QEAgLTQ3LDI0ICs0OSwyOCBAQCBwdWJsaWM6CiAgICAgflNwZWxsQ2hlY2tlcigpOwogCiAgICAg
Ym9vbCBpc0FzeW5jaHJvbm91c0VuYWJsZWQoKSBjb25zdDsKLSAgICBib29sIGNhbkNoZWNrQXN5
bmNocm9ub3VzbHkoUmFuZ2UqKSBjb25zdDsKLSAgICBib29sIGlzQnVzeSgpIGNvbnN0OwotICAg
IGJvb2wgaXNWYWxpZChpbnQgc2VxdWVuY2UpIGNvbnN0OwogICAgIGJvb2wgaXNDaGVja2FibGUo
UmFuZ2UqKSBjb25zdDsKICAgICB2b2lkIHJlcXVlc3RDaGVja2luZ0ZvcihUZXh0Q2hlY2tpbmdU
eXBlTWFzaywgUGFzc1JlZlB0cjxSYW5nZT4pOwogICAgIHZvaWQgZGlkQ2hlY2soaW50IHNlcXVl
bmNlLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpOwogCiBwcml2YXRlOgotICAg
IGJvb2wgaW5pdFJlcXVlc3QoUGFzc1JlZlB0cjxSYW5nZT4pOwotICAgIHZvaWQgY2xlYXJSZXF1
ZXN0KCk7Ci0gICAgdm9pZCBkb1JlcXVlc3RDaGVja2luZ0ZvcihUZXh0Q2hlY2tpbmdUeXBlTWFz
aywgUGFzc1JlZlB0cjxSYW5nZT4pOworICAgIGNsYXNzIFNwZWxsQ2hlY2tSZXF1ZXN0OworICAg
IHR5cGVkZWYgRGVxdWU8UmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiA+IFJlcXVlc3RRdWV1ZTsK
KworICAgIGJvb2wgY2FuQ2hlY2tBc3luY2hyb25vdXNseShSYW5nZSopIGNvbnN0OworICAgIFBh
c3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IGNyZWF0ZVJlcXVlc3QoVGV4dENoZWNraW5nVHlw
ZU1hc2ssIFBhc3NSZWZQdHI8UmFuZ2U+KTsKICAgICBUZXh0Q2hlY2tlckNsaWVudCogY2xpZW50
KCkgY29uc3Q7CisgICAgdm9pZCB0aW1lckZpcmVkVG9Qcm9jZXNzUXVldWVkUmVxdWVzdChUaW1l
cjxTcGVsbENoZWNrZXI+Kik7CisgICAgdm9pZCBpbnZva2VSZXF1ZXN0KFBhc3NSZWZQdHI8U3Bl
bGxDaGVja1JlcXVlc3Q+KTsKKyAgICB2b2lkIGVucXVldWVSZXF1ZXN0KFBhc3NSZWZQdHI8U3Bl
bGxDaGVja1JlcXVlc3Q+KTsKIAogICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIGludCBtX2xhc3RS
ZXF1ZXN0ZWRTZXF1ZW5jZTsKKworICAgIFRpbWVyPFNwZWxsQ2hlY2tlcj4gbV90aW1lclRvUHJv
Y2Vzc1F1ZXVlZFJlcXVlc3Q7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IG1fcmVxdWVzdFJhbmdlOwot
ICAgIFN0cmluZyBtX3JlcXVlc3RUZXh0OwotICAgIGludCBtX3JlcXVlc3RTZXF1ZW5jZTsKKyAg
ICBSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IG1fcHJvY2Vzc2luZ1JlcXVlc3Q7CisgICAgUmVx
dWVzdFF1ZXVlIG1fcmVxdWVzdFF1ZXVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDUwYmZkYWI2MDRjNzE2MGRhYzQ0ZjhmYTg2OTQzNjlhOTQxM2E0M2IuLjM3Y2I1YjVh
ZGQyM2RmZDkzZDg4NWZmNTA0OGI3ZDVmZTQ3YzQ1NWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAor
MjAxMS0xMi0wNCAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgorCisgICAg
ICAgIEFzeW5jaHJvbm91cyBTcGVsbENoZWNrZXIgc2hvdWxkIGNvbnNpZGVyIG11bHRpcGxlIHJl
cXVlc3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzI5MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
ZXN0cyBmb3IgbXVsdGlwbGUgc3BlbGxjaGVjayByZXF1ZXN0cy4KKworICAgICAgICAqIGVkaXRp
bmcvc3BlbGxpbmcvc3BlbGxjaGVjay1xdWV1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1xdWV1ZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVk
OgorCiAyMDExLTEyLTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW1vdmVkIG9ic29sZXRlIGV4cGVjdGVkIHJlc3VsdHMgdGhhdCBzaG91bGQgaGF2ZSBiZWVu
IHJlbW92ZWQgd2hlbiBjb252ZXJ0aW5nIHRvIGEgcmVmIHRlc3QuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXF1ZXVlLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41ODhjNTVjYzgyNDIyMTcyNmMzODIyNTYwNzI2MzA3MWUyNjRiNmRiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNr
LXF1ZXVlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE4IEBACitGb3IgQnVnIDcyOTM5OiBBc3lu
Y2hyb25vdXMgU3BlbGxDaGVja2VyIHNob3VsZCBjb25zaWRlciBtdWx0aXBsZSByZXF1ZXN0cy4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorUEFTUyBJTlBVVCBoYXMgYSBtYXJrZXIgb24gJ3p6
IGFwcGxlIG9yYW5nZScKK1BBU1MgVEVYVEFSRUEgaGFzIGEgbWFya2VyIG9uICd6eiBhcHBsZSBv
cmFuZ2UnCitQQVNTIERJViBoYXMgYSBtYXJrZXIgb24gJ3p6IGFwcGxlIG9yYW5nZScKK1BBU1Mg
SU5QVVQgaGFzIGEgbWFya2VyIG9uICd6eiBhcHBsZSBvcmFuZ2UnCitQQVNTIFRFWFRBUkVBIGhh
cyBhIG1hcmtlciBvbiAnenogYXBwbGUgb3JhbmdlJworUEFTUyBESVYgaGFzIGEgbWFya2VyIG9u
ICd6eiBhcHBsZSBvcmFuZ2UnCitQQVNTIElOUFVUIGhhcyBhIG1hcmtlciBvbiAnenogYXBwbGUg
b3JhbmdlJworUEFTUyBURVhUQVJFQSBoYXMgYSBtYXJrZXIgb24gJ3p6IGFwcGxlIG9yYW5nZScK
K1BBU1MgRElWIGhhcyBhIG1hcmtlciBvbiAnenogYXBwbGUgb3JhbmdlJworCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUuaHRtbCBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1xdWV1ZS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFhN2U4OWFkNmJiY2U3NGU2ODNmYmNjMGNjNDY5MjhlOTYzZWIyNzgKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stcXVldWUuaHRt
bApAQCAtMCwwICsxLDE4OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2pzLXRlc3Qtc2VsZWN0aW9uLXNoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0PgorZGVzY3JpcHRpb24oJ0ZvciBCdWcgNzI5Mzk6IEFzeW5jaHJvbm91cyBTcGVsbENoZWNr
ZXIgc2hvdWxkIGNvbnNpZGVyIG11bHRpcGxlIHJlcXVlc3RzLicpOworCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEFzeW5jaHJvbm91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKHRydWUpOworfQorCit2YXIgdGVzdFJvb3QgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKK2RvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHRlc3RSb290LCBkb2N1
bWVudC5ib2R5LmZpcnN0Q2hpbGQpOworCit2YXIgc291cmNlMSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworc291cmNlMS5pbm5lckhUTUwgPSAiZm9vIGJhciI7Cit0ZXN0Um9vdC5h
cHBlbmRDaGlsZChzb3VyY2UxKTsKKwordmFyIHNvdXJjZTIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKK3NvdXJjZTIuaW5uZXJIVE1MID0gInp6IGFwcGxlIG9yYW5nZSI7Cit0ZXN0
Um9vdC5hcHBlbmRDaGlsZChzb3VyY2UyKTsKKworZnVuY3Rpb24gY3JlYXRlSW5wdXQodGVzdFJv
b3QpIHsKKyAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CisgICAg
ZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dCIpOworICAgIHRlc3RSb290LmFwcGVuZENoaWxk
KGUpOworCisgICAgcmV0dXJuIGU7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRleHRBcmVhKHRlc3RS
b290KSB7CisgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwor
ICAgIHRlc3RSb290LmFwcGVuZENoaWxkKGUpOworCisgICAgcmV0dXJuIGU7Cit9CisKK2Z1bmN0
aW9uIGNyZWF0ZUNvbnRlbnRFZGl0YWJsZSh0ZXN0Um9vdCkgeworICAgIHZhciBlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgZS5zZXRBdHRyaWJ1dGUoImNvbnRlbnRFZGl0
YWJsZSIsICJ0cnVlIik7CisgICAgdGVzdFJvb3QuYXBwZW5kQ2hpbGQoZSk7CisKKyAgICByZXR1
cm4gZTsKK30KKwordmFyIGRlc3RpbmF0aW9ucyA9IFsKKyAgICBjcmVhdGVJbnB1dCh0ZXN0Um9v
dCksCisgICAgY3JlYXRlVGV4dEFyZWEodGVzdFJvb3QpLAorICAgIGNyZWF0ZUNvbnRlbnRFZGl0
YWJsZSh0ZXN0Um9vdCksCisgICAgY3JlYXRlSW5wdXQodGVzdFJvb3QpLAorICAgIGNyZWF0ZVRl
eHRBcmVhKHRlc3RSb290KSwKKyAgICBjcmVhdGVDb250ZW50RWRpdGFibGUodGVzdFJvb3QpLAor
ICAgIGNyZWF0ZUlucHV0KHRlc3RSb290KSwKKyAgICBjcmVhdGVUZXh0QXJlYSh0ZXN0Um9vdCks
CisgICAgY3JlYXRlQ29udGVudEVkaXRhYmxlKHRlc3RSb290KSwKK107CisKK3ZhciBzZWwgPSB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisKK3ZhciB0ZXN0cyA9IFtdOworZm9yICh2YXIgaSA9IDA7
IGkgPCBkZXN0aW5hdGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgdCA9IGZ1bmN0aW9uKGkp
IHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyB2ZXJpZnkoc291cmNlMiwgZGVzdGluYXRp
b25zW2ldLCBbInp6Il0pOyB9CisgICAgfShpKTsKKyAgICB0ZXN0cy5wdXNoKHQpOworfQorCitm
dW5jdGlvbiB2ZXJpZnlJZkFueSgpCit7CisgICAgdmFyIG5leHQgPSB0ZXN0cy5zaGlmdCgpOwor
ICAgIGlmIChuZXh0KSB7CisgICAgICAgIG5leHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHRlc3RSb290LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRB
c3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChmYWxzZSk7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGZpbmRGaXJz
dFRleHROb2RlKG5vZGUpCit7CisgICAgZnVuY3Rpb24gaXRlclRvRmluZEZpcnN0VGV4dE5vZGUo
bm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgVGV4dCkKKyAgICAgICAg
ICAgIHJldHVybiBub2RlOworCisgICAgICAgIHZhciBjaGlsZE5vZGVzID0gbm9kZS5jaGlsZE5v
ZGVzOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIHZhciBuID0gaXRlclRvRmluZEZpcnN0VGV4dE5vZGUoY2hpbGROb2Rl
c1tpXSk7CisgICAgICAgICAgICBpZiAobikKKyAgICAgICAgICAgICAgICByZXR1cm4gbjsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworCisgICAgaWYgKG5vZGUg
aW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MVGV4dEFy
ZWFFbGVtZW50KQorICAgICAgICByZXR1cm4gaXRlclRvRmluZEZpcnN0VGV4dE5vZGUoaW50ZXJu
YWxzLnNoYWRvd1Jvb3Qobm9kZSkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGl0ZXJUb0Zp
bmRGaXJzdFRleHROb2RlKG5vZGUpOworfQorCitmdW5jdGlvbiB2ZXJpZnlNYXJrZXIobm9kZSwg
ZXhwZWN0ZWRNYXJrZWQpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIg
fHwgIXdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhciB0
ZXh0Tm9kZSA9IGZpbmRGaXJzdFRleHROb2RlKG5vZGUpOworCisgICAgdmFyIG51bSA9IGludGVy
bmFscy5tYXJrZXJDb3VudEZvck5vZGUodGV4dE5vZGUsICJzcGVsbGluZyIpOworICAgIGlmIChu
dW0gIT0gZXhwZWN0ZWRNYXJrZWQubGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBudW07ICsraSkgeworICAgICAgICB2YXIgcmFuZ2UgPSBpbnRl
cm5hbHMubWFya2VyUmFuZ2VGb3JOb2RlKHRleHROb2RlLCAic3BlbGxpbmciLCBpKTsKKyAgICAg
ICAgaWYgKHJhbmdlLnRvU3RyaW5nKCkgIT0gZXhwZWN0ZWRNYXJrZWRbaV0pCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9u
IGNvcHlBbmRQYXN0ZShzb3VyY2UsIGRlc3QpCit7CisgICAgc2VsLnNlbGVjdEFsbENoaWxkcmVu
KHNvdXJjZSk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkNvcHkiKTsKKworICAgIGlmIChk
ZXN0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCBkZXN0IGluc3RhbmNlb2YgSFRNTFRl
eHRBcmVhRWxlbWVudCkgeworICAgICAgICBkZXN0LnZhbHVlID0gIiI7CisgICAgICAgIGRlc3Qu
Zm9jdXMoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0LmlubmVySFRNTCA9ICIiOworICAg
ICAgICBzZWwuc2VsZWN0QWxsQ2hpbGRyZW4oZGVzdCk7CisgICAgfQorICAgIGRvY3VtZW50LmV4
ZWNDb21tYW5kKCJQYXN0ZSIpOworfQorCitmdW5jdGlvbiB2ZXJpZnkoc291cmNlLCBkZXN0LCBl
eHBlY3RlZE1hcmtlZCkKK3sKKyAgICB2YXIgbnJldHJ5ID0gMTA7CisgICAgdmFyIG5zbGVlcCA9
IDE7CisgICAgZnVuY3Rpb24gdHJpYWwoKSB7CisgICAgICAgIHZhciB2ZXJpZmllZCA9IHZlcmlm
eU1hcmtlcihkZXN0LCBleHBlY3RlZE1hcmtlZCk7CisgICAgICAgIGlmICh2ZXJpZmllZCkgewor
ICAgICAgICAgICAgdGVzdFBhc3NlZChkZXN0LnRhZ05hbWUgKyAiIGhhcyBhIG1hcmtlciBvbiAn
IiArIHNvdXJjZS5pbm5lckhUTUwgKyAiJyIpOworICAgICAgICAgICAgdmVyaWZ5SWZBbnkoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG5yZXRyeS0tOworICAg
ICAgICBpZiAoMCA9PSBucmV0cnkpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoZGVzdC50YWdO
YW1lICsgIiBzaG91bGQgaGF2ZSBhIG1hcmtlciBvbiBmb3IgJyIgKyBzb3VyY2UuaW5uZXJIVE1M
ICsgIiciKTsKKyAgICAgICAgICAgIHZlcmlmeUlmQW55KCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBuc2xlZXAgKj0gMjsKKyAgICAgICAgd2luZG93LnNldFRp
bWVvdXQodHJpYWwsIG5zbGVlcCk7CisgICAgfTsKKyAgICB0cmlhbCgpOworfQorCisKKy8vIHBh
c3RlICJmb28gYmFyIgorZm9yICh2YXIgaSA9IDA7IGkgPCBkZXN0aW5hdGlvbnMubGVuZ3RoOyAr
K2kpCisgICAgY29weUFuZFBhc3RlKHNvdXJjZTEsIGRlc3RpbmF0aW9uc1tpXSk7CisKKy8vIHBh
c3RlICJ6eiBhcHBsZSBvcmFuZ2UiCitmb3IgKHZhciBpID0gMDsgaSA8IGRlc3RpbmF0aW9ucy5s
ZW5ndGg7ICsraSkKKyAgICBjb3B5QW5kUGFzdGUoc291cmNlMiwgZGVzdGluYXRpb25zW2ldKTsK
KwordmVyaWZ5SWZBbnkoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
CmluZGV4IDY0MWI5ZmE4NzEzM2I0N2MzY2IzN2RjMDM2MmM1YzE5Y2JlNmU0N2IuLjg2YzA0OTFl
NGRjYzI3ODU4OTJjZTZkMGNmMTBiOTAyZDE0MGUxNDIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lw
cGVkCkBAIC0xMjE1LDYgKzEyMTUsNyBAQCBtZWRpYS9ldmVudC1hdHRyaWJ1dGVzLmh0bWwKICMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNzQwCiBlZGl0aW5nL3Nw
ZWxsaW5nL3NwZWxsaW5nLWJhY2tzcGFjZS1iZXR3ZWVuLWxpbmVzLmh0bWwKIGVkaXRpbmcvc3Bl
bGxpbmcvc3BlbGxjaGVjay1wYXN0ZS5odG1sCitlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2st
cXVldWUuaHRtbAogCiAjIEZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTA3NTgKICMgVGhlc2UgcmVxdWlyZSBEUlQgc2V0U2VyaWFsaXplSFRUUExvYWRzIGltcGxl
bWVudGF0aW9uIHRvIGJlIHJlbGlhYmxlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKaW5kZXggYTE0
NjQ5YTg4ZWI2MDZhMDY2MWJhZjU0YWViNmI4ODA4MjE5OGQ2Yy4uYmQ5NzQwMTNiMjBiMmM3NzMy
MjAxODE0ODM2ZjVjZDBlYTQyZGJjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCkBAIC0xMDA1
LDYgKzEwMDUsNyBAQCBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWF0dHJpYnV0ZS1hdC1jaGls
ZC5odG1sCiAKICMgRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZygpIGlzIG5v
dCBpbXBsZW1lbnRlZAogZWRpdGluZy9zcGVsbGluZy9zcGVsbGNoZWNrLXBhc3RlLmh0bWwKK2Vk
aXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1xdWV1ZS5odG1sCiAKICMgW1F0XVtHVEtdIGVkaXRp
bmcvc3BlbGxpbmcvc3BlbGxjaGVjay1hc3luYy5odG1sIGZhaWxzCiAjIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzAwMwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>