<?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>144892</bug_id>
          
          <creation_ts>2015-05-11 18:19:05 -0700</creation_ts>
          <short_desc>[Mac] Refine media playback target client configuration</short_desc>
          <delta_ts>2015-05-12 09:44:04 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1093992</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-05-11 18:19:05 -0700</bug_when>
    <thetext>Refine media playback target client configuration</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093995</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-05-11 18:25:09 -0700</bug_when>
    <thetext>&lt;rdar://problem/20909871&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094002</commentid>
    <comment_count>2</comment_count>
      <attachid>252921</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-05-11 18:52:20 -0700</bug_when>
    <thetext>Created attachment 252921
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094008</commentid>
    <comment_count>3</comment_count>
      <attachid>252923</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-05-11 19:18:32 -0700</bug_when>
    <thetext>Created attachment 252923
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094176</commentid>
    <comment_count>4</comment_count>
      <attachid>252923</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-12 09:27:18 -0700</bug_when>
    <thetext>Comment on attachment 252923
Updated patch.

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

r=me. I had a couple of minor questions, but nothing that needs to be addressed before landing.

&gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:37
&gt; +static double taskDelayInterval = 1. / 10.;

Do we use this style of constant elsewhere? I thought we always said &quot;1.0 / 10.0&quot; (for example).

&gt; Source/WebCore/html/HTMLMediaSession.cpp:389
&gt; +        client().setShouldPlayToPlaybackTarget(true);

I&apos;m just curious here -- did you encounter raciness with the m_shouldPlayToPlaybackTarget state? Because it seems like the original version should have worked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094179</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-05-12 09:38:20 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 252923 [details]
&gt; Updated patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=252923&amp;action=review
&gt; 
&gt; r=me. I had a couple of minor questions, but nothing that needs to be
&gt; addressed before landing.
&gt; 
&gt; &gt; Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp:37
&gt; &gt; +static double taskDelayInterval = 1. / 10.;
&gt; 
&gt; Do we use this style of constant elsewhere? I thought we always said &quot;1.0 /
&gt; 10.0&quot; (for example).
&gt; 
Hmm, not sure what I was thinking.

&gt; &gt; Source/WebCore/html/HTMLMediaSession.cpp:389
&gt; &gt; +        client().setShouldPlayToPlaybackTarget(true);
&gt; 
&gt; I&apos;m just curious here -- did you encounter raciness with the
&gt; m_shouldPlayToPlaybackTarget state? Because it seems like the original
&gt; version should have worked.

It worked, but the &quot;if (m_shouldPlayToPlaybackTarget)&quot; above means we actually always call &quot;client().setShouldPlayToPlaybackTarget(true)&quot; so I just made it explicit.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094180</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-05-12 09:43:54 -0700</bug_when>
    <thetext>Committed r184204: https://trac.webkit.org/r184204</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252921</attachid>
            <date>2015-05-11 18:52:20 -0700</date>
            <delta_ts>2015-05-11 19:18:32 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>external_set_target_patch_3.txt</filename>
            <type>text/plain</type>
            <size>22663</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA1LTExICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIFJlZmluZSBt
ZWRpYSBwbGF5YmFjayB0YXJnZXQgY2xpZW50IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDg5MgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsaWVudCBhbmQgdGFyZ2V0IHBpY2tl
ciBzdGF0ZSBjaGFuZ2VzIGZlcXVlbnRseSBoYXBwZW4gc2V2ZXJhbCB0aW1lcyBpbiBxdWljayBz
dWNjZXNzaW9uLCBzbworICAgICAgICBkb24ndCByZWFjdCB0byBpbW1lZGlhdGVseSBzbyB3ZSBj
YW4gYmF0Y2ggY2FsbGJhY2tzIHRvIHRoZSB3ZWIgcHJvY2Vzcy4gCisgICAgICAgICogTW9kdWxl
cy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDbGllbnRTdGF0ZTo6Q2xpZW50U3RhdGUpOiBTdG9yZSB0aGUgY2xpZW50IGFzIGEgcmVm
ZXJlbmNlIHJhdGhlciB0aGFuIGEgcG9pbnRlcgorICAgICAgICBiZWNhdXNlIGl0IGNhbiBuZXZl
ciBiZSBOVUxMLgorICAgICAgICAoV2ViQ29yZTo6Q2xpZW50U3RhdGU6Om9wZXJhdG9yID09ICk6
IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OmFkZFBsYXli
YWNrVGFyZ2V0UGlja2VyQ2xpZW50KTogU2NoZWR1bGUgdGhlIGluaXRpYWwgY2xpZW50IAorICAg
ICAgICBjb25maWd1cmF0aW9uIGFuZCBhIHRhcmdldCBjb25maWd1cmF0aW9uIGNoZWNrLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlUGxheWJhY2tUYXJn
ZXRQaWNrZXJDbGllbnQpOiBTY2hlZHVsZSBhIHRhcmdldCBtb25pdG9yaW5nCisgICAgICAgIHVw
ZGF0ZSwgYW5kIGEgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gY2hlY2suCisgICAgICAgIChXZWJDb3Jl
OjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpyZW1vdmVBbGxQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6
OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcik6IFNjaGVkdWxlIGEgdGFyZ2V0IG1vbml0b3Jpbmcg
dXBkYXRlLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Y2xpZW50
U3RhdGVEaWRDaGFuZ2UpOiBJZiB0aGUgY2xpZW50IHdob3NlIHN0YXRlIGhhcyBjaGFuZ2VkCisg
ICAgICAgIGNhbiBwbGF5IHRvIGEgdGFyZ2V0LCB0ZWxsIGl0IHRvIHN0YXJ0IHVzaW5nIHRoZSB0
YXJnZXQgZXZlbiBpZiBpdCBpc24ndCBwbGF5aW5nIGFzIGxvbmcgYXMKKyAgICAgICAgbm8gb3Ro
ZXIgY2xpZW50IGlzIGFjdGl2ZWx5IHVzaW5nIGEgdGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6
V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2V0UGxheWJhY2tUYXJnZXQpOiBDb25maWd1cmUgY2xp
ZW50cyBhZnRlciBhIHBhdXNlLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFu
YWdlcjo6Y29uZmlndXJlTmV3Q2xpZW50cyk6IE5ldywgZG8gbmV3IGNsaWVudCBjb25maWd1cmF0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Y29uZmlndXJl
UGxheWJhY2tUYXJnZXRDbGllbnRzKTogTmV3LCBjb25maWd1cmUgdGFyZ2V0IGNsaWVudHMuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpzY2hlZHVsZURlbGF5ZWRU
YXNrKTogU2NoZWR1bGUgdGhlIHRpbWVyLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNz
aW9uTWFuYWdlcjo6dGFza1RpbWVyRmlyZWQpOiBFeGVjdXRlIGRlbGF5ZWQgdGFza3MuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpmaW5kKTogCisgICAgICAgICog
TW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oOgorCisgICAgICAg
ICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OnNldE11dGVkKTogQ2FsbCB1cGRhdGVNZWRpYVN0YXRlLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0UGxheWluZyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1dpcmVsZXNzQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6ZW5xdWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KTogRXhw
YW5kIGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVN
ZWRpYVN0YXRlKTogTmV3LCBkb24ndCBicm9hZGNhc3QgYSBtZWRpYSBzdGF0ZSBjaGFuZ2UKKyAg
ICAgICAgdW5sZXNzIHNvbWV0aGluZyBhY3R1YWxseSBjaGFuZ2VkLgorICAgICAgICAqIGh0bWwv
SFRNTE1lZGlhRWxlbWVudC5oOgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OmV4dGVybmFsT3V0cHV0RGV2
aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKTogVXBkYXRlIGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFTZXNzaW9uOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6bWVkaWFFbmdpbmVVcGRhdGVk
KTogQ2xlYW51cC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOiBS
ZW1vdmUgdGhlIGNhbGwgdG8KKyAgICAgICAgZGVwcmVjYXRlZCBBUEkgYW5kIHRoZSAiLVdkZXBy
ZWNhdGVkLWRlY2xhcmF0aW9ucyIuCisKIDIwMTUtMDUtMTEgIEVyaWMgQ2FybHNvbiAgPGVyaWMu
Y2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gVXBkYXRlIGRldmljZSBwaWNrZXIg
aWNvbiB3aGVuIHZpZGVvIHRyYWNrcyBjaGFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXIuY3BwCShyZXZpc2lvbiAxODM5OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MTcgKzM0LDI1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGRvdWJsZSB0YXNr
RGVsYXlJbnRlcnZhbCA9IDEuIC8gMTAuOworCiBzdHJ1Y3QgQ2xpZW50U3RhdGUgewogICAgIGV4
cGxpY2l0IENsaWVudFN0YXRlKFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNsaWVudCwg
dWludDY0X3QgY29udGV4dElkKQotICAgICAgICA6IGNsaWVudCgmY2xpZW50KQorICAgICAgICA6
IGNsaWVudChjbGllbnQpCiAgICAgICAgICwgY29udGV4dElkKGNvbnRleHRJZCkKICAgICB7CiAg
ICAgfQogCi0gICAgV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCogY2xpZW50IHsgbnVsbHB0
ciB9OworICAgIGJvb2wgb3BlcmF0b3IgPT0gKENsaWVudFN0YXRlIGNvbnN0JiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb250ZXh0SWQgPT0gb3RoZXIuY29udGV4dElkICYm
ICZjbGllbnQgPT0gJm90aGVyLmNsaWVudDsKKyAgICB9CisKKyAgICBXZWJNZWRpYVNlc3Npb25N
YW5hZ2VyQ2xpZW50JiBjbGllbnQ7CiAgICAgdWludDY0X3QgY29udGV4dElkIHsgMCB9OwogICAg
IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBmbGFncyB7IFdlYkNvcmU6
Ok1lZGlhUHJvZHVjZXI6OklzTm90UGxheWluZyB9OwogICAgIGJvb2wgcmVxdWVzdGVkUGlja2Vy
IHsgZmFsc2UgfTsKKyAgICBib29sIGNvbmZpZ3VyYXRpb25SZXF1aXJlZCB7IHRydWUgfTsKIH07
CiAKIHN0YXRpYyBib29sIGZsYWdzQXJlU2V0KE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFn
cyB2YWx1ZSwgdW5zaWduZWQgZmxhZ3MpCkBAIC03MCwyNCArNzgsOCBAQCB1aW50NjRfdCBXZWJN
ZWRpYVNlc3Npb25NYW5hZ2VyOjphZGRQbGF5CiAKICAgICBtX2NsaWVudFN0YXRlLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPENsaWVudFN0YXRlPihjbGllbnQsIGNvbnRleHRJZCkpOwogCi0gICAg
aWYgKG1fZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGUgfHwgbV9wbGF5YmFja1RhcmdldCkg
ewotCi0gICAgICAgIFRhc2tDYWxsYmFjayBjYWxsYmFjayA9IHN0ZDo6bWFrZV90dXBsZSgmY2xp
ZW50LCBjb250ZXh0SWQsIFt0aGlzXShDbGllbnRTdGF0ZSYgc3RhdGUpIHsKLQotICAgICAgICAg
ICAgaWYgKG1fZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGUpCi0gICAgICAgICAgICAgICAg
c3RhdGUuY2xpZW50LT5leHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShzdGF0
ZS5jb250ZXh0SWQsIHRydWUpOwotCi0gICAgICAgICAgICBpZiAobV9wbGF5YmFja1RhcmdldCkg
ewotICAgICAgICAgICAgICAgIHN0YXRlLmNsaWVudC0+c2V0UGxheWJhY2tUYXJnZXQoc3RhdGUu
Y29udGV4dElkLCAqbV9wbGF5YmFja1RhcmdldC5jb3B5UmVmKCkpOwotCi0gICAgICAgICAgICAg
ICAgaWYgKG1fY2xpZW50U3RhdGUuc2l6ZSgpID09IDEgJiYgbV9wbGF5YmFja1RhcmdldC0+aGFz
QWN0aXZlUm91dGUoKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2xpZW50LT5zZXRTaG91
bGRQbGF5VG9QbGF5YmFja1RhcmdldChzdGF0ZS5jb250ZXh0SWQsIHRydWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoY2FsbGJhY2sp
OwotICAgICAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQorICAgIGlmICht
X2V4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlIHx8IG1fcGxheWJhY2tUYXJnZXQpCisgICAg
ICAgIHNjaGVkdWxlRGVsYXllZFRhc2soSW5pdGlhbENvbmZpZ3VyYXRpb25UYXNrIHwgVGFyZ2V0
Q2xpZW50c0NvbmZpZ3VyYXRpb25UYXNrKTsKIAogICAgIHJldHVybiBjb250ZXh0SWQ7CiB9CkBA
IC0xMDAsMTggKzkyLDE2IEBAIHZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlUGxh
eWIKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jbGllbnRTdGF0ZS5yZW1vdmUoaW5kZXgpOwot
ICAgIGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpOwotCi0gICAgaWYgKG1fcGxh
eWJhY2tUYXJnZXQgJiYgbV9jbGllbnRTdGF0ZS5zaXplKCkgPT0gMSAmJiBtX3BsYXliYWNrVGFy
Z2V0LT5oYXNBY3RpdmVSb3V0ZSgpKQotICAgICAgICBtX2NsaWVudFN0YXRlWzBdLT5jbGllbnQt
PnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KG1fY2xpZW50U3RhdGVbMF0tPmNvbnRleHRJ
ZCwgdHJ1ZSk7CisgICAgc2NoZWR1bGVEZWxheWVkVGFzayhUYXJnZXRNb25pdG9yaW5nQ29uZmln
dXJhdGlvblRhc2sgfCBUYXJnZXRDbGllbnRzQ29uZmlndXJhdGlvblRhc2spOwogfQogCiB2b2lk
IFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUFsbFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xp
ZW50cyhXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgZm9yIChz
aXplX3QgaSA9IG1fY2xpZW50U3RhdGUuc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIGlm
IChtX2NsaWVudFN0YXRlW2kgLSAxXS0+Y2xpZW50ID09ICZjbGllbnQpCisgICAgICAgIGlmICgm
bV9jbGllbnRTdGF0ZVtpIC0gMV0tPmNsaWVudCA9PSAmY2xpZW50KQogICAgICAgICAgICAgbV9j
bGllbnRTdGF0ZS5yZW1vdmUoaSAtIDEpOwogICAgIH0KKyAgICBzY2hlZHVsZURlbGF5ZWRUYXNr
KFRhcmdldE1vbml0b3JpbmdDb25maWd1cmF0aW9uVGFzayB8IFRhcmdldENsaWVudHNDb25maWd1
cmF0aW9uVGFzayk7CiB9CiAKIHZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyKFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNsaWVudCwgdWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBJbnRSZWN0JiByZWN0LCBib29sKQpAQCAtMTIxLDggKzEx
MSw5IEBAIHZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hvd1BsYXliYWMKICAgICBpZiAo
aW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIGNsaWVudFJl
cXVlc3RpbmdQaWNrZXIgPSBtX2NsaWVudFN0YXRlW2luZGV4XTsKICAgICBmb3IgKGF1dG8mIHN0
YXRlIDogbV9jbGllbnRTdGF0ZSkKLSAgICAgICAgc3RhdGUtPnJlcXVlc3RlZFBpY2tlciA9IChz
dGF0ZS0+Y29udGV4dElkID09IGNvbnRleHRJZCAmJiBzdGF0ZS0+Y2xpZW50ID09ICZjbGllbnQp
OworICAgICAgICBzdGF0ZS0+cmVxdWVzdGVkUGlja2VyID0gc3RhdGUgPT0gY2xpZW50UmVxdWVz
dGluZ1BpY2tlcjsKIAogICAgIGJvb2wgaGFzQWN0aXZlUm91dGUgPSBmbGFnc0FyZVNldChtX2Ns
aWVudFN0YXRlW2luZGV4XS0+ZmxhZ3MsIE1lZGlhUHJvZHVjZXI6OklzUGxheWluZ1RvRXh0ZXJu
YWxEZXZpY2UpOwogICAgIHRhcmdldFBpY2tlcigpLnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihG
bG9hdFJlY3QocmVjdCksIGhhc0FjdGl2ZVJvdXRlKTsKQEAgLTE0MiwzMCArMTMzLDM1IEBAIHZv
aWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Y2xpZW50U3RhdGUKIAogICAgIGNoYW5nZWRDbGll
bnRTdGF0ZS0+ZmxhZ3MgPSBuZXdGbGFnczsKICAgICBpZiAoIWZsYWdzQXJlU2V0KG9sZEZsYWdz
LCBNZWRpYVByb2R1Y2VyOjpSZXF1aXJlc1BsYXliYWNrVGFyZ2V0TW9uaXRvcmluZykgJiYgZmxh
Z3NBcmVTZXQobmV3RmxhZ3MsIE1lZGlhUHJvZHVjZXI6OlJlcXVpcmVzUGxheWJhY2tUYXJnZXRN
b25pdG9yaW5nKSkKLSAgICAgICAgY29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKCk7
CisgICAgICAgIHNjaGVkdWxlRGVsYXllZFRhc2soVGFyZ2V0TW9uaXRvcmluZ0NvbmZpZ3VyYXRp
b25UYXNrKTsKIAotICAgIGlmICghZmxhZ3NBcmVTZXQobmV3RmxhZ3MsIE1lZGlhUHJvZHVjZXI6
OklzUGxheWluZ1ZpZGVvKSB8fCAhZmxhZ3NBcmVTZXQobmV3RmxhZ3MsIE1lZGlhUHJvZHVjZXI6
OkV4dGVybmFsRGV2aWNlQXV0b1BsYXlDYW5kaWRhdGUpKQorICAgIGlmICghZmxhZ3NBcmVTZXQo
bmV3RmxhZ3MsIE1lZGlhUHJvZHVjZXI6OkV4dGVybmFsRGV2aWNlQXV0b1BsYXlDYW5kaWRhdGUp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fcGxheWJhY2tUYXJnZXQgfHwgIW1fcGxh
eWJhY2tUYXJnZXQtPmhhc0FjdGl2ZVJvdXRlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IERvIG5vdCBpbnRlcnJ1cHQgYW5vdGhlciBlbGVtZW50IGFscmVhZHkgcGxheWluZyB0byBhIGRl
dmljZS4KKyAgICBib29sIGFub3RoZXJDbGllbnRIYXNBY3RpdmVUYXJnZXQgPSBmYWxzZTsKICAg
ICBmb3IgKGF1dG8mIHN0YXRlIDogbV9jbGllbnRTdGF0ZSkgewotICAgICAgICBpZiAoc3RhdGUt
PmNvbnRleHRJZCA9PSBjb250ZXh0SWQgJiYgc3RhdGUtPmNsaWVudCA9PSAmY2xpZW50KQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGZsYWdzQXJlU2V0KHN0YXRlLT5mbGFn
cywgTWVkaWFQcm9kdWNlcjo6SXNQbGF5aW5nVmlkZW8pICYmIGZsYWdzQXJlU2V0KHN0YXRlLT5m
bGFncywgTWVkaWFQcm9kdWNlcjo6SXNQbGF5aW5nVG9FeHRlcm5hbERldmljZSkpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChmbGFnc0FyZVNldChzdGF0ZS0+ZmxhZ3MsIE1lZGlh
UHJvZHVjZXI6OklzUGxheWluZ1RvRXh0ZXJuYWxEZXZpY2UpKSB7CisgICAgICAgICAgICBpZiAo
ZmxhZ3NBcmVTZXQoc3RhdGUtPmZsYWdzLCBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdWaWRlbykp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYW5vdGhlckNsaWVudEhhc0Fj
dGl2ZVRhcmdldCA9IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBEbyBub3QgdGFr
ZSB0aGUgdGFyZ2V0IGlmIGFub3RoZXIgY2xpZW50IGhhcyBpdCBhbmQgdGhlIGNsaWVudCByZXBv
cnRpbmcgYSBzdGF0ZSBjaGFuZ2UgaXMgbm90IHBsYXlpbmcuCisgICAgaWYgKGFub3RoZXJDbGll
bnRIYXNBY3RpdmVUYXJnZXQgJiYgIWZsYWdzQXJlU2V0KG5ld0ZsYWdzLCBNZWRpYVByb2R1Y2Vy
OjpJc1BsYXlpbmdWaWRlbykpCisgICAgICAgIHJldHVybjsKKwogICAgIGZvciAoYXV0byYgc3Rh
dGUgOiBtX2NsaWVudFN0YXRlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS0+Y29udGV4dElkID09IGNv
bnRleHRJZCAmJiBzdGF0ZS0+Y2xpZW50ID09ICZjbGllbnQpCisgICAgICAgIGlmIChzdGF0ZSA9
PSBjaGFuZ2VkQ2xpZW50U3RhdGUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3Rh
dGUtPmNsaWVudC0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoc3RhdGUtPmNvbnRleHRJ
ZCwgZmFsc2UpOworICAgICAgICBzdGF0ZS0+Y2xpZW50LnNldFNob3VsZFBsYXlUb1BsYXliYWNr
VGFyZ2V0KHN0YXRlLT5jb250ZXh0SWQsIGZhbHNlKTsKICAgICB9CiAKLSAgICBjaGFuZ2VkQ2xp
ZW50U3RhdGUtPmNsaWVudC0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoY2hhbmdlZENs
aWVudFN0YXRlLT5jb250ZXh0SWQsIHRydWUpOworICAgIGNoYW5nZWRDbGllbnRTdGF0ZS0+Y2xp
ZW50LnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGNoYW5nZWRDbGllbnRTdGF0ZS0+Y29u
dGV4dElkLCB0cnVlKTsKIAogICAgIGlmIChpbmRleCAmJiBtX2NsaWVudFN0YXRlLnNpemUoKSA+
IDEpCiAgICAgICAgIHN0ZDo6c3dhcChtX2NsaWVudFN0YXRlLmF0KGluZGV4KSwgbV9jbGllbnRT
dGF0ZS5hdCgwKSk7CkBAIC0xNzQsMzIgKzE3MCw3MCBAQCB2b2lkIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXI6OmNsaWVudFN0YXRlCiB2b2lkIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNldFBsYXli
YWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmIHRhcmdldCkKIHsKICAgICBtX3Bs
YXliYWNrVGFyZ2V0ID0gV1RGOjptb3ZlKHRhcmdldCk7CisgICAgc2NoZWR1bGVEZWxheWVkVGFz
ayhUYXJnZXRDbGllbnRzQ29uZmlndXJhdGlvblRhc2spOworfQogCi0gICAgc2l6ZV90IGluZGV4
VGhhdFJlcXVlc3RlZFBpY2tlciA9IG5vdEZvdW5kOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9jbGllbnRTdGF0ZS5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiBzdGF0ZSA9IG1f
Y2xpZW50U3RhdGVbaV07Ci0gICAgICAgIHN0YXRlLT5jbGllbnQtPnNldFBsYXliYWNrVGFyZ2V0
KHN0YXRlLT5jb250ZXh0SWQsICptX3BsYXliYWNrVGFyZ2V0LmNvcHlSZWYoKSk7Ci0gICAgICAg
IGlmIChzdGF0ZS0+cmVxdWVzdGVkUGlja2VyKSB7Ci0gICAgICAgICAgICBpbmRleFRoYXRSZXF1
ZXN0ZWRQaWNrZXIgPSBpOwordm9pZCBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpleHRlcm5hbE91
dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShib29sIGF2YWlsYWJsZSkKK3sKKyAgICBtX2V4
dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlID0gYXZhaWxhYmxlOworICAgIGZvciAoYXV0byYg
c3RhdGUgOiBtX2NsaWVudFN0YXRlKQorICAgICAgICBzdGF0ZS0+Y2xpZW50LmV4dGVybmFsT3V0
cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKHN0YXRlLT5jb250ZXh0SWQsIGF2YWlsYWJsZSk7
Cit9CisKK3ZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Y29uZmlndXJlTmV3Q2xpZW50cygp
Cit7CisgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fY2xpZW50U3RhdGUpIHsKKyAgICAgICAgaWYg
KCFzdGF0ZS0+Y29uZmlndXJhdGlvblJlcXVpcmVkKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgc3RhdGUtPmNsaWVudC0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tU
YXJnZXQoc3RhdGUtPmNvbnRleHRJZCwgZmFsc2UpOwotICAgICAgICBzdGF0ZS0+cmVxdWVzdGVk
UGlja2VyID0gZmFsc2U7Ci0gICAgfQogCi0gICAgaWYgKGluZGV4VGhhdFJlcXVlc3RlZFBpY2tl
ciA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBzdGF0ZS0+Y29uZmlndXJh
dGlvblJlcXVpcmVkID0gZmFsc2U7CisgICAgICAgIGlmIChtX2V4dGVybmFsT3V0cHV0RGV2aWNl
QXZhaWxhYmxlKQorICAgICAgICAgICAgc3RhdGUtPmNsaWVudC5leHRlcm5hbE91dHB1dERldmlj
ZUF2YWlsYWJsZURpZENoYW5nZShzdGF0ZS0+Y29udGV4dElkLCB0cnVlKTsKIAotICAgIGF1dG8m
IHN0YXRlID0gbV9jbGllbnRTdGF0ZVtpbmRleFRoYXRSZXF1ZXN0ZWRQaWNrZXJdOwotICAgIHN0
YXRlLT5jbGllbnQtPnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHN0YXRlLT5jb250ZXh0
SWQsIG1fcGxheWJhY2tUYXJnZXQgJiYgbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUo
KSk7Ci0gICAgc3RhdGUtPnJlcXVlc3RlZFBpY2tlciA9IGZhbHNlOworICAgICAgICBpZiAobV9w
bGF5YmFja1RhcmdldCkKKyAgICAgICAgICAgIHN0YXRlLT5jbGllbnQuc2V0UGxheWJhY2tUYXJn
ZXQoc3RhdGUtPmNvbnRleHRJZCwgKm1fcGxheWJhY2tUYXJnZXQuY29weVJlZigpKTsKKyAgICB9
CiB9CiAKLXZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VB
dmFpbGFibGVEaWRDaGFuZ2UoYm9vbCBhdmFpbGFibGUpCit2b2lkIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXI6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0Q2xpZW50cygpCiB7Ci0gICAgbV9leHRlcm5h
bE91dHB1dERldmljZUF2YWlsYWJsZSA9IGF2YWlsYWJsZTsKLSAgICBmb3IgKGF1dG8mIHN0YXRl
IDogbV9jbGllbnRTdGF0ZSkKLSAgICAgICAgc3RhdGUtPmNsaWVudC0+ZXh0ZXJuYWxPdXRwdXRE
ZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2Uoc3RhdGUtPmNvbnRleHRJZCwgYXZhaWxhYmxlKTsKKyAg
ICBzaXplX3QgaW5kZXhPZkNsaWVudFRoYXRSZXF1ZXN0ZWRQaWNrZXIgPSBub3RGb3VuZDsKKyAg
ICBzaXplX3QgaW5kZXhPZkF1dG9QbGF5Q2FuZGlkYXRlID0gbm90Rm91bmQ7CisgICAgc2l6ZV90
IGluZGV4T2ZDbGllbnRXaWxsUGxheVRvVGFyZ2V0ID0gbm90Rm91bmQ7CisgICAgYm9vbCBoYXZl
QWN0aXZlUm91dGUgPSBtX3BsYXliYWNrVGFyZ2V0ICYmIG1fcGxheWJhY2tUYXJnZXQtPmhhc0Fj
dGl2ZVJvdXRlKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2xpZW50U3RhdGUu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgc3RhdGUgPSBtX2NsaWVudFN0YXRlW2ldOwor
CisgICAgICAgIGlmIChpbmRleE9mQ2xpZW50VGhhdFJlcXVlc3RlZFBpY2tlciA9PSBub3RGb3Vu
ZCAmJiBzdGF0ZS0+cmVxdWVzdGVkUGlja2VyKQorICAgICAgICAgICAgaW5kZXhPZkNsaWVudFRo
YXRSZXF1ZXN0ZWRQaWNrZXIgPSBpOworCisgICAgICAgIGlmIChpbmRleE9mQ2xpZW50V2lsbFBs
YXlUb1RhcmdldCA9PSBub3RGb3VuZCAmJiBmbGFnc0FyZVNldChzdGF0ZS0+ZmxhZ3MsIE1lZGlh
UHJvZHVjZXI6OklzUGxheWluZ1RvRXh0ZXJuYWxEZXZpY2UpKQorICAgICAgICAgICAgaW5kZXhP
ZkNsaWVudFdpbGxQbGF5VG9UYXJnZXQgPSBpOworCisgICAgICAgIGlmIChpbmRleE9mQXV0b1Bs
YXlDYW5kaWRhdGUgPT0gbm90Rm91bmQgJiYgZmxhZ3NBcmVTZXQoc3RhdGUtPmZsYWdzLCBNZWRp
YVByb2R1Y2VyOjpFeHRlcm5hbERldmljZUF1dG9QbGF5Q2FuZGlkYXRlKSAmJiAhZmxhZ3NBcmVT
ZXQoc3RhdGUtPmZsYWdzLCBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdWaWRlbykpCisgICAgICAg
ICAgICBpbmRleE9mQXV0b1BsYXlDYW5kaWRhdGUgPSBpOworICAgIH0KKworICAgIGlmIChpbmRl
eE9mQ2xpZW50VGhhdFJlcXVlc3RlZFBpY2tlciAhPSBub3RGb3VuZCkKKyAgICAgICAgaW5kZXhP
ZkNsaWVudFdpbGxQbGF5VG9UYXJnZXQgPSBpbmRleE9mQ2xpZW50VGhhdFJlcXVlc3RlZFBpY2tl
cjsKKyAgICBpZiAoaW5kZXhPZkNsaWVudFdpbGxQbGF5VG9UYXJnZXQgPT0gbm90Rm91bmQgJiYg
aGF2ZUFjdGl2ZVJvdXRlICYmIGluZGV4T2ZBdXRvUGxheUNhbmRpZGF0ZSAhPSBub3RGb3VuZCkK
KyAgICAgICAgaW5kZXhPZkNsaWVudFdpbGxQbGF5VG9UYXJnZXQgPSBpbmRleE9mQXV0b1BsYXlD
YW5kaWRhdGU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2xpZW50U3RhdGUuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgc3RhdGUgPSBtX2NsaWVudFN0YXRlW2ldOworCisg
ICAgICAgIGlmIChtX3BsYXliYWNrVGFyZ2V0KQorICAgICAgICAgICAgc3RhdGUtPmNsaWVudC5z
ZXRQbGF5YmFja1RhcmdldChzdGF0ZS0+Y29udGV4dElkLCAqbV9wbGF5YmFja1RhcmdldC5jb3B5
UmVmKCkpOworCisgICAgICAgIGlmIChpICE9IGluZGV4T2ZDbGllbnRXaWxsUGxheVRvVGFyZ2V0
KQorICAgICAgICAgICAgc3RhdGUtPmNsaWVudC5zZXRTaG91bGRQbGF5VG9QbGF5YmFja1Rhcmdl
dChzdGF0ZS0+Y29udGV4dElkLCBmYWxzZSk7CisgICAgICAgIGVsc2UgaWYgKCFmbGFnc0FyZVNl
dChzdGF0ZS0+ZmxhZ3MsIE1lZGlhUHJvZHVjZXI6OklzUGxheWluZ1RvRXh0ZXJuYWxEZXZpY2Up
KQorICAgICAgICAgICAgc3RhdGUtPmNsaWVudC5zZXRTaG91bGRQbGF5VG9QbGF5YmFja1Rhcmdl
dChzdGF0ZS0+Y29udGV4dElkLCBoYXZlQWN0aXZlUm91dGUpOworCisgICAgICAgIHN0YXRlLT5j
b25maWd1cmF0aW9uUmVxdWlyZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdGUtPnJlcXVlc3RlZFBp
Y2tlciA9IGZhbHNlOworICAgIH0KIH0KIAogdm9pZCBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpj
b25maWd1cmVQbGF5YmFja1RhcmdldE1vbml0b3JpbmcoKQpAQCAtMjE4LDI2ICsyNTIsMjggQEAg
dm9pZCBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpjb25maWd1cmVQbAogICAgICAgICB0YXJnZXRQ
aWNrZXIoKS5zdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpOwogfQogCi12b2lkIFdlYk1l
ZGlhU2Vzc2lvbk1hbmFnZXI6OnRhc2tUaW1lckZpcmVkKCkKK3ZvaWQgV2ViTWVkaWFTZXNzaW9u
TWFuYWdlcjo6c2NoZWR1bGVEZWxheWVkVGFzayhDb25maWd1cmF0aW9uVGFza3MgdGFza3MpCiB7
Ci0gICAgYXV0byB0YXNrUXVldWUgPSBXVEY6Om1vdmUobV90YXNrUXVldWUpOwotICAgIGlmICh0
YXNrUXVldWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHRh
c2sgOiB0YXNrUXVldWUpIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gZmluZChzdGQ6OmdldDww
Pih0YXNrKSwgc3RkOjpnZXQ8MT4odGFzaykpOworICAgIG1fdGFza0ZsYWdzIHw9IHRhc2tzOwor
ICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCh0YXNrRGVsYXlJbnRlcnZhbCk7Cit9CiAKLSAg
ICAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQotICAgICAgICAgICAgY29udGludWU7Cit2b2lk
IFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnRhc2tUaW1lckZpcmVkKCkKK3sKKyAgICBpZiAobV90
YXNrRmxhZ3MgJiBJbml0aWFsQ29uZmlndXJhdGlvblRhc2spCisgICAgICAgIGNvbmZpZ3VyZU5l
d0NsaWVudHMoKTsKKyAgICBpZiAobV90YXNrRmxhZ3MgJiBUYXJnZXRDbGllbnRzQ29uZmlndXJh
dGlvblRhc2spCisgICAgICAgIGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0Q2xpZW50cygpOworICAg
IGlmIChtX3Rhc2tGbGFncyAmIFRhcmdldE1vbml0b3JpbmdDb25maWd1cmF0aW9uVGFzaykKKyAg
ICAgICAgY29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKCk7CiAKLSAgICAgICAgc3Rk
OjpnZXQ8Mj4odGFzaykoKm1fY2xpZW50U3RhdGVbaW5kZXhdKTsKLSAgICB9CisgICAgbV90YXNr
RmxhZ3MgPSBOb1Rhc2s7CiB9CiAKIHNpemVfdCBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpmaW5k
KFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQqIGNsaWVudCwgdWludDY0X3QgY29udGV4dElk
KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jbGllbnRTdGF0ZS5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAobV9jbGllbnRTdGF0ZVtpXS0+Y29udGV4dElkID09IGNvbnRleHRJ
ZCAmJiBtX2NsaWVudFN0YXRlW2ldLT5jbGllbnQgPT0gY2xpZW50KQorICAgICAgICBpZiAobV9j
bGllbnRTdGF0ZVtpXS0+Y29udGV4dElkID09IGNvbnRleHRJZCAmJiAmbV9jbGllbnRTdGF0ZVtp
XS0+Y2xpZW50ID09IGNsaWVudCkKICAgICAgICAgICAgIHJldHVybiBpOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFu
YWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9u
L1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuaAkocmV2aXNpb24gMTgzOTk3KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCwxNSArNjQsMjUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCkgb3ZlcnJpZGU7CiAK
ICAgICBzaXplX3QgZmluZChXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50KiwgdWludDY0X3Qp
OworICAgIHZvaWQgY29uZmlndXJlUGxheWJhY2tUYXJnZXRDbGllbnRzKCk7CisgICAgdm9pZCBj
b25maWd1cmVOZXdDbGllbnRzKCk7CiAgICAgdm9pZCBjb25maWd1cmVQbGF5YmFja1RhcmdldE1v
bml0b3JpbmcoKTsKLSAgICB2b2lkIHRhc2tUaW1lckZpcmVkKCk7CiAKLSAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8V2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCosIHVpbnQ2NF90LCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoQ2xpZW50U3RhdGUmKT4+IFRhc2tDYWxsYmFjazsKLSAgICBWZWN0b3I8VGFz
a0NhbGxiYWNrPiBtX3Rhc2tRdWV1ZTsKKyAgICBlbnVtIENvbmZpZ3VyYXRpb25UYXNrRmxhZ3Mg
eworICAgICAgICBOb1Rhc2sgPSAwLAorICAgICAgICBJbml0aWFsQ29uZmlndXJhdGlvblRhc2sg
PSAxIDw8IDAsCisgICAgICAgIFRhcmdldENsaWVudHNDb25maWd1cmF0aW9uVGFzayA9IDEgPDwg
MSwKKyAgICAgICAgVGFyZ2V0TW9uaXRvcmluZ0NvbmZpZ3VyYXRpb25UYXNrID0gMSA8PCAyLAor
ICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25lZCBDb25maWd1cmF0aW9uVGFza3M7CisKKyAgICB2
b2lkIHNjaGVkdWxlRGVsYXllZFRhc2soQ29uZmlndXJhdGlvblRhc2tzKTsKKyAgICB2b2lkIHRh
c2tUaW1lckZpcmVkKCk7CiAgICAgUnVuTG9vcDo6VGltZXI8V2ViTWVkaWFTZXNzaW9uTWFuYWdl
cj4gbV90YXNrVGltZXI7CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENsaWVudFN0YXRl
Pj4gbV9jbGllbnRTdGF0ZTsKICAgICBSZWZQdHI8TWVkaWFQbGF5YmFja1RhcmdldD4gbV9wbGF5
YmFja1RhcmdldDsKKyAgICBDb25maWd1cmF0aW9uVGFza3MgbV90YXNrRmxhZ3MgeyBOb1Rhc2sg
fTsKICAgICBib29sIG1fZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGUgeyBmYWxzZSB9Owog
fTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxODQxMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDM0LDcgKzMwMzQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnNldE11dGVkKGJvb2wgbXV0CiAgICAgICAgIGRvY3VtZW50KCkudXBkYXRlSXNQbGF5aW5n
TWVkaWEoKTsKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5tZWRpYVN0YXRlRGlkQ2hhbmdlKCp0aGlzLCBtZWRpYVN0YXRlKCkp
OworICAgICAgICB1cGRhdGVNZWRpYVN0YXRlKCk7CiAjZW5kaWYKICAgICB9CiAjZW5kaWYKQEAg
LTQ2MzIsNyArNDYzMiw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UGxheWluZyhib29s
IHAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CiAKICNpZiBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIG1fbWVkaWFTZXNzaW9uLT5tZWRpYVN0YXRl
RGlkQ2hhbmdlKCp0aGlzLCBtZWRpYVN0YXRlKCkpOworICAgIHVwZGF0ZU1lZGlhU3RhdGUoKTsK
ICNlbmRpZgogfQogCkBAIC00ODk1LDcgKzQ4OTUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
Om1lZGlhUGxheWVyQ3VycmVuCiAKICAgICBjb25maWd1cmVNZWRpYUNvbnRyb2xzKCk7CiAgICAg
c2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3
aXJlbGVzc2NoYW5nZWRFdmVudCk7Ci0gICAgbV9tZWRpYVNlc3Npb24tPm1lZGlhU3RhdGVEaWRD
aGFuZ2UoKnRoaXMsIG1lZGlhU3RhdGUoKSk7CisgICAgdXBkYXRlTWVkaWFTdGF0ZSgpOwogfQog
CiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
cHJwRXZlbnQpCkBAIC00OTQ2LDggKzQ5NDYsOSBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnJl
bW92ZUV2ZW50TGlzdGVuCiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW5xdWV1ZVBsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KCkKIHsKLSAgICBMT0coTWVkaWEsICJIVE1M
TWVkaWFFbGVtZW50OjplbnF1ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkRXZl
bnQoJXApIiwgdGhpcyk7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IFdlYktpdFBsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0cGxheWJh
Y2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQsIG1fbWVkaWFTZXNzaW9uLT5oYXNXaXJl
bGVzc1BsYXliYWNrVGFyZ2V0cygqdGhpcykpOworICAgIGJvb2wgaGFzVGFyZ2V0cyA9IG1fbWVk
aWFTZXNzaW9uLT5oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygqdGhpcyk7CisgICAgTE9HKE1l
ZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6ZW5xdWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
Q2hhbmdlZEV2ZW50KCVwKSAtIGhhc1RhcmdldHMgPSAlcyIsIHRoaXMsIGJvb2xTdHJpbmcoaGFz
VGFyZ2V0cykpOworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBXZWJLaXRQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFy
Z2V0YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50LCBoYXNUYXJnZXRzKTsKICAgICBldmVudC0+c2V0
VGFyZ2V0KHRoaXMpOwogICAgIG1fYXN5bmNFdmVudFF1ZXVlLmVucXVldWVFdmVudChldmVudC5y
ZWxlYXNlKCkpOwogfQpAQCAtNjIxOCw2ICs2MjE5LDE2IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6b3ZlcnJpZGVCYWNrZ3JvdW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTdGF0ZSgpCit7CisgICAgTWVkaWFQcm9kdWNlcjo6TWVk
aWFTdGF0ZUZsYWdzIHN0YXRlID0gbWVkaWFTdGF0ZSgpOworICAgIGlmIChtX21lZGlhU3RhdGUg
PT0gc3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbWVkaWFTdGF0ZSA9IHN0YXRlOwor
ICAgIG1fbWVkaWFTZXNzaW9uLT5tZWRpYVN0YXRlRGlkQ2hhbmdlKCp0aGlzLCBtX21lZGlhU3Rh
dGUpOworfQorCiBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgSFRNTE1lZGlhRWxlbWVu
dDo6bWVkaWFTdGF0ZSgpIGNvbnN0CiB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCShyZXZpc2lvbiAxODQxMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzQyLDYgKzc0Miw4IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGRvY3VtZW50RGlkUmVzdW1lRnJvbVBhZ2VDYWNoZSgpIG92
ZXJyaWRlIGZpbmFsOwogI2VuZGlmCiAKKyAgICB2b2lkIHVwZGF0ZU1lZGlhU3RhdGUoKTsKKwog
ICAgIFRpbWVyIG1fcGVuZGluZ0FjdGlvblRpbWVyOwogICAgIFRpbWVyIG1fcHJvZ3Jlc3NFdmVu
dFRpbWVyOwogICAgIFRpbWVyIG1fcGxheWJhY2tQcm9ncmVzc1RpbWVyOwpAQCAtOTMzLDYgKzkz
NSw4IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAg
ICBib29sIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgeyBmYWxzZSB9
OwogI2VuZGlmCisKKyAgICBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbV9tZWRpYVN0
YXRlIHsgTWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5aW5nIH07CiB9OwogCiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uY3Bw
CShyZXZpc2lvbiAxODM5OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Np
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUsMTEgKzMwNSwxMCBAQCB2b2lkIEhUTUxNZWRp
YVNlc3Npb246OmV4dGVybmFsT3V0cHV0RGV2CiAgICAgaWYgKG1faGFzUGxheWJhY2tUYXJnZXRz
ID09IGhhc1RhcmdldHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPRyhNZWRpYSwgIkhUTUxN
ZWRpYVNlc3Npb246OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlIC0gaGFz
VGFyZ2V0cyAlcyIsIGhhc1RhcmdldHMgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKyAgICBMT0coTWVk
aWEsICJIVE1MTWVkaWFTZXNzaW9uOjpleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENo
YW5nZSglcCkgLSBoYXNUYXJnZXRzICVzIiwgdGhpcywgaGFzVGFyZ2V0cyA/ICJUUlVFIiA6ICJG
QUxTRSIpOwogCiAgICAgbV9oYXNQbGF5YmFja1RhcmdldHMgPSBoYXNUYXJnZXRzOwotICAgIGlm
ICghbV90YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAg
bV90YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkVGltZXIuc3RhcnRPbmVTaG90KDApOworICAgIG1f
dGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAogYm9v
bCBIVE1MTWVkaWFTZXNzaW9uOjpjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkgY29u
c3QKQEAgLTMzMCw2ICszMjksNyBAQCBib29sIEhUTUxNZWRpYVNlc3Npb246OmlzUGxheWluZ1Rv
V2lyZWxlCiAKIHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tU
YXJnZXQoYm9vbCBzaG91bGRQbGF5KQogeworICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYVNlc3Np
b246OnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0IC0gc2hvdWxkUGxheSAlcyIsIHNob3Vs
ZFBsYXkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKICAgICBtX3Nob3VsZFBsYXlUb1BsYXliYWNrVGFy
Z2V0ID0gc2hvdWxkUGxheTsKICAgICBjbGllbnQoKS5zZXRTaG91bGRQbGF5VG9QbGF5YmFja1Rh
cmdldChzaG91bGRQbGF5KTsKIH0KQEAgLTM4Niw3ICszODYsNyBAQCB2b2lkIEhUTUxNZWRpYVNl
c3Npb246Om1lZGlhRW5naW5lVXBkYXRlCiAgICAgaWYgKG1fcGxheWJhY2tUYXJnZXQpCiAgICAg
ICAgIGNsaWVudCgpLnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoKm1fcGxheWJhY2tUYXJnZXQu
Y29weVJlZigpKTsKICAgICBpZiAobV9zaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCkKLSAgICAg
ICAgY2xpZW50KCkuc2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQobV9zaG91bGRQbGF5VG9Q
bGF5YmFja1RhcmdldCk7CisgICAgICAgIGNsaWVudCgpLnNldFNob3VsZFBsYXlUb1BsYXliYWNr
VGFyZ2V0KHRydWUpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5YmFja1Rh
cmdldFBpY2tlck1hYy5tbQkocmV2aXNpb24gMTgzOTk3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tl
ck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTMwLDIzICsxMzAsMjIgQEAgQVZPdXRwdXREZXZp
Y2VNZW51Q29udHJvbGxlclR5cGUgKk1lZGlhUAogICAgIHJldHVybiBtX291dHB1dERldmljZU1l
bnVDb250cm9sbGVyLmdldCgpOwogfQogCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAot
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlv
bnMiCiB2b2lkIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWM6OnNob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcihjb25zdCBGbG9hdFJlY3QmIGxvY2F0aW9uLCBib29sIGNoZWNrQWN0aXZlUm91dGUp
CiB7CiAgICAgaWYgKCFtX2NsaWVudCB8fCBtX3Nob3dpbmdNZW51KQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX3Nob3dpbmdNZW51ID0gdHJ1ZTsKICAgICBBVk91dHB1dERldmljZU1lbnVDb250
cm9sbGVyVHlwZSAqcGlja2VyID0gZGV2aWNlUGlja2VyKCk7Ci0gICAgaWYgKFtwaWNrZXIgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzaG93TWVudUZvclJlY3Q6YXBwZWFyYW5jZU5hbWU6
YWxsb3dSZXNlbGVjdGlvbk9mU2VsZWN0ZWRPdXRwdXREZXZpY2U6KV0pIHsKLSAgICAgICAgaWYg
KFtwaWNrZXIgc2hvd01lbnVGb3JSZWN0OmxvY2F0aW9uIGFwcGVhcmFuY2VOYW1lOk5TQXBwZWFy
YW5jZU5hbWVWaWJyYW50TGlnaHQgYWxsb3dSZXNlbGVjdGlvbk9mU2VsZWN0ZWRPdXRwdXREZXZp
Y2U6IWNoZWNrQWN0aXZlUm91dGVdKQorICAgIGlmICghW3BpY2tlciByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHNob3dNZW51Rm9yUmVjdDphcHBlYXJhbmNlTmFtZTphbGxvd1Jlc2VsZWN0
aW9uT2ZTZWxlY3RlZE91dHB1dERldmljZTopXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
aG93aW5nTWVudSA9IHRydWU7CisgICAgaWYgKFtwaWNrZXIgc2hvd01lbnVGb3JSZWN0OmxvY2F0
aW9uIGFwcGVhcmFuY2VOYW1lOk5TQXBwZWFyYW5jZU5hbWVWaWJyYW50TGlnaHQgYWxsb3dSZXNl
bGVjdGlvbk9mU2VsZWN0ZWRPdXRwdXREZXZpY2U6IWNoZWNrQWN0aXZlUm91dGVdKSB7CisgICAg
ICAgIGlmICghY2hlY2tBY3RpdmVSb3V0ZSkKICAgICAgICAgICAgIGN1cnJlbnREZXZpY2VEaWRD
aGFuZ2UoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgW3BpY2tlciBzaG93TWVudUZvclJlY3Q6bG9j
YXRpb24gYXBwZWFyYW5jZU5hbWU6TlNBcHBlYXJhbmNlTmFtZVZpYnJhbnRMaWdodF07CisgICAg
fQogICAgIG1fc2hvd2luZ01lbnUgPSBmYWxzZTsKIH0KLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwb3AKIAogdm9pZCBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjOjphZGRQZW5kaW5nQWN0
aW9uKFBlbmRpbmdBY3Rpb25GbGFncyBhY3Rpb24pCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252923</attachid>
            <date>2015-05-11 19:18:32 -0700</date>
            <delta_ts>2015-05-12 09:44:04 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>external_set_target_patch_4.txt</filename>
            <type>text/plain</type>
            <size>22725</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDE0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA1LTExICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIFJlZmluZSBt
ZWRpYSBwbGF5YmFjayB0YXJnZXQgY2xpZW50IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDg5MgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsaWVudCBhbmQgdGFyZ2V0IHBpY2tl
ciBzdGF0ZSBjaGFuZ2VzIGZlcXVlbnRseSBoYXBwZW4gc2V2ZXJhbCB0aW1lcyBpbiBxdWljayBz
dWNjZXNzaW9uLCBzbworICAgICAgICBkb24ndCByZWFjdCB0byBpbW1lZGlhdGVseSBzbyB3ZSBj
YW4gYmF0Y2ggY2FsbGJhY2tzIHRvIHRoZSB3ZWIgcHJvY2Vzcy4gCisgICAgICAgICogTW9kdWxl
cy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDbGllbnRTdGF0ZTo6Q2xpZW50U3RhdGUpOiBTdG9yZSB0aGUgY2xpZW50IGFzIGEgcmVm
ZXJlbmNlIHJhdGhlciB0aGFuIGEgcG9pbnRlcgorICAgICAgICBiZWNhdXNlIGl0IGNhbiBuZXZl
ciBiZSBOVUxMLgorICAgICAgICAoV2ViQ29yZTo6Q2xpZW50U3RhdGU6Om9wZXJhdG9yID09ICk6
IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OmFkZFBsYXli
YWNrVGFyZ2V0UGlja2VyQ2xpZW50KTogU2NoZWR1bGUgdGhlIGluaXRpYWwgY2xpZW50IAorICAg
ICAgICBjb25maWd1cmF0aW9uIGFuZCBhIHRhcmdldCBjb25maWd1cmF0aW9uIGNoZWNrLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlUGxheWJhY2tUYXJn
ZXRQaWNrZXJDbGllbnQpOiBTY2hlZHVsZSBhIHRhcmdldCBtb25pdG9yaW5nCisgICAgICAgIHVw
ZGF0ZSwgYW5kIGEgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gY2hlY2suCisgICAgICAgIChXZWJDb3Jl
OjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpyZW1vdmVBbGxQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6
OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcik6IFNjaGVkdWxlIGEgdGFyZ2V0IG1vbml0b3Jpbmcg
dXBkYXRlLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Y2xpZW50
U3RhdGVEaWRDaGFuZ2UpOiBJZiB0aGUgY2xpZW50IHdob3NlIHN0YXRlIGhhcyBjaGFuZ2VkCisg
ICAgICAgIGNhbiBwbGF5IHRvIGEgdGFyZ2V0LCB0ZWxsIGl0IHRvIHN0YXJ0IHVzaW5nIHRoZSB0
YXJnZXQgZXZlbiBpZiBpdCBpc24ndCBwbGF5aW5nIGFzIGxvbmcgYXMKKyAgICAgICAgbm8gb3Ro
ZXIgY2xpZW50IGlzIGFjdGl2ZWx5IHVzaW5nIGEgdGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6
V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2V0UGxheWJhY2tUYXJnZXQpOiBDb25maWd1cmUgY2xp
ZW50cyBhZnRlciBhIHBhdXNlLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFu
YWdlcjo6Y29uZmlndXJlTmV3Q2xpZW50cyk6IE5ldywgZG8gbmV3IGNsaWVudCBjb25maWd1cmF0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Y29uZmlndXJl
UGxheWJhY2tUYXJnZXRDbGllbnRzKTogTmV3LCBjb25maWd1cmUgdGFyZ2V0IGNsaWVudHMuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpzY2hlZHVsZURlbGF5ZWRU
YXNrKTogU2NoZWR1bGUgdGhlIHRpbWVyLgorICAgICAgICAoV2ViQ29yZTo6V2ViTWVkaWFTZXNz
aW9uTWFuYWdlcjo6dGFza1RpbWVyRmlyZWQpOiBFeGVjdXRlIGRlbGF5ZWQgdGFza3MuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpmaW5kKTogCisgICAgICAgICog
TW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oOgorCisgICAgICAg
ICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OnNldE11dGVkKTogQ2FsbCB1cGRhdGVNZWRpYVN0YXRlLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0UGxheWluZyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1dpcmVsZXNzQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6ZW5xdWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KTogRXhw
YW5kIGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVN
ZWRpYVN0YXRlKTogTmV3LCBkb24ndCBicm9hZGNhc3QgYSBtZWRpYSBzdGF0ZSBjaGFuZ2UKKyAg
ICAgICAgdW5sZXNzIHNvbWV0aGluZyBhY3R1YWxseSBjaGFuZ2VkLgorICAgICAgICAqIGh0bWwv
SFRNTE1lZGlhRWxlbWVudC5oOgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OmV4dGVybmFsT3V0cHV0RGV2
aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKTogVXBkYXRlIGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFTZXNzaW9uOjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6bWVkaWFFbmdpbmVVcGRhdGVk
KTogQ2xlYW51cC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOiBS
ZW1vdmUgdGhlIGNhbGwgdG8KKyAgICAgICAgZGVwcmVjYXRlZCBBUEkgYW5kIHRoZSAiLVdkZXBy
ZWNhdGVkLWRlY2xhcmF0aW9ucyIuCisKIDIwMTUtMDUtMTEgIEVyaWMgQ2FybHNvbiAgPGVyaWMu
Y2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gVXBkYXRlIGRldmljZSBwaWNrZXIg
aWNvbiB3aGVuIHZpZGVvIHRyYWNrcyBjaGFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL1dlYk1lZGlhU2Vzc2lvbk1hbmFn
ZXIuY3BwCShyZXZpc2lvbiAxODM5OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c2Vzc2lvbi9XZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MTcgKzM0LDI1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGRvdWJsZSB0YXNr
RGVsYXlJbnRlcnZhbCA9IDEuIC8gMTAuOworCiBzdHJ1Y3QgQ2xpZW50U3RhdGUgewogICAgIGV4
cGxpY2l0IENsaWVudFN0YXRlKFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNsaWVudCwg
dWludDY0X3QgY29udGV4dElkKQotICAgICAgICA6IGNsaWVudCgmY2xpZW50KQorICAgICAgICA6
IGNsaWVudChjbGllbnQpCiAgICAgICAgICwgY29udGV4dElkKGNvbnRleHRJZCkKICAgICB7CiAg
ICAgfQogCi0gICAgV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCogY2xpZW50IHsgbnVsbHB0
ciB9OworICAgIGJvb2wgb3BlcmF0b3IgPT0gKENsaWVudFN0YXRlIGNvbnN0JiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb250ZXh0SWQgPT0gb3RoZXIuY29udGV4dElkICYm
ICZjbGllbnQgPT0gJm90aGVyLmNsaWVudDsKKyAgICB9CisKKyAgICBXZWJNZWRpYVNlc3Npb25N
YW5hZ2VyQ2xpZW50JiBjbGllbnQ7CiAgICAgdWludDY0X3QgY29udGV4dElkIHsgMCB9OwogICAg
IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBmbGFncyB7IFdlYkNvcmU6
Ok1lZGlhUHJvZHVjZXI6OklzTm90UGxheWluZyB9OwogICAgIGJvb2wgcmVxdWVzdGVkUGlja2Vy
IHsgZmFsc2UgfTsKKyAgICBib29sIGNvbmZpZ3VyYXRpb25SZXF1aXJlZCB7IHRydWUgfTsKIH07
CiAKIHN0YXRpYyBib29sIGZsYWdzQXJlU2V0KE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFn
cyB2YWx1ZSwgdW5zaWduZWQgZmxhZ3MpCkBAIC03MCwyNCArNzgsOCBAQCB1aW50NjRfdCBXZWJN
ZWRpYVNlc3Npb25NYW5hZ2VyOjphZGRQbGF5CiAKICAgICBtX2NsaWVudFN0YXRlLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPENsaWVudFN0YXRlPihjbGllbnQsIGNvbnRleHRJZCkpOwogCi0gICAg
aWYgKG1fZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGUgfHwgbV9wbGF5YmFja1RhcmdldCkg
ewotCi0gICAgICAgIFRhc2tDYWxsYmFjayBjYWxsYmFjayA9IHN0ZDo6bWFrZV90dXBsZSgmY2xp
ZW50LCBjb250ZXh0SWQsIFt0aGlzXShDbGllbnRTdGF0ZSYgc3RhdGUpIHsKLQotICAgICAgICAg
ICAgaWYgKG1fZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGUpCi0gICAgICAgICAgICAgICAg
c3RhdGUuY2xpZW50LT5leHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShzdGF0
ZS5jb250ZXh0SWQsIHRydWUpOwotCi0gICAgICAgICAgICBpZiAobV9wbGF5YmFja1RhcmdldCkg
ewotICAgICAgICAgICAgICAgIHN0YXRlLmNsaWVudC0+c2V0UGxheWJhY2tUYXJnZXQoc3RhdGUu
Y29udGV4dElkLCAqbV9wbGF5YmFja1RhcmdldC5jb3B5UmVmKCkpOwotCi0gICAgICAgICAgICAg
ICAgaWYgKG1fY2xpZW50U3RhdGUuc2l6ZSgpID09IDEgJiYgbV9wbGF5YmFja1RhcmdldC0+aGFz
QWN0aXZlUm91dGUoKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2xpZW50LT5zZXRTaG91
bGRQbGF5VG9QbGF5YmFja1RhcmdldChzdGF0ZS5jb250ZXh0SWQsIHRydWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoY2FsbGJhY2sp
OwotICAgICAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQorICAgIGlmICht
X2V4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlIHx8IG1fcGxheWJhY2tUYXJnZXQpCisgICAg
ICAgIHNjaGVkdWxlRGVsYXllZFRhc2soSW5pdGlhbENvbmZpZ3VyYXRpb25UYXNrIHwgVGFyZ2V0
Q2xpZW50c0NvbmZpZ3VyYXRpb25UYXNrKTsKIAogICAgIHJldHVybiBjb250ZXh0SWQ7CiB9CkBA
IC0xMDAsMTggKzkyLDE2IEBAIHZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6cmVtb3ZlUGxh
eWIKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jbGllbnRTdGF0ZS5yZW1vdmUoaW5kZXgpOwot
ICAgIGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZygpOwotCi0gICAgaWYgKG1fcGxh
eWJhY2tUYXJnZXQgJiYgbV9jbGllbnRTdGF0ZS5zaXplKCkgPT0gMSAmJiBtX3BsYXliYWNrVGFy
Z2V0LT5oYXNBY3RpdmVSb3V0ZSgpKQotICAgICAgICBtX2NsaWVudFN0YXRlWzBdLT5jbGllbnQt
PnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KG1fY2xpZW50U3RhdGVbMF0tPmNvbnRleHRJ
ZCwgdHJ1ZSk7CisgICAgc2NoZWR1bGVEZWxheWVkVGFzayhUYXJnZXRNb25pdG9yaW5nQ29uZmln
dXJhdGlvblRhc2sgfCBUYXJnZXRDbGllbnRzQ29uZmlndXJhdGlvblRhc2spOwogfQogCiB2b2lk
IFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnJlbW92ZUFsbFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xp
ZW50cyhXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50JiBjbGllbnQpCiB7CiAgICAgZm9yIChz
aXplX3QgaSA9IG1fY2xpZW50U3RhdGUuc2l6ZSgpOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIGlm
IChtX2NsaWVudFN0YXRlW2kgLSAxXS0+Y2xpZW50ID09ICZjbGllbnQpCisgICAgICAgIGlmICgm
bV9jbGllbnRTdGF0ZVtpIC0gMV0tPmNsaWVudCA9PSAmY2xpZW50KQogICAgICAgICAgICAgbV9j
bGllbnRTdGF0ZS5yZW1vdmUoaSAtIDEpOwogICAgIH0KKyAgICBzY2hlZHVsZURlbGF5ZWRUYXNr
KFRhcmdldE1vbml0b3JpbmdDb25maWd1cmF0aW9uVGFzayB8IFRhcmdldENsaWVudHNDb25maWd1
cmF0aW9uVGFzayk7CiB9CiAKIHZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyKFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQmIGNsaWVudCwgdWlu
dDY0X3QgY29udGV4dElkLCBjb25zdCBJbnRSZWN0JiByZWN0LCBib29sKQpAQCAtMTIxLDggKzEx
MSw5IEBAIHZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hvd1BsYXliYWMKICAgICBpZiAo
aW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIGNsaWVudFJl
cXVlc3RpbmdQaWNrZXIgPSBtX2NsaWVudFN0YXRlW2luZGV4XTsKICAgICBmb3IgKGF1dG8mIHN0
YXRlIDogbV9jbGllbnRTdGF0ZSkKLSAgICAgICAgc3RhdGUtPnJlcXVlc3RlZFBpY2tlciA9IChz
dGF0ZS0+Y29udGV4dElkID09IGNvbnRleHRJZCAmJiBzdGF0ZS0+Y2xpZW50ID09ICZjbGllbnQp
OworICAgICAgICBzdGF0ZS0+cmVxdWVzdGVkUGlja2VyID0gc3RhdGUgPT0gY2xpZW50UmVxdWVz
dGluZ1BpY2tlcjsKIAogICAgIGJvb2wgaGFzQWN0aXZlUm91dGUgPSBmbGFnc0FyZVNldChtX2Ns
aWVudFN0YXRlW2luZGV4XS0+ZmxhZ3MsIE1lZGlhUHJvZHVjZXI6OklzUGxheWluZ1RvRXh0ZXJu
YWxEZXZpY2UpOwogICAgIHRhcmdldFBpY2tlcigpLnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihG
bG9hdFJlY3QocmVjdCksIGhhc0FjdGl2ZVJvdXRlKTsKQEAgLTE0MiwzMCArMTMzLDM1IEBAIHZv
aWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Y2xpZW50U3RhdGUKIAogICAgIGNoYW5nZWRDbGll
bnRTdGF0ZS0+ZmxhZ3MgPSBuZXdGbGFnczsKICAgICBpZiAoIWZsYWdzQXJlU2V0KG9sZEZsYWdz
LCBNZWRpYVByb2R1Y2VyOjpSZXF1aXJlc1BsYXliYWNrVGFyZ2V0TW9uaXRvcmluZykgJiYgZmxh
Z3NBcmVTZXQobmV3RmxhZ3MsIE1lZGlhUHJvZHVjZXI6OlJlcXVpcmVzUGxheWJhY2tUYXJnZXRN
b25pdG9yaW5nKSkKLSAgICAgICAgY29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKCk7
CisgICAgICAgIHNjaGVkdWxlRGVsYXllZFRhc2soVGFyZ2V0TW9uaXRvcmluZ0NvbmZpZ3VyYXRp
b25UYXNrKTsKIAotICAgIGlmICghZmxhZ3NBcmVTZXQobmV3RmxhZ3MsIE1lZGlhUHJvZHVjZXI6
OklzUGxheWluZ1ZpZGVvKSB8fCAhZmxhZ3NBcmVTZXQobmV3RmxhZ3MsIE1lZGlhUHJvZHVjZXI6
OkV4dGVybmFsRGV2aWNlQXV0b1BsYXlDYW5kaWRhdGUpKQorICAgIGlmICghZmxhZ3NBcmVTZXQo
bmV3RmxhZ3MsIE1lZGlhUHJvZHVjZXI6OkV4dGVybmFsRGV2aWNlQXV0b1BsYXlDYW5kaWRhdGUp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fcGxheWJhY2tUYXJnZXQgfHwgIW1fcGxh
eWJhY2tUYXJnZXQtPmhhc0FjdGl2ZVJvdXRlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IERvIG5vdCBpbnRlcnJ1cHQgYW5vdGhlciBlbGVtZW50IGFscmVhZHkgcGxheWluZyB0byBhIGRl
dmljZS4KKyAgICBib29sIGFub3RoZXJDbGllbnRIYXNBY3RpdmVUYXJnZXQgPSBmYWxzZTsKICAg
ICBmb3IgKGF1dG8mIHN0YXRlIDogbV9jbGllbnRTdGF0ZSkgewotICAgICAgICBpZiAoc3RhdGUt
PmNvbnRleHRJZCA9PSBjb250ZXh0SWQgJiYgc3RhdGUtPmNsaWVudCA9PSAmY2xpZW50KQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGZsYWdzQXJlU2V0KHN0YXRlLT5mbGFn
cywgTWVkaWFQcm9kdWNlcjo6SXNQbGF5aW5nVmlkZW8pICYmIGZsYWdzQXJlU2V0KHN0YXRlLT5m
bGFncywgTWVkaWFQcm9kdWNlcjo6SXNQbGF5aW5nVG9FeHRlcm5hbERldmljZSkpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChmbGFnc0FyZVNldChzdGF0ZS0+ZmxhZ3MsIE1lZGlh
UHJvZHVjZXI6OklzUGxheWluZ1RvRXh0ZXJuYWxEZXZpY2UpKSB7CisgICAgICAgICAgICBpZiAo
ZmxhZ3NBcmVTZXQoc3RhdGUtPmZsYWdzLCBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdWaWRlbykp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYW5vdGhlckNsaWVudEhhc0Fj
dGl2ZVRhcmdldCA9IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBEbyBub3QgdGFr
ZSB0aGUgdGFyZ2V0IGlmIGFub3RoZXIgY2xpZW50IGhhcyBpdCBhbmQgdGhlIGNsaWVudCByZXBv
cnRpbmcgYSBzdGF0ZSBjaGFuZ2UgaXMgbm90IHBsYXlpbmcuCisgICAgaWYgKGFub3RoZXJDbGll
bnRIYXNBY3RpdmVUYXJnZXQgJiYgIWZsYWdzQXJlU2V0KG5ld0ZsYWdzLCBNZWRpYVByb2R1Y2Vy
OjpJc1BsYXlpbmdWaWRlbykpCisgICAgICAgIHJldHVybjsKKwogICAgIGZvciAoYXV0byYgc3Rh
dGUgOiBtX2NsaWVudFN0YXRlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS0+Y29udGV4dElkID09IGNv
bnRleHRJZCAmJiBzdGF0ZS0+Y2xpZW50ID09ICZjbGllbnQpCisgICAgICAgIGlmIChzdGF0ZSA9
PSBjaGFuZ2VkQ2xpZW50U3RhdGUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3Rh
dGUtPmNsaWVudC0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoc3RhdGUtPmNvbnRleHRJ
ZCwgZmFsc2UpOworICAgICAgICBzdGF0ZS0+Y2xpZW50LnNldFNob3VsZFBsYXlUb1BsYXliYWNr
VGFyZ2V0KHN0YXRlLT5jb250ZXh0SWQsIGZhbHNlKTsKICAgICB9CiAKLSAgICBjaGFuZ2VkQ2xp
ZW50U3RhdGUtPmNsaWVudC0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQoY2hhbmdlZENs
aWVudFN0YXRlLT5jb250ZXh0SWQsIHRydWUpOworICAgIGNoYW5nZWRDbGllbnRTdGF0ZS0+Y2xp
ZW50LnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGNoYW5nZWRDbGllbnRTdGF0ZS0+Y29u
dGV4dElkLCB0cnVlKTsKIAogICAgIGlmIChpbmRleCAmJiBtX2NsaWVudFN0YXRlLnNpemUoKSA+
IDEpCiAgICAgICAgIHN0ZDo6c3dhcChtX2NsaWVudFN0YXRlLmF0KGluZGV4KSwgbV9jbGllbnRT
dGF0ZS5hdCgwKSk7CkBAIC0xNzQsMzIgKzE3MCw3MCBAQCB2b2lkIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXI6OmNsaWVudFN0YXRlCiB2b2lkIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNldFBsYXli
YWNrVGFyZ2V0KFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0PiYmIHRhcmdldCkKIHsKICAgICBtX3Bs
YXliYWNrVGFyZ2V0ID0gV1RGOjptb3ZlKHRhcmdldCk7CisgICAgc2NoZWR1bGVEZWxheWVkVGFz
ayhUYXJnZXRDbGllbnRzQ29uZmlndXJhdGlvblRhc2spOworfQogCi0gICAgc2l6ZV90IGluZGV4
VGhhdFJlcXVlc3RlZFBpY2tlciA9IG5vdEZvdW5kOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9jbGllbnRTdGF0ZS5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiBzdGF0ZSA9IG1f
Y2xpZW50U3RhdGVbaV07Ci0gICAgICAgIHN0YXRlLT5jbGllbnQtPnNldFBsYXliYWNrVGFyZ2V0
KHN0YXRlLT5jb250ZXh0SWQsICptX3BsYXliYWNrVGFyZ2V0LmNvcHlSZWYoKSk7Ci0gICAgICAg
IGlmIChzdGF0ZS0+cmVxdWVzdGVkUGlja2VyKSB7Ci0gICAgICAgICAgICBpbmRleFRoYXRSZXF1
ZXN0ZWRQaWNrZXIgPSBpOwordm9pZCBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpleHRlcm5hbE91
dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShib29sIGF2YWlsYWJsZSkKK3sKKyAgICBtX2V4
dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlID0gYXZhaWxhYmxlOworICAgIGZvciAoYXV0byYg
c3RhdGUgOiBtX2NsaWVudFN0YXRlKQorICAgICAgICBzdGF0ZS0+Y2xpZW50LmV4dGVybmFsT3V0
cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKHN0YXRlLT5jb250ZXh0SWQsIGF2YWlsYWJsZSk7
Cit9CisKK3ZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6Y29uZmlndXJlTmV3Q2xpZW50cygp
Cit7CisgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fY2xpZW50U3RhdGUpIHsKKyAgICAgICAgaWYg
KCFzdGF0ZS0+Y29uZmlndXJhdGlvblJlcXVpcmVkKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgc3RhdGUtPmNsaWVudC0+c2V0U2hvdWxkUGxheVRvUGxheWJhY2tU
YXJnZXQoc3RhdGUtPmNvbnRleHRJZCwgZmFsc2UpOwotICAgICAgICBzdGF0ZS0+cmVxdWVzdGVk
UGlja2VyID0gZmFsc2U7Ci0gICAgfQogCi0gICAgaWYgKGluZGV4VGhhdFJlcXVlc3RlZFBpY2tl
ciA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBzdGF0ZS0+Y29uZmlndXJh
dGlvblJlcXVpcmVkID0gZmFsc2U7CisgICAgICAgIGlmIChtX2V4dGVybmFsT3V0cHV0RGV2aWNl
QXZhaWxhYmxlKQorICAgICAgICAgICAgc3RhdGUtPmNsaWVudC5leHRlcm5hbE91dHB1dERldmlj
ZUF2YWlsYWJsZURpZENoYW5nZShzdGF0ZS0+Y29udGV4dElkLCB0cnVlKTsKIAotICAgIGF1dG8m
IHN0YXRlID0gbV9jbGllbnRTdGF0ZVtpbmRleFRoYXRSZXF1ZXN0ZWRQaWNrZXJdOwotICAgIHN0
YXRlLT5jbGllbnQtPnNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KHN0YXRlLT5jb250ZXh0
SWQsIG1fcGxheWJhY2tUYXJnZXQgJiYgbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUo
KSk7Ci0gICAgc3RhdGUtPnJlcXVlc3RlZFBpY2tlciA9IGZhbHNlOworICAgICAgICBpZiAobV9w
bGF5YmFja1RhcmdldCkKKyAgICAgICAgICAgIHN0YXRlLT5jbGllbnQuc2V0UGxheWJhY2tUYXJn
ZXQoc3RhdGUtPmNvbnRleHRJZCwgKm1fcGxheWJhY2tUYXJnZXQuY29weVJlZigpKTsKKyAgICB9
CiB9CiAKLXZvaWQgV2ViTWVkaWFTZXNzaW9uTWFuYWdlcjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VB
dmFpbGFibGVEaWRDaGFuZ2UoYm9vbCBhdmFpbGFibGUpCit2b2lkIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXI6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0Q2xpZW50cygpCiB7Ci0gICAgbV9leHRlcm5h
bE91dHB1dERldmljZUF2YWlsYWJsZSA9IGF2YWlsYWJsZTsKLSAgICBmb3IgKGF1dG8mIHN0YXRl
IDogbV9jbGllbnRTdGF0ZSkKLSAgICAgICAgc3RhdGUtPmNsaWVudC0+ZXh0ZXJuYWxPdXRwdXRE
ZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2Uoc3RhdGUtPmNvbnRleHRJZCwgYXZhaWxhYmxlKTsKKyAg
ICBzaXplX3QgaW5kZXhPZkNsaWVudFRoYXRSZXF1ZXN0ZWRQaWNrZXIgPSBub3RGb3VuZDsKKyAg
ICBzaXplX3QgaW5kZXhPZkF1dG9QbGF5Q2FuZGlkYXRlID0gbm90Rm91bmQ7CisgICAgc2l6ZV90
IGluZGV4T2ZDbGllbnRXaWxsUGxheVRvVGFyZ2V0ID0gbm90Rm91bmQ7CisgICAgYm9vbCBoYXZl
QWN0aXZlUm91dGUgPSBtX3BsYXliYWNrVGFyZ2V0ICYmIG1fcGxheWJhY2tUYXJnZXQtPmhhc0Fj
dGl2ZVJvdXRlKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2xpZW50U3RhdGUu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgc3RhdGUgPSBtX2NsaWVudFN0YXRlW2ldOwor
CisgICAgICAgIGlmIChpbmRleE9mQ2xpZW50VGhhdFJlcXVlc3RlZFBpY2tlciA9PSBub3RGb3Vu
ZCAmJiBzdGF0ZS0+cmVxdWVzdGVkUGlja2VyKQorICAgICAgICAgICAgaW5kZXhPZkNsaWVudFRo
YXRSZXF1ZXN0ZWRQaWNrZXIgPSBpOworCisgICAgICAgIGlmIChpbmRleE9mQ2xpZW50V2lsbFBs
YXlUb1RhcmdldCA9PSBub3RGb3VuZCAmJiBmbGFnc0FyZVNldChzdGF0ZS0+ZmxhZ3MsIE1lZGlh
UHJvZHVjZXI6OklzUGxheWluZ1RvRXh0ZXJuYWxEZXZpY2UpKQorICAgICAgICAgICAgaW5kZXhP
ZkNsaWVudFdpbGxQbGF5VG9UYXJnZXQgPSBpOworCisgICAgICAgIGlmIChpbmRleE9mQXV0b1Bs
YXlDYW5kaWRhdGUgPT0gbm90Rm91bmQgJiYgZmxhZ3NBcmVTZXQoc3RhdGUtPmZsYWdzLCBNZWRp
YVByb2R1Y2VyOjpFeHRlcm5hbERldmljZUF1dG9QbGF5Q2FuZGlkYXRlKSAmJiAhZmxhZ3NBcmVT
ZXQoc3RhdGUtPmZsYWdzLCBNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdWaWRlbykpCisgICAgICAg
ICAgICBpbmRleE9mQXV0b1BsYXlDYW5kaWRhdGUgPSBpOworICAgIH0KKworICAgIGlmIChpbmRl
eE9mQ2xpZW50VGhhdFJlcXVlc3RlZFBpY2tlciAhPSBub3RGb3VuZCkKKyAgICAgICAgaW5kZXhP
ZkNsaWVudFdpbGxQbGF5VG9UYXJnZXQgPSBpbmRleE9mQ2xpZW50VGhhdFJlcXVlc3RlZFBpY2tl
cjsKKyAgICBpZiAoaW5kZXhPZkNsaWVudFdpbGxQbGF5VG9UYXJnZXQgPT0gbm90Rm91bmQgJiYg
aGF2ZUFjdGl2ZVJvdXRlICYmIGluZGV4T2ZBdXRvUGxheUNhbmRpZGF0ZSAhPSBub3RGb3VuZCkK
KyAgICAgICAgaW5kZXhPZkNsaWVudFdpbGxQbGF5VG9UYXJnZXQgPSBpbmRleE9mQXV0b1BsYXlD
YW5kaWRhdGU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2xpZW50U3RhdGUuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgc3RhdGUgPSBtX2NsaWVudFN0YXRlW2ldOworCisg
ICAgICAgIGlmIChtX3BsYXliYWNrVGFyZ2V0KQorICAgICAgICAgICAgc3RhdGUtPmNsaWVudC5z
ZXRQbGF5YmFja1RhcmdldChzdGF0ZS0+Y29udGV4dElkLCAqbV9wbGF5YmFja1RhcmdldC5jb3B5
UmVmKCkpOworCisgICAgICAgIGlmIChpICE9IGluZGV4T2ZDbGllbnRXaWxsUGxheVRvVGFyZ2V0
KQorICAgICAgICAgICAgc3RhdGUtPmNsaWVudC5zZXRTaG91bGRQbGF5VG9QbGF5YmFja1Rhcmdl
dChzdGF0ZS0+Y29udGV4dElkLCBmYWxzZSk7CisgICAgICAgIGVsc2UgaWYgKCFmbGFnc0FyZVNl
dChzdGF0ZS0+ZmxhZ3MsIE1lZGlhUHJvZHVjZXI6OklzUGxheWluZ1RvRXh0ZXJuYWxEZXZpY2Up
KQorICAgICAgICAgICAgc3RhdGUtPmNsaWVudC5zZXRTaG91bGRQbGF5VG9QbGF5YmFja1Rhcmdl
dChzdGF0ZS0+Y29udGV4dElkLCBoYXZlQWN0aXZlUm91dGUpOworCisgICAgICAgIHN0YXRlLT5j
b25maWd1cmF0aW9uUmVxdWlyZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdGUtPnJlcXVlc3RlZFBp
Y2tlciA9IGZhbHNlOworICAgIH0KIH0KIAogdm9pZCBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpj
b25maWd1cmVQbGF5YmFja1RhcmdldE1vbml0b3JpbmcoKQpAQCAtMjE4LDI2ICsyNTIsMjggQEAg
dm9pZCBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpjb25maWd1cmVQbAogICAgICAgICB0YXJnZXRQ
aWNrZXIoKS5zdG9wTW9uaXRvcmluZ1BsYXliYWNrVGFyZ2V0cygpOwogfQogCi12b2lkIFdlYk1l
ZGlhU2Vzc2lvbk1hbmFnZXI6OnRhc2tUaW1lckZpcmVkKCkKK3ZvaWQgV2ViTWVkaWFTZXNzaW9u
TWFuYWdlcjo6c2NoZWR1bGVEZWxheWVkVGFzayhDb25maWd1cmF0aW9uVGFza3MgdGFza3MpCiB7
Ci0gICAgYXV0byB0YXNrUXVldWUgPSBXVEY6Om1vdmUobV90YXNrUXVldWUpOwotICAgIGlmICh0
YXNrUXVldWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHRh
c2sgOiB0YXNrUXVldWUpIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gZmluZChzdGQ6OmdldDww
Pih0YXNrKSwgc3RkOjpnZXQ8MT4odGFzaykpOworICAgIG1fdGFza0ZsYWdzIHw9IHRhc2tzOwor
ICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCh0YXNrRGVsYXlJbnRlcnZhbCk7Cit9CiAKLSAg
ICAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQotICAgICAgICAgICAgY29udGludWU7Cit2b2lk
IFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXI6OnRhc2tUaW1lckZpcmVkKCkKK3sKKyAgICBpZiAobV90
YXNrRmxhZ3MgJiBJbml0aWFsQ29uZmlndXJhdGlvblRhc2spCisgICAgICAgIGNvbmZpZ3VyZU5l
d0NsaWVudHMoKTsKKyAgICBpZiAobV90YXNrRmxhZ3MgJiBUYXJnZXRDbGllbnRzQ29uZmlndXJh
dGlvblRhc2spCisgICAgICAgIGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0Q2xpZW50cygpOworICAg
IGlmIChtX3Rhc2tGbGFncyAmIFRhcmdldE1vbml0b3JpbmdDb25maWd1cmF0aW9uVGFzaykKKyAg
ICAgICAgY29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nKCk7CiAKLSAgICAgICAgc3Rk
OjpnZXQ8Mj4odGFzaykoKm1fY2xpZW50U3RhdGVbaW5kZXhdKTsKLSAgICB9CisgICAgbV90YXNr
RmxhZ3MgPSBOb1Rhc2s7CiB9CiAKIHNpemVfdCBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyOjpmaW5k
KFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQqIGNsaWVudCwgdWludDY0X3QgY29udGV4dElk
KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jbGllbnRTdGF0ZS5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAobV9jbGllbnRTdGF0ZVtpXS0+Y29udGV4dElkID09IGNvbnRleHRJ
ZCAmJiBtX2NsaWVudFN0YXRlW2ldLT5jbGllbnQgPT0gY2xpZW50KQorICAgICAgICBpZiAobV9j
bGllbnRTdGF0ZVtpXS0+Y29udGV4dElkID09IGNvbnRleHRJZCAmJiAmbV9jbGllbnRTdGF0ZVtp
XS0+Y2xpZW50ID09IGNsaWVudCkKICAgICAgICAgICAgIHJldHVybiBpOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFu
YWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9u
L1dlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuaAkocmV2aXNpb24gMTgzOTk3KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXNlc3Npb24vV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCwxNSArNjQsMjUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCkgb3ZlcnJpZGU7CiAK
ICAgICBzaXplX3QgZmluZChXZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50KiwgdWludDY0X3Qp
OworICAgIHZvaWQgY29uZmlndXJlUGxheWJhY2tUYXJnZXRDbGllbnRzKCk7CisgICAgdm9pZCBj
b25maWd1cmVOZXdDbGllbnRzKCk7CiAgICAgdm9pZCBjb25maWd1cmVQbGF5YmFja1RhcmdldE1v
bml0b3JpbmcoKTsKLSAgICB2b2lkIHRhc2tUaW1lckZpcmVkKCk7CiAKLSAgICB0eXBlZGVmIHN0
ZDo6dHVwbGU8V2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudCosIHVpbnQ2NF90LCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoQ2xpZW50U3RhdGUmKT4+IFRhc2tDYWxsYmFjazsKLSAgICBWZWN0b3I8VGFz
a0NhbGxiYWNrPiBtX3Rhc2tRdWV1ZTsKKyAgICBlbnVtIENvbmZpZ3VyYXRpb25UYXNrRmxhZ3Mg
eworICAgICAgICBOb1Rhc2sgPSAwLAorICAgICAgICBJbml0aWFsQ29uZmlndXJhdGlvblRhc2sg
PSAxIDw8IDAsCisgICAgICAgIFRhcmdldENsaWVudHNDb25maWd1cmF0aW9uVGFzayA9IDEgPDwg
MSwKKyAgICAgICAgVGFyZ2V0TW9uaXRvcmluZ0NvbmZpZ3VyYXRpb25UYXNrID0gMSA8PCAyLAor
ICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25lZCBDb25maWd1cmF0aW9uVGFza3M7CisKKyAgICB2
b2lkIHNjaGVkdWxlRGVsYXllZFRhc2soQ29uZmlndXJhdGlvblRhc2tzKTsKKyAgICB2b2lkIHRh
c2tUaW1lckZpcmVkKCk7CiAgICAgUnVuTG9vcDo6VGltZXI8V2ViTWVkaWFTZXNzaW9uTWFuYWdl
cj4gbV90YXNrVGltZXI7CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENsaWVudFN0YXRl
Pj4gbV9jbGllbnRTdGF0ZTsKICAgICBSZWZQdHI8TWVkaWFQbGF5YmFja1RhcmdldD4gbV9wbGF5
YmFja1RhcmdldDsKKyAgICBDb25maWd1cmF0aW9uVGFza3MgbV90YXNrRmxhZ3MgeyBOb1Rhc2sg
fTsKICAgICBib29sIG1fZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGUgeyBmYWxzZSB9Owog
fTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxODQxMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDM0LDcgKzMwMzQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnNldE11dGVkKGJvb2wgbXV0CiAgICAgICAgIGRvY3VtZW50KCkudXBkYXRlSXNQbGF5aW5n
TWVkaWEoKTsKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5tZWRpYVN0YXRlRGlkQ2hhbmdlKCp0aGlzLCBtZWRpYVN0YXRlKCkp
OworICAgICAgICB1cGRhdGVNZWRpYVN0YXRlKCk7CiAjZW5kaWYKICAgICB9CiAjZW5kaWYKQEAg
LTQ2MzIsNyArNDYzMiw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UGxheWluZyhib29s
IHAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CiAKICNpZiBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIG1fbWVkaWFTZXNzaW9uLT5tZWRpYVN0YXRl
RGlkQ2hhbmdlKCp0aGlzLCBtZWRpYVN0YXRlKCkpOworICAgIHVwZGF0ZU1lZGlhU3RhdGUoKTsK
ICNlbmRpZgogfQogCkBAIC00ODk1LDcgKzQ4OTUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
Om1lZGlhUGxheWVyQ3VycmVuCiAKICAgICBjb25maWd1cmVNZWRpYUNvbnRyb2xzKCk7CiAgICAg
c2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkud2Via2l0Y3VycmVudHBsYXliYWNrdGFyZ2V0aXN3
aXJlbGVzc2NoYW5nZWRFdmVudCk7Ci0gICAgbV9tZWRpYVNlc3Npb24tPm1lZGlhU3RhdGVEaWRD
aGFuZ2UoKnRoaXMsIG1lZGlhU3RhdGUoKSk7CisgICAgdXBkYXRlTWVkaWFTdGF0ZSgpOwogfQog
CiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
cHJwRXZlbnQpCkBAIC00OTQ2LDggKzQ5NDYsOSBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnJl
bW92ZUV2ZW50TGlzdGVuCiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW5xdWV1ZVBsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KCkKIHsKLSAgICBMT0coTWVkaWEsICJIVE1M
TWVkaWFFbGVtZW50OjplbnF1ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkRXZl
bnQoJXApIiwgdGhpcyk7Ci0gICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IFdlYktpdFBsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0cGxheWJh
Y2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQsIG1fbWVkaWFTZXNzaW9uLT5oYXNXaXJl
bGVzc1BsYXliYWNrVGFyZ2V0cygqdGhpcykpOworICAgIGJvb2wgaGFzVGFyZ2V0cyA9IG1fbWVk
aWFTZXNzaW9uLT5oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygqdGhpcyk7CisgICAgTE9HKE1l
ZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6ZW5xdWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
Q2hhbmdlZEV2ZW50KCVwKSAtIGhhc1RhcmdldHMgPSAlcyIsIHRoaXMsIGJvb2xTdHJpbmcoaGFz
VGFyZ2V0cykpOworICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBXZWJLaXRQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFy
Z2V0YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50LCBoYXNUYXJnZXRzKTsKICAgICBldmVudC0+c2V0
VGFyZ2V0KHRoaXMpOwogICAgIG1fYXN5bmNFdmVudFF1ZXVlLmVucXVldWVFdmVudChldmVudC5y
ZWxlYXNlKCkpOwogfQpAQCAtNjIxOCw2ICs2MjE5LDE4IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6b3ZlcnJpZGVCYWNrZ3JvdW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQordm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVN
ZWRpYVN0YXRlKCkKK3sKKyAgICBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUg
PSBtZWRpYVN0YXRlKCk7CisgICAgaWYgKG1fbWVkaWFTdGF0ZSA9PSBzdGF0ZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9tZWRpYVN0YXRlID0gc3RhdGU7CisgICAgbV9tZWRpYVNlc3Npb24t
Pm1lZGlhU3RhdGVEaWRDaGFuZ2UoKnRoaXMsIG1fbWVkaWFTdGF0ZSk7Cit9CisjZW5kaWYKKwog
TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhU3Rh
dGUoKSBjb25zdAogewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aAkocmV2aXNpb24gMTg0MTAzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0MCw2ICs3NDAsNyBAQCBwcml2YXRlOgogI2lmIEVO
QUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgdmlydHVhbCB2b2lkIGRvY3VtZW50
V2lsbFN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZv
aWQgZG9jdW1lbnREaWRSZXN1bWVGcm9tUGFnZUNhY2hlKCkgb3ZlcnJpZGUgZmluYWw7CisgICAg
dm9pZCB1cGRhdGVNZWRpYVN0YXRlKCk7CiAjZW5kaWYKIAogICAgIFRpbWVyIG1fcGVuZGluZ0Fj
dGlvblRpbWVyOwpAQCAtOTMxLDYgKzkzMiw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgTWVkaWFQcm9kdWNlcjo6TWVkaWFT
dGF0ZUZsYWdzIG1fbWVkaWFTdGF0ZSB7IE1lZGlhUHJvZHVjZXI6OklzTm90UGxheWluZyB9Owog
ICAgIGJvb2wgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyB7IGZhbHNl
IH07CiAjZW5kaWYKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Np
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vzc2lv
bi5jcHAJKHJldmlzaW9uIDE4Mzk5NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
U2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNSwxMSArMzA1LDEwIEBAIHZvaWQgSFRN
TE1lZGlhU2Vzc2lvbjo6ZXh0ZXJuYWxPdXRwdXREZXYKICAgICBpZiAobV9oYXNQbGF5YmFja1Rh
cmdldHMgPT0gaGFzVGFyZ2V0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE1lZGlhLCAi
SFRNTE1lZGlhU2Vzc2lvbjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2Ug
LSBoYXNUYXJnZXRzICVzIiwgaGFzVGFyZ2V0cyA/ICJUUlVFIiA6ICJGQUxTRSIpOworICAgIExP
RyhNZWRpYSwgIkhUTUxNZWRpYVNlc3Npb246OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxl
RGlkQ2hhbmdlKCVwKSAtIGhhc1RhcmdldHMgJXMiLCB0aGlzLCBoYXNUYXJnZXRzID8gIlRSVUUi
IDogIkZBTFNFIik7CiAKICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0cyA9IGhhc1RhcmdldHM7Ci0g
ICAgaWYgKCFtX3RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICBtX3RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Cisg
ICAgbV90YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQog
CiBib29sIEhUTUxNZWRpYVNlc3Npb246OmNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQo
KSBjb25zdApAQCAtMzMwLDYgKzMyOSw3IEBAIGJvb2wgSFRNTE1lZGlhU2Vzc2lvbjo6aXNQbGF5
aW5nVG9XaXJlbGUKIAogdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpzZXRTaG91bGRQbGF5VG9QbGF5
YmFja1RhcmdldChib29sIHNob3VsZFBsYXkpCiB7CisgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlh
U2Vzc2lvbjo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQgLSBzaG91bGRQbGF5ICVzIiwg
c2hvdWxkUGxheSA/ICJUUlVFIiA6ICJGQUxTRSIpOwogICAgIG1fc2hvdWxkUGxheVRvUGxheWJh
Y2tUYXJnZXQgPSBzaG91bGRQbGF5OwogICAgIGNsaWVudCgpLnNldFNob3VsZFBsYXlUb1BsYXli
YWNrVGFyZ2V0KHNob3VsZFBsYXkpOwogfQpAQCAtMzg2LDcgKzM4Niw3IEBAIHZvaWQgSFRNTE1l
ZGlhU2Vzc2lvbjo6bWVkaWFFbmdpbmVVcGRhdGUKICAgICBpZiAobV9wbGF5YmFja1RhcmdldCkK
ICAgICAgICAgY2xpZW50KCkuc2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldCgqbV9wbGF5YmFja1Rh
cmdldC5jb3B5UmVmKCkpOwogICAgIGlmIChtX3Nob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KQot
ICAgICAgICBjbGllbnQoKS5zZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChtX3Nob3VsZFBs
YXlUb1BsYXliYWNrVGFyZ2V0KTsKKyAgICAgICAgY2xpZW50KCkuc2V0U2hvdWxkUGxheVRvUGxh
eWJhY2tUYXJnZXQodHJ1ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXli
YWNrVGFyZ2V0UGlja2VyTWFjLm1tCShyZXZpc2lvbiAxODM5OTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXliYWNrVGFyZ2V0
UGlja2VyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMjMgKzEzMCwyMiBAQCBBVk91dHB1
dERldmljZU1lbnVDb250cm9sbGVyVHlwZSAqTWVkaWFQCiAgICAgcmV0dXJuIG1fb3V0cHV0RGV2
aWNlTWVudUNvbnRyb2xsZXIuZ2V0KCk7CiB9CiAKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKIHZvaWQgTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYzo6c2hvd1BsYXliYWNr
VGFyZ2V0UGlja2VyKGNvbnN0IEZsb2F0UmVjdCYgbG9jYXRpb24sIGJvb2wgY2hlY2tBY3RpdmVS
b3V0ZSkKIHsKICAgICBpZiAoIW1fY2xpZW50IHx8IG1fc2hvd2luZ01lbnUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fc2hvd2luZ01lbnUgPSB0cnVlOwogICAgIEFWT3V0cHV0RGV2aWNlTWVu
dUNvbnRyb2xsZXJUeXBlICpwaWNrZXIgPSBkZXZpY2VQaWNrZXIoKTsKLSAgICBpZiAoW3BpY2tl
ciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNob3dNZW51Rm9yUmVjdDphcHBlYXJhbmNl
TmFtZTphbGxvd1Jlc2VsZWN0aW9uT2ZTZWxlY3RlZE91dHB1dERldmljZTopXSkgewotICAgICAg
ICBpZiAoW3BpY2tlciBzaG93TWVudUZvclJlY3Q6bG9jYXRpb24gYXBwZWFyYW5jZU5hbWU6TlNB
cHBlYXJhbmNlTmFtZVZpYnJhbnRMaWdodCBhbGxvd1Jlc2VsZWN0aW9uT2ZTZWxlY3RlZE91dHB1
dERldmljZTohY2hlY2tBY3RpdmVSb3V0ZV0pCisgICAgaWYgKCFbcGlja2VyIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Ioc2hvd01lbnVGb3JSZWN0OmFwcGVhcmFuY2VOYW1lOmFsbG93UmVz
ZWxlY3Rpb25PZlNlbGVjdGVkT3V0cHV0RGV2aWNlOildKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Nob3dpbmdNZW51ID0gdHJ1ZTsKKyAgICBpZiAoW3BpY2tlciBzaG93TWVudUZvclJlY3Q6
bG9jYXRpb24gYXBwZWFyYW5jZU5hbWU6TlNBcHBlYXJhbmNlTmFtZVZpYnJhbnRMaWdodCBhbGxv
d1Jlc2VsZWN0aW9uT2ZTZWxlY3RlZE91dHB1dERldmljZTohY2hlY2tBY3RpdmVSb3V0ZV0pIHsK
KyAgICAgICAgaWYgKCFjaGVja0FjdGl2ZVJvdXRlKQogICAgICAgICAgICAgY3VycmVudERldmlj
ZURpZENoYW5nZSgpOwotICAgIH0gZWxzZQotICAgICAgICBbcGlja2VyIHNob3dNZW51Rm9yUmVj
dDpsb2NhdGlvbiBhcHBlYXJhbmNlTmFtZTpOU0FwcGVhcmFuY2VOYW1lVmlicmFudExpZ2h0XTsK
KyAgICB9CiAgICAgbV9zaG93aW5nTWVudSA9IGZhbHNlOwogfQotI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIHBvcAogCiB2b2lkIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWM6OmFkZFBlbmRp
bmdBY3Rpb24oUGVuZGluZ0FjdGlvbkZsYWdzIGFjdGlvbikKIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>