<?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>137218</bug_id>
          
          <creation_ts>2014-09-29 11:19:25 -0700</creation_ts>
          <short_desc>Implement API in WebCore::Page that returns whether there&apos;s any audio playing on the page</short_desc>
          <delta_ts>2014-10-13 03:42:39 -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>Media</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>137655</dependson>
          <blocked>137048</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ada Chan">adachan</reporter>
          <assigned_to name="Ada Chan">adachan</assigned_to>
          <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>ossy</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1037994</commentid>
    <comment_count>0</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-09-29 11:19:25 -0700</bug_when>
    <thetext>This bug focuses on getting the HTMLMediaElement related parts working.  I&apos;ll file a separate bug for handling the plug-ins case.

Here&apos;s a rough plan on implementing this:

1. Add a method in MediaSessionClient to return which Page it belongs to.
2. Add a method in MediaSessionClient that returns its &quot;media characteristics&quot;.  Media characteristics can be a combination of Audible, Visual, and Legible.
3. Maintain a map of Page -&gt; list of MediaSessions in MediaSessionManager.
4. Add a method in MediaSessionManager that returns whether there&apos;s audio playing for a particular Page.  That method will iterate through the list of MediaSessions for that page, and return true if any one of them is in the Playing state and has the Audible characteristic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039105</commentid>
    <comment_count>1</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-10-02 20:05:34 -0700</bug_when>
    <thetext>Steps 3 and 4 have changed.  Instead of trying to maintain a map of Page -&gt; MediaSessions, we&apos;ll keep a set of MediaSessions in the Document instead.  The Page can go through its frames&apos; documents to check whether there are any MediaSessions with audio that are playing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039130</commentid>
    <comment_count>2</comment_count>
      <attachid>239179</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-10-02 22:47:58 -0700</bug_when>
    <thetext>Created attachment 239179
Patch: Implement WebCore::Page::isPlayingAudio()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039207</commentid>
    <comment_count>3</comment_count>
      <attachid>239179</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-10-03 07:42:39 -0700</bug_when>
    <thetext>Comment on attachment 239179
Patch: Implement WebCore::Page::isPlayingAudio()

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

&gt; Source/WebCore/dom/Document.cpp:3293
&gt; +    for (auto mediaSessionsIt = m_mediaSessions.begin(); mediaSessionsIt != m_mediaSessions.end(); ++mediaSessionsIt) {

Can you do this with a modern for loop?   for (auto mediaSession : m_mediaSessions)

&gt; Source/WebCore/html/HTMLMediaElement.cpp:447
&gt; +    document.registerMediaSession(*m_mediaSession);

I think it would make more sense to have the session register/unregister with the document. Maybe something like MediaSession::addedToDocument and MediaSession::removedFromDocument?

&gt; Source/WebCore/html/HTMLMediaElement.cpp:472
&gt; +    document.unregisterMediaSession(*m_mediaSession);

Ditto.

&gt; Source/WebCore/html/HTMLMediaElement.cpp:4326
&gt; +    document().updateIsPlayingAudio();

The session should update the document. MediaSession::characteristicChanged ?

&gt; Source/WebCore/html/HTMLMediaElement.cpp:6018
&gt; +    document().updateIsPlayingAudio();

Ditto.

&gt; Source/WebCore/html/HTMLMediaElement.h:706
&gt; +    virtual void mediaStateDidChange() override;

This isn&apos;t necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039210</commentid>
    <comment_count>4</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-10-03 08:14:10 -0700</bug_when>
    <thetext>Thanks for reviewing!

(In reply to comment #3)
&gt; (From update of attachment 239179 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=239179&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:3293
&gt; &gt; +    for (auto mediaSessionsIt = m_mediaSessions.begin(); mediaSessionsIt != m_mediaSessions.end(); ++mediaSessionsIt) {
&gt; 
&gt; Can you do this with a modern for loop?   for (auto mediaSession : m_mediaSessions)

Yes, I can do that.

&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:447
&gt; &gt; +    document.registerMediaSession(*m_mediaSession);
&gt; 
&gt; I think it would make more sense to have the session register/unregister with the document. Maybe something like MediaSession::addedToDocument and MediaSession::removedFromDocument?

I actually had that before, but Jer reminded me that things in the platform layer should not know anything about the dom layer.  That&apos;s why I did it this way.

&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:472
&gt; &gt; +    document.unregisterMediaSession(*m_mediaSession);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:4326
&gt; &gt; +    document().updateIsPlayingAudio();
&gt; 
&gt; The session should update the document. MediaSession::characteristicChanged ?

Same reason here.  The MediaSession shouldn&apos;t update the Document directly, so I did it through the MediaSessionClient.

&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:6018
&gt; &gt; +    document().updateIsPlayingAudio();
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.h:706
&gt; &gt; +    virtual void mediaStateDidChange() override;
&gt; 
&gt; This isn&apos;t necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039212</commentid>
    <comment_count>5</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-10-03 08:28:39 -0700</bug_when>
    <thetext>Eric, please let me know if you think there&apos;s another approach I can take to maintain the relationship between the Document and the MediaSessions that does not involve the MediaSession having direct knowledge of the Document.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039424</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-10-03 18:12:25 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Eric, please let me know if you think there&apos;s another approach I can take to maintain the relationship 
&gt; between the Document and the MediaSessions that does not involve the MediaSession having 
&gt; direct knowledge of the Document.  Thanks!

You could put it int HTMLMediaSession, but I fine with you leaving it as-is if you would rather.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039771</commentid>
    <comment_count>7</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-10-06 11:34:26 -0700</bug_when>
    <thetext>I&apos;ve decided to leave it as is for now.  I still need to handle MediaSessions from AudioDestinations at some point and that doesn&apos;t use HTMLMediaSession.

Committed:
https://trac.webkit.org/changeset/174353</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041267</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-10-13 03:42:39 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I&apos;ve decided to leave it as is for now.  I still need to handle MediaSessions from AudioDestinations at some point and that doesn&apos;t use HTMLMediaSession.
&gt; 
&gt; Committed:
&gt; https://trac.webkit.org/changeset/174353

It broke the !ENABLE(VIDEO) build, see bug137655 for details.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239179</attachid>
            <date>2014-10-02 22:47:58 -0700</date>
            <delta_ts>2014-10-03 07:42:39 -0700</delta_ts>
            <desc>Patch: Implement WebCore::Page::isPlayingAudio()</desc>
            <filename>0001-Implement-Page-isPlayingAudio.patch</filename>
            <type>text/plain</type>
            <size>18830</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">RnJvbSA5MDc4OWJhZjY0Zjk4NDBjMjZlNzNmYTY2YjM1ZjZjNjczMzgxZDc4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGEgQ2hhbiA8YWRhY2hhbkBhcHBsZS5jb20+CkRhdGU6IFRo
dSwgMiBPY3QgMjAxNCAxNzozOTo0MSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEltcGxlbWVudCBQ
YWdlOjppc1BsYXlpbmdBdWRpbygpLgogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNzIxOAoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgotIEFkZCBhIGhhc01l
ZGlhQ2hhcmFjdGVyaXN0aWNzKCkgbWV0aG9kIHRvIE1lZGlhU2Vzc2lvbi4gVGhlcmUgYXJlIHRo
cmVlIGNoYXJhY3RlcmlzdGljczoKYXVkaWJsZSwgdmlzdWFsLCBhbmQgbGVnaWJsZS4gTWVkaWFT
ZXNzaW9uIGdldHMgdGhlIG1lZGlhIGNoYXJhY3RlcmlzdGljcyBpbmZvcm1hdGlvbiBmcm9tCml0
cyBNZWRpYVNlc3Npb25DbGllbnQuCi0gQWRkIGEgbWVkaWFTdGF0ZURpZENoYW5nZSgpIG1ldGhv
ZCB0byBNZWRpYVNlc3Npb25DbGllbnQgdGhhdCBNZWRpYVNlc3Npb24gY2FuIGNhbGwgd2hlbiBp
dHMKc3RhdGUgY2hhbmdlcy4KLSBFYWNoIERvY3VtZW50IGtlZXBzIGEgc2V0IG9mIE1lZGlhU2Vz
c2lvbnMgaXQgY29udGFpbnMuIFdoZW4gdGhhdCBzZXQgY2hhbmdlcywgb3Igd2hlbiBhIE1lZGlh
U2Vzc2lvbgpjaGFuZ2VzIHN0YXRlLCBvciB3aGVuIGl0cyBjaGFyYWN0ZXJpc3RpY3MgY2hhbmdl
LCBEb2N1bWVudDo6dXBkYXRlSXNQbGF5aW5nQXVkaW8oKSBpcyBjYWxsZWQuIFRoYXQgbWV0aG9k
Cml0ZXJhdGVzIHRocm91Z2ggYWxsIGl0cyBNZWRpYVNlc3Npb25zIHRvIGNoZWNrIGlmIHRoZSBv
dmVyYWxsIGlzUGxheWluZ0F1ZGlvIHN0YXRlIGhhcyBjaGFuZ2VkIGluIHRoZSBEb2N1bWVudC4K
LSBFYWNoIFBhZ2UgY2FjaGVzIGl0cyBvdmVyYWxsIGlzUGxheWluZ0F1ZGlvIHN0YXRlLiBXaGVu
ZXZlciBhIERvY3VtZW50J3MgaXNQbGF5aW5nQXVkaW8gc3RhdGUgY2hhbmdlcywKaXQgY2FsbHMg
UGFnZTo6dXBkYXRlSXNQbGF5aW5nQXVkaW8oKSB3aGljaCBpdGVyYXRlcyB0aHJvdWdoIGl0cyBm
cmFtZXMnIGRvY3VtZW50cyB0byBjYWxjdWxhdGUgaXRzCm92ZXJhbGwgaXNQbGF5aW5nQXVkaW8g
c3RhdGUuCgpObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KCiogZG9tL0RvY3VtZW50
LmNwcDoKKFdlYkNvcmU6OkRvY3VtZW50OjpEb2N1bWVudCk6CkluaXRpYWxpemUgbV9pc1BsYXlp
bmdBdWRpby4KKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3Rlck1lZGlhU2Vzc2lvbik6CkFkZCB0
aGUgTWVkaWFTZXNzaW9uIHRvIG1fbWVkaWFTZXNzaW9ucy4gQ2FsbCB1cGRhdGVJc1BsYXlpbmdB
dWRpbygpLgooV2ViQ29yZTo6RG9jdW1lbnQ6OnVucmVnaXN0ZXJNZWRpYVNlc3Npb24pOgpSZW1v
dmUgdGhlIE1lZGlhU2Vzc2lvbiBmcm9tIG1fbWVkaWFTZXNzaW9ucy4gQ2FsbCB1cGRhdGVJc1Bs
YXlpbmdBdWRpbygpLgooV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUlzUGxheWluZ0F1ZGlvKToK
R28gdGhyb3VnaCBhbGwgdGhlIE1lZGlhU2Vzc2lvbnMgaW4gdGhpcyBEb2N1bWVudCBhbmQgY2hl
Y2sgaWYgYW55IGhhcyB0aGUgQXVkaWJsZSBjaGFyYWN0ZXJpc3RpYwphbmQgaXMgcGxheWluZy4g
SWYgdGhlIG92ZXJhbGwgaXNQbGF5aW5nQXVkaW8gc3RhdGUgY2hhbmdlcywgY2FsbCBQYWdlOjp1
cGRhdGVJc1BsYXlpbmdBdWRpbygpLgoqIGRvbS9Eb2N1bWVudC5oOgooV2ViQ29yZTo6RG9jdW1l
bnQ6OmlzUGxheWluZ0F1ZGlvKToKCiogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aERvY3VtZW50KToKQ2FsbCBEb2N1bWVu
dDo6cmVnaXN0ZXJNZWRpYVNlc3Npb24oKS4KKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVu
cmVnaXN0ZXJXaXRoRG9jdW1lbnQpOgpDYWxsIERvY3VtZW50Ojp1bnJlZ2lzdGVyTWVkaWFTZXNz
aW9uKCkuCihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckNoYXJhY3Rlcmlz
dGljQ2hhbmdlZCk6CkNhbGwgRG9jdW1lbnQ6OnVwZGF0ZUlzUGxheWluZ0F1ZGlvKCkuCihXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzdG9wKToKQ2FsbCBNZWRpYVNlc3Npb246OmNsaWVudFdp
bGxQYXVzZVBsYXliYWNrKCkgc28gdGhlIE1lZGlhU2Vzc2lvbidzIHN0YXRlIGNhbiBiZSBzZXQg
YmFjayB0byBQYXVzZWQuCihXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpoYXNNZWRpYUNoYXJh
Y3RlcmlzdGljcyk6CkNhbGwgaGFzQXVkaW8oKSB0byBjaGVjayBpZiB0aGUgSFRNTE1lZGlhRWxl
bWVudCBoYXMgdGhlIEF1ZGlibGUgY2hhcmFjdGVyaXN0aWMuIENhbGwgaGFzVmlkZW8oKQp0byBj
aGVjayBpZiBpdCBoYXMgdGhlIFZpc3VhbCBjaGFyYWN0ZXJpc3RpYy4gQ2FsbCBoYXNDbG9zZWRD
YXB0aW9ucygpIHRvIGNoZWNrIGlmIGl0IGhhcyB0aGUKTGVnaWJsZSBjaGFyYWN0ZXJpc3RpYy4K
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhU3RhdGVEaWRDaGFuZ2UpOgpDYWxsIERv
Y3VtZW50Ojp1cGRhdGVJc1BsYXlpbmdBdWRpbygpLgoqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5o
OgoKKiBwYWdlL1BhZ2UuY3BwOgooV2ViQ29yZTo6UGFnZTo6UGFnZSk6CkluaXRpYWxpemUgbV9p
c1BsYXlpbmdBdWRpby4KKFdlYkNvcmU6OlBhZ2U6OnVwZGF0ZUlzUGxheWluZ0F1ZGlvKToKSXRl
cmF0ZSB0aHJvdWdoIGFsbCBpdHMgZnJhbWVzJyBkb2N1bWVudHMgdG8gY2hlY2sgaWYgYW55IGhh
cyBhdWRpbyBwbGF5aW5nLiBJZiB0aGUgb3ZlcmFsbCBpc1BsYXlpbmdBdWRpbwpzdGF0ZSBoYXMg
Y2hhbmdlZCwgdXBkYXRlIG1faXNQbGF5aW5nQXVkaW8uCiogcGFnZS9QYWdlLmg6CihXZWJDb3Jl
OjpQYWdlOjppc1BsYXlpbmdBdWRpbyk6CgoqIHBsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5j
cHA6CihXZWJDb3JlOjpNZWRpYVNlc3Npb246OnNldFN0YXRlKToKSWYgdGhlIE1lZGlhU2Vzc2lv
bidzIHN0YXRlIGhhcyBjaGFuZ2VkLCBjYWxsIERvY3VtZW50Ojp1cGRhdGVJc1BsYXlpbmdBdWRp
bygpLgooV2ViQ29yZTo6TWVkaWFTZXNzaW9uOjpoYXNNZWRpYUNoYXJhY3RlcmlzdGljcyk6CkNh
bGwgTWVkaWFTZXNzaW9uQ2xpZW50OjpoYXNNZWRpYUNoYXJhY3RlcmlzdGljcygpLgoqIHBsYXRm
b3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5oOgooV2ViQ29yZTo6TWVkaWFTZXNzaW9uQ2xpZW50Ojpt
ZWRpYVN0YXRlRGlkQ2hhbmdlKToKCiogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRp
b25NYWMuaDoKQXVkaW9EZXN0aW5hdGlvbiBvbmx5IGhhcyB0aGUgQXVkaWJsZSBjaGFyYWN0ZXJp
c3RpYy4KLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IDcxICsrKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAgICAgICAgICAgICAgICAgICAgIHwgMzQgKysrKysrKysrKysKIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKysrCiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwICAgICAgICAgICB8IDIzICsrKysrKysK
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oICAgICAgICAgICAgIHwgIDIg
KwogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCAgICAgICAgICAgICAgICAgICAgICAgfCAy
MCArKysrKysKIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIDUgKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5j
cHAgICAgIHwgMTEgKysrKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNz
aW9uLmggICAgICAgfCAxMSArKysrCiAuLi4vcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGlu
YXRpb25NYWMuaCAgICAgICB8ICAxICsKIDEwIGZpbGVzIGNoYW5nZWQsIDE4NyBpbnNlcnRpb25z
KCspCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGZmOTA5ZTAuLjAxMjYyN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw3NCBAQAorMjAxNC0xMC0wMiAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KKworICAg
ICAgICBJbXBsZW1lbnQgUGFnZTo6aXNQbGF5aW5nQXVkaW8oKS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzIxOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gQWRkIGEgaGFzTWVkaWFDaGFyYWN0ZXJp
c3RpY3MoKSBtZXRob2QgdG8gTWVkaWFTZXNzaW9uLiBUaGVyZSBhcmUgdGhyZWUgY2hhcmFjdGVy
aXN0aWNzOgorICAgICAgICBhdWRpYmxlLCB2aXN1YWwsIGFuZCBsZWdpYmxlLiBNZWRpYVNlc3Np
b24gZ2V0cyB0aGUgbWVkaWEgY2hhcmFjdGVyaXN0aWNzIGluZm9ybWF0aW9uIGZyb20KKyAgICAg
ICAgaXRzIE1lZGlhU2Vzc2lvbkNsaWVudC4KKyAgICAgICAgLSBBZGQgYSBtZWRpYVN0YXRlRGlk
Q2hhbmdlKCkgbWV0aG9kIHRvIE1lZGlhU2Vzc2lvbkNsaWVudCB0aGF0IE1lZGlhU2Vzc2lvbiBj
YW4gY2FsbCB3aGVuIGl0cworICAgICAgICBzdGF0ZSBjaGFuZ2VzLgorICAgICAgICAtIEVhY2gg
RG9jdW1lbnQga2VlcHMgYSBzZXQgb2YgTWVkaWFTZXNzaW9ucyBpdCBjb250YWlucy4gV2hlbiB0
aGF0IHNldCBjaGFuZ2VzLCBvciB3aGVuIGEgTWVkaWFTZXNzaW9uCisgICAgICAgIGNoYW5nZXMg
c3RhdGUsIG9yIHdoZW4gaXRzIGNoYXJhY3RlcmlzdGljcyBjaGFuZ2UsIERvY3VtZW50Ojp1cGRh
dGVJc1BsYXlpbmdBdWRpbygpIGlzIGNhbGxlZC4gVGhhdCBtZXRob2QKKyAgICAgICAgaXRlcmF0
ZXMgdGhyb3VnaCBhbGwgaXRzIE1lZGlhU2Vzc2lvbnMgdG8gY2hlY2sgaWYgdGhlIG92ZXJhbGwg
aXNQbGF5aW5nQXVkaW8gc3RhdGUgaGFzIGNoYW5nZWQgaW4gdGhlIERvY3VtZW50LgorICAgICAg
ICAtIEVhY2ggUGFnZSBjYWNoZXMgaXRzIG92ZXJhbGwgaXNQbGF5aW5nQXVkaW8gc3RhdGUuIFdo
ZW5ldmVyIGEgRG9jdW1lbnQncyBpc1BsYXlpbmdBdWRpbyBzdGF0ZSBjaGFuZ2VzLAorICAgICAg
ICBpdCBjYWxscyBQYWdlOjp1cGRhdGVJc1BsYXlpbmdBdWRpbygpIHdoaWNoIGl0ZXJhdGVzIHRo
cm91Z2ggaXRzIGZyYW1lcycgZG9jdW1lbnRzIHRvIGNhbGN1bGF0ZSBpdHMKKyAgICAgICAgb3Zl
cmFsbCBpc1BsYXlpbmdBdWRpbyBzdGF0ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJl
aGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6RG9jdW1lbnQpOgorICAgICAgICBJbml0aWFsaXplIG1faXNQbGF5
aW5nQXVkaW8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJNZWRpYVNlc3Np
b24pOgorICAgICAgICBBZGQgdGhlIE1lZGlhU2Vzc2lvbiB0byBtX21lZGlhU2Vzc2lvbnMuIENh
bGwgdXBkYXRlSXNQbGF5aW5nQXVkaW8oKS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1
bnJlZ2lzdGVyTWVkaWFTZXNzaW9uKToKKyAgICAgICAgUmVtb3ZlIHRoZSBNZWRpYVNlc3Npb24g
ZnJvbSBtX21lZGlhU2Vzc2lvbnMuIENhbGwgdXBkYXRlSXNQbGF5aW5nQXVkaW8oKS4KKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVJc1BsYXlpbmdBdWRpbyk6CisgICAgICAgIEdv
IHRocm91Z2ggYWxsIHRoZSBNZWRpYVNlc3Npb25zIGluIHRoaXMgRG9jdW1lbnQgYW5kIGNoZWNr
IGlmIGFueSBoYXMgdGhlIEF1ZGlibGUgY2hhcmFjdGVyaXN0aWMKKyAgICAgICAgYW5kIGlzIHBs
YXlpbmcuIElmIHRoZSBvdmVyYWxsIGlzUGxheWluZ0F1ZGlvIHN0YXRlIGNoYW5nZXMsIGNhbGwg
UGFnZTo6dXBkYXRlSXNQbGF5aW5nQXVkaW8oKS4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojppc1BsYXlpbmdBdWRpbyk6CisKKyAgICAgICAg
KiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQpOgorICAgICAgICBDYWxsIERvY3VtZW50Ojpy
ZWdpc3Rlck1lZGlhU2Vzc2lvbigpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6dW5yZWdpc3RlcldpdGhEb2N1bWVudCk6CisgICAgICAgIENhbGwgRG9jdW1lbnQ6OnVucmVn
aXN0ZXJNZWRpYVNlc3Npb24oKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
Om1lZGlhUGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKToKKyAgICAgICAgQ2FsbCBEb2N1bWVu
dDo6dXBkYXRlSXNQbGF5aW5nQXVkaW8oKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnN0b3ApOgorICAgICAgICBDYWxsIE1lZGlhU2Vzc2lvbjo6Y2xpZW50V2lsbFBhdXNl
UGxheWJhY2soKSBzbyB0aGUgTWVkaWFTZXNzaW9uJ3Mgc3RhdGUgY2FuIGJlIHNldCBiYWNrIHRv
IFBhdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omhhc01lZGlhQ2hh
cmFjdGVyaXN0aWNzKToKKyAgICAgICAgQ2FsbCBoYXNBdWRpbygpIHRvIGNoZWNrIGlmIHRoZSBI
VE1MTWVkaWFFbGVtZW50IGhhcyB0aGUgQXVkaWJsZSBjaGFyYWN0ZXJpc3RpYy4gQ2FsbCBoYXNW
aWRlbygpCisgICAgICAgIHRvIGNoZWNrIGlmIGl0IGhhcyB0aGUgVmlzdWFsIGNoYXJhY3Rlcmlz
dGljLiBDYWxsIGhhc0Nsb3NlZENhcHRpb25zKCkgdG8gY2hlY2sgaWYgaXQgaGFzIHRoZQorICAg
ICAgICBMZWdpYmxlIGNoYXJhY3RlcmlzdGljLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6bWVkaWFTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIENhbGwgRG9jdW1lbnQ6OnVw
ZGF0ZUlzUGxheWluZ0F1ZGlvKCkuCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6
CisKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFn
ZSk6CisgICAgICAgIEluaXRpYWxpemUgbV9pc1BsYXlpbmdBdWRpby4KKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnVwZGF0ZUlzUGxheWluZ0F1ZGlvKToKKyAgICAgICAgSXRlcmF0ZSB0aHJvdWdo
IGFsbCBpdHMgZnJhbWVzJyBkb2N1bWVudHMgdG8gY2hlY2sgaWYgYW55IGhhcyBhdWRpbyBwbGF5
aW5nLiBJZiB0aGUgb3ZlcmFsbCBpc1BsYXlpbmdBdWRpbworICAgICAgICBzdGF0ZSBoYXMgY2hh
bmdlZCwgdXBkYXRlIG1faXNQbGF5aW5nQXVkaW8uCisgICAgICAgICogcGFnZS9QYWdlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjppc1BsYXlpbmdBdWRpbyk6CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNz
aW9uOjpzZXRTdGF0ZSk6CisgICAgICAgIElmIHRoZSBNZWRpYVNlc3Npb24ncyBzdGF0ZSBoYXMg
Y2hhbmdlZCwgY2FsbCBEb2N1bWVudDo6dXBkYXRlSXNQbGF5aW5nQXVkaW8oKS4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbjo6aGFzTWVkaWFDaGFyYWN0ZXJpc3RpY3MpOgorICAgICAg
ICBDYWxsIE1lZGlhU2Vzc2lvbkNsaWVudDo6aGFzTWVkaWFDaGFyYWN0ZXJpc3RpY3MoKS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU2Vzc2lvbkNsaWVudDo6bWVkaWFTdGF0ZURpZENoYW5nZSk6CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5oOgorICAgICAgICBBdWRpb0Rl
c3RpbmF0aW9uIG9ubHkgaGFzIHRoZSBBdWRpYmxlIGNoYXJhY3RlcmlzdGljLgorCiAyMDE0LTA5
LTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtl
IHRoZSBXZWIgSW5zcGVjdG9yIHVzZSBhIHNlcGFyYXRlIHdlYiBwcm9jZXNzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKaW5kZXggYTNjZjUyOS4uNzQ4ZDlkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCkBAIC05OSw2ICs5OSw3IEBACiAjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiTWVkaWFRdWVyeUxpc3QuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5TWF0Y2hl
ci5oIgorI2luY2x1ZGUgIk1lZGlhU2Vzc2lvbi5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJOYW1lTm9kZUxpc3QuaCIKICNpbmNsdWRlICJO
ZXN0aW5nTGV2ZWxJbmNyZW1lbnRlci5oIgpAQCAtNTE4LDYgKzUxOSw3IEBAIERvY3VtZW50OjpE
b2N1bWVudChGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCB1bnNpZ25lZCBkb2N1bWVudENs
YXNzZXMsIHVuc2lnCiAgICAgLCBtX3JlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZChmYWxzZSkKICAg
ICAsIG1faGFzUHJlcGFyZWRGb3JEZXN0cnVjdGlvbihmYWxzZSkKICAgICAsIG1faGFzU3R5bGVX
aXRoVmlld3BvcnRVbml0cyhmYWxzZSkKKyAgICAsIG1faXNQbGF5aW5nQXVkaW8oZmFsc2UpCiB7
CiAgICAgYWxsRG9jdW1lbnRzKCkuYWRkKHRoaXMpOwogCkBAIC0zMjczLDYgKzMyNzUsMzggQEAg
dm9pZCBEb2N1bWVudDo6dXBkYXRlVmlld3BvcnRVbml0c09uUmVzaXplKCkKICAgICB9CiB9CiAK
K3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyTWVkaWFTZXNzaW9uKE1lZGlhU2Vzc2lvbiYgbWVkaWFT
ZXNzaW9uKQoreworICAgIG1fbWVkaWFTZXNzaW9ucy5hZGQoJm1lZGlhU2Vzc2lvbik7CisgICAg
dXBkYXRlSXNQbGF5aW5nQXVkaW8oKTsKK30KKwordm9pZCBEb2N1bWVudDo6dW5yZWdpc3Rlck1l
ZGlhU2Vzc2lvbihNZWRpYVNlc3Npb24mIG1lZGlhU2Vzc2lvbikKK3sKKyAgICBtX21lZGlhU2Vz
c2lvbnMucmVtb3ZlKCZtZWRpYVNlc3Npb24pOworICAgIHVwZGF0ZUlzUGxheWluZ0F1ZGlvKCk7
Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUlzUGxheWluZ0F1ZGlvKCkKK3sKKyAgICBib29s
IGlzUGxheWluZ0F1ZGlvID0gZmFsc2U7CisgICAgZm9yIChhdXRvIG1lZGlhU2Vzc2lvbnNJdCA9
IG1fbWVkaWFTZXNzaW9ucy5iZWdpbigpOyBtZWRpYVNlc3Npb25zSXQgIT0gbV9tZWRpYVNlc3Np
b25zLmVuZCgpOyArK21lZGlhU2Vzc2lvbnNJdCkgeworICAgICAgICBNZWRpYVNlc3Npb24qIG1l
ZGlhU2Vzc2lvbiA9ICptZWRpYVNlc3Npb25zSXQ7CisgICAgICAgIGlmIChtZWRpYVNlc3Npb24t
Pmhhc01lZGlhQ2hhcmFjdGVyaXN0aWNzKE1lZGlhU2Vzc2lvbjo6TWVkaWFDaGFyYWN0ZXJpc3Rp
Y0F1ZGlibGUpICYmIG1lZGlhU2Vzc2lvbi0+c3RhdGUoKSA9PSBNZWRpYVNlc3Npb246OlBsYXlp
bmcpIHsKKyAgICAgICAgICAgIGlzUGxheWluZ0F1ZGlvID0gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzUGxheWluZ0F1ZGlvID09IG1faXNQ
bGF5aW5nQXVkaW8pCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNQbGF5aW5nQXVkaW8gPSBp
c1BsYXlpbmdBdWRpbzsKKworICAgIGlmIChwYWdlKCkpCisgICAgICAgIHBhZ2UoKS0+dXBkYXRl
SXNQbGF5aW5nQXVkaW8oKTsKK30KKwogdm9pZCBEb2N1bWVudDo6c3R5bGVSZXNvbHZlckNoYW5n
ZWQoU3R5bGVSZXNvbHZlclVwZGF0ZUZsYWcgdXBkYXRlRmxhZykKIHsKICAgICBpZiAobV9vcHRp
bWl6ZWRTdHlsZVNoZWV0VXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
aW5kZXggMzdkNGZkMy4uYTMxZWUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTEyMyw2ICsx
MjMsNyBAQCBjbGFzcyBMb2NhbGU7CiBjbGFzcyBNZWRpYUNhblN0YXJ0TGlzdGVuZXI7CiBjbGFz
cyBNZWRpYVF1ZXJ5TGlzdDsKIGNsYXNzIE1lZGlhUXVlcnlNYXRjaGVyOworY2xhc3MgTWVkaWFT
ZXNzaW9uOwogY2xhc3MgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0czsKIGNsYXNzIE5hbWVk
Rmxvd0NvbGxlY3Rpb247CiBjbGFzcyBOb2RlRmlsdGVyOwpAQCAtMTI4OCw2ICsxMjg5LDExIEBA
IHB1YmxpYzoKICAgICBib29sIGhhc1N0eWxlV2l0aFZpZXdwb3J0VW5pdHMoKSBjb25zdCB7IHJl
dHVybiBtX2hhc1N0eWxlV2l0aFZpZXdwb3J0VW5pdHM7IH0KICAgICB2b2lkIHVwZGF0ZVZpZXdw
b3J0VW5pdHNPblJlc2l6ZSgpOwogCisgICAgdm9pZCByZWdpc3Rlck1lZGlhU2Vzc2lvbihNZWRp
YVNlc3Npb24mKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJNZWRpYVNlc3Npb24oTWVkaWFTZXNzaW9u
Jik7CisgICAgYm9vbCBpc1BsYXlpbmdBdWRpbygpIGNvbnN0IHsgcmV0dXJuIG1faXNQbGF5aW5n
QXVkaW87IH0KKyAgICB2b2lkIHVwZGF0ZUlzUGxheWluZ0F1ZGlvKCk7CisKIHByb3RlY3RlZDoK
ICAgICBlbnVtIENvbnN0cnVjdGlvbkZsYWdzIHsgU3ludGhlc2l6ZWQgPSAxLCBOb25SZW5kZXJl
ZFBsYWNlaG9sZGVyID0gMSA8PCAxIH07CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBVUkwm
LCB1bnNpZ25lZCA9IERlZmF1bHREb2N1bWVudENsYXNzLCB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25G
bGFncyA9IDApOwpAQCAtMTcwNyw2ICsxNzEzLDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFz
UHJlcGFyZWRGb3JEZXN0cnVjdGlvbjsKIAogICAgIGJvb2wgbV9oYXNTdHlsZVdpdGhWaWV3cG9y
dFVuaXRzOworCisgICAgSGFzaFNldDxNZWRpYVNlc3Npb24qPiBtX21lZGlhU2Vzc2lvbnM7Cisg
ICAgYm9vbCBtX2lzUGxheWluZ0F1ZGlvOwogfTsKIAogaW5saW5lIHZvaWQgRG9jdW1lbnQ6Om5v
dGlmeVJlbW92ZVBlbmRpbmdTaGVldElmTmVlZGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCmluZGV4IGQzNjhiYWQuLjk3MmM4NjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNDQ0LDYgKzQ0NCw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6cmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogICAg
ICAgICBkb2N1bWVudC5yZWdpc3RlckZvclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRDYWxsYmFja3Mo
dGhpcyk7CiAjZW5kaWYKIAorICAgIGRvY3VtZW50LnJlZ2lzdGVyTWVkaWFTZXNzaW9uKCptX21l
ZGlhU2Vzc2lvbik7CiAgICAgYWRkRWxlbWVudFRvRG9jdW1lbnRNYXAoKnRoaXMsIGRvY3VtZW50
KTsKIH0KIApAQCAtNDY4LDYgKzQ2OSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dW5yZWdp
c3RlcldpdGhEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgICAgIGRvY3VtZW50LnVu
cmVnaXN0ZXJGb3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQ2FsbGJhY2tzKHRoaXMpOwogI2VuZGlm
CiAKKyAgICBkb2N1bWVudC51bnJlZ2lzdGVyTWVkaWFTZXNzaW9uKCptX21lZGlhU2Vzc2lvbik7
CiAgICAgcmVtb3ZlRWxlbWVudEZyb21Eb2N1bWVudE1hcCgqdGhpcywgZG9jdW1lbnQpOwogfQog
CkBAIC00MzIwLDYgKzQzMjIsOSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVy
Q2hhcmFjdGVyaXN0aWNDaGFuZ2VkKE1lZGlhUGxheWVyKikKICAgICAgICAgbWVkaWFDb250cm9s
cygpLT5yZXNldCgpOwogICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlcigpLT51
cGRhdGVGcm9tRWxlbWVudCgpOworCisgICAgZG9jdW1lbnQoKS51cGRhdGVJc1BsYXlpbmdBdWRp
bygpOworCiAgICAgZW5kUHJvY2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2soKTsKIH0KIApAQCAt
NDY2Nyw2ICs0NjcyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdG9wKCkKICAgICAvLyBT
dG9wIHRoZSBwbGF5YmFjayB3aXRob3V0IGdlbmVyYXRpbmcgZXZlbnRzCiAgICAgbV9wbGF5aW5n
ID0gZmFsc2U7CiAgICAgc2V0UGF1c2VkSW50ZXJuYWwodHJ1ZSk7CisgICAgbV9tZWRpYVNlc3Np
b24tPmNsaWVudFdpbGxQYXVzZVBsYXliYWNrKCk7CiAKICAgICB1c2VyQ2FuY2VsbGVkTG9hZCgp
OwogCkBAIC01OTk1LDYgKzYwMDEsMjMgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpvdmVycmlk
ZUJhY2tncm91bmRQbGF5YmFja1Jlc3RyaWN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK2Jvb2wgSFRNTE1lZGlhRWxlbWVudDo6aGFzTWVkaWFDaGFyYWN0ZXJpc3RpY3MoTWVk
aWFTZXNzaW9uOjpNZWRpYUNoYXJhY3RlcmlzdGljcyBjaGFyYWN0ZXJpc3RpY3MpIGNvbnN0Cit7
CisgICAgaWYgKChjaGFyYWN0ZXJpc3RpY3MgJiBNZWRpYVNlc3Npb246Ok1lZGlhQ2hhcmFjdGVy
aXN0aWNBdWRpYmxlKSAmJiAhaGFzQXVkaW8oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICgoY2hhcmFjdGVyaXN0aWNzICYgTWVkaWFTZXNzaW9uOjpNZWRpYUNoYXJhY3RlcmlzdGlj
VmlzdWFsKSAmJiAhaGFzVmlkZW8oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgo
Y2hhcmFjdGVyaXN0aWNzICYgTWVkaWFTZXNzaW9uOjpNZWRpYUNoYXJhY3RlcmlzdGljTGVnaWJs
ZSkgJiYgIWhhc0Nsb3NlZENhcHRpb25zKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhU3RhdGVEaWRD
aGFuZ2UoKQoreworICAgIGRvY3VtZW50KCkudXBkYXRlSXNQbGF5aW5nQXVkaW8oKTsKK30KKwog
Ym9vbCBIVE1MTWVkaWFFbGVtZW50Ojpkb2VzSGF2ZUF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZSwgQXRvbWljU3RyaW5nKiB2YWx1ZSkgY29uc3QKIHsKICAgICBRdWFsaWZp
ZWROYW1lIGF0dHJpYnV0ZU5hbWUobnVsbEF0b20sIGF0dHJpYnV0ZSwgbnVsbEF0b20pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCBkODY3Zjc1Li5hOTJiZTM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtNzAyLDYgKzcwMiw4IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNhblJlY2VpdmVSZW1vdGVDb250cm9sQ29tbWFu
ZHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVSZW1vdGVDb250cm9sQ29tbWFuZChNZWRpYVNlc3Npb246OlJlbW90ZUNvbnRyb2xD
b21tYW5kVHlwZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIG92ZXJyaWRlQmFja2dyb3Vu
ZFBsYXliYWNrUmVzdHJpY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzTWVkaWFDaGFyYWN0ZXJpc3RpY3MoTWVkaWFTZXNzaW9uOjpNZWRpYUNoYXJhY3RlcmlzdGlj
cykgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1lZGlhU3RhdGVEaWRDaGFuZ2Uo
KSBvdmVycmlkZTsKIAogICAgIHZvaWQgcmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmKTsK
ICAgICB2b2lkIHVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCmluZGV4IDI2YjhkMTcuLmM0OTliZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMjAzLDYg
KzIwMyw3IEBAIFBhZ2U6OlBhZ2UoUGFnZUNsaWVudHMmIHBhZ2VDbGllbnRzKQogICAgICwgbV92
aXNpdGVkTGlua1N0b3JlKFdURjo6bW92ZShwYWdlQ2xpZW50cy52aXNpdGVkTGlua1N0b3JlKSkK
ICAgICAsIG1fc2Vzc2lvbklEKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKQogICAgICwg
bV9pc0Nsb3NpbmcoZmFsc2UpCisgICAgLCBtX2lzUGxheWluZ0F1ZGlvKGZhbHNlKQogewogICAg
IEFTU0VSVChtX2VkaXRvckNsaWVudCk7CiAgICAgCkBAIC0xMTg3LDYgKzExODgsMjUgQEAgdm9p
ZCBQYWdlOjplbmFibGVMZWdhY3lQcml2YXRlQnJvd3NpbmcoYm9vbCBwcml2YXRlQnJvd3NpbmdF
bmFibGVkKQogICAgIHNldFNlc3Npb25JRChwcml2YXRlQnJvd3NpbmdFbmFibGVkID8gU2Vzc2lv
bklEOjpsZWdhY3lQcml2YXRlU2Vzc2lvbklEKCkgOiBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSk7CiB9CiAKK3ZvaWQgUGFnZTo6dXBkYXRlSXNQbGF5aW5nQXVkaW8oKQoreworICAgIGJv
b2wgaXNQbGF5aW5nQXVkaW8gPSBmYWxzZTsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWlu
RnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewor
ICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPmlzUGxheWluZ0F1ZGlvKCkpIHsKKyAgICAg
ICAgICAgIGlzUGxheWluZ0F1ZGlvID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGlzUGxheWluZ0F1ZGlvID09IG1faXNQbGF5aW5nQXVkaW8p
CisgICAgICAgIHJldHVybjsKKworICAgIG1faXNQbGF5aW5nQXVkaW8gPSBpc1BsYXlpbmdBdWRp
bzsKKworICAgIC8vIEZJWE1FOiBOb3RpZnkgdGhlIENocm9tZUNsaWVudCB0aGF0IHRoZSBpc1Bs
YXlpbmdBdWRpbyBzdGF0ZSBoYXMgY2hhbmdlZC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MjIwCit9CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2
b2lkIFBhZ2U6OmNoZWNrU3ViZnJhbWVDb3VudENvbnNpc3RlbmN5KCkgY29uc3QKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmgKaW5kZXggODZmMmFmZC4uMjhkZmE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTQzMiw2ICs0
MzIsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmFibGVMZWdhY3lQcml2
YXRlQnJvd3NpbmcoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKTsKICAgICBib29sIHVzZXNF
cGhlbWVyYWxTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KTsgfQogCisgICAgYm9vbCBpc1BsYXlpbmdBdWRpbygpIGNvbnN0IHsgcmV0dXJuIG1faXNQbGF5
aW5nQXVkaW87IH0KKyAgICB2b2lkIHVwZGF0ZUlzUGxheWluZ0F1ZGlvKCk7CisKIHByaXZhdGU6
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbml0R3JvdXAoKTsKIApAQCAtNTkxLDYgKzU5NCw4
IEBAIHByaXZhdGU6CiAgICAgU2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogCiAgICAgYm9vbCBtX2lz
Q2xvc2luZzsKKworICAgIGJvb2wgbV9pc1BsYXlpbmdBdWRpbzsKIH07CiAKIGlubGluZSBQYWdl
R3JvdXAmIFBhZ2U6Omdyb3VwKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL01lZGlhU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9N
ZWRpYVNlc3Npb24uY3BwCmluZGV4IDU0NzZjNGUuLjlkZjk2MDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmNwcApAQCAtNzYsNyArNzYsMTMgQEAg
TWVkaWFTZXNzaW9uOjp+TWVkaWFTZXNzaW9uKCkKIHZvaWQgTWVkaWFTZXNzaW9uOjpzZXRTdGF0
ZShTdGF0ZSBzdGF0ZSkKIHsKICAgICBMT0coTWVkaWEsICJNZWRpYVNlc3Npb246OnNldFN0YXRl
KCVwKSAtICVzIiwgdGhpcywgc3RhdGVOYW1lKHN0YXRlKSk7CisKKyAgICBpZiAobV9zdGF0ZSA9
PSBzdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zdGF0ZSA9IHN0YXRlOworCisgICAg
Y2xpZW50KCkubWVkaWFTdGF0ZURpZENoYW5nZSgpOwogfQogCiB2b2lkIE1lZGlhU2Vzc2lvbjo6
YmVnaW5JbnRlcnJ1cHRpb24oSW50ZXJydXB0aW9uVHlwZSB0eXBlKQpAQCAtMTA3LDYgKzExMywx
MSBAQCB2b2lkIE1lZGlhU2Vzc2lvbjo6ZW5kSW50ZXJydXB0aW9uKEVuZEludGVycnVwdGlvbkZs
YWdzIGZsYWdzKQogICAgIH0KIH0KIAorYm9vbCBNZWRpYVNlc3Npb246Omhhc01lZGlhQ2hhcmFj
dGVyaXN0aWNzKE1lZGlhU2Vzc2lvbjo6TWVkaWFDaGFyYWN0ZXJpc3RpY3MgbWVkaWFDaGFyYWN0
ZXJpc3RpY3MpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNsaWVudCgpLmhhc01lZGlhQ2hhcmFjdGVy
aXN0aWNzKG1lZGlhQ2hhcmFjdGVyaXN0aWNzKTsKK30KKwogYm9vbCBNZWRpYVNlc3Npb246OmNs
aWVudFdpbGxCZWdpblBsYXliYWNrKCkKIHsKICAgICBzZXRTdGF0ZShQbGF5aW5nKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmgKaW5kZXggNzMyYzM2Zi4u
NDFhYzc1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFT
ZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9u
LmgKQEAgLTcxLDYgKzcxLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2luSW50ZXJydXB0aW9u
KEludGVycnVwdGlvblR5cGUpOwogICAgIHZvaWQgZW5kSW50ZXJydXB0aW9uKEVuZEludGVycnVw
dGlvbkZsYWdzKTsKIAorICAgIGVudW0gTWVkaWFDaGFyYWN0ZXJpc3RpY0ZsYWdzIHsKKyAgICAg
ICAgTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUgPSAxLAorICAgICAgICBNZWRpYUNoYXJhY3Rl
cmlzdGljVmlzdWFsID0gMSA8PCAxLAorICAgICAgICBNZWRpYUNoYXJhY3RlcmlzdGljTGVnaWJs
ZSA9IDEgPDwgMiwKKyAgICB9OworICAgIHR5cGVkZWYgdW5zaWduZWQgTWVkaWFDaGFyYWN0ZXJp
c3RpY3M7CisgICAgYm9vbCBoYXNNZWRpYUNoYXJhY3RlcmlzdGljcyhNZWRpYUNoYXJhY3Rlcmlz
dGljcykgY29uc3Q7CisKICAgICB2b2lkIGFwcGxpY2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZCgp
IGNvbnN0OwogICAgIHZvaWQgYXBwbGljYXRpb25XaWxsRW50ZXJCYWNrZ3JvdW5kKCkgY29uc3Q7
CiAKQEAgLTEzNiw2ICsxNDQsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJp
ZGVCYWNrZ3JvdW5kUGxheWJhY2tSZXN0cmljdGlvbigpIGNvbnN0ID0gMDsKIAorICAgIHZpcnR1
YWwgYm9vbCBoYXNNZWRpYUNoYXJhY3RlcmlzdGljcyhNZWRpYVNlc3Npb246Ok1lZGlhQ2hhcmFj
dGVyaXN0aWNzKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1lZGlhU3RhdGVEaWRDaGFu
Z2UoKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfk1lZGlhU2Vzc2lvbkNsaWVudCgp
IHsgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9B
dWRpb0Rlc3RpbmF0aW9uTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9EZXN0aW5hdGlvbk1hYy5oCmluZGV4IDFmY2Y5NzMuLjJiMDI4ZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25N
YWMuaApAQCAtNTcsNiArNTcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjYW5SZWNl
aXZlUmVtb3RlQ29udHJvbENvbW1hbmRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlbW90ZUNvbnRyb2xDb21tYW5kKE1lZGlh
U2Vzc2lvbjo6UmVtb3RlQ29udHJvbENvbW1hbmRUeXBlKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0
dWFsIGJvb2wgb3ZlcnJpZGVCYWNrZ3JvdW5kUGxheWJhY2tSZXN0cmljdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGhhc01lZGlhQ2hhcmFj
dGVyaXN0aWNzKE1lZGlhU2Vzc2lvbjo6TWVkaWFDaGFyYWN0ZXJpc3RpY3MgY2hhcmFjdGVyaXN0
aWNzKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjaGFyYWN0ZXJpc3RpY3MgPT0gTWVkaWFTZXNz
aW9uOjpNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHN0
YXJ0KCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLS0gCjEu
OS4zIChBcHBsZSBHaXQtNTApCgo=
</data>
<flag name="review"
          id="263890"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>