<?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>61410</bug_id>
          
          <creation_ts>2011-05-24 19:17:54 -0700</creation_ts>
          <short_desc>Pressing &lt;tab&gt; key should traverse elements in shadow content.</short_desc>
          <delta_ts>2011-06-08 22:34:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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>61413</dependson>
    
    <dependson>61839</dependson>
          <blocked>54441</blocked>
    
    <blocked>61409</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Hayato Ito">hayato</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>morrita</cc>
    
    <cc>rolandsteiner</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>409361</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-05-24 19:17:54 -0700</bug_when>
    <thetext>Tab traversal does not visit elements in shadow DOM.
We should traverse focusable elements of shadow content by pressing &lt;tab&gt; key.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411222</commentid>
    <comment_count>1</comment_count>
      <attachid>95126</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-05-26 23:58:04 -0700</bug_when>
    <thetext>Created attachment 95126
WIP - shadow-root as a scope of tab traversal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411228</commentid>
    <comment_count>2</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-05-27 00:21:59 -0700</bug_when>
    <thetext>I posted a patch,  which is almost complete, but there remains issues:


- Some elements (e.g. HTMLInputElement and HTMLTextAreaElement) do extra work in their focus(). So focusing elements on their shadow-root might cause an undesired behavior. I&apos;m investigating.

- We might have some control mechanism by which shadow host can choose whether only shadow host can be a target of tab traversal or not. Some shadow host elements might dislike that elements on their shadow root can be automatically tab traversable. 
  shadow-hosts can set &apos;tabindex=-1&apos; to focusable elements in the shadow root if they want. But that might be annoying..?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412688</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-31 09:13:54 -0700</bug_when>
    <thetext>Moving of the methods can be a simple refactoring patch in itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413199</commentid>
    <comment_count>4</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-01 00:43:47 -0700</bug_when>
    <thetext>Yeah, I posted a patch, containing only refactoring, in another bug 61839.

(In reply to comment #3)
&gt; Moving of the methods can be a simple refactoring patch in itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414778</commentid>
    <comment_count>5</comment_count>
      <attachid>95889</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-03 04:50:16 -0700</bug_when>
    <thetext>Created attachment 95889
visits-elements-in-shadow-root</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416848</commentid>
    <comment_count>6</comment_count>
      <attachid>95889</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-07 15:32:05 -0700</bug_when>
    <thetext>Comment on attachment 95889
visits-elements-in-shadow-root

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

A few nits:

&gt; LayoutTests/fast/dom/shadow/tab-order-iframe-and-shadow.html:104
&gt; +&lt;/html&gt;

might as well skip this test on Win, since it doesn&apos;t support ensureShadowRoot

&gt; Source/WebCore/page/FocusController.cpp:341
&gt; +Node* FocusController::deepFocusableNode(FocusDirection direction, Node* node, KeyboardEvent* event)

I am not sure why you moved this code. It&apos;s hard to see the diff (if any) between new and old code.

&gt; Source/WebCore/page/FocusController.cpp:430
&gt; +    startingTabIndex = (start &amp;&amp; start-&gt;tabIndex()) ? start-&gt;tabIndex() : SHRT_MAX;

Why did you change this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417118</commentid>
    <comment_count>7</comment_count>
      <attachid>96389</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-07 23:42:26 -0700</bug_when>
    <thetext>Created attachment 96389
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417120</commentid>
    <comment_count>8</comment_count>
      <attachid>95889</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-07 23:47:40 -0700</bug_when>
    <thetext>Comment on attachment 95889
visits-elements-in-shadow-root

Thank you for the review.

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

&gt;&gt; LayoutTests/fast/dom/shadow/tab-order-iframe-and-shadow.html:104
&gt;&gt; +&lt;/html&gt;
&gt; 
&gt; might as well skip this test on Win, since it doesn&apos;t support ensureShadowRoot

Thank you. I was not aware of it.

It seems that all tests in fast/dom/shadow are already skipped in Win.
http://trac.webkit.org/changeset/84533

&gt;&gt; Source/WebCore/page/FocusController.cpp:341
&gt;&gt; +Node* FocusController::deepFocusableNode(FocusDirection direction, Node* node, KeyboardEvent* event)
&gt; 
&gt; I am not sure why you moved this code. It&apos;s hard to see the diff (if any) between new and old code.

I guess I moved the function to this position only because that depends on static shadowRoot and isTreeScopeOwner functions.

Okay. Instead of moving this code, I decided to keep this function in original position. Instead, I moved two static functions above this function because these static functions are much smaller.
But, the diff still doesn&apos;t look nice in trac.. Sad..

&gt;&gt; Source/WebCore/page/FocusController.cpp:430
&gt;&gt; +    startingTabIndex = (start &amp;&amp; start-&gt;tabIndex()) ? start-&gt;tabIndex() : SHRT_MAX;
&gt; 
&gt; Why did you change this?

Thank you. That&apos;s unintentional. It seemed that I wrongly 3-way merged.
I reverted this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417276</commentid>
    <comment_count>9</comment_count>
      <attachid>96389</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-08 09:11:52 -0700</bug_when>
    <thetext>Comment on attachment 96389
Patch

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

&gt; Source/WebCore/page/FocusController.cpp:174
&gt; +            // FIXME: Some elements (e.g. HTMLInputElement and HTMLTextAreaElement) do extra work in their focus() methods.

File a bug and mention here so that we know when it&apos;s safe to remove this comment.

&gt; Source/WebCore/page/FocusController.cpp:176
&gt; +            if (node-&gt;nodeName() == &quot;INPUT&quot; || node-&gt;nodeName() == &quot;TEXTAREA&quot;)

Please  use hasTagName here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417745</commentid>
    <comment_count>10</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-08 18:56:17 -0700</bug_when>
    <thetext>Hi Dimitri,
Thank you for the review.

I&apos;ll address the comments and land this patch after bug 61413 is landed. Without the patch of bug 61413, we leak an element of shadow root.

(In reply to comment #9)
&gt; (From update of attachment 96389 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96389&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/FocusController.cpp:174
&gt; &gt; +            // FIXME: Some elements (e.g. HTMLInputElement and HTMLTextAreaElement) do extra work in their focus() methods.
&gt; 
&gt; File a bug and mention here so that we know when it&apos;s safe to remove this comment.
&gt; 
&gt; &gt; Source/WebCore/page/FocusController.cpp:176
&gt; &gt; +            if (node-&gt;nodeName() == &quot;INPUT&quot; || node-&gt;nodeName() == &quot;TEXTAREA&quot;)
&gt; 
&gt; Please  use hasTagName here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417830</commentid>
    <comment_count>11</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-06-08 22:34:10 -0700</bug_when>
    <thetext>Committed r88421: &lt;http://trac.webkit.org/changeset/88421&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95126</attachid>
            <date>2011-05-26 23:58:04 -0700</date>
            <delta_ts>2011-06-03 04:50:07 -0700</delta_ts>
            <desc>WIP - shadow-root as a scope of tab traversal</desc>
            <filename>bug-61410-20110527155801.patch</filename>
            <type>text/plain</type>
            <size>28641</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODczNjEKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyZDA4ZWEzOGVhMWQxNDczOTJkZGM3
MzQzYTJhMTAwYmVmMGFmOTk1Li5mOTljZGYyODc4ZTg5YjFkNjFlZTk5NWU2OTY5Yjg2ZTgxYTI3
ZjljIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDUtMjYgIEhheWF0byBJdG8gIDxoYXlh
dG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEEgZm9yd2FyZC9iYWNrd2FyZCB0YWIgdHJhdmVyc2FsIGNhbiB2aXNpdCBmb2N1
c2FibGUgZWxlbWVudHMgaW4gc2hhZG93IHJvb3QuCisKKyAgICAgICAgQSBzaGFkb3cgaG9zdCBh
Y3RzIHNpbWlsYXIgdG8gYSBpZnJhbWUgZWxlbWVudCBpbiB0YWIgdHJhdmVyc2FsLiBJZiBhIHNo
YWRvdworICAgICAgICBob3N0IGlzIG5vdCBmb2N1c2FibGUsIGFsbCBkZXNjZW5kYW50IGVsZW1l
bnRzIGluIHRoZSBzaGFkb3cgcm9vdCBhcmUgc2tpcHBlZC4KKyAgICAgICAgQSBzY29wZSBib3Vu
ZGFyeSBpbiB0YWIgdHJhdmVyc2FsIGlzIG5vdyBhIFRyZWVTY29wZSBvZiBpZnJhbWUgb3Igc2hh
ZG93IHJvb3QuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYxNDEwCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1h
bmQtc2hhZG93LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93
L3RhYi1vcmRlci1pZnJhbWUtYW5kLXNoYWRvdy5odG1sOiBBZGRlZC4KKwogMjAxMS0wNS0yNSAg
SWdvciBPbGl2ZWlyYSAgPGlnb3Iub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUtYW5kLXNoYWRvdy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93LWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45M2E1ZThjODc1NjY5YmRiZTM1YjI4YmJhYzQyODEwZGYzODA0
MmRkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1v
cmRlci1pZnJhbWUtYW5kLXNoYWRvdy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNCBAQAorVGhp
cyB0ZXN0cyB0aGF0IHByZXNzaW5nIFRhYiBrZXkgc2hvdWxkIHRyYXZlcnNlIGludG8gaWZyYW1l
IGFuZCBzaGFkb3cgdHJlZSwgYW5kIHByZXNzaW5nIFNoaWZ0LVRhYiBzaG91bGQgcmV2ZXJzZSB0
aGUgb3JkZXIuIE1ha2VzIHN1cmUgdGhhdCBhIHNoYWRvdyBob3N0IGVsZW1lbnQgc2hvdWxkIGFj
dCBsaWtlIGEgaWZyYW1lIGVsZW1lbnQuCisKK0ZvY3VzIGlucHV0LTAxLgoraWQ6aW5wdXQtMDEo
dGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KKworUHJlc3MgVGFiIDExIHRpbWVzLgoraWQ6aW5wdXQt
MTModGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KK2lkOmlucHV0LTE1KHRhYkluZGV4PTIpIGlzIGZv
Y3VzZWQuCitpZDppbnB1dC0wMih0YWJJbmRleD0wKSBpcyBmb2N1c2VkLgoraWQ6aW5wdXQtMDQo
dGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KK2lkOmlmcmFtZS1pbnB1dC0wNih0YWJJbmRleD0xKSBp
cyBmb2N1c2VkLgoraWQ6aWZyYW1lLXNoYWRvdy1pbnB1dC0wOSh0YWJJbmRleD0xKSBpcyBmb2N1
c2VkLgoraWQ6aWZyYW1lLXNoYWRvdy1pbnB1dC0wOCh0YWJJbmRleD0wKSBpcyBmb2N1c2VkLgor
aWQ6aWZyYW1lLWlucHV0LTEyKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCitpZDppZnJhbWUtaW5w
dXQtMTEodGFiSW5kZXg9MikgaXMgZm9jdXNlZC4KK2lkOmlmcmFtZS1pbnB1dC0wNSh0YWJJbmRl
eD0wKSBpcyBmb2N1c2VkLgoraWQ6aW5wdXQtMTQodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KKwor
UHJlc3MgU2hpZnQtVGFiIDExIHRpbWVzLgoraWQ6aWZyYW1lLWlucHV0LTA1KHRhYkluZGV4PTAp
IGlzIGZvY3VzZWQuCitpZDppZnJhbWUtaW5wdXQtMTEodGFiSW5kZXg9MikgaXMgZm9jdXNlZC4K
K2lkOmlmcmFtZS1pbnB1dC0xMih0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgoraWQ6aWZyYW1lLXNo
YWRvdy1pbnB1dC0wOCh0YWJJbmRleD0wKSBpcyBmb2N1c2VkLgoraWQ6aWZyYW1lLXNoYWRvdy1p
bnB1dC0wOSh0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgoraWQ6aWZyYW1lLWlucHV0LTA2KHRhYklu
ZGV4PTEpIGlzIGZvY3VzZWQuCitpZDppbnB1dC0wNCh0YWJJbmRleD0wKSBpcyBmb2N1c2VkLgor
aWQ6aW5wdXQtMDIodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KK2lkOmlucHV0LTE1KHRhYkluZGV4
PTIpIGlzIGZvY3VzZWQuCitpZDppbnB1dC0xMyh0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgoraWQ6
aW5wdXQtMDEodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KKworVGVzdCBmaW5pc2hlZC4KKworCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1h
bmQtc2hhZG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlm
cmFtZS1hbmQtc2hhZG93Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JmNWZkYWI5MjA2ZWRlYWUyMDA0ZjE5
ODI5MmYzNTYxMjFjYjNhMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3cuaHRtbApAQCAtMCwwICsxLDEwNCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0cyB0aGF0IHBy
ZXNzaW5nIFRhYiBrZXkgc2hvdWxkIHRyYXZlcnNlIGludG8gaWZyYW1lIGFuZCBzaGFkb3cgdHJl
ZSwgYW5kIHByZXNzaW5nIFNoaWZ0LVRhYiBzaG91bGQgcmV2ZXJzZSB0aGUgb3JkZXIuCisgTWFr
ZXMgc3VyZSB0aGF0IGEgc2hhZG93IGhvc3QgZWxlbWVudCBzaG91bGQgYWN0IGxpa2UgYSBpZnJh
bWUgZWxlbWVudC48L3A+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+CitmdW5j
dGlvbiBsb2cobXNnKSB7CisgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2NvbnNvbGUnKS50
ZXh0Q29udGVudCArPSAobXNnICsgJ1xuJyk7Cit9CisKK2Z1bmN0aW9uIGRlc2NyaXB0aW9uKGVs
ZW1lbnQpIHsKKyAgIHZhciBtc2cgPSAnJzsKKyAgICBpZiAoZWxlbWVudC5pZCkgeworICAgICAg
bXNnICs9ICdpZDonICsgZWxlbWVudC5pZDsKKyAgICB9CisgICAgbXNnICs9ICcodGFiSW5kZXg9
JyArIGVsZW1lbnQudGFiSW5kZXggKyAnKSc7CisgICAgcmV0dXJuIG1zZzsKK30KKworZnVuY3Rp
b24gb25Gb2N1cyhldmVudCkgeworICAgIGxvZyhkZXNjcmlwdGlvbihldmVudC50YXJnZXQpICsg
JyBpcyBmb2N1c2VkLicpOworfQorCitmdW5jdGlvbiBhZGRGb2N1c0V2ZW50TGlzdGVuZXIoZWxl
bWVudCkgeworICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbkZvY3VzLCBm
YWxzZSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCBpZCwgdGFi
SW5kZXgpIHsKKyAgICB2YXIgaW5wdXQgPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKKyAg
ICBpbnB1dC50eXBlID0gJ3RleHQnOworICAgIGlucHV0LmlkID0gaWQ7CisgICAgaW5wdXQudGFi
SW5kZXggPSB0YWJJbmRleDsKKyAgICBhZGRGb2N1c0V2ZW50TGlzdGVuZXIoaW5wdXQpOworICAg
IHJldHVybiBpbnB1dDsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICB2YXIgZG9jID0gZG9j
dW1lbnQ7CisKKyAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50
KGRvYywgJ2lucHV0LTAxJywgMSkpOworICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRl
eHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMDInLCAwKSk7CisKKyAgICBmdW5jdGlvbiBhZGRT
aGFkb3dIb3N0KGRvYykgeworICAgICAgICB2YXIgc2hhZG93SG9zdCA9IGRvYy5jcmVhdGVFbGVt
ZW50KCdwJyk7CisgICAgICAgIHNoYWRvd0hvc3QudGFiSW5kZXggPSAtMTsgIC8vIFRoaXMgc2hh
ZG93IGhvc3QgKGFuZCBhIHNoYWRvdyB0cmVlIGluIHRoYXQpIHNob3VsZCBiZSBza2lwcGVkLgor
ICAgICAgICB2YXIgc2hhZG93ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZW5zdXJlU2hhZG93Um9v
dChzaGFkb3dIb3N0KTsKKyAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc2hhZG93SG9zdCk7
CisgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywg
J3NoYWRvdy1pbnB1dC0wMycsIDApKTsKKyAgICB9CisgICAgYWRkU2hhZG93SG9zdChkb2MpOwor
CisgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdp
bnB1dC0wNCcsIDApKTsKKworICAgIGZ1bmN0aW9uIGFkZElmcmFtZShkb2MpIHsKKyAgICAgICAg
dmFyIGlmcmFtZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgICAgZG9jLmJv
ZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgICAgICAgZG9jID0gaWZyYW1lLmNvbnRlbnREb2N1
bWVudDsKKworICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVt
ZW50KGRvYywgJ2lmcmFtZS1pbnB1dC0wNScsIDApKTsKKyAgICAgICAgZG9jLmJvZHkuYXBwZW5k
Q2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtaW5wdXQtMDYnLCAxKSk7
CisgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9j
LCAnaWZyYW1lLWlucHV0LTA3JywgLTEpKTsKKworICAgICAgICBmdW5jdGlvbiBhZGRTaGFkb3dI
b3N0KGRvYykgeworICAgICAgICAgICAgdmFyIHNoYWRvd0hvc3QgPSBkb2MuY3JlYXRlRWxlbWVu
dCgncCcpOworICAgICAgICAgICAgc2hhZG93SG9zdC50YWJJbmRleCA9IDE7CisgICAgICAgICAg
ICB2YXIgc2hhZG93ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZW5zdXJlU2hhZG93Um9vdChzaGFk
b3dIb3N0KTsKKyAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNoYWRvd0hvc3QpOwor
CisgICAgICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChk
b2MsICdpZnJhbWUtc2hhZG93LWlucHV0LTA4JywgMCkpOworICAgICAgICAgICAgc2hhZG93LmFw
cGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaWZyYW1lLXNoYWRvdy1pbnB1
dC0wOScsIDEpKTsKKyAgICAgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5w
dXRFbGVtZW50KGRvYywgJ2lmcmFtZS1zaGFkb3ctaW5wdXQtMTAnLCAtMSkpOworICAgICAgICB9
CisgICAgICAgIGFkZFNoYWRvd0hvc3QoZG9jKTsKKworICAgICAgICBkb2MuYm9keS5hcHBlbmRD
aGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lmcmFtZS1pbnB1dC0xMScsIDIpKTsK
KyAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2Ms
ICdpZnJhbWUtaW5wdXQtMTInLCAxKSk7CisgICAgfQorICAgIGFkZElmcmFtZShkb2MpOworCisg
ICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpbnB1
dC0xMycsIDEpKTsKKyAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVt
ZW50KGRvYywgJ2lucHV0LTE0JywgMCkpOworICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0
ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMTUnLCAyKSk7CisKKyAgICBsb2coJ0ZvY3Vz
IGlucHV0LTAxLicpOworICAgIGRvYy5nZXRFbGVtZW50QnlJZCgnaW5wdXQtMDEnKS5mb2N1cygp
OworCisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICB2YXIgcHJlc3NlZCA9
IDExOworICAgICAgICBsb2coJ1xuUHJlc3MgVGFiICcgKyBwcmVzc2VkICsgJyB0aW1lcy4nKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVzc2VkOyArK2kpIHsKKyAgICAgICAgICAg
IGV2ZW50U2VuZGVyLmtleURvd24oJ1x0Jyk7CisgICAgICAgIH0KKyAgICAgICAgbG9nKCdcblBy
ZXNzIFNoaWZ0LVRhYiAnICsgcHJlc3NlZCArICcgdGltZXMuJyk7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcHJlc3NlZDsgKytpKSB7CisgICAgICAgICAgICBldmVudFNlbmRlci5rZXlE
b3duKCdcdCcsIFsnc2hpZnRLZXknXSk7CisgICAgICAgIH0KKyAgIH0KKyAgIGxvZygnXG5UZXN0
IGZpbmlzaGVkLicpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggN2YwNWQ3ZjdhZWZhZjc0NzBjZGZiNDYzYzZiZGI5ZDdhZDM4ZmJjMS4uNzkwOTVlZjIwZmFh
MDY2OGY4NWFhNTIzZjg5YWNiMWRhYTEwZjYwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBA
CisyMDExLTA1LTI2ICBIYXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGZvcndhcmQvYmFja3dh
cmQgdGFiIHRyYXZlcnNhbCBjYW4gdmlzaXQgZm9jdXNhYmxlIGVsZW1lbnRzIGluIHNoYWRvdyBy
b290LgorCisgICAgICAgIEEgc2hhZG93IGhvc3QgYWN0cyBzaW1pbGFyIHRvIGEgaWZyYW1lIGVs
ZW1lbnQgaW4gdGFiIHRyYXZlcnNhbC4gSWYgYSBzaGFkb3cKKyAgICAgICAgaG9zdCBpcyBub3Qg
Zm9jdXNhYmxlLCBhbGwgZGVzY2VuZGFudCBlbGVtZW50cyBpbiB0aGUgc2hhZG93IHJvb3QgYXJl
IHNraXBwZWQuCisgICAgICAgIEEgc2NvcGUgYm91bmRhcnkgaW4gdGFiIHRyYXZlcnNhbCBpcyBu
b3cgYSBUcmVlU2NvcGUgb2YgaWZyYW1lIG9yIHNoYWRvdyByb290LgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTQxMAorCisgICAgICAgIFRlc3Q6
IGZhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3cuaHRtbAorCisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAg
ICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0Nv
bnRyb2xsZXI6OmFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVJbkN1cnJlbnRTY29wZSk6CisgICAg
ICAgIChXZWJDb3JlOjpzaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6OmlzVHJlZVNjb3Bl
T3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dE5vZGVXaXRoRXhhY3RUYWJJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwcmV2aW91c05vZGVXaXRoRXhhY3RUYWJJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpuZXh0Tm9kZVdpdGhHcmVhdGVyVGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6cHJldmlvdXNOb2RlV2l0aExvd2VyVGFiSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9j
dXNDb250cm9sbGVyOjpkZWVwRm9jdXNhYmxlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1
c0NvbnRyb2xsZXI6Om5leHRGb2N1c2FibGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3Vz
Q29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
Y3VzQ29udHJvbGxlcjo6b3duZXJPZlRyZWVTY29wZSk6CisgICAgICAgICogcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuaDoKKwogMjAxMS0wNS0yNSAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCmluZGV4IGJjOTg1YjlhMjQ4NzE3NzdlOGQ5ZDA2OTEwMDIxYmRmMTQyMzU2Mjcu
LjJjMzA5YjZhNzg2ZDEwNGRiYzI0NzA4Zjc0YjE2OWQ1Y2FkYjg4ZjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcApAQCAtMjQ5OCwxMTggKzI0OTgsNiBAQCBDU1NTdHlsZVNoZWV0KiBEb2N1bWVu
dDo6bWFwcGVkRWxlbWVudFNoZWV0KCkKICAgICByZXR1cm4gbV9tYXBwZWRFbGVtZW50U2hlZXQu
Z2V0KCk7CiB9CiAKLXN0YXRpYyBOb2RlKiBuZXh0Tm9kZVdpdGhFeGFjdFRhYkluZGV4KE5vZGUq
IHN0YXJ0LCBpbnQgdGFiSW5kZXgsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewotICAgIC8vIFNl
YXJjaCBpcyBpbmNsdXNpdmUgb2Ygc3RhcnQKLSAgICBmb3IgKE5vZGUqIG4gPSBzdGFydDsgbjsg
biA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkKLSAgICAgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1
c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4KCkgPT0gdGFiSW5kZXgpCi0gICAgICAgICAgICBy
ZXR1cm4gbjsKLSAgICAKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIE5vZGUqIHByZXZpb3Vz
Tm9kZVdpdGhFeGFjdFRhYkluZGV4KE5vZGUqIHN0YXJ0LCBpbnQgdGFiSW5kZXgsIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQotewotICAgIC8vIFNlYXJjaCBpcyBpbmNsdXNpdmUgb2Ygc3RhcnQKLSAg
ICBmb3IgKE5vZGUqIG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkp
Ci0gICAgICAgIGlmIChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBuLT50YWJJbmRl
eCgpID09IHRhYkluZGV4KQotICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLXN0YXRpYyBOb2RlKiBuZXh0Tm9kZVdpdGhHcmVhdGVyVGFiSW5kZXgoTm9kZSog
c3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gU2Vh
cmNoIGlzIGluY2x1c2l2ZSBvZiBzdGFydAotICAgIGludCB3aW5uaW5nVGFiSW5kZXggPSBTSFJU
X01BWCArIDE7Ci0gICAgTm9kZSogd2lubmVyID0gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBzdGFy
dDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkKLSAgICAgICAgaWYgKG4tPmlzS2V5Ym9h
cmRGb2N1c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4KCkgPiB0YWJJbmRleCAmJiBuLT50YWJJ
bmRleCgpIDwgd2lubmluZ1RhYkluZGV4KSB7Ci0gICAgICAgICAgICB3aW5uZXIgPSBuOwotICAg
ICAgICAgICAgd2lubmluZ1RhYkluZGV4ID0gbi0+dGFiSW5kZXgoKTsKLSAgICAgICAgfQotICAg
IAotICAgIHJldHVybiB3aW5uZXI7Ci19Ci0KLXN0YXRpYyBOb2RlKiBwcmV2aW91c05vZGVXaXRo
TG93ZXJUYWJJbmRleChOb2RlKiBzdGFydCwgaW50IHRhYkluZGV4LCBLZXlib2FyZEV2ZW50KiBl
dmVudCkKLXsKLSAgICAvLyBTZWFyY2ggaXMgaW5jbHVzaXZlIG9mIHN0YXJ0Ci0gICAgaW50IHdp
bm5pbmdUYWJJbmRleCA9IDA7Ci0gICAgTm9kZSogd2lubmVyID0gMDsKLSAgICBmb3IgKE5vZGUq
IG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpCi0gICAgICAgIGlm
IChuLT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBuLT50YWJJbmRleCgpIDwgdGFiSW5k
ZXggJiYgbi0+dGFiSW5kZXgoKSA+IHdpbm5pbmdUYWJJbmRleCkgewotICAgICAgICAgICAgd2lu
bmVyID0gbjsKLSAgICAgICAgICAgIHdpbm5pbmdUYWJJbmRleCA9IG4tPnRhYkluZGV4KCk7Ci0g
ICAgICAgIH0KLSAgICAKLSAgICByZXR1cm4gd2lubmVyOwotfQotCi1Ob2RlKiBEb2N1bWVudDo6
bmV4dEZvY3VzYWJsZU5vZGUoTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewot
ICAgIGlmIChzdGFydCkgewotICAgICAgICAvLyBJZiBhIG5vZGUgaXMgZXhjbHVkZWQgZnJvbSB0
aGUgbm9ybWFsIHRhYmJpbmcgY3ljbGUsIHRoZSBuZXh0IGZvY3VzYWJsZSBub2RlIGlzIGRldGVy
bWluZWQgYnkgdHJlZSBvcmRlcgotICAgICAgICBpZiAoc3RhcnQtPnRhYkluZGV4KCkgPCAwKSB7
Ci0gICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydC0+dHJhdmVyc2VOZXh0Tm9kZSgpOyBu
OyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKQotICAgICAgICAgICAgICAgIGlmIChuLT5pc0tl
eWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiBuLT50YWJJbmRleCgpID49IDApCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIC8vIEZpcnN0IHRy
eSB0byBmaW5kIGEgbm9kZSB3aXRoIHRoZSBzYW1lIHRhYmluZGV4IGFzIHN0YXJ0IHRoYXQgY29t
ZXMgYWZ0ZXIgc3RhcnQgaW4gdGhlIGRvY3VtZW50LgotICAgICAgICBpZiAoTm9kZSogd2lubmVy
ID0gbmV4dE5vZGVXaXRoRXhhY3RUYWJJbmRleChzdGFydC0+dHJhdmVyc2VOZXh0Tm9kZSgpLCBz
dGFydC0+dGFiSW5kZXgoKSwgZXZlbnQpKQotICAgICAgICAgICAgcmV0dXJuIHdpbm5lcjsKLQot
ICAgICAgICBpZiAoIXN0YXJ0LT50YWJJbmRleCgpKQotICAgICAgICAgICAgLy8gV2UndmUgcmVh
Y2hlZCB0aGUgbGFzdCBub2RlIGluIHRoZSBkb2N1bWVudCB3aXRoIGEgdGFiaW5kZXggb2YgMC4g
VGhpcyBpcyB0aGUgZW5kIG9mIHRoZSB0YWJiaW5nIG9yZGVyLgotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgLy8gTG9vayBmb3IgdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGRvY3Vt
ZW50IHRoYXQ6Ci0gICAgLy8gMSkgaGFzIHRoZSBsb3dlc3QgdGFiaW5kZXggdGhhdCBpcyBoaWdo
ZXIgdGhhbiBzdGFydCdzIHRhYmluZGV4IChvciAwLCBpZiBzdGFydCBpcyBudWxsKSwgYW5kCi0g
ICAgLy8gMikgY29tZXMgZmlyc3QgaW4gdGhlIGRvY3VtZW50LCBpZiB0aGVyZSdzIGEgdGllLgot
ICAgIGlmIChOb2RlKiB3aW5uZXIgPSBuZXh0Tm9kZVdpdGhHcmVhdGVyVGFiSW5kZXgodGhpcywg
c3RhcnQgPyBzdGFydC0+dGFiSW5kZXgoKSA6IDAsIGV2ZW50KSkKLSAgICAgICAgcmV0dXJuIHdp
bm5lcjsKLQotICAgIC8vIFRoZXJlIGFyZSBubyBub2RlcyB3aXRoIGEgdGFiaW5kZXggZ3JlYXRl
ciB0aGFuIHN0YXJ0J3MgdGFiaW5kZXgsCi0gICAgLy8gc28gZmluZCB0aGUgZmlyc3Qgbm9kZSB3
aXRoIGEgdGFiaW5kZXggb2YgMC4KLSAgICByZXR1cm4gbmV4dE5vZGVXaXRoRXhhY3RUYWJJbmRl
eCh0aGlzLCAwLCBldmVudCk7Ci19Ci0KLU5vZGUqIERvY3VtZW50OjpwcmV2aW91c0ZvY3VzYWJs
ZU5vZGUoTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewotICAgIE5vZGUqIGxh
c3Q7Ci0gICAgZm9yIChsYXN0ID0gdGhpczsgbGFzdC0+bGFzdENoaWxkKCk7IGxhc3QgPSBsYXN0
LT5sYXN0Q2hpbGQoKSkgeyB9Ci0KLSAgICAvLyBGaXJzdCB0cnkgdG8gZmluZCB0aGUgbGFzdCBu
b2RlIGluIHRoZSBkb2N1bWVudCB0aGF0IGNvbWVzIGJlZm9yZSBzdGFydCBhbmQgaGFzIHRoZSBz
YW1lIHRhYmluZGV4IGFzIHN0YXJ0LgotICAgIC8vIElmIHN0YXJ0IGlzIG51bGwsIGZpbmQgdGhl
IGxhc3Qgbm9kZSBpbiB0aGUgZG9jdW1lbnQgd2l0aCBhIHRhYmluZGV4IG9mIDAuCi0gICAgTm9k
ZSogc3RhcnRpbmdOb2RlOwotICAgIGludCBzdGFydGluZ1RhYkluZGV4OwotICAgIGlmIChzdGFy
dCkgewotICAgICAgICBzdGFydGluZ05vZGUgPSBzdGFydC0+dHJhdmVyc2VQcmV2aW91c05vZGUo
KTsKLSAgICAgICAgc3RhcnRpbmdUYWJJbmRleCA9IHN0YXJ0LT50YWJJbmRleCgpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN0YXJ0aW5nTm9kZSA9IGxhc3Q7Ci0gICAgICAgIHN0YXJ0aW5nVGFi
SW5kZXggPSAwOwotICAgIH0KLSAgICAKLSAgICAvLyBIb3dldmVyLCBpZiBhIG5vZGUgaXMgZXhj
bHVkZWQgZnJvbSB0aGUgbm9ybWFsIHRhYmJpbmcgY3ljbGUsIHRoZSBwcmV2aW91cyBmb2N1c2Fi
bGUgbm9kZSBpcyBkZXRlcm1pbmVkIGJ5IHRyZWUgb3JkZXIKLSAgICBpZiAoc3RhcnRpbmdUYWJJ
bmRleCA8IDApIHsKLSAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnRpbmdOb2RlOyBuOyBuID0g
bi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkKLSAgICAgICAgICAgIGlmIChuLT5pc0tleWJvYXJk
Rm9jdXNhYmxlKGV2ZW50KSAmJiBuLT50YWJJbmRleCgpID49IDApCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG47ICAgICAgICAKLSAgICB9Ci0KLSAgICBpZiAoTm9kZSogd2lubmVyID0gcHJldmlv
dXNOb2RlV2l0aEV4YWN0VGFiSW5kZXgoc3RhcnRpbmdOb2RlLCBzdGFydGluZ1RhYkluZGV4LCBl
dmVudCkpCi0gICAgICAgIHJldHVybiB3aW5uZXI7Ci0KLSAgICAvLyBUaGVyZSBhcmUgbm8gbm9k
ZXMgYmVmb3JlIHN0YXJ0IHdpdGggdGhlIHNhbWUgdGFiaW5kZXggYXMgc3RhcnQsIHNvIGxvb2sg
Zm9yIGEgbm9kZSB0aGF0OgotICAgIC8vIDEpIGhhcyB0aGUgaGlnaGVzdCBub24temVybyB0YWJp
bmRleCAodGhhdCBpcyBsZXNzIHRoYW4gc3RhcnQncyB0YWJpbmRleCksIGFuZAotICAgIC8vIDIp
IGNvbWVzIGxhc3QgaW4gdGhlIGRvY3VtZW50LCBpZiB0aGVyZSdzIGEgdGllLgotICAgIHN0YXJ0
aW5nVGFiSW5kZXggPSAoc3RhcnQgJiYgc3RhcnQtPnRhYkluZGV4KCkpID8gc3RhcnQtPnRhYklu
ZGV4KCkgOiBTSFJUX01BWDsKLSAgICByZXR1cm4gcHJldmlvdXNOb2RlV2l0aExvd2VyVGFiSW5k
ZXgobGFzdCwgc3RhcnRpbmdUYWJJbmRleCwgZXZlbnQpOwotfQotCiBpbnQgRG9jdW1lbnQ6Om5v
ZGVBYnNJbmRleChOb2RlICpub2RlKQogewogICAgIEFTU0VSVChub2RlLT5kb2N1bWVudCgpID09
IHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBlMGFmYjZhMzRmOWE2OGUzMTIwNjQ3MzUy
MDJlZDE1ZDgyZmM4ZTQ2Li4xOGYxYTJlYTY2NjkwZjAyYjFkMmRiOTUwNGM5MWE1NDg4ZTE5NTE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNzY4LDMxICs3NjgsOSBAQCBwdWJsaWM6CiAKICAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uKiBnZXRPdmVycmlkZVN0eWxlKEVsZW1lbnQqLCBjb25zdCBT
dHJpbmcmIHBzZXVkb0VsdCk7CiAKLSAgICAvKioKLSAgICAgKiBTZWFyY2hlcyB0aHJvdWdoIHRo
ZSBkb2N1bWVudCwgc3RhcnRpbmcgZnJvbSBmcm9tTm9kZSwgZm9yIHRoZSBuZXh0IHNlbGVjdGFi
bGUgZWxlbWVudCB0aGF0IGNvbWVzIGFmdGVyIGZyb21Ob2RlLgotICAgICAqIFRoZSBvcmRlciBm
b2xsb3dlZCBpcyBhcyBzcGVjaWZpZWQgaW4gc2VjdGlvbiAxNy4xMS4xIG9mIHRoZSBIVE1MNCBz
cGVjLCB3aGljaCBpcyBlbGVtZW50cyB3aXRoIHRhYiBpbmRleGVzCi0gICAgICogZmlyc3QgKGZy
b20gbG93ZXN0IHRvIGhpZ2hlc3QpLCBhbmQgdGhlbiBlbGVtZW50cyB3aXRob3V0IHRhYiBpbmRl
eGVzIChpbiBkb2N1bWVudCBvcmRlcikuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZnJvbU5vZGUg
VGhlIG5vZGUgZnJvbSB3aGljaCB0byBzdGFydCBzZWFyY2hpbmcuIFRoZSBub2RlIGFmdGVyIHRo
aXMgd2lsbCBiZSBmb2N1c2VkLiBNYXkgYmUgbnVsbC4KLSAgICAgKgotICAgICAqIEByZXR1cm4g
VGhlIGZvY3VzIG5vZGUgdGhhdCBjb21lcyBhZnRlciBmcm9tTm9kZQotICAgICAqCi0gICAgICog
U2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2ludGVyYWN0L2Zvcm1zLmh0bWwjaC0xNy4x
MS4xCi0gICAgICovCi0gICAgTm9kZSogbmV4dEZvY3VzYWJsZU5vZGUoTm9kZSogc3RhcnQsIEtl
eWJvYXJkRXZlbnQqKTsKIAotICAgIC8qKgotICAgICAqIFNlYXJjaGVzIHRocm91Z2ggdGhlIGRv
Y3VtZW50LCBzdGFydGluZyBmcm9tIGZyb21Ob2RlLCBmb3IgdGhlIHByZXZpb3VzIHNlbGVjdGFi
bGUgZWxlbWVudCAodGhhdCBjb21lcyBfYmVmb3JlXykKLSAgICAgKiBmcm9tTm9kZS4gVGhlIG9y
ZGVyIGZvbGxvd2VkIGlzIGFzIHNwZWNpZmllZCBpbiBzZWN0aW9uIDE3LjExLjEgb2YgdGhlIEhU
TUw0IHNwZWMsIHdoaWNoIGlzIGVsZW1lbnRzIHdpdGggdGFiCi0gICAgICogaW5kZXhlcyBmaXJz
dCAoZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCksIGFuZCB0aGVuIGVsZW1lbnRzIHdpdGhvdXQgdGFi
IGluZGV4ZXMgKGluIGRvY3VtZW50IG9yZGVyKS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBmcm9t
Tm9kZSBUaGUgbm9kZSBmcm9tIHdoaWNoIHRvIHN0YXJ0IHNlYXJjaGluZy4gVGhlIG5vZGUgYmVm
b3JlIHRoaXMgd2lsbCBiZSBmb2N1c2VkLiBNYXkgYmUgbnVsbC4KLSAgICAgKgotICAgICAqIEBy
ZXR1cm4gVGhlIGZvY3VzIG5vZGUgdGhhdCBjb21lcyBiZWZvcmUgZnJvbU5vZGUKLSAgICAgKgot
ICAgICAqIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9pbnRlcmFjdC9mb3Jtcy5odG1s
I2gtMTcuMTEuMQotICAgICAqLwotICAgIE5vZGUqIHByZXZpb3VzRm9jdXNhYmxlTm9kZShOb2Rl
KiBzdGFydCwgS2V5Ym9hcmRFdmVudCopOworICAgIC8vIFNpbWlsYXIgdG8gcHJldmlvdXNGb2N1
c2FibGVOb2RlLCBidXQgdGhlIHNlYXJjaCBpcyBpbmNsdXNpdmUgb2Ygc3RhcnQuCisgICAgTm9k
ZSogcHJldmlvdXNGb2N1c2FibGVOb2RlSW5jbHVzaXZlKE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2
ZW50Kik7CiAKICAgICBpbnQgbm9kZUFic0luZGV4KE5vZGUqKTsKICAgICBOb2RlKiBub2RlV2l0
aEFic0luZGV4KGludCBhYnNJbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxl
ci5jcHAKaW5kZXggZTdiMzc4MzkzZDM4YWJmOTUxNjdiOTc0M2FiZTUxZTg4NzRkNzJiNi4uYWMx
ZTFkNDZmOGIyNWQ4ZDcwZDQyMTBmN2MzN2M2ZGZkMDA1Y2Q5MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgIlJlbmRl
cldpZGdldC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRp
b24uaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIiAvLyBG
b3IgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlCkBAIC0xNDQsMzAgKzE0NSw2IEBAIHZvaWQg
Rm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkKGJvb2wgZm9jdXNlZCkKICAgICB9CiB9CiAKLXN0
YXRpYyBOb2RlKiBkZWVwRm9jdXNhYmxlTm9kZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5v
ZGUqIG5vZGUsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewotICAgIC8vIFRoZSBub2RlIHdlIGZv
dW5kIG1pZ2h0IGJlIGEgSFRNTEZyYW1lT3duZXJFbGVtZW50LCBzbyBkZXNjZW5kIGRvd24gdGhl
IGZyYW1lIHRyZWUgdW50aWwgd2UgZmluZCBlaXRoZXI6Ci0gICAgLy8gMSkgYSBmb2N1c2FibGUg
bm9kZSwgb3IKLSAgICAvLyAyKSB0aGUgZGVlcGVzdC1uZXN0ZWQgSFRNTEZyYW1lT3duZXJFbGVt
ZW50Ci0gICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7Ci0g
ICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBzdGF0aWNfY2FzdDxIVE1MRnJh
bWVPd25lckVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgaWYgKCFvd25lci0+Y29udGVudEZyYW1l
KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBv
d25lci0+Y29udGVudEZyYW1lKCktPmRvY3VtZW50KCk7Ci0KLSAgICAgICAgbm9kZSA9IChkaXJl
Y3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKQotICAgICAgICAgICAgPyBkb2N1bWVudC0+
bmV4dEZvY3VzYWJsZU5vZGUoMCwgZXZlbnQpCi0gICAgICAgICAgICA6IGRvY3VtZW50LT5wcmV2
aW91c0ZvY3VzYWJsZU5vZGUoMCwgZXZlbnQpOwotICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAg
ICAgICAgIG5vZGUgPSBvd25lcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KIGJvb2wgRm9jdXNDb250cm9sbGVyOjpzZXRJbml0
aWFsRm9jdXMoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCkK
IHsKICAgICBib29sIGRpZEFkdmFuY2VGb2N1cyA9IGFkdmFuY2VGb2N1cyhkaXJlY3Rpb24sIGV2
ZW50LCB0cnVlKTsKQEAgLTIxNCwzMCArMTkxLDcgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFk
dmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWIK
IAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
IAotICAgIE5vZGUqIG5vZGUgPSAoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRm9yd2FyZCkK
LSAgICAgICAgPyBkb2N1bWVudC0+bmV4dEZvY3VzYWJsZU5vZGUoY3VycmVudE5vZGUsIGV2ZW50
KQotICAgICAgICA6IGRvY3VtZW50LT5wcmV2aW91c0ZvY3VzYWJsZU5vZGUoY3VycmVudE5vZGUs
IGV2ZW50KTsKLSAgICAgICAgICAgIAotICAgIC8vIElmIHRoZXJlJ3Mgbm8gZm9jdXNhYmxlIG5v
ZGUgdG8gYWR2YW5jZSB0bywgbW92ZSB1cCB0aGUgZnJhbWUgdHJlZSB1bnRpbCB3ZSBmaW5kIG9u
ZS4KLSAgICB3aGlsZSAoIW5vZGUgJiYgZnJhbWUpIHsKLSAgICAgICAgRnJhbWUqIHBhcmVudEZy
YW1lID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0gICAgICAgIGlmICghcGFyZW50RnJhbWUp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBEb2N1bWVudCogcGFyZW50RG9jdW1lbnQg
PSBwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKTsKLQotICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOwotICAgICAgICBpZiAoIW93bmVyKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgbm9kZSA9IChkaXJlY3Rpb24gPT0gRm9jdXNE
aXJlY3Rpb25Gb3J3YXJkKQotICAgICAgICAgICAgPyBwYXJlbnREb2N1bWVudC0+bmV4dEZvY3Vz
YWJsZU5vZGUob3duZXIsIGV2ZW50KQotICAgICAgICAgICAgOiBwYXJlbnREb2N1bWVudC0+cHJl
dmlvdXNGb2N1c2FibGVOb2RlKG93bmVyLCBldmVudCk7Ci0KLSAgICAgICAgZnJhbWUgPSBwYXJl
bnRGcmFtZTsKLSAgICB9Ci0KLSAgICBub2RlID0gZGVlcEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9u
LCBub2RlLCBldmVudCk7CisgICAgTm9kZSogbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVj
dGlvbiwgY3VycmVudE5vZGUsIGV2ZW50KTsKIAogICAgIGlmICghbm9kZSkgewogICAgICAgICAv
LyBXZSBkaWRuJ3QgZmluZCBhIG5vZGUgdG8gZm9jdXMsIHNvIHdlIHNob3VsZCB0cnkgdG8gcGFz
cyBmb2N1cyB0byBDaHJvbWUuCkBAIC0yNDksMTAgKzIwMyw5IEBAIGJvb2wgRm9jdXNDb250cm9s
bGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9u
LCBLZXliCiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaHJvbWUgZG9lc24ndCB3YW50IGZvY3Vz
LCBzbyB3ZSBzaG91bGQgd3JhcCBmb2N1cy4KLSAgICAgICAgRG9jdW1lbnQqIGQgPSBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLT5kb2N1bWVudCgpOwogICAgICAgICBub2RlID0gKGRpcmVjdGlvbiA9PSBG
b2N1c0RpcmVjdGlvbkZvcndhcmQpCi0gICAgICAgICAgICA/IGQtPm5leHRGb2N1c2FibGVOb2Rl
KDAsIGV2ZW50KQotICAgICAgICAgICAgOiBkLT5wcmV2aW91c0ZvY3VzYWJsZU5vZGUoMCwgZXZl
bnQpOworICAgICAgICAgICAgPyBuZXh0Rm9jdXNhYmxlTm9kZShtX3BhZ2UtPm1haW5GcmFtZSgp
LT5kb2N1bWVudCgpLCAwLCBldmVudCkKKyAgICAgICAgICAgIDogcHJldmlvdXNGb2N1c2FibGVO
b2RlKG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCksIDAsIGV2ZW50KTsKIAogICAgICAg
ICBub2RlID0gZGVlcEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBub2RlLCBldmVudCk7CiAKQEAg
LTMwNiw2ICsyNTksMjAwIEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRv
Y3VtZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBLZXliCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGUoRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uLCBOb2RlKiBjdXJyZW50Tm9kZSwgS2V5Ym9hcmRFdmVudCogZXZl
bnQpCit7CisgICAgTm9kZSogbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlSW5DdXJyZW50U2NvcGUo
ZGlyZWN0aW9uLCBjdXJyZW50Tm9kZSwgZXZlbnQpOworICAgIFRyZWVTY29wZSogc2NvcGUgPSBj
dXJyZW50Tm9kZSA/IGN1cnJlbnROb2RlLT50cmVlU2NvcGUoKSA6IGZvY3VzZWRPck1haW5GcmFt
ZSgpLT5kb2N1bWVudCgpOworICAgIC8vIElmIHRoZXJlJ3Mgbm8gZm9jdXNhYmxlIG5vZGUgdG8g
YWR2YW5jZSB0bywgbW92ZSB1cCB0aGUgdHJlZSBzY29wZXMgdW50aWwgd2UgZmluZCBvbmUuCisg
ICAgd2hpbGUgKCFub2RlICYmIHNjb3BlKSB7CisgICAgICAgIE5vZGUqIG93bmVyID0gb3duZXJP
ZlRyZWVTY29wZShzY29wZSk7CisgICAgICAgIGlmICghb3duZXIpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlSW5DdXJyZW50U2NvcGUoZGlyZWN0
aW9uLCBvd25lciwgZXZlbnQpOworICAgICAgICBzY29wZSA9IG93bmVyLT50cmVlU2NvcGUoKTsK
KyAgICB9CisgICAgbm9kZSA9IGRlZXBGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgbm9kZSwgZXZl
bnQpOworICAgIHJldHVybiBub2RlOworfQorCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRG
b2N1c2FibGVOb2RlSW5DdXJyZW50U2NvcGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBOb2Rl
KiBub2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBUcmVlU2NvcGUqIHJvb3Q7Cisg
ICAgaWYgKG5vZGUpCisgICAgICAgIHJvb3QgPSBub2RlLT50cmVlU2NvcGUoKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgICAg
IEFTU0VSVChmcmFtZSk7CisgICAgICAgIHJvb3QgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICB9
CisgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKQorICAgICAg
ICA/IG5leHRGb2N1c2FibGVOb2RlKHJvb3QsIG5vZGUsIGV2ZW50KQorICAgICAgICA6IHByZXZp
b3VzRm9jdXNhYmxlTm9kZShyb290LCBub2RlLCBldmVudCk7Cit9CisKK2lubGluZSBzdGF0aWMg
U2hhZG93Um9vdCogc2hhZG93Um9vdChOb2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlLT5p
c0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQobm9kZSktPnNoYWRvd1Jvb3QoKSA6IDA7Cit9CisK
K2lubGluZSBzdGF0aWMgYm9vbCBpc1RyZWVTY29wZU93bmVyKE5vZGUqIG5vZGUpCit7CisgICAg
cmV0dXJuIG5vZGUgJiYgKG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSB8fCBzaGFkb3dSb290
KG5vZGUpKTsKK30KKworc3RhdGljIE5vZGUqIG5leHROb2RlV2l0aEV4YWN0VGFiSW5kZXgoTm9k
ZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgLy8g
U2VhcmNoIGlzIGluY2x1c2l2ZSBvZiBzdGFydAorICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBu
OyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKQorICAgICAgICBpZiAobi0+aXNLZXlib2FyZEZv
Y3VzYWJsZShldmVudCkgJiYgbi0+dGFiSW5kZXgoKSA9PSB0YWJJbmRleCkKKyAgICAgICAgICAg
IHJldHVybiBuOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBOb2RlKiBwcmV2aW91c05v
ZGVXaXRoRXhhY3RUYWJJbmRleChOb2RlKiBzdGFydCwgaW50IHRhYkluZGV4LCBLZXlib2FyZEV2
ZW50KiBldmVudCkKK3sKKyAgICAvLyBTZWFyY2ggaXMgaW5jbHVzaXZlIG9mIHN0YXJ0CisgICAg
Zm9yIChOb2RlKiBuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQor
ICAgICAgICBpZiAobi0+aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCkgJiYgbi0+dGFiSW5kZXgo
KSA9PSB0YWJJbmRleCkKKyAgICAgICAgICAgIHJldHVybiBuOworCisgICAgcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyBOb2RlKiBuZXh0Tm9kZVdpdGhHcmVhdGVyVGFiSW5kZXgoTm9kZSogc3RhcnQs
IGludCB0YWJJbmRleCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgLy8gU2VhcmNoIGlz
IGluY2x1c2l2ZSBvZiBzdGFydAorICAgIGludCB3aW5uaW5nVGFiSW5kZXggPSBTSFJUX01BWCAr
IDE7CisgICAgTm9kZSogd2lubmVyID0gMDsKKyAgICBmb3IgKE5vZGUqIG4gPSBzdGFydDsgbjsg
biA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkKKyAgICAgICAgaWYgKG4tPmlzS2V5Ym9hcmRGb2N1
c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4KCkgPiB0YWJJbmRleCAmJiBuLT50YWJJbmRleCgp
IDwgd2lubmluZ1RhYkluZGV4KSB7CisgICAgICAgICAgICB3aW5uZXIgPSBuOworICAgICAgICAg
ICAgd2lubmluZ1RhYkluZGV4ID0gbi0+dGFiSW5kZXgoKTsKKyAgICAgICAgfQorCisgICAgcmV0
dXJuIHdpbm5lcjsKK30KKworc3RhdGljIE5vZGUqIHByZXZpb3VzTm9kZVdpdGhMb3dlclRhYklu
ZGV4KE5vZGUqIHN0YXJ0LCBpbnQgdGFiSW5kZXgsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQorewor
ICAgIC8vIFNlYXJjaCBpcyBpbmNsdXNpdmUgb2Ygc3RhcnQKKyAgICBpbnQgd2lubmluZ1RhYklu
ZGV4ID0gMDsKKyAgICBOb2RlKiB3aW5uZXIgPSAwOworICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0
OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkKKyAgICAgICAgaWYgKG4tPmlzS2V5
Ym9hcmRGb2N1c2FibGUoZXZlbnQpICYmIG4tPnRhYkluZGV4KCkgPCB0YWJJbmRleCAmJiBuLT50
YWJJbmRleCgpID4gd2lubmluZ1RhYkluZGV4KSB7CisgICAgICAgICAgICB3aW5uZXIgPSBuOwor
ICAgICAgICAgICAgd2lubmluZ1RhYkluZGV4ID0gbi0+dGFiSW5kZXgoKTsKKyAgICAgICAgfQor
CisgICAgcmV0dXJuIHdpbm5lcjsKK30KKworTm9kZSogRm9jdXNDb250cm9sbGVyOjpkZWVwRm9j
dXNhYmxlTm9kZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIE5vZGUqIG5vZGUsIEtleWJvYXJk
RXZlbnQqIGV2ZW50KQoreworICAgIC8vIFRoZSBub2RlIHdlIGZvdW5kIG1pZ2h0IGJlIGEgSFRN
TEZyYW1lT3duZXJFbGVtZW50IG9yIGEgc2hhZG93IGhvc3QsIHNvIGRlc2NlbmQgZG93biB0aGUg
dHJlZSB1bnRpbCB3ZSBmaW5kIGVpdGhlcjoKKyAgICAvLyAxKSBhIGZvY3VzYWJsZSBub2RlLCBv
cgorICAgIC8vIDIpIHRoZSBkZWVwZXN0LW5lc3RlZCBIVE1MRnJhbWVPd25lckVsZW1lbnQgb3Ig
c2hhZG93IGhvc3QuCisgICAgd2hpbGUgKGlzVHJlZVNjb3BlT3duZXIobm9kZSkpIHsKKyAgICAg
ICAgTm9kZSogZm91bmROb2RlOworICAgICAgICBpZiAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVu
dCgpKSB7CisgICAgICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7CisgICAgICAgICAgICBpZiAoIW93
bmVyLT5jb250ZW50RnJhbWUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG93bmVyLT5jb250ZW50RnJhbWUoKS0+ZG9jdW1lbnQoKTsK
KyAgICAgICAgICAgIGZvdW5kTm9kZSA9IChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3
YXJkKQorICAgICAgICAgICAgICAgID8gbmV4dEZvY3VzYWJsZU5vZGUoZG9jdW1lbnQsIDAsIGV2
ZW50KQorICAgICAgICAgICAgICAgIDogcHJldmlvdXNGb2N1c2FibGVOb2RlKGRvY3VtZW50LCAw
LCBldmVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc2hhZG93Um9v
dChub2RlKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogU29tZSBlbGVtZW50cyAoZS5nLiBIVE1M
SW5wdXRFbGVtZW50IGFuZCBIVE1MVGV4dEFyZWFFbGVtZW50KSBkbyBleHRyYSB3b3JrIGluIHRo
ZWlyIGZvY3VzKCkgbWV0aG9kcy4KKyAgICAgICAgICAgIC8vIEZvY3VzaW5nIGFuIGVsZW1lbnQg
aW4gdGhlaXIgc2hhZG93LXJvb3QgbWlnaHQgbm90IGJlIGFwcHJvcHJpYXRlLgorICAgICAgICAg
ICAgZm91bmROb2RlID0gKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQpCisgICAg
ICAgICAgICAgICAgPyBuZXh0Rm9jdXNhYmxlTm9kZShzaGFkb3dSb290KG5vZGUpLCAwLCBldmVu
dCkKKyAgICAgICAgICAgICAgICA6IHByZXZpb3VzRm9jdXNhYmxlTm9kZShzaGFkb3dSb290KG5v
ZGUpLCAwLCBldmVudCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZE5vZGUpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgQVNTRVJUKG5vZGUgIT0gZm91bmROb2RlKTsKKyAgICAg
ICAgbm9kZSA9IGZvdW5kTm9kZTsKKyAgICB9CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK05vZGUq
IEZvY3VzQ29udHJvbGxlcjo6bmV4dEZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiBjdXJyZW50U2Nv
cGUsIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoc3RhcnQp
IHsKKyAgICAgICAgLy8gSWYgYSBub2RlIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIG5vcm1hbCB0YWJi
aW5nIGN5Y2xlLCB0aGUgbmV4dCBmb2N1c2FibGUgbm9kZSBpcyBkZXRlcm1pbmVkIGJ5IHRyZWUg
b3JkZXIKKyAgICAgICAgaWYgKHN0YXJ0LT50YWJJbmRleCgpIDwgMCkgeworICAgICAgICAgICAg
Zm9yIChOb2RlKiBuID0gc3RhcnQtPnRyYXZlcnNlTmV4dE5vZGUoKTsgbjsgbiA9IG4tPnRyYXZl
cnNlTmV4dE5vZGUoKSkKKyAgICAgICAgICAgICAgICBpZiAobi0+aXNLZXlib2FyZEZvY3VzYWJs
ZShldmVudCkgJiYgbi0+dGFiSW5kZXgoKSA+PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpcnN0IHRyeSB0byBmaW5kIGEgbm9kZSB3
aXRoIHRoZSBzYW1lIHRhYmluZGV4IGFzIHN0YXJ0IHRoYXQgY29tZXMgYWZ0ZXIgc3RhcnQgaW4g
dGhlIGN1cnJlbnRTY29wZS4KKyAgICAgICAgaWYgKE5vZGUqIHdpbm5lciA9IG5leHROb2RlV2l0
aEV4YWN0VGFiSW5kZXgoc3RhcnQtPnRyYXZlcnNlTmV4dE5vZGUoKSwgc3RhcnQtPnRhYkluZGV4
KCksIGV2ZW50KSkKKyAgICAgICAgICAgIHJldHVybiB3aW5uZXI7CisKKyAgICAgICAgaWYgKCFz
dGFydC0+dGFiSW5kZXgoKSkKKyAgICAgICAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGxhc3Qg
bm9kZSBpbiB0aGUgZG9jdW1lbnQgd2l0aCBhIHRhYmluZGV4IG9mIDAuIFRoaXMgaXMgdGhlIGVu
ZCBvZiB0aGUgdGFiYmluZyBvcmRlci4KKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIC8vIExvb2sgZm9yIHRoZSBmaXJzdCBub2RlIGluIHRoZSBjdXJyZW50U2NvcGUgdGhhdDoK
KyAgICAvLyAxKSBoYXMgdGhlIGxvd2VzdCB0YWJpbmRleCB0aGF0IGlzIGhpZ2hlciB0aGFuIHN0
YXJ0J3MgdGFiaW5kZXggKG9yIDAsIGlmIHN0YXJ0IGlzIG51bGwpLCBhbmQKKyAgICAvLyAyKSBj
b21lcyBmaXJzdCBpbiB0aGUgY3VycmVudFNjb3BlLCBpZiB0aGVyZSdzIGEgdGllLgorICAgIGlm
IChOb2RlKiB3aW5uZXIgPSBuZXh0Tm9kZVdpdGhHcmVhdGVyVGFiSW5kZXgoY3VycmVudFNjb3Bl
LCBzdGFydCA/IHN0YXJ0LT50YWJJbmRleCgpIDogMCwgZXZlbnQpKQorICAgICAgICByZXR1cm4g
d2lubmVyOworCisgICAgLy8gVGhlcmUgYXJlIG5vIG5vZGVzIHdpdGggYSB0YWJpbmRleCBncmVh
dGVyIHRoYW4gc3RhcnQncyB0YWJpbmRleCwKKyAgICAvLyBzbyBmaW5kIHRoZSBmaXJzdCBub2Rl
IHdpdGggYSB0YWJpbmRleCBvZiAwLgorICAgIHJldHVybiBuZXh0Tm9kZVdpdGhFeGFjdFRhYklu
ZGV4KGN1cnJlbnRTY29wZSwgMCwgZXZlbnQpOworfQorCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6
OnByZXZpb3VzRm9jdXNhYmxlTm9kZShUcmVlU2NvcGUqIGN1cnJlbnRTY29wZSwgTm9kZSogc3Rh
cnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIE5vZGUqIGxhc3Q7CisgICAgZm9yIChs
YXN0ID0gY3VycmVudFNjb3BlOyBsYXN0LT5sYXN0Q2hpbGQoKTsgbGFzdCA9IGxhc3QtPmxhc3RD
aGlsZCgpKSB7IH0KKworICAgIC8vIEZpcnN0IHRyeSB0byBmaW5kIHRoZSBsYXN0IG5vZGUgaW4g
dGhlIGN1cnJlbnRTY29wZSB0aGF0IGNvbWVzIGJlZm9yZSBzdGFydCBhbmQgaGFzIHRoZSBzYW1l
IHRhYmluZGV4IGFzIHN0YXJ0LgorICAgIC8vIElmIHN0YXJ0IGlzIG51bGwsIGZpbmQgdGhlIGxh
c3Qgbm9kZSBpbiB0aGUgY3VycmVudFNjb3BlIHdpdGggYSB0YWJpbmRleCBvZiAwLgorICAgIE5v
ZGUqIHN0YXJ0aW5nTm9kZTsKKyAgICBpbnQgc3RhcnRpbmdUYWJJbmRleDsKKyAgICBpZiAoc3Rh
cnQpIHsKKyAgICAgICAgc3RhcnRpbmdOb2RlID0gc3RhcnQtPnRyYXZlcnNlUHJldmlvdXNOb2Rl
KCk7CisgICAgICAgIHN0YXJ0aW5nVGFiSW5kZXggPSBzdGFydC0+dGFiSW5kZXgoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBzdGFydGluZ05vZGUgPSBsYXN0OworICAgICAgICBzdGFydGluZ1Rh
YkluZGV4ID0gMDsKKyAgICB9CisKKyAgICAvLyBIb3dldmVyLCBpZiBhIG5vZGUgaXMgZXhjbHVk
ZWQgZnJvbSB0aGUgbm9ybWFsIHRhYmJpbmcgY3ljbGUsIHRoZSBwcmV2aW91cyBmb2N1c2FibGUg
bm9kZSBpcyBkZXRlcm1pbmVkIGJ5IHRyZWUgb3JkZXIKKyAgICBpZiAoc3RhcnRpbmdUYWJJbmRl
eCA8IDApIHsKKyAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnRpbmdOb2RlOyBuOyBuID0gbi0+
dHJhdmVyc2VQcmV2aW91c05vZGUoKSkKKyAgICAgICAgICAgIGlmIChuLT5pc0tleWJvYXJkRm9j
dXNhYmxlKGV2ZW50KSAmJiBuLT50YWJJbmRleCgpID49IDApCisgICAgICAgICAgICAgICAgcmV0
dXJuIG47CisgICAgfQorCisgICAgaWYgKE5vZGUqIHdpbm5lciA9IHByZXZpb3VzTm9kZVdpdGhF
eGFjdFRhYkluZGV4KHN0YXJ0aW5nTm9kZSwgc3RhcnRpbmdUYWJJbmRleCwgZXZlbnQpKQorICAg
ICAgICByZXR1cm4gd2lubmVyOworCisgICAgLy8gVGhlcmUgYXJlIG5vIG5vZGVzIGJlZm9yZSBz
dGFydCB3aXRoIHRoZSBzYW1lIHRhYmluZGV4IGFzIHN0YXJ0LCBzbyBsb29rIGZvciBhIG5vZGUg
dGhhdDoKKyAgICAvLyAxKSBoYXMgdGhlIGhpZ2hlc3Qgbm9uLXplcm8gdGFiaW5kZXggKHRoYXQg
aXMgbGVzcyB0aGFuIHN0YXJ0J3MgdGFiaW5kZXgpLCBhbmQKKyAgICAvLyAyKSBjb21lcyBsYXN0
IGluIHRoZSBjdXJyZW50U2NvcGUsIGlmIHRoZXJlJ3MgYSB0aWUuCisgICAgc3RhcnRpbmdUYWJJ
bmRleCA9IChzdGFydCAmJiBzdGFydC0+dGFiSW5kZXgoKSkgPyBzdGFydC0+dGFiSW5kZXgoKSA6
IFNIUlRfTUFYOworICAgIHJldHVybiBwcmV2aW91c05vZGVXaXRoTG93ZXJUYWJJbmRleChsYXN0
LCBzdGFydGluZ1RhYkluZGV4LCBldmVudCk7Cit9CisKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6
b3duZXJPZlRyZWVTY29wZShUcmVlU2NvcGUqIHNjb3BlKQoreworICAgIEFTU0VSVChzY29wZSk7
CisgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0dXJuIHNjb3BlLT5z
aGFkb3dIb3N0KCk7CisgICAgaWYgKHNjb3BlLT5kb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAg
ICByZXR1cm4gc2NvcGUtPmRvY3VtZW50KCktPmZyYW1lKCktPm93bmVyRWxlbWVudCgpOworICAg
IHJldHVybiAwOworfQorCiBzdGF0aWMgYm9vbCByZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMoTm9k
ZSAqbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuaAppbmRleCBkZGQ4ZGVlYWNjODg3NDNmOGYwZTY2OWZiMjk3Mzc4NDdlNDFkZmNjLi4y
YTFhYjk4ZWU1MDk2ZWUxMWIyNTIwYTE4YzAwYjFhODlmYmYwZWJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRm9jdXNDb250cm9sbGVyLmgKQEAgLTM5LDYgKzM5LDcgQEAgY2xhc3MgSW50UmVjdDsKIGNs
YXNzIEtleWJvYXJkRXZlbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKK2NsYXNzIFRyZWVT
Y29wZTsKIAogY2xhc3MgRm9jdXNDb250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShGb2N1c0NvbnRyb2xsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY0LDYgKzY1
LDIyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBhZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5KEZvY3Vz
RGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CiAgICAgYm9vbCBhZHZhbmNlRm9jdXNJbkRvY3Vt
ZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBib29sIGluaXRpYWxGb2N1
cyk7CiAKKyAgICAvKioKKyAgICAgKiBTZWFyY2hlcyB0aHJvdWdoIHRoZSBkb2N1bWVudCwgc3Rh
cnRpbmcgZnJvbSBzdGFydCBub2RlLCBmb3IgdGhlIG5leHQvcHJldmlvdXMgc2VsZWN0YWJsZSBl
bGVtZW50IHRoYXQgY29tZXMgYWZ0ZXIvYmVmb3JlIHN0YXJ0IG5vZGUuCisgICAgICogVGhlIG9y
ZGVyIGZvbGxvd2VkIGlzIGFzIHNwZWNpZmllZCBpbiBzZWN0aW9uIDE3LjExLjEgb2YgdGhlIEhU
TUw0IHNwZWMsIHdoaWNoIGlzIGVsZW1lbnRzIHdpdGggdGFiIGluZGV4ZXMKKyAgICAgKiBmaXJz
dCAoZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCksIGFuZCB0aGVuIGVsZW1lbnRzIHdpdGhvdXQgdGFi
IGluZGV4ZXMgKGluIGRvY3VtZW50IG9yZGVyKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGFy
dCBUaGUgbm9kZSBmcm9tIHdoaWNoIHRvIHN0YXJ0IHNlYXJjaGluZy4gVGhlIG5vZGUgYWZ0ZXIg
dGhpcyB3aWxsIGJlIGZvY3VzZWQuIE1heSBiZSBudWxsLgorICAgICAqCisgICAgICogQHJldHVy
biBUaGUgZm9jdXMgbm9kZSB0aGF0IGNvbWVzIGFmdGVyIGZyb21Ob2RlCisgICAgICoKKyAgICAg
KiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3
LjExLjEKKyAgICAgKi8KKyAgICBOb2RlKiBmaW5kRm9jdXNhYmxlTm9kZShGb2N1c0RpcmVjdGlv
biwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKKyAgICBpbmxpbmUgTm9kZSogZmluZEZv
Y3VzYWJsZU5vZGVJbkN1cnJlbnRTY29wZShGb2N1c0RpcmVjdGlvbiwgTm9kZSogc3RhcnQsIEtl
eWJvYXJkRXZlbnQqKTsKKyAgICBOb2RlKiBkZWVwRm9jdXNhYmxlTm9kZShGb2N1c0RpcmVjdGlv
biwgTm9kZSosIEtleWJvYXJkRXZlbnQqKTsKKyAgICBOb2RlKiBvd25lck9mVHJlZVNjb3BlKFRy
ZWVTY29wZSopOworCiAgICAgYm9vbCBhZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5SW5Db250YWlu
ZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBzdGFydGluZ1JlY3QsIEZvY3VzRGly
ZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CiAgICAgdm9pZCBmaW5kRm9jdXNDYW5kaWRhdGVJbkNv
bnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJlY3QmIHN0YXJ0aW5nUmVjdCwgRm9j
dXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0NhbmRpZGF0ZSYgY2xvc2VzdCk7CiAK
QEAgLTcyLDYgKzg5LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNBY3RpdmU7CiAgICAgYm9v
bCBtX2lzRm9jdXNlZDsKICAgICBib29sIG1faXNDaGFuZ2luZ0ZvY3VzZWRGcmFtZTsKKworICAg
IE5vZGUqIG5leHRGb2N1c2FibGVOb2RlKFRyZWVTY29wZSogY3VycmVudFNjb3BlLCBOb2RlKiBz
dGFydCwgS2V5Ym9hcmRFdmVudCopOworICAgIE5vZGUqIHByZXZpb3VzRm9jdXNhYmxlTm9kZShU
cmVlU2NvcGUqIGN1cnJlbnRTY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95889</attachid>
            <date>2011-06-03 04:50:16 -0700</date>
            <delta_ts>2011-06-07 23:47:40 -0700</delta_ts>
            <desc>visits-elements-in-shadow-root</desc>
            <filename>bug-61410-20110603205014.patch</filename>
            <type>text/plain</type>
            <size>21997</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc4NzYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxNDY4OTU4OTBkMDZjZWJiOTNmMjdk
OWVkY2E2NzEzMGUxMGJlMjYyLi45ZTVmY2YzZWJjODNlODBlNWJlYjQ0ZDQ0YWQ5MjY4M2NhYjkx
YmJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDYtMDMgIEhheWF0byBJdG8gIDxoYXlh
dG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEEgZm9yd2FyZC9iYWNrd2FyZCB0YWIgdHJhdmVyc2FsIG5vdyB2aXNpdHMgZm9j
dXNhYmxlIGVsZW1lbnRzIGluIGEgc2hhZG93IHJvb3QuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTQxMAorCisgICAgICAgIExpa2UgYSBpZnJhbWUg
ZWxlbWVudCwgYSBzaGFkb3cgaG9zdCBiZWNvbWVzIGEgc2NvcGUgb2YKKyAgICAgICAgdGFiaW5k
ZXguIFRoYXQgbWVhbnMgYWxsIGRlc2NlbmRhbnQgZWxlbWVudHMgaW4gYSBzaGFkb3cgcm9vdCBh
cmUKKyAgICAgICAgc2tpcHBlZCBpZiB0aGUgaG9zdCBub2RlIG9mIHRoZSBzaGFkb3cgcm9vdCBp
cyBub3QgZm9jdXNhYmxlLgorCisgICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IGFmZmVjdCBIVE1M
SW5wdXRFbGVtZW50IGFuZCBIVE1MVGV4dEFyZWFFbGVtZW50LAorICAgICAgICB3aGljaCB1c2Vz
IGEgc2hhZG93IHJvb3QgYW5kIGRvIGV4dHJhIHdvcmtzIGluIHRoZWlyIGZvY3VzKCkKKyAgICAg
ICAgbWV0aG9kLgorCisgICAgICAgIEEgc2hhZG93IHJvb3QncyA8Y29udGVudD4gaXMgbm90IGNv
bnNpZGVyZWQgaW4gdGhpcyBwYXRjaC4KKyAgICAgICAgVGhhdCB3aWxsIGJlIGFkZHJlc3NlZCBp
biBhIGZvbGxvd2luZyBwYXRjaC4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy90YWItb3Jk
ZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93Lmh0bWw6IEFkZGVkLgorCiAy
MDExLTA2LTAxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVGhl
cmUgc2VlbXMgdG8gYmUgc29tZXRoaW5nIG9kZCBhYm91dCByZWdpc3RlclByb3RvY29sSGFuZGxl
ciBvbiBNYWMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9y
ZGVyLWlmcmFtZS1hbmQtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkzYTVlOGM4NzU2NjliZGJlMzViMjhiYmFjNDI4MTBkZjM4MDQyZGQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQt
c2hhZG93LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM0IEBACitUaGlzIHRlc3RzIHRoYXQgcHJl
c3NpbmcgVGFiIGtleSBzaG91bGQgdHJhdmVyc2UgaW50byBpZnJhbWUgYW5kIHNoYWRvdyB0cmVl
LCBhbmQgcHJlc3NpbmcgU2hpZnQtVGFiIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlci4gTWFrZXMg
c3VyZSB0aGF0IGEgc2hhZG93IGhvc3QgZWxlbWVudCBzaG91bGQgYWN0IGxpa2UgYSBpZnJhbWUg
ZWxlbWVudC4KKworRm9jdXMgaW5wdXQtMDEuCitpZDppbnB1dC0wMSh0YWJJbmRleD0xKSBpcyBm
b2N1c2VkLgorCitQcmVzcyBUYWIgMTEgdGltZXMuCitpZDppbnB1dC0xMyh0YWJJbmRleD0xKSBp
cyBmb2N1c2VkLgoraWQ6aW5wdXQtMTUodGFiSW5kZXg9MikgaXMgZm9jdXNlZC4KK2lkOmlucHV0
LTAyKHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCitpZDppbnB1dC0wNCh0YWJJbmRleD0wKSBpcyBm
b2N1c2VkLgoraWQ6aWZyYW1lLWlucHV0LTA2KHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCitpZDpp
ZnJhbWUtc2hhZG93LWlucHV0LTA5KHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCitpZDppZnJhbWUt
c2hhZG93LWlucHV0LTA4KHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCitpZDppZnJhbWUtaW5wdXQt
MTIodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KK2lkOmlmcmFtZS1pbnB1dC0xMSh0YWJJbmRleD0y
KSBpcyBmb2N1c2VkLgoraWQ6aWZyYW1lLWlucHV0LTA1KHRhYkluZGV4PTApIGlzIGZvY3VzZWQu
CitpZDppbnB1dC0xNCh0YWJJbmRleD0wKSBpcyBmb2N1c2VkLgorCitQcmVzcyBTaGlmdC1UYWIg
MTEgdGltZXMuCitpZDppZnJhbWUtaW5wdXQtMDUodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KK2lk
OmlmcmFtZS1pbnB1dC0xMSh0YWJJbmRleD0yKSBpcyBmb2N1c2VkLgoraWQ6aWZyYW1lLWlucHV0
LTEyKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCitpZDppZnJhbWUtc2hhZG93LWlucHV0LTA4KHRh
YkluZGV4PTApIGlzIGZvY3VzZWQuCitpZDppZnJhbWUtc2hhZG93LWlucHV0LTA5KHRhYkluZGV4
PTEpIGlzIGZvY3VzZWQuCitpZDppZnJhbWUtaW5wdXQtMDYodGFiSW5kZXg9MSkgaXMgZm9jdXNl
ZC4KK2lkOmlucHV0LTA0KHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCitpZDppbnB1dC0wMih0YWJJ
bmRleD0wKSBpcyBmb2N1c2VkLgoraWQ6aW5wdXQtMTUodGFiSW5kZXg9MikgaXMgZm9jdXNlZC4K
K2lkOmlucHV0LTEzKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCitpZDppbnB1dC0wMSh0YWJJbmRl
eD0xKSBpcyBmb2N1c2VkLgorCitUZXN0IGZpbmlzaGVkLgorCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3cuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3cu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zYmY1ZmRhYjkyMDZlZGVhZTIwMDRmMTk4MjkyZjM1NjEyMWNiM2Ey
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRl
ci1pZnJhbWUtYW5kLXNoYWRvdy5odG1sCkBAIC0wLDAgKzEsMTA0IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3RzIHRoYXQgcHJlc3NpbmcgVGFiIGtleSBz
aG91bGQgdHJhdmVyc2UgaW50byBpZnJhbWUgYW5kIHNoYWRvdyB0cmVlLCBhbmQgcHJlc3Npbmcg
U2hpZnQtVGFiIHNob3VsZCByZXZlcnNlIHRoZSBvcmRlci4KKyBNYWtlcyBzdXJlIHRoYXQgYSBz
aGFkb3cgaG9zdCBlbGVtZW50IHNob3VsZCBhY3QgbGlrZSBhIGlmcmFtZSBlbGVtZW50LjwvcD4K
KzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpIHsK
KyAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjY29uc29sZScpLnRleHRDb250ZW50ICs9ICht
c2cgKyAnXG4nKTsKK30KKworZnVuY3Rpb24gZGVzY3JpcHRpb24oZWxlbWVudCkgeworICAgdmFy
IG1zZyA9ICcnOworICAgIGlmIChlbGVtZW50LmlkKSB7CisgICAgICBtc2cgKz0gJ2lkOicgKyBl
bGVtZW50LmlkOworICAgIH0KKyAgICBtc2cgKz0gJyh0YWJJbmRleD0nICsgZWxlbWVudC50YWJJ
bmRleCArICcpJzsKKyAgICByZXR1cm4gbXNnOworfQorCitmdW5jdGlvbiBvbkZvY3VzKGV2ZW50
KSB7CisgICAgbG9nKGRlc2NyaXB0aW9uKGV2ZW50LnRhcmdldCkgKyAnIGlzIGZvY3VzZWQuJyk7
Cit9CisKK2Z1bmN0aW9uIGFkZEZvY3VzRXZlbnRMaXN0ZW5lcihlbGVtZW50KSB7CisgICAgZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIG9uRm9jdXMsIGZhbHNlKTsKK30KKworZnVu
Y3Rpb24gY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsIGlkLCB0YWJJbmRleCkgeworICAgIHZh
ciBpbnB1dCA9IGRvYy5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworICAgIGlucHV0LnR5cGUgPSAn
dGV4dCc7CisgICAgaW5wdXQuaWQgPSBpZDsKKyAgICBpbnB1dC50YWJJbmRleCA9IHRhYkluZGV4
OworICAgIGFkZEZvY3VzRXZlbnRMaXN0ZW5lcihpbnB1dCk7CisgICAgcmV0dXJuIGlucHV0Owor
fQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIHZhciBkb2MgPSBkb2N1bWVudDsKKworICAgIGRv
Yy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQtMDEn
LCAxKSk7CisgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChk
b2MsICdpbnB1dC0wMicsIDApKTsKKworICAgIGZ1bmN0aW9uIGFkZFNoYWRvd0hvc3QoZG9jKSB7
CisgICAgICAgIHZhciBzaGFkb3dIb3N0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3AnKTsKKyAgICAg
ICAgc2hhZG93SG9zdC50YWJJbmRleCA9IC0xOyAgLy8gVGhpcyBzaGFkb3cgaG9zdCAoYW5kIGEg
c2hhZG93IHRyZWUgaW4gdGhhdCkgc2hvdWxkIGJlIHNraXBwZWQuCisgICAgICAgIHZhciBzaGFk
b3cgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5lbnN1cmVTaGFkb3dSb290KHNoYWRvd0hvc3QpOwor
ICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChzaGFkb3dIb3N0KTsKKyAgICAgICAgc2hhZG93
LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnc2hhZG93LWlucHV0LTAz
JywgMCkpOworICAgIH0KKyAgICBhZGRTaGFkb3dIb3N0KGRvYyk7CisKKyAgICBkb2MuYm9keS5h
cHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTA0JywgMCkpOwor
CisgICAgZnVuY3Rpb24gYWRkSWZyYW1lKGRvYykgeworICAgICAgICB2YXIgaWZyYW1lID0gZG9j
LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChp
ZnJhbWUpOworICAgICAgICBkb2MgPSBpZnJhbWUuY29udGVudERvY3VtZW50OworCisgICAgICAg
IGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaWZyYW1l
LWlucHV0LTA1JywgMCkpOworICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0
SW5wdXRFbGVtZW50KGRvYywgJ2lmcmFtZS1pbnB1dC0wNicsIDEpKTsKKyAgICAgICAgZG9jLmJv
ZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtaW5wdXQt
MDcnLCAtMSkpOworCisgICAgICAgIGZ1bmN0aW9uIGFkZFNoYWRvd0hvc3QoZG9jKSB7CisgICAg
ICAgICAgICB2YXIgc2hhZG93SG9zdCA9IGRvYy5jcmVhdGVFbGVtZW50KCdwJyk7CisgICAgICAg
ICAgICBzaGFkb3dIb3N0LnRhYkluZGV4ID0gMTsKKyAgICAgICAgICAgIHZhciBzaGFkb3cgPSBs
YXlvdXRUZXN0Q29udHJvbGxlci5lbnN1cmVTaGFkb3dSb290KHNoYWRvd0hvc3QpOworICAgICAg
ICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc2hhZG93SG9zdCk7CisKKyAgICAgICAgICAgIHNo
YWRvdy5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lmcmFtZS1zaGFk
b3ctaW5wdXQtMDgnLCAwKSk7CisgICAgICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRl
VGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtc2hhZG93LWlucHV0LTA5JywgMSkpOworICAg
ICAgICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAn
aWZyYW1lLXNoYWRvdy1pbnB1dC0xMCcsIC0xKSk7CisgICAgICAgIH0KKyAgICAgICAgYWRkU2hh
ZG93SG9zdChkb2MpOworCisgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJ
bnB1dEVsZW1lbnQoZG9jLCAnaWZyYW1lLWlucHV0LTExJywgMikpOworICAgICAgICBkb2MuYm9k
eS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lmcmFtZS1pbnB1dC0x
MicsIDEpKTsKKyAgICB9CisgICAgYWRkSWZyYW1lKGRvYyk7CisKKyAgICBkb2MuYm9keS5hcHBl
bmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTEzJywgMSkpOworICAg
IGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5wdXQt
MTQnLCAwKSk7CisgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVu
dChkb2MsICdpbnB1dC0xNScsIDIpKTsKKworICAgIGxvZygnRm9jdXMgaW5wdXQtMDEuJyk7Cisg
ICAgZG9jLmdldEVsZW1lbnRCeUlkKCdpbnB1dC0wMScpLmZvY3VzKCk7CisKKyAgICBpZiAod2lu
ZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIHZhciBwcmVzc2VkID0gMTE7CisgICAgICAgIGxv
ZygnXG5QcmVzcyBUYWIgJyArIHByZXNzZWQgKyAnIHRpbWVzLicpOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHByZXNzZWQ7ICsraSkgeworICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5
RG93bignXHQnKTsKKyAgICAgICAgfQorICAgICAgICBsb2coJ1xuUHJlc3MgU2hpZnQtVGFiICcg
KyBwcmVzc2VkICsgJyB0aW1lcy4nKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVz
c2VkOyArK2kpIHsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oJ1x0JywgWydzaGlm
dEtleSddKTsKKyAgICAgICAgfQorICAgfQorICAgbG9nKCdcblRlc3QgZmluaXNoZWQuJyk7Cit9
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ZThkZjg3MTA0MzIy
YjZlYTFkYmUzNTQyZjQzNjA0YzdiMzQwNzg5Li4wZjZmZGM3ODY0ZWZmYTkwNGEyOThjZjU3M2Yx
ZGRmZDRhYzkwYmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDYtMDMgIEhh
eWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgZm9yd2FyZC9iYWNrd2FyZCB0YWIgdHJhdmVyc2Fs
IG5vdyB2aXNpdHMgZm9jdXNhYmxlIGVsZW1lbnRzIGluIGEgc2hhZG93IHJvb3QuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTQxMAorCisgICAgICAg
IFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3cuaHRtbAor
CisgICAgICAgIExpa2UgYSBpZnJhbWUgZWxlbWVudCwgYSBzaGFkb3cgaG9zdCBiZWNvbWVzIGEg
c2NvcGUgb2YKKyAgICAgICAgdGFiaW5kZXguIFRoYXQgbWVhbnMgYWxsIGRlc2NlbmRhbnQgZWxl
bWVudHMgaW4gYSBzaGFkb3cgcm9vdCBhcmUKKyAgICAgICAgc2tpcHBlZCBpZiB0aGUgaG9zdCBu
b2RlIG9mIHRoZSBzaGFkb3cgcm9vdCBpcyBub3QgZm9jdXNhYmxlLgorCisgICAgICAgIFRoZSBw
YXRjaCBkb2Vzbid0IGFmZmVjdCBIVE1MSW5wdXRFbGVtZW50IGFuZCBIVE1MVGV4dEFyZWFFbGVt
ZW50LAorICAgICAgICB3aGljaCB1c2VzIGEgc2hhZG93IHJvb3QgYW5kIGRvIGV4dHJhIHdvcmtz
IGluIHRoZWlyIGZvY3VzKCkKKyAgICAgICAgbWV0aG9kLgorCisgICAgICAgIEEgc2hhZG93IHJv
b3QncyA8Y29udGVudD4gaXMgbm90IGNvbnNpZGVyZWQgaW4gdGhpcyBwYXRjaC4KKyAgICAgICAg
VGhhdCB3aWxsIGJlIGFkZHJlc3NlZCBpbiBhIGZvbGxvd2luZyBwYXRjaC4KKworICAgICAgICAq
IHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJv
bGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1bWVudE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
Y3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NUcmVlU2NvcGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxlTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpzaGFkb3dSb290KToKKyAgICAgICAgKFdlYkNvcmU6OmlzVHJlZVNjb3BlT3du
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dE5vZGVXaXRoRXhhY3RUYWJJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmRlZXBGb2N1c2FibGVOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6bmV4dEZvY3VzYWJsZU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpwcmV2aW91c0ZvY3VzYWJsZU5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpvd25lck9mVHJlZVNjb3BlKToKKyAgICAg
ICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5oOgorCiAyMDExLTA2LTAxICBZdXRhIEtpdGFtdXJh
ICA8eXV0YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJh
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCmluZGV4IGNmZTY3NDRkMGM1
YjFlMGNkMWNjYjEwNjg1Mjc1MWQxMzg0M2QxZjMuLjY3MjkxM2QxOTVlMjIxNDg1NTE5NDkwNWE0
MGViMmZkNzk1MGY0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAK
QEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJT
Y3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hhZG93
Um9vdC5oIgogI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCiAjaW5jbHVkZSAiV2lkZ2V0
LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIgLy8gRm9yIGZpcnN0UG9zaXRpb25Jbk9yQmVm
b3JlTm9kZQpAQCAtMTQ1LDMwICsxNDYsNiBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9j
dXNlZChib29sIGZvY3VzZWQpCiAgICAgfQogfQogCi1Ob2RlKiBGb2N1c0NvbnRyb2xsZXI6OmRl
ZXBGb2N1c2FibGVOb2RlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSwgS2V5
Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0gICAgLy8gVGhlIG5vZGUgd2UgZm91bmQgbWlnaHQgYmUg
YSBIVE1MRnJhbWVPd25lckVsZW1lbnQsIHNvIGRlc2NlbmQgZG93biB0aGUgZnJhbWUgdHJlZSB1
bnRpbCB3ZSBmaW5kIGVpdGhlcjoKLSAgICAvLyAxKSBhIGZvY3VzYWJsZSBub2RlLCBvcgotICAg
IC8vIDIpIHRoZSBkZWVwZXN0LW5lc3RlZCBIVE1MRnJhbWVPd25lckVsZW1lbnQKLSAgICB3aGls
ZSAobm9kZSAmJiBub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKLSAgICAgICAgSFRNTEZy
YW1lT3duZXJFbGVtZW50KiBvd25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVu
dCo+KG5vZGUpOwotICAgICAgICBpZiAoIW93bmVyLT5jb250ZW50RnJhbWUoKSkKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG93bmVyLT5jb250ZW50
RnJhbWUoKS0+ZG9jdW1lbnQoKTsKLQotICAgICAgICBub2RlID0gKGRpcmVjdGlvbiA9PSBGb2N1
c0RpcmVjdGlvbkZvcndhcmQpCi0gICAgICAgICAgICA/IG5leHRGb2N1c2FibGVOb2RlKGRvY3Vt
ZW50LCAwLCBldmVudCkKLSAgICAgICAgICAgIDogcHJldmlvdXNGb2N1c2FibGVOb2RlKGRvY3Vt
ZW50LCAwLCBldmVudCk7Ci0gICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgbm9kZSA9
IG93bmVyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gbm9kZTsKLX0KLQogYm9vbCBGb2N1c0NvbnRyb2xsZXI6OnNldEluaXRpYWxGb2N1cyhGb2N1
c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIGJvb2wg
ZGlkQWR2YW5jZUZvY3VzID0gYWR2YW5jZUZvY3VzKGRpcmVjdGlvbiwgZXZlbnQsIHRydWUpOwpA
QCAtMjE1LDMwICsxOTIsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5E
b2N1bWVudE9yZGVyKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5YgogCiAgICAgZG9jdW1l
bnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgTm9kZSog
bm9kZSA9IChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKQotICAgICAgICA/IG5l
eHRGb2N1c2FibGVOb2RlKGRvY3VtZW50LCBjdXJyZW50Tm9kZSwgZXZlbnQpCi0gICAgICAgIDog
cHJldmlvdXNGb2N1c2FibGVOb2RlKGRvY3VtZW50LCBjdXJyZW50Tm9kZSwgZXZlbnQpOwotICAg
ICAgICAgICAgCi0gICAgLy8gSWYgdGhlcmUncyBubyBmb2N1c2FibGUgbm9kZSB0byBhZHZhbmNl
IHRvLCBtb3ZlIHVwIHRoZSBmcmFtZSB0cmVlIHVudGlsIHdlIGZpbmQgb25lLgotICAgIHdoaWxl
ICghbm9kZSAmJiBmcmFtZSkgewotICAgICAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBmcmFtZS0+
dHJlZSgpLT5wYXJlbnQoKTsKLSAgICAgICAgaWYgKCFwYXJlbnRGcmFtZSkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIERvY3VtZW50KiBwYXJlbnREb2N1bWVudCA9IHBhcmVudEZyYW1l
LT5kb2N1bWVudCgpOwotCi0gICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBm
cmFtZS0+b3duZXJFbGVtZW50KCk7Ci0gICAgICAgIGlmICghb3duZXIpCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBub2RlID0gKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndh
cmQpCi0gICAgICAgICAgICA/IG5leHRGb2N1c2FibGVOb2RlKHBhcmVudERvY3VtZW50LCBvd25l
ciwgZXZlbnQpCi0gICAgICAgICAgICA6IHByZXZpb3VzRm9jdXNhYmxlTm9kZShwYXJlbnREb2N1
bWVudCwgb3duZXIsIGV2ZW50KTsKLQotICAgICAgICBmcmFtZSA9IHBhcmVudEZyYW1lOwotICAg
IH0KLQotICAgIG5vZGUgPSBkZWVwRm9jdXNhYmxlTm9kZShkaXJlY3Rpb24sIG5vZGUsIGV2ZW50
KTsKKyAgICBOb2RlKiBub2RlID0gZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NUcmVlU2NvcGUoZGly
ZWN0aW9uLCBjdXJyZW50Tm9kZSA/IGN1cnJlbnROb2RlLT50cmVlU2NvcGUoKSA6IGRvY3VtZW50
LCBjdXJyZW50Tm9kZSwgZXZlbnQpOwogCiAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgIC8vIFdl
IGRpZG4ndCBmaW5kIGEgbm9kZSB0byBmb2N1cywgc28gd2Ugc2hvdWxkIHRyeSB0byBwYXNzIGZv
Y3VzIHRvIENocm9tZS4KQEAgLTI1MCwxMSArMjA0LDcgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6
OmFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIEtl
eWIKICAgICAgICAgfQogCiAgICAgICAgIC8vIENocm9tZSBkb2Vzbid0IHdhbnQgZm9jdXMsIHNv
IHdlIHNob3VsZCB3cmFwIGZvY3VzLgotICAgICAgICBEb2N1bWVudCogZCA9IG1fcGFnZS0+bWFp
bkZyYW1lKCktPmRvY3VtZW50KCk7Ci0gICAgICAgIG5vZGUgPSAoZGlyZWN0aW9uID09IEZvY3Vz
RGlyZWN0aW9uRm9yd2FyZCkKLSAgICAgICAgICAgID8gbmV4dEZvY3VzYWJsZU5vZGUoZCwgMCwg
ZXZlbnQpCi0gICAgICAgICAgICA6IHByZXZpb3VzRm9jdXNhYmxlTm9kZShkLCAwLCBldmVudCk7
Ci0KKyAgICAgICAgbm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgbV9wYWdlLT5t
YWluRnJhbWUoKS0+ZG9jdW1lbnQoKSwgMCwgZXZlbnQpOwogICAgICAgICBub2RlID0gZGVlcEZv
Y3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBub2RlLCBldmVudCk7CiAKICAgICAgICAgaWYgKCFub2Rl
KQpAQCAtMzA3LDYgKzI1NywzOSBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3Vz
SW5Eb2N1bWVudE9yZGVyKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgS2V5YgogICAgIHJldHVy
biB0cnVlOwogfQogCitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlQWNy
b3NzVHJlZVNjb3BlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgVHJlZVNjb3BlKiBzY29wZSwg
Tm9kZSogY3VycmVudE5vZGUsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIE5vZGUqIG5v
ZGUgPSBmaW5kRm9jdXNhYmxlTm9kZShkaXJlY3Rpb24sIHNjb3BlLCBjdXJyZW50Tm9kZSwgZXZl
bnQpOworICAgIC8vIElmIHRoZXJlJ3Mgbm8gZm9jdXNhYmxlIG5vZGUgdG8gYWR2YW5jZSB0bywg
bW92ZSB1cCB0aGUgdHJlZSBzY29wZXMgdW50aWwgd2UgZmluZCBvbmUuCisgICAgd2hpbGUgKCFu
b2RlICYmIHNjb3BlKSB7CisgICAgICAgIE5vZGUqIG93bmVyID0gb3duZXJPZlRyZWVTY29wZShz
Y29wZSk7CisgICAgICAgIGlmICghb3duZXIpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
bm9kZSA9IGZpbmRGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgb3duZXItPnRyZWVTY29wZSgpLCBv
d25lciwgZXZlbnQpOworICAgICAgICBzY29wZSA9IG93bmVyLT50cmVlU2NvcGUoKTsKKyAgICB9
CisgICAgbm9kZSA9IGRlZXBGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgbm9kZSwgZXZlbnQpOwor
ICAgIHJldHVybiBub2RlOworfQorCisKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3Vz
YWJsZU5vZGUoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBUcmVlU2NvcGUqIHNjb3BlLCBOb2Rl
KiBub2RlLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICByZXR1cm4gKGRpcmVjdGlvbiA9
PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQpCisgICAgICAgID8gbmV4dEZvY3VzYWJsZU5vZGUoc2Nv
cGUsIG5vZGUsIGV2ZW50KQorICAgICAgICA6IHByZXZpb3VzRm9jdXNhYmxlTm9kZShzY29wZSwg
bm9kZSwgZXZlbnQpOworfQorCitpbmxpbmUgc3RhdGljIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3Qo
Tm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVt
ZW50KG5vZGUpLT5zaGFkb3dSb290KCkgOiAwOworfQorCitpbmxpbmUgc3RhdGljIGJvb2wgaXNU
cmVlU2NvcGVPd25lcihOb2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlICYmIChub2RlLT5p
c0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgc2hhZG93Um9vdChub2RlKSk7Cit9CisKIHN0YXRpYyBO
b2RlKiBuZXh0Tm9kZVdpdGhFeGFjdFRhYkluZGV4KE5vZGUqIHN0YXJ0LCBpbnQgdGFiSW5kZXgs
IEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIC8vIFNlYXJjaCBpcyBpbmNsdXNpdmUgb2Yg
c3RhcnQKQEAgLTM1NSw3ICszMzgsMzYgQEAgc3RhdGljIE5vZGUqIHByZXZpb3VzTm9kZVdpdGhM
b3dlclRhYkluZGV4KE5vZGUqIHN0YXJ0LCBpbnQgdGFiSW5kZXgsIEtleWJvYXJkRXYKICAgICBy
ZXR1cm4gd2lubmVyOwogfQogCi1Ob2RlKiBGb2N1c0NvbnRyb2xsZXI6Om5leHRGb2N1c2FibGVO
b2RlKFRyZWVTY29wZSogd2l0aGluLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCogZXZlbnQp
CitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6OmRlZXBGb2N1c2FibGVOb2RlKEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbiwgTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgLy8g
VGhlIG5vZGUgd2UgZm91bmQgbWlnaHQgYmUgYSBIVE1MRnJhbWVPd25lckVsZW1lbnQgb3IgYSBz
aGFkb3cgaG9zdCwgc28gZGVzY2VuZCBkb3duIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgZWl0aGVy
OgorICAgIC8vIDEpIGEgZm9jdXNhYmxlIG5vZGUsIG9yCisgICAgLy8gMikgdGhlIGRlZXBlc3Qt
bmVzdGVkIEhUTUxGcmFtZU93bmVyRWxlbWVudCBvciBzaGFkb3cgaG9zdC4KKyAgICB3aGlsZSAo
aXNUcmVlU2NvcGVPd25lcihub2RlKSkgeworICAgICAgICBOb2RlKiBmb3VuZE5vZGU7CisgICAg
ICAgIGlmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIEhUTUxG
cmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1l
bnQqPihub2RlKTsKKyAgICAgICAgICAgIGlmICghb3duZXItPmNvbnRlbnRGcmFtZSgpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gb3du
ZXItPmNvbnRlbnRGcmFtZSgpLT5kb2N1bWVudCgpOworICAgICAgICAgICAgZm91bmROb2RlID0g
ZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBkb2N1bWVudCwgMCwgZXZlbnQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHNoYWRvd1Jvb3Qobm9kZSkpOworICAgICAg
ICAgICAgLy8gRklYTUU6IFNvbWUgZWxlbWVudHMgKGUuZy4gSFRNTElucHV0RWxlbWVudCBhbmQg
SFRNTFRleHRBcmVhRWxlbWVudCkgZG8gZXh0cmEgd29yayBpbiB0aGVpciBmb2N1cygpIG1ldGhv
ZHMuCisgICAgICAgICAgICAvLyBTa2lwcGluZyB0aGVzZSBlbGVtZW50cyBpcyB0aGUgc2FmZXN0
IGZpeCB1bnRpbCB3ZSBmaW5kIGEgYmV0dGVyIHdheS4KKyAgICAgICAgICAgIGlmIChub2RlLT5u
b2RlTmFtZSgpID09ICJJTlBVVCIgfHwgbm9kZS0+bm9kZU5hbWUoKSA9PSAiVEVYVEFSRUEiKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZm91bmROb2RlID0gZmluZEZvY3Vz
YWJsZU5vZGUoZGlyZWN0aW9uLCBzaGFkb3dSb290KG5vZGUpLCAwLCBldmVudCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFmb3VuZE5vZGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
QVNTRVJUKG5vZGUgIT0gZm91bmROb2RlKTsKKyAgICAgICAgbm9kZSA9IGZvdW5kTm9kZTsKKyAg
ICB9CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6bmV4dEZv
Y3VzYWJsZU5vZGUoVHJlZVNjb3BlKiBzY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQq
IGV2ZW50KQogewogICAgIGlmIChzdGFydCkgewogICAgICAgICAvLyBJZiBhIG5vZGUgaXMgZXhj
bHVkZWQgZnJvbSB0aGUgbm9ybWFsIHRhYmJpbmcgY3ljbGUsIHRoZSBuZXh0IGZvY3VzYWJsZSBu
b2RlIGlzIGRldGVybWluZWQgYnkgdHJlZSBvcmRlcgpAQCAtMzY1LDcgKzM3Nyw3IEBAIE5vZGUq
IEZvY3VzQ29udHJvbGxlcjo6bmV4dEZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiB3aXRoaW4sIE5v
ZGUqIHN0YXJ0LCBLZXlib2FyCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIGZpbmQgYSBub2RlIHdpdGggdGhlIHNhbWUg
dGFiaW5kZXggYXMgc3RhcnQgdGhhdCBjb21lcyBhZnRlciBzdGFydCBpbiB0aGUgdHJlZSBzY29w
ZS4KKyAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIGZpbmQgYSBub2RlIHdpdGggdGhlIHNhbWUgdGFi
aW5kZXggYXMgc3RhcnQgdGhhdCBjb21lcyBhZnRlciBzdGFydCBpbiB0aGUgc2NvcGUuCiAgICAg
ICAgIGlmIChOb2RlKiB3aW5uZXIgPSBuZXh0Tm9kZVdpdGhFeGFjdFRhYkluZGV4KHN0YXJ0LT50
cmF2ZXJzZU5leHROb2RlKCksIHN0YXJ0LT50YWJJbmRleCgpLCBldmVudCkpCiAgICAgICAgICAg
ICByZXR1cm4gd2lubmVyOwogCkBAIC0zNzQsMjQgKzM4NiwyNCBAQCBOb2RlKiBGb2N1c0NvbnRy
b2xsZXI6Om5leHRGb2N1c2FibGVOb2RlKFRyZWVTY29wZSogd2l0aGluLCBOb2RlKiBzdGFydCwg
S2V5Ym9hcgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLy8gTG9vayBmb3Ig
dGhlIGZpcnN0IG5vZGUgaW4gdGhlIHRyZWUgc2NvcGUgdGhhdDoKKyAgICAvLyBMb29rIGZvciB0
aGUgZmlyc3Qgbm9kZSBpbiB0aGUgc2NvcGUgdGhhdDoKICAgICAvLyAxKSBoYXMgdGhlIGxvd2Vz
dCB0YWJpbmRleCB0aGF0IGlzIGhpZ2hlciB0aGFuIHN0YXJ0J3MgdGFiaW5kZXggKG9yIDAsIGlm
IHN0YXJ0IGlzIG51bGwpLCBhbmQKLSAgICAvLyAyKSBjb21lcyBmaXJzdCBpbiB0aGUgdHJlZSBz
Y29wZSwgaWYgdGhlcmUncyBhIHRpZS4KLSAgICBpZiAoTm9kZSogd2lubmVyID0gbmV4dE5vZGVX
aXRoR3JlYXRlclRhYkluZGV4KHdpdGhpbiwgc3RhcnQgPyBzdGFydC0+dGFiSW5kZXgoKSA6IDAs
IGV2ZW50KSkKKyAgICAvLyAyKSBjb21lcyBmaXJzdCBpbiB0aGUgc2NvcGUsIGlmIHRoZXJlJ3Mg
YSB0aWUuCisgICAgaWYgKE5vZGUqIHdpbm5lciA9IG5leHROb2RlV2l0aEdyZWF0ZXJUYWJJbmRl
eChzY29wZSwgc3RhcnQgPyBzdGFydC0+dGFiSW5kZXgoKSA6IDAsIGV2ZW50KSkKICAgICAgICAg
cmV0dXJuIHdpbm5lcjsKIAogICAgIC8vIFRoZXJlIGFyZSBubyBub2RlcyB3aXRoIGEgdGFiaW5k
ZXggZ3JlYXRlciB0aGFuIHN0YXJ0J3MgdGFiaW5kZXgsCiAgICAgLy8gc28gZmluZCB0aGUgZmly
c3Qgbm9kZSB3aXRoIGEgdGFiaW5kZXggb2YgMC4KLSAgICByZXR1cm4gbmV4dE5vZGVXaXRoRXhh
Y3RUYWJJbmRleCh3aXRoaW4sIDAsIGV2ZW50KTsKKyAgICByZXR1cm4gbmV4dE5vZGVXaXRoRXhh
Y3RUYWJJbmRleChzY29wZSwgMCwgZXZlbnQpOwogfQogCi1Ob2RlKiBGb2N1c0NvbnRyb2xsZXI6
OnByZXZpb3VzRm9jdXNhYmxlTm9kZShUcmVlU2NvcGUqIHdpdGhpbiwgTm9kZSogc3RhcnQsIEtl
eWJvYXJkRXZlbnQqIGV2ZW50KQorTm9kZSogRm9jdXNDb250cm9sbGVyOjpwcmV2aW91c0ZvY3Vz
YWJsZU5vZGUoVHJlZVNjb3BlKiBzY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqIGV2
ZW50KQogewogICAgIE5vZGUqIGxhc3Q7Ci0gICAgZm9yIChsYXN0ID0gd2l0aGluOyBsYXN0LT5s
YXN0Q2hpbGQoKTsgbGFzdCA9IGxhc3QtPmxhc3RDaGlsZCgpKSB7IH0KKyAgICBmb3IgKGxhc3Qg
PSBzY29wZTsgbGFzdC0+bGFzdENoaWxkKCk7IGxhc3QgPSBsYXN0LT5sYXN0Q2hpbGQoKSkgeyB9
CiAKLSAgICAvLyBGaXJzdCB0cnkgdG8gZmluZCB0aGUgbGFzdCBub2RlIGluIHRoZSB0cmVlIHNj
b3BlIHRoYXQgY29tZXMgYmVmb3JlIHN0YXJ0IGFuZCBoYXMgdGhlIHNhbWUgdGFiaW5kZXggYXMg
c3RhcnQuCi0gICAgLy8gSWYgc3RhcnQgaXMgbnVsbCwgZmluZCB0aGUgbGFzdCBub2RlIGluIHRo
ZSB0cmVlIHNjb3BlIHdpdGggYSB0YWJpbmRleCBvZiAwLgorICAgIC8vIEZpcnN0IHRyeSB0byBm
aW5kIHRoZSBsYXN0IG5vZGUgaW4gdGhlIHNjb3BlIHRoYXQgY29tZXMgYmVmb3JlIHN0YXJ0IGFu
ZCBoYXMgdGhlIHNhbWUgdGFiaW5kZXggYXMgc3RhcnQuCisgICAgLy8gSWYgc3RhcnQgaXMgbnVs
bCwgZmluZCB0aGUgbGFzdCBub2RlIGluIHRoZSBzY29wZSB3aXRoIGEgdGFiaW5kZXggb2YgMC4K
ICAgICBOb2RlKiBzdGFydGluZ05vZGU7CiAgICAgaW50IHN0YXJ0aW5nVGFiSW5kZXg7CiAgICAg
aWYgKHN0YXJ0KSB7CkBAIC00MTQsMTEgKzQyNiwyMSBAQCBOb2RlKiBGb2N1c0NvbnRyb2xsZXI6
OnByZXZpb3VzRm9jdXNhYmxlTm9kZShUcmVlU2NvcGUqIHdpdGhpbiwgTm9kZSogc3RhcnQsIEtl
eQogCiAgICAgLy8gVGhlcmUgYXJlIG5vIG5vZGVzIGJlZm9yZSBzdGFydCB3aXRoIHRoZSBzYW1l
IHRhYmluZGV4IGFzIHN0YXJ0LCBzbyBsb29rIGZvciBhIG5vZGUgdGhhdDoKICAgICAvLyAxKSBo
YXMgdGhlIGhpZ2hlc3Qgbm9uLXplcm8gdGFiaW5kZXggKHRoYXQgaXMgbGVzcyB0aGFuIHN0YXJ0
J3MgdGFiaW5kZXgpLCBhbmQKLSAgICAvLyAyKSBjb21lcyBsYXN0IGluIHRoZSB0cmVlIHNjb3Bl
LCBpZiB0aGVyZSdzIGEgdGllLgotICAgIHN0YXJ0aW5nVGFiSW5kZXggPSAoc3RhcnQgJiYgc3Rh
cnQtPnRhYkluZGV4KCkpID8gc3RhcnQtPnRhYkluZGV4KCkgOiBzdGQ6Om51bWVyaWNfbGltaXRz
PHNob3J0Pjo6bWF4KCk7CisgICAgLy8gMikgY29tZXMgbGFzdCBpbiB0aGUgc2NvcGUsIGlmIHRo
ZXJlJ3MgYSB0aWUuCisgICAgc3RhcnRpbmdUYWJJbmRleCA9IChzdGFydCAmJiBzdGFydC0+dGFi
SW5kZXgoKSkgPyBzdGFydC0+dGFiSW5kZXgoKSA6IFNIUlRfTUFYOwogICAgIHJldHVybiBwcmV2
aW91c05vZGVXaXRoTG93ZXJUYWJJbmRleChsYXN0LCBzdGFydGluZ1RhYkluZGV4LCBldmVudCk7
CiB9CiAKK05vZGUqIEZvY3VzQ29udHJvbGxlcjo6b3duZXJPZlRyZWVTY29wZShUcmVlU2NvcGUq
IHNjb3BlKQoreworICAgIEFTU0VSVChzY29wZSk7CisgICAgaWYgKHNjb3BlLT5pc1NoYWRvd1Jv
b3QoKSkKKyAgICAgICAgcmV0dXJuIHNjb3BlLT5zaGFkb3dIb3N0KCk7CisgICAgaWYgKHNjb3Bl
LT5kb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICByZXR1cm4gc2NvcGUtPmRvY3VtZW50KCkt
PmZyYW1lKCktPm93bmVyRWxlbWVudCgpOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgYm9v
bCByZWxpbnF1aXNoZXNFZGl0aW5nRm9jdXMoTm9kZSAqbm9kZSkKIHsKICAgICBBU1NFUlQobm9k
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAppbmRleCAyZmRiYzkwZDExODZl
M2VhNWE3NzRmMmEwYWM3Yjc4M2UwZmYwNDg2Li42NjAzODcyZjQ5NWJmNTZkZGM1ZWI2NzkwNDkw
NGE1YjU4NWFmYTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJv
bGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKQEAgLTY1
LDcgKzY1LDIzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBhZHZhbmNlRm9jdXNEaXJlY3Rpb25hbGx5
KEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CiAgICAgYm9vbCBhZHZhbmNlRm9jdXNJ
bkRvY3VtZW50T3JkZXIoRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBib29sIGluaXRp
YWxGb2N1cyk7CiAKKyAgICBOb2RlKiBmaW5kRm9jdXNhYmxlTm9kZUFjcm9zc1RyZWVTY29wZShG
b2N1c0RpcmVjdGlvbiwgVHJlZVNjb3BlKiBzdGFydFNjb3BlLCBOb2RlKiBzdGFydCwgS2V5Ym9h
cmRFdmVudCopOwogICAgIE5vZGUqIGRlZXBGb2N1c2FibGVOb2RlKEZvY3VzRGlyZWN0aW9uLCBO
b2RlKiwgS2V5Ym9hcmRFdmVudCopOworICAgIE5vZGUqIG93bmVyT2ZUcmVlU2NvcGUoVHJlZVNj
b3BlKik7CisKKyAgICAvLyBTZWFyY2hlcyB0aHJvdWdoIHRoZSBnaXZlbiB0cmVlIHNjb3BlLCBz
dGFydGluZyBmcm9tIHN0YXJ0IG5vZGUsIGZvciB0aGUgbmV4dC9wcmV2aW91cyBzZWxlY3RhYmxl
IGVsZW1lbnQgdGhhdCBjb21lcyBhZnRlci9iZWZvcmUgc3RhcnQgbm9kZS4KKyAgICAvLyBUaGUg
b3JkZXIgZm9sbG93ZWQgaXMgYXMgc3BlY2lmaWVkIGluIHNlY3Rpb24gMTcuMTEuMSBvZiB0aGUg
SFRNTDQgc3BlYywgd2hpY2ggaXMgZWxlbWVudHMgd2l0aCB0YWIgaW5kZXhlcworICAgIC8vIGZp
cnN0IChmcm9tIGxvd2VzdCB0byBoaWdoZXN0KSwgYW5kIHRoZW4gZWxlbWVudHMgd2l0aG91dCB0
YWIgaW5kZXhlcyAoaW4gZG9jdW1lbnQgb3JkZXIpLgorICAgIC8vCisgICAgLy8gQHBhcmFtIHN0
YXJ0IFRoZSBub2RlIGZyb20gd2hpY2ggdG8gc3RhcnQgc2VhcmNoaW5nLiBUaGUgbm9kZSBhZnRl
ciB0aGlzIHdpbGwgYmUgZm9jdXNlZC4gTWF5IGJlIG51bGwuCisgICAgLy8KKyAgICAvLyBAcmV0
dXJuIFRoZSBmb2N1cyBub2RlIHRoYXQgY29tZXMgYWZ0ZXIvYmVmb3JlIHN0YXJ0IG5vZGUuCisg
ICAgLy8KKyAgICAvLyBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvaW50ZXJhY3QvZm9y
bXMuaHRtbCNoLTE3LjExLjEKKyAgICBpbmxpbmUgTm9kZSogZmluZEZvY3VzYWJsZU5vZGUoRm9j
dXNEaXJlY3Rpb24sIFRyZWVTY29wZSosIE5vZGUqIHN0YXJ0LCBLZXlib2FyZEV2ZW50Kik7CisK
KyAgICBOb2RlKiBuZXh0Rm9jdXNhYmxlTm9kZShUcmVlU2NvcGUqLCBOb2RlKiBzdGFydCwgS2V5
Ym9hcmRFdmVudCopOworICAgIE5vZGUqIHByZXZpb3VzRm9jdXNhYmxlTm9kZShUcmVlU2NvcGUq
LCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCopOwogCiAgICAgYm9vbCBhZHZhbmNlRm9jdXNE
aXJlY3Rpb25hbGx5SW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBz
dGFydGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CiAgICAgdm9pZCBm
aW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcihOb2RlKiBjb250YWluZXIsIGNvbnN0IEludFJl
Y3QmIHN0YXJ0aW5nUmVjdCwgRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQqLCBGb2N1c0Nh
bmRpZGF0ZSYgY2xvc2VzdCk7CkBAIC03NiwyOSArOTIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9pc0ZvY3VzZWQ7CiAgICAgYm9vbCBtX2lzQ2hhbmdpbmdGb2N1c2VkRnJhbWU7CiAKLSAgICAv
LyBTZWFyY2hlcyB0aHJvdWdoIHRoZSBkb2N1bWVudCwgc3RhcnRpbmcgZnJvbSBzdGFydCBub2Rl
LCBmb3IgdGhlIG5leHQgc2VsZWN0YWJsZSBlbGVtZW50IHRoYXQgY29tZXMgYWZ0ZXIgc3RhcnQg
bm9kZS4KLSAgICAvLyBUaGUgb3JkZXIgZm9sbG93ZWQgaXMgYXMgc3BlY2lmaWVkIGluIHNlY3Rp
b24gMTcuMTEuMSBvZiB0aGUgSFRNTDQgc3BlYywgd2hpY2ggaXMgZWxlbWVudHMgd2l0aCB0YWIg
aW5kZXhlcwotICAgIC8vIGZpcnN0IChmcm9tIGxvd2VzdCB0byBoaWdoZXN0KSwgYW5kIHRoZW4g
ZWxlbWVudHMgd2l0aG91dCB0YWIgaW5kZXhlcyAoaW4gZG9jdW1lbnQgb3JkZXIpLgotICAgIC8v
Ci0gICAgLy8gQHBhcmFtIHdpdGhpbiBUaGUgdHJlZSBzY29wZSB3aGVyZSBhIHNlYXJjaCBpcyBl
eGVjdXRlZC4KLSAgICAvLyBAcGFyYW0gc3RhcnQgVGhlIG5vZGUgZnJvbSB3aGljaCB0byBzdGFy
dCBzZWFyY2hpbmcuIFRoZSBub2RlIGJlZm9yZSB0aGlzIHdpbGwgYmUgZm9jdXNlZC4gTWF5IGJl
IG51bGwuCi0gICAgLy8KLSAgICAvLyBAcmV0dXJuIFRoZSBmb2N1cyBub2RlIHRoYXQgY29tZXMg
YWZ0ZXIgc3RhcnQgbm9kZS4KLSAgICAvLwotICAgIC8vIFNlZSBodHRwOi8vd3d3LnczLm9yZy9U
Ui9odG1sNC9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTEuMQotICAgIE5vZGUqIG5leHRGb2N1
c2FibGVOb2RlKFRyZWVTY29wZSogd2l0aGluLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCop
OwotCi0gICAgLy8gU2VhcmNoZXMgdGhyb3VnaCB0aGUgZG9jdW1lbnQsIHN0YXJ0aW5nIGZyb20g
c3RhcnQgbm9kZSwgZm9yIHRoZSBwcmV2aW91cyBzZWxlY3RhYmxlIGVsZW1lbnQgdGhhdCBjb21l
cyBiZWZvcmUgc3RhcnQgbm9kZS4KLSAgICAvLyBUaGUgb3JkZXIgZm9sbG93ZWQgaXMgYXMgc3Bl
Y2lmaWVkIGluIHNlY3Rpb24gMTcuMTEuMSBvZiB0aGUgSFRNTDQgc3BlYywgd2hpY2ggaXMgZWxl
bWVudHMgd2l0aCB0YWIgaW5kZXhlcwotICAgIC8vIGZpcnN0IChmcm9tIGxvd2VzdCB0byBoaWdo
ZXN0KSwgYW5kIHRoZW4gZWxlbWVudHMgd2l0aG91dCB0YWIgaW5kZXhlcyAoaW4gZG9jdW1lbnQg
b3JkZXIpLgotICAgIC8vCi0gICAgLy8gQHBhcmFtIHdpdGhpbiBUaGUgdHJlZSBzY29wZSB3aGVy
ZSBhIHNlYXJjaCBpcyBleGVjdXRlZC4KLSAgICAvLyBAcGFyYW0gc3RhcnQgVGhlIG5vZGUgZnJv
bSB3aGljaCB0byBzdGFydCBzZWFyY2hpbmcuIFRoZSBub2RlIGJlZm9yZSB0aGlzIHdpbGwgYmUg
Zm9jdXNlZC4gTWF5IGJlIG51bGwuCi0gICAgLy8KLSAgICAvLyBAcmV0dXJuIFRoZSBmb2N1cyBu
b2RlIHRoYXQgY29tZXMgYmVmb3JlIHN0YXJ0IG5vZGUuCi0gICAgLy8KLSAgICAvLyBTZWUgaHR0
cDovL3d3dy53My5vcmcvVFIvaHRtbDQvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3LjExLjEKLSAg
ICBOb2RlKiBwcmV2aW91c0ZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiB3aXRoaW4sIE5vZGUqIHN0
YXJ0LCBLZXlib2FyZEV2ZW50Kik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96389</attachid>
            <date>2011-06-07 23:42:26 -0700</date>
            <delta_ts>2011-06-08 09:11:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61410-20110608154224.patch</filename>
            <type>text/plain</type>
            <size>21650</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyNzgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjNTg1ODZjNjBhZGQ3ZDViYWQ1MGNj
ZDAxYjJlMDE4ZjU0ODJlODEzLi5hY2NlYzQzMDJhOGE4OTU2MDZkMzUyODBmZTU0NmQzNjA4ODcx
OTI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDYtMDcgIEhheWF0byBJdG8gIDxoYXlh
dG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEEgZm9yd2FyZC9iYWNrd2FyZCB0YWIgdHJhdmVyc2FsIG5vdyB2aXNpdHMgZm9j
dXNhYmxlIGVsZW1lbnRzIGluIGEgc2hhZG93IHJvb3QuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTQxMAorCisgICAgICAgIExpa2UgYSBpZnJhbWUg
ZWxlbWVudCwgYSBzaGFkb3cgaG9zdCBiZWNvbWVzIGEgc2NvcGUgb2YKKyAgICAgICAgdGFiaW5k
ZXguIFRoYXQgbWVhbnMgYWxsIGRlc2NlbmRhbnQgZWxlbWVudHMgaW4gYSBzaGFkb3cgcm9vdCBh
cmUKKyAgICAgICAgc2tpcHBlZCBpZiB0aGUgaG9zdCBub2RlIG9mIHRoZSBzaGFkb3cgcm9vdCBp
cyBub3QgZm9jdXNhYmxlLgorCisgICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IGFmZmVjdCBIVE1M
SW5wdXRFbGVtZW50IGFuZCBIVE1MVGV4dEFyZWFFbGVtZW50LAorICAgICAgICB3aGljaCB1c2Vz
IGEgc2hhZG93IHJvb3QgYW5kIGRvIGV4dHJhIHdvcmtzIGluIHRoZWlyIGZvY3VzKCkKKyAgICAg
ICAgbWV0aG9kLgorCisgICAgICAgIEEgc2hhZG93IHJvb3QncyA8Y29udGVudD4gaXMgbm90IGNv
bnNpZGVyZWQgaW4gdGhpcyBwYXRjaC4KKyAgICAgICAgVGhhdCB3aWxsIGJlIGFkZHJlc3NlZCBp
biBhIGZvbGxvd2luZyBwYXRjaC4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy90YWItb3Jk
ZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93Lmh0bWw6IEFkZGVkLgorCiAy
MDExLTA2LTA3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEd0
ayByZWJhc2VsaW5lIGFmdGVyIHI4ODI2Ni4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NoYWRvdy90YWItb3JkZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUtYW5kLXNoYWRvdy1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTNhNWU4Yzg3NTY2OWJkYmUzNWIyOGJiYWM0MjgxMGRmMzgw
NDJkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy90YWIt
b3JkZXItaWZyYW1lLWFuZC1zaGFkb3ctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzQgQEAKK1Ro
aXMgdGVzdHMgdGhhdCBwcmVzc2luZyBUYWIga2V5IHNob3VsZCB0cmF2ZXJzZSBpbnRvIGlmcmFt
ZSBhbmQgc2hhZG93IHRyZWUsIGFuZCBwcmVzc2luZyBTaGlmdC1UYWIgc2hvdWxkIHJldmVyc2Ug
dGhlIG9yZGVyLiBNYWtlcyBzdXJlIHRoYXQgYSBzaGFkb3cgaG9zdCBlbGVtZW50IHNob3VsZCBh
Y3QgbGlrZSBhIGlmcmFtZSBlbGVtZW50LgorCitGb2N1cyBpbnB1dC0wMS4KK2lkOmlucHV0LTAx
KHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCisKK1ByZXNzIFRhYiAxMSB0aW1lcy4KK2lkOmlucHV0
LTEzKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCitpZDppbnB1dC0xNSh0YWJJbmRleD0yKSBpcyBm
b2N1c2VkLgoraWQ6aW5wdXQtMDIodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KK2lkOmlucHV0LTA0
KHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCitpZDppZnJhbWUtaW5wdXQtMDYodGFiSW5kZXg9MSkg
aXMgZm9jdXNlZC4KK2lkOmlmcmFtZS1zaGFkb3ctaW5wdXQtMDkodGFiSW5kZXg9MSkgaXMgZm9j
dXNlZC4KK2lkOmlmcmFtZS1zaGFkb3ctaW5wdXQtMDgodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4K
K2lkOmlmcmFtZS1pbnB1dC0xMih0YWJJbmRleD0xKSBpcyBmb2N1c2VkLgoraWQ6aWZyYW1lLWlu
cHV0LTExKHRhYkluZGV4PTIpIGlzIGZvY3VzZWQuCitpZDppZnJhbWUtaW5wdXQtMDUodGFiSW5k
ZXg9MCkgaXMgZm9jdXNlZC4KK2lkOmlucHV0LTE0KHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCisK
K1ByZXNzIFNoaWZ0LVRhYiAxMSB0aW1lcy4KK2lkOmlmcmFtZS1pbnB1dC0wNSh0YWJJbmRleD0w
KSBpcyBmb2N1c2VkLgoraWQ6aWZyYW1lLWlucHV0LTExKHRhYkluZGV4PTIpIGlzIGZvY3VzZWQu
CitpZDppZnJhbWUtaW5wdXQtMTIodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KK2lkOmlmcmFtZS1z
aGFkb3ctaW5wdXQtMDgodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4KK2lkOmlmcmFtZS1zaGFkb3ct
aW5wdXQtMDkodGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KK2lkOmlmcmFtZS1pbnB1dC0wNih0YWJJ
bmRleD0xKSBpcyBmb2N1c2VkLgoraWQ6aW5wdXQtMDQodGFiSW5kZXg9MCkgaXMgZm9jdXNlZC4K
K2lkOmlucHV0LTAyKHRhYkluZGV4PTApIGlzIGZvY3VzZWQuCitpZDppbnB1dC0xNSh0YWJJbmRl
eD0yKSBpcyBmb2N1c2VkLgoraWQ6aW5wdXQtMTModGFiSW5kZXg9MSkgaXMgZm9jdXNlZC4KK2lk
OmlucHV0LTAxKHRhYkluZGV4PTEpIGlzIGZvY3VzZWQuCisKK1Rlc3QgZmluaXNoZWQuCisKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUt
YW5kLXNoYWRvdy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1p
ZnJhbWUtYW5kLXNoYWRvdy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiZjVmZGFiOTIwNmVkZWFlMjAwNGYx
OTgyOTJmMzU2MTIxY2IzYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zaGFkb3cvdGFiLW9yZGVyLWlmcmFtZS1hbmQtc2hhZG93Lmh0bWwKQEAgLTAsMCArMSwxMDQg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxwPlRoaXMgdGVzdHMgdGhhdCBw
cmVzc2luZyBUYWIga2V5IHNob3VsZCB0cmF2ZXJzZSBpbnRvIGlmcmFtZSBhbmQgc2hhZG93IHRy
ZWUsIGFuZCBwcmVzc2luZyBTaGlmdC1UYWIgc2hvdWxkIHJldmVyc2UgdGhlIG9yZGVyLgorIE1h
a2VzIHN1cmUgdGhhdCBhIHNoYWRvdyBob3N0IGVsZW1lbnQgc2hvdWxkIGFjdCBsaWtlIGEgaWZy
YW1lIGVsZW1lbnQuPC9wPgorPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8c2NyaXB0PgorZnVu
Y3Rpb24gbG9nKG1zZykgeworICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjb25zb2xlJyku
dGV4dENvbnRlbnQgKz0gKG1zZyArICdcbicpOworfQorCitmdW5jdGlvbiBkZXNjcmlwdGlvbihl
bGVtZW50KSB7CisgICB2YXIgbXNnID0gJyc7CisgICAgaWYgKGVsZW1lbnQuaWQpIHsKKyAgICAg
IG1zZyArPSAnaWQ6JyArIGVsZW1lbnQuaWQ7CisgICAgfQorICAgIG1zZyArPSAnKHRhYkluZGV4
PScgKyBlbGVtZW50LnRhYkluZGV4ICsgJyknOworICAgIHJldHVybiBtc2c7Cit9CisKK2Z1bmN0
aW9uIG9uRm9jdXMoZXZlbnQpIHsKKyAgICBsb2coZGVzY3JpcHRpb24oZXZlbnQudGFyZ2V0KSAr
ICcgaXMgZm9jdXNlZC4nKTsKK30KKworZnVuY3Rpb24gYWRkRm9jdXNFdmVudExpc3RlbmVyKGVs
ZW1lbnQpIHsKKyAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgb25Gb2N1cywg
ZmFsc2UpOworfQorCitmdW5jdGlvbiBjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgaWQsIHRh
YkluZGV4KSB7CisgICAgdmFyIGlucHV0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Cisg
ICAgaW5wdXQudHlwZSA9ICd0ZXh0JzsKKyAgICBpbnB1dC5pZCA9IGlkOworICAgIGlucHV0LnRh
YkluZGV4ID0gdGFiSW5kZXg7CisgICAgYWRkRm9jdXNFdmVudExpc3RlbmVyKGlucHV0KTsKKyAg
ICByZXR1cm4gaW5wdXQ7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgdmFyIGRvYyA9IGRv
Y3VtZW50OworCisgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVu
dChkb2MsICdpbnB1dC0wMScsIDEpKTsKKyAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVU
ZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTAyJywgMCkpOworCisgICAgZnVuY3Rpb24gYWRk
U2hhZG93SG9zdChkb2MpIHsKKyAgICAgICAgdmFyIHNoYWRvd0hvc3QgPSBkb2MuY3JlYXRlRWxl
bWVudCgncCcpOworICAgICAgICBzaGFkb3dIb3N0LnRhYkluZGV4ID0gLTE7ICAvLyBUaGlzIHNo
YWRvdyBob3N0IChhbmQgYSBzaGFkb3cgdHJlZSBpbiB0aGF0KSBzaG91bGQgYmUgc2tpcHBlZC4K
KyAgICAgICAgdmFyIHNoYWRvdyA9IGxheW91dFRlc3RDb250cm9sbGVyLmVuc3VyZVNoYWRvd1Jv
b3Qoc2hhZG93SG9zdCk7CisgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNoYWRvd0hvc3Qp
OworICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2Ms
ICdzaGFkb3ctaW5wdXQtMDMnLCAwKSk7CisgICAgfQorICAgIGFkZFNoYWRvd0hvc3QoZG9jKTsK
KworICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAn
aW5wdXQtMDQnLCAwKSk7CisKKyAgICBmdW5jdGlvbiBhZGRJZnJhbWUoZG9jKSB7CisgICAgICAg
IHZhciBpZnJhbWUgPSBkb2MuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgIGRvYy5i
b2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAgICAgIGRvYyA9IGlmcmFtZS5jb250ZW50RG9j
dW1lbnQ7CisKKyAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxl
bWVudChkb2MsICdpZnJhbWUtaW5wdXQtMDUnLCAwKSk7CisgICAgICAgIGRvYy5ib2R5LmFwcGVu
ZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaWZyYW1lLWlucHV0LTA2JywgMSkp
OworICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRv
YywgJ2lmcmFtZS1pbnB1dC0wNycsIC0xKSk7CisKKyAgICAgICAgZnVuY3Rpb24gYWRkU2hhZG93
SG9zdChkb2MpIHsKKyAgICAgICAgICAgIHZhciBzaGFkb3dIb3N0ID0gZG9jLmNyZWF0ZUVsZW1l
bnQoJ3AnKTsKKyAgICAgICAgICAgIHNoYWRvd0hvc3QudGFiSW5kZXggPSAxOworICAgICAgICAg
ICAgdmFyIHNoYWRvdyA9IGxheW91dFRlc3RDb250cm9sbGVyLmVuc3VyZVNoYWRvd1Jvb3Qoc2hh
ZG93SG9zdCk7CisgICAgICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChzaGFkb3dIb3N0KTsK
KworICAgICAgICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQo
ZG9jLCAnaWZyYW1lLXNoYWRvdy1pbnB1dC0wOCcsIDApKTsKKyAgICAgICAgICAgIHNoYWRvdy5h
cHBlbmRDaGlsZChjcmVhdGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lmcmFtZS1zaGFkb3ctaW5w
dXQtMDknLCAxKSk7CisgICAgICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElu
cHV0RWxlbWVudChkb2MsICdpZnJhbWUtc2hhZG93LWlucHV0LTEwJywgLTEpKTsKKyAgICAgICAg
fQorICAgICAgICBhZGRTaGFkb3dIb3N0KGRvYyk7CisKKyAgICAgICAgZG9jLmJvZHkuYXBwZW5k
Q2hpbGQoY3JlYXRlVGV4dElucHV0RWxlbWVudChkb2MsICdpZnJhbWUtaW5wdXQtMTEnLCAyKSk7
CisgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9j
LCAnaWZyYW1lLWlucHV0LTEyJywgMSkpOworICAgIH0KKyAgICBhZGRJZnJhbWUoZG9jKTsKKwor
ICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVRleHRJbnB1dEVsZW1lbnQoZG9jLCAnaW5w
dXQtMTMnLCAxKSk7CisgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlVGV4dElucHV0RWxl
bWVudChkb2MsICdpbnB1dC0xNCcsIDApKTsKKyAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChjcmVh
dGVUZXh0SW5wdXRFbGVtZW50KGRvYywgJ2lucHV0LTE1JywgMikpOworCisgICAgbG9nKCdGb2N1
cyBpbnB1dC0wMS4nKTsKKyAgICBkb2MuZ2V0RWxlbWVudEJ5SWQoJ2lucHV0LTAxJykuZm9jdXMo
KTsKKworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgdmFyIHByZXNzZWQg
PSAxMTsKKyAgICAgICAgbG9nKCdcblByZXNzIFRhYiAnICsgcHJlc3NlZCArICcgdGltZXMuJyk7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlc3NlZDsgKytpKSB7CisgICAgICAgICAg
ICBldmVudFNlbmRlci5rZXlEb3duKCdcdCcpOworICAgICAgICB9CisgICAgICAgIGxvZygnXG5Q
cmVzcyBTaGlmdC1UYWIgJyArIHByZXNzZWQgKyAnIHRpbWVzLicpOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHByZXNzZWQ7ICsraSkgeworICAgICAgICAgICAgZXZlbnRTZW5kZXIua2V5
RG93bignXHQnLCBbJ3NoaWZ0S2V5J10pOworICAgICAgICB9CisgICB9CisgICBsb2coJ1xuVGVz
dCBmaW5pc2hlZC4nKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGQxZTVkODBjZWE0MmJlNzgzZjMxMmUyMjhhMDJiMjRmZGZlN2M2YTEuLjNlMjAzMjM3MzJl
Y2VjMDU5NDQzMGFjZjUxNjUwNGUzYWQ1ZDlkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBA
QAorMjAxMS0wNi0wNyAgSGF5YXRvIEl0byAgPGhheWF0b0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBmb3J3YXJkL2JhY2t3
YXJkIHRhYiB0cmF2ZXJzYWwgbm93IHZpc2l0cyBmb2N1c2FibGUgZWxlbWVudHMgaW4gYSBzaGFk
b3cgcm9vdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYxNDEwCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vc2hhZG93L3RhYi1vcmRlci1pZnJhbWUt
YW5kLXNoYWRvdy5odG1sCisKKyAgICAgICAgTGlrZSBhIGlmcmFtZSBlbGVtZW50LCBhIHNoYWRv
dyBob3N0IGJlY29tZXMgYSBzY29wZSBvZgorICAgICAgICB0YWJpbmRleC4gVGhhdCBtZWFucyBh
bGwgZGVzY2VuZGFudCBlbGVtZW50cyBpbiBhIHNoYWRvdyByb290IGFyZQorICAgICAgICBza2lw
cGVkIGlmIHRoZSBob3N0IG5vZGUgb2YgdGhlIHNoYWRvdyByb290IGlzIG5vdCBmb2N1c2FibGUu
CisKKyAgICAgICAgVGhlIHBhdGNoIGRvZXNuJ3QgYWZmZWN0IEhUTUxJbnB1dEVsZW1lbnQgYW5k
IEhUTUxUZXh0QXJlYUVsZW1lbnQsCisgICAgICAgIHdoaWNoIHVzZXMgYSBzaGFkb3cgcm9vdCBh
bmQgZG8gZXh0cmEgd29ya3MgaW4gdGhlaXIgZm9jdXMoKQorICAgICAgICBtZXRob2QuCisKKyAg
ICAgICAgQSBzaGFkb3cgcm9vdCdzIDxjb250ZW50PiBpcyBub3QgY29uc2lkZXJlZCBpbiB0aGlz
IHBhdGNoLgorICAgICAgICBUaGF0IHdpbGwgYmUgYWRkcmVzc2VkIGluIGEgZm9sbG93aW5nIHBh
dGNoLgorCisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjppc1RyZWVTY29wZU93bmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6ZGVlcEZvY3VzYWJsZU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50
T3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNhYmxl
Tm9kZUFjcm9zc1RyZWVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6
OmZpbmRGb2N1c2FibGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6
bmV4dEZvY3VzYWJsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpw
cmV2aW91c0ZvY3VzYWJsZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVy
Ojpvd25lck9mVHJlZVNjb3BlKToKKyAgICAgICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5oOgor
CiAyMDExLTA2LTA3ICBKYW1lcyBTaW1vbnNlbiAgPHNpbW9uamFtQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXgsIG1pc3NpbmcgZmlsZXMgZnJvbSByODgyNzQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKaW5kZXggY2ZlNjc0NGQwYzVi
MWUwY2QxY2NiMTA2ODUyNzUxZDEzODQzZDFmMy4uMTk4MDdjNWYxMDU5MjllMWI0NzQ1OTZmM2Qx
ZTQ2MDI3N2JlNzk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApA
QCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNj
cm9sbEFuaW1hdG9yLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTaGFkb3dS
b290LmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKICNpbmNsdWRlICJXaWRnZXQu
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIiAvLyBGb3IgZmlyc3RQb3NpdGlvbkluT3JCZWZv
cmVOb2RlCkBAIC0xNDUsMjcgKzE0Niw0MiBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9j
dXNlZChib29sIGZvY3VzZWQpCiAgICAgfQogfQogCi1Ob2RlKiBGb2N1c0NvbnRyb2xsZXI6OmRl
ZXBGb2N1c2FibGVOb2RlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgTm9kZSogbm9kZSwgS2V5
Ym9hcmRFdmVudCogZXZlbnQpCitpbmxpbmUgc3RhdGljIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3Qo
Tm9kZSogbm9kZSkKIHsKLSAgICAvLyBUaGUgbm9kZSB3ZSBmb3VuZCBtaWdodCBiZSBhIEhUTUxG
cmFtZU93bmVyRWxlbWVudCwgc28gZGVzY2VuZCBkb3duIHRoZSBmcmFtZSB0cmVlIHVudGlsIHdl
IGZpbmQgZWl0aGVyOgotICAgIC8vIDEpIGEgZm9jdXNhYmxlIG5vZGUsIG9yCi0gICAgLy8gMikg
dGhlIGRlZXBlc3QtbmVzdGVkIEhUTUxGcmFtZU93bmVyRWxlbWVudAotICAgIHdoaWxlIChub2Rl
ICYmIG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkgewotICAgICAgICBIVE1MRnJhbWVPd25l
ckVsZW1lbnQqIG93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9k
ZSk7Ci0gICAgICAgIGlmICghb3duZXItPmNvbnRlbnRGcmFtZSgpKQotICAgICAgICAgICAgYnJl
YWs7CisgICAgcmV0dXJuIG5vZGUtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVudChub2RlKS0+
c2hhZG93Um9vdCgpIDogMDsKK30KIAotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBvd25l
ci0+Y29udGVudEZyYW1lKCktPmRvY3VtZW50KCk7CitpbmxpbmUgc3RhdGljIGJvb2wgaXNUcmVl
U2NvcGVPd25lcihOb2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlICYmIChub2RlLT5pc0Zy
YW1lT3duZXJFbGVtZW50KCkgfHwgc2hhZG93Um9vdChub2RlKSk7Cit9CiAKLSAgICAgICAgbm9k
ZSA9IChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKQotICAgICAgICAgICAgPyBu
ZXh0Rm9jdXNhYmxlTm9kZShkb2N1bWVudCwgMCwgZXZlbnQpCi0gICAgICAgICAgICA6IHByZXZp
b3VzRm9jdXNhYmxlTm9kZShkb2N1bWVudCwgMCwgZXZlbnQpOwotICAgICAgICBpZiAoIW5vZGUp
IHsKLSAgICAgICAgICAgIG5vZGUgPSBvd25lcjsKLSAgICAgICAgICAgIGJyZWFrOworTm9kZSog
Rm9jdXNDb250cm9sbGVyOjpkZWVwRm9jdXNhYmxlTm9kZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIE5vZGUqIG5vZGUsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIC8vIFRoZSBub2Rl
IHdlIGZvdW5kIG1pZ2h0IGJlIGEgSFRNTEZyYW1lT3duZXJFbGVtZW50IG9yIGEgc2hhZG93IGhv
c3QsIHNvIGRlc2NlbmQgZG93biB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGVpdGhlcjoKKyAgICAv
LyAxKSBhIGZvY3VzYWJsZSBub2RlLCBvcgorICAgIC8vIDIpIHRoZSBkZWVwZXN0LW5lc3RlZCBI
VE1MRnJhbWVPd25lckVsZW1lbnQgb3Igc2hhZG93IGhvc3QuCisgICAgd2hpbGUgKGlzVHJlZVNj
b3BlT3duZXIobm9kZSkpIHsKKyAgICAgICAgTm9kZSogZm91bmROb2RlOworICAgICAgICBpZiAo
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7CisgICAgICAgICAgICBIVE1MRnJhbWVPd25l
ckVsZW1lbnQqIG93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9k
ZSk7CisgICAgICAgICAgICBpZiAoIW93bmVyLT5jb250ZW50RnJhbWUoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG93bmVyLT5jb250
ZW50RnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGZvdW5kTm9kZSA9IGZpbmRGb2N1
c2FibGVOb2RlKGRpcmVjdGlvbiwgZG9jdW1lbnQsIDAsIGV2ZW50KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIEFTU0VSVChzaGFkb3dSb290KG5vZGUpKTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBTb21lIGVsZW1lbnRzIChlLmcuIEhUTUxJbnB1dEVsZW1lbnQgYW5kIEhUTUxUZXh0
QXJlYUVsZW1lbnQpIGRvIGV4dHJhIHdvcmsgaW4gdGhlaXIgZm9jdXMoKSBtZXRob2RzLgorICAg
ICAgICAgICAgLy8gU2tpcHBpbmcgdGhlc2UgZWxlbWVudHMgaXMgdGhlIHNhZmVzdCBmaXggdW50
aWwgd2UgZmluZCBhIGJldHRlciB3YXkuCisgICAgICAgICAgICBpZiAobm9kZS0+bm9kZU5hbWUo
KSA9PSAiSU5QVVQiIHx8IG5vZGUtPm5vZGVOYW1lKCkgPT0gIlRFWFRBUkVBIikKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGZvdW5kTm9kZSA9IGZpbmRGb2N1c2FibGVOb2Rl
KGRpcmVjdGlvbiwgc2hhZG93Um9vdChub2RlKSwgMCwgZXZlbnQpOwogICAgICAgICB9CisgICAg
ICAgIGlmICghZm91bmROb2RlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEFTU0VSVChu
b2RlICE9IGZvdW5kTm9kZSk7CisgICAgICAgIG5vZGUgPSBmb3VuZE5vZGU7CiAgICAgfQotCiAg
ICAgcmV0dXJuIG5vZGU7CiB9CiAKQEAgLTIxNSwzMCArMjMxLDcgQEAgYm9vbCBGb2N1c0NvbnRy
b2xsZXI6OmFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIEtleWIKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKIAotICAgIE5vZGUqIG5vZGUgPSAoZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9u
Rm9yd2FyZCkKLSAgICAgICAgPyBuZXh0Rm9jdXNhYmxlTm9kZShkb2N1bWVudCwgY3VycmVudE5v
ZGUsIGV2ZW50KQotICAgICAgICA6IHByZXZpb3VzRm9jdXNhYmxlTm9kZShkb2N1bWVudCwgY3Vy
cmVudE5vZGUsIGV2ZW50KTsKLSAgICAgICAgICAgIAotICAgIC8vIElmIHRoZXJlJ3Mgbm8gZm9j
dXNhYmxlIG5vZGUgdG8gYWR2YW5jZSB0bywgbW92ZSB1cCB0aGUgZnJhbWUgdHJlZSB1bnRpbCB3
ZSBmaW5kIG9uZS4KLSAgICB3aGlsZSAoIW5vZGUgJiYgZnJhbWUpIHsKLSAgICAgICAgRnJhbWUq
IHBhcmVudEZyYW1lID0gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0gICAgICAgIGlmICghcGFy
ZW50RnJhbWUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBEb2N1bWVudCogcGFyZW50
RG9jdW1lbnQgPSBwYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKTsKLQotICAgICAgICBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOwotICAgICAgICBpZiAo
IW93bmVyKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgbm9kZSA9IChkaXJlY3Rpb24g
PT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKQotICAgICAgICAgICAgPyBuZXh0Rm9jdXNhYmxlTm9k
ZShwYXJlbnREb2N1bWVudCwgb3duZXIsIGV2ZW50KQotICAgICAgICAgICAgOiBwcmV2aW91c0Zv
Y3VzYWJsZU5vZGUocGFyZW50RG9jdW1lbnQsIG93bmVyLCBldmVudCk7Ci0KLSAgICAgICAgZnJh
bWUgPSBwYXJlbnRGcmFtZTsKLSAgICB9Ci0KLSAgICBub2RlID0gZGVlcEZvY3VzYWJsZU5vZGUo
ZGlyZWN0aW9uLCBub2RlLCBldmVudCk7CisgICAgTm9kZSogbm9kZSA9IGZpbmRGb2N1c2FibGVO
b2RlQWNyb3NzVHJlZVNjb3BlKGRpcmVjdGlvbiwgY3VycmVudE5vZGUgPyBjdXJyZW50Tm9kZS0+
dHJlZVNjb3BlKCkgOiBkb2N1bWVudCwgY3VycmVudE5vZGUsIGV2ZW50KTsKIAogICAgIGlmICgh
bm9kZSkgewogICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCBhIG5vZGUgdG8gZm9jdXMsIHNvIHdl
IHNob3VsZCB0cnkgdG8gcGFzcyBmb2N1cyB0byBDaHJvbWUuCkBAIC0yNTAsMTEgKzI0Myw3IEBA
IGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIoRm9jdXNE
aXJlY3Rpb24gZGlyZWN0aW9uLCBLZXliCiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaHJvbWUg
ZG9lc24ndCB3YW50IGZvY3VzLCBzbyB3ZSBzaG91bGQgd3JhcCBmb2N1cy4KLSAgICAgICAgRG9j
dW1lbnQqIGQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpOwotICAgICAgICBub2Rl
ID0gKGRpcmVjdGlvbiA9PSBGb2N1c0RpcmVjdGlvbkZvcndhcmQpCi0gICAgICAgICAgICA/IG5l
eHRGb2N1c2FibGVOb2RlKGQsIDAsIGV2ZW50KQotICAgICAgICAgICAgOiBwcmV2aW91c0ZvY3Vz
YWJsZU5vZGUoZCwgMCwgZXZlbnQpOwotCisgICAgICAgIG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9k
ZShkaXJlY3Rpb24sIG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCksIDAsIGV2ZW50KTsK
ICAgICAgICAgbm9kZSA9IGRlZXBGb2N1c2FibGVOb2RlKGRpcmVjdGlvbiwgbm9kZSwgZXZlbnQp
OwogCiAgICAgICAgIGlmICghbm9kZSkKQEAgLTMwNyw2ICsyOTYsMjkgQEAgYm9vbCBGb2N1c0Nv
bnRyb2xsZXI6OmFkdmFuY2VGb2N1c0luRG9jdW1lbnRPcmRlcihGb2N1c0RpcmVjdGlvbiBkaXJl
Y3Rpb24sIEtleWIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorTm9kZSogRm9jdXNDb250cm9sbGVy
OjpmaW5kRm9jdXNhYmxlTm9kZUFjcm9zc1RyZWVTY29wZShGb2N1c0RpcmVjdGlvbiBkaXJlY3Rp
b24sIFRyZWVTY29wZSogc2NvcGUsIE5vZGUqIGN1cnJlbnROb2RlLCBLZXlib2FyZEV2ZW50KiBl
dmVudCkKK3sKKyAgICBOb2RlKiBub2RlID0gZmluZEZvY3VzYWJsZU5vZGUoZGlyZWN0aW9uLCBz
Y29wZSwgY3VycmVudE5vZGUsIGV2ZW50KTsKKyAgICAvLyBJZiB0aGVyZSdzIG5vIGZvY3VzYWJs
ZSBub2RlIHRvIGFkdmFuY2UgdG8sIG1vdmUgdXAgdGhlIHRyZWUgc2NvcGVzIHVudGlsIHdlIGZp
bmQgb25lLgorICAgIHdoaWxlICghbm9kZSAmJiBzY29wZSkgeworICAgICAgICBOb2RlKiBvd25l
ciA9IG93bmVyT2ZUcmVlU2NvcGUoc2NvcGUpOworICAgICAgICBpZiAoIW93bmVyKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIG5vZGUgPSBmaW5kRm9jdXNhYmxlTm9kZShkaXJlY3Rpb24s
IG93bmVyLT50cmVlU2NvcGUoKSwgb3duZXIsIGV2ZW50KTsKKyAgICAgICAgc2NvcGUgPSBvd25l
ci0+dHJlZVNjb3BlKCk7CisgICAgfQorICAgIG5vZGUgPSBkZWVwRm9jdXNhYmxlTm9kZShkaXJl
Y3Rpb24sIG5vZGUsIGV2ZW50KTsKKyAgICByZXR1cm4gbm9kZTsKK30KKworCitOb2RlKiBGb2N1
c0NvbnRyb2xsZXI6OmZpbmRGb2N1c2FibGVOb2RlKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VHJlZVNjb3BlKiBzY29wZSwgTm9kZSogbm9kZSwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7Cisg
ICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkKQorICAgICAgICA/
IG5leHRGb2N1c2FibGVOb2RlKHNjb3BlLCBub2RlLCBldmVudCkKKyAgICAgICAgOiBwcmV2aW91
c0ZvY3VzYWJsZU5vZGUoc2NvcGUsIG5vZGUsIGV2ZW50KTsKK30KKwogc3RhdGljIE5vZGUqIG5l
eHROb2RlV2l0aEV4YWN0VGFiSW5kZXgoTm9kZSogc3RhcnQsIGludCB0YWJJbmRleCwgS2V5Ym9h
cmRFdmVudCogZXZlbnQpCiB7CiAgICAgLy8gU2VhcmNoIGlzIGluY2x1c2l2ZSBvZiBzdGFydApA
QCAtMzU1LDcgKzM2Nyw3IEBAIHN0YXRpYyBOb2RlKiBwcmV2aW91c05vZGVXaXRoTG93ZXJUYWJJ
bmRleChOb2RlKiBzdGFydCwgaW50IHRhYkluZGV4LCBLZXlib2FyZEV2CiAgICAgcmV0dXJuIHdp
bm5lcjsKIH0KIAotTm9kZSogRm9jdXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlTm9kZShUcmVl
U2NvcGUqIHdpdGhpbiwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQorTm9kZSog
Rm9jdXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlTm9kZShUcmVlU2NvcGUqIHNjb3BlLCBOb2Rl
KiBzdGFydCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKHN0YXJ0KSB7CiAgICAg
ICAgIC8vIElmIGEgbm9kZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBub3JtYWwgdGFiYmluZyBjeWNs
ZSwgdGhlIG5leHQgZm9jdXNhYmxlIG5vZGUgaXMgZGV0ZXJtaW5lZCBieSB0cmVlIG9yZGVyCkBA
IC0zNjUsNyArMzc3LDcgQEAgTm9kZSogRm9jdXNDb250cm9sbGVyOjpuZXh0Rm9jdXNhYmxlTm9k
ZShUcmVlU2NvcGUqIHdpdGhpbiwgTm9kZSogc3RhcnQsIEtleWJvYXIKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG47CiAgICAgICAgIH0KIAotICAgICAgICAvLyBGaXJzdCB0cnkgdG8gZmlu
ZCBhIG5vZGUgd2l0aCB0aGUgc2FtZSB0YWJpbmRleCBhcyBzdGFydCB0aGF0IGNvbWVzIGFmdGVy
IHN0YXJ0IGluIHRoZSB0cmVlIHNjb3BlLgorICAgICAgICAvLyBGaXJzdCB0cnkgdG8gZmluZCBh
IG5vZGUgd2l0aCB0aGUgc2FtZSB0YWJpbmRleCBhcyBzdGFydCB0aGF0IGNvbWVzIGFmdGVyIHN0
YXJ0IGluIHRoZSBzY29wZS4KICAgICAgICAgaWYgKE5vZGUqIHdpbm5lciA9IG5leHROb2RlV2l0
aEV4YWN0VGFiSW5kZXgoc3RhcnQtPnRyYXZlcnNlTmV4dE5vZGUoKSwgc3RhcnQtPnRhYkluZGV4
KCksIGV2ZW50KSkKICAgICAgICAgICAgIHJldHVybiB3aW5uZXI7CiAKQEAgLTM3NCwyNCArMzg2
LDI0IEBAIE5vZGUqIEZvY3VzQ29udHJvbGxlcjo6bmV4dEZvY3VzYWJsZU5vZGUoVHJlZVNjb3Bl
KiB3aXRoaW4sIE5vZGUqIHN0YXJ0LCBLZXlib2FyCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKLSAgICAvLyBMb29rIGZvciB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUgdHJlZSBzY29wZSB0
aGF0OgorICAgIC8vIExvb2sgZm9yIHRoZSBmaXJzdCBub2RlIGluIHRoZSBzY29wZSB0aGF0Ogog
ICAgIC8vIDEpIGhhcyB0aGUgbG93ZXN0IHRhYmluZGV4IHRoYXQgaXMgaGlnaGVyIHRoYW4gc3Rh
cnQncyB0YWJpbmRleCAob3IgMCwgaWYgc3RhcnQgaXMgbnVsbCksIGFuZAotICAgIC8vIDIpIGNv
bWVzIGZpcnN0IGluIHRoZSB0cmVlIHNjb3BlLCBpZiB0aGVyZSdzIGEgdGllLgotICAgIGlmIChO
b2RlKiB3aW5uZXIgPSBuZXh0Tm9kZVdpdGhHcmVhdGVyVGFiSW5kZXgod2l0aGluLCBzdGFydCA/
IHN0YXJ0LT50YWJJbmRleCgpIDogMCwgZXZlbnQpKQorICAgIC8vIDIpIGNvbWVzIGZpcnN0IGlu
IHRoZSBzY29wZSwgaWYgdGhlcmUncyBhIHRpZS4KKyAgICBpZiAoTm9kZSogd2lubmVyID0gbmV4
dE5vZGVXaXRoR3JlYXRlclRhYkluZGV4KHNjb3BlLCBzdGFydCA/IHN0YXJ0LT50YWJJbmRleCgp
IDogMCwgZXZlbnQpKQogICAgICAgICByZXR1cm4gd2lubmVyOwogCiAgICAgLy8gVGhlcmUgYXJl
IG5vIG5vZGVzIHdpdGggYSB0YWJpbmRleCBncmVhdGVyIHRoYW4gc3RhcnQncyB0YWJpbmRleCwK
ICAgICAvLyBzbyBmaW5kIHRoZSBmaXJzdCBub2RlIHdpdGggYSB0YWJpbmRleCBvZiAwLgotICAg
IHJldHVybiBuZXh0Tm9kZVdpdGhFeGFjdFRhYkluZGV4KHdpdGhpbiwgMCwgZXZlbnQpOworICAg
IHJldHVybiBuZXh0Tm9kZVdpdGhFeGFjdFRhYkluZGV4KHNjb3BlLCAwLCBldmVudCk7CiB9CiAK
LU5vZGUqIEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVOb2RlKFRyZWVTY29wZSog
d2l0aGluLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCitOb2RlKiBGb2N1c0Nv
bnRyb2xsZXI6OnByZXZpb3VzRm9jdXNhYmxlTm9kZShUcmVlU2NvcGUqIHNjb3BlLCBOb2RlKiBz
dGFydCwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgTm9kZSogbGFzdDsKLSAgICBmb3Ig
KGxhc3QgPSB3aXRoaW47IGxhc3QtPmxhc3RDaGlsZCgpOyBsYXN0ID0gbGFzdC0+bGFzdENoaWxk
KCkpIHsgfQorICAgIGZvciAobGFzdCA9IHNjb3BlOyBsYXN0LT5sYXN0Q2hpbGQoKTsgbGFzdCA9
IGxhc3QtPmxhc3RDaGlsZCgpKSB7IH0KIAotICAgIC8vIEZpcnN0IHRyeSB0byBmaW5kIHRoZSBs
YXN0IG5vZGUgaW4gdGhlIHRyZWUgc2NvcGUgdGhhdCBjb21lcyBiZWZvcmUgc3RhcnQgYW5kIGhh
cyB0aGUgc2FtZSB0YWJpbmRleCBhcyBzdGFydC4KLSAgICAvLyBJZiBzdGFydCBpcyBudWxsLCBm
aW5kIHRoZSBsYXN0IG5vZGUgaW4gdGhlIHRyZWUgc2NvcGUgd2l0aCBhIHRhYmluZGV4IG9mIDAu
CisgICAgLy8gRmlyc3QgdHJ5IHRvIGZpbmQgdGhlIGxhc3Qgbm9kZSBpbiB0aGUgc2NvcGUgdGhh
dCBjb21lcyBiZWZvcmUgc3RhcnQgYW5kIGhhcyB0aGUgc2FtZSB0YWJpbmRleCBhcyBzdGFydC4K
KyAgICAvLyBJZiBzdGFydCBpcyBudWxsLCBmaW5kIHRoZSBsYXN0IG5vZGUgaW4gdGhlIHNjb3Bl
IHdpdGggYSB0YWJpbmRleCBvZiAwLgogICAgIE5vZGUqIHN0YXJ0aW5nTm9kZTsKICAgICBpbnQg
c3RhcnRpbmdUYWJJbmRleDsKICAgICBpZiAoc3RhcnQpIHsKQEAgLTQxNCwxMSArNDI2LDIxIEBA
IE5vZGUqIEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVOb2RlKFRyZWVTY29wZSog
d2l0aGluLCBOb2RlKiBzdGFydCwgS2V5CiAKICAgICAvLyBUaGVyZSBhcmUgbm8gbm9kZXMgYmVm
b3JlIHN0YXJ0IHdpdGggdGhlIHNhbWUgdGFiaW5kZXggYXMgc3RhcnQsIHNvIGxvb2sgZm9yIGEg
bm9kZSB0aGF0OgogICAgIC8vIDEpIGhhcyB0aGUgaGlnaGVzdCBub24temVybyB0YWJpbmRleCAo
dGhhdCBpcyBsZXNzIHRoYW4gc3RhcnQncyB0YWJpbmRleCksIGFuZAotICAgIC8vIDIpIGNvbWVz
IGxhc3QgaW4gdGhlIHRyZWUgc2NvcGUsIGlmIHRoZXJlJ3MgYSB0aWUuCisgICAgLy8gMikgY29t
ZXMgbGFzdCBpbiB0aGUgc2NvcGUsIGlmIHRoZXJlJ3MgYSB0aWUuCiAgICAgc3RhcnRpbmdUYWJJ
bmRleCA9IChzdGFydCAmJiBzdGFydC0+dGFiSW5kZXgoKSkgPyBzdGFydC0+dGFiSW5kZXgoKSA6
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKTsKICAgICByZXR1cm4gcHJldmlvdXNO
b2RlV2l0aExvd2VyVGFiSW5kZXgobGFzdCwgc3RhcnRpbmdUYWJJbmRleCwgZXZlbnQpOwogfQog
CitOb2RlKiBGb2N1c0NvbnRyb2xsZXI6Om93bmVyT2ZUcmVlU2NvcGUoVHJlZVNjb3BlKiBzY29w
ZSkKK3sKKyAgICBBU1NFUlQoc2NvcGUpOworICAgIGlmIChzY29wZS0+aXNTaGFkb3dSb290KCkp
CisgICAgICAgIHJldHVybiBzY29wZS0+c2hhZG93SG9zdCgpOworICAgIGlmIChzY29wZS0+ZG9j
dW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHNjb3BlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpLT5vd25lckVsZW1lbnQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIGJvb2wgcmVs
aW5xdWlzaGVzRWRpdGluZ0ZvY3VzKE5vZGUgKm5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgKaW5kZXggMmZkYmM5MGQxMTg2ZTNlYTVh
Nzc0ZjJhMGFjN2I3ODNlMGZmMDQ4Ni4uNjYwMzg3MmY0OTViZjU2ZGRjNWViNjc5MDQ5MDRhNWI1
ODVhZmE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCkBAIC02NSw3ICs2
NSwyMyBAQCBwcml2YXRlOgogICAgIGJvb2wgYWR2YW5jZUZvY3VzRGlyZWN0aW9uYWxseShGb2N1
c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCopOwogICAgIGJvb2wgYWR2YW5jZUZvY3VzSW5Eb2N1
bWVudE9yZGVyKEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiwgYm9vbCBpbml0aWFsRm9j
dXMpOwogCisgICAgTm9kZSogZmluZEZvY3VzYWJsZU5vZGVBY3Jvc3NUcmVlU2NvcGUoRm9jdXNE
aXJlY3Rpb24sIFRyZWVTY29wZSogc3RhcnRTY29wZSwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZl
bnQqKTsKICAgICBOb2RlKiBkZWVwRm9jdXNhYmxlTm9kZShGb2N1c0RpcmVjdGlvbiwgTm9kZSos
IEtleWJvYXJkRXZlbnQqKTsKKyAgICBOb2RlKiBvd25lck9mVHJlZVNjb3BlKFRyZWVTY29wZSop
OworCisgICAgLy8gU2VhcmNoZXMgdGhyb3VnaCB0aGUgZ2l2ZW4gdHJlZSBzY29wZSwgc3RhcnRp
bmcgZnJvbSBzdGFydCBub2RlLCBmb3IgdGhlIG5leHQvcHJldmlvdXMgc2VsZWN0YWJsZSBlbGVt
ZW50IHRoYXQgY29tZXMgYWZ0ZXIvYmVmb3JlIHN0YXJ0IG5vZGUuCisgICAgLy8gVGhlIG9yZGVy
IGZvbGxvd2VkIGlzIGFzIHNwZWNpZmllZCBpbiBzZWN0aW9uIDE3LjExLjEgb2YgdGhlIEhUTUw0
IHNwZWMsIHdoaWNoIGlzIGVsZW1lbnRzIHdpdGggdGFiIGluZGV4ZXMKKyAgICAvLyBmaXJzdCAo
ZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCksIGFuZCB0aGVuIGVsZW1lbnRzIHdpdGhvdXQgdGFiIGlu
ZGV4ZXMgKGluIGRvY3VtZW50IG9yZGVyKS4KKyAgICAvLworICAgIC8vIEBwYXJhbSBzdGFydCBU
aGUgbm9kZSBmcm9tIHdoaWNoIHRvIHN0YXJ0IHNlYXJjaGluZy4gVGhlIG5vZGUgYWZ0ZXIgdGhp
cyB3aWxsIGJlIGZvY3VzZWQuIE1heSBiZSBudWxsLgorICAgIC8vCisgICAgLy8gQHJldHVybiBU
aGUgZm9jdXMgbm9kZSB0aGF0IGNvbWVzIGFmdGVyL2JlZm9yZSBzdGFydCBub2RlLgorICAgIC8v
CisgICAgLy8gU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2ludGVyYWN0L2Zvcm1zLmh0
bWwjaC0xNy4xMS4xCisgICAgaW5saW5lIE5vZGUqIGZpbmRGb2N1c2FibGVOb2RlKEZvY3VzRGly
ZWN0aW9uLCBUcmVlU2NvcGUqLCBOb2RlKiBzdGFydCwgS2V5Ym9hcmRFdmVudCopOworCisgICAg
Tm9kZSogbmV4dEZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiwgTm9kZSogc3RhcnQsIEtleWJvYXJk
RXZlbnQqKTsKKyAgICBOb2RlKiBwcmV2aW91c0ZvY3VzYWJsZU5vZGUoVHJlZVNjb3BlKiwgTm9k
ZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKIAogICAgIGJvb2wgYWR2YW5jZUZvY3VzRGlyZWN0
aW9uYWxseUluQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgc3RhcnRp
bmdSZWN0LCBGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRFdmVudCopOwogICAgIHZvaWQgZmluZEZv
Y3VzQ2FuZGlkYXRlSW5Db250YWluZXIoTm9kZSogY29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBz
dGFydGluZ1JlY3QsIEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiwgRm9jdXNDYW5kaWRh
dGUmIGNsb3Nlc3QpOwpAQCAtNzYsMjkgKzkyLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNG
b2N1c2VkOwogICAgIGJvb2wgbV9pc0NoYW5naW5nRm9jdXNlZEZyYW1lOwogCi0gICAgLy8gU2Vh
cmNoZXMgdGhyb3VnaCB0aGUgZG9jdW1lbnQsIHN0YXJ0aW5nIGZyb20gc3RhcnQgbm9kZSwgZm9y
IHRoZSBuZXh0IHNlbGVjdGFibGUgZWxlbWVudCB0aGF0IGNvbWVzIGFmdGVyIHN0YXJ0IG5vZGUu
Ci0gICAgLy8gVGhlIG9yZGVyIGZvbGxvd2VkIGlzIGFzIHNwZWNpZmllZCBpbiBzZWN0aW9uIDE3
LjExLjEgb2YgdGhlIEhUTUw0IHNwZWMsIHdoaWNoIGlzIGVsZW1lbnRzIHdpdGggdGFiIGluZGV4
ZXMKLSAgICAvLyBmaXJzdCAoZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCksIGFuZCB0aGVuIGVsZW1l
bnRzIHdpdGhvdXQgdGFiIGluZGV4ZXMgKGluIGRvY3VtZW50IG9yZGVyKS4KLSAgICAvLwotICAg
IC8vIEBwYXJhbSB3aXRoaW4gVGhlIHRyZWUgc2NvcGUgd2hlcmUgYSBzZWFyY2ggaXMgZXhlY3V0
ZWQuCi0gICAgLy8gQHBhcmFtIHN0YXJ0IFRoZSBub2RlIGZyb20gd2hpY2ggdG8gc3RhcnQgc2Vh
cmNoaW5nLiBUaGUgbm9kZSBiZWZvcmUgdGhpcyB3aWxsIGJlIGZvY3VzZWQuIE1heSBiZSBudWxs
LgotICAgIC8vCi0gICAgLy8gQHJldHVybiBUaGUgZm9jdXMgbm9kZSB0aGF0IGNvbWVzIGFmdGVy
IHN0YXJ0IG5vZGUuCi0gICAgLy8KLSAgICAvLyBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRt
bDQvaW50ZXJhY3QvZm9ybXMuaHRtbCNoLTE3LjExLjEKLSAgICBOb2RlKiBuZXh0Rm9jdXNhYmxl
Tm9kZShUcmVlU2NvcGUqIHdpdGhpbiwgTm9kZSogc3RhcnQsIEtleWJvYXJkRXZlbnQqKTsKLQot
ICAgIC8vIFNlYXJjaGVzIHRocm91Z2ggdGhlIGRvY3VtZW50LCBzdGFydGluZyBmcm9tIHN0YXJ0
IG5vZGUsIGZvciB0aGUgcHJldmlvdXMgc2VsZWN0YWJsZSBlbGVtZW50IHRoYXQgY29tZXMgYmVm
b3JlIHN0YXJ0IG5vZGUuCi0gICAgLy8gVGhlIG9yZGVyIGZvbGxvd2VkIGlzIGFzIHNwZWNpZmll
ZCBpbiBzZWN0aW9uIDE3LjExLjEgb2YgdGhlIEhUTUw0IHNwZWMsIHdoaWNoIGlzIGVsZW1lbnRz
IHdpdGggdGFiIGluZGV4ZXMKLSAgICAvLyBmaXJzdCAoZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCks
IGFuZCB0aGVuIGVsZW1lbnRzIHdpdGhvdXQgdGFiIGluZGV4ZXMgKGluIGRvY3VtZW50IG9yZGVy
KS4KLSAgICAvLwotICAgIC8vIEBwYXJhbSB3aXRoaW4gVGhlIHRyZWUgc2NvcGUgd2hlcmUgYSBz
ZWFyY2ggaXMgZXhlY3V0ZWQuCi0gICAgLy8gQHBhcmFtIHN0YXJ0IFRoZSBub2RlIGZyb20gd2hp
Y2ggdG8gc3RhcnQgc2VhcmNoaW5nLiBUaGUgbm9kZSBiZWZvcmUgdGhpcyB3aWxsIGJlIGZvY3Vz
ZWQuIE1heSBiZSBudWxsLgotICAgIC8vCi0gICAgLy8gQHJldHVybiBUaGUgZm9jdXMgbm9kZSB0
aGF0IGNvbWVzIGJlZm9yZSBzdGFydCBub2RlLgotICAgIC8vCi0gICAgLy8gU2VlIGh0dHA6Ly93
d3cudzMub3JnL1RSL2h0bWw0L2ludGVyYWN0L2Zvcm1zLmh0bWwjaC0xNy4xMS4xCi0gICAgTm9k
ZSogcHJldmlvdXNGb2N1c2FibGVOb2RlKFRyZWVTY29wZSogd2l0aGluLCBOb2RlKiBzdGFydCwg
S2V5Ym9hcmRFdmVudCopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="90063"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>