<?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>143251</bug_id>
          
          <creation_ts>2015-03-30 20:38:18 -0700</creation_ts>
          <short_desc>[Mac] Do not include route button if element does not support target playback</short_desc>
          <delta_ts>2015-04-01 12:51:40 -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>jer.noble</cc>
    
    <cc>jonlee</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1081552</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-03-30 20:38:18 -0700</bug_when>
    <thetext>Not all media engines support playback to an external device.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081765</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-03-31 13:38:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/20369636&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081767</commentid>
    <comment_count>2</comment_count>
      <attachid>249847</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-03-31 13:44:05 -0700</bug_when>
    <thetext>Created attachment 249847
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081790</commentid>
    <comment_count>3</comment_count>
      <attachid>249856</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-03-31 14:57:51 -0700</bug_when>
    <thetext>Created attachment 249856
Updated Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081865</commentid>
    <comment_count>4</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2015-03-31 19:25:28 -0700</bug_when>
    <thetext>rdar://problem/19130597</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082027</commentid>
    <comment_count>5</comment_count>
      <attachid>249856</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-04-01 10:00:47 -0700</bug_when>
    <thetext>Comment on attachment 249856
Updated Patch

r=me, with nits.

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

&gt; Source/WebCore/Modules/mediacontrols/mediaControlsApple.js:1702
&gt; +        if (!&apos;webkitCurrentPlaybackTargetIsWireless&apos; in this.video || !&apos;webkitWirelessVideoPlaybackDisabled&apos; in this.video)
&gt; +            return false;

It seems like these are unnecessary.

&gt; Source/WebCore/Modules/mediacontrols/mediaControlsApple.js:1753
&gt; +        if (&apos;webkitWirelessVideoPlaybackDisabled&apos; in this.video &amp;&amp; this.video.webkitWirelessVideoPlaybackDisabled)

ditto the &apos;in this.video&apos;.

&gt; Source/WebCore/platform/graphics/MediaPlaybackTarget.h:57
&gt; +    void setDevicePickerContext(AVOutputContext *) { }
&gt; +    AVOutputContext *devicePickerContext() const { return nullptr; }
&gt; +    bool hasActiveRoute() const { return false; }

It seems unfortunate to expose AVOutputContext to non-Cocoa clients.  Maybe in a follow-up we can come up with a &quot;PlatformOutputContext&quot; which wraps AVOutputContext in Cocoa, but not for all other ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082029</commentid>
    <comment_count>6</comment_count>
      <attachid>249928</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-04-01 10:10:20 -0700</bug_when>
    <thetext>Created attachment 249928
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082030</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-04-01 10:11:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 249856 [details]
&gt; Updated Patch
&gt; 
&gt; r=me, with nits.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=249856&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/mediacontrols/mediaControlsApple.js:1702
&gt; &gt; +        if (!&apos;webkitCurrentPlaybackTargetIsWireless&apos; in this.video || !&apos;webkitWirelessVideoPlaybackDisabled&apos; in this.video)
&gt; &gt; +            return false;
&gt; 
&gt; It seems like these are unnecessary.
&gt; 
Agreed, fixed.

&gt; &gt; Source/WebCore/Modules/mediacontrols/mediaControlsApple.js:1753
&gt; &gt; +        if (&apos;webkitWirelessVideoPlaybackDisabled&apos; in this.video &amp;&amp; this.video.webkitWirelessVideoPlaybackDisabled)
&gt; 
&gt; ditto the &apos;in this.video&apos;.
&gt; 
Ditto.

&gt; &gt; Source/WebCore/platform/graphics/MediaPlaybackTarget.h:57
&gt; &gt; +    void setDevicePickerContext(AVOutputContext *) { }
&gt; &gt; +    AVOutputContext *devicePickerContext() const { return nullptr; }
&gt; &gt; +    bool hasActiveRoute() const { return false; }
&gt; 
&gt; It seems unfortunate to expose AVOutputContext to non-Cocoa clients.  Maybe
&gt; in a follow-up we can come up with a &quot;PlatformOutputContext&quot; which wraps
&gt; AVOutputContext in Cocoa, but not for all other ports.
&gt;
Good point, I will do that in a followup.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082053</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-04-01 11:09:19 -0700</bug_when>
    <thetext>committed r182240: https://trac.webkit.org/r182240</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082088</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-04-01 12:51:40 -0700</bug_when>
    <thetext>Committed https://trac.webkit.org/r182250 to fix the iOS build.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249847</attachid>
            <date>2015-03-31 13:44:05 -0700</date>
            <delta_ts>2015-03-31 14:57:51 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>mse_patch_8.txt</filename>
            <type>text/plain</type>
            <size>50291</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBAQAorMjAxNS0wMy0zMSAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBEbyBub3Qg
aW5jbHVkZSByb3V0ZSBidXR0b24gaWYgZWxlbWVudCBkb2VzIG5vdCBzdXBwb3J0IHRhcmdldCBw
bGF5YmFjaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQzMjUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzOgorICAgICAgICAo
Q29udHJvbGxlci5wcm90b3R5cGUuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcyk6IFJl
dHVybiBmYWxzZSBpZiB0YXJnZXQgcGxheWJhY2sgaXMgZGlzYWJsZWQuCisgICAgICAgIChDb250
cm9sbGVyLnByb3RvdHlwZS51cGRhdGVXaXJlbGVzc1RhcmdldEF2YWlsYWJsZSk6IERvIG5vdCBz
aG93IHRoZSBwaWNrZXIgaWYgdGFyZ2V0IAorICAgICAgICAgICAgcGxheWJhY2sgaXMgZGlzYWJs
ZWQuCisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5oYW5kbGVXaXJlbGVzc1BsYXliYWNr
Q2hhbmdlKTogQ2FsbCB1cGRhdGVXaXJlbGVzc1RhcmdldEF2YWlsYWJsZS4KKworICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyKTogVXBkYXRlIGZvciBQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQaWNr
ZXIgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZENob29zZVBsYXliYWNr
VGFyZ2V0KTogTm90aWZ5IGNsaWVudHMgaW4gdmVjdG9yLW9yZGVyLCBsb3dlciBsZXZlbCBjb2Rl
CisgICAgICAgICAgICBub3cgdHJhY2tzIHdoaWNoIG9uZSByZXF1ZXN0ZWQgdGhlIHBpY2tlci4K
KworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UpOiBEb24ndCBjYWxsIGFwcGx5TWVkaWFQ
bGF5ZXJSZXN0cmljdGlvbnMsIGl0IGlzIGRvbmUKKyAgICAgICAgICAgIGluIG1lZGlhUGxheWVy
RW5naW5lRmFpbGVkVG9Mb2FkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
c2V0UmVhZHlTdGF0ZSk6IEVucXVldWUgYSB0YXJnZXQgYXZhaWxhYmlsaXR5IGV2ZW50IGlmIHRo
ZXJlIGFyZQorICAgICAgICAgICAgbGlzdGVuZXJzIHJlYWR5U3RhdGUgcmVhY2hlcyBIQVZFX01F
VEFEQVRBIHNvIGNvbnRyb2xzIGFyZSBzZXR1cCBjb3JyZWN0bHkuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckVuZ2luZUZhaWxlZFRvTG9hZCk6IENhbGwg
YXBwbHlNZWRpYVBsYXllclJlc3RyaWN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmNsZWFyTWVkaWFQbGF5ZXIpOiBFbnF1ZXVlIGEgdGFyZ2V0IGF2YWlsYWJpbGl0
eSBldmVudCBpbiBzbyBjb250cm9scworICAgICAgICAgICAgaGF2ZSBhIGNoYW5jZSB0byBoaWRl
IHRoZSBwaWNrZXIuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp3ZWJraXRD
dXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCk6IE5ldywgcGFzc3Rocm91Z2ggdG8gdGhl
CisgICAgICAgICAgICBtZWRpYSBlbmdpbmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzdG9wUGxheWlu
Z1RvUGxheWJhY2tUYXJnZXQpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRsOgorCisgICAgICAgICog
aHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNl
c3Npb246OkhUTUxNZWRpYVNlc3Npb24pOiBJbml0aWFsaXplIG1fcGxheWJhY2tUYXJnZXQuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpjdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1N1cHBvcnRlZCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcik6IFB1bGwgbG9naWMgZnJvbSBzaG93aW5nUGxheWJhY2tU
YXJnZXRQaWNrZXJQZXJtaXR0ZWQgCisgICAgICAgICAgICBpbmxpbmUuIERvbid0IHJlZnVzZSB0
byBzaG93IGEgcGlja2VyIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3Qgc3VwcG9ydCB0YXJnZXQgcGxh
eWJhY2ssIGl0IGlzIHVwCisgICAgICAgICAgICB0byBzY3JpcHQgdG8gZGVjaWRlIHdoaWNoIGVs
ZW1lbnRzIGNhbiBkaXNwbGF5IGEgcGlja2VyLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
U2Vzc2lvbjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOiBSZXR1cm4gdHJ1ZSBpZiB0
aGVyZSBpcyBubyBwbGF5ZXIuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpk
aWRDaG9vc2VQbGF5YmFja1RhcmdldCk6IENhbGwgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1Rhcmdl
dCBvciAKKyAgICAgICAgICAgIHN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCBiZWNhdXNlIHNl
dFdpcmVsZXNzUGxheWJhY2tUYXJnZXQgZG9lc24ndCBhcHBseSB0aGUgdGFyZ2V0LgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFi
bGVEaWRDaGFuZ2UpOiBBZGQgbG9nZ2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNl
c3Npb246OnNob3dpbmdQbGF5YmFja1RhcmdldFBpY2tlclBlcm1pdHRlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmg6CisKKyAgICAgICAgKiBwYWdlL1BhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6IEluaXRpYWxpemUgbV9wbGF5YmFj
a1RhcmdldC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNob3dQbGF5YmFja1RhcmdldFBpY2tl
cik6IERvbid0IHNldCBtX2RvY3VtZW50UmVxdWVzdGluZ1BsYXliYWNrVGFyZ2V0UGlja2VyLgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQpOiBOb3RpZnkg
UGFnZXMgaW4gdmVjdG9yLW9yZGVyLCBsb3dlciBsZXZlbCBjb2RlCisgICAgICAgICAgICBub3cg
dHJhY2tzIHdoaWNoIG9uZSByZXF1ZXN0ZWQgdGhlIHBpY2tlci4KKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZyk6IERvbid0IHRyYWNrIG1f
cmVxdWlyZXNQbGF5YmFja1RhcmdldE1vbml0b3JpbmcsIGl0CisgICAgICAgICAgICBpcyB0b28g
ZWFzeSBmb3IgaXQgdG8gZ2V0IG91dCBvZiBzeW5jIHdpdGggdGhlIFVJIHByb2Nlc3Mgc3RhdGUu
CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9NZWRp
YVNlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uOjpjYW5QbGF5VG9X
aXJlbGVzc1BsYXliYWNrVGFyZ2V0KTogTmV3LCBjbGllbnQgcGFzc3Rocm91Z2guCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVNlc3Npb246OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbjo6c3RvcFBsYXlpbmdUb1BsYXli
YWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25DbGllbnQ6OmNhblBsYXlUb1dpcmVs
ZXNzUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uQ2xpZW50
OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U2Vzc2lvbkNsaWVudDo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KToKKworICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTZXNzaW9uTWFuYWdlcjo6c2Vzc2lvbldpbGxCZWdpblBsYXliYWNrKTogQ2FsbCBz
dGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0ICYKKyAgICAgICAgICAgIHN0b3BQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCBhcyBuZWNlc3NhcnkuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVk
aWFTZXNzaW9uTWFuYWdlci5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5YmFja1RhcmdldC5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldDo6
aGFzQWN0aXZlUm91dGUpOiBOZXcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjppc0N1cnJl
bnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCk6IE5ldywgZW5naW5lIHBhc3N0aHJvdWdoLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJn
ZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpzdGFydFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUlu
dGVyZmFjZTo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6
OmNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6c3RvcFBsYXlp
bmdUb1BsYXliYWNrVGFyZ2V0KToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9NZWRpYVBsYXliYWNrVGFyZ2V0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5YmFja1RhcmdldDo6aGFzQWN0aXZlUm91dGUpOiBOZXcuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6Y2FuY2VsTG9hZCk6IFVzZSBwbGF5ZXJLVk9Qcm9wZXJ0aWVzLiBEcml2
ZS1ieQorICAgICAgICAgICAgY29kZSBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIpOiBVc2UgcGxheWVy
S1ZPUHJvcGVydGllcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OndpcmVsZXNzUGxheWJhY2tUYXJnZXROYW1lKTogSW1wbGVtZW50IGZvciBN
YWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpzZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6IERlbGF5IGNhbGxiYWNrcworICAg
ICAgICAgICAgd2hpbGUgc2V0dGluZyBBVlBsYXllciBwcm9wZXJ0eS4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNzUGxheWJh
Y2tUYXJnZXQpOiBBZGQgbG9nZ2luZy4gRG9uJ3Qgc2V0CisgICAgICAgICAgICB0aGUgQVZQbGF5
ZXIgb3V0cHV0Q29udGV4dCBpbW1lZGlhdGVseS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQp
OiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBOZXcuCisgICAgICAgIChXZWJDb3Jl
OjpwbGF5ZXJLVk9Qcm9wZXJ0aWVzKTogTmV3LgorICAgICAgICAoLVtXZWJDb3JlQVZGTW92aWVP
YnNlcnZlciBvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOm9mT2JqZWN0OmNoYW5nZTpjb250ZXh0Ol0p
OiBOb3RpZnkgd2hlbgorICAgICAgICAgICAgYWxsb3dzRXh0ZXJuYWxQbGF5YmFjayBjaGFuZ2Vz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjppc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCk6IE5ldy4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0V2lyZWxl
c3NQbGF5YmFja1RhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN0b3BQbGF5aW5n
VG9QbGF5YmFja1RhcmdldCk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2V0V2ly
ZWxlc3NQbGF5YmFja1RhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ6OnRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c3RhcnRQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERpdHRvLgorCiAyMDE1LTAz
LTMwICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBbTmV3IEJsb2Nr
LUluc2lkZS1JbmxpbmUgTW9kZWxdIE1ha2Ugc3VyZSBsaW5lIGJyZWFrcyBvY2N1ciBiZWZvcmUg
YW5kIGFmdGVyIHRoZSBhbm9ueW1vdXMgaW5saW5lLWJsb2NrLgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL21lZGlhQ29udHJvbHNBcHBsZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0Fw
cGxlLmpzCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
Y29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk1LDcg
KzE2OTUsMTYgQEAgQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIGN1cnJl
bnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3M6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4g
Q29udHJvbGxlci5nU2ltdWxhdGVXaXJlbGVzc1BsYXliYWNrVGFyZ2V0IHx8ICgoJ3dlYmtpdEN1
cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MnIGluIHRoaXMudmlkZW8pICYmIHRoaXMudmlk
ZW8ud2Via2l0Q3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcyk7CisgICAgICAgIGlmIChD
b250cm9sbGVyLmdTaW11bGF0ZVdpcmVsZXNzUGxheWJhY2tUYXJnZXQpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoISd3ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1dpcmVsZXNzJyBpbiB0aGlzLnZpZGVvIHx8ICEnd2Via2l0V2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQnIGluIHRoaXMudmlkZW8pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgaWYgKCF0aGlzLnZpZGVvLndlYmtpdEN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxl
c3MgfHwgdGhpcy52aWRlby53ZWJraXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LAog
CiAgICAgdXBkYXRlU2hvdWxkTGlzdGVuRm9yUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlFdmVu
dDogZnVuY3Rpb24oKSB7CkBAIC0xNzQwLDcgKzE3NDksMTEgQEAgQ29udHJvbGxlci5wcm90b3R5
cGUgPSB7CiAgICAgfSwKIAogICAgIHVwZGF0ZVdpcmVsZXNzVGFyZ2V0QXZhaWxhYmxlOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgaWYgKENvbnRyb2xsZXIuZ1NpbXVsYXRlV2lyZWxlc3NQbGF5YmFj
a1RhcmdldCB8fCB0aGlzLmhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKQorICAgICAgICB2YXIg
d2lyZWxlc3NQbGF5YmFja1RhcmdldHNBdmFpbGFibGUgPSBDb250cm9sbGVyLmdTaW11bGF0ZVdp
cmVsZXNzUGxheWJhY2tUYXJnZXQgfHwgdGhpcy5oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0czsK
KyAgICAgICAgaWYgKCd3ZWJraXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCcgaW4gdGhp
cy52aWRlbyAmJiB0aGlzLnZpZGVvLndlYmtpdFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
KQorICAgICAgICAgICAgd2lyZWxlc3NQbGF5YmFja1RhcmdldHNBdmFpbGFibGUgPSBmYWxzZTsK
KworICAgICAgICBpZiAod2lyZWxlc3NQbGF5YmFja1RhcmdldHNBdmFpbGFibGUpCiAgICAgICAg
ICAgICB0aGlzLmNvbnRyb2xzLndpcmVsZXNzVGFyZ2V0UGlja2VyLmNsYXNzTGlzdC5yZW1vdmUo
dGhpcy5DbGFzc05hbWVzLmhpZGRlbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMu
Y29udHJvbHMud2lyZWxlc3NUYXJnZXRQaWNrZXIuY2xhc3NMaXN0LmFkZCh0aGlzLkNsYXNzTmFt
ZXMuaGlkZGVuKTsKQEAgLTE3NTMsNiArMTc2Niw3IEBAIENvbnRyb2xsZXIucHJvdG90eXBlID0g
ewogICAgIH0sCiAKICAgICBoYW5kbGVXaXJlbGVzc1BsYXliYWNrQ2hhbmdlOiBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICB0aGlzLnVwZGF0ZVdpcmVsZXNzVGFyZ2V0QXZhaWxhYmxlKCk7CiAg
ICAgICAgIHRoaXMudXBkYXRlV2lyZWxlc3NQbGF5YmFja1N0YXR1cygpOwogICAgICAgICB0aGlz
LnNldE5lZWRzVGltZWxpbmVNZXRyaWNzVXBkYXRlKCk7CiAgICAgfSwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ3MCw3ICs2NDcwLDcgQEAgdm9pZCBEb2N1
bWVudDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKAogICAgIGlmICghcGFnZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgcGFnZS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHRoaXMsIHZpZXco
KS0+bGFzdEtub3duTW91c2VQb3NpdGlvbigpLCBpczxIVE1MVmlkZW9FbGVtZW50PihlbGVtZW50
KSk7CisgICAgcGFnZS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHZpZXcoKS0+bGFzdEtub3du
TW91c2VQb3NpdGlvbigpLCBpczxIVE1MVmlkZW9FbGVtZW50PihlbGVtZW50KSk7CiB9CiAKIHZv
aWQgRG9jdW1lbnQ6OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KE1lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXJDbGllbnQmIGNsaWVudCkKQEAgLTY1MjQsMjIgKzY1MjQsOCBAQCB2b2lkIERv
Y3VtZW50OjpwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0CiAKIHZvaWQgRG9jdW1lbnQ6OmRpZENo
b29zZVBsYXliYWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJhY2tUYXJnZXQmIGRldmljZSkKIHsK
LSAgICBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KiBjbGllbnRUaGF0UmVxdWVzdGVk
UGlja2VyID0gbnVsbHB0cjsKLQotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9wbGF5YmFja1Rh
cmdldENsaWVudHMpIHsKLSAgICAgICAgaWYgKGNsaWVudC0+cmVxdWVzdGVkUGxheWJhY2tUYXJn
ZXRQaWNrZXIoKSkgewotICAgICAgICAgICAgY2xpZW50VGhhdFJlcXVlc3RlZFBpY2tlciA9IGNs
aWVudDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KKyAgICBmb3IgKGF1dG8q
IGNsaWVudCA6IG1fcGxheWJhY2tUYXJnZXRDbGllbnRzKQogICAgICAgICBjbGllbnQtPmRpZENo
b29zZVBsYXliYWNrVGFyZ2V0KGRldmljZSk7Ci0gICAgfQotCi0gICAgLy8gTm90aWZ5IHRoZSBj
bGllbnQgdGhhdCByZXF1ZXN0ZWQgdGhlIGNob29zZXIgbGFzdCBiZWNhdXNlIGlmIG1vcmUgdGhh
biBvbmUKLSAgICAvLyBpcyBwbGF5aW5nLCBvbmx5IHRoZSBsYXN0IG9uZSB0byBzZXQgdGhlIGNv
bnRleHQgd2lsbCBhY3R1YWxseSBnZXQgdG8gcGxheQotICAgIC8vICB0byB0aGUgZXh0ZXJuYWwg
ZGV2aWNlLgotICAgIGlmIChjbGllbnRUaGF0UmVxdWVzdGVkUGlja2VyKQotICAgICAgICBjbGll
bnRUaGF0UmVxdWVzdGVkUGlja2VyLT5kaWRDaG9vc2VQbGF5YmFja1RhcmdldChkZXZpY2UpOwog
fQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3OSw4ICsxMTc5LDYgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UoY29ucwogICAgIGlmICghbV9wbGF5ZXItPmxvYWQodXJs
LCBjb250ZW50VHlwZSwga2V5U3lzdGVtKSkKICAgICAgICAgbWVkaWFMb2FkaW5nRmFpbGVkKE1l
ZGlhUGxheWVyOjpGb3JtYXRFcnJvcik7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+YXBwbHlNZWRp
YVBsYXllclJlc3RyaWN0aW9ucygqdGhpcyk7Ci0KICAgICAvLyBJZiB0aGVyZSBpcyBubyBwb3N0
ZXIgdG8gZGlzcGxheSwgYWxsb3cgdGhlIG1lZGlhIGVuZ2luZSB0byByZW5kZXIgdmlkZW8gZnJh
bWVzIGFzIHNvb24gYXMKICAgICAvLyB0aGV5IGFyZSBhdmFpbGFibGUuCiAgICAgdXBkYXRlRGlz
cGxheVN0YXRlKCk7CkBAIC0xOTg3LDYgKzE5ODUsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpzZXRSZWFkeVN0YXRlKE1lZAogICAgICAgICBwcmVwYXJlTWVkaWFGcmFnbWVudFVSSSgpOwog
ICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsK
ICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkubG9hZGVkbWV0YWRhdGFFdmVudCk7
CisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICAgICAgaWYgKGhhc0V2
ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0
eWNoYW5nZWRFdmVudCkpCisgICAgICAgICAgICBlbnF1ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFi
aWxpdHlDaGFuZ2VkRXZlbnQoKTsKKyNlbmRpZgorICAgICAgICAKICAgICAgICAgaWYgKGhhc01l
ZGlhQ29udHJvbHMoKSkKICAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bG9hZGVkTWV0YWRh
dGEoKTsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCkBAIC00MjY4LDYgKzQyNzEsOCBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyRW5naW5lCiAKICAgICBtX2hhdmVQcmVwYXJl
ZFRvUGxheSA9IGZhbHNlOwogCisgICAgbV9tZWRpYVNlc3Npb24tPmFwcGx5TWVkaWFQbGF5ZXJS
ZXN0cmljdGlvbnMoKnRoaXMpOworCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmICghbV9wbGF5
ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2NTQsOCArNDY1OSwxMyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmNsZWFyTWVkaWFQbGF5ZXIoCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQpCi0gICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMo
KS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0eWNoYW5nZWRFdmVudCkpCisgICAgaWYg
KGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWls
YWJpbGl0eWNoYW5nZWRFdmVudCkpIHsKICAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1Bs
YXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKCp0aGlzLCBmYWxzZSk7CisKKyAgICAg
ICAgLy8gU2VuZCBhbiBhdmFpbGFiaWxpdHkgZXZlbnQgaW4gY2FzZSBzY3JpcHRzIHdhbnQgdG8g
aGlkZSB0aGUgcGlja2VyIHdoZW4gdGhlIGVsZW1lbnQKKyAgICAgICAgLy8gZG9lc24ndCBzdXBw
b3J0IHBsYXliYWNrIHRvIGEgdGFyZ2V0LgorICAgICAgICBlbnF1ZXVlUGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlDaGFuZ2VkRXZlbnQoKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIG1fcGxheWVy
ID0gbnVsbHB0cjsKQEAgLTQ4MTAsNiArNDgyMCwxMSBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6
OndlYmtpdEN1cnJlbnRQbGF5CiAgICAgcmV0dXJuIG1fbWVkaWFTZXNzaW9uLT5jdXJyZW50UGxh
eWJhY2tUYXJnZXRJc1dpcmVsZXNzKCp0aGlzKTsKIH0KIAorYm9vbCBIVE1MTWVkaWFFbGVtZW50
Ojp3ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbWVkaWFTZXNzaW9uLT5jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCgq
dGhpcyk7Cit9CisKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lyZWxlc3NSb3V0ZXNBdmFpbGFi
bGVEaWRDaGFuZ2UoKQogewogICAgIGVucXVldWVQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNo
YW5nZWRFdmVudCgpOwpAQCAtNDg2OSw2ICs0ODg0LDI3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c2V0V2lyZWxlc3NQbGF5YmEKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAgIG1fcGxheWVy
LT5zZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KGRldmljZSk7CiB9CisKK2Jvb2wgSFRNTE1lZGlh
RWxlbWVudDo6Y2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpCit7CisgICAgYm9vbCBj
YW5QbGF5ID0gbV9wbGF5ZXIgJiYgbV9wbGF5ZXItPmNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tU
YXJnZXQoKTsKKworICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OmNhblBsYXlUb1dp
cmVsZXNzUGxheWJhY2tUYXJnZXQoJXApIC0gcmV0dXJuaW5nICVzIiwgdGhpcywgYm9vbFN0cmlu
ZyhjYW5QbGF5KSk7CisKKyAgICByZXR1cm4gY2FuUGxheTsKK30KKwordm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3sKKyAgICBpZiAobV9wbGF5
ZXIpCisgICAgICAgIG1fcGxheWVyLT5zdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Cit9
CisKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkK
K3sKKyAgICBpZiAobV9wbGF5ZXIpCisgICAgICAgIG1fcGxheWVyLT5zdG9wUGxheWluZ1RvUGxh
eWJhY2tUYXJnZXQoKTsKK30KICNlbmRpZgogCiBkb3VibGUgSFRNTE1lZGlhRWxlbWVudDo6bWlu
RmFzdFJldmVyc2VSYXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDEyICszNTQsMTYgQEAgcHVibGlj
OgogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgdm9pZCB3ZWJraXRT
aG93UGxheWJhY2tUYXJnZXRQaWNrZXIoKTsKICAgICBib29sIHdlYmtpdEN1cnJlbnRQbGF5YmFj
a1RhcmdldElzV2lyZWxlc3MoKSBjb25zdDsKKyAgICBib29sIHdlYmtpdEN1cnJlbnRQbGF5YmFj
a1RhcmdldElzU3VwcG9ydGVkKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgYWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcmVt
b3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSkgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgd2ly
ZWxlc3NSb3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2UoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgY2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJhY2tUYXJn
ZXQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1Rh
cmdldCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tU
YXJnZXQoKSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgLy8gRXZlbnRUYXJnZXQgZnVuY3Rpb24u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5pZGwJKHJldmlzaW9u
IDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw0ICsxMTYsNSBAQAogCiAgICAgW0NvbmRpdGlvbmFsPVdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVF0gdm9pZCB3ZWJraXRTaG93UGxheWJhY2tUYXJnZXRQaWNrZXIo
KTsKICAgICBbQ29uZGl0aW9uYWw9V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUXSByZWFkb25seSBh
dHRyaWJ1dGUgYm9vbGVhbiB3ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzOwor
ICAgIFtDb25kaXRpb25hbD1XSVJFTEVTU19QTEFZQkFDS19UQVJHRVRdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBib29sZWFuIHdlYmtpdEN1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vzc2lvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcAkocmV2aXNpb24g
MTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBIVE1MTWVkaWFTZXNzaW9uOjpIVE1MTWVkaWFT
ZXNzaW9uKE1lZGlhCiAgICAgLCBtX3Jlc3RyaWN0aW9ucyhOb1Jlc3RyaWN0aW9ucykKICNpZiBF
TkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgICwgbV90YXJnZXRBdmFpbGFiaWxp
dHlDaGFuZ2VkVGltZXIoKnRoaXMsICZIVE1MTWVkaWFTZXNzaW9uOjp0YXJnZXRBdmFpbGFiaWxp
dHlDaGFuZ2VkVGltZXJGaXJlZCkKKyAgICAsIG1fcGxheWJhY2tUYXJnZXQoc3RkOjptYWtlX3Vu
aXF1ZTxNZWRpYVBsYXliYWNrVGFyZ2V0PigpKQogI2VuZGlmCiB7CiB9CkBAIC0xNjMsNDMgKzE2
NCw0OSBAQCBib29sIEhUTUxNZWRpYVNlc3Npb246OnBhZ2VBbGxvd3NQbGF5YmFjCiB9CiAKICNp
ZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotYm9vbCBIVE1MTWVkaWFTZXNzaW9u
OjpzaG93aW5nUGxheWJhY2tUYXJnZXRQaWNrZXJQZXJtaXR0ZWQoY29uc3QgSFRNTE1lZGlhRWxl
bWVudCYgZWxlbWVudCkgY29uc3QKK2Jvb2wgSFRNTE1lZGlhU2Vzc2lvbjo6Y3VycmVudFBsYXli
YWNrVGFyZ2V0SXNXaXJlbGVzcyhjb25zdCBIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KSBjb25z
dAogewotICAgIGlmIChtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVVc2VyR2VzdHVyZVRvU2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdl
c3R1cmUoKSkgewotICAgICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpzaG93aW5n
UGxheWJhY2tUYXJnZXRQaWNrZXJQZXJtaXR0ZWQgLSByZXR1cm5pbmcgRkFMU0UgYmVjYXVzZSBv
ZiBwZXJtaXNzaW9ucyIpOworICAgIE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBlbGVtZW50LnBsYXll
cigpOworICAgIGlmICghcGxheWVyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYVNl
c3Npb246OmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MgLSByZXR1cm5pbmcgRkFMU0Ug
YmVjYXVzZSBwbGF5ZXIgaXMgTlVMTCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgaWYgKCFlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAgICAgIExPRyhNZWRp
YSwgIkhUTUxNZWRpYVNlc3Npb246OnNob3dpbmdQbGF5YmFja1RhcmdldFBpY2tlclBlcm1pdHRl
ZCAtIHJldHVybmluZyBGQUxTRSBiZWNhdXNlIHBhZ2UgaXMgTlVMTCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNXaXJlbGVzcyA9IHBsYXllci0+aXNDdXJyZW50
UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpOworICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYVNlc3Np
b246OmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MgLSByZXR1cm5pbmcgJXMiLCBpc1dp
cmVsZXNzID8gIlRSVUUiIDogIkZBTFNFIik7CiAKLSAgICByZXR1cm4gIXdpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkKGVsZW1lbnQpOworICAgIHJldHVybiBpc1dpcmVsZXNzOwogfQogCi1i
b29sIEhUTUxNZWRpYVNlc3Npb246OmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoY29u
c3QgSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgY29uc3QKK2Jvb2wgSFRNTE1lZGlhU2Vzc2lv
bjo6Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQoY29uc3QgSFRNTE1lZGlhRWxlbWVu
dCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBNZWRpYVBsYXllciogcGxheWVyID0gZWxlbWVudC5w
bGF5ZXIoKTsKICAgICBpZiAoIXBsYXllcikgewotICAgICAgICBMT0coTWVkaWEsICJIVE1MTWVk
aWFTZXNzaW9uOjpjdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzIC0gcmV0dXJuaW5nIEZB
TFNFIGJlY2F1c2UgcGxheWVyIGlzIE5VTEwiKTsKKyAgICAgICAgTE9HKE1lZGlhLCAiSFRNTE1l
ZGlhU2Vzc2lvbjo6Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQgLSByZXR1cm5pbmcg
RkFMU0UgYmVjYXVzZSBwbGF5ZXIgaXMgTlVMTCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgYm9vbCBpc1dpcmVsZXNzID0gcGxheWVyLT5pc0N1cnJlbnRQbGF5YmFja1Rh
cmdldFdpcmVsZXNzKCk7Ci0gICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhU2Vzc2lvbjo6Y3VycmVu
dFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcyAtIHJldHVybmluZyAlcyIsIGlzV2lyZWxlc3MgPyAi
VFJVRSIgOiAiRkFMU0UiKTsKLQotICAgIHJldHVybiBpc1dpcmVsZXNzOworICAgIGJvb2wgaXNT
dXBwb3J0ZWQgPSBwbGF5ZXItPmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKCk7Cisg
ICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhU2Vzc2lvbjo6Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNT
dXBwb3J0ZWQgLSByZXR1cm5pbmcgJXMiLCBpc1N1cHBvcnRlZCA/ICJUUlVFIiA6ICJGQUxTRSIp
OworICAgIAorICAgIHJldHVybiBpc1N1cHBvcnRlZDsKIH0KIAogdm9pZCBIVE1MTWVkaWFTZXNz
aW9uOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYgZWxl
bWVudCkKIHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpzaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIiKTsKIAotICAgIGlmICghc2hvd2luZ1BsYXliYWNrVGFyZ2V0UGlja2VyUGVy
bWl0dGVkKGVsZW1lbnQpKQorICAgIGlmIChtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVVc2VyR2Vz
dHVyZVRvU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSkgeworICAgICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNz
aW9uOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIgLSByZXR1cm5pbmcgZWFybHkgYmVjYXVzZSBv
ZiBwZXJtaXNzaW9ucyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFlbGVt
ZW50LmRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYVNl
c3Npb246OnNob3dpbmdQbGF5YmFja1RhcmdldFBpY2tlclBlcm1pdHRlZCAtIHJldHVybmluZyBl
YXJseSBiZWNhdXNlIHBhZ2UgaXMgTlVMTCIpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0g
ICAgbV9oYXZlUmVxdWVzdGVkUGxheWJhY2tUYXJnZXRQaWNrZXIgPSB0cnVlOworICAgIE1lZGlh
U2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5zZXRDdXJyZW50U2Vzc2lvbigqdGhpcyk7
CiAgICAgZWxlbWVudC5kb2N1bWVudCgpLnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihlbGVtZW50
KTsKIH0KIApAQCAtMjM4LDcgKzI0NSw3IEBAIGJvb2wgSFRNTE1lZGlhU2Vzc2lvbjo6d2lyZWxl
c3NWaWRlb1BsYXkKIAogICAgIE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBlbGVtZW50LnBsYXllcigp
OwogICAgIGlmICghcGxheWVyKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgYm9vbCBkaXNhYmxlZCA9IHBsYXllci0+d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQoKTsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZCAtIHJldHVybmluZyAlcyBiZWNhdXNlIG1lZGlhIGVuZ2lu
ZSBzYXlzIHNvIiwgZGlzYWJsZWQgPyAiVFJVRSIgOiAiRkFMU0UiKTsKQEAgLTI3Nyw4ICsyODQs
MTIgQEAgdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpzZXRIYXNQbGF5YmFja1RhcgogCiB2b2lkIEhU
TUxNZWRpYVNlc3Npb246OmRpZENob29zZVBsYXliYWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJh
Y2tUYXJnZXQmIGRldmljZSkKIHsKLSAgICBtX2hhdmVSZXF1ZXN0ZWRQbGF5YmFja1RhcmdldFBp
Y2tlciA9IGZhbHNlOwotICAgIGNsaWVudCgpLnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoZGV2
aWNlKTsKKyAgICBtX3BsYXliYWNrVGFyZ2V0LT5zZXREZXZpY2VQaWNrZXJDb250ZXh0KGRldmlj
ZS5kZXZpY2VQaWNrZXJDb250ZXh0KCkpOworICAgIGNsaWVudCgpLnNldFdpcmVsZXNzUGxheWJh
Y2tUYXJnZXQoKm1fcGxheWJhY2tUYXJnZXQuZ2V0KCkpOworICAgIGlmIChkZXZpY2UuaGFzQWN0
aXZlUm91dGUoKSAmJiBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuY3VycmVu
dFNlc3Npb24oKSA9PSB0aGlzKQorICAgICAgICBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0
KCk7CisgICAgZWxzZQorICAgICAgICBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKIH0K
IAogdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjp0YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkVGltZXJG
aXJlZCgpCkBAIC0yOTEsNiArMzAyLDggQEAgdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpleHRlcm5h
bE91dHB1dERldgogICAgIGlmIChtX2hhc1BsYXliYWNrVGFyZ2V0cyA9PSBoYXNUYXJnZXRzKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpleHRl
cm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZSAtIGhhc1RhcmdldHMgJXMiLCBoYXNU
YXJnZXRzID8gIlRSVUUiIDogIkZBTFNFIik7CisKICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0cyA9
IGhhc1RhcmdldHM7CiAgICAgaWYgKCFtX3RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRUaW1lci5p
c0FjdGl2ZSgpKQogICAgICAgICBtX3RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRUaW1lci5zdGFy
dE9uZVNob3QoMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uaAko
cmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogICAgIGJvb2wgcGFn
ZUFsbG93c1BsYXliYWNrQWZ0ZXJSZXN1bWluZyhjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29u
c3Q7CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIGJvb2wgc2hv
d2luZ1BsYXliYWNrVGFyZ2V0UGlja2VyUGVybWl0dGVkKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQm
KSBjb25zdDsKICAgICBib29sIGN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoY29uc3Qg
SFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OworICAgIGJvb2wgY3VycmVudFBsYXliYWNrVGFyZ2V0
SXNTdXBwb3J0ZWQoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OwogICAgIHZvaWQgc2hv
d1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKTsKICAgICBib29s
IGhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25z
dDsKIApAQCAtMTAyLDE2ICsxMDIsMTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2hvb3NlUGxheWJhY2tUYXJnZXQoY29uc3QgTWVkaWFQbGF5YmFja1RhcmdldCYpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5n
ZShib29sKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNQbGF5YmFj
a1RhcmdldFJvdXRlTW9uaXRvcmluZygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCByZXF1ZXN0ZWRQbGF5YmFja1RhcmdldFBpY2tlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1faGF2ZVJlcXVlc3RlZFBsYXliYWNrVGFyZ2V0UGlja2VyOyB9CiAjZW5kaWYKIAogICAgIEJl
aGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zOwogCiAjaWYgRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkKICAgICBtdXRhYmxlIFRpbWVyIG1fdGFyZ2V0QXZhaWxhYmlsaXR5
Q2hhbmdlZFRpbWVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiBt
X3BsYXliYWNrVGFyZ2V0OwogICAgIGJvb2wgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUxpc3RlbmVycyB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBib29sIG1faGFzUGxheWJhY2tUYXJn
ZXRzIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXZlUmVxdWVzdGVkUGxheWJhY2tU
YXJnZXRQaWNrZXIgeyBmYWxzZSB9OwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMiw2ICsyMTIsNyBAQCBQYWdlOjpQYWdlKFBhZ2VDb25maWd1cmF0
aW9uJiBwYWdlQ29uZmlnCiAgICAgLCBtX3VzZXJDb250ZW50Q29udHJvbGxlcihXVEY6Om1vdmUo
cGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyKSkKICAgICAsIG1fdmlzaXRl
ZExpbmtTdG9yZSgqV1RGOjptb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUp
KQogICAgICwgbV9zZXNzaW9uSUQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAg
LCBtX3BsYXliYWNrVGFyZ2V0KHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFQbGF5YmFja1RhcmdldD4o
KSkKICAgICAsIG1faXNDbG9zaW5nKGZhbHNlKQogICAgICwgbV9pc1BsYXlpbmdBdWRpbyhmYWxz
ZSkKIHsKQEAgLTE2ODEsMTAgKzE2ODIsOCBAQCB2b2lkIFBhZ2U6OnNldFNlc3Npb25JRChTZXNz
aW9uSUQgc2Vzc2lvCiB9CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQot
dm9pZCBQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb24sIGJvb2wgaXNWaWRlbykKK3ZvaWQgUGFn
ZTo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2Nh
dGlvbiwgYm9vbCBpc1ZpZGVvKQogewotICAgIG1fZG9jdW1lbnRSZXF1ZXN0aW5nUGxheWJhY2tU
YXJnZXRQaWNrZXIgPSBkb2N1bWVudDsKLQogI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyBGSVhN
RTogcmVmYWN0b3IgaU9TIGltcGxlbWVudGF0aW9uLgogICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7CkBAIC0xNjk2LDI1ICsxNjk1LDkgQEAgdm9pZCBQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQ
aWNrZXIoRG9jdQogCiB2b2lkIFBhZ2U6OmRpZENob29zZVBsYXliYWNrVGFyZ2V0KGNvbnN0IE1l
ZGlhUGxheWJhY2tUYXJnZXQmIHRhcmdldCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnRUaGF0
UmVxdWVzdGVkUGlja2VyID0gbnVsbHB0cjsKLQotICAgIG1fcGxheWJhY2tUYXJnZXQgPSBzdGQ6
Om1ha2VfdW5pcXVlPE1lZGlhUGxheWJhY2tUYXJnZXQ+KHRhcmdldC5kZXZpY2VQaWNrZXJDb250
ZXh0KCkpOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50
KCkgPT0gbV9kb2N1bWVudFJlcXVlc3RpbmdQbGF5YmFja1RhcmdldFBpY2tlcikgewotICAgICAg
ICAgICAgZG9jdW1lbnRUaGF0UmVxdWVzdGVkUGlja2VyID0gZG9jdW1lbnQ7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQorICAgIG1fcGxheWJhY2tUYXJnZXQtPnNldERldmljZVBp
Y2tlckNvbnRleHQodGFyZ2V0LmRldmljZVBpY2tlckNvbnRleHQoKSk7CisgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpCiAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kaWRDaG9vc2VQbGF5YmFj
a1RhcmdldCh0YXJnZXQpOwotICAgIH0KLQotICAgIC8vIE5vdGlmeSB0aGUgZG9jdW1lbnQgdGhh
dCByZXF1ZXN0ZWQgdGhlIGNob29zZXIgbGFzdCBiZWNhdXNlIGlmIG1vcmUgdGhhbiBvbmUgZWxl
bWVudAotICAgIC8vIGlzIHBsYXlpbmcgdGhlIGxhc3Qgb25lIHRvIHNldCB0aGUgY29udGV4dCB3
aWxsIGJlIHRoZSBvbmUgdGhhdCBhY3R1YWxseSBnZXRzIHRvCi0gICAgLy8gIHBsYXkgdG8gdGhl
IGV4dGVybmFsIGRldmljZS4KLSAgICBpZiAoZG9jdW1lbnRUaGF0UmVxdWVzdGVkUGlja2VyKQot
ICAgICAgICBkb2N1bWVudFRoYXRSZXF1ZXN0ZWRQaWNrZXItPmRpZENob29zZVBsYXliYWNrVGFy
Z2V0KHRhcmdldCk7Ci0KLSAgICBtX2RvY3VtZW50UmVxdWVzdGluZ1BsYXliYWNrVGFyZ2V0UGlj
a2VyID0gbnVsbHB0cjsKIH0KIAogdm9pZCBQYWdlOjpwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eURpZENoYW5nZShib29sIGF2YWlsYWJsZSkKQEAgLTE3MzQsMTAgKzE3MTcsNiBAQCB2b2lkIFBh
Z2U6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAobV9yZXF1aXJlc1BsYXliYWNrVGFyZ2V0TW9uaXRvcmluZyA9PSBtb25pdG9yaW5nUmVx
dWlyZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3JlcXVpcmVzUGxheWJhY2tUYXJnZXRNb25p
dG9yaW5nID0gbW9uaXRvcmluZ1JlcXVpcmVkOwotCiAgICAgaWYgKG1vbml0b3JpbmdSZXF1aXJl
ZCkKICAgICAgICAgY2hyb21lKCkuY2xpZW50KCkuc3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tU
YXJnZXRzKCk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDE4MjE4OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsNyAr
NDI2LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TXV0ZWQoYm9vbCk7
CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIHZvaWQgc2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyKERvY3VtZW50KiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBi
b29sKTsKKyAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIGJvb2wpOwogICAgIGJvb2wgaGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldDsgfQogICAgIE1lZGlhUGxh
eWJhY2tUYXJnZXQmIHBsYXliYWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gKm1fcGxheWJhY2tU
YXJnZXQuZ2V0KCk7IH0KICAgICB2b2lkIGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmlu
ZygpOwpAQCAtNTg3LDkgKzU4Nyw3IEBAIHByaXZhdGU6CiAgICAgU2Vzc2lvbklEIG1fc2Vzc2lv
bklEOwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICBEb2N1bWVu
dCogbV9kb2N1bWVudFJlcXVlc3RpbmdQbGF5YmFja1RhcmdldFBpY2tlciB7IG51bGxwdHIgfTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFQbGF5YmFja1RhcmdldD4gbV9wbGF5YmFja1Rhcmdl
dDsKLSAgICBib29sIG1fcmVxdWlyZXNQbGF5YmFja1RhcmdldE1vbml0b3JpbmcgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0IHsgZmFsc2UgfTsKICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lv
bi5jcHAJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L01lZGlhU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw2ICsyMjcsMjEgQEAgTWVk
aWFTZXNzaW9uOjpEaXNwbGF5VHlwZSBNZWRpYVNlc3Npb246OgogICAgIHJldHVybiBtX2NsaWVu
dC5kaXNwbGF5VHlwZSgpOwogfQogCitib29sIE1lZGlhU2Vzc2lvbjo6Y2FuUGxheVRvV2lyZWxl
c3NQbGF5YmFja1RhcmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2xpZW50LmNhblBsYXlU
b1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKTsKK30KKwordm9pZCBNZWRpYVNlc3Npb246OnN0YXJ0
UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQoreworICAgIGNsaWVudCgpLnN0YXJ0UGxheWluZ1Rv
UGxheWJhY2tUYXJnZXQoKTsKK30KKwordm9pZCBNZWRpYVNlc3Npb246OnN0b3BQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCgpCit7CisgICAgY2xpZW50KCkuc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFy
Z2V0KCk7Cit9CisKIFN0cmluZyBNZWRpYVNlc3Npb25DbGllbnQ6Om1lZGlhU2Vzc2lvblRpdGxl
KCkgY29uc3QKIHsKICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0yNDEsNiArMjU2LDUgQEAgZG91
YmxlIE1lZGlhU2Vzc2lvbkNsaWVudDo6bWVkaWFTZXNzaW9uQwogewogICAgIHJldHVybiBNZWRp
YVBsYXllcjo6aW52YWxpZFRpbWUoKTsKIH0KLQogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uaAkocmV2aXNpb24gMTgyMTg5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExOCwxMSArMTE4LDE0IEBAIHB1YmxpYzoKICAgICBib29sIGlzSGlkZGVuKCkg
Y29uc3Q7CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorICAgIGJvb2wg
Y2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIGNvbnN0OworICAgIHZvaWQgc3RhcnRQ
bGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworICAgIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXliYWNr
VGFyZ2V0KCk7CisKICAgICAvLyBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50CiAgICAg
dmlydHVhbCB2b2lkIGRpZENob29zZVBsYXliYWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJhY2tU
YXJnZXQmKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxPdXRwdXREZXZp
Y2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCkgY29uc3Qgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzUGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCByZXF1ZXN0ZWRQbGF5YmFj
a1RhcmdldFBpY2tlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYK
IAogcHJvdGVjdGVkOgpAQCAtMTY3LDYgKzE3MCw5IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0lS
RUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIHZpcnR1YWwgdm9pZCB3aXJlbGVzc1JvdXRlc0F2
YWlsYWJsZURpZENoYW5nZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRXaXJlbGVzc1BsYXli
YWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJhY2tUYXJnZXQmKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgY2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkgeyB9CiAjZW5kaWYKIAog
cHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNz
aW9uTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vTWVkaWFTZXNzaW9uTWFuYWdlci5jcHAJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODYsMTkgKzE4NiwxOCBAQCBib29sIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Np
b25XaWxsQmVnCiAgICAgaWYgKG1faW50ZXJydXB0ZWQpCiAgICAgICAgIGVuZEludGVycnVwdGlv
bihNZWRpYVNlc3Npb246Ok5vRmxhZ3MpOwogCi0gICAgaWYgKCFyZXN0cmljdGlvbnMgJiBDb25j
dXJyZW50UGxheWJhY2tOb3RQZXJtaXR0ZWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCisgICAg
Ym9vbCBuZXdTZXNzaW9uQ2FuUGxheVRvUGxheWJhY2tUYXJnZXQgPSBzZXNzaW9uLmNhblBsYXlU
b1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKTsKICAgICBWZWN0b3I8TWVkaWFTZXNzaW9uKj4gc2Vz
c2lvbnMgPSBtX3Nlc3Npb25zOwogICAgIGZvciAoYXV0byogb25lU2Vzc2lvbiA6IHNlc3Npb25z
KSB7CiAgICAgICAgIGlmIChvbmVTZXNzaW9uID09ICZzZXNzaW9uKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmIChvbmVTZXNzaW9uLT5tZWRpYVR5cGUoKSAhPSBzZXNzaW9uVHlw
ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocmVzdHJpY3Rpb25zICYgQ29u
Y3VycmVudFBsYXliYWNrTm90UGVybWl0dGVkKQorICAgICAgICBpZiAobmV3U2Vzc2lvbkNhblBs
YXlUb1BsYXliYWNrVGFyZ2V0KQorICAgICAgICAgICAgb25lU2Vzc2lvbi0+c3RvcFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KCk7CisgICAgICAgIGlmIChvbmVTZXNzaW9uLT5tZWRpYVR5cGUoKSA9
PSBzZXNzaW9uVHlwZSAmJiByZXN0cmljdGlvbnMgJiBDb25jdXJyZW50UGxheWJhY2tOb3RQZXJt
aXR0ZWQpCiAgICAgICAgICAgICBvbmVTZXNzaW9uLT5wYXVzZVNlc3Npb24oKTsKICAgICB9Ci0g
ICAgCisgICAgc2Vzc2lvbi5zdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7CisKICAgICB1
cGRhdGVTZXNzaW9uU3RhdGUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmgJKHJl
dmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vz
c2lvbk1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGhhc1dpcmVsZXNzVGFyZ2V0c0F2YWlsYWJsZSgpIHsgcmV0dXJuIGZh
bHNlOyB9CiAjZW5kaWYKIAorICAgIHZvaWQgc2V0Q3VycmVudFNlc3Npb24oTWVkaWFTZXNzaW9u
Jik7CisgICAgTWVkaWFTZXNzaW9uKiBjdXJyZW50U2Vzc2lvbigpOworCiBwcm90ZWN0ZWQ6CiAg
ICAgZnJpZW5kIGNsYXNzIE1lZGlhU2Vzc2lvbjsKICAgICBleHBsaWNpdCBNZWRpYVNlc3Npb25N
YW5hZ2VyKCk7CkBAIC05Miw5ICs5NSw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGFkZFNlc3Np
b24oTWVkaWFTZXNzaW9uJik7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uKE1lZGlhU2Vzc2lvbiYp
OwogCi0gICAgdm9pZCBzZXRDdXJyZW50U2Vzc2lvbihNZWRpYVNlc3Npb24mKTsKLSAgICBNZWRp
YVNlc3Npb24qIGN1cnJlbnRTZXNzaW9uKCk7Ci0KICAgICBWZWN0b3I8TWVkaWFTZXNzaW9uKj4g
c2Vzc2lvbnMoKSB7IHJldHVybiBtX3Nlc3Npb25zOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1Rh
cmdldC5oCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDEx
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0RGV2aWNlUGlja2VyQ29udGV4dChBVk91dHB1dENv
bnRleHQgKmNvbnRleHQpIHsgbV9kZXZpY2VQaWNrZXJDb250ZXh0ID0gY29udGV4dDsgfQogICAg
IEFWT3V0cHV0Q29udGV4dCAqZGV2aWNlUGlja2VyQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGV2aWNlUGlja2VyQ29udGV4dC5nZXQoKTsgfQorICAgIGJvb2wgaGFzQWN0aXZlUm91dGUoKSBj
b25zdDsKKyNlbHNlCisgICAgdm9pZCBzZXREZXZpY2VQaWNrZXJDb250ZXh0KEFWT3V0cHV0Q29u
dGV4dCAqKSB7IH0KKyAgICBBVk91dHB1dENvbnRleHQgKmRldmljZVBpY2tlckNvbnRleHQoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgYm9vbCBoYXNBY3RpdmVSb3V0ZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWJhY2tUYXJnZXRQaWNrZXJDbGllbnQuaAkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCkgY29uc3QgPSAw
OwogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzUGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3Jp
bmcoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHJlcXVlc3RlZFBsYXliYWNrVGFyZ2V0
UGlja2VyKCkgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAko
cmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDMsNiArODQzLDExIEBAIGJvb2wgTWVk
aWFQbGF5ZXI6OmlzQ3VycmVudFBsYXliYWNrVGFyZ2UKICAgICByZXR1cm4gbV9wcml2YXRlLT5p
c0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCk7CiB9CiAKK2Jvb2wgTWVkaWFQbGF5ZXI6
OmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5pc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCgpOworfQorCiBTdHJp
bmcgTWVkaWFQbGF5ZXI6OndpcmVsZXNzUGxheWJhY2tUYXJnZXROYW1lKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9wcml2YXRlLT53aXJlbGVzc1BsYXliYWNrVGFyZ2V0TmFtZSgpOwpAQCAtODY4
LDEwICs4NzMsMjUgQEAgdm9pZCBNZWRpYVBsYXllcjo6Y3VycmVudFBsYXliYWNrVGFyZ2V0SQog
ICAgIG1fY2xpZW50Lm1lZGlhUGxheWVyQ3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0No
YW5nZWQodGhpcyk7CiB9CiAKK2Jvb2wgTWVkaWFQbGF5ZXI6OmNhblBsYXlUb1dpcmVsZXNzUGxh
eWJhY2tUYXJnZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmNhblBsYXlUb1dp
cmVsZXNzUGxheWJhY2tUYXJnZXQoKTsKK30KKwogdm9pZCBNZWRpYVBsYXllcjo6c2V0V2lyZWxl
c3NQbGF5YmFja1RhcmdldChjb25zdCBNZWRpYVBsYXliYWNrVGFyZ2V0JiBkZXZpY2UpCiB7CiAg
ICAgbV9wcml2YXRlLT5zZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KGRldmljZSk7CiB9CisKK3Zv
aWQgTWVkaWFQbGF5ZXI6OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQoreworICAgIG1f
cHJpdmF0ZS0+c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworfQorCit2b2lkIE1lZGlh
UGxheWVyOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQoreworICAgIG1fcHJpdmF0ZS0+
c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Cit9CiAjZW5kaWYKIAogZG91YmxlIE1lZGlh
UGxheWVyOjptYXhGYXN0Rm9yd2FyZFJhdGUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCShyZXZpc2lvbiAxODIxODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NjYsNiArNDY2LDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkKICAgICBib29sIGlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxl
c3MoKSBjb25zdDsKKyAgICBib29sIGlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKCkg
Y29uc3Q7CiAKICAgICBlbnVtIFdpcmVsZXNzUGxheWJhY2tUYXJnZXRUeXBlIHsgVGFyZ2V0VHlw
ZU5vbmUsIFRhcmdldFR5cGVBaXJQbGF5LCBUYXJnZXRUeXBlVFZPdXQgfTsKICAgICBXaXJlbGVz
c1BsYXliYWNrVGFyZ2V0VHlwZSB3aXJlbGVzc1BsYXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0OwpA
QCAtNDc4LDcgKzQ3OSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjdXJyZW50UGxheWJhY2tUYXJn
ZXRJc1dpcmVsZXNzQ2hhbmdlZCgpOwogICAgIHZvaWQgcGxheWJhY2tUYXJnZXRBdmFpbGFiaWxp
dHlDaGFuZ2VkKCk7CiAKKyAgICBib29sIGNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQo
KSBjb25zdDsKICAgICB2b2lkIHNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoY29uc3QgTWVkaWFQ
bGF5YmFja1RhcmdldCYpOworCisgICAgdm9pZCBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0
KCk7CisgICAgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKICNlbmRpZgogCiAg
ICAgZG91YmxlIG1pbkZhc3RSZXZlcnNlUmF0ZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgJKHJl
dmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsMTQgKzE2MSwxOSBAQCBwdWJs
aWM6CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIHZpcnR1YWwg
Ym9vbCBpc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIFN0cmluZyB3aXJlbGVzc1Bs
YXliYWNrVGFyZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KICAgICB2
aXJ0dWFsIE1lZGlhUGxheWVyOjpXaXJlbGVzc1BsYXliYWNrVGFyZ2V0VHlwZSB3aXJlbGVzc1Bs
YXliYWNrVGFyZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIE1lZGlhUGxheWVyOjpUYXJnZXRUeXBl
Tm9uZTsgfQogCi0gICAgdmlydHVhbCBib29sIHdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgd2lyZWxlc3NWaWRl
b1BsYXliYWNrRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKGJvb2wpIHsgfQogCisgICAgdmly
dHVhbCBib29sIGNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KGNv
bnN0IE1lZGlhUGxheWJhY2tUYXJnZXQmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzdGFydFBs
YXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0b3BQbGF5aW5n
VG9QbGF5YmFja1RhcmdldCgpIHsgfQogI2VuZGlmCiAKICNpZiBVU0UoTkFUSVZFX0ZVTExTQ1JF
RU5fVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vTWVkaWFQbGF5YmFja1RhcmdldE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5YmFja1RhcmdldE1h
Yy5tbQkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWJhY2tUYXJnZXRNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQp
ICYmICFQTEFURk9STShJT1MpCiAKLSNpbXBvcnQgPFdlYkNvcmUvTWVkaWFQbGF5YmFja1Rhcmdl
dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9BVkZvdW5kYXRpb25TUEkuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU29mdExpbmtpbmcuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgogCkBAIC02Myw2ICs2
MywxMiBAQCBib29sIE1lZGlhUGxheWJhY2tUYXJnZXQ6OmRlY29kZShOU0tleWVkCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2Jvb2wgTWVkaWFQbGF5YmFja1RhcmdldDo6aGFzQWN0aXZlUm91dGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX2RldmljZVBpY2tlckNvbnRleHQgJiYgbV9kZXZpY2VQ
aWNrZXJDb250ZXh0LmdldCgpLmRldmljZU5hbWU7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBM
QVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb24uY3BwCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE5LDcgKzYxOSw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjptZXQKIAogdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246OnJhdGVDaGFuZ2VkKCkKIHsKLSNpZiBFTkFCTEUoV0lSRUxFU1NfUExB
WUJBQ0tfVEFSR0VUKQorI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmIFBM
QVRGT1JNKElPUykKICAgICBpZiAoaXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpKQog
ICAgICAgICBtX3BsYXllci0+aGFuZGxlUGxheWJhY2tDb21tYW5kKHJhdGUoKSA/IE1lZGlhU2Vz
c2lvbjo6UGxheUNvbW1hbmQgOiBNZWRpYVNlc3Npb246OlBhdXNlQ29tbWFuZCk7CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDYgKzI4MSwxMCBA
QCBwcml2YXRlOgogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHNldFdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlRGlzYWJsZUV4dGVy
bmFsUGxheWJhY2soKTsKKyAgICBib29sIGNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5n
VG9QbGF5YmFja1RhcmdldCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWlu
Z1RvUGxheWJhY2tUYXJnZXQoKSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBkb3Vi
bGUgbWF4RmFzdEZvcndhcmRSYXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jYWNoZWRD
YW5QbGF5RmFzdEZvcndhcmQgPyBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5
KCkgOiAyLjA7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkocmV2aXNpb24gMTgyMTg5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzQ3LDcgKzM0Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIE5TQXJyYXkgKmFz
c2V0TWV0YWRhdGFLZXlOYW1lcygpOwogc3RhdGljIE5TQXJyYXkgKml0ZW1LVk9Qcm9wZXJ0aWVz
KCk7Ci1zdGF0aWMgTlNBcnJheSogYXNzZXRUcmFja01ldGFkYXRhS2V5TmFtZXMoKTsKK3N0YXRp
YyBOU0FycmF5ICphc3NldFRyYWNrTWV0YWRhdGFLZXlOYW1lcygpOworc3RhdGljIE5TQXJyYXkg
KnBsYXllcktWT1Byb3BlcnRpZXMoKTsKIAogI2lmICFMT0dfRElTQUJMRUQKIHN0YXRpYyBjb25z
dCBjaGFyICpib29sU3RyaW5nKGJvb2wgdmFsKQpAQCAtNTQ1LDExICs1NDYsOSBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgICAgIGlmIChtX3RpbWVPYnNl
cnZlcikKICAgICAgICAgICAgIFttX2F2UGxheWVyLmdldCgpIHJlbW92ZVRpbWVPYnNlcnZlcjpt
X3RpbWVPYnNlcnZlci5nZXQoKV07CiAgICAgICAgIG1fdGltZU9ic2VydmVyID0gbmlsOwotICAg
ICAgICBbbV9hdlBsYXllci5nZXQoKSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQo
KSBmb3JLZXlQYXRoOkAicmF0ZSJdOwotI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCi0gICAgICAgIFttX2F2UGxheWVyLmdldCgpIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2Vy
dmVyLmdldCgpIGZvcktleVBhdGg6QCJleHRlcm5hbFBsYXliYWNrQWN0aXZlIl07Ci0gICAgICAg
IFttX2F2UGxheWVyLmdldCgpIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZv
cktleVBhdGg6QCJvdXRwdXRDb250ZXh0Il07Ci0jZW5kaWYKKworICAgICAgICBmb3IgKE5TU3Ry
aW5nICprZXlOYW1lIGluIHBsYXllcktWT1Byb3BlcnRpZXMoKSkKKyAgICAgICAgICAgIFttX2F2
UGxheWVyLmdldCgpIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBh
dGg6a2V5TmFtZV07CiAgICAgICAgIG1fYXZQbGF5ZXIgPSBuaWw7CiAgICAgfQogCkBAIC05Mjcs
MjggKzkyNiwyMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAg
ICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CiAKICAgICBtX2F2UGxheWVyID0gYWRvcHROUyhb
YWxsb2NBVlBsYXllckluc3RhbmNlKCkgaW5pdF0pOwotICAgIFttX2F2UGxheWVyLmdldCgpIGFk
ZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6QCJyYXRlIiBvcHRpb25z
Ok5TS2V5VmFsdWVPYnNlcnZpbmdPcHRpb25OZXcgY29udGV4dDoodm9pZCAqKU1lZGlhUGxheWVy
QVZGb3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0UGxheWVyXTsKLSNpZiBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIFttX2F2UGxheWVyLmdldCgpIGFkZE9ic2VydmVyOm1f
b2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6QCJleHRlcm5hbFBsYXliYWNrQWN0aXZlIiBv
cHRpb25zOk5TS2V5VmFsdWVPYnNlcnZpbmdPcHRpb25OZXcgY29udGV4dDoodm9pZCAqKU1lZGlh
UGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0UGxheWVyXTsKLSAgICBbbV9hdlBs
YXllci5nZXQoKSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAi
b3V0cHV0Q29udGV4dCIgb3B0aW9uczpOU0tleVZhbHVlT2JzZXJ2aW5nT3B0aW9uTmV3IGNvbnRl
eHQ6KHZvaWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXll
cl07Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAg
dXBkYXRlRGlzYWJsZUV4dGVybmFsUGxheWJhY2soKTsKLSNlbmRpZgorICAgIGZvciAoTlNTdHJp
bmcgKmtleU5hbWUgaW4gcGxheWVyS1ZPUHJvcGVydGllcygpKQorICAgICAgICBbbV9hdlBsYXll
ci5nZXQoKSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOmtleU5h
bWUgb3B0aW9uczpOU0tleVZhbHVlT2JzZXJ2aW5nT3B0aW9uTmV3IGNvbnRleHQ6KHZvaWQgKilN
ZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllcl07CiAKICNpZiBI
QVZFKEFWRk9VTkRBVElPTl9NRURJQV9TRUxFQ1RJT05fR1JPVVApICYmIEhBVkUoQVZGT1VOREFU
SU9OX0xFR0lCTEVfT1VUUFVUX1NVUFBPUlQpCiAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgc2V0QXBw
bGllc01lZGlhU2VsZWN0aW9uQ3JpdGVyaWFBdXRvbWF0aWNhbGx5Ok5PXTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICB1cGRhdGVEaXNhYmxlRXh0
ZXJuYWxQbGF5YmFjaygpOwogICAgIFttX2F2UGxheWVyLmdldCgpIHNldEFsbG93c0V4dGVybmFs
UGxheWJhY2s6bV9hbGxvd3NXaXJlbGVzc1ZpZGVvUGxheWJhY2tdOwotI2VuZGlmCiAKLSNpZiBF
TkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQorI2lmICFQ
TEFURk9STShJT1MpCiAgICAgaWYgKG1fb3V0cHV0Q29udGV4dCkKICAgICAgICAgbV9hdlBsYXll
ci5nZXQoKS5vdXRwdXRDb250ZXh0ID0gbV9vdXRwdXRDb250ZXh0LmdldCgpOwogI2VuZGlmCisj
ZW5kaWYKIAogICAgIGlmIChwbGF5ZXIoKS0+Y2xpZW50KCkubWVkaWFQbGF5ZXJJc1ZpZGVvKCkp
CiAgICAgICAgIGNyZWF0ZUFWUGxheWVyTGF5ZXIoKTsKQEAgLTI3MzEsOCArMjcyNCwxNCBAQCBT
dHJpbmcgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqCiB7CiAgICAgaWYgKCFtX2F2
UGxheWVyKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAKLSAgICBTdHJpbmcg
d2lyZWxlc3NUYXJnZXROYW1lID0gd2tFeGVybmFsRGV2aWNlRGlzcGxheU5hbWVGb3JQbGF5ZXIo
bV9hdlBsYXllci5nZXQoKSk7CisKKyAgICBTdHJpbmcgd2lyZWxlc3NUYXJnZXROYW1lOworI2lm
ICFQTEFURk9STShJT1MpCisgICAgaWYgKG1fb3V0cHV0Q29udGV4dCkKKyAgICAgICAgd2lyZWxl
c3NUYXJnZXROYW1lID0gbV9vdXRwdXRDb250ZXh0LmdldCgpLmRldmljZU5hbWU7CisjZWxzZQor
ICAgIHdpcmVsZXNzVGFyZ2V0TmFtZSA9IHdrRXhlcm5hbERldmljZURpc3BsYXlOYW1lRm9yUGxh
eWVyKG1fYXZQbGF5ZXIuZ2V0KCkpOworI2VuZGlmCiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2lyZWxlc3NQbGF5YmFja1RhcmdldE5hbWUoJXAp
IC0gcmV0dXJuaW5nICVzIiwgdGhpcywgd2lyZWxlc3NUYXJnZXROYW1lLnV0ZjgoKS5kYXRhKCkp
OwogCiAgICAgcmV0dXJuIHdpcmVsZXNzVGFyZ2V0TmFtZTsKQEAgLTI3NTYsMjIgKzI3NTUsNDIg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGlmICghbV9h
dlBsYXllcikKICAgICAgICAgcmV0dXJuOwogCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7
CiAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgc2V0QWxsb3dzRXh0ZXJuYWxQbGF5YmFjazohZGlzYWJs
ZWRdOworICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKIH0KIAogI2lmICFQTEFURk9STShJ
T1MpCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNz
UGxheWJhY2tUYXJnZXQoY29uc3QgTWVkaWFQbGF5YmFja1RhcmdldCYgdGFyZ2V0KQogewogICAg
IG1fb3V0cHV0Q29udGV4dCA9IHRhcmdldC5kZXZpY2VQaWNrZXJDb250ZXh0KCk7Ci0KICAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRXaXJlbGVz
c1BsYXliYWNrVGFyZ2V0KCVwKSAtIHRhcmdldCA9ICVwIiwgdGhpcywgbV9vdXRwdXRDb250ZXh0
LmdldCgpKTsKK30KKyNlbmRpZgogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQorewogICAgIGlmICghbV9hdlBs
YXllcikKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKFttX2F2UGxheWVyLmdldCgpLm91dHB1
dENvbnRleHQgaXNFcXVhbDptX291dHB1dENvbnRleHQuZ2V0KCldKQorICAgICAgICByZXR1cm47
CisKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKICAgICBtX2F2UGxheWVyLmdldCgpLm91
dHB1dENvbnRleHQgPSBtX291dHB1dENvbnRleHQuZ2V0KCk7CisgICAgc2V0RGVsYXlDYWxsYmFj
a3MoZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpCit7CisgICAgaWYgKCFtX2F2UGxheWVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICAvLyBG
SVhNRTogdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBvbmNlIHJkYXI6Ly8yMDMzNTIxNyBo
YXMgYmVlbiBmaXhlZC4KKyAgICAvLyBtX2F2UGxheWVyLmdldCgpLm91dHB1dENvbnRleHQgPSBu
aWw7CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwogfQotI2VuZGlmCiAKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlRGlzYWJsZUV4dGVybmFsUGxh
eWJhY2soKQogewpAQCAtMzA4NCw2ICszMTAzLDE1IEBAIE5TQXJyYXkqIGFzc2V0VHJhY2tNZXRh
ZGF0YUtleU5hbWVzKCkKICAgICByZXR1cm4ga2V5czsKIH0KIAorTlNBcnJheSogcGxheWVyS1ZP
UHJvcGVydGllcygpCit7CisgICAgc3RhdGljIE5TQXJyYXkqIGtleXMgPSBbW05TQXJyYXkgYWxs
b2NdIGluaXRXaXRoT2JqZWN0czpAInJhdGUiLAorI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFD
S19UQVJHRVQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQCJleHRlcm5hbFBsYXliYWNr
QWN0aXZlIiwgQCJvdXRwdXRDb250ZXh0IiwgQCJhbGxvd3NFeHRlcm5hbFBsYXliYWNrIiwKKyNl
bmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF07CisgICAgcmV0dXJuIGtleXM7
Cit9CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlQVZG
TW92aWVPYnNlcnZlcgpAQCAtMzIwMCw5ICszMjI4LDcgQEAgLSAodm9pZClvYnNlcnZlVmFsdWVG
b3JLZXlQYXRoOmtleVBhdGggbwogICAgICAgICBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5n
OkAicmF0ZSJdKQogICAgICAgICAgICAgZnVuY3Rpb24gPSBXVEY6OmJpbmQoJk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnJhdGVEaWRDaGFuZ2UsIG1fY2FsbGJhY2ssIFtuZXdW
YWx1ZSBkb3VibGVWYWx1ZV0pOwogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQp
Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAImV4dGVybmFsUGxh
eWJhY2tBY3RpdmUiXSkKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gV1RGOjpiaW5kKCZNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF5YmFja1RhcmdldElzV2lyZWxlc3NEaWRD
aGFuZ2UsIG1fY2FsbGJhY2spOwotICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9T
dHJpbmc6QCJvdXRwdXRDb250ZXh0Il0pCisgICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1
YWxUb1N0cmluZzpAImV4dGVybmFsUGxheWJhY2tBY3RpdmUiXSB8fCBba2V5UGF0aCBpc0VxdWFs
VG9TdHJpbmc6QCJvdXRwdXRDb250ZXh0Il0gfHwgW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAi
YWxsb3dzRXh0ZXJuYWxQbGF5YmFjayJdKQogICAgICAgICAgICAgZnVuY3Rpb24gPSBXVEY6OmJp
bmQoJk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXliYWNrVGFyZ2V0SXNX
aXJlbGVzc0RpZENoYW5nZSwgbV9jYWxsYmFjayk7CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMuaAkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsMTQgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY29ycnVwdGVkVmlkZW9GcmFtZXMoKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIE1lZGlhVGltZSB0b3RhbEZyYW1lRGVsYXkoKSBvdmVycmlk
ZTsKIAorI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgdmlydHVhbCBi
b29sIGlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoY29uc3QgTWVkaWFQbGF5
YmFja1RhcmdldCYpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFy
Z2V0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN0b3BQbGF5aW5nVG9QbGF5YmFja1Rh
cmdldCgpIG92ZXJyaWRlOworICAgIHZvaWQgdG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQo
KTsKKyNlbmRpZgorCiAgICAgdm9pZCBlbnN1cmVMYXllcigpOwogICAgIHZvaWQgZGVzdHJveUxh
eWVyKCk7CiAgICAgYm9vbCBzaG91bGRCZVBsYXlpbmcoKSBjb25zdDsKQEAgLTIxMiw2ICsyMjAs
MTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2Vla0NvbXBsZXRlZDsKICAgICBtdXRhYmxlIGJv
b2wgbV9sb2FkaW5nUHJvZ3Jlc3NlZDsKICAgICBib29sIG1faGFzQXZhaWxhYmxlVmlkZW9GcmFt
ZTsKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorICAgIHN0ZDo6dW5pcXVl
X3B0cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiBtX3BsYXliYWNrVGFyZ2V0OworICAgIGJvb2wgbV9j
dXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCB7IHRydWUgfTsKKyNlbmRpZgogfTsKIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQkocmV2aXNpb24gMTgyMTg5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MDYs
NiArODA2LDQyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmoKICAg
ICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCk7CiB9CiAKKyNpZiBFTkFCTEUoV0lS
RUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fcGxheWJhY2tUYXJnZXQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0
dXJuICFtX3BsYXliYWNrVGFyZ2V0LT5oYXNBY3RpdmVSb3V0ZSgpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0V2lyZWxlc3NQbGF5YmFja1Rhcmdl
dChjb25zdCBNZWRpYVBsYXliYWNrVGFyZ2V0JiB0YXJnZXQpCit7CisgICAgaWYgKCFtX3BsYXli
YWNrVGFyZ2V0KQorICAgICAgICBtX3BsYXliYWNrVGFyZ2V0ID0gc3RkOjptYWtlX3VuaXF1ZTxN
ZWRpYVBsYXliYWNrVGFyZ2V0PigpOworICAgIG1fcGxheWJhY2tUYXJnZXQtPnNldERldmljZVBp
Y2tlckNvbnRleHQodGFyZ2V0LmRldmljZVBpY2tlckNvbnRleHQoKSk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp0b2dnbGVQbGF5aW5nVG9QbGF5YmFj
a1RhcmdldCgpCit7CisgICAgYm9vbCBvbGRTdXBwb3J0ZWQgPSBtX2N1cnJlbnRQbGF5YmFja1Rh
cmdldElzU3VwcG9ydGVkOworICAgIG1fY3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQg
PSAhbV9wbGF5YmFja1RhcmdldCB8fCAhbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUo
KTsKKworICAgIGlmIChtX3BsYXllciAmJiBvbGRTdXBwb3J0ZWQgIT0gbV9jdXJyZW50UGxheWJh
Y2tUYXJnZXRJc1N1cHBvcnRlZCkKKyAgICAgICAgbV9wbGF5ZXItPmN1cnJlbnRQbGF5YmFja1Rh
cmdldElzV2lyZWxlc3NDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3sKKyAgICB0
b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3sK
KyAgICB0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworfQorI2VuZGlmCisKIH0KIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQ
bGF5ZXJQcml2YXRlUVRLaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQuaAkocmV2aXNpb24gMTgyMTg5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJp
dmF0ZVFUS2l0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw2ICsxNzksMTQgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuICJR
VEtpdCI7IH0KICAgICB2aXJ0dWFsIGxvbmcgcGxhdGZvcm1FcnJvckNvZGUoKSBjb25zdDsKIAor
I2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgdmlydHVhbCBib29sIGlz
Q3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIHNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoY29uc3QgTWVkaWFQbGF5YmFja1Rh
cmdldCYpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgp
IG92ZXJyaWRlOworICAgIHZvaWQgdG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKKyNl
bmRpZgorCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwogICAgIFJldGFpblB0cjxRVE1vdmll
PiBtX3F0TW92aWU7CiAgICAgUmV0YWluUHRyPFFUVmlkZW9SZW5kZXJlcldlYktpdE9ubHk+IG1f
cXRWaWRlb1JlbmRlcmVyOwpAQCAtMjA2LDYgKzIxNCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9wcml2YXRlQnJvd3Npbmc7CiAgICAgbXV0YWJsZSBNZWRpYVRpbWUgbV9tYXhUaW1lTG9hZGVk
QXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzOwogICAgIG11dGFibGUgRmxvYXRTaXplIG1fY2FjaGVk
TmF0dXJhbFNpemU7CisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWVkaWFQbGF5YmFja1RhcmdldD4gbV9wbGF5YmFja1RhcmdldDsKKyAg
ICBib29sIG1fY3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQgeyB0cnVlIH07CisjZW5k
aWYKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9N
ZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHJldmlzaW9u
IDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBs
YXllclByaXZhdGVRVEtpdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTU0MCw2ICsxNTQwLDQyIEBA
IGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmNhblNhdmVNZWQKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorYm9vbCBNZWRp
YVBsYXllclByaXZhdGVRVEtpdDo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQoKSBj
b25zdAoreworICAgIGlmICghbV9wbGF5YmFja1RhcmdldCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gIW1fcGxheWJhY2tUYXJnZXQtPmhhc0FjdGl2ZVJvdXRlKCk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQo
Y29uc3QgTWVkaWFQbGF5YmFja1RhcmdldCYgdGFyZ2V0KQoreworICAgIGlmICghbV9wbGF5YmFj
a1RhcmdldCkKKyAgICAgICAgbV9wbGF5YmFja1RhcmdldCA9IHN0ZDo6bWFrZV91bmlxdWU8TWVk
aWFQbGF5YmFja1RhcmdldD4oKTsKKyAgICBtX3BsYXliYWNrVGFyZ2V0LT5zZXREZXZpY2VQaWNr
ZXJDb250ZXh0KHRhcmdldC5kZXZpY2VQaWNrZXJDb250ZXh0KCkpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0Ojp0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpCit7Cisg
ICAgYm9vbCBvbGRTdXBwb3J0ZWQgPSBtX2N1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVk
OworICAgIG1fY3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQgPSAhbV9wbGF5YmFja1Rh
cmdldCB8fCAhbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUoKTsKKworICAgIGlmICht
X3BsYXllciAmJiBvbGRTdXBwb3J0ZWQgIT0gbV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBv
cnRlZCkKKyAgICAgICAgbV9wbGF5ZXItPmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3ND
aGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnN0YXJ0UGxheWlu
Z1RvUGxheWJhY2tUYXJnZXQoKQoreworICAgIHRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0
KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnN0b3BQbGF5aW5nVG9QbGF5
YmFja1RhcmdldCgpCit7CisgICAgdG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKK30K
KyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJD
b3JlTW92aWVPYnNlcnZlcgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249856</attachid>
            <date>2015-03-31 14:57:51 -0700</date>
            <delta_ts>2015-04-01 11:09:45 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>mse_patch_9.txt</filename>
            <type>text/plain</type>
            <size>50407</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBAQAorMjAxNS0wMy0zMSAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBEbyBub3Qg
aW5jbHVkZSByb3V0ZSBidXR0b24gaWYgZWxlbWVudCBkb2VzIG5vdCBzdXBwb3J0IHRhcmdldCBw
bGF5YmFjaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQzMjUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzOgorICAgICAgICAo
Q29udHJvbGxlci5wcm90b3R5cGUuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcyk6IFJl
dHVybiBmYWxzZSBpZiB0YXJnZXQgcGxheWJhY2sgaXMgZGlzYWJsZWQuCisgICAgICAgIChDb250
cm9sbGVyLnByb3RvdHlwZS51cGRhdGVXaXJlbGVzc1RhcmdldEF2YWlsYWJsZSk6IERvIG5vdCBz
aG93IHRoZSBwaWNrZXIgaWYgdGFyZ2V0IAorICAgICAgICAgICAgcGxheWJhY2sgaXMgZGlzYWJs
ZWQuCisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5oYW5kbGVXaXJlbGVzc1BsYXliYWNr
Q2hhbmdlKTogQ2FsbCB1cGRhdGVXaXJlbGVzc1RhcmdldEF2YWlsYWJsZS4KKworICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyKTogVXBkYXRlIGZvciBQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQaWNr
ZXIgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZENob29zZVBsYXliYWNr
VGFyZ2V0KTogTm90aWZ5IGNsaWVudHMgaW4gdmVjdG9yLW9yZGVyLCBsb3dlciBsZXZlbCBjb2Rl
CisgICAgICAgICAgICBub3cgdHJhY2tzIHdoaWNoIG9uZSByZXF1ZXN0ZWQgdGhlIHBpY2tlci4K
KworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UpOiBEb24ndCBjYWxsIGFwcGx5TWVkaWFQ
bGF5ZXJSZXN0cmljdGlvbnMsIGl0IGlzIGRvbmUKKyAgICAgICAgICAgIGluIG1lZGlhUGxheWVy
RW5naW5lRmFpbGVkVG9Mb2FkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
c2V0UmVhZHlTdGF0ZSk6IEVucXVldWUgYSB0YXJnZXQgYXZhaWxhYmlsaXR5IGV2ZW50IGlmIHRo
ZXJlIGFyZQorICAgICAgICAgICAgbGlzdGVuZXJzIHJlYWR5U3RhdGUgcmVhY2hlcyBIQVZFX01F
VEFEQVRBIHNvIGNvbnRyb2xzIGFyZSBzZXR1cCBjb3JyZWN0bHkuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckVuZ2luZUZhaWxlZFRvTG9hZCk6IENhbGwg
YXBwbHlNZWRpYVBsYXllclJlc3RyaWN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmNsZWFyTWVkaWFQbGF5ZXIpOiBFbnF1ZXVlIGEgdGFyZ2V0IGF2YWlsYWJpbGl0
eSBldmVudCBpbiBzbyBjb250cm9scworICAgICAgICAgICAgaGF2ZSBhIGNoYW5jZSB0byBoaWRl
IHRoZSBwaWNrZXIuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp3ZWJraXRD
dXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCk6IE5ldywgcGFzc3Rocm91Z2ggdG8gdGhl
CisgICAgICAgICAgICBtZWRpYSBlbmdpbmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzdG9wUGxheWlu
Z1RvUGxheWJhY2tUYXJnZXQpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRsOgorCisgICAgICAgICog
aHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNl
c3Npb246OkhUTUxNZWRpYVNlc3Npb24pOiBJbml0aWFsaXplIG1fcGxheWJhY2tUYXJnZXQuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpjdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1N1cHBvcnRlZCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcik6IFB1bGwgbG9naWMgZnJvbSBzaG93aW5nUGxheWJhY2tU
YXJnZXRQaWNrZXJQZXJtaXR0ZWQgCisgICAgICAgICAgICBpbmxpbmUuIERvbid0IHJlZnVzZSB0
byBzaG93IGEgcGlja2VyIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3Qgc3VwcG9ydCB0YXJnZXQgcGxh
eWJhY2ssIGl0IGlzIHVwCisgICAgICAgICAgICB0byBzY3JpcHQgdG8gZGVjaWRlIHdoaWNoIGVs
ZW1lbnRzIGNhbiBkaXNwbGF5IGEgcGlja2VyLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
U2Vzc2lvbjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOiBSZXR1cm4gdHJ1ZSBpZiB0
aGVyZSBpcyBubyBwbGF5ZXIuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpk
aWRDaG9vc2VQbGF5YmFja1RhcmdldCk6IENhbGwgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1Rhcmdl
dCBvciAKKyAgICAgICAgICAgIHN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCBiZWNhdXNlIHNl
dFdpcmVsZXNzUGxheWJhY2tUYXJnZXQgZG9lc24ndCBhcHBseSB0aGUgdGFyZ2V0LgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFi
bGVEaWRDaGFuZ2UpOiBBZGQgbG9nZ2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNl
c3Npb246OnNob3dpbmdQbGF5YmFja1RhcmdldFBpY2tlclBlcm1pdHRlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmg6CisKKyAgICAgICAgKiBwYWdlL1BhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6IEluaXRpYWxpemUgbV9wbGF5YmFj
a1RhcmdldC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNob3dQbGF5YmFja1RhcmdldFBpY2tl
cik6IERvbid0IHNldCBtX2RvY3VtZW50UmVxdWVzdGluZ1BsYXliYWNrVGFyZ2V0UGlja2VyLgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQpOiBOb3RpZnkg
UGFnZXMgaW4gdmVjdG9yLW9yZGVyLCBsb3dlciBsZXZlbCBjb2RlCisgICAgICAgICAgICBub3cg
dHJhY2tzIHdoaWNoIG9uZSByZXF1ZXN0ZWQgdGhlIHBpY2tlci4KKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZyk6IERvbid0IHRyYWNrIG1f
cmVxdWlyZXNQbGF5YmFja1RhcmdldE1vbml0b3JpbmcsIGl0CisgICAgICAgICAgICBpcyB0b28g
ZWFzeSBmb3IgaXQgdG8gZ2V0IG91dCBvZiBzeW5jIHdpdGggdGhlIFVJIHByb2Nlc3Mgc3RhdGUu
CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9NZWRp
YVNlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uOjpjYW5QbGF5VG9X
aXJlbGVzc1BsYXliYWNrVGFyZ2V0KTogTmV3LCBjbGllbnQgcGFzc3Rocm91Z2guCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVNlc3Npb246OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbjo6c3RvcFBsYXlpbmdUb1BsYXli
YWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25DbGllbnQ6OmNhblBsYXlUb1dpcmVs
ZXNzUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uQ2xpZW50
OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U2Vzc2lvbkNsaWVudDo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KToKKworICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTZXNzaW9uTWFuYWdlcjo6c2Vzc2lvbldpbGxCZWdpblBsYXliYWNrKTogQ2FsbCBz
dGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0ICYKKyAgICAgICAgICAgIHN0b3BQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCBhcyBuZWNlc3NhcnkuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVk
aWFTZXNzaW9uTWFuYWdlci5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5YmFja1RhcmdldC5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldDo6
aGFzQWN0aXZlUm91dGUpOiBOZXcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjppc0N1cnJl
bnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCk6IE5ldywgZW5naW5lIHBhc3N0aHJvdWdoLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJn
ZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpzdGFydFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUlu
dGVyZmFjZTo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6
OmNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6c3RvcFBsYXlp
bmdUb1BsYXliYWNrVGFyZ2V0KToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9NZWRpYVBsYXliYWNrVGFyZ2V0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5YmFja1RhcmdldDo6aGFzQWN0aXZlUm91dGUpOiBOZXcuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6Y2FuY2VsTG9hZCk6IFVzZSBwbGF5ZXJLVk9Qcm9wZXJ0aWVzLiBEcml2
ZS1ieQorICAgICAgICAgICAgY29kZSBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIpOiBVc2UgcGxheWVy
S1ZPUHJvcGVydGllcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OndpcmVsZXNzUGxheWJhY2tUYXJnZXROYW1lKTogSW1wbGVtZW50IGZvciBN
YWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpzZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6IERlbGF5IGNhbGxiYWNrcworICAg
ICAgICAgICAgd2hpbGUgc2V0dGluZyBBVlBsYXllciBwcm9wZXJ0eS4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNzUGxheWJh
Y2tUYXJnZXQpOiBBZGQgbG9nZ2luZy4gRG9uJ3Qgc2V0CisgICAgICAgICAgICB0aGUgQVZQbGF5
ZXIgb3V0cHV0Q29udGV4dCBpbW1lZGlhdGVseS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQp
OiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBOZXcuCisgICAgICAgIChXZWJDb3Jl
OjpwbGF5ZXJLVk9Qcm9wZXJ0aWVzKTogTmV3LgorICAgICAgICAoLVtXZWJDb3JlQVZGTW92aWVP
YnNlcnZlciBvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOm9mT2JqZWN0OmNoYW5nZTpjb250ZXh0Ol0p
OiBOb3RpZnkgd2hlbgorICAgICAgICAgICAgYWxsb3dzRXh0ZXJuYWxQbGF5YmFjayBjaGFuZ2Vz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjppc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCk6IE5ldy4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0V2lyZWxl
c3NQbGF5YmFja1RhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN0b3BQbGF5aW5n
VG9QbGF5YmFja1RhcmdldCk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2V0V2ly
ZWxlc3NQbGF5YmFja1RhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ6OnRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c3RhcnRQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERpdHRvLgorCiAyMDE1LTAz
LTMwICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBbTmV3IEJsb2Nr
LUluc2lkZS1JbmxpbmUgTW9kZWxdIE1ha2Ugc3VyZSBsaW5lIGJyZWFrcyBvY2N1ciBiZWZvcmUg
YW5kIGFmdGVyIHRoZSBhbm9ueW1vdXMgaW5saW5lLWJsb2NrLgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL21lZGlhQ29udHJvbHNBcHBsZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0Fw
cGxlLmpzCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
Y29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk1LDcg
KzE2OTUsMTYgQEAgQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIGN1cnJl
bnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3M6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4g
Q29udHJvbGxlci5nU2ltdWxhdGVXaXJlbGVzc1BsYXliYWNrVGFyZ2V0IHx8ICgoJ3dlYmtpdEN1
cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MnIGluIHRoaXMudmlkZW8pICYmIHRoaXMudmlk
ZW8ud2Via2l0Q3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcyk7CisgICAgICAgIGlmIChD
b250cm9sbGVyLmdTaW11bGF0ZVdpcmVsZXNzUGxheWJhY2tUYXJnZXQpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoISd3ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1dpcmVsZXNzJyBpbiB0aGlzLnZpZGVvIHx8ICEnd2Via2l0V2lyZWxlc3NWaWRlb1BsYXliYWNr
RGlzYWJsZWQnIGluIHRoaXMudmlkZW8pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgaWYgKCF0aGlzLnZpZGVvLndlYmtpdEN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxl
c3MgfHwgdGhpcy52aWRlby53ZWJraXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LAog
CiAgICAgdXBkYXRlU2hvdWxkTGlzdGVuRm9yUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlFdmVu
dDogZnVuY3Rpb24oKSB7CkBAIC0xNzQwLDcgKzE3NDksMTEgQEAgQ29udHJvbGxlci5wcm90b3R5
cGUgPSB7CiAgICAgfSwKIAogICAgIHVwZGF0ZVdpcmVsZXNzVGFyZ2V0QXZhaWxhYmxlOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgaWYgKENvbnRyb2xsZXIuZ1NpbXVsYXRlV2lyZWxlc3NQbGF5YmFj
a1RhcmdldCB8fCB0aGlzLmhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKQorICAgICAgICB2YXIg
d2lyZWxlc3NQbGF5YmFja1RhcmdldHNBdmFpbGFibGUgPSBDb250cm9sbGVyLmdTaW11bGF0ZVdp
cmVsZXNzUGxheWJhY2tUYXJnZXQgfHwgdGhpcy5oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0czsK
KyAgICAgICAgaWYgKCd3ZWJraXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCcgaW4gdGhp
cy52aWRlbyAmJiB0aGlzLnZpZGVvLndlYmtpdFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
KQorICAgICAgICAgICAgd2lyZWxlc3NQbGF5YmFja1RhcmdldHNBdmFpbGFibGUgPSBmYWxzZTsK
KworICAgICAgICBpZiAod2lyZWxlc3NQbGF5YmFja1RhcmdldHNBdmFpbGFibGUpCiAgICAgICAg
ICAgICB0aGlzLmNvbnRyb2xzLndpcmVsZXNzVGFyZ2V0UGlja2VyLmNsYXNzTGlzdC5yZW1vdmUo
dGhpcy5DbGFzc05hbWVzLmhpZGRlbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMu
Y29udHJvbHMud2lyZWxlc3NUYXJnZXRQaWNrZXIuY2xhc3NMaXN0LmFkZCh0aGlzLkNsYXNzTmFt
ZXMuaGlkZGVuKTsKQEAgLTE3NTMsNiArMTc2Niw3IEBAIENvbnRyb2xsZXIucHJvdG90eXBlID0g
ewogICAgIH0sCiAKICAgICBoYW5kbGVXaXJlbGVzc1BsYXliYWNrQ2hhbmdlOiBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICB0aGlzLnVwZGF0ZVdpcmVsZXNzVGFyZ2V0QXZhaWxhYmxlKCk7CiAg
ICAgICAgIHRoaXMudXBkYXRlV2lyZWxlc3NQbGF5YmFja1N0YXR1cygpOwogICAgICAgICB0aGlz
LnNldE5lZWRzVGltZWxpbmVNZXRyaWNzVXBkYXRlKCk7CiAgICAgfSwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ3MCw3ICs2NDcwLDcgQEAgdm9pZCBEb2N1
bWVudDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKAogICAgIGlmICghcGFnZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgcGFnZS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHRoaXMsIHZpZXco
KS0+bGFzdEtub3duTW91c2VQb3NpdGlvbigpLCBpczxIVE1MVmlkZW9FbGVtZW50PihlbGVtZW50
KSk7CisgICAgcGFnZS0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKHZpZXcoKS0+bGFzdEtub3du
TW91c2VQb3NpdGlvbigpLCBpczxIVE1MVmlkZW9FbGVtZW50PihlbGVtZW50KSk7CiB9CiAKIHZv
aWQgRG9jdW1lbnQ6OmFkZFBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KE1lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXJDbGllbnQmIGNsaWVudCkKQEAgLTY1MjQsMjIgKzY1MjQsOCBAQCB2b2lkIERv
Y3VtZW50OjpwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0CiAKIHZvaWQgRG9jdW1lbnQ6OmRpZENo
b29zZVBsYXliYWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJhY2tUYXJnZXQmIGRldmljZSkKIHsK
LSAgICBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50KiBjbGllbnRUaGF0UmVxdWVzdGVk
UGlja2VyID0gbnVsbHB0cjsKLQotICAgIGZvciAoYXV0byogY2xpZW50IDogbV9wbGF5YmFja1Rh
cmdldENsaWVudHMpIHsKLSAgICAgICAgaWYgKGNsaWVudC0+cmVxdWVzdGVkUGxheWJhY2tUYXJn
ZXRQaWNrZXIoKSkgewotICAgICAgICAgICAgY2xpZW50VGhhdFJlcXVlc3RlZFBpY2tlciA9IGNs
aWVudDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KKyAgICBmb3IgKGF1dG8q
IGNsaWVudCA6IG1fcGxheWJhY2tUYXJnZXRDbGllbnRzKQogICAgICAgICBjbGllbnQtPmRpZENo
b29zZVBsYXliYWNrVGFyZ2V0KGRldmljZSk7Ci0gICAgfQotCi0gICAgLy8gTm90aWZ5IHRoZSBj
bGllbnQgdGhhdCByZXF1ZXN0ZWQgdGhlIGNob29zZXIgbGFzdCBiZWNhdXNlIGlmIG1vcmUgdGhh
biBvbmUKLSAgICAvLyBpcyBwbGF5aW5nLCBvbmx5IHRoZSBsYXN0IG9uZSB0byBzZXQgdGhlIGNv
bnRleHQgd2lsbCBhY3R1YWxseSBnZXQgdG8gcGxheQotICAgIC8vICB0byB0aGUgZXh0ZXJuYWwg
ZGV2aWNlLgotICAgIGlmIChjbGllbnRUaGF0UmVxdWVzdGVkUGlja2VyKQotICAgICAgICBjbGll
bnRUaGF0UmVxdWVzdGVkUGlja2VyLT5kaWRDaG9vc2VQbGF5YmFja1RhcmdldChkZXZpY2UpOwog
fQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3OSw4ICsxMTc5LDYgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UoY29ucwogICAgIGlmICghbV9wbGF5ZXItPmxvYWQodXJs
LCBjb250ZW50VHlwZSwga2V5U3lzdGVtKSkKICAgICAgICAgbWVkaWFMb2FkaW5nRmFpbGVkKE1l
ZGlhUGxheWVyOjpGb3JtYXRFcnJvcik7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+YXBwbHlNZWRp
YVBsYXllclJlc3RyaWN0aW9ucygqdGhpcyk7Ci0KICAgICAvLyBJZiB0aGVyZSBpcyBubyBwb3N0
ZXIgdG8gZGlzcGxheSwgYWxsb3cgdGhlIG1lZGlhIGVuZ2luZSB0byByZW5kZXIgdmlkZW8gZnJh
bWVzIGFzIHNvb24gYXMKICAgICAvLyB0aGV5IGFyZSBhdmFpbGFibGUuCiAgICAgdXBkYXRlRGlz
cGxheVN0YXRlKCk7CkBAIC0xOTg3LDYgKzE5ODUsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpzZXRSZWFkeVN0YXRlKE1lZAogICAgICAgICBwcmVwYXJlTWVkaWFGcmFnbWVudFVSSSgpOwog
ICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS5kdXJhdGlvbmNoYW5nZUV2ZW50KTsK
ICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkubG9hZGVkbWV0YWRhdGFFdmVudCk7
CisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICAgICAgaWYgKGhhc0V2
ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0
eWNoYW5nZWRFdmVudCkpCisgICAgICAgICAgICBlbnF1ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFi
aWxpdHlDaGFuZ2VkRXZlbnQoKTsKKyNlbmRpZgorICAgICAgICAKICAgICAgICAgaWYgKGhhc01l
ZGlhQ29udHJvbHMoKSkKICAgICAgICAgICAgIG1lZGlhQ29udHJvbHMoKS0+bG9hZGVkTWV0YWRh
dGEoKTsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCkBAIC00MjY4LDYgKzQyNzEsOCBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyRW5naW5lCiAKICAgICBtX2hhdmVQcmVwYXJl
ZFRvUGxheSA9IGZhbHNlOwogCisgICAgbV9tZWRpYVNlc3Npb24tPmFwcGx5TWVkaWFQbGF5ZXJS
ZXN0cmljdGlvbnMoKnRoaXMpOworCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmICghbV9wbGF5
ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2NTQsOCArNDY1OSwxMyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmNsZWFyTWVkaWFQbGF5ZXIoCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQpCi0gICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMo
KS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0eWNoYW5nZWRFdmVudCkpCisgICAgaWYg
KGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWls
YWJpbGl0eWNoYW5nZWRFdmVudCkpIHsKICAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1Bs
YXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKCp0aGlzLCBmYWxzZSk7CisKKyAgICAg
ICAgLy8gU2VuZCBhbiBhdmFpbGFiaWxpdHkgZXZlbnQgaW4gY2FzZSBzY3JpcHRzIHdhbnQgdG8g
aGlkZSB0aGUgcGlja2VyIHdoZW4gdGhlIGVsZW1lbnQKKyAgICAgICAgLy8gZG9lc24ndCBzdXBw
b3J0IHBsYXliYWNrIHRvIGEgdGFyZ2V0LgorICAgICAgICBlbnF1ZXVlUGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlDaGFuZ2VkRXZlbnQoKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIG1fcGxheWVy
ID0gbnVsbHB0cjsKQEAgLTQ4MTAsNiArNDgyMCwxMSBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6
OndlYmtpdEN1cnJlbnRQbGF5CiAgICAgcmV0dXJuIG1fbWVkaWFTZXNzaW9uLT5jdXJyZW50UGxh
eWJhY2tUYXJnZXRJc1dpcmVsZXNzKCp0aGlzKTsKIH0KIAorYm9vbCBIVE1MTWVkaWFFbGVtZW50
Ojp3ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbWVkaWFTZXNzaW9uLT5jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCgq
dGhpcyk7Cit9CisKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lyZWxlc3NSb3V0ZXNBdmFpbGFi
bGVEaWRDaGFuZ2UoKQogewogICAgIGVucXVldWVQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNo
YW5nZWRFdmVudCgpOwpAQCAtNDg2OSw2ICs0ODg0LDI3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c2V0V2lyZWxlc3NQbGF5YmEKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAgIG1fcGxheWVy
LT5zZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KGRldmljZSk7CiB9CisKK2Jvb2wgSFRNTE1lZGlh
RWxlbWVudDo6Y2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpCit7CisgICAgYm9vbCBj
YW5QbGF5ID0gbV9wbGF5ZXIgJiYgbV9wbGF5ZXItPmNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tU
YXJnZXQoKTsKKworICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OmNhblBsYXlUb1dp
cmVsZXNzUGxheWJhY2tUYXJnZXQoJXApIC0gcmV0dXJuaW5nICVzIiwgdGhpcywgYm9vbFN0cmlu
ZyhjYW5QbGF5KSk7CisKKyAgICByZXR1cm4gY2FuUGxheTsKK30KKwordm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3sKKyAgICBpZiAobV9wbGF5
ZXIpCisgICAgICAgIG1fcGxheWVyLT5zdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Cit9
CisKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkK
K3sKKyAgICBpZiAobV9wbGF5ZXIpCisgICAgICAgIG1fcGxheWVyLT5zdG9wUGxheWluZ1RvUGxh
eWJhY2tUYXJnZXQoKTsKK30KICNlbmRpZgogCiBkb3VibGUgSFRNTE1lZGlhRWxlbWVudDo6bWlu
RmFzdFJldmVyc2VSYXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDEyICszNTQsMTYgQEAgcHVibGlj
OgogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgdm9pZCB3ZWJraXRT
aG93UGxheWJhY2tUYXJnZXRQaWNrZXIoKTsKICAgICBib29sIHdlYmtpdEN1cnJlbnRQbGF5YmFj
a1RhcmdldElzV2lyZWxlc3MoKSBjb25zdDsKKyAgICBib29sIHdlYmtpdEN1cnJlbnRQbGF5YmFj
a1RhcmdldElzU3VwcG9ydGVkKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgYWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcmVt
b3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0
ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSkgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgd2ly
ZWxlc3NSb3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2UoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgY2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJhY2tUYXJn
ZXQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1Rh
cmdldCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tU
YXJnZXQoKSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgLy8gRXZlbnRUYXJnZXQgZnVuY3Rpb24u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5pZGwJKHJldmlzaW9u
IDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw0ICsxMTYsNSBAQAogCiAgICAgW0NvbmRpdGlvbmFsPVdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVF0gdm9pZCB3ZWJraXRTaG93UGxheWJhY2tUYXJnZXRQaWNrZXIo
KTsKICAgICBbQ29uZGl0aW9uYWw9V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUXSByZWFkb25seSBh
dHRyaWJ1dGUgYm9vbGVhbiB3ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzOwor
ICAgIFtDb25kaXRpb25hbD1XSVJFTEVTU19QTEFZQkFDS19UQVJHRVRdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBib29sZWFuIHdlYmtpdEN1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vzc2lvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcAkocmV2aXNpb24g
MTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBIVE1MTWVkaWFTZXNzaW9uOjpIVE1MTWVkaWFT
ZXNzaW9uKE1lZGlhCiAgICAgLCBtX3Jlc3RyaWN0aW9ucyhOb1Jlc3RyaWN0aW9ucykKICNpZiBF
TkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgICwgbV90YXJnZXRBdmFpbGFiaWxp
dHlDaGFuZ2VkVGltZXIoKnRoaXMsICZIVE1MTWVkaWFTZXNzaW9uOjp0YXJnZXRBdmFpbGFiaWxp
dHlDaGFuZ2VkVGltZXJGaXJlZCkKKyAgICAsIG1fcGxheWJhY2tUYXJnZXQoc3RkOjptYWtlX3Vu
aXF1ZTxNZWRpYVBsYXliYWNrVGFyZ2V0PigpKQogI2VuZGlmCiB7CiB9CkBAIC0xNjMsNDMgKzE2
NCw0OSBAQCBib29sIEhUTUxNZWRpYVNlc3Npb246OnBhZ2VBbGxvd3NQbGF5YmFjCiB9CiAKICNp
ZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotYm9vbCBIVE1MTWVkaWFTZXNzaW9u
OjpzaG93aW5nUGxheWJhY2tUYXJnZXRQaWNrZXJQZXJtaXR0ZWQoY29uc3QgSFRNTE1lZGlhRWxl
bWVudCYgZWxlbWVudCkgY29uc3QKK2Jvb2wgSFRNTE1lZGlhU2Vzc2lvbjo6Y3VycmVudFBsYXli
YWNrVGFyZ2V0SXNXaXJlbGVzcyhjb25zdCBIVE1MTWVkaWFFbGVtZW50JiBlbGVtZW50KSBjb25z
dAogewotICAgIGlmIChtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVVc2VyR2VzdHVyZVRvU2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdl
c3R1cmUoKSkgewotICAgICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpzaG93aW5n
UGxheWJhY2tUYXJnZXRQaWNrZXJQZXJtaXR0ZWQgLSByZXR1cm5pbmcgRkFMU0UgYmVjYXVzZSBv
ZiBwZXJtaXNzaW9ucyIpOworICAgIE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBlbGVtZW50LnBsYXll
cigpOworICAgIGlmICghcGxheWVyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYVNl
c3Npb246OmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MgLSByZXR1cm5pbmcgRkFMU0Ug
YmVjYXVzZSBwbGF5ZXIgaXMgTlVMTCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgaWYgKCFlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAgICAgIExPRyhNZWRp
YSwgIkhUTUxNZWRpYVNlc3Npb246OnNob3dpbmdQbGF5YmFja1RhcmdldFBpY2tlclBlcm1pdHRl
ZCAtIHJldHVybmluZyBGQUxTRSBiZWNhdXNlIHBhZ2UgaXMgTlVMTCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNXaXJlbGVzcyA9IHBsYXllci0+aXNDdXJyZW50
UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpOworICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYVNlc3Np
b246OmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MgLSByZXR1cm5pbmcgJXMiLCBpc1dp
cmVsZXNzID8gIlRSVUUiIDogIkZBTFNFIik7CiAKLSAgICByZXR1cm4gIXdpcmVsZXNzVmlkZW9Q
bGF5YmFja0Rpc2FibGVkKGVsZW1lbnQpOworICAgIHJldHVybiBpc1dpcmVsZXNzOwogfQogCi1i
b29sIEhUTUxNZWRpYVNlc3Npb246OmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoY29u
c3QgSFRNTE1lZGlhRWxlbWVudCYgZWxlbWVudCkgY29uc3QKK2Jvb2wgSFRNTE1lZGlhU2Vzc2lv
bjo6Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQoY29uc3QgSFRNTE1lZGlhRWxlbWVu
dCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBNZWRpYVBsYXllciogcGxheWVyID0gZWxlbWVudC5w
bGF5ZXIoKTsKICAgICBpZiAoIXBsYXllcikgewotICAgICAgICBMT0coTWVkaWEsICJIVE1MTWVk
aWFTZXNzaW9uOjpjdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzIC0gcmV0dXJuaW5nIEZB
TFNFIGJlY2F1c2UgcGxheWVyIGlzIE5VTEwiKTsKKyAgICAgICAgTE9HKE1lZGlhLCAiSFRNTE1l
ZGlhU2Vzc2lvbjo6Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQgLSByZXR1cm5pbmcg
RkFMU0UgYmVjYXVzZSBwbGF5ZXIgaXMgTlVMTCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgYm9vbCBpc1dpcmVsZXNzID0gcGxheWVyLT5pc0N1cnJlbnRQbGF5YmFja1Rh
cmdldFdpcmVsZXNzKCk7Ci0gICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhU2Vzc2lvbjo6Y3VycmVu
dFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcyAtIHJldHVybmluZyAlcyIsIGlzV2lyZWxlc3MgPyAi
VFJVRSIgOiAiRkFMU0UiKTsKLQotICAgIHJldHVybiBpc1dpcmVsZXNzOworICAgIGJvb2wgaXNT
dXBwb3J0ZWQgPSBwbGF5ZXItPmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKCk7Cisg
ICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhU2Vzc2lvbjo6Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNT
dXBwb3J0ZWQgLSByZXR1cm5pbmcgJXMiLCBpc1N1cHBvcnRlZCA/ICJUUlVFIiA6ICJGQUxTRSIp
OworICAgIAorICAgIHJldHVybiBpc1N1cHBvcnRlZDsKIH0KIAogdm9pZCBIVE1MTWVkaWFTZXNz
aW9uOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYgZWxl
bWVudCkKIHsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpzaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIiKTsKIAotICAgIGlmICghc2hvd2luZ1BsYXliYWNrVGFyZ2V0UGlja2VyUGVy
bWl0dGVkKGVsZW1lbnQpKQorICAgIGlmIChtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVVc2VyR2Vz
dHVyZVRvU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyICYmICFTY3JpcHRDb250cm9sbGVyOjpwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSkgeworICAgICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNz
aW9uOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIgLSByZXR1cm5pbmcgZWFybHkgYmVjYXVzZSBv
ZiBwZXJtaXNzaW9ucyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFlbGVt
ZW50LmRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYVNl
c3Npb246OnNob3dpbmdQbGF5YmFja1RhcmdldFBpY2tlclBlcm1pdHRlZCAtIHJldHVybmluZyBl
YXJseSBiZWNhdXNlIHBhZ2UgaXMgTlVMTCIpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0g
ICAgbV9oYXZlUmVxdWVzdGVkUGxheWJhY2tUYXJnZXRQaWNrZXIgPSB0cnVlOworICAgIE1lZGlh
U2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5zZXRDdXJyZW50U2Vzc2lvbigqdGhpcyk7
CiAgICAgZWxlbWVudC5kb2N1bWVudCgpLnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihlbGVtZW50
KTsKIH0KIApAQCAtMjM4LDcgKzI0NSw3IEBAIGJvb2wgSFRNTE1lZGlhU2Vzc2lvbjo6d2lyZWxl
c3NWaWRlb1BsYXkKIAogICAgIE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBlbGVtZW50LnBsYXllcigp
OwogICAgIGlmICghcGxheWVyKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgYm9vbCBkaXNhYmxlZCA9IHBsYXllci0+d2lyZWxlc3NWaWRlb1BsYXli
YWNrRGlzYWJsZWQoKTsKICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjp3aXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZCAtIHJldHVybmluZyAlcyBiZWNhdXNlIG1lZGlhIGVuZ2lu
ZSBzYXlzIHNvIiwgZGlzYWJsZWQgPyAiVFJVRSIgOiAiRkFMU0UiKTsKQEAgLTI3Nyw4ICsyODQs
MTIgQEAgdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpzZXRIYXNQbGF5YmFja1RhcgogCiB2b2lkIEhU
TUxNZWRpYVNlc3Npb246OmRpZENob29zZVBsYXliYWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJh
Y2tUYXJnZXQmIGRldmljZSkKIHsKLSAgICBtX2hhdmVSZXF1ZXN0ZWRQbGF5YmFja1RhcmdldFBp
Y2tlciA9IGZhbHNlOwotICAgIGNsaWVudCgpLnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoZGV2
aWNlKTsKKyAgICBtX3BsYXliYWNrVGFyZ2V0LT5zZXREZXZpY2VQaWNrZXJDb250ZXh0KGRldmlj
ZS5kZXZpY2VQaWNrZXJDb250ZXh0KCkpOworICAgIGNsaWVudCgpLnNldFdpcmVsZXNzUGxheWJh
Y2tUYXJnZXQoKm1fcGxheWJhY2tUYXJnZXQuZ2V0KCkpOworICAgIGlmIChkZXZpY2UuaGFzQWN0
aXZlUm91dGUoKSAmJiBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuY3VycmVu
dFNlc3Npb24oKSA9PSB0aGlzKQorICAgICAgICBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0
KCk7CisgICAgZWxzZQorICAgICAgICBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKIH0K
IAogdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjp0YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkVGltZXJG
aXJlZCgpCkBAIC0yOTEsNiArMzAyLDggQEAgdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpleHRlcm5h
bE91dHB1dERldgogICAgIGlmIChtX2hhc1BsYXliYWNrVGFyZ2V0cyA9PSBoYXNUYXJnZXRzKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpleHRl
cm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZSAtIGhhc1RhcmdldHMgJXMiLCBoYXNU
YXJnZXRzID8gIlRSVUUiIDogIkZBTFNFIik7CisKICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0cyA9
IGhhc1RhcmdldHM7CiAgICAgaWYgKCFtX3RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRUaW1lci5p
c0FjdGl2ZSgpKQogICAgICAgICBtX3RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRUaW1lci5zdGFy
dE9uZVNob3QoMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uaAko
cmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogICAgIGJvb2wgcGFn
ZUFsbG93c1BsYXliYWNrQWZ0ZXJSZXN1bWluZyhjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29u
c3Q7CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIGJvb2wgc2hv
d2luZ1BsYXliYWNrVGFyZ2V0UGlja2VyUGVybWl0dGVkKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQm
KSBjb25zdDsKICAgICBib29sIGN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoY29uc3Qg
SFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OworICAgIGJvb2wgY3VycmVudFBsYXliYWNrVGFyZ2V0
SXNTdXBwb3J0ZWQoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OwogICAgIHZvaWQgc2hv
d1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKTsKICAgICBib29s
IGhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25z
dDsKIApAQCAtMTAyLDE2ICsxMDIsMTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2hvb3NlUGxheWJhY2tUYXJnZXQoY29uc3QgTWVkaWFQbGF5YmFja1RhcmdldCYpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5n
ZShib29sKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNQbGF5YmFj
a1RhcmdldFJvdXRlTW9uaXRvcmluZygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCByZXF1ZXN0ZWRQbGF5YmFja1RhcmdldFBpY2tlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1faGF2ZVJlcXVlc3RlZFBsYXliYWNrVGFyZ2V0UGlja2VyOyB9CiAjZW5kaWYKIAogICAgIEJl
aGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zOwogCiAjaWYgRU5BQkxFKFdJUkVMRVNT
X1BMQVlCQUNLX1RBUkdFVCkKICAgICBtdXRhYmxlIFRpbWVyIG1fdGFyZ2V0QXZhaWxhYmlsaXR5
Q2hhbmdlZFRpbWVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiBt
X3BsYXliYWNrVGFyZ2V0OwogICAgIGJvb2wgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUxpc3RlbmVycyB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBib29sIG1faGFzUGxheWJhY2tUYXJn
ZXRzIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXZlUmVxdWVzdGVkUGxheWJhY2tU
YXJnZXRQaWNrZXIgeyBmYWxzZSB9OwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMiw2ICsyMTIsNyBAQCBQYWdlOjpQYWdlKFBhZ2VDb25maWd1cmF0
aW9uJiBwYWdlQ29uZmlnCiAgICAgLCBtX3VzZXJDb250ZW50Q29udHJvbGxlcihXVEY6Om1vdmUo
cGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyKSkKICAgICAsIG1fdmlzaXRl
ZExpbmtTdG9yZSgqV1RGOjptb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUp
KQogICAgICwgbV9zZXNzaW9uSUQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAg
LCBtX3BsYXliYWNrVGFyZ2V0KHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFQbGF5YmFja1RhcmdldD4o
KSkKICAgICAsIG1faXNDbG9zaW5nKGZhbHNlKQogICAgICwgbV9pc1BsYXlpbmdBdWRpbyhmYWxz
ZSkKIHsKQEAgLTE2ODEsMTAgKzE2ODIsOCBAQCB2b2lkIFBhZ2U6OnNldFNlc3Npb25JRChTZXNz
aW9uSUQgc2Vzc2lvCiB9CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQot
dm9pZCBQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb24sIGJvb2wgaXNWaWRlbykKK3ZvaWQgUGFn
ZTo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2Nh
dGlvbiwgYm9vbCBpc1ZpZGVvKQogewotICAgIG1fZG9jdW1lbnRSZXF1ZXN0aW5nUGxheWJhY2tU
YXJnZXRQaWNrZXIgPSBkb2N1bWVudDsKLQogI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyBGSVhN
RTogcmVmYWN0b3IgaU9TIGltcGxlbWVudGF0aW9uLgogICAgIFVOVVNFRF9QQVJBTShsb2NhdGlv
bik7CkBAIC0xNjk2LDI1ICsxNjk1LDkgQEAgdm9pZCBQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQ
aWNrZXIoRG9jdQogCiB2b2lkIFBhZ2U6OmRpZENob29zZVBsYXliYWNrVGFyZ2V0KGNvbnN0IE1l
ZGlhUGxheWJhY2tUYXJnZXQmIHRhcmdldCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnRUaGF0
UmVxdWVzdGVkUGlja2VyID0gbnVsbHB0cjsKLQotICAgIG1fcGxheWJhY2tUYXJnZXQgPSBzdGQ6
Om1ha2VfdW5pcXVlPE1lZGlhUGxheWJhY2tUYXJnZXQ+KHRhcmdldC5kZXZpY2VQaWNrZXJDb250
ZXh0KCkpOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50
KCkgPT0gbV9kb2N1bWVudFJlcXVlc3RpbmdQbGF5YmFja1RhcmdldFBpY2tlcikgewotICAgICAg
ICAgICAgZG9jdW1lbnRUaGF0UmVxdWVzdGVkUGlja2VyID0gZG9jdW1lbnQ7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQorICAgIG1fcGxheWJhY2tUYXJnZXQtPnNldERldmljZVBp
Y2tlckNvbnRleHQodGFyZ2V0LmRldmljZVBpY2tlckNvbnRleHQoKSk7CisgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpCiAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kaWRDaG9vc2VQbGF5YmFj
a1RhcmdldCh0YXJnZXQpOwotICAgIH0KLQotICAgIC8vIE5vdGlmeSB0aGUgZG9jdW1lbnQgdGhh
dCByZXF1ZXN0ZWQgdGhlIGNob29zZXIgbGFzdCBiZWNhdXNlIGlmIG1vcmUgdGhhbiBvbmUgZWxl
bWVudAotICAgIC8vIGlzIHBsYXlpbmcgdGhlIGxhc3Qgb25lIHRvIHNldCB0aGUgY29udGV4dCB3
aWxsIGJlIHRoZSBvbmUgdGhhdCBhY3R1YWxseSBnZXRzIHRvCi0gICAgLy8gIHBsYXkgdG8gdGhl
IGV4dGVybmFsIGRldmljZS4KLSAgICBpZiAoZG9jdW1lbnRUaGF0UmVxdWVzdGVkUGlja2VyKQot
ICAgICAgICBkb2N1bWVudFRoYXRSZXF1ZXN0ZWRQaWNrZXItPmRpZENob29zZVBsYXliYWNrVGFy
Z2V0KHRhcmdldCk7Ci0KLSAgICBtX2RvY3VtZW50UmVxdWVzdGluZ1BsYXliYWNrVGFyZ2V0UGlj
a2VyID0gbnVsbHB0cjsKIH0KIAogdm9pZCBQYWdlOjpwbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eURpZENoYW5nZShib29sIGF2YWlsYWJsZSkKQEAgLTE3MzQsMTAgKzE3MTcsNiBAQCB2b2lkIFBh
Z2U6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAobV9yZXF1aXJlc1BsYXliYWNrVGFyZ2V0TW9uaXRvcmluZyA9PSBtb25pdG9yaW5nUmVx
dWlyZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3JlcXVpcmVzUGxheWJhY2tUYXJnZXRNb25p
dG9yaW5nID0gbW9uaXRvcmluZ1JlcXVpcmVkOwotCiAgICAgaWYgKG1vbml0b3JpbmdSZXF1aXJl
ZCkKICAgICAgICAgY2hyb21lKCkuY2xpZW50KCkuc3RhcnRpbmdNb25pdG9yaW5nUGxheWJhY2tU
YXJnZXRzKCk7CiAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDE4MjE4OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsNyAr
NDI2LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TXV0ZWQoYm9vbCk7
CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIHZvaWQgc2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyKERvY3VtZW50KiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBi
b29sKTsKKyAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIGJvb2wpOwogICAgIGJvb2wgaGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldDsgfQogICAgIE1lZGlhUGxh
eWJhY2tUYXJnZXQmIHBsYXliYWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gKm1fcGxheWJhY2tU
YXJnZXQuZ2V0KCk7IH0KICAgICB2b2lkIGNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmlu
ZygpOwpAQCAtNTg3LDkgKzU4Nyw3IEBAIHByaXZhdGU6CiAgICAgU2Vzc2lvbklEIG1fc2Vzc2lv
bklEOwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICBEb2N1bWVu
dCogbV9kb2N1bWVudFJlcXVlc3RpbmdQbGF5YmFja1RhcmdldFBpY2tlciB7IG51bGxwdHIgfTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFQbGF5YmFja1RhcmdldD4gbV9wbGF5YmFja1Rhcmdl
dDsKLSAgICBib29sIG1fcmVxdWlyZXNQbGF5YmFja1RhcmdldE1vbml0b3JpbmcgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0IHsgZmFsc2UgfTsKICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lv
bi5jcHAJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L01lZGlhU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw2ICsyMjcsMjEgQEAgTWVk
aWFTZXNzaW9uOjpEaXNwbGF5VHlwZSBNZWRpYVNlc3Npb246OgogICAgIHJldHVybiBtX2NsaWVu
dC5kaXNwbGF5VHlwZSgpOwogfQogCitib29sIE1lZGlhU2Vzc2lvbjo6Y2FuUGxheVRvV2lyZWxl
c3NQbGF5YmFja1RhcmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2xpZW50LmNhblBsYXlU
b1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKTsKK30KKwordm9pZCBNZWRpYVNlc3Npb246OnN0YXJ0
UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQoreworICAgIGNsaWVudCgpLnN0YXJ0UGxheWluZ1Rv
UGxheWJhY2tUYXJnZXQoKTsKK30KKwordm9pZCBNZWRpYVNlc3Npb246OnN0b3BQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCgpCit7CisgICAgY2xpZW50KCkuc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFy
Z2V0KCk7Cit9CisKIFN0cmluZyBNZWRpYVNlc3Npb25DbGllbnQ6Om1lZGlhU2Vzc2lvblRpdGxl
KCkgY29uc3QKIHsKICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0yNDEsNiArMjU2LDUgQEAgZG91
YmxlIE1lZGlhU2Vzc2lvbkNsaWVudDo6bWVkaWFTZXNzaW9uQwogewogICAgIHJldHVybiBNZWRp
YVBsYXllcjo6aW52YWxpZFRpbWUoKTsKIH0KLQogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uaAkocmV2aXNpb24gMTgyMTg5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNywxMiArMTE3LDE1IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNIaWRkZW4o
KSBjb25zdDsKIAorICAgIGJvb2wgY2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIGNv
bnN0OworICAgIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworICAgIHZvaWQg
c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7CisKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExB
WUJBQ0tfVEFSR0VUKQogICAgIC8vIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJDbGllbnQKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQoY29uc3QgTWVkaWFQbGF5YmFj
a1RhcmdldCYpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBleHRlcm5hbE91dHB1dERl
dmljZUF2YWlsYWJsZURpZENoYW5nZShib29sKSBjb25zdCBvdmVycmlkZSB7IH0KICAgICB2aXJ0
dWFsIGJvb2wgcmVxdWlyZXNQbGF5YmFja1RhcmdldFJvdXRlTW9uaXRvcmluZygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHJlcXVlc3RlZFBsYXli
YWNrVGFyZ2V0UGlja2VyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRp
ZgogCiBwcm90ZWN0ZWQ6CkBAIC0xNjQsMTAgKzE2NywxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIGJvb2wgb3ZlcnJpZGVCYWNrZ3JvdW5kUGxheWJhY2tSZXN0cmljdGlvbigpIGNvbnN0ID0g
MDsKIAotI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgdmlydHVhbCB2
b2lkIHdpcmVsZXNzUm91dGVzQXZhaWxhYmxlRGlkQ2hhbmdlKCkgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoY29uc3QgTWVkaWFQbGF5YmFja1RhcmdldCYp
IHsgfQotI2VuZGlmCisgICAgdmlydHVhbCBib29sIGNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tU
YXJnZXQoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzdGFydFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0b3BQbGF5aW5nVG9QbGF5
YmFja1RhcmdldCgpIHsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TWVkaWFTZXNzaW9u
Q2xpZW50KCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNl
c3Npb25NYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uTWFuYWdlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NiwxOSArMTg2LDE4IEBAIGJvb2wgTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2Vz
c2lvbldpbGxCZWcKICAgICBpZiAobV9pbnRlcnJ1cHRlZCkKICAgICAgICAgZW5kSW50ZXJydXB0
aW9uKE1lZGlhU2Vzc2lvbjo6Tm9GbGFncyk7CiAKLSAgICBpZiAoIXJlc3RyaWN0aW9ucyAmIENv
bmN1cnJlbnRQbGF5YmFja05vdFBlcm1pdHRlZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KKyAg
ICBib29sIG5ld1Nlc3Npb25DYW5QbGF5VG9QbGF5YmFja1RhcmdldCA9IHNlc3Npb24uY2FuUGxh
eVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpOwogICAgIFZlY3RvcjxNZWRpYVNlc3Npb24qPiBz
ZXNzaW9ucyA9IG1fc2Vzc2lvbnM7CiAgICAgZm9yIChhdXRvKiBvbmVTZXNzaW9uIDogc2Vzc2lv
bnMpIHsKICAgICAgICAgaWYgKG9uZVNlc3Npb24gPT0gJnNlc3Npb24pCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKG9uZVNlc3Npb24tPm1lZGlhVHlwZSgpICE9IHNlc3Npb25U
eXBlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChyZXN0cmljdGlvbnMgJiBD
b25jdXJyZW50UGxheWJhY2tOb3RQZXJtaXR0ZWQpCisgICAgICAgIGlmIChuZXdTZXNzaW9uQ2Fu
UGxheVRvUGxheWJhY2tUYXJnZXQpCisgICAgICAgICAgICBvbmVTZXNzaW9uLT5zdG9wUGxheWlu
Z1RvUGxheWJhY2tUYXJnZXQoKTsKKyAgICAgICAgaWYgKG9uZVNlc3Npb24tPm1lZGlhVHlwZSgp
ID09IHNlc3Npb25UeXBlICYmIHJlc3RyaWN0aW9ucyAmIENvbmN1cnJlbnRQbGF5YmFja05vdFBl
cm1pdHRlZCkKICAgICAgICAgICAgIG9uZVNlc3Npb24tPnBhdXNlU2Vzc2lvbigpOwogICAgIH0K
LSAgICAKKyAgICBzZXNzaW9uLnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKKwogICAg
IHVwZGF0ZVNlc3Npb25TdGF0ZSgpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uTWFuYWdlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuaAko
cmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFT
ZXNzaW9uTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw5IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgaGFzV2lyZWxlc3NUYXJnZXRzQXZhaWxhYmxlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgogCisgICAgdm9pZCBzZXRDdXJyZW50U2Vzc2lvbihNZWRpYVNlc3Np
b24mKTsKKyAgICBNZWRpYVNlc3Npb24qIGN1cnJlbnRTZXNzaW9uKCk7CisKIHByb3RlY3RlZDoK
ICAgICBmcmllbmQgY2xhc3MgTWVkaWFTZXNzaW9uOwogICAgIGV4cGxpY2l0IE1lZGlhU2Vzc2lv
bk1hbmFnZXIoKTsKQEAgLTkyLDkgKzk1LDYgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgYWRkU2Vz
c2lvbihNZWRpYVNlc3Npb24mKTsKICAgICB2b2lkIHJlbW92ZVNlc3Npb24oTWVkaWFTZXNzaW9u
Jik7CiAKLSAgICB2b2lkIHNldEN1cnJlbnRTZXNzaW9uKE1lZGlhU2Vzc2lvbiYpOwotICAgIE1l
ZGlhU2Vzc2lvbiogY3VycmVudFNlc3Npb24oKTsKLQogICAgIFZlY3RvcjxNZWRpYVNlc3Npb24q
PiBzZXNzaW9ucygpIHsgcmV0dXJuIG1fc2Vzc2lvbnM7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNr
VGFyZ2V0LmgJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
MTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXREZXZpY2VQaWNrZXJDb250ZXh0KEFWT3V0cHV0
Q29udGV4dCAqY29udGV4dCkgeyBtX2RldmljZVBpY2tlckNvbnRleHQgPSBjb250ZXh0OyB9CiAg
ICAgQVZPdXRwdXRDb250ZXh0ICpkZXZpY2VQaWNrZXJDb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
bV9kZXZpY2VQaWNrZXJDb250ZXh0LmdldCgpOyB9CisgICAgYm9vbCBoYXNBY3RpdmVSb3V0ZSgp
IGNvbnN0OworI2Vsc2UKKyAgICB2b2lkIHNldERldmljZVBpY2tlckNvbnRleHQoQVZPdXRwdXRD
b250ZXh0ICopIHsgfQorICAgIEFWT3V0cHV0Q29udGV4dCAqZGV2aWNlUGlja2VyQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBib29sIGhhc0FjdGl2ZVJvdXRlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5oCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZShib29sKSBjb25zdCA9
IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNQbGF5YmFja1RhcmdldFJvdXRlTW9uaXRv
cmluZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWVzdGVkUGxheWJhY2tUYXJn
ZXRQaWNrZXIoKSBjb25zdCA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
CShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0Myw2ICs4NDMsMTEgQEAgYm9vbCBN
ZWRpYVBsYXllcjo6aXNDdXJyZW50UGxheWJhY2tUYXJnZQogICAgIHJldHVybiBtX3ByaXZhdGUt
PmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3MoKTsKIH0KIAorYm9vbCBNZWRpYVBsYXll
cjo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKCk7Cit9CisKIFN0
cmluZyBNZWRpYVBsYXllcjo6d2lyZWxlc3NQbGF5YmFja1RhcmdldE5hbWUoKSBjb25zdAogewog
ICAgIHJldHVybiBtX3ByaXZhdGUtPndpcmVsZXNzUGxheWJhY2tUYXJnZXROYW1lKCk7CkBAIC04
NjgsMTAgKzg3MywyNSBAQCB2b2lkIE1lZGlhUGxheWVyOjpjdXJyZW50UGxheWJhY2tUYXJnZXRJ
CiAgICAgbV9jbGllbnQubWVkaWFQbGF5ZXJDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNz
Q2hhbmdlZCh0aGlzKTsKIH0KIAorYm9vbCBNZWRpYVBsYXllcjo6Y2FuUGxheVRvV2lyZWxlc3NQ
bGF5YmFja1RhcmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y2FuUGxheVRv
V2lyZWxlc3NQbGF5YmFja1RhcmdldCgpOworfQorCiB2b2lkIE1lZGlhUGxheWVyOjpzZXRXaXJl
bGVzc1BsYXliYWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJhY2tUYXJnZXQmIGRldmljZSkKIHsK
ICAgICBtX3ByaXZhdGUtPnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoZGV2aWNlKTsKIH0KKwor
dm9pZCBNZWRpYVBsYXllcjo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpCit7CisgICAg
bV9wcml2YXRlLT5zdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXI6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpCit7CisgICAgbV9wcml2YXRl
LT5zdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKK30KICNlbmRpZgogCiBkb3VibGUgTWVk
aWFQbGF5ZXI6Om1heEZhc3RGb3J3YXJkUmF0ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDE4MjE4OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2Niw2ICs0NjYsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIGJvb2wgaXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJl
bGVzcygpIGNvbnN0OworICAgIGJvb2wgaXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQo
KSBjb25zdDsKIAogICAgIGVudW0gV2lyZWxlc3NQbGF5YmFja1RhcmdldFR5cGUgeyBUYXJnZXRU
eXBlTm9uZSwgVGFyZ2V0VHlwZUFpclBsYXksIFRhcmdldFR5cGVUVk91dCB9OwogICAgIFdpcmVs
ZXNzUGxheWJhY2tUYXJnZXRUeXBlIHdpcmVsZXNzUGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3Q7
CkBAIC00NzgsNyArNDc5LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGN1cnJlbnRQbGF5YmFja1Rh
cmdldElzV2lyZWxlc3NDaGFuZ2VkKCk7CiAgICAgdm9pZCBwbGF5YmFja1RhcmdldEF2YWlsYWJp
bGl0eUNoYW5nZWQoKTsKIAorICAgIGJvb2wgY2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1Rhcmdl
dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChjb25zdCBNZWRp
YVBsYXliYWNrVGFyZ2V0Jik7CisKKyAgICB2b2lkIHN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJn
ZXQoKTsKKyAgICB2b2lkIHN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOwogI2VuZGlmCiAK
ICAgICBkb3VibGUgbWluRmFzdFJldmVyc2VSYXRlKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAko
cmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSwxNCArMTYxLDE5IEBAIHB1
YmxpYzoKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgdmlydHVh
bCBib29sIGlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3MoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1cHBvcnRl
ZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgU3RyaW5nIHdpcmVsZXNz
UGxheWJhY2tUYXJnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmcoKTsgfQogICAg
IHZpcnR1YWwgTWVkaWFQbGF5ZXI6OldpcmVsZXNzUGxheWJhY2tUYXJnZXRUeXBlIHdpcmVsZXNz
UGxheWJhY2tUYXJnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gTWVkaWFQbGF5ZXI6OlRhcmdldFR5
cGVOb25lOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgd2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCB3aXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IHZvaWQgc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoYm9vbCkgeyB9CiAKKyAgICB2
aXJ0dWFsIGJvb2wgY2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQo
Y29uc3QgTWVkaWFQbGF5YmFja1RhcmdldCYpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0
UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFBsYXlp
bmdUb1BsYXliYWNrVGFyZ2V0KCkgeyB9CiAjZW5kaWYKIAogI2lmIFVTRShOQVRJVkVfRlVMTFND
UkVFTl9WSURFTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9NZWRpYVBsYXliYWNrVGFyZ2V0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXliYWNrVGFyZ2V0
TWFjLm1tCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5YmFja1RhcmdldE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkgJiYgIVBMQVRGT1JNKElPUykKIAotI2ltcG9ydCA8V2ViQ29yZS9NZWRpYVBsYXliYWNrVGFy
Z2V0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0FWRm91bmRhdGlvblNQSS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAKQEAgLTYzLDYg
KzYzLDEyIEBAIGJvb2wgTWVkaWFQbGF5YmFja1RhcmdldDo6ZGVjb2RlKE5TS2V5ZWQKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBNZWRpYVBsYXliYWNrVGFyZ2V0OjpoYXNBY3RpdmVSb3V0
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGV2aWNlUGlja2VyQ29udGV4dCAmJiBtX2Rldmlj
ZVBpY2tlckNvbnRleHQuZ2V0KCkuZGV2aWNlTmFtZTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAh
UExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTksNyArNjE5LDcgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Om1ldAogCiB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6cmF0ZUNoYW5nZWQoKQogewotI2lmIEVOQUJMRShXSVJFTEVTU19Q
TEFZQkFDS19UQVJHRVQpCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYg
UExBVEZPUk0oSU9TKQogICAgIGlmIChpc0N1cnJlbnRQbGF5YmFja1RhcmdldFdpcmVsZXNzKCkp
CiAgICAgICAgIG1fcGxheWVyLT5oYW5kbGVQbGF5YmFja0NvbW1hbmQocmF0ZSgpID8gTWVkaWFT
ZXNzaW9uOjpQbGF5Q29tbWFuZCA6IE1lZGlhU2Vzc2lvbjo6UGF1c2VDb21tYW5kKTsKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNiArMjgxLDEw
IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NWaWRlb1Bs
YXliYWNrRGlzYWJsZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB1cGRhdGVEaXNhYmxlRXh0
ZXJuYWxQbGF5YmFjaygpOworICAgIGJvb2wgY2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1Rhcmdl
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzdGFydFBsYXlp
bmdUb1BsYXliYWNrVGFyZ2V0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN0b3BQbGF5
aW5nVG9QbGF5YmFja1RhcmdldCgpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGRv
dWJsZSBtYXhGYXN0Rm9yd2FyZFJhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NhY2hl
ZENhblBsYXlGYXN0Rm9yd2FyZCA/IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5p
dHkoKSA6IDIuMDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCShyZXZpc2lvbiAxODIx
ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDcsNyArMzQ3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgTlNBcnJheSAq
YXNzZXRNZXRhZGF0YUtleU5hbWVzKCk7CiBzdGF0aWMgTlNBcnJheSAqaXRlbUtWT1Byb3BlcnRp
ZXMoKTsKLXN0YXRpYyBOU0FycmF5KiBhc3NldFRyYWNrTWV0YWRhdGFLZXlOYW1lcygpOworc3Rh
dGljIE5TQXJyYXkgKmFzc2V0VHJhY2tNZXRhZGF0YUtleU5hbWVzKCk7CitzdGF0aWMgTlNBcnJh
eSAqcGxheWVyS1ZPUHJvcGVydGllcygpOwogCiAjaWYgIUxPR19ESVNBQkxFRAogc3RhdGljIGNv
bnN0IGNoYXIgKmJvb2xTdHJpbmcoYm9vbCB2YWwpCkBAIC01NDUsMTEgKzU0Niw5IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgaWYgKG1fdGltZU9i
c2VydmVyKQogICAgICAgICAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgcmVtb3ZlVGltZU9ic2VydmVy
Om1fdGltZU9ic2VydmVyLmdldCgpXTsKICAgICAgICAgbV90aW1lT2JzZXJ2ZXIgPSBuaWw7Ci0g
ICAgICAgIFttX2F2UGxheWVyLmdldCgpIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdl
dCgpIGZvcktleVBhdGg6QCJyYXRlIl07Ci0jaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RB
UkdFVCkKLSAgICAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2Jz
ZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImV4dGVybmFsUGxheWJhY2tBY3RpdmUiXTsKLSAgICAg
ICAgW21fYXZQbGF5ZXIuZ2V0KCkgcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkg
Zm9yS2V5UGF0aDpAIm91dHB1dENvbnRleHQiXTsKLSNlbmRpZgorCisgICAgICAgIGZvciAoTlNT
dHJpbmcgKmtleU5hbWUgaW4gcGxheWVyS1ZPUHJvcGVydGllcygpKQorICAgICAgICAgICAgW21f
YXZQbGF5ZXIuZ2V0KCkgcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5
UGF0aDprZXlOYW1lXTsKICAgICAgICAgbV9hdlBsYXllciA9IG5pbDsKICAgICB9CiAKQEAgLTky
NywyOCArOTI2LDIyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoK
ICAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKIAogICAgIG1fYXZQbGF5ZXIgPSBhZG9wdE5T
KFthbGxvY0FWUGxheWVySW5zdGFuY2UoKSBpbml0XSk7Ci0gICAgW21fYXZQbGF5ZXIuZ2V0KCkg
YWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAInJhdGUiIG9wdGlv
bnM6TlNLZXlWYWx1ZU9ic2VydmluZ09wdGlvbk5ldyBjb250ZXh0Oih2b2lkICopTWVkaWFQbGF5
ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHRQbGF5ZXJdOwotI2lmIEVOQUJMRShXSVJF
TEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgW21fYXZQbGF5ZXIuZ2V0KCkgYWRkT2JzZXJ2ZXI6
bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImV4dGVybmFsUGxheWJhY2tBY3RpdmUi
IG9wdGlvbnM6TlNLZXlWYWx1ZU9ic2VydmluZ09wdGlvbk5ldyBjb250ZXh0Oih2b2lkICopTWVk
aWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHRQbGF5ZXJdOwotICAgIFttX2F2
UGxheWVyLmdldCgpIGFkZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6
QCJvdXRwdXRDb250ZXh0IiBvcHRpb25zOk5TS2V5VmFsdWVPYnNlcnZpbmdPcHRpb25OZXcgY29u
dGV4dDoodm9pZCAqKU1lZGlhUGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0UGxh
eWVyXTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAg
ICB1cGRhdGVEaXNhYmxlRXh0ZXJuYWxQbGF5YmFjaygpOwotI2VuZGlmCisgICAgZm9yIChOU1N0
cmluZyAqa2V5TmFtZSBpbiBwbGF5ZXJLVk9Qcm9wZXJ0aWVzKCkpCisgICAgICAgIFttX2F2UGxh
eWVyLmdldCgpIGFkZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6a2V5
TmFtZSBvcHRpb25zOk5TS2V5VmFsdWVPYnNlcnZpbmdPcHRpb25OZXcgY29udGV4dDoodm9pZCAq
KU1lZGlhUGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0UGxheWVyXTsKIAogI2lm
IEhBVkUoQVZGT1VOREFUSU9OX01FRElBX1NFTEVDVElPTl9HUk9VUCkgJiYgSEFWRShBVkZPVU5E
QVRJT05fTEVHSUJMRV9PVVRQVVRfU1VQUE9SVCkKICAgICBbbV9hdlBsYXllci5nZXQoKSBzZXRB
cHBsaWVzTWVkaWFTZWxlY3Rpb25Dcml0ZXJpYUF1dG9tYXRpY2FsbHk6Tk9dOwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorICAgIHVwZGF0ZURpc2FibGVF
eHRlcm5hbFBsYXliYWNrKCk7CiAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgc2V0QWxsb3dzRXh0ZXJu
YWxQbGF5YmFjazptX2FsbG93c1dpcmVsZXNzVmlkZW9QbGF5YmFja107Ci0jZW5kaWYKIAotI2lm
IEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpCisjaWYg
IVBMQVRGT1JNKElPUykKICAgICBpZiAobV9vdXRwdXRDb250ZXh0KQogICAgICAgICBtX2F2UGxh
eWVyLmdldCgpLm91dHB1dENvbnRleHQgPSBtX291dHB1dENvbnRleHQuZ2V0KCk7CiAjZW5kaWYK
KyNlbmRpZgogCiAgICAgaWYgKHBsYXllcigpLT5jbGllbnQoKS5tZWRpYVBsYXllcklzVmlkZW8o
KSkKICAgICAgICAgY3JlYXRlQVZQbGF5ZXJMYXllcigpOwpAQCAtMjczMSw4ICsyNzI0LDE0IEBA
IFN0cmluZyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmoKIHsKICAgICBpZiAoIW1f
YXZQbGF5ZXIpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIAotICAgIFN0cmlu
ZyB3aXJlbGVzc1RhcmdldE5hbWUgPSB3a0V4ZXJuYWxEZXZpY2VEaXNwbGF5TmFtZUZvclBsYXll
cihtX2F2UGxheWVyLmdldCgpKTsKKworICAgIFN0cmluZyB3aXJlbGVzc1RhcmdldE5hbWU7Cisj
aWYgIVBMQVRGT1JNKElPUykKKyAgICBpZiAobV9vdXRwdXRDb250ZXh0KQorICAgICAgICB3aXJl
bGVzc1RhcmdldE5hbWUgPSBtX291dHB1dENvbnRleHQuZ2V0KCkuZGV2aWNlTmFtZTsKKyNlbHNl
CisgICAgd2lyZWxlc3NUYXJnZXROYW1lID0gd2tFeGVybmFsRGV2aWNlRGlzcGxheU5hbWVGb3JQ
bGF5ZXIobV9hdlBsYXllci5nZXQoKSk7CisjZW5kaWYKICAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp3aXJlbGVzc1BsYXliYWNrVGFyZ2V0TmFtZSgl
cCkgLSByZXR1cm5pbmcgJXMiLCB0aGlzLCB3aXJlbGVzc1RhcmdldE5hbWUudXRmOCgpLmRhdGEo
KSk7CiAKICAgICByZXR1cm4gd2lyZWxlc3NUYXJnZXROYW1lOwpAQCAtMjc1NiwyMiArMjc1NSw0
MiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgaWYgKCFt
X2F2UGxheWVyKQogICAgICAgICByZXR1cm47CiAKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVl
KTsKICAgICBbbV9hdlBsYXllci5nZXQoKSBzZXRBbGxvd3NFeHRlcm5hbFBsYXliYWNrOiFkaXNh
YmxlZF07CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwogfQogCiAjaWYgIVBMQVRGT1JN
KElPUykKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0V2lyZWxl
c3NQbGF5YmFja1RhcmdldChjb25zdCBNZWRpYVBsYXliYWNrVGFyZ2V0JiB0YXJnZXQpCiB7CiAg
ICAgbV9vdXRwdXRDb250ZXh0ID0gdGFyZ2V0LmRldmljZVBpY2tlckNvbnRleHQoKTsKLQogICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVs
ZXNzUGxheWJhY2tUYXJnZXQoJXApIC0gdGFyZ2V0ID0gJXAiLCB0aGlzLCBtX291dHB1dENvbnRl
eHQuZ2V0KCkpOworfQorI2VuZGlmCiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpCit7CiAgICAgaWYgKCFtX2F2
UGxheWVyKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoW21fYXZQbGF5ZXIuZ2V0KCkub3V0
cHV0Q29udGV4dCBpc0VxdWFsOm1fb3V0cHV0Q29udGV4dC5nZXQoKV0pCisgICAgICAgIHJldHVy
bjsKKworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwogICAgIG1fYXZQbGF5ZXIuZ2V0KCku
b3V0cHV0Q29udGV4dCA9IG1fb3V0cHV0Q29udGV4dC5nZXQoKTsKKyAgICBzZXREZWxheUNhbGxi
YWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3sKKyAgICBpZiAoIW1fYXZQbGF5ZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgIC8v
IEZJWE1FOiB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIG9uY2UgcmRhcjovLzIwMzM1MjE3
IGhhcyBiZWVuIGZpeGVkLgorICAgIC8vIG1fYXZQbGF5ZXIuZ2V0KCkub3V0cHV0Q29udGV4dCA9
IG5pbDsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7CiB9Ci0jZW5kaWYKIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRhdGVEaXNhYmxlRXh0ZXJuYWxQ
bGF5YmFjaygpCiB7CkBAIC0zMDg0LDYgKzMxMDMsMTUgQEAgTlNBcnJheSogYXNzZXRUcmFja01l
dGFkYXRhS2V5TmFtZXMoKQogICAgIHJldHVybiBrZXlzOwogfQogCitOU0FycmF5KiBwbGF5ZXJL
Vk9Qcm9wZXJ0aWVzKCkKK3sKKyAgICBzdGF0aWMgTlNBcnJheSoga2V5cyA9IFtbTlNBcnJheSBh
bGxvY10gaW5pdFdpdGhPYmplY3RzOkAicmF0ZSIsCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlC
QUNLX1RBUkdFVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBAImV4dGVybmFsUGxheWJh
Y2tBY3RpdmUiLCBAIm91dHB1dENvbnRleHQiLCBAImFsbG93c0V4dGVybmFsUGxheWJhY2siLAor
I2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlsXTsKKyAgICByZXR1cm4ga2V5
czsKK30KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVB
VkZNb3ZpZU9ic2VydmVyCkBAIC0zMjAwLDkgKzMyMjgsNyBAQCAtICh2b2lkKW9ic2VydmVWYWx1
ZUZvcktleVBhdGg6a2V5UGF0aCBvCiAgICAgICAgIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJp
bmc6QCJyYXRlIl0pCiAgICAgICAgICAgICBmdW5jdGlvbiA9IFdURjo6YmluZCgmTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cmF0ZURpZENoYW5nZSwgbV9jYWxsYmFjaywgW25l
d1ZhbHVlIGRvdWJsZVZhbHVlXSk7CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkKLSAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAiZXh0ZXJuYWxQ
bGF5YmFja0FjdGl2ZSJdKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBXVEY6OmJpbmQoJk1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzc0Rp
ZENoYW5nZSwgbV9jYWxsYmFjayk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxU
b1N0cmluZzpAIm91dHB1dENvbnRleHQiXSkKKyAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNF
cXVhbFRvU3RyaW5nOkAiZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSJdIHx8IFtrZXlQYXRoIGlzRXF1
YWxUb1N0cmluZzpAIm91dHB1dENvbnRleHQiXSB8fCBba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6
QCJhbGxvd3NFeHRlcm5hbFBsYXliYWNrIl0pCiAgICAgICAgICAgICBmdW5jdGlvbiA9IFdURjo6
YmluZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxheWJhY2tUYXJnZXRJ
c1dpcmVsZXNzRGlkQ2hhbmdlLCBtX2NhbGxiYWNrKTsKICNlbmRpZgogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5oCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSwxNCBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBjb3JydXB0ZWRWaWRlb0ZyYW1lcygp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgTWVkaWFUaW1lIHRvdGFsRnJhbWVEZWxheSgpIG92ZXJy
aWRlOwogCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICB2aXJ0dWFs
IGJvb2wgaXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQoKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChjb25zdCBNZWRpYVBs
YXliYWNrVGFyZ2V0Jik7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0UGxheWluZ1RvUGxheWJhY2tU
YXJnZXQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXliYWNr
VGFyZ2V0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCB0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1Rhcmdl
dCgpOworI2VuZGlmCisKICAgICB2b2lkIGVuc3VyZUxheWVyKCk7CiAgICAgdm9pZCBkZXN0cm95
TGF5ZXIoKTsKICAgICBib29sIHNob3VsZEJlUGxheWluZygpIGNvbnN0OwpAQCAtMjEyLDYgKzIy
MCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zZWVrQ29tcGxldGVkOwogICAgIG11dGFibGUg
Ym9vbCBtX2xvYWRpbmdQcm9ncmVzc2VkOwogICAgIGJvb2wgbV9oYXNBdmFpbGFibGVWaWRlb0Zy
YW1lOworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgc3RkOjp1bmlx
dWVfcHRyPE1lZGlhUGxheWJhY2tUYXJnZXQ+IG1fcGxheWJhY2tUYXJnZXQ7CisgICAgYm9vbCBt
X2N1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkIHsgdHJ1ZSB9OworI2VuZGlmCiB9Owog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCShyZXZpc2lvbiAxODIxODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTgw
Niw2ICs4MDYsNDIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iagog
ICAgIG1fcGxheWVyLT5jaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKTsKIH0KIAorI2lmIEVOQUJMRShX
SVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQoKSBjb25zdAorewor
ICAgIGlmICghbV9wbGF5YmFja1RhcmdldCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBy
ZXR1cm4gIW1fcGxheWJhY2tUYXJnZXQtPmhhc0FjdGl2ZVJvdXRlKCk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRXaXJlbGVzc1BsYXliYWNrVGFy
Z2V0KGNvbnN0IE1lZGlhUGxheWJhY2tUYXJnZXQmIHRhcmdldCkKK3sKKyAgICBpZiAoIW1fcGxh
eWJhY2tUYXJnZXQpCisgICAgICAgIG1fcGxheWJhY2tUYXJnZXQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE1lZGlhUGxheWJhY2tUYXJnZXQ+KCk7CisgICAgbV9wbGF5YmFja1RhcmdldC0+c2V0RGV2aWNl
UGlja2VyQ29udGV4dCh0YXJnZXQuZGV2aWNlUGlja2VyQ29udGV4dCgpKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnRvZ2dsZVBsYXlpbmdUb1BsYXli
YWNrVGFyZ2V0KCkKK3sKKyAgICBib29sIG9sZFN1cHBvcnRlZCA9IG1fY3VycmVudFBsYXliYWNr
VGFyZ2V0SXNTdXBwb3J0ZWQ7CisgICAgbV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRl
ZCA9ICFtX3BsYXliYWNrVGFyZ2V0IHx8ICFtX3BsYXliYWNrVGFyZ2V0LT5oYXNBY3RpdmVSb3V0
ZSgpOworCisgICAgaWYgKG1fcGxheWVyICYmIG9sZFN1cHBvcnRlZCAhPSBtX2N1cnJlbnRQbGF5
YmFja1RhcmdldElzU3VwcG9ydGVkKQorICAgICAgICBtX3BsYXllci0+Y3VycmVudFBsYXliYWNr
VGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakM6OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQoreworICAg
IHRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQor
eworICAgIHRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Cit9CisjZW5kaWYKKwogfQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRp
YVBsYXllclByaXZhdGVRVEtpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5oCShyZXZpc2lvbiAxODIx
ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDYgKzE3OSwxNCBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgU3RyaW5nIGVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4g
IlFUS2l0IjsgfQogICAgIHZpcnR1YWwgbG9uZyBwbGF0Zm9ybUVycm9yQ29kZSgpIGNvbnN0Owog
CisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICB2aXJ0dWFsIGJvb2wg
aXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChjb25zdCBNZWRpYVBsYXliYWNr
VGFyZ2V0Jik7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQo
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCB0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOwor
I2VuZGlmCisKICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CiAgICAgUmV0YWluUHRyPFFUTW92
aWU+IG1fcXRNb3ZpZTsKICAgICBSZXRhaW5QdHI8UVRWaWRlb1JlbmRlcmVyV2ViS2l0T25seT4g
bV9xdFZpZGVvUmVuZGVyZXI7CkBAIC0yMDYsNiArMjE0LDEwIEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX3ByaXZhdGVCcm93c2luZzsKICAgICBtdXRhYmxlIE1lZGlhVGltZSBtX21heFRpbWVMb2Fk
ZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7CiAgICAgbXV0YWJsZSBGbG9hdFNpemUgbV9jYWNo
ZWROYXR1cmFsU2l6ZTsKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorICAg
IHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiBtX3BsYXliYWNrVGFyZ2V0Owor
ICAgIGJvb2wgbV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCB7IHRydWUgfTsKKyNl
bmRpZgogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQkocmV2aXNp
b24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlh
UGxheWVyUHJpdmF0ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQwLDYgKzE1NDAsNDIg
QEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6Y2FuU2F2ZU1lZAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAorI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCitib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojppc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX3BsYXliYWNrVGFyZ2V0KQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHJldHVybiAhbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUoKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2V0V2lyZWxlc3NQbGF5YmFja1Rhcmdl
dChjb25zdCBNZWRpYVBsYXliYWNrVGFyZ2V0JiB0YXJnZXQpCit7CisgICAgaWYgKCFtX3BsYXli
YWNrVGFyZ2V0KQorICAgICAgICBtX3BsYXliYWNrVGFyZ2V0ID0gc3RkOjptYWtlX3VuaXF1ZTxN
ZWRpYVBsYXliYWNrVGFyZ2V0PigpOworICAgIG1fcGxheWJhY2tUYXJnZXQtPnNldERldmljZVBp
Y2tlckNvbnRleHQodGFyZ2V0LmRldmljZVBpY2tlckNvbnRleHQoKSk7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OnRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3sK
KyAgICBib29sIG9sZFN1cHBvcnRlZCA9IG1fY3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0
ZWQ7CisgICAgbV9jdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCA9ICFtX3BsYXliYWNr
VGFyZ2V0IHx8ICFtX3BsYXliYWNrVGFyZ2V0LT5oYXNBY3RpdmVSb3V0ZSgpOworCisgICAgaWYg
KG1fcGxheWVyICYmIG9sZFN1cHBvcnRlZCAhPSBtX2N1cnJlbnRQbGF5YmFja1RhcmdldElzU3Vw
cG9ydGVkKQorICAgICAgICBtX3BsYXllci0+Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVz
c0NoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c3RhcnRQbGF5
aW5nVG9QbGF5YmFja1RhcmdldCgpCit7CisgICAgdG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJn
ZXQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c3RvcFBsYXlpbmdUb1Bs
YXliYWNrVGFyZ2V0KCkKK3sKKyAgICB0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOwor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogQGltcGxlbWVudGF0aW9uIFdl
YkNvcmVNb3ZpZU9ic2VydmVyCg==
</data>
<flag name="review"
          id="274697"
          type_id="1"
          status="+"
          setter="jer.noble"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249928</attachid>
            <date>2015-04-01 10:10:20 -0700</date>
            <delta_ts>2015-04-01 10:10:20 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>mse_patch_10.txt</filename>
            <type>text/plain</type>
            <size>50244</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBAQAorMjAxNS0wMy0zMSAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBEbyBub3Qg
aW5jbHVkZSByb3V0ZSBidXR0b24gaWYgZWxlbWVudCBkb2VzIG5vdCBzdXBwb3J0IHRhcmdldCBw
bGF5YmFjaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQzMjUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzOgorICAgICAgICAo
Q29udHJvbGxlci5wcm90b3R5cGUuY3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcyk6IFJl
dHVybiBmYWxzZSBpZiB0YXJnZXQgcGxheWJhY2sgaXMgZGlzYWJsZWQuCisgICAgICAgIChDb250
cm9sbGVyLnByb3RvdHlwZS51cGRhdGVXaXJlbGVzc1RhcmdldEF2YWlsYWJsZSk6IERvIG5vdCBz
aG93IHRoZSBwaWNrZXIgaWYgdGFyZ2V0IAorICAgICAgICAgICAgcGxheWJhY2sgaXMgZGlzYWJs
ZWQuCisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5oYW5kbGVXaXJlbGVzc1BsYXliYWNr
Q2hhbmdlKTogQ2FsbCB1cGRhdGVXaXJlbGVzc1RhcmdldEF2YWlsYWJsZS4KKworICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyKTogVXBkYXRlIGZvciBQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQaWNr
ZXIgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRpZENob29zZVBsYXliYWNr
VGFyZ2V0KTogTm90aWZ5IGNsaWVudHMgaW4gdmVjdG9yLW9yZGVyLCBsb3dlciBsZXZlbCBjb2Rl
CisgICAgICAgICAgICBub3cgdHJhY2tzIHdoaWNoIG9uZSByZXF1ZXN0ZWQgdGhlIHBpY2tlci4K
KworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50Ojpsb2FkUmVzb3VyY2UpOiBEb24ndCBjYWxsIGFwcGx5TWVkaWFQ
bGF5ZXJSZXN0cmljdGlvbnMsIGl0IGlzIGRvbmUKKyAgICAgICAgICAgIGluIG1lZGlhUGxheWVy
RW5naW5lRmFpbGVkVG9Mb2FkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
c2V0UmVhZHlTdGF0ZSk6IEVucXVldWUgYSB0YXJnZXQgYXZhaWxhYmlsaXR5IGV2ZW50IGlmIHRo
ZXJlIGFyZQorICAgICAgICAgICAgbGlzdGVuZXJzIHJlYWR5U3RhdGUgcmVhY2hlcyBIQVZFX01F
VEFEQVRBIHNvIGNvbnRyb2xzIGFyZSBzZXR1cCBjb3JyZWN0bHkuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckVuZ2luZUZhaWxlZFRvTG9hZCk6IENhbGwg
YXBwbHlNZWRpYVBsYXllclJlc3RyaWN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmNsZWFyTWVkaWFQbGF5ZXIpOiBFbnF1ZXVlIGEgdGFyZ2V0IGF2YWlsYWJpbGl0
eSBldmVudCBpbiBzbyBjb250cm9scworICAgICAgICAgICAgaGF2ZSBhIGNoYW5jZSB0byBoaWRl
IHRoZSBwaWNrZXIuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp3ZWJraXRD
dXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCk6IE5ldywgcGFzc3Rocm91Z2ggdG8gdGhl
CisgICAgICAgICAgICBtZWRpYSBlbmdpbmUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzdG9wUGxheWlu
Z1RvUGxheWJhY2tUYXJnZXQpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRsOgorCisgICAgICAgICog
aHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNl
c3Npb246OkhUTUxNZWRpYVNlc3Npb24pOiBJbml0aWFsaXplIG1fcGxheWJhY2tUYXJnZXQuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpjdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1N1cHBvcnRlZCk6IE5ldy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcik6IFB1bGwgbG9naWMgZnJvbSBzaG93aW5nUGxheWJhY2tU
YXJnZXRQaWNrZXJQZXJtaXR0ZWQgCisgICAgICAgICAgICBpbmxpbmUuIERvbid0IHJlZnVzZSB0
byBzaG93IGEgcGlja2VyIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3Qgc3VwcG9ydCB0YXJnZXQgcGxh
eWJhY2ssIGl0IGlzIHVwCisgICAgICAgICAgICB0byBzY3JpcHQgdG8gZGVjaWRlIHdoaWNoIGVs
ZW1lbnRzIGNhbiBkaXNwbGF5IGEgcGlja2VyLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
U2Vzc2lvbjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQpOiBSZXR1cm4gdHJ1ZSBpZiB0
aGVyZSBpcyBubyBwbGF5ZXIuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFTZXNzaW9uOjpk
aWRDaG9vc2VQbGF5YmFja1RhcmdldCk6IENhbGwgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1Rhcmdl
dCBvciAKKyAgICAgICAgICAgIHN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCBiZWNhdXNlIHNl
dFdpcmVsZXNzUGxheWJhY2tUYXJnZXQgZG9lc24ndCBhcHBseSB0aGUgdGFyZ2V0LgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFi
bGVEaWRDaGFuZ2UpOiBBZGQgbG9nZ2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNl
c3Npb246OnNob3dpbmdQbGF5YmFja1RhcmdldFBpY2tlclBlcm1pdHRlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmg6CisKKyAgICAgICAgKiBwYWdlL1BhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6IEluaXRpYWxpemUgbV9wbGF5YmFj
a1RhcmdldC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNob3dQbGF5YmFja1RhcmdldFBpY2tl
cik6IERvbid0IHNldCBtX2RvY3VtZW50UmVxdWVzdGluZ1BsYXliYWNrVGFyZ2V0UGlja2VyLgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQpOiBOb3RpZnkg
UGFnZXMgaW4gdmVjdG9yLW9yZGVyLCBsb3dlciBsZXZlbCBjb2RlCisgICAgICAgICAgICBub3cg
dHJhY2tzIHdoaWNoIG9uZSByZXF1ZXN0ZWQgdGhlIHBpY2tlci4KKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OmNvbmZpZ3VyZVBsYXliYWNrVGFyZ2V0TW9uaXRvcmluZyk6IERvbid0IHRyYWNrIG1f
cmVxdWlyZXNQbGF5YmFja1RhcmdldE1vbml0b3JpbmcsIGl0CisgICAgICAgICAgICBpcyB0b28g
ZWFzeSBmb3IgaXQgdG8gZ2V0IG91dCBvZiBzeW5jIHdpdGggdGhlIFVJIHByb2Nlc3Mgc3RhdGUu
CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9NZWRp
YVNlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uOjpjYW5QbGF5VG9X
aXJlbGVzc1BsYXliYWNrVGFyZ2V0KTogTmV3LCBjbGllbnQgcGFzc3Rocm91Z2guCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVNlc3Npb246OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lvbjo6c3RvcFBsYXlpbmdUb1BsYXli
YWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25DbGllbnQ6OmNhblBsYXlUb1dpcmVs
ZXNzUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uQ2xpZW50
OjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U2Vzc2lvbkNsaWVudDo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KToKKworICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTZXNzaW9uTWFuYWdlcjo6c2Vzc2lvbldpbGxCZWdpblBsYXliYWNrKTogQ2FsbCBz
dGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0ICYKKyAgICAgICAgICAgIHN0b3BQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCBhcyBuZWNlc3NhcnkuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTWVk
aWFTZXNzaW9uTWFuYWdlci5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5YmFja1RhcmdldC5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldDo6
aGFzQWN0aXZlUm91dGUpOiBOZXcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlckNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjppc0N1cnJl
bnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCk6IE5ldywgZW5naW5lIHBhc3N0aHJvdWdoLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJn
ZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpzdGFydFBsYXlpbmdU
b1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6
c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUlu
dGVyZmFjZTo6aXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjp3aXJlbGVzc1ZpZGVvUGxheWJhY2tE
aXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6
OmNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZTo6c3RvcFBsYXlp
bmdUb1BsYXliYWNrVGFyZ2V0KToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9NZWRpYVBsYXliYWNrVGFyZ2V0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5YmFja1RhcmdldDo6aGFzQWN0aXZlUm91dGUpOiBOZXcuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6Y2FuY2VsTG9hZCk6IFVzZSBwbGF5ZXJLVk9Qcm9wZXJ0aWVzLiBEcml2
ZS1ieQorICAgICAgICAgICAgY29kZSBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIpOiBVc2UgcGxheWVy
S1ZPUHJvcGVydGllcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OndpcmVsZXNzUGxheWJhY2tUYXJnZXROYW1lKTogSW1wbGVtZW50IGZvciBN
YWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpzZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCk6IERlbGF5IGNhbGxiYWNrcworICAg
ICAgICAgICAgd2hpbGUgc2V0dGluZyBBVlBsYXllciBwcm9wZXJ0eS4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFdpcmVsZXNzUGxheWJh
Y2tUYXJnZXQpOiBBZGQgbG9nZ2luZy4gRG9uJ3Qgc2V0CisgICAgICAgICAgICB0aGUgQVZQbGF5
ZXIgb3V0cHV0Q29udGV4dCBpbW1lZGlhdGVseS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQp
OiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQpOiBOZXcuCisgICAgICAgIChXZWJDb3Jl
OjpwbGF5ZXJLVk9Qcm9wZXJ0aWVzKTogTmV3LgorICAgICAgICAoLVtXZWJDb3JlQVZGTW92aWVP
YnNlcnZlciBvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOm9mT2JqZWN0OmNoYW5nZTpjb250ZXh0Ol0p
OiBOb3RpZnkgd2hlbgorICAgICAgICAgICAgYWxsb3dzRXh0ZXJuYWxQbGF5YmFjayBjaGFuZ2Vz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjppc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCk6IE5ldy4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2V0V2lyZWxl
c3NQbGF5YmFja1RhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp0b2dnbGVQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN0b3BQbGF5aW5n
VG9QbGF5YmFja1RhcmdldCk6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3VwcG9ydGVkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c2V0V2ly
ZWxlc3NQbGF5YmFja1RhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUVRLaXQ6OnRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6c3RhcnRQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlUVRLaXQ6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCk6IERpdHRvLgorCiAyMDE1LTAz
LTMwICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBbTmV3IEJsb2Nr
LUluc2lkZS1JbmxpbmUgTW9kZWxdIE1ha2Ugc3VyZSBsaW5lIGJyZWFrcyBvY2N1ciBiZWZvcmUg
YW5kIGFmdGVyIHRoZSBhbm9ueW1vdXMgaW5saW5lLWJsb2NrLgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL21lZGlhQ29udHJvbHNBcHBsZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0Fw
cGxlLmpzCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
Y29udHJvbHMvbWVkaWFDb250cm9sc0FwcGxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk1LDcg
KzE2OTUsMTMgQEAgQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIGN1cnJl
bnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3M6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4g
Q29udHJvbGxlci5nU2ltdWxhdGVXaXJlbGVzc1BsYXliYWNrVGFyZ2V0IHx8ICgoJ3dlYmtpdEN1
cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MnIGluIHRoaXMudmlkZW8pICYmIHRoaXMudmlk
ZW8ud2Via2l0Q3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcyk7CisgICAgICAgIGlmIChD
b250cm9sbGVyLmdTaW11bGF0ZVdpcmVsZXNzUGxheWJhY2tUYXJnZXQpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoIXRoaXMudmlkZW8ud2Via2l0Q3VycmVudFBsYXli
YWNrVGFyZ2V0SXNXaXJlbGVzcyB8fCB0aGlzLnZpZGVvLndlYmtpdFdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0sCiAKICAgICB1cGRhdGVTaG91bGRMaXN0ZW5Gb3JQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUV2ZW50OiBmdW5jdGlvbigpIHsKQEAgLTE3NDAsNyArMTc0NiwxMSBAQCBD
b250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgdXBkYXRlV2lyZWxlc3NUYXJn
ZXRBdmFpbGFibGU6IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoQ29udHJvbGxlci5nU2ltdWxh
dGVXaXJlbGVzc1BsYXliYWNrVGFyZ2V0IHx8IHRoaXMuaGFzV2lyZWxlc3NQbGF5YmFja1Rhcmdl
dHMpCisgICAgICAgIHZhciB3aXJlbGVzc1BsYXliYWNrVGFyZ2V0c0F2YWlsYWJsZSA9IENvbnRy
b2xsZXIuZ1NpbXVsYXRlV2lyZWxlc3NQbGF5YmFja1RhcmdldCB8fCB0aGlzLmhhc1dpcmVsZXNz
UGxheWJhY2tUYXJnZXRzOworICAgICAgICBpZiAodGhpcy52aWRlby53ZWJraXRXaXJlbGVzc1Zp
ZGVvUGxheWJhY2tEaXNhYmxlZCkKKyAgICAgICAgICAgIHdpcmVsZXNzUGxheWJhY2tUYXJnZXRz
QXZhaWxhYmxlID0gZmFsc2U7CisKKyAgICAgICAgaWYgKHdpcmVsZXNzUGxheWJhY2tUYXJnZXRz
QXZhaWxhYmxlKQogICAgICAgICAgICAgdGhpcy5jb250cm9scy53aXJlbGVzc1RhcmdldFBpY2tl
ci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuQ2xhc3NOYW1lcy5oaWRkZW4pOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICB0aGlzLmNvbnRyb2xzLndpcmVsZXNzVGFyZ2V0UGlja2VyLmNsYXNzTGlz
dC5hZGQodGhpcy5DbGFzc05hbWVzLmhpZGRlbik7CkBAIC0xNzUzLDYgKzE3NjMsNyBAQCBDb250
cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgaGFuZGxlV2lyZWxlc3NQbGF5YmFj
a0NoYW5nZTogZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdGhpcy51cGRhdGVXaXJlbGVzc1Rh
cmdldEF2YWlsYWJsZSgpOwogICAgICAgICB0aGlzLnVwZGF0ZVdpcmVsZXNzUGxheWJhY2tTdGF0
dXMoKTsKICAgICAgICAgdGhpcy5zZXROZWVkc1RpbWVsaW5lTWV0cmljc1VwZGF0ZSgpOwogICAg
IH0sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0NzAsNyAr
NjQ3MCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcigKICAgICBp
ZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhZ2UtPnNob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcih0aGlzLCB2aWV3KCktPmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSwgaXM8SFRNTFZp
ZGVvRWxlbWVudD4oZWxlbWVudCkpOworICAgIHBhZ2UtPnNob3dQbGF5YmFja1RhcmdldFBpY2tl
cih2aWV3KCktPmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKSwgaXM8SFRNTFZpZGVvRWxlbWVudD4o
ZWxlbWVudCkpOwogfQogCiB2b2lkIERvY3VtZW50OjphZGRQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudChNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50JiBjbGllbnQpCkBAIC02NTI0LDIy
ICs2NTI0LDggQEAgdm9pZCBEb2N1bWVudDo6cGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdAogCiB2
b2lkIERvY3VtZW50OjpkaWRDaG9vc2VQbGF5YmFja1RhcmdldChjb25zdCBNZWRpYVBsYXliYWNr
VGFyZ2V0JiBkZXZpY2UpCiB7Ci0gICAgTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNsaWVudCog
Y2xpZW50VGhhdFJlcXVlc3RlZFBpY2tlciA9IG51bGxwdHI7Ci0KLSAgICBmb3IgKGF1dG8qIGNs
aWVudCA6IG1fcGxheWJhY2tUYXJnZXRDbGllbnRzKSB7Ci0gICAgICAgIGlmIChjbGllbnQtPnJl
cXVlc3RlZFBsYXliYWNrVGFyZ2V0UGlja2VyKCkpIHsKLSAgICAgICAgICAgIGNsaWVudFRoYXRS
ZXF1ZXN0ZWRQaWNrZXIgPSBjbGllbnQ7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX3BsYXliYWNrVGFyZ2V0Q2xpZW50cykKICAg
ICAgICAgY2xpZW50LT5kaWRDaG9vc2VQbGF5YmFja1RhcmdldChkZXZpY2UpOwotICAgIH0KLQot
ICAgIC8vIE5vdGlmeSB0aGUgY2xpZW50IHRoYXQgcmVxdWVzdGVkIHRoZSBjaG9vc2VyIGxhc3Qg
YmVjYXVzZSBpZiBtb3JlIHRoYW4gb25lCi0gICAgLy8gaXMgcGxheWluZywgb25seSB0aGUgbGFz
dCBvbmUgdG8gc2V0IHRoZSBjb250ZXh0IHdpbGwgYWN0dWFsbHkgZ2V0IHRvIHBsYXkKLSAgICAv
LyAgdG8gdGhlIGV4dGVybmFsIGRldmljZS4KLSAgICBpZiAoY2xpZW50VGhhdFJlcXVlc3RlZFBp
Y2tlcikKLSAgICAgICAgY2xpZW50VGhhdFJlcXVlc3RlZFBpY2tlci0+ZGlkQ2hvb3NlUGxheWJh
Y2tUYXJnZXQoZGV2aWNlKTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNzksOCArMTE3
OSw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKGNvbnMKICAgICBpZiAo
IW1fcGxheWVyLT5sb2FkKHVybCwgY29udGVudFR5cGUsIGtleVN5c3RlbSkpCiAgICAgICAgIG1l
ZGlhTG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpOwogCi0gICAgbV9tZWRp
YVNlc3Npb24tPmFwcGx5TWVkaWFQbGF5ZXJSZXN0cmljdGlvbnMoKnRoaXMpOwotCiAgICAgLy8g
SWYgdGhlcmUgaXMgbm8gcG9zdGVyIHRvIGRpc3BsYXksIGFsbG93IHRoZSBtZWRpYSBlbmdpbmUg
dG8gcmVuZGVyIHZpZGVvIGZyYW1lcyBhcyBzb29uIGFzCiAgICAgLy8gdGhleSBhcmUgYXZhaWxh
YmxlLgogICAgIHVwZGF0ZURpc3BsYXlTdGF0ZSgpOwpAQCAtMTk4Nyw2ICsxOTg1LDExIEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWQKICAgICAgICAgcHJlcGFyZU1l
ZGlhRnJhZ21lbnRVUkkoKTsKICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuZHVy
YXRpb25jaGFuZ2VFdmVudCk7CiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLmxv
YWRlZG1ldGFkYXRhRXZlbnQpOworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQp
CisgICAgICAgIGlmIChoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkud2Via2l0cGxheWJh
Y2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQpKQorICAgICAgICAgICAgZW5xdWV1ZVBs
YXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KCk7CisjZW5kaWYKKyAgICAgICAg
CiAgICAgICAgIGlmIChoYXNNZWRpYUNvbnRyb2xzKCkpCiAgICAgICAgICAgICBtZWRpYUNvbnRy
b2xzKCktPmxvYWRlZE1ldGFkYXRhKCk7CiAgICAgICAgIGlmIChyZW5kZXJlcigpKQpAQCAtNDI2
OCw2ICs0MjcxLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckVuZ2luZQog
CiAgICAgbV9oYXZlUHJlcGFyZWRUb1BsYXkgPSBmYWxzZTsKIAorICAgIG1fbWVkaWFTZXNzaW9u
LT5hcHBseU1lZGlhUGxheWVyUmVzdHJpY3Rpb25zKCp0aGlzKTsKKwogI2lmIFBMQVRGT1JNKElP
UykKICAgICBpZiAoIW1fcGxheWVyKQogICAgICAgICByZXR1cm47CkBAIC00NjU0LDggKzQ2NTks
MTMgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjbGVhck1lZGlhUGxheWVyKAogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAgIGlmIChoYXNFdmVudExp
c3RlbmVycyhldmVudE5hbWVzKCkud2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFu
Z2VkRXZlbnQpKQorICAgIGlmIChoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkud2Via2l0
cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQpKSB7CiAgICAgICAgIG1fbWVk
aWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycygqdGhp
cywgZmFsc2UpOworCisgICAgICAgIC8vIFNlbmQgYW4gYXZhaWxhYmlsaXR5IGV2ZW50IGluIGNh
c2Ugc2NyaXB0cyB3YW50IHRvIGhpZGUgdGhlIHBpY2tlciB3aGVuIHRoZSBlbGVtZW50CisgICAg
ICAgIC8vIGRvZXNuJ3Qgc3VwcG9ydCBwbGF5YmFjayB0byBhIHRhcmdldC4KKyAgICAgICAgZW5x
dWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KCk7CisgICAgfQogI2Vu
ZGlmCiAKICAgICBtX3BsYXllciA9IG51bGxwdHI7CkBAIC00ODEwLDYgKzQ4MjAsMTEgQEAgYm9v
bCBIVE1MTWVkaWFFbGVtZW50Ojp3ZWJraXRDdXJyZW50UGxheQogICAgIHJldHVybiBtX21lZGlh
U2Vzc2lvbi0+Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJlbGVzcygqdGhpcyk7CiB9CiAKK2Jv
b2wgSFRNTE1lZGlhRWxlbWVudDo6d2Via2l0Q3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0
ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhU2Vzc2lvbi0+Y3VycmVudFBsYXliYWNr
VGFyZ2V0SXNTdXBwb3J0ZWQoKnRoaXMpOworfQorCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Ondp
cmVsZXNzUm91dGVzQXZhaWxhYmxlRGlkQ2hhbmdlKCkKIHsKICAgICBlbnF1ZXVlUGxheWJhY2tU
YXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkRXZlbnQoKTsKQEAgLTQ4NjksNiArNDg4NCwyNyBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFdpcmVsZXNzUGxheWJhCiAgICAgaWYgKG1fcGxheWVy
KQogICAgICAgICBtX3BsYXllci0+c2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChkZXZpY2UpOwog
fQorCitib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJn
ZXQoKQoreworICAgIGJvb2wgY2FuUGxheSA9IG1fcGxheWVyICYmIG1fcGxheWVyLT5jYW5QbGF5
VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCk7CisKKyAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFF
bGVtZW50OjpjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCVwKSAtIHJldHVybmluZyAl
cyIsIHRoaXMsIGJvb2xTdHJpbmcoY2FuUGxheSkpOworCisgICAgcmV0dXJuIGNhblBsYXk7Cit9
CisKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgp
Cit7CisgICAgaWYgKG1fcGxheWVyKQorICAgICAgICBtX3BsYXllci0+c3RhcnRQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCgpOworfQorCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnN0b3BQbGF5aW5n
VG9QbGF5YmFja1RhcmdldCgpCit7CisgICAgaWYgKG1fcGxheWVyKQorICAgICAgICBtX3BsYXll
ci0+c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Cit9CiAjZW5kaWYKIAogZG91YmxlIEhU
TUxNZWRpYUVsZW1lbnQ6Om1pbkZhc3RSZXZlcnNlUmF0ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1NCwx
MiArMzU0LDE2IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQogICAgIHZvaWQgd2Via2l0U2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCk7CiAgICAgYm9vbCB3
ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCkgY29uc3Q7CisgICAgYm9vbCB3
ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZCgpIGNvbnN0OwogCiAgICAgdmly
dHVhbCBib29sIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpIG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCB2b2lkIHdpcmVsZXNzUm91dGVzQXZhaWxhYmxlRGlkQ2hhbmdlKCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGNhblBsYXlUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXQoKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChjb25z
dCBNZWRpYVBsYXliYWNrVGFyZ2V0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0
UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rv
cFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIC8vIEV2
ZW50VGFyZ2V0IGZ1bmN0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaWRsCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNCArMTE2LDUgQEAKIAogICAg
IFtDb25kaXRpb25hbD1XSVJFTEVTU19QTEFZQkFDS19UQVJHRVRdIHZvaWQgd2Via2l0U2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyKCk7CiAgICAgW0NvbmRpdGlvbmFsPVdJUkVMRVNTX1BMQVlCQUNL
X1RBUkdFVF0gcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gd2Via2l0Q3VycmVudFBsYXliYWNr
VGFyZ2V0SXNXaXJlbGVzczsKKyAgICBbQ29uZGl0aW9uYWw9V0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUXSByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB3ZWJraXRDdXJyZW50UGxheWJhY2tUYXJn
ZXRJc1N1cHBvcnRlZDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNl
c3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vz
c2lvbi5jcHAJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAgSFRNTE1lZGlh
U2Vzc2lvbjo6SFRNTE1lZGlhU2Vzc2lvbihNZWRpYQogICAgICwgbV9yZXN0cmljdGlvbnMoTm9S
ZXN0cmljdGlvbnMpCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICAs
IG1fdGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZFRpbWVyKCp0aGlzLCAmSFRNTE1lZGlhU2Vzc2lv
bjo6dGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZFRpbWVyRmlyZWQpCisgICAgLCBtX3BsYXliYWNr
VGFyZ2V0KHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFQbGF5YmFja1RhcmdldD4oKSkKICNlbmRpZgog
ewogfQpAQCAtMTYzLDQzICsxNjQsNDkgQEAgYm9vbCBIVE1MTWVkaWFTZXNzaW9uOjpwYWdlQWxs
b3dzUGxheWJhYwogfQogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLWJv
b2wgSFRNTE1lZGlhU2Vzc2lvbjo6c2hvd2luZ1BsYXliYWNrVGFyZ2V0UGlja2VyUGVybWl0dGVk
KGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0Citib29sIEhUTUxNZWRpYVNl
c3Npb246OmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoY29uc3QgSFRNTE1lZGlhRWxl
bWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAobV9yZXN0cmljdGlvbnMgJiBSZXF1aXJl
VXNlckdlc3R1cmVUb1Nob3dQbGF5YmFja1RhcmdldFBpY2tlciAmJiAhU2NyaXB0Q29udHJvbGxl
cjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiSFRNTE1l
ZGlhU2Vzc2lvbjo6c2hvd2luZ1BsYXliYWNrVGFyZ2V0UGlja2VyUGVybWl0dGVkIC0gcmV0dXJu
aW5nIEZBTFNFIGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMiKTsKKyAgICBNZWRpYVBsYXllciogcGxh
eWVyID0gZWxlbWVudC5wbGF5ZXIoKTsKKyAgICBpZiAoIXBsYXllcikgeworICAgICAgICBMT0co
TWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpjdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNz
IC0gcmV0dXJuaW5nIEZBTFNFIGJlY2F1c2UgcGxheWVyIGlzIE5VTEwiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSkg
ewotICAgICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpzaG93aW5nUGxheWJhY2tU
YXJnZXRQaWNrZXJQZXJtaXR0ZWQgLSByZXR1cm5pbmcgRkFMU0UgYmVjYXVzZSBwYWdlIGlzIE5V
TEwiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBib29sIGlzV2lyZWxlc3Mg
PSBwbGF5ZXItPmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2lyZWxlc3MoKTsKKyAgICBMT0coTWVk
aWEsICJIVE1MTWVkaWFTZXNzaW9uOjpjdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzIC0g
cmV0dXJuaW5nICVzIiwgaXNXaXJlbGVzcyA/ICJUUlVFIiA6ICJGQUxTRSIpOwogCi0gICAgcmV0
dXJuICF3aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZChlbGVtZW50KTsKKyAgICByZXR1cm4g
aXNXaXJlbGVzczsKIH0KIAotYm9vbCBIVE1MTWVkaWFTZXNzaW9uOjpjdXJyZW50UGxheWJhY2tU
YXJnZXRJc1dpcmVsZXNzKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0Citi
b29sIEhUTUxNZWRpYVNlc3Npb246OmN1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkKGNv
bnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgTWVkaWFQbGF5ZXIq
IHBsYXllciA9IGVsZW1lbnQucGxheWVyKCk7CiAgICAgaWYgKCFwbGF5ZXIpIHsKLSAgICAgICAg
TE9HKE1lZGlhLCAiSFRNTE1lZGlhU2Vzc2lvbjo6Y3VycmVudFBsYXliYWNrVGFyZ2V0SXNXaXJl
bGVzcyAtIHJldHVybmluZyBGQUxTRSBiZWNhdXNlIHBsYXllciBpcyBOVUxMIik7CisgICAgICAg
IExPRyhNZWRpYSwgIkhUTUxNZWRpYVNlc3Npb246OmN1cnJlbnRQbGF5YmFja1RhcmdldElzU3Vw
cG9ydGVkIC0gcmV0dXJuaW5nIEZBTFNFIGJlY2F1c2UgcGxheWVyIGlzIE5VTEwiKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgaXNXaXJlbGVzcyA9IHBsYXllci0+
aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpOwotICAgIExPRyhNZWRpYSwgIkhUTUxN
ZWRpYVNlc3Npb246OmN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MgLSByZXR1cm5pbmcg
JXMiLCBpc1dpcmVsZXNzID8gIlRSVUUiIDogIkZBTFNFIik7Ci0KLSAgICByZXR1cm4gaXNXaXJl
bGVzczsKKyAgICBib29sIGlzU3VwcG9ydGVkID0gcGxheWVyLT5pc0N1cnJlbnRQbGF5YmFja1Rh
cmdldFN1cHBvcnRlZCgpOworICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYVNlc3Npb246OmN1cnJl
bnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkIC0gcmV0dXJuaW5nICVzIiwgaXNTdXBwb3J0ZWQg
PyAiVFJVRSIgOiAiRkFMU0UiKTsKKyAgICAKKyAgICByZXR1cm4gaXNTdXBwb3J0ZWQ7CiB9CiAK
IHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IEhU
TUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhU2Vz
c2lvbjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyIik7CiAKLSAgICBpZiAoIXNob3dpbmdQbGF5
YmFja1RhcmdldFBpY2tlclBlcm1pdHRlZChlbGVtZW50KSkKKyAgICBpZiAobV9yZXN0cmljdGlv
bnMgJiBSZXF1aXJlVXNlckdlc3R1cmVUb1Nob3dQbGF5YmFja1RhcmdldFBpY2tlciAmJiAhU2Ny
aXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpIHsKKyAgICAgICAgTE9HKE1l
ZGlhLCAiSFRNTE1lZGlhU2Vzc2lvbjo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyIC0gcmV0dXJu
aW5nIGVhcmx5IGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSkgeworICAgICAgICBMT0co
TWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpzaG93aW5nUGxheWJhY2tUYXJnZXRQaWNrZXJQZXJt
aXR0ZWQgLSByZXR1cm5pbmcgZWFybHkgYmVjYXVzZSBwYWdlIGlzIE5VTEwiKTsKICAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIG1faGF2ZVJlcXVlc3RlZFBsYXliYWNrVGFyZ2V0UGlja2Vy
ID0gdHJ1ZTsKKyAgICBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuc2V0Q3Vy
cmVudFNlc3Npb24oKnRoaXMpOwogICAgIGVsZW1lbnQuZG9jdW1lbnQoKS5zaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoZWxlbWVudCk7CiB9CiAKQEAgLTIzOCw3ICsyNDUsNyBAQCBib29sIEhUTUxN
ZWRpYVNlc3Npb246OndpcmVsZXNzVmlkZW9QbGF5CiAKICAgICBNZWRpYVBsYXllciogcGxheWVy
ID0gZWxlbWVudC5wbGF5ZXIoKTsKICAgICBpZiAoIXBsYXllcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGJvb2wgZGlzYWJsZWQgPSBwbGF5ZXIt
PndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCk7CiAgICAgTE9HKE1lZGlhLCAiSFRNTE1l
ZGlhU2Vzc2lvbjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgLSByZXR1cm5pbmcgJXMg
YmVjYXVzZSBtZWRpYSBlbmdpbmUgc2F5cyBzbyIsIGRpc2FibGVkID8gIlRSVUUiIDogIkZBTFNF
Iik7CkBAIC0yNzcsOCArMjg0LDEyIEBAIHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6c2V0SGFzUGxh
eWJhY2tUYXIKIAogdm9pZCBIVE1MTWVkaWFTZXNzaW9uOjpkaWRDaG9vc2VQbGF5YmFja1Rhcmdl
dChjb25zdCBNZWRpYVBsYXliYWNrVGFyZ2V0JiBkZXZpY2UpCiB7Ci0gICAgbV9oYXZlUmVxdWVz
dGVkUGxheWJhY2tUYXJnZXRQaWNrZXIgPSBmYWxzZTsKLSAgICBjbGllbnQoKS5zZXRXaXJlbGVz
c1BsYXliYWNrVGFyZ2V0KGRldmljZSk7CisgICAgbV9wbGF5YmFja1RhcmdldC0+c2V0RGV2aWNl
UGlja2VyQ29udGV4dChkZXZpY2UuZGV2aWNlUGlja2VyQ29udGV4dCgpKTsKKyAgICBjbGllbnQo
KS5zZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCptX3BsYXliYWNrVGFyZ2V0LmdldCgpKTsKKyAg
ICBpZiAoZGV2aWNlLmhhc0FjdGl2ZVJvdXRlKCkgJiYgTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hh
cmVkTWFuYWdlcigpLmN1cnJlbnRTZXNzaW9uKCkgPT0gdGhpcykKKyAgICAgICAgc3RhcnRQbGF5
aW5nVG9QbGF5YmFja1RhcmdldCgpOworICAgIGVsc2UKKyAgICAgICAgc3RvcFBsYXlpbmdUb1Bs
YXliYWNrVGFyZ2V0KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6dGFyZ2V0QXZhaWxh
YmlsaXR5Q2hhbmdlZFRpbWVyRmlyZWQoKQpAQCAtMjkxLDYgKzMwMiw4IEBAIHZvaWQgSFRNTE1l
ZGlhU2Vzc2lvbjo6ZXh0ZXJuYWxPdXRwdXREZXYKICAgICBpZiAobV9oYXNQbGF5YmFja1Rhcmdl
dHMgPT0gaGFzVGFyZ2V0cykKICAgICAgICAgcmV0dXJuOwogCisgICAgTE9HKE1lZGlhLCAiSFRN
TE1lZGlhU2Vzc2lvbjo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UgLSBo
YXNUYXJnZXRzICVzIiwgaGFzVGFyZ2V0cyA/ICJUUlVFIiA6ICJGQUxTRSIpOworCiAgICAgbV9o
YXNQbGF5YmFja1RhcmdldHMgPSBoYXNUYXJnZXRzOwogICAgIGlmICghbV90YXJnZXRBdmFpbGFi
aWxpdHlDaGFuZ2VkVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV90YXJnZXRBdmFpbGFiaWxp
dHlDaGFuZ2VkVGltZXIuc3RhcnRPbmVTaG90KDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFTZXNzaW9uLmgJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw4IEBAIHB1
YmxpYzoKICAgICBib29sIHBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmcoY29uc3QgSFRN
TE1lZGlhRWxlbWVudCYpIGNvbnN0OwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RB
UkdFVCkKLSAgICBib29sIHNob3dpbmdQbGF5YmFja1RhcmdldFBpY2tlclBlcm1pdHRlZChjb25z
dCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3Q7CiAgICAgYm9vbCBjdXJyZW50UGxheWJhY2tUYXJn
ZXRJc1dpcmVsZXNzKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKKyAgICBib29sIGN1
cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBj
b25zdDsKICAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihjb25zdCBIVE1MTWVkaWFF
bGVtZW50Jik7CiAgICAgYm9vbCBoYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cyhjb25zdCBIVE1M
TWVkaWFFbGVtZW50JikgY29uc3Q7CiAKQEAgLTEwMiwxNiArMTAyLDE1IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGRpZENob29zZVBsYXliYWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJh
Y2tUYXJnZXQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZXh0ZXJuYWxPdXRwdXREZXZp
Y2VBdmFpbGFibGVEaWRDaGFuZ2UoYm9vbCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBi
b29sIHJlcXVpcmVzUGxheWJhY2tUYXJnZXRSb3V0ZU1vbml0b3JpbmcoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWVzdGVkUGxheWJhY2tUYXJnZXRQaWNrZXIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2hhdmVSZXF1ZXN0ZWRQbGF5YmFja1RhcmdldFBpY2tlcjsg
fQogI2VuZGlmCiAKICAgICBCZWhhdmlvclJlc3RyaWN0aW9ucyBtX3Jlc3RyaWN0aW9uczsKIAog
I2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgbXV0YWJsZSBUaW1lciBt
X3RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRUaW1lcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVk
aWFQbGF5YmFja1RhcmdldD4gbV9wbGF5YmFja1RhcmdldDsKICAgICBib29sIG1faGFzUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgeyBmYWxzZSB9OwogICAgIG11dGFibGUgYm9v
bCBtX2hhc1BsYXliYWNrVGFyZ2V0cyB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBib29sIG1faGF2
ZVJlcXVlc3RlZFBsYXliYWNrVGFyZ2V0UGlja2VyIHsgZmFsc2UgfTsKICNlbmRpZgogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNiArMjEyLDkgQEAgUGFnZTo6
UGFnZShQYWdlQ29uZmlndXJhdGlvbiYgcGFnZUNvbmZpZwogICAgICwgbV91c2VyQ29udGVudENv
bnRyb2xsZXIoV1RGOjptb3ZlKHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxl
cikpCiAgICAgLCBtX3Zpc2l0ZWRMaW5rU3RvcmUoKldURjo6bW92ZShwYWdlQ29uZmlndXJhdGlv
bi52aXNpdGVkTGlua1N0b3JlKSkKICAgICAsIG1fc2Vzc2lvbklEKFNlc3Npb25JRDo6ZGVmYXVs
dFNlc3Npb25JRCgpKQorI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAg
LCBtX3BsYXliYWNrVGFyZ2V0KHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFQbGF5YmFja1RhcmdldD4o
KSkKKyNlbmRpZgogICAgICwgbV9pc0Nsb3NpbmcoZmFsc2UpCiAgICAgLCBtX2lzUGxheWluZ0F1
ZGlvKGZhbHNlKQogewpAQCAtMTY4MSwxMCArMTY4NCw4IEBAIHZvaWQgUGFnZTo6c2V0U2Vzc2lv
bklEKFNlc3Npb25JRCBzZXNzaW8KIH0KIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19U
QVJHRVQpCi12b2lkIFBhZ2U6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2NhdGlvbiwgYm9vbCBpc1ZpZGVvKQor
dm9pZCBQYWdlOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGxvY2F0aW9uLCBib29sIGlzVmlkZW8pCiB7Ci0gICAgbV9kb2N1bWVudFJlcXVlc3RpbmdQ
bGF5YmFja1RhcmdldFBpY2tlciA9IGRvY3VtZW50OwotCiAjaWYgUExBVEZPUk0oSU9TKQogICAg
IC8vIEZJWE1FOiByZWZhY3RvciBpT1MgaW1wbGVtZW50YXRpb24uCiAgICAgVU5VU0VEX1BBUkFN
KGxvY2F0aW9uKTsKQEAgLTE2OTYsMjUgKzE2OTcsOSBAQCB2b2lkIFBhZ2U6OnNob3dQbGF5YmFj
a1RhcmdldFBpY2tlcihEb2N1CiAKIHZvaWQgUGFnZTo6ZGlkQ2hvb3NlUGxheWJhY2tUYXJnZXQo
Y29uc3QgTWVkaWFQbGF5YmFja1RhcmdldCYgdGFyZ2V0KQogewotICAgIERvY3VtZW50KiBkb2N1
bWVudFRoYXRSZXF1ZXN0ZWRQaWNrZXIgPSBudWxscHRyOwotCi0gICAgbV9wbGF5YmFja1Rhcmdl
dCA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFQbGF5YmFja1RhcmdldD4odGFyZ2V0LmRldmljZVBp
Y2tlckNvbnRleHQoKSk7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgICAgIGlmIChmcmFtZS0+
ZG9jdW1lbnQoKSA9PSBtX2RvY3VtZW50UmVxdWVzdGluZ1BsYXliYWNrVGFyZ2V0UGlja2VyKSB7
Ci0gICAgICAgICAgICBkb2N1bWVudFRoYXRSZXF1ZXN0ZWRQaWNrZXIgPSBkb2N1bWVudDsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgbV9wbGF5YmFja1RhcmdldC0+c2V0
RGV2aWNlUGlja2VyQ29udGV4dCh0YXJnZXQuZGV2aWNlUGlja2VyQ29udGV4dCgpKTsKKyAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkKICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmRpZENob29z
ZVBsYXliYWNrVGFyZ2V0KHRhcmdldCk7Ci0gICAgfQotCi0gICAgLy8gTm90aWZ5IHRoZSBkb2N1
bWVudCB0aGF0IHJlcXVlc3RlZCB0aGUgY2hvb3NlciBsYXN0IGJlY2F1c2UgaWYgbW9yZSB0aGFu
IG9uZSBlbGVtZW50Ci0gICAgLy8gaXMgcGxheWluZyB0aGUgbGFzdCBvbmUgdG8gc2V0IHRoZSBj
b250ZXh0IHdpbGwgYmUgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGdldHMgdG8KLSAgICAvLyAgcGxh
eSB0byB0aGUgZXh0ZXJuYWwgZGV2aWNlLgotICAgIGlmIChkb2N1bWVudFRoYXRSZXF1ZXN0ZWRQ
aWNrZXIpCi0gICAgICAgIGRvY3VtZW50VGhhdFJlcXVlc3RlZFBpY2tlci0+ZGlkQ2hvb3NlUGxh
eWJhY2tUYXJnZXQodGFyZ2V0KTsKLQotICAgIG1fZG9jdW1lbnRSZXF1ZXN0aW5nUGxheWJhY2tU
YXJnZXRQaWNrZXIgPSBudWxscHRyOwogfQogCiB2b2lkIFBhZ2U6OnBsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5RGlkQ2hhbmdlKGJvb2wgYXZhaWxhYmxlKQpAQCAtMTczNCwxMCArMTcxOSw2IEBA
IHZvaWQgUGFnZTo6Y29uZmlndXJlUGxheWJhY2tUYXJnZXRNb25pdG8KICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtX3JlcXVpcmVzUGxheWJhY2tUYXJnZXRNb25pdG9yaW5nID09IG1vbml0
b3JpbmdSZXF1aXJlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVxdWlyZXNQbGF5YmFja1Rh
cmdldE1vbml0b3JpbmcgPSBtb25pdG9yaW5nUmVxdWlyZWQ7Ci0KICAgICBpZiAobW9uaXRvcmlu
Z1JlcXVpcmVkKQogICAgICAgICBjaHJvbWUoKS5jbGllbnQoKS5zdGFydGluZ01vbml0b3JpbmdQ
bGF5YmFja1RhcmdldHMoKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24g
MTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyNiw3ICs0MjYsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNdXRl
ZChib29sKTsKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgdm9p
ZCBzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoRG9jdW1lbnQqLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYsIGJvb2wpOworICAgIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiwgYm9vbCk7CiAgICAgYm9vbCBoYXNXaXJlbGVzc1BsYXliYWNrVGFy
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0OyB9CiAgICAg
TWVkaWFQbGF5YmFja1RhcmdldCYgcGxheWJhY2tUYXJnZXQoKSBjb25zdCB7IHJldHVybiAqbV9w
bGF5YmFja1RhcmdldC5nZXQoKTsgfQogICAgIHZvaWQgY29uZmlndXJlUGxheWJhY2tUYXJnZXRN
b25pdG9yaW5nKCk7CkBAIC01ODcsOSArNTg3LDcgQEAgcHJpdmF0ZToKICAgICBTZXNzaW9uSUQg
bV9zZXNzaW9uSUQ7CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQotICAg
IERvY3VtZW50KiBtX2RvY3VtZW50UmVxdWVzdGluZ1BsYXliYWNrVGFyZ2V0UGlja2VyIHsgbnVs
bHB0ciB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVBsYXliYWNrVGFyZ2V0PiBtX3BsYXli
YWNrVGFyZ2V0OwotICAgIGJvb2wgbV9yZXF1aXJlc1BsYXliYWNrVGFyZ2V0TW9uaXRvcmluZyB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXQgeyBmYWxzZSB9
OwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vz
c2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVk
aWFTZXNzaW9uLmNwcAkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vTWVkaWFTZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDYgKzIyNywy
MSBAQCBNZWRpYVNlc3Npb246OkRpc3BsYXlUeXBlIE1lZGlhU2Vzc2lvbjo6CiAgICAgcmV0dXJu
IG1fY2xpZW50LmRpc3BsYXlUeXBlKCk7CiB9CiAKK2Jvb2wgTWVkaWFTZXNzaW9uOjpjYW5QbGF5
VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGllbnQu
Y2FuUGxheVRvV2lyZWxlc3NQbGF5YmFja1RhcmdldCgpOworfQorCit2b2lkIE1lZGlhU2Vzc2lv
bjo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpCit7CisgICAgY2xpZW50KCkuc3RhcnRQ
bGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworfQorCit2b2lkIE1lZGlhU2Vzc2lvbjo6c3RvcFBs
YXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3sKKyAgICBjbGllbnQoKS5zdG9wUGxheWluZ1RvUGxh
eWJhY2tUYXJnZXQoKTsKK30KKwogU3RyaW5nIE1lZGlhU2Vzc2lvbkNsaWVudDo6bWVkaWFTZXNz
aW9uVGl0bGUoKSBjb25zdAogewogICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTI0MSw2ICsyNTYs
NSBAQCBkb3VibGUgTWVkaWFTZXNzaW9uQ2xpZW50OjptZWRpYVNlc3Npb25DCiB7CiAgICAgcmV0
dXJuIE1lZGlhUGxheWVyOjppbnZhbGlkVGltZSgpOwogfQotCiB9CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5oCShyZXZpc2lvbiAx
ODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDEyICsxMTcsMTUgQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c0hpZGRlbigpIGNvbnN0OwogCisgICAgYm9vbCBjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFy
Z2V0KCkgY29uc3Q7CisgICAgdm9pZCBzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7Cisg
ICAgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKKwogI2lmIEVOQUJMRShXSVJF
TEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgLy8gTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlckNs
aWVudAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaG9vc2VQbGF5YmFja1RhcmdldChjb25zdCBNZWRp
YVBsYXliYWNrVGFyZ2V0Jikgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIGV4dGVybmFs
T3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wpIGNvbnN0IG92ZXJyaWRlIHsgfQog
ICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91dGVNb25pdG9yaW5nKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWVz
dGVkUGxheWJhY2tUYXJnZXRQaWNrZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQogI2VuZGlmCiAKIHByb3RlY3RlZDoKQEAgLTE2NCwxMCArMTY3LDExIEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgYm9vbCBvdmVycmlkZUJhY2tncm91bmRQbGF5YmFja1Jlc3RyaWN0aW9uKCkg
Y29uc3QgPSAwOwogCi0jaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICB2
aXJ0dWFsIHZvaWQgd2lyZWxlc3NSb3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2UoKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChjb25zdCBNZWRpYVBsYXliYWNr
VGFyZ2V0JikgeyB9Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUGxheVRvV2lyZWxlc3NQ
bGF5YmFja1RhcmdldCgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0
UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFBsYXlp
bmdUb1BsYXliYWNrVGFyZ2V0KCkgeyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5NZWRp
YVNlc3Npb25DbGllbnQoKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCShyZXZpc2lvbiAxODIxODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg2LDE5ICsxODYsMTggQEAgYm9vbCBNZWRpYVNlc3Npb25NYW5h
Z2VyOjpzZXNzaW9uV2lsbEJlZwogICAgIGlmIChtX2ludGVycnVwdGVkKQogICAgICAgICBlbmRJ
bnRlcnJ1cHRpb24oTWVkaWFTZXNzaW9uOjpOb0ZsYWdzKTsKIAotICAgIGlmICghcmVzdHJpY3Rp
b25zICYgQ29uY3VycmVudFBsYXliYWNrTm90UGVybWl0dGVkKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQorICAgIGJvb2wgbmV3U2Vzc2lvbkNhblBsYXlUb1BsYXliYWNrVGFyZ2V0ID0gc2Vzc2lv
bi5jYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCk7CiAgICAgVmVjdG9yPE1lZGlhU2Vz
c2lvbio+IHNlc3Npb25zID0gbV9zZXNzaW9uczsKICAgICBmb3IgKGF1dG8qIG9uZVNlc3Npb24g
OiBzZXNzaW9ucykgewogICAgICAgICBpZiAob25lU2Vzc2lvbiA9PSAmc2Vzc2lvbikKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAob25lU2Vzc2lvbi0+bWVkaWFUeXBlKCkgIT0g
c2Vzc2lvblR5cGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJlc3RyaWN0
aW9ucyAmIENvbmN1cnJlbnRQbGF5YmFja05vdFBlcm1pdHRlZCkKKyAgICAgICAgaWYgKG5ld1Nl
c3Npb25DYW5QbGF5VG9QbGF5YmFja1RhcmdldCkKKyAgICAgICAgICAgIG9uZVNlc3Npb24tPnN0
b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworICAgICAgICBpZiAob25lU2Vzc2lvbi0+bWVk
aWFUeXBlKCkgPT0gc2Vzc2lvblR5cGUgJiYgcmVzdHJpY3Rpb25zICYgQ29uY3VycmVudFBsYXli
YWNrTm90UGVybWl0dGVkKQogICAgICAgICAgICAgb25lU2Vzc2lvbi0+cGF1c2VTZXNzaW9uKCk7
CiAgICAgfQotICAgIAorICAgIHNlc3Npb24uc3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgp
OworCiAgICAgdXBkYXRlU2Vzc2lvblN0YXRlKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb25NYW5hZ2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uTWFu
YWdlci5oCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9NZWRpYVNlc3Npb25NYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNXaXJlbGVzc1RhcmdldHNBdmFpbGFibGUoKSB7
IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKKyAgICB2b2lkIHNldEN1cnJlbnRTZXNzaW9uKE1l
ZGlhU2Vzc2lvbiYpOworICAgIE1lZGlhU2Vzc2lvbiogY3VycmVudFNlc3Npb24oKTsKKwogcHJv
dGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBNZWRpYVNlc3Npb247CiAgICAgZXhwbGljaXQgTWVk
aWFTZXNzaW9uTWFuYWdlcigpOwpAQCAtOTIsOSArOTUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBhZGRTZXNzaW9uKE1lZGlhU2Vzc2lvbiYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lvbihNZWRp
YVNlc3Npb24mKTsKIAotICAgIHZvaWQgc2V0Q3VycmVudFNlc3Npb24oTWVkaWFTZXNzaW9uJik7
Ci0gICAgTWVkaWFTZXNzaW9uKiBjdXJyZW50U2Vzc2lvbigpOwotCiAgICAgVmVjdG9yPE1lZGlh
U2Vzc2lvbio+IHNlc3Npb25zKCkgeyByZXR1cm4gbV9zZXNzaW9uczsgfQogCiBwcml2YXRlOgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1Rhcmdl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWJhY2tUYXJnZXQuaAkocmV2aXNpb24gMTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw2ICs1MCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldERldmljZVBpY2tlckNvbnRleHQo
QVZPdXRwdXRDb250ZXh0ICpjb250ZXh0KSB7IG1fZGV2aWNlUGlja2VyQ29udGV4dCA9IGNvbnRl
eHQ7IH0KICAgICBBVk91dHB1dENvbnRleHQgKmRldmljZVBpY2tlckNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2RldmljZVBpY2tlckNvbnRleHQuZ2V0KCk7IH0KKyAgICBib29sIGhhc0FjdGl2
ZVJvdXRlKCkgY29uc3Q7CisjZWxzZQorICAgIHZvaWQgc2V0RGV2aWNlUGlja2VyQ29udGV4dChB
Vk91dHB1dENvbnRleHQgKikgeyB9CisgICAgQVZPdXRwdXRDb250ZXh0ICpkZXZpY2VQaWNrZXJD
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIGJvb2wgaGFzQWN0aXZlUm91
dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKIHByb3RlY3RlZDoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyQ2xpZW50LmgJKHJldmlzaW9uIDE4MjE4OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hhbmdlKGJvb2wp
IGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1BsYXliYWNrVGFyZ2V0Um91
dGVNb25pdG9yaW5nKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCByZXF1ZXN0ZWRQbGF5
YmFja1RhcmdldFBpY2tlcigpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5jcHAJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQzLDYgKzg0MywxMSBA
QCBib29sIE1lZGlhUGxheWVyOjppc0N1cnJlbnRQbGF5YmFja1RhcmdlCiAgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+aXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpOwogfQogCitib29sIE1l
ZGlhUGxheWVyOjppc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNDdXJyZW50UGxheWJhY2tUYXJnZXRTdXBwb3J0ZWQoKTsK
K30KKwogU3RyaW5nIE1lZGlhUGxheWVyOjp3aXJlbGVzc1BsYXliYWNrVGFyZ2V0TmFtZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2lyZWxlc3NQbGF5YmFja1RhcmdldE5hbWUo
KTsKQEAgLTg2OCwxMCArODczLDI1IEBAIHZvaWQgTWVkaWFQbGF5ZXI6OmN1cnJlbnRQbGF5YmFj
a1RhcmdldEkKICAgICBtX2NsaWVudC5tZWRpYVBsYXllckN1cnJlbnRQbGF5YmFja1RhcmdldElz
V2lyZWxlc3NDaGFuZ2VkKHRoaXMpOwogfQogCitib29sIE1lZGlhUGxheWVyOjpjYW5QbGF5VG9X
aXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5j
YW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCk7Cit9CisKIHZvaWQgTWVkaWFQbGF5ZXI6
OnNldFdpcmVsZXNzUGxheWJhY2tUYXJnZXQoY29uc3QgTWVkaWFQbGF5YmFja1RhcmdldCYgZGV2
aWNlKQogewogICAgIG1fcHJpdmF0ZS0+c2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldChkZXZpY2Up
OwogfQorCit2b2lkIE1lZGlhUGxheWVyOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkK
K3sKKyAgICBtX3ByaXZhdGUtPnN0YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllcjo6c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3sKKyAgICBt
X3ByaXZhdGUtPnN0b3BQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpOworfQogI2VuZGlmCiAKIGRv
dWJsZSBNZWRpYVBsYXllcjo6bWF4RmFzdEZvcndhcmRSYXRlKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24g
MTgyMTg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDYgKzQ2Niw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJM
RShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgYm9vbCBpc0N1cnJlbnRQbGF5YmFja1Rh
cmdldFdpcmVsZXNzKCkgY29uc3Q7CisgICAgYm9vbCBpc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1
cHBvcnRlZCgpIGNvbnN0OwogCiAgICAgZW51bSBXaXJlbGVzc1BsYXliYWNrVGFyZ2V0VHlwZSB7
IFRhcmdldFR5cGVOb25lLCBUYXJnZXRUeXBlQWlyUGxheSwgVGFyZ2V0VHlwZVRWT3V0IH07CiAg
ICAgV2lyZWxlc3NQbGF5YmFja1RhcmdldFR5cGUgd2lyZWxlc3NQbGF5YmFja1RhcmdldFR5cGUo
KSBjb25zdDsKQEAgLTQ3OCw3ICs0NzksMTEgQEAgcHVibGljOgogICAgIHZvaWQgY3VycmVudFBs
YXliYWNrVGFyZ2V0SXNXaXJlbGVzc0NoYW5nZWQoKTsKICAgICB2b2lkIHBsYXliYWNrVGFyZ2V0
QXZhaWxhYmlsaXR5Q2hhbmdlZCgpOwogCisgICAgYm9vbCBjYW5QbGF5VG9XaXJlbGVzc1BsYXli
YWNrVGFyZ2V0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KGNv
bnN0IE1lZGlhUGxheWJhY2tUYXJnZXQmKTsKKworICAgIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5
YmFja1RhcmdldCgpOworICAgIHZvaWQgc3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCk7CiAj
ZW5kaWYKIAogICAgIGRvdWJsZSBtaW5GYXN0UmV2ZXJzZVJhdGUoKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJp
dmF0ZS5oCShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDE0ICsxNjEs
MTkgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50UGxheWJhY2tUYXJnZXRXaXJlbGVzcygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQ3VycmVudFBsYXliYWNrVGFyZ2V0
U3VwcG9ydGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBTdHJpbmcg
d2lyZWxlc3NQbGF5YmFja1RhcmdldE5hbWUoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygp
OyB9CiAgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6V2lyZWxlc3NQbGF5YmFja1RhcmdldFR5cGUg
d2lyZWxlc3NQbGF5YmFja1RhcmdldFR5cGUoKSBjb25zdCB7IHJldHVybiBNZWRpYVBsYXllcjo6
VGFyZ2V0VHlwZU5vbmU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB3aXJlbGVzc1ZpZGVvUGxheWJh
Y2tEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHdp
cmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgdm9pZCBzZXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZChib29sKSB7IH0K
IAorICAgIHZpcnR1YWwgYm9vbCBjYW5QbGF5VG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0V2lyZWxlc3NQbGF5YmFj
a1RhcmdldChjb25zdCBNZWRpYVBsYXliYWNrVGFyZ2V0JikgeyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBz
dG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSB7IH0KICNlbmRpZgogCiAjaWYgVVNFKE5BVElW
RV9GVUxMU0NSRUVOX1ZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWJhY2tUYXJnZXRNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWJh
Y2tUYXJnZXRNYWMubW0JKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXliYWNrVGFyZ2V0TWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJB
Q0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9TKQogCi0jaW1wb3J0IDxXZWJDb3JlL01lZGlhUGxh
eWJhY2tUYXJnZXQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQVZGb3VuZGF0aW9uU1BJLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KIApA
QCAtNjMsNiArNjMsMTIgQEAgYm9vbCBNZWRpYVBsYXliYWNrVGFyZ2V0OjpkZWNvZGUoTlNLZXll
ZAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIE1lZGlhUGxheWJhY2tUYXJnZXQ6Omhhc0Fj
dGl2ZVJvdXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZXZpY2VQaWNrZXJDb250ZXh0ICYm
IG1fZGV2aWNlUGlja2VyQ29udGV4dC5nZXQoKS5kZXZpY2VOYW1lOworfQorCisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpICYmICFQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAkocmV2aXNpb24gMTgyMTg5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxOSw3ICs2MTksNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bWV0CiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpyYXRlQ2hhbmdlZCgpCiB7Ci0jaWYgRU5BQkxFKFdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUKSAmJiBQTEFURk9STShJT1MpCiAgICAgaWYgKGlzQ3VycmVudFBsYXliYWNrVGFyZ2V0V2ly
ZWxlc3MoKSkKICAgICAgICAgbV9wbGF5ZXItPmhhbmRsZVBsYXliYWNrQ29tbWFuZChyYXRlKCkg
PyBNZWRpYVNlc3Npb246OlBsYXlDb21tYW5kIDogTWVkaWFTZXNzaW9uOjpQYXVzZUNvbW1hbmQp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCShyZXZpc2lvbiAxODIxODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw2
ICsyODEsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBzZXRXaXJlbGVz
c1ZpZGVvUGxheWJhY2tEaXNhYmxlZChib29sKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZURp
c2FibGVFeHRlcm5hbFBsYXliYWNrKCk7CisgICAgYm9vbCBjYW5QbGF5VG9XaXJlbGVzc1BsYXli
YWNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHN0
YXJ0UGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RvcFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZp
cnR1YWwgZG91YmxlIG1heEZhc3RGb3J3YXJkUmF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fY2FjaGVkQ2FuUGxheUZhc3RGb3J3YXJkID8gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjppbmZpbml0eSgpIDogMi4wOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHJldmlz
aW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTM0Nyw3ICszNDcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBO
U0FycmF5ICphc3NldE1ldGFkYXRhS2V5TmFtZXMoKTsKIHN0YXRpYyBOU0FycmF5ICppdGVtS1ZP
UHJvcGVydGllcygpOwotc3RhdGljIE5TQXJyYXkqIGFzc2V0VHJhY2tNZXRhZGF0YUtleU5hbWVz
KCk7CitzdGF0aWMgTlNBcnJheSAqYXNzZXRUcmFja01ldGFkYXRhS2V5TmFtZXMoKTsKK3N0YXRp
YyBOU0FycmF5ICpwbGF5ZXJLVk9Qcm9wZXJ0aWVzKCk7CiAKICNpZiAhTE9HX0RJU0FCTEVECiBz
dGF0aWMgY29uc3QgY2hhciAqYm9vbFN0cmluZyhib29sIHZhbCkKQEAgLTU0NSwxMSArNTQ2LDkg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgICAgICBpZiAo
bV90aW1lT2JzZXJ2ZXIpCiAgICAgICAgICAgICBbbV9hdlBsYXllci5nZXQoKSByZW1vdmVUaW1l
T2JzZXJ2ZXI6bV90aW1lT2JzZXJ2ZXIuZ2V0KCldOwogICAgICAgICBtX3RpbWVPYnNlcnZlciA9
IG5pbDsKLSAgICAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpjT2Jz
ZXJ2ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAInJhdGUiXTsKLSNpZiBFTkFCTEUoV0lSRUxFU1NfUExB
WUJBQ0tfVEFSR0VUKQotICAgICAgICBbbV9hdlBsYXllci5nZXQoKSByZW1vdmVPYnNlcnZlcjpt
X29iamNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAiZXh0ZXJuYWxQbGF5YmFja0FjdGl2ZSJd
OwotICAgICAgICBbbV9hdlBsYXllci5nZXQoKSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZl
ci5nZXQoKSBmb3JLZXlQYXRoOkAib3V0cHV0Q29udGV4dCJdOwotI2VuZGlmCisKKyAgICAgICAg
Zm9yIChOU1N0cmluZyAqa2V5TmFtZSBpbiBwbGF5ZXJLVk9Qcm9wZXJ0aWVzKCkpCisgICAgICAg
ICAgICBbbV9hdlBsYXllci5nZXQoKSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQo
KSBmb3JLZXlQYXRoOmtleU5hbWVdOwogICAgICAgICBtX2F2UGxheWVyID0gbmlsOwogICAgIH0K
IApAQCAtOTI3LDI4ICs5MjYsMjIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOgogICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwogCiAgICAgbV9hdlBsYXllciA9
IGFkb3B0TlMoW2FsbG9jQVZQbGF5ZXJJbnN0YW5jZSgpIGluaXRdKTsKLSAgICBbbV9hdlBsYXll
ci5nZXQoKSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAicmF0
ZSIgb3B0aW9uczpOU0tleVZhbHVlT2JzZXJ2aW5nT3B0aW9uTmV3IGNvbnRleHQ6KHZvaWQgKilN
ZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllcl07Ci0jaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICBbbV9hdlBsYXllci5nZXQoKSBhZGRP
YnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOkAiZXh0ZXJuYWxQbGF5YmFj
a0FjdGl2ZSIgb3B0aW9uczpOU0tleVZhbHVlT2JzZXJ2aW5nT3B0aW9uTmV3IGNvbnRleHQ6KHZv
aWQgKilNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllcl07Ci0g
ICAgW21fYXZQbGF5ZXIuZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9y
S2V5UGF0aDpAIm91dHB1dENvbnRleHQiIG9wdGlvbnM6TlNLZXlWYWx1ZU9ic2VydmluZ09wdGlv
bk5ldyBjb250ZXh0Oih2b2lkICopTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNv
bnRleHRQbGF5ZXJdOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUKQotICAgIHVwZGF0ZURpc2FibGVFeHRlcm5hbFBsYXliYWNrKCk7Ci0jZW5kaWYKKyAgICBm
b3IgKE5TU3RyaW5nICprZXlOYW1lIGluIHBsYXllcktWT1Byb3BlcnRpZXMoKSkKKyAgICAgICAg
W21fYXZQbGF5ZXIuZ2V0KCkgYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgZm9yS2V5
UGF0aDprZXlOYW1lIG9wdGlvbnM6TlNLZXlWYWx1ZU9ic2VydmluZ09wdGlvbk5ldyBjb250ZXh0
Oih2b2lkICopTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHRQbGF5ZXJd
OwogCiAjaWYgSEFWRShBVkZPVU5EQVRJT05fTUVESUFfU0VMRUNUSU9OX0dST1VQKSAmJiBIQVZF
KEFWRk9VTkRBVElPTl9MRUdJQkxFX09VVFBVVF9TVVBQT1JUKQogICAgIFttX2F2UGxheWVyLmdl
dCgpIHNldEFwcGxpZXNNZWRpYVNlbGVjdGlvbkNyaXRlcmlhQXV0b21hdGljYWxseTpOT107CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgdXBkYXRl
RGlzYWJsZUV4dGVybmFsUGxheWJhY2soKTsKICAgICBbbV9hdlBsYXllci5nZXQoKSBzZXRBbGxv
d3NFeHRlcm5hbFBsYXliYWNrOm1fYWxsb3dzV2lyZWxlc3NWaWRlb1BsYXliYWNrXTsKLSNlbmRp
ZgogCi0jaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElP
UykKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChtX291dHB1dENvbnRleHQpCiAgICAgICAg
IG1fYXZQbGF5ZXIuZ2V0KCkub3V0cHV0Q29udGV4dCA9IG1fb3V0cHV0Q29udGV4dC5nZXQoKTsK
ICNlbmRpZgorI2VuZGlmCiAKICAgICBpZiAocGxheWVyKCktPmNsaWVudCgpLm1lZGlhUGxheWVy
SXNWaWRlbygpKQogICAgICAgICBjcmVhdGVBVlBsYXllckxheWVyKCk7CkBAIC0yNzMxLDggKzI3
MjQsMTQgQEAgU3RyaW5nIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iagogewogICAg
IGlmICghbV9hdlBsYXllcikKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgCi0g
ICAgU3RyaW5nIHdpcmVsZXNzVGFyZ2V0TmFtZSA9IHdrRXhlcm5hbERldmljZURpc3BsYXlOYW1l
Rm9yUGxheWVyKG1fYXZQbGF5ZXIuZ2V0KCkpOworCisgICAgU3RyaW5nIHdpcmVsZXNzVGFyZ2V0
TmFtZTsKKyNpZiAhUExBVEZPUk0oSU9TKQorICAgIGlmIChtX291dHB1dENvbnRleHQpCisgICAg
ICAgIHdpcmVsZXNzVGFyZ2V0TmFtZSA9IG1fb3V0cHV0Q29udGV4dC5nZXQoKS5kZXZpY2VOYW1l
OworI2Vsc2UKKyAgICB3aXJlbGVzc1RhcmdldE5hbWUgPSB3a0V4ZXJuYWxEZXZpY2VEaXNwbGF5
TmFtZUZvclBsYXllcihtX2F2UGxheWVyLmdldCgpKTsKKyNlbmRpZgogICAgIExPRyhNZWRpYSwg
Ik1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OndpcmVsZXNzUGxheWJhY2tUYXJn
ZXROYW1lKCVwKSAtIHJldHVybmluZyAlcyIsIHRoaXMsIHdpcmVsZXNzVGFyZ2V0TmFtZS51dGY4
KCkuZGF0YSgpKTsKIAogICAgIHJldHVybiB3aXJlbGVzc1RhcmdldE5hbWU7CkBAIC0yNzU2LDIy
ICsyNzU1LDQyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAg
ICBpZiAoIW1fYXZQbGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIHNldERlbGF5Q2FsbGJh
Y2tzKHRydWUpOwogICAgIFttX2F2UGxheWVyLmdldCgpIHNldEFsbG93c0V4dGVybmFsUGxheWJh
Y2s6IWRpc2FibGVkXTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7CiB9CiAKICNpZiAh
UExBVEZPUk0oSU9TKQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpz
ZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJhY2tUYXJnZXQmIHRhcmdl
dCkKIHsKICAgICBtX291dHB1dENvbnRleHQgPSB0YXJnZXQuZGV2aWNlUGlja2VyQ29udGV4dCgp
OwotCiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
c2V0V2lyZWxlc3NQbGF5YmFja1RhcmdldCglcCkgLSB0YXJnZXQgPSAlcCIsIHRoaXMsIG1fb3V0
cHV0Q29udGV4dC5nZXQoKSk7Cit9CisjZW5kaWYKIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpzdGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3sKICAgICBp
ZiAoIW1fYXZQbGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChbbV9hdlBsYXllci5n
ZXQoKS5vdXRwdXRDb250ZXh0IGlzRXF1YWw6bV9vdXRwdXRDb250ZXh0LmdldCgpXSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CiAgICAgbV9hdlBsYXll
ci5nZXQoKS5vdXRwdXRDb250ZXh0ID0gbV9vdXRwdXRDb250ZXh0LmdldCgpOworICAgIHNldERl
bGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpzdG9wUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKQoreworICAgIGlmICghbV9h
dlBsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7
CisgICAgLy8gRklYTUU6IHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgb25jZSByZGFyOi8v
MjAzMzUyMTcgaGFzIGJlZW4gZml4ZWQuCisgICAgLy8gbV9hdlBsYXllci5nZXQoKS5vdXRwdXRD
b250ZXh0ID0gbmlsOworICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKIH0KLSNlbmRpZgog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0ZURpc2FibGVF
eHRlcm5hbFBsYXliYWNrKCkKIHsKQEAgLTMwODQsNiArMzEwMywxNSBAQCBOU0FycmF5KiBhc3Nl
dFRyYWNrTWV0YWRhdGFLZXlOYW1lcygpCiAgICAgcmV0dXJuIGtleXM7CiB9CiAKK05TQXJyYXkq
IHBsYXllcktWT1Byb3BlcnRpZXMoKQoreworICAgIHN0YXRpYyBOU0FycmF5KiBrZXlzID0gW1tO
U0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6QCJyYXRlIiwKKyNpZiBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAiZXh0ZXJu
YWxQbGF5YmFja0FjdGl2ZSIsIEAib3V0cHV0Q29udGV4dCIsIEAiYWxsb3dzRXh0ZXJuYWxQbGF5
YmFjayIsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWxdOworICAgIHJl
dHVybiBrZXlzOworfQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBAaW1wbGVtZW50YXRpb24g
V2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIKQEAgLTMyMDAsOSArMzIyOCw3IEBAIC0gKHZvaWQpb2Jz
ZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG8KICAgICAgICAgaWYgKFtrZXlQYXRoIGlzRXF1
YWxUb1N0cmluZzpAInJhdGUiXSkKICAgICAgICAgICAgIGZ1bmN0aW9uID0gV1RGOjpiaW5kKCZN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpyYXRlRGlkQ2hhbmdlLCBtX2NhbGxi
YWNrLCBbbmV3VmFsdWUgZG91YmxlVmFsdWVdKTsKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJB
Q0tfVEFSR0VUKQotICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJl
eHRlcm5hbFBsYXliYWNrQWN0aXZlIl0pCi0gICAgICAgICAgICBmdW5jdGlvbiA9IFdURjo6Ymlu
ZCgmTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxheWJhY2tUYXJnZXRJc1dp
cmVsZXNzRGlkQ2hhbmdlLCBtX2NhbGxiYWNrKTsKLSAgICAgICAgZWxzZSBpZiAoW2tleVBhdGgg
aXNFcXVhbFRvU3RyaW5nOkAib3V0cHV0Q29udGV4dCJdKQorICAgICAgICBlbHNlIGlmIChba2V5
UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJleHRlcm5hbFBsYXliYWNrQWN0aXZlIl0gfHwgW2tleVBh
dGggaXNFcXVhbFRvU3RyaW5nOkAib3V0cHV0Q29udGV4dCJdIHx8IFtrZXlQYXRoIGlzRXF1YWxU
b1N0cmluZzpAImFsbG93c0V4dGVybmFsUGxheWJhY2siXSkKICAgICAgICAgICAgIGZ1bmN0aW9u
ID0gV1RGOjpiaW5kKCZNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF5YmFj
a1RhcmdldElzV2lyZWxlc3NEaWRDaGFuZ2UsIG1fY2FsbGJhY2spOwogI2VuZGlmCiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgJKHJldmlzaW9uIDE4MjE4OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcx
LDE0IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGNvcnJ1cHRlZFZpZGVv
RnJhbWVzKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBNZWRpYVRpbWUgdG90YWxGcmFtZURlbGF5
KCkgb3ZlcnJpZGU7CiAKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorICAg
IHZpcnR1YWwgYm9vbCBpc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCgpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KGNvbnN0
IE1lZGlhUGxheWJhY2tUYXJnZXQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9Q
bGF5YmFja1RhcmdldCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1Rv
UGxheWJhY2tUYXJnZXQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlpbmdUb1BsYXli
YWNrVGFyZ2V0KCk7CisjZW5kaWYKKwogICAgIHZvaWQgZW5zdXJlTGF5ZXIoKTsKICAgICB2b2lk
IGRlc3Ryb3lMYXllcigpOwogICAgIGJvb2wgc2hvdWxkQmVQbGF5aW5nKCkgY29uc3Q7CkBAIC0y
MTIsNiArMjIwLDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3NlZWtDb21wbGV0ZWQ7CiAgICAg
bXV0YWJsZSBib29sIG1fbG9hZGluZ1Byb2dyZXNzZWQ7CiAgICAgYm9vbCBtX2hhc0F2YWlsYWJs
ZVZpZGVvRnJhbWU7CisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWVkaWFQbGF5YmFja1RhcmdldD4gbV9wbGF5YmFja1RhcmdldDsKKyAg
ICBib29sIG1fY3VycmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQgeyB0cnVlIH07CisjZW5k
aWYKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0JKHJldmlzaW9uIDE4
MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQkod29ya2luZyBjb3B5
KQpAQCAtODA2LDYgKzgwNiw0MiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqCiAgICAgbV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOwogfQogCisjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjppc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3BsYXliYWNrVGFyZ2V0KQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIHJldHVybiAhbV9wbGF5YmFja1RhcmdldC0+aGFzQWN0aXZlUm91dGUoKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFdpcmVsZXNzUGxh
eWJhY2tUYXJnZXQoY29uc3QgTWVkaWFQbGF5YmFja1RhcmdldCYgdGFyZ2V0KQoreworICAgIGlm
ICghbV9wbGF5YmFja1RhcmdldCkKKyAgICAgICAgbV9wbGF5YmFja1RhcmdldCA9IHN0ZDo6bWFr
ZV91bmlxdWU8TWVkaWFQbGF5YmFja1RhcmdldD4oKTsKKyAgICBtX3BsYXliYWNrVGFyZ2V0LT5z
ZXREZXZpY2VQaWNrZXJDb250ZXh0KHRhcmdldC5kZXZpY2VQaWNrZXJDb250ZXh0KCkpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6dG9nZ2xlUGxheWlu
Z1RvUGxheWJhY2tUYXJnZXQoKQoreworICAgIGJvb2wgb2xkU3VwcG9ydGVkID0gbV9jdXJyZW50
UGxheWJhY2tUYXJnZXRJc1N1cHBvcnRlZDsKKyAgICBtX2N1cnJlbnRQbGF5YmFja1RhcmdldElz
U3VwcG9ydGVkID0gIW1fcGxheWJhY2tUYXJnZXQgfHwgIW1fcGxheWJhY2tUYXJnZXQtPmhhc0Fj
dGl2ZVJvdXRlKCk7CisKKyAgICBpZiAobV9wbGF5ZXIgJiYgb2xkU3VwcG9ydGVkICE9IG1fY3Vy
cmVudFBsYXliYWNrVGFyZ2V0SXNTdXBwb3J0ZWQpCisgICAgICAgIG1fcGxheWVyLT5jdXJyZW50
UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c3RhcnRQbGF5aW5nVG9QbGF5YmFja1RhcmdldCgp
Cit7CisgICAgdG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnN0b3BQbGF5aW5nVG9QbGF5YmFja1Rh
cmdldCgpCit7CisgICAgdG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJnZXQoKTsKK30KKyNlbmRp
ZgorCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmgJKHJldmlz
aW9uIDE4MjE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRp
YVBsYXllclByaXZhdGVRVEtpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNiArMTc5LDE0IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdCB7
IHJldHVybiAiUVRLaXQiOyB9CiAgICAgdmlydHVhbCBsb25nIHBsYXRmb3JtRXJyb3JDb2RlKCkg
Y29uc3Q7CiAKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorICAgIHZpcnR1
YWwgYm9vbCBpc0N1cnJlbnRQbGF5YmFja1RhcmdldFN1cHBvcnRlZCgpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBzZXRXaXJlbGVzc1BsYXliYWNrVGFyZ2V0KGNvbnN0IE1lZGlh
UGxheWJhY2tUYXJnZXQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQbGF5aW5nVG9QbGF5YmFj
a1RhcmdldCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdG9wUGxheWluZ1RvUGxheWJh
Y2tUYXJnZXQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFy
Z2V0KCk7CisjZW5kaWYKKwogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAgICBSZXRhaW5Q
dHI8UVRNb3ZpZT4gbV9xdE1vdmllOwogICAgIFJldGFpblB0cjxRVFZpZGVvUmVuZGVyZXJXZWJL
aXRPbmx5PiBtX3F0VmlkZW9SZW5kZXJlcjsKQEAgLTIwNiw2ICsyMTQsMTAgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fcHJpdmF0ZUJyb3dzaW5nOwogICAgIG11dGFibGUgTWVkaWFUaW1lIG1fbWF4
VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzczsKICAgICBtdXRhYmxlIEZsb2F0U2l6
ZSBtX2NhY2hlZE5hdHVyYWxTaXplOworI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJH
RVQpCisgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUGxheWJhY2tUYXJnZXQ+IG1fcGxheWJhY2tU
YXJnZXQ7CisgICAgYm9vbCBtX2N1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkIHsgdHJ1
ZSB9OworI2VuZGlmCiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1t
CShyZXZpc2lvbiAxODIxODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1NDAsNiAr
MTU0MCw0MiBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpjYW5TYXZlTWVkCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQ6OmlzQ3VycmVudFBsYXliYWNrVGFyZ2V0U3Vw
cG9ydGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGxheWJhY2tUYXJnZXQpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgcmV0dXJuICFtX3BsYXliYWNrVGFyZ2V0LT5oYXNBY3RpdmVSb3V0
ZSgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzZXRXaXJlbGVzc1BsYXli
YWNrVGFyZ2V0KGNvbnN0IE1lZGlhUGxheWJhY2tUYXJnZXQmIHRhcmdldCkKK3sKKyAgICBpZiAo
IW1fcGxheWJhY2tUYXJnZXQpCisgICAgICAgIG1fcGxheWJhY2tUYXJnZXQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPE1lZGlhUGxheWJhY2tUYXJnZXQ+KCk7CisgICAgbV9wbGF5YmFja1RhcmdldC0+c2V0
RGV2aWNlUGlja2VyQ29udGV4dCh0YXJnZXQuZGV2aWNlUGlja2VyQ29udGV4dCgpKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVRVEtpdDo6dG9nZ2xlUGxheWluZ1RvUGxheWJhY2tUYXJn
ZXQoKQoreworICAgIGJvb2wgb2xkU3VwcG9ydGVkID0gbV9jdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1N1cHBvcnRlZDsKKyAgICBtX2N1cnJlbnRQbGF5YmFja1RhcmdldElzU3VwcG9ydGVkID0gIW1f
cGxheWJhY2tUYXJnZXQgfHwgIW1fcGxheWJhY2tUYXJnZXQtPmhhc0FjdGl2ZVJvdXRlKCk7CisK
KyAgICBpZiAobV9wbGF5ZXIgJiYgb2xkU3VwcG9ydGVkICE9IG1fY3VycmVudFBsYXliYWNrVGFy
Z2V0SXNTdXBwb3J0ZWQpCisgICAgICAgIG1fcGxheWVyLT5jdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1dpcmVsZXNzQ2hhbmdlZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Ojpz
dGFydFBsYXlpbmdUb1BsYXliYWNrVGFyZ2V0KCkKK3sKKyAgICB0b2dnbGVQbGF5aW5nVG9QbGF5
YmFja1RhcmdldCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpzdG9wUGxh
eWluZ1RvUGxheWJhY2tUYXJnZXQoKQoreworICAgIHRvZ2dsZVBsYXlpbmdUb1BsYXliYWNrVGFy
Z2V0KCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBAaW1wbGVtZW50
YXRpb24gV2ViQ29yZU1vdmllT2JzZXJ2ZXIK
</data>

          </attachment>
      

    </bug>

</bugzilla>