<?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>157735</bug_id>
          
          <creation_ts>2016-05-15 20:37:54 -0700</creation_ts>
          <short_desc>Modernize Track classes&apos; code</short_desc>
          <delta_ts>2016-05-16 09:36:35 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1193321</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-15 20:37:54 -0700</bug_when>
    <thetext>Modernize Track classes&apos; code a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193323</commentid>
    <comment_count>1</comment_count>
      <attachid>278995</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-15 20:45:26 -0700</bug_when>
    <thetext>Created attachment 278995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193327</commentid>
    <comment_count>2</comment_count>
      <attachid>278996</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-15 21:05:24 -0700</bug_when>
    <thetext>Created attachment 278996
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193395</commentid>
    <comment_count>3</comment_count>
      <attachid>278996</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-05-16 09:04:09 -0700</bug_when>
    <thetext>Comment on attachment 278996
Patch

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:4015
&gt; +            TextTrack* track = trackList.item(i);

Why not use auto&amp; here?

&gt; Source/WebCore/html/track/VideoTrackList.cpp:90
&gt; +        auto&amp; track = downcast&lt;VideoTrack&gt;(*m_inbandTracks[i]);
&gt; +        if (track.selected())

Nit: is the local necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193396</commentid>
    <comment_count>4</comment_count>
      <attachid>278996</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-16 09:05:08 -0700</bug_when>
    <thetext>Comment on attachment 278996
Patch

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

&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:4015
&gt;&gt; +            TextTrack* track = trackList.item(i);
&gt; 
&gt; Why not use auto&amp; here?

Will do.

&gt;&gt; Source/WebCore/html/track/VideoTrackList.cpp:90
&gt;&gt; +        if (track.selected())
&gt; 
&gt; Nit: is the local necessary?

I guess not :) Will update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193397</commentid>
    <comment_count>5</comment_count>
      <attachid>279020</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-16 09:07:13 -0700</bug_when>
    <thetext>Created attachment 279020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193400</commentid>
    <comment_count>6</comment_count>
      <attachid>279020</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-16 09:36:30 -0700</bug_when>
    <thetext>Comment on attachment 279020
Patch

Clearing flags on attachment: 279020

Committed r200943: &lt;http://trac.webkit.org/changeset/200943&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193401</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-16 09:36:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278995</attachid>
            <date>2016-05-15 20:45:26 -0700</date>
            <delta_ts>2016-05-15 21:05:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157735-20160515204620.patch</filename>
            <type>text/plain</type>
            <size>61690</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjY5ZTViZWYwMjY3NjAx
M2JlMWUyOTEwOWQwZDEzYTYzNTIwN2NhYS4uZGM1NTU5YTA3MmMyY2YzZTQ2ODFlNGQ1ZmY0YTcw
YjE1Y2Q1NTIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEwNCBAQAogMjAxNi0wNS0xNSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIE1vZGVybml6ZSBUcmFjayBj
bGFzc2VzJyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTc3MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb2Rlcm5pemUgVHJhY2sgY2xhc3NlcycgY29kZSBhIGJpdC4KKworICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2U6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNv
dXJjZS9Tb3VyY2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpz
b3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNUcmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0
b1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGh0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjphdWRp
b1RyYWNrRW5hYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6dGV4dFRyYWNrTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6dmlkZW9UcmFja1NlbGVjdGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tSZW1vdmVDdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyRGlkQWRkVGV4dFRyYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmFkZEF1ZGlvVHJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OmFkZFZpZGVvVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6cmVtb3ZlQXVkaW9UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpyZW1vdmVUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6cmVtb3ZlVmlkZW9UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50Ojpmb3JnZXRSZXNvdXJjZVNwZWNpZmljVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OmF1ZGlvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnRleHRUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6dmlkZW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
ZGlkQWRkVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRp
ZFJlbW92ZVRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpz
ZXRTZWxlY3RlZFRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
Ojp0ZXh0VHJhY2tBZGRDdWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAq
IGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29u
dHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbENsb3NlZENh
cHRpb25zVHJhY2tMaXN0RWxlbWVudDo6dXBkYXRlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6OnJlYnVpbGRUcmFj
a0xpc3RNZW51KToKKyAgICAgICAgKiBodG1sL3RyYWNrL0F1ZGlvVHJhY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9UcmFjazo6fkF1ZGlvVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9UcmFjazo6c2V0UHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrOjpp
c1ZhbGlkS2luZCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrOjp3aWxsUmVtb3ZlKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2s6OnNldEVuYWJsZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9UcmFjazo6dXBkYXRlS2luZEZyb21Qcml2YXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBodG1sL3RyYWNrL0F1ZGlvVHJhY2suaDoKKyAgICAgICAgKGlzVHlwZSk6
CisgICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5jcHA6CisgICAgICAgIChBdWRp
b1RyYWNrTGlzdDo6YXBwZW5kKToKKyAgICAgICAgKEF1ZGlvVHJhY2tMaXN0OjppdGVtKToKKyAg
ICAgICAgKEF1ZGlvVHJhY2tMaXN0OjpnZXRUcmFja0J5SWQpOgorICAgICAgICAoQXVkaW9UcmFj
a0xpc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL3Ry
YWNrL0F1ZGlvVHJhY2tMaXN0Lmg6CisgICAgICAgICogaHRtbC90cmFjay9JbmJhbmRUZXh0VHJh
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjp3aWxsUmVtb3ZlKToK
KyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0VHJhY2s6OnNldEtpbmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjp0cmFja0lu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6dHJhY2tJbmRleFJlbGF0aXZlVG9S
ZW5kZXJlZFRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OnNldExhbmd1YWdl
KToKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5oOgorICAgICAgICAoaXNUeXBlKToK
KyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwOgorICAgICAgICAoVGV4dFRy
YWNrTGlzdDo6Z2V0VHJhY2tJbmRleCk6CisgICAgICAgIChUZXh0VHJhY2tMaXN0OjpnZXRUcmFj
a0luZGV4UmVsYXRpdmVUb1JlbmRlcmVkVHJhY2tzKToKKyAgICAgICAgKFRleHRUcmFja0xpc3Q6
Oml0ZW0pOgorICAgICAgICAoVGV4dFRyYWNrTGlzdDo6Z2V0VHJhY2tCeUlkKToKKyAgICAgICAg
KFRleHRUcmFja0xpc3Q6OmludmFsaWRhdGVUcmFja0luZGV4ZXNBZnRlclRyYWNrKToKKyAgICAg
ICAgKFRleHRUcmFja0xpc3Q6OmFwcGVuZCk6CisgICAgICAgIChUZXh0VHJhY2tMaXN0OjpyZW1v
dmUpOgorICAgICAgICAoVGV4dFRyYWNrTGlzdDo6Y29udGFpbnMpOgorICAgICAgICAqIGh0bWwv
dHJhY2svVGV4dFRyYWNrTGlzdC5oOgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tCYXNlLmg6
CisgICAgICAgICogaHRtbC90cmFjay9UcmFja0V2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRyYWNrRXZlbnQ6OlRyYWNrRXZlbnQpOgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tFdmVu
dC5oOgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHA6CisgICAgICAgIChU
cmFja0xpc3RCYXNlOjpyZW1vdmUpOgorICAgICAgICAoVHJhY2tMaXN0QmFzZTo6Y29udGFpbnMp
OgorICAgICAgICAoVHJhY2tMaXN0QmFzZTo6c2NoZWR1bGVUcmFja0V2ZW50KToKKyAgICAgICAg
KFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlQWRkVHJhY2tFdmVudCk6CisgICAgICAgIChUcmFja0xp
c3RCYXNlOjpzY2hlZHVsZVJlbW92ZVRyYWNrRXZlbnQpOgorICAgICAgICAqIGh0bWwvdHJhY2sv
VHJhY2tMaXN0QmFzZS5oOgorICAgICAgICAqIGh0bWwvdHJhY2svVmlkZW9UcmFjay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb1RyYWNrOjp3aWxsUmVtb3ZlKToKKyAgICAgICAgKFdlYkNv
cmU6OlZpZGVvVHJhY2s6OnNldEtpbmQpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9UcmFjazo6
c2V0TGFuZ3VhZ2UpOgorICAgICAgICAqIGh0bWwvdHJhY2svVmlkZW9UcmFjay5oOgorICAgICAg
ICAoaXNUeXBlKToKKyAgICAgICAgKiBodG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcDoKKyAg
ICAgICAgKFZpZGVvVHJhY2tMaXN0OjphcHBlbmQpOgorICAgICAgICAoVmlkZW9UcmFja0xpc3Q6
Oml0ZW0pOgorICAgICAgICAoVmlkZW9UcmFja0xpc3Q6OmdldFRyYWNrQnlJZCk6CisgICAgICAg
IChWaWRlb1RyYWNrTGlzdDo6c2VsZWN0ZWRJbmRleCk6CisgICAgICAgICogaHRtbC90cmFjay9W
aWRlb1RyYWNrTGlzdC5oOgorCisyMDE2LTA1LTE1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CisKICAgICAgICAgVXNlIG1vcmUgcmVmZXJlbmNlcyBpbiBKUyB3cmFwcGVycyByZWxh
dGVkIGNvZGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NzcyMQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVk
aWFTb3VyY2UuY3BwCmluZGV4IGUyODQ5YWVjZDM5ODk3MGI2YmFiZDY3MThiNDI4Nzg5MDMxMzZj
ZjEuLjlhNTRiNjFkZWE3MzIwOWM3NzRkM2JhNGQ0MWVmZjhkNGY4YzlmYmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBAIC01
ODQsMTQgKzU4NCwxNCBAQCB2b2lkIE1lZGlhU291cmNlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291
cmNlQnVmZmVyJiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgICAgIC8vIDUuMyBG
b3IgZWFjaCBBdWRpb1RyYWNrIG9iamVjdCBpbiB0aGUgU291cmNlQnVmZmVyIGF1ZGlvVHJhY2tz
IGxpc3QsIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgICAgICB3aGlsZSAoYXVkaW9UcmFj
a3MtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBBdWRpb1RyYWNrKiB0cmFjayA9IGF1ZGlvVHJh
Y2tzLT5sYXN0SXRlbSgpOworICAgICAgICAgICAgYXV0byYgdHJhY2sgPSAqYXVkaW9UcmFja3Mt
Pmxhc3RJdGVtKCk7CiAKICAgICAgICAgICAgIC8vIDUuMy4xIFNldCB0aGUgc291cmNlQnVmZmVy
IGF0dHJpYnV0ZSBvbiB0aGUgQXVkaW9UcmFjayBvYmplY3QgdG8gbnVsbC4KLSAgICAgICAgICAg
IHRyYWNrLT5zZXRTb3VyY2VCdWZmZXIobnVsbHB0cik7CisgICAgICAgICAgICB0cmFjay5zZXRT
b3VyY2VCdWZmZXIobnVsbHB0cik7CiAKICAgICAgICAgICAgIC8vIDUuMy4yIElmIHRoZSBlbmFi
bGVkIGF0dHJpYnV0ZSBvbiB0aGUgQXVkaW9UcmFjayBvYmplY3QgaXMgdHJ1ZSwgdGhlbiBzZXQg
dGhlIHJlbW92ZWQgZW5hYmxlZAogICAgICAgICAgICAgLy8gYXVkaW8gdHJhY2sgZmxhZyB0byB0
cnVlLgotICAgICAgICAgICAgaWYgKHRyYWNrLT5lbmFibGVkKCkpCisgICAgICAgICAgICBpZiAo
dHJhY2suZW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIHJlbW92ZWRFbmFibGVkQXVkaW9UcmFj
ayA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIDUuMy4zIFJlbW92ZSB0aGUgQXVkaW9UcmFjayBv
YmplY3QgZnJvbSB0aGUgSFRNTE1lZGlhRWxlbWVudCBhdWRpb1RyYWNrcyBsaXN0LgpAQCAtNjA5
LDcgKzYwOSw3IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZVNvdXJjZUJ1ZmZlcihTb3VyY2VC
dWZmZXImIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIDUuNCBJZiB0aGUg
cmVtb3ZlZCBlbmFibGVkIGF1ZGlvIHRyYWNrIGZsYWcgZXF1YWxzIHRydWUsIHRoZW4gcXVldWUg
YSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQKICAgICAgICAgLy8gbmFtZWQgY2hhbmdlIGF0
IHRoZSBIVE1MTWVkaWFFbGVtZW50IGF1ZGlvVHJhY2tzIGxpc3QuCiAgICAgICAgIGlmIChyZW1v
dmVkRW5hYmxlZEF1ZGlvVHJhY2spCi0gICAgICAgICAgICBtZWRpYUVsZW1lbnQoKS0+YXVkaW9U
cmFja3MoKS0+c2NoZWR1bGVDaGFuZ2VFdmVudCgpOworICAgICAgICAgICAgbWVkaWFFbGVtZW50
KCktPmF1ZGlvVHJhY2tzKCkuc2NoZWR1bGVDaGFuZ2VFdmVudCgpOwogICAgIH0KIAogICAgIC8v
IDYuIExldCBTb3VyY2VCdWZmZXIgdmlkZW9UcmFja3MgbGlzdCBlcXVhbCB0aGUgVmlkZW9UcmFj
a0xpc3Qgb2JqZWN0IHJldHVybmVkIGJ5IHNvdXJjZUJ1ZmZlci52aWRlb1RyYWNrcy4KQEAgLTYy
NCwxNCArNjI0LDE0IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZVNvdXJjZUJ1ZmZlcihTb3Vy
Y2VCdWZmZXImIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKICAgICAgICAgLy8gNy4zIEZv
ciBlYWNoIFZpZGVvVHJhY2sgb2JqZWN0IGluIHRoZSBTb3VyY2VCdWZmZXIgdmlkZW9UcmFja3Mg
bGlzdCwgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CiAgICAgICAgIHdoaWxlICh2aWRlb1RyYWNr
cy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIFZpZGVvVHJhY2sqIHRyYWNrID0gdmlkZW9UcmFj
a3MtPmxhc3RJdGVtKCk7CisgICAgICAgICAgICBhdXRvJiB0cmFjayA9ICp2aWRlb1RyYWNrcy0+
bGFzdEl0ZW0oKTsKIAogICAgICAgICAgICAgLy8gNy4zLjEgU2V0IHRoZSBzb3VyY2VCdWZmZXIg
YXR0cmlidXRlIG9uIHRoZSBWaWRlb1RyYWNrIG9iamVjdCB0byBudWxsLgotICAgICAgICAgICAg
dHJhY2stPnNldFNvdXJjZUJ1ZmZlcihudWxscHRyKTsKKyAgICAgICAgICAgIHRyYWNrLnNldFNv
dXJjZUJ1ZmZlcihudWxscHRyKTsKIAogICAgICAgICAgICAgLy8gNy4zLjIgSWYgdGhlIHNlbGVj
dGVkIGF0dHJpYnV0ZSBvbiB0aGUgVmlkZW9UcmFjayBvYmplY3QgaXMgdHJ1ZSwgdGhlbiBzZXQg
dGhlIHJlbW92ZWQgc2VsZWN0ZWQKICAgICAgICAgICAgIC8vIHZpZGVvIHRyYWNrIGZsYWcgdG8g
dHJ1ZS4KLSAgICAgICAgICAgIGlmICh0cmFjay0+c2VsZWN0ZWQoKSkKKyAgICAgICAgICAgIGlm
ICh0cmFjay5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHJlbW92ZWRTZWxlY3RlZFZpZGVv
VHJhY2sgPSB0cnVlOwogCiAgICAgICAgICAgICAvLyA3LjMuMyBSZW1vdmUgdGhlIFZpZGVvVHJh
Y2sgb2JqZWN0IGZyb20gdGhlIEhUTUxNZWRpYUVsZW1lbnQgdmlkZW9UcmFja3MgbGlzdC4KQEAg
LTY0OSw3ICs2NDksNyBAQCB2b2lkIE1lZGlhU291cmNlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291
cmNlQnVmZmVyJiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAvLyA3LjQgSWYg
dGhlIHJlbW92ZWQgc2VsZWN0ZWQgdmlkZW8gdHJhY2sgZmxhZyBlcXVhbHMgdHJ1ZSwgdGhlbiBx
dWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudAogICAgICAgICAvLyBuYW1lZCBjaGFu
Z2UgYXQgdGhlIEhUTUxNZWRpYUVsZW1lbnQgdmlkZW9UcmFja3MgbGlzdC4KICAgICAgICAgaWYg
KHJlbW92ZWRTZWxlY3RlZFZpZGVvVHJhY2spCi0gICAgICAgICAgICBtZWRpYUVsZW1lbnQoKS0+
dmlkZW9UcmFja3MoKS0+c2NoZWR1bGVDaGFuZ2VFdmVudCgpOworICAgICAgICAgICAgbWVkaWFF
bGVtZW50KCktPnZpZGVvVHJhY2tzKCkuc2NoZWR1bGVDaGFuZ2VFdmVudCgpOwogICAgIH0KIAog
ICAgIC8vIDguIExldCBTb3VyY2VCdWZmZXIgdGV4dFRyYWNrcyBsaXN0IGVxdWFsIHRoZSBUZXh0
VHJhY2tMaXN0IG9iamVjdCByZXR1cm5lZCBieSBzb3VyY2VCdWZmZXIudGV4dFRyYWNrcy4KQEAg
LTY2NCwxNCArNjY0LDE0IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZVNvdXJjZUJ1ZmZlcihT
b3VyY2VCdWZmZXImIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKICAgICAgICAgLy8gOS4z
IEZvciBlYWNoIFRleHRUcmFjayBvYmplY3QgaW4gdGhlIFNvdXJjZUJ1ZmZlciB0ZXh0VHJhY2tz
IGxpc3QsIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgICAgICB3aGlsZSAodGV4dFRyYWNr
cy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIFRleHRUcmFjayogdHJhY2sgPSB0ZXh0VHJhY2tz
LT5sYXN0SXRlbSgpOworICAgICAgICAgICAgYXV0byYgdHJhY2sgPSAqdGV4dFRyYWNrcy0+bGFz
dEl0ZW0oKTsKIAogICAgICAgICAgICAgLy8gOS4zLjEgU2V0IHRoZSBzb3VyY2VCdWZmZXIgYXR0
cmlidXRlIG9uIHRoZSBUZXh0VHJhY2sgb2JqZWN0IHRvIG51bGwuCi0gICAgICAgICAgICB0cmFj
ay0+c2V0U291cmNlQnVmZmVyKG51bGxwdHIpOworICAgICAgICAgICAgdHJhY2suc2V0U291cmNl
QnVmZmVyKG51bGxwdHIpOwogCiAgICAgICAgICAgICAvLyA5LjMuMiBJZiB0aGUgbW9kZSBhdHRy
aWJ1dGUgb24gdGhlIFRleHRUcmFjayBvYmplY3QgaXMgc2V0IHRvICJzaG93aW5nIiBvciAiaGlk
ZGVuIiwgdGhlbgogICAgICAgICAgICAgLy8gc2V0IHRoZSByZW1vdmVkIGVuYWJsZWQgdGV4dCB0
cmFjayBmbGFnIHRvIHRydWUuCi0gICAgICAgICAgICBpZiAodHJhY2stPm1vZGUoKSA9PSBUZXh0
VHJhY2s6Ok1vZGU6OlNob3dpbmcgfHwgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6
OkhpZGRlbikKKyAgICAgICAgICAgIGlmICh0cmFjay5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2Rl
OjpTaG93aW5nIHx8IHRyYWNrLm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OkhpZGRlbikKICAg
ICAgICAgICAgICAgICByZW1vdmVkRW5hYmxlZFRleHRUcmFjayA9IHRydWU7CiAKICAgICAgICAg
ICAgIC8vIDkuMy4zIFJlbW92ZSB0aGUgVGV4dFRyYWNrIG9iamVjdCBmcm9tIHRoZSBIVE1MTWVk
aWFFbGVtZW50IHRleHRUcmFja3MgbGlzdC4KQEAgLTY4OSw3ICs2ODksNyBAQCB2b2lkIE1lZGlh
U291cmNlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291cmNlQnVmZmVyJiBidWZmZXIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogICAgICAgICAvLyA5LjQgSWYgdGhlIHJlbW92ZWQgZW5hYmxlZCB0ZXh0IHRy
YWNrIGZsYWcgZXF1YWxzIHRydWUsIHRoZW4gcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUg
ZXZlbnQKICAgICAgICAgLy8gbmFtZWQgY2hhbmdlIGF0IHRoZSBIVE1MTWVkaWFFbGVtZW50IHRl
eHRUcmFja3MgbGlzdC4KICAgICAgICAgaWYgKHJlbW92ZWRFbmFibGVkVGV4dFRyYWNrKQotICAg
ICAgICAgICAgbWVkaWFFbGVtZW50KCktPnRleHRUcmFja3MoKS0+c2NoZWR1bGVDaGFuZ2VFdmVu
dCgpOworICAgICAgICAgICAgbWVkaWFFbGVtZW50KCktPnRleHRUcmFja3MoKS5zY2hlZHVsZUNo
YW5nZUV2ZW50KCk7CiAgICAgfQogICAgIAogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCmluZGV4IDcwZDAxZTQxZTY1NmVj
MDEzNDZiOTRhNjg1YjhiNzVhOWQ5M2YwMzUuLjJlNTBhNmJkYWQxZjRhM2M3ZTQwMzQ5OTQ0Zjk1
ZWQ1Mjg1ZjY5OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvU291cmNlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL1NvdXJjZUJ1ZmZlci5jcHAKQEAgLTEwMzUsNyArMTAzNSw3IEBAIHZvaWQgU291cmNlQnVm
ZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChT
b3VyY2VCdWZmCiAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHN0ZXBzIDUuMi4xLTUu
Mi44LjEgYXMgcGVyIEVkaXRvcidzIERyYWZ0IDA5IEphbnVhcnkgMjAxNSwgYW5kIHJlb3JkZXIg
dGhpcwogICAgICAgICAgICAgLy8gNS4yLjEgTGV0IG5ldyBhdWRpbyB0cmFjayBiZSBhIG5ldyBB
dWRpb1RyYWNrIG9iamVjdC4KICAgICAgICAgICAgIC8vIDUuMi4yIEdlbmVyYXRlIGEgdW5pcXVl
IElEIGFuZCBhc3NpZ24gaXQgdG8gdGhlIGlkIHByb3BlcnR5IG9uIG5ldyB2aWRlbyB0cmFjay4K
LSAgICAgICAgICAgIFJlZlB0cjxBdWRpb1RyYWNrPiBuZXdBdWRpb1RyYWNrID0gQXVkaW9UcmFj
azo6Y3JlYXRlKHRoaXMsIGF1ZGlvVHJhY2tQcml2YXRlKTsKKyAgICAgICAgICAgIGF1dG8gbmV3
QXVkaW9UcmFjayA9IEF1ZGlvVHJhY2s6OmNyZWF0ZSh0aGlzLCBhdWRpb1RyYWNrUHJpdmF0ZSk7
CiAgICAgICAgICAgICBuZXdBdWRpb1RyYWNrLT5zZXRTb3VyY2VCdWZmZXIodGhpcyk7CiAKICAg
ICAgICAgICAgIC8vIDUuMi4zIElmIGF1ZGlvVHJhY2tzLmxlbmd0aCBlcXVhbHMgMCwgdGhlbiBy
dW4gdGhlIGZvbGxvd2luZyBzdGVwczoKQEAgLTEwNTEsMTMgKzEwNTEsMTMgQEAgdm9pZCBTb3Vy
Y2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdt
ZW50KFNvdXJjZUJ1ZmYKICAgICAgICAgICAgIC8vIDUuMi41IFF1ZXVlIGEgdGFzayB0byBmaXJl
IGEgdHJ1c3RlZCBldmVudCBuYW1lZCBhZGR0cmFjaywgdGhhdCBkb2VzIG5vdCBidWJibGUgYW5k
IGlzCiAgICAgICAgICAgICAvLyBub3QgY2FuY2VsYWJsZSwgYW5kIHRoYXQgdXNlcyB0aGUgVHJh
Y2tFdmVudCBpbnRlcmZhY2UsIGF0IHRoZSBBdWRpb1RyYWNrTGlzdCBvYmplY3QKICAgICAgICAg
ICAgIC8vIHJlZmVyZW5jZWQgYnkgdGhlIGF1ZGlvVHJhY2tzIGF0dHJpYnV0ZSBvbiB0aGlzIFNv
dXJjZUJ1ZmZlciBvYmplY3QuCi0gICAgICAgICAgICBhdWRpb1RyYWNrcygpLT5hcHBlbmQobmV3
QXVkaW9UcmFjayk7CisgICAgICAgICAgICBhdWRpb1RyYWNrcygpLT5hcHBlbmQobmV3QXVkaW9U
cmFjay5jb3B5UmVmKCkpOwogCiAgICAgICAgICAgICAvLyA1LjIuNiBBZGQgbmV3IGF1ZGlvIHRy
YWNrIHRvIHRoZSBhdWRpb1RyYWNrcyBhdHRyaWJ1dGUgb24gdGhlIEhUTUxNZWRpYUVsZW1lbnQu
CiAgICAgICAgICAgICAvLyA1LjIuNyBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHRydXN0ZWQgZXZl
bnQgbmFtZWQgYWRkdHJhY2ssIHRoYXQgZG9lcyBub3QgYnViYmxlIGFuZCBpcwogICAgICAgICAg
ICAgLy8gbm90IGNhbmNlbGFibGUsIGFuZCB0aGF0IHVzZXMgdGhlIFRyYWNrRXZlbnQgaW50ZXJm
YWNlLCBhdCB0aGUgQXVkaW9UcmFja0xpc3Qgb2JqZWN0CiAgICAgICAgICAgICAvLyByZWZlcmVu
Y2VkIGJ5IHRoZSBhdWRpb1RyYWNrcyBhdHRyaWJ1dGUgb24gdGhlIEhUTUxNZWRpYUVsZW1lbnQu
Ci0gICAgICAgICAgICBtX3NvdXJjZS0+bWVkaWFFbGVtZW50KCktPmF1ZGlvVHJhY2tzKCktPmFw
cGVuZChuZXdBdWRpb1RyYWNrKTsKKyAgICAgICAgICAgIG1fc291cmNlLT5tZWRpYUVsZW1lbnQo
KS0+YXVkaW9UcmFja3MoKS5hcHBlbmQobmV3QXVkaW9UcmFjay5jb3B5UmVmKCkpOwogCiAgICAg
ICAgICAgICAvLyA1LjIuOCBDcmVhdGUgYSBuZXcgdHJhY2sgYnVmZmVyIHRvIHN0b3JlIGNvZGVk
IGZyYW1lcyBmb3IgdGhpcyB0cmFjay4KICAgICAgICAgICAgIEFTU0VSVCghbV90cmFja0J1ZmZl
ck1hcC5jb250YWlucyhuZXdBdWRpb1RyYWNrLT5pZCgpKSk7CkBAIC0xMDc2LDcgKzEwNzYsNyBA
QCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFs
aXphdGlvblNlZ21lbnQoU291cmNlQnVmZgogICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBzdGVwcyA1LjMuMS01LjMuOC4xIGFzIHBlciBFZGl0b3IncyBEcmFmdCAwOSBKYW51YXJ5IDIw
MTUsIGFuZCByZW9yZGVyIHRoaXMKICAgICAgICAgICAgIC8vIDUuMy4xIExldCBuZXcgdmlkZW8g
dHJhY2sgYmUgYSBuZXcgVmlkZW9UcmFjayBvYmplY3QuCiAgICAgICAgICAgICAvLyA1LjMuMiBH
ZW5lcmF0ZSBhIHVuaXF1ZSBJRCBhbmQgYXNzaWduIGl0IHRvIHRoZSBpZCBwcm9wZXJ0eSBvbiBu
ZXcgdmlkZW8gdHJhY2suCi0gICAgICAgICAgICBSZWZQdHI8VmlkZW9UcmFjaz4gbmV3VmlkZW9U
cmFjayA9IFZpZGVvVHJhY2s6OmNyZWF0ZSh0aGlzLCB2aWRlb1RyYWNrUHJpdmF0ZSk7CisgICAg
ICAgICAgICBhdXRvIG5ld1ZpZGVvVHJhY2sgPSBWaWRlb1RyYWNrOjpjcmVhdGUodGhpcywgdmlk
ZW9UcmFja1ByaXZhdGUpOwogICAgICAgICAgICAgbmV3VmlkZW9UcmFjay0+c2V0U291cmNlQnVm
ZmVyKHRoaXMpOwogCiAgICAgICAgICAgICAvLyA1LjMuMyBJZiB2aWRlb1RyYWNrcy5sZW5ndGgg
ZXF1YWxzIDAsIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CkBAIC0xMDkyLDEzICsxMDky
LDEzIEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUlu
aXRpYWxpemF0aW9uU2VnbWVudChTb3VyY2VCdWZmCiAgICAgICAgICAgICAvLyA1LjMuNSBRdWV1
ZSBhIHRhc2sgdG8gZmlyZSBhIHRydXN0ZWQgZXZlbnQgbmFtZWQgYWRkdHJhY2ssIHRoYXQgZG9l
cyBub3QgYnViYmxlIGFuZCBpcwogICAgICAgICAgICAgLy8gbm90IGNhbmNlbGFibGUsIGFuZCB0
aGF0IHVzZXMgdGhlIFRyYWNrRXZlbnQgaW50ZXJmYWNlLCBhdCB0aGUgVmlkZW9UcmFja0xpc3Qg
b2JqZWN0CiAgICAgICAgICAgICAvLyByZWZlcmVuY2VkIGJ5IHRoZSB2aWRlb1RyYWNrcyBhdHRy
aWJ1dGUgb24gdGhpcyBTb3VyY2VCdWZmZXIgb2JqZWN0LgotICAgICAgICAgICAgdmlkZW9UcmFj
a3MoKS0+YXBwZW5kKG5ld1ZpZGVvVHJhY2spOworICAgICAgICAgICAgdmlkZW9UcmFja3MoKS0+
YXBwZW5kKG5ld1ZpZGVvVHJhY2suY29weVJlZigpKTsKIAogICAgICAgICAgICAgLy8gNS4zLjYg
QWRkIG5ldyB2aWRlbyB0cmFjayB0byB0aGUgdmlkZW9UcmFja3MgYXR0cmlidXRlIG9uIHRoZSBI
VE1MTWVkaWFFbGVtZW50LgogICAgICAgICAgICAgLy8gNS4zLjcgUXVldWUgYSB0YXNrIHRvIGZp
cmUgYSB0cnVzdGVkIGV2ZW50IG5hbWVkIGFkZHRyYWNrLCB0aGF0IGRvZXMgbm90IGJ1YmJsZSBh
bmQgaXMKICAgICAgICAgICAgIC8vIG5vdCBjYW5jZWxhYmxlLCBhbmQgdGhhdCB1c2VzIHRoZSBU
cmFja0V2ZW50IGludGVyZmFjZSwgYXQgdGhlIFZpZGVvVHJhY2tMaXN0IG9iamVjdAogICAgICAg
ICAgICAgLy8gcmVmZXJlbmNlZCBieSB0aGUgdmlkZW9UcmFja3MgYXR0cmlidXRlIG9uIHRoZSBI
VE1MTWVkaWFFbGVtZW50LgotICAgICAgICAgICAgbV9zb3VyY2UtPm1lZGlhRWxlbWVudCgpLT52
aWRlb1RyYWNrcygpLT5hcHBlbmQobmV3VmlkZW9UcmFjayk7CisgICAgICAgICAgICBtX3NvdXJj
ZS0+bWVkaWFFbGVtZW50KCktPnZpZGVvVHJhY2tzKCkuYXBwZW5kKG5ld1ZpZGVvVHJhY2suY29w
eVJlZigpKTsKIAogICAgICAgICAgICAgLy8gNS4zLjggQ3JlYXRlIGEgbmV3IHRyYWNrIGJ1ZmZl
ciB0byBzdG9yZSBjb2RlZCBmcmFtZXMgZm9yIHRoaXMgdHJhY2suCiAgICAgICAgICAgICBBU1NF
UlQoIW1fdHJhY2tCdWZmZXJNYXAuY29udGFpbnMobmV3VmlkZW9UcmFjay0+aWQoKSkpOwpAQCAt
MTEyOCwxMyArMTEyOCwxMyBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0
ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoU291cmNlQnVmZgogICAgICAgICAgICAg
Ly8gNS40LjQgUXVldWUgYSB0YXNrIHRvIGZpcmUgYSB0cnVzdGVkIGV2ZW50IG5hbWVkIGFkZHRy
YWNrLCB0aGF0IGRvZXMgbm90IGJ1YmJsZSBhbmQgaXMKICAgICAgICAgICAgIC8vIG5vdCBjYW5j
ZWxhYmxlLCBhbmQgdGhhdCB1c2VzIHRoZSBUcmFja0V2ZW50IGludGVyZmFjZSwgYXQgdGV4dFRy
YWNrcyBhdHRyaWJ1dGUgb24gdGhpcwogICAgICAgICAgICAgLy8gU291cmNlQnVmZmVyIG9iamVj
dC4KLSAgICAgICAgICAgIHRleHRUcmFja3MoKS0+YXBwZW5kKG5ld1RleHRUcmFjayk7CisgICAg
ICAgICAgICB0ZXh0VHJhY2tzKCktPmFwcGVuZCgqbmV3VGV4dFRyYWNrKTsKIAogICAgICAgICAg
ICAgLy8gNS40LjUgQWRkIG5ldyB0ZXh0IHRyYWNrIHRvIHRoZSB0ZXh0VHJhY2tzIGF0dHJpYnV0
ZSBvbiB0aGUgSFRNTE1lZGlhRWxlbWVudC4KICAgICAgICAgICAgIC8vIDUuNC42IFF1ZXVlIGEg
dGFzayB0byBmaXJlIGEgdHJ1c3RlZCBldmVudCBuYW1lZCBhZGR0cmFjaywgdGhhdCBkb2VzIG5v
dCBidWJibGUgYW5kIGlzCiAgICAgICAgICAgICAvLyBub3QgY2FuY2VsYWJsZSwgYW5kIHRoYXQg
dXNlcyB0aGUgVHJhY2tFdmVudCBpbnRlcmZhY2UsIGF0IHRoZSBUZXh0VHJhY2tMaXN0IG9iamVj
dAogICAgICAgICAgICAgLy8gcmVmZXJlbmNlZCBieSB0aGUgdGV4dFRyYWNrcyBhdHRyaWJ1dGUg
b24gdGhlIEhUTUxNZWRpYUVsZW1lbnQuCi0gICAgICAgICAgICBtX3NvdXJjZS0+bWVkaWFFbGVt
ZW50KCktPnRleHRUcmFja3MoKS0+YXBwZW5kKG5ld1RleHRUcmFjayk7CisgICAgICAgICAgICBt
X3NvdXJjZS0+bWVkaWFFbGVtZW50KCktPnRleHRUcmFja3MoKS5hcHBlbmQobmV3VGV4dFRyYWNr
LnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgICAgICAgICAvLyA1LjQuNyBDcmVhdGUgYSBuZXcg
dHJhY2sgYnVmZmVyIHRvIHN0b3JlIGNvZGVkIGZyYW1lcyBmb3IgdGhpcyB0cmFjay4KICAgICAg
ICAgICAgIEFTU0VSVCghbV90cmFja0J1ZmZlck1hcC5jb250YWlucyh0ZXh0VHJhY2tQcml2YXRl
LT5pZCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNr
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3Bw
CmluZGV4IDVkMGFkYTRhZTU0NDZjOWI2MjAxZjcyYmNiNzFiZDc0MmFkMGRmNTYuLjg2NWUyMGQw
NjM4NDQ2OTM3M2MzYWRiYTkwYTcxZjY3ZTQ0ZjJkMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIFRyYWNrQmFzZSogdG9UcmFjayhKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICBpZiAo
b2JqZWN0LT5pbmhlcml0cyhKU1RleHRUcmFjazo6aW5mbygpKSkKQEAgLTUwLDcgKzUwLDcgQEAg
VHJhY2tCYXNlKiB0b1RyYWNrKEpTVmFsdWUgdmFsdWUpCiAgICAgaWYgKG9iamVjdC0+aW5oZXJp
dHMoSlNWaWRlb1RyYWNrOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gJmpzQ2FzdDxKU1ZpZGVv
VHJhY2sqPihvYmplY3QpLT53cmFwcGVkKCk7CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUcmFja0Jhc2UmIHRyYWNrKQpAQCAtNjIsMTcgKzYy
LDE3IEBAIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVHJhY2tCYXNlJiB0CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIFRyYWNrQmFzZTo6QXVkaW9UcmFjazoKLSAgICAgICAgaWYgKGF1dG8qIHdyYXBw
ZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgKnRvQXVkaW9UcmFj
aygmdHJhY2spKSkKKyAgICAgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVy
KGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG93bmNhc3Q8QXVkaW9UcmFjaz4odHJhY2spKSkKICAg
ICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgICByZXR1cm4gQ1JFQVRFX0RPTV9XUkFQ
UEVSKGdsb2JhbE9iamVjdCwgQXVkaW9UcmFjaywgdHJhY2spOwogCiAgICAgY2FzZSBUcmFja0Jh
c2U6OlZpZGVvVHJhY2s6Ci0gICAgICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3Jh
cHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksICp0b1ZpZGVvVHJhY2soJnRyYWNrKSkpCisgICAg
ICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndv
cmxkKCksIGRvd25jYXN0PFZpZGVvVHJhY2s+KHRyYWNrKSkpCiAgICAgICAgICAgICByZXR1cm4g
d3JhcHBlcjsKICAgICAgICAgcmV0dXJuIENSRUFURV9ET01fV1JBUFBFUihnbG9iYWxPYmplY3Qs
IFZpZGVvVHJhY2ssIHRyYWNrKTsKIAogICAgIGNhc2UgVHJhY2tCYXNlOjpUZXh0VHJhY2s6Ci0g
ICAgICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3Qt
PndvcmxkKCksICp0b1RleHRUcmFjaygmdHJhY2spKSkKKyAgICAgICAgaWYgKGF1dG8qIHdyYXBw
ZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG93bmNhc3Q8VGV4
dFRyYWNrPih0cmFjaykpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgICAgIHJl
dHVybiBDUkVBVEVfRE9NX1dSQVBQRVIoZ2xvYmFsT2JqZWN0LCBUZXh0VHJhY2ssIHRyYWNrKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAzNTlj
OTU3ZmRhZmVmM2ZjNWQ3MmJjN2ZiMDM2NTA3Njg3MGY2ODAyLi44MzYzNTVjNWJlYWM3ZWYxODBm
YmVjMDg5NGEwMzM0NjYzODlkYzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKQEAgLTE3MzksNyArMTczOSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4
dFRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQoVGV4dFRyYWNrKiB0cmFjaykKIAogdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjphdWRpb1RyYWNrRW5hYmxlZENoYW5nZWQoQXVkaW9UcmFjayogdHJhY2spCiB7
Ci0gICAgaWYgKG1fYXVkaW9UcmFja3MgJiYgbV9hdWRpb1RyYWNrcy0+Y29udGFpbnModHJhY2sp
KQorICAgIEFTU0VSVCh0cmFjayk7CisgICAgaWYgKG1fYXVkaW9UcmFja3MgJiYgbV9hdWRpb1Ry
YWNrcy0+Y29udGFpbnMoKnRyYWNrKSkKICAgICAgICAgbV9hdWRpb1RyYWNrcy0+c2NoZWR1bGVD
aGFuZ2VFdmVudCgpOwogfQogCkBAIC0xNzY5LDcgKzE3NzAsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuZ2VkKFRleHRUcmFjayogdHJhY2spCiAKICAgICBjb25m
aWd1cmVUZXh0VHJhY2tEaXNwbGF5KEFzc3VtZVRleHRUcmFja1Zpc2liaWxpdHlDaGFuZ2VkKTsK
IAotICAgIGlmIChtX3RleHRUcmFja3MgJiYgbV90ZXh0VHJhY2tzLT5jb250YWlucyh0cmFjaykp
CisgICAgaWYgKG1fdGV4dFRyYWNrcyAmJiBtX3RleHRUcmFja3MtPmNvbnRhaW5zKCp0cmFjaykp
CiAgICAgICAgIG1fdGV4dFRyYWNrcy0+c2NoZWR1bGVDaGFuZ2VFdmVudCgpOwogCiAjaWYgRU5B
QkxFKEFWRl9DQVBUSU9OUykKQEAgLTE3ODAsNyArMTc4MSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6dGV4dFRyYWNrTW9kZUNoYW5nZWQoVGV4dFRyYWNrKiB0cmFjaykKIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojp2aWRlb1RyYWNrU2VsZWN0ZWRDaGFuZ2VkKFZpZGVvVHJhY2sqIHRyYWNr
KQogewotICAgIGlmIChtX3ZpZGVvVHJhY2tzICYmIG1fdmlkZW9UcmFja3MtPmNvbnRhaW5zKHRy
YWNrKSkKKyAgICBBU1NFUlQodHJhY2spOworICAgIGlmIChtX3ZpZGVvVHJhY2tzICYmIG1fdmlk
ZW9UcmFja3MtPmNvbnRhaW5zKCp0cmFjaykpCiAgICAgICAgIG1fdmlkZW9UcmFja3MtPnNjaGVk
dWxlQ2hhbmdlRXZlbnQoKTsKIH0KIApAQCAtMTgxMyw3ICsxODE1LDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojp0ZXh0VHJhY2tBZGRDdWVzKFRleHRUcmFjayogdHJhY2ssIGNvbnN0IFRleHRU
cmFja0N1ZUxpc3QKICAgICAgICAgdGV4dFRyYWNrQWRkQ3VlKHRyYWNrLCBjdWVzLT5pdGVtKGkp
KTsKIH0KIAotdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tSZW1vdmVDdWVzKFRleHRU
cmFjayosIGNvbnN0IFRleHRUcmFja0N1ZUxpc3QqIGN1ZXMpIAordm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp0ZXh0VHJhY2tSZW1vdmVDdWVzKFRleHRUcmFjayosIGNvbnN0IFRleHRUcmFja0N1ZUxp
c3QqIGN1ZXMpCiB7CiAgICAgVHJhY2tEaXNwbGF5VXBkYXRlU2NvcGUgc2NvcGUodGhpcyk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdWVzLT5sZW5ndGgoKTsgKytpKQpAQCAtMzU3Miw3
ICszNTc0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckRpZEFkZFRleHRU
cmFjayhQYXNzUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXYKICAgICAvLyA5LiBGaXJlIGFuIGV2
ZW50IHdpdGggdGhlIG5hbWUgYWRkdHJhY2ssIHRoYXQgZG9lcyBub3QgYnViYmxlIGFuZCBpcyBu
b3QgY2FuY2VsYWJsZSwgYW5kIHRoYXQgdXNlcyB0aGUgVHJhY2tFdmVudAogICAgIC8vIGludGVy
ZmFjZSwgd2l0aCB0aGUgdHJhY2sgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSB0ZXh0IHRy
YWNrJ3MgVGV4dFRyYWNrIG9iamVjdCwgYXQgdGhlIG1lZGlhIGVsZW1lbnQncwogICAgIC8vIHRl
eHRUcmFja3MgYXR0cmlidXRlJ3MgVGV4dFRyYWNrTGlzdCBvYmplY3QuCi0gICAgYWRkVGV4dFRy
YWNrKHRleHRUcmFjay5yZWxlYXNlKCkpOworICAgIGFkZFRleHRUcmFjayh0ZXh0VHJhY2sucmVs
ZWFzZU5vbk51bGwoKSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJE
aWRBZGRWaWRlb1RyYWNrKFBhc3NSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGU+IHBycFRyYWNrKQpA
QCAtMzYwMSwxMiArMzYwMywxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNsb3NlQ2FwdGlv
blRyYWNrc0NoYW5nZWQoKQogICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNsb3NlZENhcHRpb25U
cmFja3NDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YWRkQXVkaW9UcmFj
ayhQYXNzUmVmUHRyPEF1ZGlvVHJhY2s+IHRyYWNrKQordm9pZCBIVE1MTWVkaWFFbGVtZW50Ojph
ZGRBdWRpb1RyYWNrKFJlZjxBdWRpb1RyYWNrPiYmIHRyYWNrKQogewotICAgIGF1ZGlvVHJhY2tz
KCktPmFwcGVuZCh0cmFjayk7CisgICAgYXVkaW9UcmFja3MoKS5hcHBlbmQoV1RGTW92ZSh0cmFj
aykpOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhQYXNzUmVmUHRy
PFRleHRUcmFjaz4gdHJhY2spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhS
ZWY8VGV4dFRyYWNrPiYmIHRyYWNrKQogewogICAgIGlmICghbV9yZXF1aXJlQ2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZENhbGxiYWNrcykgewogICAgICAgICBtX3JlcXVpcmVDYXB0aW9uUHJlZmVy
ZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzID0gdHJ1ZTsKQEAgLTM2MTYsMzQgKzM2MTgsMzQgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2soUGFzc1JlZlB0cjxUZXh0VHJhY2s+IHRy
YWNrKQogICAgICAgICAgICAgbV9jYXB0aW9uRGlzcGxheU1vZGUgPSBwYWdlLT5ncm91cCgpLmNh
cHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25EaXNwbGF5TW9kZSgpOwogICAgIH0KIAotICAgIHRl
eHRUcmFja3MoKS0+YXBwZW5kKHRyYWNrKTsKKyAgICB0ZXh0VHJhY2tzKCkuYXBwZW5kKFdURk1v
dmUodHJhY2spKTsKIAogICAgIGNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsKIH0KIAotdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjphZGRWaWRlb1RyYWNrKFBhc3NSZWZQdHI8VmlkZW9UcmFjaz4g
dHJhY2spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFZpZGVvVHJhY2soUmVmPFZpZGVvVHJh
Y2s+JiYgdHJhY2spCiB7Ci0gICAgdmlkZW9UcmFja3MoKS0+YXBwZW5kKHRyYWNrKTsKKyAgICB2
aWRlb1RyYWNrcygpLmFwcGVuZChXVEZNb3ZlKHRyYWNrKSk7CiB9CiAKLXZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6cmVtb3ZlQXVkaW9UcmFjayhBdWRpb1RyYWNrKiB0cmFjaykKK3ZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6cmVtb3ZlQXVkaW9UcmFjayhBdWRpb1RyYWNrJiB0cmFjaykKIHsKICAgICBt
X2F1ZGlvVHJhY2tzLT5yZW1vdmUodHJhY2spOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnJlbW92ZVRleHRUcmFjayhUZXh0VHJhY2sqIHRyYWNrLCBib29sIHNjaGVkdWxlRXZlbnQpCit2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZVRleHRUcmFjayhUZXh0VHJhY2smIHRyYWNrLCBi
b29sIHNjaGVkdWxlRXZlbnQpCiB7CiAgICAgVHJhY2tEaXNwbGF5VXBkYXRlU2NvcGUgc2NvcGUo
dGhpcyk7Ci0gICAgaWYgKFRleHRUcmFja0N1ZUxpc3QqIGN1ZXMgPSB0cmFjay0+Y3VlcygpKQot
ICAgICAgICB0ZXh0VHJhY2tSZW1vdmVDdWVzKHRyYWNrLCBjdWVzKTsKLSAgICB0cmFjay0+Y2xl
YXJDbGllbnQoKTsKKyAgICBpZiAoVGV4dFRyYWNrQ3VlTGlzdCogY3VlcyA9IHRyYWNrLmN1ZXMo
KSkKKyAgICAgICAgdGV4dFRyYWNrUmVtb3ZlQ3VlcygmdHJhY2ssIGN1ZXMpOworICAgIHRyYWNr
LmNsZWFyQ2xpZW50KCk7CiAgICAgaWYgKG1fdGV4dFRyYWNrcykKICAgICAgICAgbV90ZXh0VHJh
Y2tzLT5yZW1vdmUodHJhY2ssIHNjaGVkdWxlRXZlbnQpOwogCiAgICAgY2xvc2VDYXB0aW9uVHJh
Y2tzQ2hhbmdlZCgpOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZVZpZGVvVHJh
Y2soVmlkZW9UcmFjayogdHJhY2spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZVZpZGVv
VHJhY2soVmlkZW9UcmFjayYgdHJhY2spCiB7CiAgICAgbV92aWRlb1RyYWNrcy0+cmVtb3ZlKHRy
YWNrKTsKIH0KQEAgLTM2NTEsMjAgKzM2NTMsMTkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpy
ZW1vdmVWaWRlb1RyYWNrKFZpZGVvVHJhY2sqIHRyYWNrKQogdm9pZCBIVE1MTWVkaWFFbGVtZW50
Ojpmb3JnZXRSZXNvdXJjZVNwZWNpZmljVHJhY2tzKCkKIHsKICAgICB3aGlsZSAobV9hdWRpb1Ry
YWNrcyAmJiAgbV9hdWRpb1RyYWNrcy0+bGVuZ3RoKCkpCi0gICAgICAgIHJlbW92ZUF1ZGlvVHJh
Y2sobV9hdWRpb1RyYWNrcy0+bGFzdEl0ZW0oKSk7CisgICAgICAgIHJlbW92ZUF1ZGlvVHJhY2so
Km1fYXVkaW9UcmFja3MtPmxhc3RJdGVtKCkpOwogCiAgICAgaWYgKG1fdGV4dFRyYWNrcykgewog
ICAgICAgICBUcmFja0Rpc3BsYXlVcGRhdGVTY29wZSBzY29wZSh0aGlzKTsKICAgICAgICAgZm9y
IChpbnQgaSA9IG1fdGV4dFRyYWNrcy0+bGVuZ3RoKCkgLSAxOyBpID49IDA7IC0taSkgewotICAg
ICAgICAgICAgVGV4dFRyYWNrKiB0cmFjayA9IG1fdGV4dFRyYWNrcy0+aXRlbShpKTsKLQotICAg
ICAgICAgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OkluQmFuZCkKKyAg
ICAgICAgICAgIGF1dG8mIHRyYWNrID0gKm1fdGV4dFRyYWNrcy0+aXRlbShpKTsKKyAgICAgICAg
ICAgIGlmICh0cmFjay50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OkluQmFuZCkKICAgICAgICAg
ICAgICAgICByZW1vdmVUZXh0VHJhY2sodHJhY2ssIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIHdoaWxlIChtX3ZpZGVvVHJhY2tzICYmICBtX3ZpZGVvVHJhY2tzLT5sZW5ndGgoKSkK
LSAgICAgICAgcmVtb3ZlVmlkZW9UcmFjayhtX3ZpZGVvVHJhY2tzLT5sYXN0SXRlbSgpKTsKKyAg
ICAgICAgcmVtb3ZlVmlkZW9UcmFjaygqbV92aWRlb1RyYWNrcy0+bGFzdEl0ZW0oKSk7CiB9CiAK
IFJlZlB0cjxUZXh0VHJhY2s+IEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhjb25zdCBT
dHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMzY5MCw3ICszNjkxLDcgQEAgUmVmUHRyPFRleHRUcmFj
az4gSFRNTE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKGNvbnN0IFN0cmluZyYga2luZCwgY29u
c3QgU3RyaW4KICAgICAvLyBmaXJzdCBhcHBlbmQgdGhlIHRyYWNrIHRvIHRoZSB0ZXh0IHRyYWNr
IGxpc3QuCiAKICAgICAvLyA2LiBBZGQgdGhlIG5ldyB0ZXh0IHRyYWNrIHRvIHRoZSBtZWRpYSBl
bGVtZW50J3MgbGlzdCBvZiB0ZXh0IHRyYWNrcy4KLSAgICBhZGRUZXh0VHJhY2sodGV4dFRyYWNr
LnB0cigpKTsKKyAgICBhZGRUZXh0VHJhY2sodGV4dFRyYWNrLmNvcHlSZWYoKSk7CiAKICAgICAv
LyAuLi4gaXRzIHRleHQgdHJhY2sgcmVhZGluZXNzIHN0YXRlIHRvIHRoZSB0ZXh0IHRyYWNrIGxv
YWRlZCBzdGF0ZSAuLi4KICAgICB0ZXh0VHJhY2stPnNldFJlYWRpbmVzc1N0YXRlKFRleHRUcmFj
azo6TG9hZGVkKTsKQEAgLTM3MDEsMjggKzM3MDIsMjggQEAgUmVmUHRyPFRleHRUcmFjaz4gSFRN
TE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3Ry
aW4KICAgICByZXR1cm4gV1RGTW92ZSh0ZXh0VHJhY2spOwogfQogCi1BdWRpb1RyYWNrTGlzdCog
SFRNTE1lZGlhRWxlbWVudDo6YXVkaW9UcmFja3MoKQorQXVkaW9UcmFja0xpc3QmIEhUTUxNZWRp
YUVsZW1lbnQ6OmF1ZGlvVHJhY2tzKCkKIHsKICAgICBpZiAoIW1fYXVkaW9UcmFja3MpCiAgICAg
ICAgIG1fYXVkaW9UcmFja3MgPSBBdWRpb1RyYWNrTGlzdDo6Y3JlYXRlKHRoaXMsIEFjdGl2ZURP
TU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIAotICAgIHJldHVybiBtX2F1ZGlv
VHJhY2tzLmdldCgpOworICAgIHJldHVybiAqbV9hdWRpb1RyYWNrczsKIH0KIAotVGV4dFRyYWNr
TGlzdCogSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrcygpIAorVGV4dFRyYWNrTGlzdCYgSFRN
TE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrcygpCiB7CiAgICAgaWYgKCFtX3RleHRUcmFja3MpCiAg
ICAgICAgIG1fdGV4dFRyYWNrcyA9IFRleHRUcmFja0xpc3Q6OmNyZWF0ZSh0aGlzLCBBY3RpdmVE
T01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAKLSAgICByZXR1cm4gbV90ZXh0
VHJhY2tzLmdldCgpOworICAgIHJldHVybiAqbV90ZXh0VHJhY2tzOwogfQogCi1WaWRlb1RyYWNr
TGlzdCogSFRNTE1lZGlhRWxlbWVudDo6dmlkZW9UcmFja3MoKQorVmlkZW9UcmFja0xpc3QmIEhU
TUxNZWRpYUVsZW1lbnQ6OnZpZGVvVHJhY2tzKCkKIHsKICAgICBpZiAoIW1fdmlkZW9UcmFja3Mp
CiAgICAgICAgIG1fdmlkZW9UcmFja3MgPSBWaWRlb1RyYWNrTGlzdDo6Y3JlYXRlKHRoaXMsIEFj
dGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIAotICAgIHJldHVybiBt
X3ZpZGVvVHJhY2tzLmdldCgpOworICAgIHJldHVybiAqbV92aWRlb1RyYWNrczsKIH0KIAogdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRUZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCogdHJh
Y2tFbGVtZW50KQpAQCAtMzczNyw3ICszNzM4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpk
aWRBZGRUZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVtZW50KQogICAgIGlmICgh
dGV4dFRyYWNrKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkVGV4dFRyYWNrKHRleHRU
cmFjay5yZWxlYXNlKCkpOworICAgIGFkZFRleHRUcmFjayh0ZXh0VHJhY2sucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgCiAgICAgLy8gRG8gbm90IHNjaGVkdWxlIHRoZSB0cmFjayBsb2FkaW5nIHVu
dGlsIHBhcnNpbmcgZmluaXNoZXMgc28gd2UgZG9uJ3Qgc3RhcnQgYmVmb3JlIGFsbCB0cmFja3MK
ICAgICAvLyBpbiB0aGUgbWFya3VwIGhhdmUgYmVlbiBhZGRlZC4KQEAgLTM3NzIsNyArMzc3Myw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkUmVtb3ZlVGV4dFRyYWNrKEhUTUxUcmFja0Vs
ZW1lbnQqIHRyYWNrRWxlbWVudCkKICAgICAvLyBXaGVuIGEgdHJhY2sgZWxlbWVudCdzIHBhcmVu
dCBlbGVtZW50IGNoYW5nZXMgYW5kIHRoZSBvbGQgcGFyZW50IHdhcyBhIG1lZGlhIGVsZW1lbnQs
IAogICAgIC8vIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdCByZW1vdmUgdGhlIHRyYWNrIGVsZW1l
bnQncyBjb3JyZXNwb25kaW5nIHRleHQgdHJhY2sgZnJvbSB0aGUgCiAgICAgLy8gbWVkaWEgZWxl
bWVudCdzIGxpc3Qgb2YgdGV4dCB0cmFja3MuCi0gICAgcmVtb3ZlVGV4dFRyYWNrKHRleHRUcmFj
ay5nZXQoKSk7CisgICAgcmVtb3ZlVGV4dFRyYWNrKCp0ZXh0VHJhY2spOwogCiAgICAgc2l6ZV90
IGluZGV4ID0gbV90ZXh0VHJhY2tzV2hlblJlc291cmNlU2VsZWN0aW9uQmVnYW4uZmluZCh0ZXh0
VHJhY2suZ2V0KCkpOwogICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKQEAgLTQwMDIsMjQgKzQw
MDMsMjQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp2aXNpYmlsaXR5RGlkQ2hhbmdlKCkKIAog
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRUcmFjayhUZXh0VHJhY2sqIHRy
YWNrVG9TZWxlY3QpCiB7Ci0gICAgVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0ID0gdGV4dFRyYWNr
cygpOwotICAgIGlmICghdHJhY2tMaXN0IHx8ICF0cmFja0xpc3QtPmxlbmd0aCgpKQorICAgIFRl
eHRUcmFja0xpc3QmIHRyYWNrTGlzdCA9IHRleHRUcmFja3MoKTsKKyAgICBpZiAoIXRyYWNrTGlz
dC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHRyYWNrVG9TZWxlY3QgIT0g
VGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSAmJiB0cmFja1RvU2VsZWN0ICE9IFRleHRU
cmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpIHsKLSAgICAgICAgaWYgKCF0cmFja0xp
c3QtPmNvbnRhaW5zKHRyYWNrVG9TZWxlY3QpKQorICAgICAgICBpZiAoIXRyYWNrVG9TZWxlY3Qg
fHwgIXRyYWNrTGlzdC5jb250YWlucygqdHJhY2tUb1NlbGVjdCkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMCwgbGVuZ3RoID0gdHJhY2tMaXN0
LT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBUZXh0VHJhY2sqIHRy
YWNrID0gdHJhY2tMaXN0LT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKCF0cmFja1RvU2VsZWN0
IHx8IHRyYWNrICE9IHRyYWNrVG9TZWxlY3QpCisgICAgICAgIGZvciAoaW50IGkgPSAwLCBsZW5n
dGggPSB0cmFja0xpc3QubGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
VGV4dFRyYWNrKiB0cmFjayA9IHRyYWNrTGlzdC5pdGVtKGkpOworICAgICAgICAgICAgaWYgKHRy
YWNrICE9IHRyYWNrVG9TZWxlY3QpCiAgICAgICAgICAgICAgICAgdHJhY2stPnNldE1vZGUoVGV4
dFRyYWNrOjpNb2RlOjpEaXNhYmxlZCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgdHJhY2stPnNldE1vZGUoVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSBpZiAodHJhY2tUb1NlbGVjdCA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2Zm
SXRlbSgpKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwLCBsZW5ndGggPSB0cmFja0xpc3QtPmxl
bmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0cmFja0xpc3QtPml0ZW0oaSkt
PnNldE1vZGUoVGV4dFRyYWNrOjpNb2RlOjpEaXNhYmxlZCk7CisgICAgICAgIGZvciAoaW50IGkg
PSAwLCBsZW5ndGggPSB0cmFja0xpc3QubGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIHRyYWNrTGlzdC5pdGVtKGkpLT5zZXRNb2RlKFRleHRUcmFjazo6TW9kZTo6RGlzYWJs
ZWQpOwogICAgIH0KIAogICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IGI0MzFiMGM3Mjc1NDFkYTAwZDAyMTkwOTQ3ZGY2
ZjFkZGQxZDQ3YzEuLmU1MmU4Nzk4ZTQ0YmFlNzQ0YjVmOTk4MzVkMjc3NzMzOGJjMzc5ODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC0yODAsMTggKzI4MCwxOCBA
QCBwdWJsaWM6CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIFJlZlB0cjxUZXh0VHJhY2s+
IGFkZFRleHRUcmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNv
bnN0IFN0cmluZyYgbGFuZ3VhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIEF1ZGlvVHJhY2tM
aXN0KiBhdWRpb1RyYWNrcygpOwotICAgIFRleHRUcmFja0xpc3QqIHRleHRUcmFja3MoKTsKLSAg
ICBWaWRlb1RyYWNrTGlzdCogdmlkZW9UcmFja3MoKTsKKyAgICBBdWRpb1RyYWNrTGlzdCYgYXVk
aW9UcmFja3MoKTsKKyAgICBUZXh0VHJhY2tMaXN0JiB0ZXh0VHJhY2tzKCk7CisgICAgVmlkZW9U
cmFja0xpc3QmIHZpZGVvVHJhY2tzKCk7CiAKICAgICBDdWVMaXN0IGN1cnJlbnRseUFjdGl2ZUN1
ZXMoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRseUFjdGl2ZUN1ZXM7IH0KIAotICAgIHZvaWQg
YWRkQXVkaW9UcmFjayhQYXNzUmVmUHRyPEF1ZGlvVHJhY2s+KTsKLSAgICB2b2lkIGFkZFRleHRU
cmFjayhQYXNzUmVmUHRyPFRleHRUcmFjaz4pOwotICAgIHZvaWQgYWRkVmlkZW9UcmFjayhQYXNz
UmVmUHRyPFZpZGVvVHJhY2s+KTsKLSAgICB2b2lkIHJlbW92ZUF1ZGlvVHJhY2soQXVkaW9UcmFj
ayopOwotICAgIHZvaWQgcmVtb3ZlVGV4dFRyYWNrKFRleHRUcmFjayosIGJvb2wgc2NoZWR1bGVF
dmVudCA9IHRydWUpOwotICAgIHZvaWQgcmVtb3ZlVmlkZW9UcmFjayhWaWRlb1RyYWNrKik7Cisg
ICAgdm9pZCBhZGRBdWRpb1RyYWNrKFJlZjxBdWRpb1RyYWNrPiYmKTsKKyAgICB2b2lkIGFkZFRl
eHRUcmFjayhSZWY8VGV4dFRyYWNrPiYmKTsKKyAgICB2b2lkIGFkZFZpZGVvVHJhY2soUmVmPFZp
ZGVvVHJhY2s+JiYpOworICAgIHZvaWQgcmVtb3ZlQXVkaW9UcmFjayhBdWRpb1RyYWNrJik7Cisg
ICAgdm9pZCByZW1vdmVUZXh0VHJhY2soVGV4dFRyYWNrJiwgYm9vbCBzY2hlZHVsZUV2ZW50ID0g
dHJ1ZSk7CisgICAgdm9pZCByZW1vdmVWaWRlb1RyYWNrKFZpZGVvVHJhY2smKTsKICAgICB2b2lk
IGZvcmdldFJlc291cmNlU3BlY2lmaWNUcmFja3MoKTsKICAgICB2b2lkIGNsb3NlQ2FwdGlvblRy
YWNrc0NoYW5nZWQoKTsKICAgICB2b2lkIG5vdGlmeU1lZGlhUGxheWVyT2ZUZXh0VHJhY2tDaGFu
Z2VzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKaW5kZXggYzlmNGE0OTc3MTgyNTFlMzZmZTBlMWEyODNkMmVjNzQxNjNhZGVk
MC4uMmVmMGU4NjU3MzBhOGRkM2UzMDBiNDY2Y2Q1ZGQxZjk2YmIwMmZlYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAt
NzM0LDggKzczNCw3IEBAIHZvaWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RF
bGVtZW50Ojp1cGRhdGVEaXNwbGF5KCkKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0ID0gbWVkaWFFbGVtZW50LT50
ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKCF0cmFja0xpc3QgfHwgIXRyYWNrTGlzdC0+bGVuZ3RoKCkp
CisgICAgaWYgKCFtZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS5sZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgcmVidWlsZFRyYWNrTGlzdE1lbnUoKTsKQEAgLTc5NiwxNCArNzk1LDE0
IEBAIHZvaWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50OjpyZWJ1
aWxkVHJhY2tMaXN0TWVudSgpCiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1lZGlhRWxlbWVudC0+dGV4dFRy
YWNrcygpOwotICAgIGlmICghdHJhY2tMaXN0IHx8ICF0cmFja0xpc3QtPmxlbmd0aCgpKQorICAg
IFRleHRUcmFja0xpc3QmIHRyYWNrTGlzdCA9IG1lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpOwor
ICAgIGlmICghdHJhY2tMaXN0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
IWRvY3VtZW50KCkucGFnZSgpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byYgY2FwdGlvblBy
ZWZlcmVuY2VzID0gZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2Vz
KCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiB0cmFja3NGb3JNZW51ID0gY2FwdGlv
blByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodHJhY2tMaXN0KTsKKyAgICBWZWN0
b3I8UmVmUHRyPFRleHRUcmFjaz4+IHRyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMu
c29ydGVkVHJhY2tMaXN0Rm9yTWVudSgmdHJhY2tMaXN0KTsKIAogICAgIGF1dG8gY2FwdGlvbnNI
ZWFkZXIgPSBkb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQoaDNUYWcsIEFTU0VSVF9OT19FWENFUFRJ
T04pOwogICAgIGNhcHRpb25zSGVhZGVyLT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLmNyZWF0ZVRl
eHROb2RlKHRleHRUcmFja1N1YnRpdGxlc1RleHQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svQXVkaW9UcmFjay5jcHAKaW5kZXggNWFmNDc2MTQ5ZDE5MTAzYmUyNTc4MDljZjhkMDQyMmJj
Y2QzZjVhNi4uOGMzNTZmNzkxNWQ0OThjZTM0MTJmNzk4ODJmOGQwNjBiMDg1NjE5MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2suY3BwCkBAIC05MCw3ICs5MCw3IEBAIEF1
ZGlvVHJhY2s6OkF1ZGlvVHJhY2soQXVkaW9UcmFja0NsaWVudCogY2xpZW50LCBQYXNzUmVmUHRy
PEF1ZGlvVHJhY2tQcml2YXRlPiB0CiAKIEF1ZGlvVHJhY2s6On5BdWRpb1RyYWNrKCkKIHsKLSAg
ICBtX3ByaXZhdGUtPnNldENsaWVudCgwKTsKKyAgICBtX3ByaXZhdGUtPnNldENsaWVudChudWxs
cHRyKTsKIH0KIAogdm9pZCBBdWRpb1RyYWNrOjpzZXRQcml2YXRlKFBhc3NSZWZQdHI8QXVkaW9U
cmFja1ByaXZhdGU+IHRyYWNrUHJpdmF0ZSkKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIEF1ZGlv
VHJhY2s6OnNldFByaXZhdGUoUGFzc1JlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZT4gdHJhY2tQcml2
YXRlKQogICAgIGlmIChtX3ByaXZhdGUgPT0gdHJhY2tQcml2YXRlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX3ByaXZhdGUtPnNldENsaWVudCgwKTsKKyAgICBtX3ByaXZhdGUtPnNldENsaWVu
dChudWxscHRyKTsKICAgICBtX3ByaXZhdGUgPSB0cmFja1ByaXZhdGU7CiAgICAgbV9wcml2YXRl
LT5zZXRDbGllbnQodGhpcyk7CiAKQEAgLTExMSwyMCArMTExLDEyIEBAIHZvaWQgQXVkaW9UcmFj
azo6c2V0UHJpdmF0ZShQYXNzUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlPiB0cmFja1ByaXZhdGUp
CiAKIGJvb2wgQXVkaW9UcmFjazo6aXNWYWxpZEtpbmQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSkgY29uc3QKIHsKLSAgICBpZiAodmFsdWUgPT0gYWx0ZXJuYXRpdmVLZXl3b3JkKCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSBkZXNjcmlwdGlvbktleXdvcmQoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09IG1haW5LZXl3b3JkKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSBtYWluRGVzY0tleXdvcmQoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09IHRyYW5zbGF0aW9uS2V5d29y
ZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodmFsdWUgPT0gY29tbWVudGFyeUtl
eXdvcmQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHZhbHVlID09IGFsdGVybmF0aXZlS2V5d29yZCgpCisgICAgICAgIHx8IHZhbHVlID09
IGRlc2NyaXB0aW9uS2V5d29yZCgpCisgICAgICAgIHx8IHZhbHVlID09IG1haW5LZXl3b3JkKCkK
KyAgICAgICAgfHwgdmFsdWUgPT0gbWFpbkRlc2NLZXl3b3JkKCkKKyAgICAgICAgfHwgdmFsdWUg
PT0gdHJhbnNsYXRpb25LZXl3b3JkKCkKKyAgICAgICAgfHwgdmFsdWUgPT0gY29tbWVudGFyeUtl
eXdvcmQoKTsKIH0KIAogdm9pZCBBdWRpb1RyYWNrOjpzZXRFbmFibGVkKGNvbnN0IGJvb2wgZW5h
YmxlZCkKQEAgLTE3NSw3ICsxNjcsNyBAQCB2b2lkIEF1ZGlvVHJhY2s6Omxhbmd1YWdlQ2hhbmdl
ZChUcmFja1ByaXZhdGVCYXNlKiB0cmFja1ByaXZhdGUsIGNvbnN0IEF0b21pY1N0cgogdm9pZCBB
dWRpb1RyYWNrOjp3aWxsUmVtb3ZlKFRyYWNrUHJpdmF0ZUJhc2UqIHRyYWNrUHJpdmF0ZSkKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKHRyYWNrUHJpdmF0ZSwgdHJhY2tQcml2YXRlID09IG1fcHJpdmF0
ZSk7Ci0gICAgbWVkaWFFbGVtZW50KCktPnJlbW92ZUF1ZGlvVHJhY2sodGhpcyk7CisgICAgbWVk
aWFFbGVtZW50KCktPnJlbW92ZUF1ZGlvVHJhY2soKnRoaXMpOwogfQogCiB2b2lkIEF1ZGlvVHJh
Y2s6OnVwZGF0ZUtpbmRGcm9tUHJpdmF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0F1ZGlvVHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9U
cmFjay5oCmluZGV4IDJmMzk0MTU1ZDc2ZjRkYzE2ZjY3MjNiNTYzZTM5OWM0ZThmYWMzZjIuLjcw
NTg5YzI1MzljNThiN2Y4MTU3MzAyZWY0YTU3ZWJkMGY5Y2Q1Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svQXVkaW9UcmFjay5oCkBAIC05MywxMiArOTMsMTAgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8QXVkaW9UcmFja1ByaXZhdGU+IG1fcHJpdmF0ZTsKIH07CiAKLWlubGluZSBBdWRpb1Ry
YWNrKiB0b0F1ZGlvVHJhY2soVHJhY2tCYXNlKiB0cmFjaykKLXsKLSAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTih0cmFjay0+dHlwZSgpID09IFRyYWNrQmFzZTo6QXVkaW9UcmFj
ayk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEF1ZGlvVHJhY2sqPih0cmFjayk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpBdWRpb1RyYWNrKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpU
cmFja0Jhc2UmIHRyYWNrKSB7IHJldHVybiB0cmFjay50eXBlKCkgPT0gV2ViQ29yZTo6VHJhY2tC
YXNlOjpBdWRpb1RyYWNrOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAppbmRleCA2
YWFhMzJlZmU1MTc3YTE3YTZhOWU2YWQ3NDMxNzUzNGVkNGJiMThjLi5mNjFlZjk0MThhZTAzYTNh
OGIyYTE5NTI0ZjI1N2FhZDE4OGQ1ZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0F1ZGlvVHJhY2tMaXN0LmNwcApAQCAtNDMsNDMgKzQzLDQwIEBAIEF1ZGlvVHJhY2tMaXN0Ojp+
QXVkaW9UcmFja0xpc3QoKQogewogfQogCi12b2lkIEF1ZGlvVHJhY2tMaXN0OjphcHBlbmQoUGFz
c1JlZlB0cjxBdWRpb1RyYWNrPiBwcnBUcmFjaykKK3ZvaWQgQXVkaW9UcmFja0xpc3Q6OmFwcGVu
ZChSZWY8QXVkaW9UcmFjaz4mJiB0cmFjaykKIHsKLSAgICBSZWZQdHI8QXVkaW9UcmFjaz4gdHJh
Y2sgPSBwcnBUcmFjazsKLQogICAgIC8vIEluc2VydCB0cmFja3MgaW4gdGhlIG1lZGlhIGZpbGUg
b3JkZXIuCiAgICAgc2l6ZV90IGluZGV4ID0gdHJhY2stPmluYmFuZFRyYWNrSW5kZXgoKTsKICAg
ICBzaXplX3QgaW5zZXJ0aW9uSW5kZXg7CiAgICAgZm9yIChpbnNlcnRpb25JbmRleCA9IDA7IGlu
c2VydGlvbkluZGV4IDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgpOyArK2luc2VydGlvbkluZGV4KSB7
Ci0gICAgICAgIEF1ZGlvVHJhY2sqIG90aGVyVHJhY2sgPSBzdGF0aWNfY2FzdDxBdWRpb1RyYWNr
Kj4obV9pbmJhbmRUcmFja3NbaW5zZXJ0aW9uSW5kZXhdLmdldCgpKTsKLSAgICAgICAgaWYgKG90
aGVyVHJhY2stPmluYmFuZFRyYWNrSW5kZXgoKSA+IGluZGV4KQorICAgICAgICBhdXRvJiBvdGhl
clRyYWNrID0gZG93bmNhc3Q8QXVkaW9UcmFjaz4oKm1faW5iYW5kVHJhY2tzW2luc2VydGlvbklu
ZGV4XSk7CisgICAgICAgIGlmIChvdGhlclRyYWNrLmluYmFuZFRyYWNrSW5kZXgoKSA+IGluZGV4
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIG1faW5iYW5kVHJhY2tzLmluc2VydChp
bnNlcnRpb25JbmRleCwgdHJhY2spOworICAgIG1faW5iYW5kVHJhY2tzLmluc2VydChpbnNlcnRp
b25JbmRleCwgdHJhY2sucHRyKCkpOwogCiAKICAgICBBU1NFUlQoIXRyYWNrLT5tZWRpYUVsZW1l
bnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50KCkgPT0gbWVkaWFFbGVtZW50KCkpOwogICAgIHRy
YWNrLT5zZXRNZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50KCkpOwogCi0gICAgc2NoZWR1bGVBZGRU
cmFja0V2ZW50KHRyYWNrLnJlbGVhc2UoKSk7CisgICAgc2NoZWR1bGVBZGRUcmFja0V2ZW50KFdU
Rk1vdmUodHJhY2spKTsKIH0KIAogQXVkaW9UcmFjayogQXVkaW9UcmFja0xpc3Q6Oml0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKGluZGV4IDwgbV9pbmJhbmRUcmFja3Muc2l6
ZSgpKQotICAgICAgICByZXR1cm4gdG9BdWRpb1RyYWNrKG1faW5iYW5kVHJhY2tzW2luZGV4XS5n
ZXQoKSk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEF1ZGlvVHJh
Y2s+KG1faW5iYW5kVHJhY2tzW2luZGV4XS5nZXQoKSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKIEF1ZGlvVHJhY2sqIEF1ZGlvVHJhY2tMaXN0OjpnZXRUcmFja0J5SWQoY29uc3QgQXRvbWlj
U3RyaW5nJiBpZCkgY29uc3QKIHsKICAgICBmb3IgKGF1dG8mIGluYmFuZFRyYWNrIDogbV9pbmJh
bmRUcmFja3MpIHsKLSAgICAgICAgQXVkaW9UcmFjayogdHJhY2sgPSB0b0F1ZGlvVHJhY2soaW5i
YW5kVHJhY2suZ2V0KCkpOwotICAgICAgICBpZiAodHJhY2stPmlkKCkgPT0gaWQpCi0gICAgICAg
ICAgICByZXR1cm4gdHJhY2s7CisgICAgICAgIGF1dG8mIHRyYWNrID0gZG93bmNhc3Q8QXVkaW9U
cmFjaz4oKmluYmFuZFRyYWNrKTsKKyAgICAgICAgaWYgKHRyYWNrLmlkKCkgPT0gaWQpCisgICAg
ICAgICAgICByZXR1cm4gJnRyYWNrOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAogRXZlbnRUYXJnZXRJbnRlcmZhY2UgQXVkaW9UcmFja0xpc3Q6OmV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svQXVkaW9UcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9U
cmFja0xpc3QuaAppbmRleCA1ODNiZmY3YTQyY2UyMDAwYjNmNjEzYmY4ZmE4MmJjNjMwOWIyNGE2
Li5iZjIyMTNkYWE3MGU1MjYzNjdjMzBmOWNmZTNkN2UxZTQ1NzcwNTM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5oCkBAIC00Niw3ICs0Niw3IEBAIHB1Ymxp
YzoKIAogICAgIEF1ZGlvVHJhY2sqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIEF1
ZGlvVHJhY2sqIGxhc3RJdGVtKCkgY29uc3QgeyByZXR1cm4gaXRlbShsZW5ndGgoKSAtIDEpOyB9
Ci0gICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxBdWRpb1RyYWNrPik7CisgICAgdm9pZCBhcHBl
bmQoUmVmPEF1ZGlvVHJhY2s+JiYpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICBFdmVudFRh
cmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCmluZGV4IGYwNjI4
NjJiNDVjZDk0MDY4OTBmZTdkNTAxNGVmMjM3ZGZmMTM4NTAuLmU3NzA5NDcxYWI1MWYyYjcyZDcz
MDFlYmI2Y2MxZDU4NDQzMzJhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svSW5iYW5kVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0lu
YmFuZFRleHRUcmFjay5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIEluYmFuZFRleHRUcmFj
azo6d2lsbFJlbW92ZShUcmFja1ByaXZhdGVCYXNlKiB0cmFja1ByaXZhdGUpCiAgICAgaWYgKCFt
ZWRpYUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVF9VTlVTRUQodHJhY2tQ
cml2YXRlLCB0cmFja1ByaXZhdGUgPT0gbV9wcml2YXRlKTsKLSAgICBtZWRpYUVsZW1lbnQoKS0+
cmVtb3ZlVGV4dFRyYWNrKHRoaXMpOworICAgIG1lZGlhRWxlbWVudCgpLT5yZW1vdmVUZXh0VHJh
Y2soKnRoaXMpOwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFjazo6dXBkYXRlS2luZEZyb21Qcml2
YXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAppbmRleCAzMTg4Nzgx
ZGJmNWY0OTUwMjE3NDRhMDQzOGJjN2E3YjIzOTMwY2E5Li5hYjdhMmZmMThmMTk5MmU1MGRhYThl
ZTA3ODZkYTNlY2E4MTJlYTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2su
Y3BwCkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBUZXh0VHJhY2s6OnNldEtpbmQoS2luZCBuZXdL
aW5kKQogICAgIC8vIDQuIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVk
IGNoYW5nZSBhdCB0aGUgVGV4dFRyYWNrTGlzdCBvYmplY3QgcmVmZXJlbmNlZCBieQogICAgIC8v
IHRoZSB0ZXh0VHJhY2tzIGF0dHJpYnV0ZSBvbiB0aGUgSFRNTE1lZGlhRWxlbWVudC4KICAgICBp
ZiAobWVkaWFFbGVtZW50KCkpCi0gICAgICAgIG1lZGlhRWxlbWVudCgpLT50ZXh0VHJhY2tzKCkt
PnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKKyAgICAgICAgbWVkaWFFbGVtZW50KCktPnRleHRUcmFj
a3MoKS5zY2hlZHVsZUNoYW5nZUV2ZW50KCk7CiAjZW5kaWYKIAogICAgIGlmIChtX2NsaWVudCAm
JiBvbGRLaW5kICE9IG1fa2luZCkKQEAgLTQ1NCw3ICs0NTQsNyBAQCBpbnQgVGV4dFRyYWNrOjp0
cmFja0luZGV4KCkKICAgICBBU1NFUlQobV9tZWRpYUVsZW1lbnQpOwogCiAgICAgaWYgKG1fdHJh
Y2tJbmRleCA9PSBpbnZhbGlkVHJhY2tJbmRleCkKLSAgICAgICAgbV90cmFja0luZGV4ID0gbV9t
ZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS0+Z2V0VHJhY2tJbmRleCh0aGlzKTsKKyAgICAgICAg
bV90cmFja0luZGV4ID0gbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS5nZXRUcmFja0luZGV4
KCp0aGlzKTsKIAogICAgIHJldHVybiBtX3RyYWNrSW5kZXg7CiB9CkBAIC00ODMsNyArNDgzLDcg
QEAgaW50IFRleHRUcmFjazo6dHJhY2tJbmRleFJlbGF0aXZlVG9SZW5kZXJlZFRyYWNrcygpCiAg
ICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50KTsKICAgICAKICAgICBpZiAobV9yZW5kZXJlZFRyYWNr
SW5kZXggPT0gaW52YWxpZFRyYWNrSW5kZXgpCi0gICAgICAgIG1fcmVuZGVyZWRUcmFja0luZGV4
ID0gbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS0+Z2V0VHJhY2tJbmRleFJlbGF0aXZlVG9S
ZW5kZXJlZFRyYWNrcyh0aGlzKTsKKyAgICAgICAgbV9yZW5kZXJlZFRyYWNrSW5kZXggPSBtX21l
ZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLmdldFRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRU
cmFja3MoKnRoaXMpOwogICAgIAogICAgIHJldHVybiBtX3JlbmRlcmVkVHJhY2tJbmRleDsKIH0K
QEAgLTU4MSw3ICs1ODEsNyBAQCB2b2lkIFRleHRUcmFjazo6c2V0TGFuZ3VhZ2UoY29uc3QgQXRv
bWljU3RyaW5nJiBsYW5ndWFnZSkKICAgICAvLyA0LiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNp
bXBsZSBldmVudCBuYW1lZCBjaGFuZ2UgYXQgdGhlIFRleHRUcmFja0xpc3Qgb2JqZWN0IHJlZmVy
ZW5jZWQgYnkKICAgICAvLyB0aGUgdGV4dFRyYWNrcyBhdHRyaWJ1dGUgb24gdGhlIEhUTUxNZWRp
YUVsZW1lbnQuCiAgICAgaWYgKG1lZGlhRWxlbWVudCgpKQotICAgICAgICBtZWRpYUVsZW1lbnQo
KS0+dGV4dFRyYWNrcygpLT5zY2hlZHVsZUNoYW5nZUV2ZW50KCk7CisgICAgICAgIG1lZGlhRWxl
bWVudCgpLT50ZXh0VHJhY2tzKCkuc2NoZWR1bGVDaGFuZ2VFdmVudCgpOwogfQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCmluZGV4IDc4MThkMjI0N2FhZDE2YTU1
MzNjMzMzNjM0MGJkZDhmYWVlYmU4NWEuLjRlZGUyMjlkN2UxMmY0ZmE0ZGNkY2VjMzc4YmZmYTdl
ZTA3NWFmOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaApAQCAtMTczLDEy
ICsxNzMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNCZWVuQ29uZmlndXJlZCB7IGZhbHNl
IH07CiB9OwogCi1pbmxpbmUgVGV4dFRyYWNrKiB0b1RleHRUcmFjayhUcmFja0Jhc2UqIHRyYWNr
KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHRyYWNrLT50eXBlKCkg
PT0gVHJhY2tCYXNlOjpUZXh0VHJhY2spOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0VHJh
Y2sqPih0cmFjayk7Ci19Ci0KIGlubGluZSBhdXRvIFRleHRUcmFjazo6bW9kZSgpIGNvbnN0IC0+
IE1vZGUKIHsKICAgICByZXR1cm4gbV9tb2RlOwpAQCAtMjE1LDQgKzIwOSw4IEBAIGlubGluZSB2
b2lkIFRleHRUcmFjazo6c2V0S2luZEZvckJpbmRpbmdzKEtpbmQga2luZCkKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRl
eHRUcmFjaykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6VHJhY2tCYXNl
JiB0cmFjaykgeyByZXR1cm4gdHJhY2sudHlwZSgpID09IFdlYkNvcmU6OlRyYWNrQmFzZTo6VGV4
dFRyYWNrOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAKaW5kZXggZmRiYmM0OWUwZjU4
Njc0ZTQ5NzI4MThiNWE2NjNjN2I5MjIxZWE1Yy4uMGVjYzBlOGExZmIyNjVmMmQ3MjY5YzE0OWMz
MDgyNDZjYzhjZjY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xp
c3QuY3BwCkBAIC01MSw1NiArNTEsNTEgQEAgdW5zaWduZWQgVGV4dFRyYWNrTGlzdDo6bGVuZ3Ro
KCkgY29uc3QKICAgICByZXR1cm4gbV9hZGRUcmFja1RyYWNrcy5zaXplKCkgKyBtX2VsZW1lbnRU
cmFja3Muc2l6ZSgpICsgbV9pbmJhbmRUcmFja3Muc2l6ZSgpOwogfQogCi1pbnQgVGV4dFRyYWNr
TGlzdDo6Z2V0VHJhY2tJbmRleChUZXh0VHJhY2sqIHRleHRUcmFjaykKK2ludCBUZXh0VHJhY2tM
aXN0OjpnZXRUcmFja0luZGV4KFRleHRUcmFjayYgdGV4dFRyYWNrKQogewogICAgIGlmIChpczxM
b2FkYWJsZVRleHRUcmFjaz4odGV4dFRyYWNrKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PExv
YWRhYmxlVGV4dFRyYWNrPigqdGV4dFRyYWNrKS50cmFja0VsZW1lbnRJbmRleCgpOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8TG9hZGFibGVUZXh0VHJhY2s+KHRleHRUcmFjaykudHJhY2tFbGVt
ZW50SW5kZXgoKTsKIAotICAgIGlmICh0ZXh0VHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFj
azo6QWRkVHJhY2spCi0gICAgICAgIHJldHVybiBtX2VsZW1lbnRUcmFja3Muc2l6ZSgpICsgbV9h
ZGRUcmFja1RyYWNrcy5maW5kKHRleHRUcmFjayk7CisgICAgaWYgKHRleHRUcmFjay50cmFja1R5
cGUoKSA9PSBUZXh0VHJhY2s6OkFkZFRyYWNrKQorICAgICAgICByZXR1cm4gbV9lbGVtZW50VHJh
Y2tzLnNpemUoKSArIG1fYWRkVHJhY2tUcmFja3MuZmluZCgmdGV4dFRyYWNrKTsKIAotICAgIGlm
ICh0ZXh0VHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5kKQotICAgICAgICBy
ZXR1cm4gbV9lbGVtZW50VHJhY2tzLnNpemUoKSArIG1fYWRkVHJhY2tUcmFja3Muc2l6ZSgpICsg
bV9pbmJhbmRUcmFja3MuZmluZCh0ZXh0VHJhY2spOworICAgIGlmICh0ZXh0VHJhY2sudHJhY2tU
eXBlKCkgPT0gVGV4dFRyYWNrOjpJbkJhbmQpCisgICAgICAgIHJldHVybiBtX2VsZW1lbnRUcmFj
a3Muc2l6ZSgpICsgbV9hZGRUcmFja1RyYWNrcy5zaXplKCkgKyBtX2luYmFuZFRyYWNrcy5maW5k
KCZ0ZXh0VHJhY2spOwogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKICAgICByZXR1cm4g
LTE7CiB9CiAKLWludCBUZXh0VHJhY2tMaXN0OjpnZXRUcmFja0luZGV4UmVsYXRpdmVUb1JlbmRl
cmVkVHJhY2tzKFRleHRUcmFjayAqdGV4dFRyYWNrKQoraW50IFRleHRUcmFja0xpc3Q6OmdldFRy
YWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRUcmFja3MoVGV4dFRyYWNrJiB0ZXh0VHJhY2spCiB7
CiAgICAgLy8gQ2FsY3VsYXRlIHRoZSAiTGV0IG4gYmUgdGhlIG51bWJlciBvZiB0ZXh0IHRyYWNr
cyB3aG9zZSB0ZXh0IHRyYWNrIG1vZGUgaXMgc2hvd2luZyBhbmQgdGhhdCBhcmUgaW4gdGhlIG1l
ZGlhIGVsZW1lbnQncyBsaXN0IG9mIHRleHQgdHJhY2tzIGJlZm9yZSB0cmFjay4iCiAgICAgaW50
IHRyYWNrSW5kZXggPSAwOwogCiAgICAgZm9yIChhdXRvJiBlbGVtZW50VHJhY2sgOiBtX2VsZW1l
bnRUcmFja3MpIHsKLSAgICAgICAgaWYgKCF0b1RleHRUcmFjayhlbGVtZW50VHJhY2suZ2V0KCkp
LT5pc1JlbmRlcmVkKCkpCisgICAgICAgIGlmICghZG93bmNhc3Q8VGV4dFRyYWNrPigqZWxlbWVu
dFRyYWNrKS5pc1JlbmRlcmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBp
ZiAoZWxlbWVudFRyYWNrID09IHRleHRUcmFjaykKKyAgICAgICAgaWYgKGVsZW1lbnRUcmFjayA9
PSAmdGV4dFRyYWNrKQogICAgICAgICAgICAgcmV0dXJuIHRyYWNrSW5kZXg7CiAgICAgICAgICsr
dHJhY2tJbmRleDsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGFkZFRyYWNrIDogbV9hZGRUcmFj
a1RyYWNrcykgewotICAgICAgICBpZiAoIXRvVGV4dFRyYWNrKGFkZFRyYWNrLmdldCgpKS0+aXNS
ZW5kZXJlZCgpKQorICAgICAgICBpZiAoIWRvd25jYXN0PFRleHRUcmFjaz4oKmFkZFRyYWNrKS5p
c1JlbmRlcmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoYWRkVHJh
Y2sgPT0gdGV4dFRyYWNrKQorICAgICAgICBpZiAoYWRkVHJhY2sgPT0gJnRleHRUcmFjaykKICAg
ICAgICAgICAgIHJldHVybiB0cmFja0luZGV4OwogICAgICAgICArK3RyYWNrSW5kZXg7CiAgICAg
fQogCiAgICAgZm9yIChhdXRvJiBpbmJhbmRUcmFjayA6IG1faW5iYW5kVHJhY2tzKSB7Ci0gICAg
ICAgIGlmICghdG9UZXh0VHJhY2soaW5iYW5kVHJhY2suZ2V0KCkpLT5pc1JlbmRlcmVkKCkpCisg
ICAgICAgIGlmICghZG93bmNhc3Q8VGV4dFRyYWNrPigqaW5iYW5kVHJhY2spLmlzUmVuZGVyZWQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChpbmJhbmRUcmFjayA9PSB0
ZXh0VHJhY2spCisgICAgICAgIGlmIChpbmJhbmRUcmFjayA9PSAmdGV4dFRyYWNrKQogICAgICAg
ICAgICAgcmV0dXJuIHRyYWNrSW5kZXg7CiAgICAgICAgICsrdHJhY2tJbmRleDsKICAgICB9Ci0K
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQogICAgIHJldHVybiAtMTsKIH0KIApAQCAtMTE0
LDE3ICsxMDksMTcgQEAgVGV4dFRyYWNrKiBUZXh0VHJhY2tMaXN0OjppdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAogICAgIC8vIHJlc291cmNlKSwgaW4gdGhlIG9yZGVyIGRlZmluZWQgYnkgdGhl
IG1lZGlhIHJlc291cmNlJ3MgZm9ybWF0IHNwZWNpZmljYXRpb24uCiAKICAgICBpZiAoaW5kZXgg
PCBtX2VsZW1lbnRUcmFja3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gdG9UZXh0VHJhY2sobV9l
bGVtZW50VHJhY2tzW2luZGV4XS5nZXQoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxUZXh0
VHJhY2s+KG1fZWxlbWVudFRyYWNrc1tpbmRleF0uZ2V0KCkpOwogCiAgICAgaW5kZXggLT0gbV9l
bGVtZW50VHJhY2tzLnNpemUoKTsKICAgICBpZiAoaW5kZXggPCBtX2FkZFRyYWNrVHJhY2tzLnNp
emUoKSkKLSAgICAgICAgcmV0dXJuIHRvVGV4dFRyYWNrKG1fYWRkVHJhY2tUcmFja3NbaW5kZXhd
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFRleHRUcmFjaz4obV9hZGRUcmFja1Ry
YWNrc1tpbmRleF0uZ2V0KCkpOwogCiAgICAgaW5kZXggLT0gbV9hZGRUcmFja1RyYWNrcy5zaXpl
KCk7CiAgICAgaWYgKGluZGV4IDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgpKQotICAgICAgICByZXR1
cm4gdG9UZXh0VHJhY2sobV9pbmJhbmRUcmFja3NbaW5kZXhdLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFRleHRUcmFjaz4obV9pbmJhbmRUcmFja3NbaW5kZXhdLmdldCgpKTsKIAot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBUZXh0VHJhY2sqIFRleHRU
cmFja0xpc3Q6OmdldFRyYWNrQnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKQpAQCAtMTM0LDEx
MCArMTI5LDEyMiBAQCBUZXh0VHJhY2sqIFRleHRUcmFja0xpc3Q6OmdldFRyYWNrQnlJZChjb25z
dCBBdG9taWNTdHJpbmcmIGlkKQogICAgIC8vIFRleHRUcmFja0xpc3Qgb2JqZWN0IHdob3NlIGlk
IElETCBhdHRyaWJ1dGUgd291bGQgcmV0dXJuIGEgdmFsdWUgZXF1YWwKICAgICAvLyB0byB0aGUg
dmFsdWUgb2YgdGhlIGlkIGFyZ3VtZW50LgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFRleHRUcmFjayogdHJhY2sgPSBpdGVtKGkpOwotICAg
ICAgICBpZiAodHJhY2stPmlkKCkgPT0gaWQpCi0gICAgICAgICAgICByZXR1cm4gdHJhY2s7Cisg
ICAgICAgIGF1dG8mIHRyYWNrID0gKml0ZW0oaSk7CisgICAgICAgIGlmICh0cmFjay5pZCgpID09
IGlkKQorICAgICAgICAgICAgcmV0dXJuICZ0cmFjazsKICAgICB9CiAKICAgICAvLyBXaGVuIG5v
IHRyYWNrcyBtYXRjaCB0aGUgZ2l2ZW4gYXJndW1lbnQsIHRoZSBtZXRob2QgbXVzdCByZXR1cm4g
bnVsbC4KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBUZXh0VHJhY2tMaXN0OjppbnZh
bGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayhUZXh0VHJhY2sqIHRyYWNrKQordm9pZCBUZXh0
VHJhY2tMaXN0OjppbnZhbGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayhUZXh0VHJhY2smIHRy
YWNrKQogewotICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNlPj4qIHRyYWNrcyA9IDA7CisgICAg
VmVjdG9yPFJlZlB0cjxUcmFja0Jhc2U+PiogdHJhY2tzID0gbnVsbHB0cjsKIAotICAgIGlmICh0
cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQpIHsKKyAgICBzd2l0
Y2ggKHRyYWNrLnRyYWNrVHlwZSgpKSB7CisgICAgY2FzZSBUZXh0VHJhY2s6OlRyYWNrRWxlbWVu
dDoKICAgICAgICAgdHJhY2tzID0gJm1fZWxlbWVudFRyYWNrczsKICAgICAgICAgZm9yIChhdXRv
JiBhZGRUcmFjayA6IG1fYWRkVHJhY2tUcmFja3MpCi0gICAgICAgICAgICB0b1RleHRUcmFjayhh
ZGRUcmFjay5nZXQoKSktPmludmFsaWRhdGVUcmFja0luZGV4KCk7CisgICAgICAgICAgICBkb3du
Y2FzdDxUZXh0VHJhY2s+KGFkZFRyYWNrLmdldCgpKS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsK
ICAgICAgICAgZm9yIChhdXRvJiBpbmJhbmRUcmFjayA6IG1faW5iYW5kVHJhY2tzKQotICAgICAg
ICAgICAgdG9UZXh0VHJhY2soaW5iYW5kVHJhY2suZ2V0KCkpLT5pbnZhbGlkYXRlVHJhY2tJbmRl
eCgpOwotICAgIH0gZWxzZSBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6QWRk
VHJhY2spIHsKKyAgICAgICAgICAgIGRvd25jYXN0PFRleHRUcmFjaz4oaW5iYW5kVHJhY2suZ2V0
KCkpLT5pbnZhbGlkYXRlVHJhY2tJbmRleCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRl
eHRUcmFjazo6QWRkVHJhY2s6CiAgICAgICAgIHRyYWNrcyA9ICZtX2FkZFRyYWNrVHJhY2tzOwog
ICAgICAgICBmb3IgKGF1dG8mIGluYmFuZFRyYWNrIDogbV9pbmJhbmRUcmFja3MpCi0gICAgICAg
ICAgICB0b1RleHRUcmFjayhpbmJhbmRUcmFjay5nZXQoKSktPmludmFsaWRhdGVUcmFja0luZGV4
KCk7Ci0gICAgfSBlbHNlIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpJbkJh
bmQpCisgICAgICAgICAgICBkb3duY2FzdDxUZXh0VHJhY2s+KGluYmFuZFRyYWNrLmdldCgpKS0+
aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0VHJh
Y2s6OkluQmFuZDoKICAgICAgICAgdHJhY2tzID0gJm1faW5iYW5kVHJhY2tzOwotICAgIGVsc2UK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQogCi0gICAgc2l6ZV90IGluZGV4ID0gdHJhY2tzLT5maW5kKHRyYWNrKTsKKyAg
ICBzaXplX3QgaW5kZXggPSB0cmFja3MtPmZpbmQoJnRyYWNrKTsKICAgICBpZiAoaW5kZXggPT0g
bm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsg
aSA8IHRyYWNrcy0+c2l6ZSgpOyArK2kpCi0gICAgICAgIHRvVGV4dFRyYWNrKHRyYWNrcy0+YXQo
aW5kZXgpLmdldCgpKS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsKKyAgICAgICAgZG93bmNhc3Q8
VGV4dFRyYWNrPigqdHJhY2tzLT5hdChpbmRleCkpLmludmFsaWRhdGVUcmFja0luZGV4KCk7CiB9
CiAKLXZvaWQgVGV4dFRyYWNrTGlzdDo6YXBwZW5kKFBhc3NSZWZQdHI8VGV4dFRyYWNrPiBwcnBU
cmFjaykKK3ZvaWQgVGV4dFRyYWNrTGlzdDo6YXBwZW5kKFJlZjxUZXh0VHJhY2s+JiYgdHJhY2sp
CiB7Ci0gICAgUmVmUHRyPFRleHRUcmFjaz4gdHJhY2sgPSBwcnBUcmFjazsKLQogICAgIGlmICh0
cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpBZGRUcmFjaykKLSAgICAgICAgbV9hZGRU
cmFja1RyYWNrcy5hcHBlbmQodHJhY2spOwotICAgIGVsc2UgaWYgKGlzPExvYWRhYmxlVGV4dFRy
YWNrPigqdHJhY2spKSB7CisgICAgICAgIG1fYWRkVHJhY2tUcmFja3MuYXBwZW5kKHRyYWNrLnB0
cigpKTsKKyAgICBlbHNlIGlmIChpczxMb2FkYWJsZVRleHRUcmFjaz4odHJhY2suZ2V0KCkpKSB7
CiAgICAgICAgIC8vIEluc2VydCB0cmFja3MgYWRkZWQgZm9yIDx0cmFjaz4gZWxlbWVudCBpbiB0
cmVlIG9yZGVyLgotICAgICAgICBzaXplX3QgaW5kZXggPSBkb3duY2FzdDxMb2FkYWJsZVRleHRU
cmFjaz4oKnRyYWNrKS50cmFja0VsZW1lbnRJbmRleCgpOwotICAgICAgICBtX2VsZW1lbnRUcmFj
a3MuaW5zZXJ0KGluZGV4LCB0cmFjayk7CisgICAgICAgIHNpemVfdCBpbmRleCA9IGRvd25jYXN0
PExvYWRhYmxlVGV4dFRyYWNrPih0cmFjay5nZXQoKSkudHJhY2tFbGVtZW50SW5kZXgoKTsKKyAg
ICAgICAgbV9lbGVtZW50VHJhY2tzLmluc2VydChpbmRleCwgdHJhY2sucHRyKCkpOwogICAgIH0g
ZWxzZSBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5kKSB7CiAgICAg
ICAgIC8vIEluc2VydCB0cmFja3MgYWRkZWQgZm9yIGluLWJhbmQgaW4gdGhlIG1lZGlhIGZpbGUg
b3JkZXIuCi0gICAgICAgIHNpemVfdCBpbmRleCA9IHN0YXRpY19jYXN0PEluYmFuZFRleHRUcmFj
ayo+KHRyYWNrLmdldCgpKS0+aW5iYW5kVHJhY2tJbmRleCgpOwotICAgICAgICBtX2luYmFuZFRy
YWNrcy5pbnNlcnQoaW5kZXgsIHRyYWNrKTsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gZG93bmNh
c3Q8SW5iYW5kVGV4dFRyYWNrPih0cmFjay5nZXQoKSkuaW5iYW5kVHJhY2tJbmRleCgpOworICAg
ICAgICBtX2luYmFuZFRyYWNrcy5pbnNlcnQoaW5kZXgsIHRyYWNrLnB0cigpKTsKICAgICB9IGVs
c2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKLSAgICBpbnZhbGlkYXRlVHJhY2tJ
bmRleGVzQWZ0ZXJUcmFjayh0cmFjay5nZXQoKSk7CisgICAgaW52YWxpZGF0ZVRyYWNrSW5kZXhl
c0FmdGVyVHJhY2sodHJhY2spOwogCiAgICAgQVNTRVJUKCF0cmFjay0+bWVkaWFFbGVtZW50KCkg
fHwgdHJhY2stPm1lZGlhRWxlbWVudCgpID09IG1lZGlhRWxlbWVudCgpKTsKICAgICB0cmFjay0+
c2V0TWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCgpKTsKIAotICAgIHNjaGVkdWxlQWRkVHJhY2tF
dmVudCh0cmFjay5yZWxlYXNlKCkpOworICAgIHNjaGVkdWxlQWRkVHJhY2tFdmVudChXVEZNb3Zl
KHRyYWNrKSk7CiB9CiAKLXZvaWQgVGV4dFRyYWNrTGlzdDo6cmVtb3ZlKFRyYWNrQmFzZSogdHJh
Y2ssIGJvb2wgc2NoZWR1bGVFdmVudCkKK3ZvaWQgVGV4dFRyYWNrTGlzdDo6cmVtb3ZlKFRyYWNr
QmFzZSYgdHJhY2ssIGJvb2wgc2NoZWR1bGVFdmVudCkKIHsKLSAgICBUZXh0VHJhY2sqIHRleHRU
cmFjayA9IHRvVGV4dFRyYWNrKHRyYWNrKTsKLSAgICBWZWN0b3I8UmVmUHRyPFRyYWNrQmFzZT4+
KiB0cmFja3MgPSAwOwotICAgIGlmICh0ZXh0VHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFj
azo6VHJhY2tFbGVtZW50KQorICAgIGF1dG8mIHRleHRUcmFjayA9IGRvd25jYXN0PFRleHRUcmFj
az4odHJhY2spOworICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNlPj4qIHRyYWNrcyA9IG51bGxw
dHI7CisgICAgc3dpdGNoICh0ZXh0VHJhY2sudHJhY2tUeXBlKCkpIHsKKyAgICBjYXNlIFRleHRU
cmFjazo6VHJhY2tFbGVtZW50OgogICAgICAgICB0cmFja3MgPSAmbV9lbGVtZW50VHJhY2tzOwot
ICAgIGVsc2UgaWYgKHRleHRUcmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpBZGRUcmFj
aykKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0VHJhY2s6OkFkZFRyYWNrOgogICAgICAg
ICB0cmFja3MgPSAmbV9hZGRUcmFja1RyYWNrczsKLSAgICBlbHNlIGlmICh0ZXh0VHJhY2stPnRy
YWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5kKQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IFRleHRUcmFjazo6SW5CYW5kOgogICAgICAgICB0cmFja3MgPSAmbV9pbmJhbmRUcmFja3M7Ci0g
ICAgZWxzZQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CiAKLSAgICBzaXplX3QgaW5kZXggPSB0cmFja3MtPmZpbmQodHJh
Y2spOworICAgIHNpemVfdCBpbmRleCA9IHRyYWNrcy0+ZmluZCgmdHJhY2spOwogICAgIGlmIChp
bmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW52YWxpZGF0ZVRyYWNr
SW5kZXhlc0FmdGVyVHJhY2sodGV4dFRyYWNrKTsKIAotICAgIEFTU0VSVCghdHJhY2stPm1lZGlh
RWxlbWVudCgpIHx8IHRyYWNrLT5tZWRpYUVsZW1lbnQoKSA9PSBlbGVtZW50KCkpOwotICAgIHRy
YWNrLT5zZXRNZWRpYUVsZW1lbnQoMCk7CisgICAgQVNTRVJUKCF0cmFjay5tZWRpYUVsZW1lbnQo
KSB8fCB0cmFjay5tZWRpYUVsZW1lbnQoKSA9PSBlbGVtZW50KCkpOworICAgIHRyYWNrLnNldE1l
ZGlhRWxlbWVudChudWxscHRyKTsKIAotICAgIFJlZlB0cjxUcmFja0Jhc2U+IHRyYWNrUmVmID0g
KCp0cmFja3MpW2luZGV4XTsKKyAgICBSZWY8VHJhY2tCYXNlPiB0cmFja1JlZiA9ICooKnRyYWNr
cylbaW5kZXhdOwogICAgIHRyYWNrcy0+cmVtb3ZlKGluZGV4KTsKIAogICAgIGlmIChzY2hlZHVs
ZUV2ZW50KQotICAgICAgICBzY2hlZHVsZVJlbW92ZVRyYWNrRXZlbnQodHJhY2tSZWYucmVsZWFz
ZSgpKTsKKyAgICAgICAgc2NoZWR1bGVSZW1vdmVUcmFja0V2ZW50KFdURk1vdmUodHJhY2tSZWYp
KTsKIH0KIAotYm9vbCBUZXh0VHJhY2tMaXN0Ojpjb250YWlucyhUcmFja0Jhc2UqIHRyYWNrKSBj
b25zdAorYm9vbCBUZXh0VHJhY2tMaXN0Ojpjb250YWlucyhUcmFja0Jhc2UmIHRyYWNrKSBjb25z
dAogewotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNlPj4qIHRyYWNrcyA9IDA7Ci0g
ICAgVGV4dFRyYWNrOjpUZXh0VHJhY2tUeXBlIHR5cGUgPSB0b1RleHRUcmFjayh0cmFjayktPnRy
YWNrVHlwZSgpOwotICAgIGlmICh0eXBlID09IFRleHRUcmFjazo6VHJhY2tFbGVtZW50KQorICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNlPj4qIHRyYWNrcyA9IG51bGxwdHI7CisgICAg
c3dpdGNoIChkb3duY2FzdDxUZXh0VHJhY2s+KHRyYWNrKS50cmFja1R5cGUoKSkgeworICAgIGNh
c2UgVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQ6CiAgICAgICAgIHRyYWNrcyA9ICZtX2VsZW1lbnRU
cmFja3M7Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBUZXh0VHJhY2s6OkFkZFRyYWNrKQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFRleHRUcmFjazo6QWRkVHJhY2s6CiAgICAgICAgIHRyYWNrcyA9
ICZtX2FkZFRyYWNrVHJhY2tzOwotICAgIGVsc2UgaWYgKHR5cGUgPT0gVGV4dFRyYWNrOjpJbkJh
bmQpCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dFRyYWNrOjpJbkJhbmQ6CiAgICAgICAg
IHRyYWNrcyA9ICZtX2luYmFuZFRyYWNrczsKLSAgICBlbHNlCisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KICAgICAKLSAg
ICByZXR1cm4gdHJhY2tzLT5maW5kKHRyYWNrKSAhPSBub3RGb3VuZDsKKyAgICByZXR1cm4gdHJh
Y2tzLT5maW5kKCZ0cmFjaykgIT0gbm90Rm91bmQ7CiB9CiAKIEV2ZW50VGFyZ2V0SW50ZXJmYWNl
IFRleHRUcmFja0xpc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmgKaW5kZXggMDQxZTIxODhkNjRmZmViY2EzOTVj
ZGVjZjY4OWU1NzhhMjg3NDczMC4uOTI5Nzg1NTA5NzRmYzI2YjczMzc0ZWNiODNmNmU1NGFlZGRh
ZTVjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmgKQEAgLTQz
LDE2ICs0MywxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGV4dFRyYWNrTGlzdCgpOwogCiAg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgaW50IGdldFRyYWNrSW5k
ZXgoVGV4dFRyYWNrKik7Ci0gICAgaW50IGdldFRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRU
cmFja3MoVGV4dFRyYWNrKik7Ci0gICAgYm9vbCBjb250YWlucyhUcmFja0Jhc2UqKSBjb25zdCBv
dmVycmlkZTsKKyAgICBpbnQgZ2V0VHJhY2tJbmRleChUZXh0VHJhY2smKTsKKyAgICBpbnQgZ2V0
VHJhY2tJbmRleFJlbGF0aXZlVG9SZW5kZXJlZFRyYWNrcyhUZXh0VHJhY2smKTsKKyAgICBib29s
IGNvbnRhaW5zKFRyYWNrQmFzZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVGV4dFRyYWNrKiBp
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAgICBUZXh0VHJhY2sqIGdldFRyYWNrQnlJZChj
b25zdCBBdG9taWNTdHJpbmcmKTsKICAgICBUZXh0VHJhY2sqIGxhc3RJdGVtKCkgY29uc3QgeyBy
ZXR1cm4gaXRlbShsZW5ndGgoKSAtIDEpOyB9CiAKLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRy
PFRleHRUcmFjaz4pOwotICAgIHZvaWQgcmVtb3ZlKFRyYWNrQmFzZSosIGJvb2wgc2NoZWR1bGVF
dmVudCA9IHRydWUpIG92ZXJyaWRlOworICAgIHZvaWQgYXBwZW5kKFJlZjxUZXh0VHJhY2s+JiYp
OworICAgIHZvaWQgcmVtb3ZlKFRyYWNrQmFzZSYsIGJvb2wgc2NoZWR1bGVFdmVudCA9IHRydWUp
IG92ZXJyaWRlOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICBFdmVudFRhcmdldEludGVyZmFj
ZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjAsNyArNjAsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRleHRUcmFja0xpc3QoSFRNTE1lZGlhRWxlbWVudCos
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZVRyYWNrSW5k
ZXhlc0FmdGVyVHJhY2soVGV4dFRyYWNrKik7CisgICAgdm9pZCBpbnZhbGlkYXRlVHJhY2tJbmRl
eGVzQWZ0ZXJUcmFjayhUZXh0VHJhY2smKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNl
Pj4gbV9hZGRUcmFja1RyYWNrczsKICAgICBWZWN0b3I8UmVmUHRyPFRyYWNrQmFzZT4+IG1fZWxl
bWVudFRyYWNrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tC
YXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrQmFzZS5oCmluZGV4IGY3NTY3
OGY1NjczOTAwZDY5YTM2ZWM3MzhhODE1MTczZDdjN2QyMzUuLmQ2YzVlNDg1NmE1NWFhODhmNGM2
OWYwNzNkMDdkMDZkNGIwYjVjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVHJhY2tCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2Uu
aApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Ry
YWNrRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmNwcApp
bmRleCA4MTU2MjVmY2UzZGMwOTllN2IwZjY4ZTg2YWNhODgzMzkyMGYyMDI1Li40MzRlZDRjNzhm
ZDg1OTVhZjliY2NiNjk2NDNkYjEzNTVjZDU4NzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVHJhY2tFdmVudC5jcHAKQEAgLTMzLDkgKzMzLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1UcmFja0V2ZW50OjpUcmFja0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9v
bCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUmVmUHRyPFRyYWNrQmFzZT4mJiB0cmFjaykK
K1RyYWNrRXZlbnQ6OlRyYWNrRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNh
bkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBSZWY8VHJhY2tCYXNlPiYmIHRyYWNrKQogICAgIDog
RXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlKQotICAgICwgbV90cmFjayh0cmFjaykK
KyAgICAsIG1fdHJhY2soV1RGTW92ZSh0cmFjaykpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UcmFja0V2ZW50LmgKaW5kZXggNDY2ZDlmODgyOTg2NzllOGJhMTc3ZWNmZjc4ZWZkZTE4
MzhmY2ZkYS4uOGFlZmZjZDY0ZjE4ZDA5ZmQ2NmYwOGU4NGZkMTQzODI5NTYzYzVjZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3Mg
VHJhY2tFdmVudCBmaW5hbCA6IHB1YmxpYyBFdmVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
VHJhY2tFdmVudCgpOwogCi0gICAgc3RhdGljIFJlZjxUcmFja0V2ZW50PiBjcmVhdGUoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBSZWZQ
dHI8VHJhY2tCYXNlPiYmIHRyYWNrKQorICAgIHN0YXRpYyBSZWY8VHJhY2tFdmVudD4gY3JlYXRl
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJs
ZSwgUmVmPFRyYWNrQmFzZT4mJiB0cmFjaykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFRyYWNrRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCBXVEZNb3ZlKHRy
YWNrKSkpOwogICAgIH0KQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIFRyYWNrQmFzZSog
dHJhY2soKSBjb25zdCB7IHJldHVybiBtX3RyYWNrLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAg
VHJhY2tFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29s
IGNhbmNlbGFibGUsIFJlZlB0cjxUcmFja0Jhc2U+JiYpOworICAgIFRyYWNrRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBSZWY8
VHJhY2tCYXNlPiYmKTsKICAgICBUcmFja0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwg
Y29uc3QgVHJhY2tFdmVudEluaXQmIGluaXRpYWxpemVyKTsKIAogICAgIFJlZlB0cjxUcmFja0Jh
c2U+IG1fdHJhY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNr
TGlzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmNw
cAppbmRleCBmMjM0NjcxZDZkMTllNjg1NGJkYTIwOTJkNjgxYmRmNWQ0MWQxYmI3Li5kYmVkM2Fh
ZWM3NzI3YTBlMzg1OWE4NTUyZTFjMGEzN2JlNDY1MDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAKQEAgLTU4LDMzICs1OCwzMyBAQCB1bnNpZ25lZCBU
cmFja0xpc3RCYXNlOjpsZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBtX2luYmFuZFRyYWNrcy5z
aXplKCk7CiB9CiAKLXZvaWQgVHJhY2tMaXN0QmFzZTo6cmVtb3ZlKFRyYWNrQmFzZSogdHJhY2ss
IGJvb2wgc2NoZWR1bGVFdmVudCkKK3ZvaWQgVHJhY2tMaXN0QmFzZTo6cmVtb3ZlKFRyYWNrQmFz
ZSYgdHJhY2ssIGJvb2wgc2NoZWR1bGVFdmVudCkKIHsKLSAgICBzaXplX3QgaW5kZXggPSBtX2lu
YmFuZFRyYWNrcy5maW5kKHRyYWNrKTsKKyAgICBzaXplX3QgaW5kZXggPSBtX2luYmFuZFRyYWNr
cy5maW5kKCZ0cmFjayk7CiAgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKIAotICAgIEFT
U0VSVCh0cmFjay0+bWVkaWFFbGVtZW50KCkgPT0gbV9lbGVtZW50KTsKLSAgICB0cmFjay0+c2V0
TWVkaWFFbGVtZW50KDApOworICAgIEFTU0VSVCh0cmFjay5tZWRpYUVsZW1lbnQoKSA9PSBtX2Vs
ZW1lbnQpOworICAgIHRyYWNrLnNldE1lZGlhRWxlbWVudChudWxscHRyKTsKIAotICAgIFJlZlB0
cjxUcmFja0Jhc2U+IHRyYWNrUmVmID0gbV9pbmJhbmRUcmFja3NbaW5kZXhdOworICAgIFJlZjxU
cmFja0Jhc2U+IHRyYWNrUmVmID0gKm1faW5iYW5kVHJhY2tzW2luZGV4XTsKIAogICAgIG1faW5i
YW5kVHJhY2tzLnJlbW92ZShpbmRleCk7CiAKICAgICBpZiAoc2NoZWR1bGVFdmVudCkKLSAgICAg
ICAgc2NoZWR1bGVSZW1vdmVUcmFja0V2ZW50KHRyYWNrUmVmLnJlbGVhc2UoKSk7CisgICAgICAg
IHNjaGVkdWxlUmVtb3ZlVHJhY2tFdmVudChXVEZNb3ZlKHRyYWNrUmVmKSk7CiB9CiAKLWJvb2wg
VHJhY2tMaXN0QmFzZTo6Y29udGFpbnMoVHJhY2tCYXNlKiB0cmFjaykgY29uc3QKK2Jvb2wgVHJh
Y2tMaXN0QmFzZTo6Y29udGFpbnMoVHJhY2tCYXNlJiB0cmFjaykgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9pbmJhbmRUcmFja3MuZmluZCh0cmFjaykgIT0gbm90Rm91bmQ7CisgICAgcmV0dXJuIG1f
aW5iYW5kVHJhY2tzLmZpbmQoJnRyYWNrKSAhPSBub3RGb3VuZDsKIH0KIAotdm9pZCBUcmFja0xp
c3RCYXNlOjpzY2hlZHVsZVRyYWNrRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUs
IFBhc3NSZWZQdHI8VHJhY2tCYXNlPiB0cmFjaykKK3ZvaWQgVHJhY2tMaXN0QmFzZTo6c2NoZWR1
bGVUcmFja0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBSZWY8VHJhY2tCYXNl
PiYmIHRyYWNrKQogewotICAgIG1fYXN5bmNFdmVudFF1ZXVlLmVucXVldWVFdmVudChUcmFja0V2
ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgZmFsc2UsIHRyYWNrKSk7CisgICAgbV9hc3lu
Y0V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KFRyYWNrRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZh
bHNlLCBmYWxzZSwgV1RGTW92ZSh0cmFjaykpKTsKIH0KIAotdm9pZCBUcmFja0xpc3RCYXNlOjpz
Y2hlZHVsZUFkZFRyYWNrRXZlbnQoUGFzc1JlZlB0cjxUcmFja0Jhc2U+IHRyYWNrKQordm9pZCBU
cmFja0xpc3RCYXNlOjpzY2hlZHVsZUFkZFRyYWNrRXZlbnQoUmVmPFRyYWNrQmFzZT4mJiB0cmFj
aykKIHsKICAgICAvLyA0LjguMTAuNSBMb2FkaW5nIHRoZSBtZWRpYSByZXNvdXJjZQogICAgIC8v
IC4uLgpAQCAtMTA0LDEwICsxMDQsMTAgQEAgdm9pZCBUcmFja0xpc3RCYXNlOjpzY2hlZHVsZUFk
ZFRyYWNrRXZlbnQoUGFzc1JlZlB0cjxUcmFja0Jhc2U+IHRyYWNrKQogICAgIC8vIGJ1YmJsZSBh
bmQgaXMgbm90IGNhbmNlbGFibGUsIGFuZCB0aGF0IHVzZXMgdGhlIFRyYWNrRXZlbnQgaW50ZXJm
YWNlLCB3aXRoCiAgICAgLy8gdGhlIHRyYWNrIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUg
dGV4dCB0cmFjaydzIFRleHRUcmFjayBvYmplY3QsIGF0CiAgICAgLy8gdGhlIG1lZGlhIGVsZW1l
bnQncyB0ZXh0VHJhY2tzIGF0dHJpYnV0ZSdzIFRleHRUcmFja0xpc3Qgb2JqZWN0LgotICAgIHNj
aGVkdWxlVHJhY2tFdmVudChldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudCwgdHJhY2spOworICAg
IHNjaGVkdWxlVHJhY2tFdmVudChldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudCwgV1RGTW92ZSh0
cmFjaykpOwogfQogCi12b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlUmVtb3ZlVHJhY2tFdmVu
dChQYXNzUmVmUHRyPFRyYWNrQmFzZT4gdHJhY2spCit2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVk
dWxlUmVtb3ZlVHJhY2tFdmVudChSZWY8VHJhY2tCYXNlPiYmIHRyYWNrKQogewogICAgIC8vIDQu
OC4xMC42IE9mZnNldHMgaW50byB0aGUgbWVkaWEgcmVzb3VyY2UKICAgICAvLyBJZiBhdCBhbnkg
dGltZSB0aGUgdXNlciBhZ2VudCBsZWFybnMgdGhhdCBhbiBhdWRpbyBvciB2aWRlbyB0cmFjayBo
YXMKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlUmVtb3Zl
VHJhY2tFdmVudChQYXNzUmVmUHRyPFRyYWNrQmFzZT4gdHJhY2spCiAgICAgLy8gaW50ZXJmYWNl
LCB3aXRoIHRoZSB0cmFjayBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHRleHQgdHJhY2sn
cwogICAgIC8vIFRleHRUcmFjayBvYmplY3QsIGF0IHRoZSBtZWRpYSBlbGVtZW50J3MgdGV4dFRy
YWNrcyBhdHRyaWJ1dGUncwogICAgIC8vIFRleHRUcmFja0xpc3Qgb2JqZWN0LgotICAgIHNjaGVk
dWxlVHJhY2tFdmVudChldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCwgdHJhY2spOworICAg
IHNjaGVkdWxlVHJhY2tFdmVudChldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCwgV1RGTW92
ZSh0cmFjaykpOwogfQogCiB2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlQ2hhbmdlRXZlbnQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaAppbmRleCBiZDY0MTBk
NGEyNzc5NWVjYjdhMTc1ZTgxNGYzYjg0NGZiZTYyOWZiLi5lMmUxOGQwMWViZWMwNDdkNmM0YzAw
ZWFlNzU3YmRlZTZjYWYxNDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RyYWNrTGlzdEJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlz
dEJhc2UuaApAQCAtNDcsOCArNDcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+VHJhY2tMaXN0
QmFzZSgpOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgY29udGFpbnMoVHJhY2tCYXNlKikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHJl
bW92ZShUcmFja0Jhc2UqLCBib29sIHNjaGVkdWxlRXZlbnQgPSB0cnVlKTsKKyAgICB2aXJ0dWFs
IGJvb2wgY29udGFpbnMoVHJhY2tCYXNlJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZShUcmFja0Jhc2UmLCBib29sIHNjaGVkdWxlRXZlbnQgPSB0cnVlKTsKIAogICAgIC8vIEV2ZW50
VGFyZ2V0CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdCBvdmVycmlkZSA9IDA7CkBAIC02OCwxMyArNjgsMTMgQEAgcHVibGljOgogcHJvdGVjdGVk
OgogICAgIFRyYWNrTGlzdEJhc2UoSFRNTE1lZGlhRWxlbWVudCosIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKTsKIAotICAgIHZvaWQgc2NoZWR1bGVBZGRUcmFja0V2ZW50KFBhc3NSZWZQdHI8VHJh
Y2tCYXNlPik7Ci0gICAgdm9pZCBzY2hlZHVsZVJlbW92ZVRyYWNrRXZlbnQoUGFzc1JlZlB0cjxU
cmFja0Jhc2U+KTsKKyAgICB2b2lkIHNjaGVkdWxlQWRkVHJhY2tFdmVudChSZWY8VHJhY2tCYXNl
PiYmKTsKKyAgICB2b2lkIHNjaGVkdWxlUmVtb3ZlVHJhY2tFdmVudChSZWY8VHJhY2tCYXNlPiYm
KTsKIAogICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNlPj4gbV9pbmJhbmRUcmFja3M7CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBzY2hlZHVsZVRyYWNrRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudE5hbWUsIFBhc3NSZWZQdHI8VHJhY2tCYXNlPik7CisgICAgdm9pZCBzY2hlZHVsZVRyYWNr
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIFJlZjxUcmFja0Jhc2U+JiYpOwog
CiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyBy
ZWYoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5jcHAKaW5kZXggYmUy
OTY4ODhkNzEwMDIyMDEwMTA1N2FlNTcyNzE1OWY3Y2U4NmMwZC4uZjgwYmMxMGE4Y2M4ZGUyODJk
OWZhZjMxOTQ2ZDYxY2RlMGNiYzQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9WaWRlb1RyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVv
VHJhY2suY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBWaWRlb1RyYWNrOjpsYW5ndWFnZUNo
YW5nZWQoVHJhY2tQcml2YXRlQmFzZSogdHJhY2tQcml2YXRlLCBjb25zdCBBdG9taWNTdHIKIHZv
aWQgVmlkZW9UcmFjazo6d2lsbFJlbW92ZShUcmFja1ByaXZhdGVCYXNlKiB0cmFja1ByaXZhdGUp
CiB7CiAgICAgQVNTRVJUX1VOVVNFRCh0cmFja1ByaXZhdGUsIHRyYWNrUHJpdmF0ZSA9PSBtX3By
aXZhdGUpOwotICAgIG1lZGlhRWxlbWVudCgpLT5yZW1vdmVWaWRlb1RyYWNrKHRoaXMpOworICAg
IG1lZGlhRWxlbWVudCgpLT5yZW1vdmVWaWRlb1RyYWNrKCp0aGlzKTsKIH0KIAogI2lmIEVOQUJM
RShNRURJQV9TT1VSQ0UpCkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBWaWRlb1RyYWNrOjpzZXRL
aW5kKGNvbnN0IEF0b21pY1N0cmluZyYga2luZCkKIAogICAgIC8vIDQuIFF1ZXVlIGEgdGFzayB0
byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGNoYW5nZSBhdCB0aGUgVmlkZW9UcmFja0xpc3Qg
b2JqZWN0IHJlZmVyZW5jZWQgYnkKICAgICAvLyB0aGUgdmlkZW9UcmFja3MgYXR0cmlidXRlIG9u
IHRoZSBIVE1MTWVkaWFFbGVtZW50LgotICAgIG1lZGlhRWxlbWVudCgpLT52aWRlb1RyYWNrcygp
LT5zY2hlZHVsZUNoYW5nZUV2ZW50KCk7CisgICAgbWVkaWFFbGVtZW50KCktPnZpZGVvVHJhY2tz
KCkuc2NoZWR1bGVDaGFuZ2VFdmVudCgpOwogfQogCiB2b2lkIFZpZGVvVHJhY2s6OnNldExhbmd1
YWdlKGNvbnN0IEF0b21pY1N0cmluZyYgbGFuZ3VhZ2UpCkBAIC0yMTcsOCArMjE3LDcgQEAgdm9p
ZCBWaWRlb1RyYWNrOjpzZXRMYW5ndWFnZShjb25zdCBBdG9taWNTdHJpbmcmIGxhbmd1YWdlKQog
CiAgICAgLy8gNC4gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgY2hh
bmdlIGF0IHRoZSBWaWRlb1RyYWNrTGlzdCBvYmplY3QgcmVmZXJlbmNlZCBieQogICAgIC8vIHRo
ZSB2aWRlb1RyYWNrcyBhdHRyaWJ1dGUgb24gdGhlIEhUTUxNZWRpYUVsZW1lbnQuCi0gICAgaWYg
KG1lZGlhRWxlbWVudCgpLT52aWRlb1RyYWNrcygpKQotICAgICAgICBtZWRpYUVsZW1lbnQoKS0+
dmlkZW9UcmFja3MoKS0+c2NoZWR1bGVDaGFuZ2VFdmVudCgpOworICAgIG1lZGlhRWxlbWVudCgp
LT52aWRlb1RyYWNrcygpLnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKIH0KICNlbmRpZgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5oCmluZGV4IDVjNzFmNWY0ODk1NmI3ODJkMGJk
ZTBlN2JlMWI3Mjg2MjljYjk4MjEuLmUxNDNjMDlmOWNiMzBiMzFkNTgxMWVlMGEyZDZhZTk1YmY0
YjY5M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5oCkBAIC0xMDIsMTIg
KzEwMiwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZT4gbV9wcml2
YXRlOwogfTsKIAotaW5saW5lIFZpZGVvVHJhY2sqIHRvVmlkZW9UcmFjayhUcmFja0Jhc2UqIHRy
YWNrKQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHRyYWNrLT50eXBl
KCkgPT0gVHJhY2tCYXNlOjpWaWRlb1RyYWNrKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Vmlk
ZW9UcmFjayo+KHRyYWNrKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlZpZGVvVHJhY2spCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlRyYWNrQmFzZSYgdHJhY2spIHsgcmV0dXJuIHRyYWNr
LnR5cGUoKSA9PSBXZWJDb3JlOjpUcmFja0Jhc2U6OlZpZGVvVHJhY2s7IH0KK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VmlkZW9UcmFja0xpc3QuY3BwCmluZGV4IDQyNmIyYTAyNWFlMTczZDA2NmRkMzE2YWYwMTlhMmIz
NzE1MGVkOGMuLjhkOTVmMTBmZWYzMjg4N2ViMzU4NmJkZTI1YTFhNTBmMTUxMjZmYTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwCkBAIC00Myw1NCAr
NDMsNTEgQEAgVmlkZW9UcmFja0xpc3Q6On5WaWRlb1RyYWNrTGlzdCgpCiB7CiB9CiAKLXZvaWQg
VmlkZW9UcmFja0xpc3Q6OmFwcGVuZChQYXNzUmVmUHRyPFZpZGVvVHJhY2s+IHBycFRyYWNrKQor
dm9pZCBWaWRlb1RyYWNrTGlzdDo6YXBwZW5kKFJlZjxWaWRlb1RyYWNrPiYmIHRyYWNrKQogewot
ICAgIFJlZlB0cjxWaWRlb1RyYWNrPiB0cmFjayA9IHBycFRyYWNrOwotCiAgICAgLy8gSW5zZXJ0
IHRyYWNrcyBpbiB0aGUgbWVkaWEgZmlsZSBvcmRlci4KICAgICBzaXplX3QgaW5kZXggPSB0cmFj
ay0+aW5iYW5kVHJhY2tJbmRleCgpOwogICAgIHNpemVfdCBpbnNlcnRpb25JbmRleDsKICAgICBm
b3IgKGluc2VydGlvbkluZGV4ID0gMDsgaW5zZXJ0aW9uSW5kZXggPCBtX2luYmFuZFRyYWNrcy5z
aXplKCk7ICsraW5zZXJ0aW9uSW5kZXgpIHsKLSAgICAgICAgVmlkZW9UcmFjayogb3RoZXJUcmFj
ayA9IHN0YXRpY19jYXN0PFZpZGVvVHJhY2sqPihtX2luYmFuZFRyYWNrc1tpbnNlcnRpb25JbmRl
eF0uZ2V0KCkpOwotICAgICAgICBpZiAob3RoZXJUcmFjay0+aW5iYW5kVHJhY2tJbmRleCgpID4g
aW5kZXgpCisgICAgICAgIGF1dG8mIG90aGVyVHJhY2sgPSBkb3duY2FzdDxWaWRlb1RyYWNrPigq
bV9pbmJhbmRUcmFja3NbaW5zZXJ0aW9uSW5kZXhdKTsKKyAgICAgICAgaWYgKG90aGVyVHJhY2su
aW5iYW5kVHJhY2tJbmRleCgpID4gaW5kZXgpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgbV9pbmJhbmRUcmFja3MuaW5zZXJ0KGluc2VydGlvbkluZGV4LCB0cmFjayk7CisgICAgbV9p
bmJhbmRUcmFja3MuaW5zZXJ0KGluc2VydGlvbkluZGV4LCB0cmFjay5wdHIoKSk7CiAKICAgICBB
U1NFUlQoIXRyYWNrLT5tZWRpYUVsZW1lbnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50KCkgPT0g
bWVkaWFFbGVtZW50KCkpOwogICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50
KCkpOwogCi0gICAgc2NoZWR1bGVBZGRUcmFja0V2ZW50KHRyYWNrLnJlbGVhc2UoKSk7CisgICAg
c2NoZWR1bGVBZGRUcmFja0V2ZW50KFdURk1vdmUodHJhY2spKTsKIH0KIAogVmlkZW9UcmFjayog
VmlkZW9UcmFja0xpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKGlu
ZGV4IDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gdG9WaWRlb1RyYWNr
KG1faW5iYW5kVHJhY2tzW2luZGV4XS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFZpZGVvVHJhY2s+KG1faW5iYW5kVHJhY2tzW2luZGV4XS5nZXQoKSk7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFZpZGVvVHJhY2sqIFZpZGVvVHJhY2tMaXN0Ojpn
ZXRUcmFja0J5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QKIHsKICAgICBmb3IgKGF1
dG8mIGluYmFuZFRyYWNrcyA6IG1faW5iYW5kVHJhY2tzKSB7Ci0gICAgICAgIFZpZGVvVHJhY2sq
IHRyYWNrID0gdG9WaWRlb1RyYWNrKGluYmFuZFRyYWNrcy5nZXQoKSk7Ci0gICAgICAgIGlmICh0
cmFjay0+aWQoKSA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiB0cmFjazsKKyAgICAgICAgYXV0
byYgdHJhY2sgPSBkb3duY2FzdDxWaWRlb1RyYWNrPigqaW5iYW5kVHJhY2tzKTsKKyAgICAgICAg
aWYgKHRyYWNrLmlkKCkgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4gJnRyYWNrOwogICAgIH0K
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotbG9uZyBWaWRlb1RyYWNr
TGlzdDo6c2VsZWN0ZWRJbmRleCgpIGNvbnN0CitpbnQgVmlkZW9UcmFja0xpc3Q6OnNlbGVjdGVk
SW5kZXgoKSBjb25zdAogewogICAgIC8vIDQuOC4xMC4xMC4xIEF1ZGlvVHJhY2tMaXN0IGFuZCBW
aWRlb1RyYWNrTGlzdCBvYmplY3RzCiAgICAgLy8gVGhlIFZpZGVvVHJhY2tMaXN0LnNlbGVjdGVk
SW5kZXggYXR0cmlidXRlIG11c3QgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUKICAgICAvLyBjdXJy
ZW50bHkgc2VsZWN0ZWQgdHJhY2ssIGlmIGFueS4gSWYgdGhlIFZpZGVvVHJhY2tMaXN0IG9iamVj
dCBkb2VzIG5vdAogICAgIC8vIGN1cnJlbnRseSByZXByZXNlbnQgYW55IHRyYWNrcywgb3IgaWYg
bm9uZSBvZiB0aGUgdHJhY2tzIGFyZSBzZWxlY3RlZCwKICAgICAvLyBpdCBtdXN0IGluc3RlYWQg
cmV0dXJuIOKIkjEuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7
Ci0gICAgICAgIFZpZGVvVHJhY2sqIHRyYWNrID0gdG9WaWRlb1RyYWNrKG1faW5iYW5kVHJhY2tz
W2ldLmdldCgpKTsKLSAgICAgICAgaWYgKHRyYWNrLT5zZWxlY3RlZCgpKQorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIHRyYWNrID0g
ZG93bmNhc3Q8VmlkZW9UcmFjaz4oKm1faW5iYW5kVHJhY2tzW2ldKTsKKyAgICAgICAgaWYgKHRy
YWNrLnNlbGVjdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gaTsKICAgICB9CiAgICAgcmV0dXJu
IC0xOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlz
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5oCmluZGV4IGY2
ZDlkNDVmNzc4NTY5ODk5NDU5NGM5YThmYzhiZDM5MzZiNjExMmIuLmJjNGUwNTA3OTY4MWJlZWMy
YzljYjhhYzZhMjk1MjEzYTZjNTJmYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVmlkZW9UcmFja0xpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Zp
ZGVvVHJhY2tMaXN0LmgKQEAgLTQzLDExICs0MywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
VmlkZW9UcmFja0xpc3QoKTsKIAogICAgIFZpZGVvVHJhY2sqIGdldFRyYWNrQnlJZChjb25zdCBB
dG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBsb25nIHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKKyAg
ICBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0OwogCiAgICAgVmlkZW9UcmFjayogaXRlbSh1bnNp
Z25lZCkgY29uc3Q7CiAgICAgVmlkZW9UcmFjayogbGFzdEl0ZW0oKSBjb25zdCB7IHJldHVybiBp
dGVtKGxlbmd0aCgpIC0gMSk7IH0KLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPFZpZGVvVHJh
Y2s+KTsKKyAgICB2b2lkIGFwcGVuZChSZWY8VmlkZW9UcmFjaz4mJik7CiAKICAgICAvLyBFdmVu
dFRhcmdldAogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3Qgb3ZlcnJpZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278996</attachid>
            <date>2016-05-15 21:05:24 -0700</date>
            <delta_ts>2016-05-16 09:07:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157735-20160515210619.patch</filename>
            <type>text/plain</type>
            <size>63223</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjY5ZTViZWYwMjY3NjAx
M2JlMWUyOTEwOWQwZDEzYTYzNTIwN2NhYS4uZGM1NTU5YTA3MmMyY2YzZTQ2ODFlNGQ1ZmY0YTcw
YjE1Y2Q1NTIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEwNCBAQAogMjAxNi0wNS0xNSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIE1vZGVybml6ZSBUcmFjayBj
bGFzc2VzJyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTc3MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb2Rlcm5pemUgVHJhY2sgY2xhc3NlcycgY29kZSBhIGJpdC4KKworICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2U6OnJlbW92ZVNvdXJjZUJ1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNv
dXJjZS9Tb3VyY2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpz
b3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNUcmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0
b1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGh0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjphdWRp
b1RyYWNrRW5hYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6dGV4dFRyYWNrTW9kZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6dmlkZW9UcmFja1NlbGVjdGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tSZW1vdmVDdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyRGlkQWRkVGV4dFRyYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmFkZEF1ZGlvVHJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OmFkZFZpZGVvVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6cmVtb3ZlQXVkaW9UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpyZW1vdmVUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6cmVtb3ZlVmlkZW9UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50Ojpmb3JnZXRSZXNvdXJjZVNwZWNpZmljVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OmF1ZGlvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OnRleHRUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6dmlkZW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
ZGlkQWRkVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRp
ZFJlbW92ZVRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpz
ZXRTZWxlY3RlZFRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
Ojp0ZXh0VHJhY2tBZGRDdWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAq
IGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29u
dHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbENsb3NlZENh
cHRpb25zVHJhY2tMaXN0RWxlbWVudDo6dXBkYXRlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0aW9uc1RyYWNrTGlzdEVsZW1lbnQ6OnJlYnVpbGRUcmFj
a0xpc3RNZW51KToKKyAgICAgICAgKiBodG1sL3RyYWNrL0F1ZGlvVHJhY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9UcmFjazo6fkF1ZGlvVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9UcmFjazo6c2V0UHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrOjpp
c1ZhbGlkS2luZCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrOjp3aWxsUmVtb3ZlKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2s6OnNldEVuYWJsZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9UcmFjazo6dXBkYXRlS2luZEZyb21Qcml2YXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBodG1sL3RyYWNrL0F1ZGlvVHJhY2suaDoKKyAgICAgICAgKGlzVHlwZSk6
CisgICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5jcHA6CisgICAgICAgIChBdWRp
b1RyYWNrTGlzdDo6YXBwZW5kKToKKyAgICAgICAgKEF1ZGlvVHJhY2tMaXN0OjppdGVtKToKKyAg
ICAgICAgKEF1ZGlvVHJhY2tMaXN0OjpnZXRUcmFja0J5SWQpOgorICAgICAgICAoQXVkaW9UcmFj
a0xpc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL3Ry
YWNrL0F1ZGlvVHJhY2tMaXN0Lmg6CisgICAgICAgICogaHRtbC90cmFjay9JbmJhbmRUZXh0VHJh
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjp3aWxsUmVtb3ZlKToK
KyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0VHJhY2s6OnNldEtpbmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjp0cmFja0lu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6dHJhY2tJbmRleFJlbGF0aXZlVG9S
ZW5kZXJlZFRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OnNldExhbmd1YWdl
KToKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5oOgorICAgICAgICAoaXNUeXBlKToK
KyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwOgorICAgICAgICAoVGV4dFRy
YWNrTGlzdDo6Z2V0VHJhY2tJbmRleCk6CisgICAgICAgIChUZXh0VHJhY2tMaXN0OjpnZXRUcmFj
a0luZGV4UmVsYXRpdmVUb1JlbmRlcmVkVHJhY2tzKToKKyAgICAgICAgKFRleHRUcmFja0xpc3Q6
Oml0ZW0pOgorICAgICAgICAoVGV4dFRyYWNrTGlzdDo6Z2V0VHJhY2tCeUlkKToKKyAgICAgICAg
KFRleHRUcmFja0xpc3Q6OmludmFsaWRhdGVUcmFja0luZGV4ZXNBZnRlclRyYWNrKToKKyAgICAg
ICAgKFRleHRUcmFja0xpc3Q6OmFwcGVuZCk6CisgICAgICAgIChUZXh0VHJhY2tMaXN0OjpyZW1v
dmUpOgorICAgICAgICAoVGV4dFRyYWNrTGlzdDo6Y29udGFpbnMpOgorICAgICAgICAqIGh0bWwv
dHJhY2svVGV4dFRyYWNrTGlzdC5oOgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tCYXNlLmg6
CisgICAgICAgICogaHRtbC90cmFjay9UcmFja0V2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRyYWNrRXZlbnQ6OlRyYWNrRXZlbnQpOgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tFdmVu
dC5oOgorICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHA6CisgICAgICAgIChU
cmFja0xpc3RCYXNlOjpyZW1vdmUpOgorICAgICAgICAoVHJhY2tMaXN0QmFzZTo6Y29udGFpbnMp
OgorICAgICAgICAoVHJhY2tMaXN0QmFzZTo6c2NoZWR1bGVUcmFja0V2ZW50KToKKyAgICAgICAg
KFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlQWRkVHJhY2tFdmVudCk6CisgICAgICAgIChUcmFja0xp
c3RCYXNlOjpzY2hlZHVsZVJlbW92ZVRyYWNrRXZlbnQpOgorICAgICAgICAqIGh0bWwvdHJhY2sv
VHJhY2tMaXN0QmFzZS5oOgorICAgICAgICAqIGh0bWwvdHJhY2svVmlkZW9UcmFjay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb1RyYWNrOjp3aWxsUmVtb3ZlKToKKyAgICAgICAgKFdlYkNv
cmU6OlZpZGVvVHJhY2s6OnNldEtpbmQpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9UcmFjazo6
c2V0TGFuZ3VhZ2UpOgorICAgICAgICAqIGh0bWwvdHJhY2svVmlkZW9UcmFjay5oOgorICAgICAg
ICAoaXNUeXBlKToKKyAgICAgICAgKiBodG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcDoKKyAg
ICAgICAgKFZpZGVvVHJhY2tMaXN0OjphcHBlbmQpOgorICAgICAgICAoVmlkZW9UcmFja0xpc3Q6
Oml0ZW0pOgorICAgICAgICAoVmlkZW9UcmFja0xpc3Q6OmdldFRyYWNrQnlJZCk6CisgICAgICAg
IChWaWRlb1RyYWNrTGlzdDo6c2VsZWN0ZWRJbmRleCk6CisgICAgICAgICogaHRtbC90cmFjay9W
aWRlb1RyYWNrTGlzdC5oOgorCisyMDE2LTA1LTE1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CisKICAgICAgICAgVXNlIG1vcmUgcmVmZXJlbmNlcyBpbiBKUyB3cmFwcGVycyByZWxh
dGVkIGNvZGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NzcyMQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVk
aWFTb3VyY2UuY3BwCmluZGV4IGUyODQ5YWVjZDM5ODk3MGI2YmFiZDY3MThiNDI4Nzg5MDMxMzZj
ZjEuLjlhNTRiNjFkZWE3MzIwOWM3NzRkM2JhNGQ0MWVmZjhkNGY4YzlmYmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBAIC01
ODQsMTQgKzU4NCwxNCBAQCB2b2lkIE1lZGlhU291cmNlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291
cmNlQnVmZmVyJiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgICAgIC8vIDUuMyBG
b3IgZWFjaCBBdWRpb1RyYWNrIG9iamVjdCBpbiB0aGUgU291cmNlQnVmZmVyIGF1ZGlvVHJhY2tz
IGxpc3QsIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgICAgICB3aGlsZSAoYXVkaW9UcmFj
a3MtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBBdWRpb1RyYWNrKiB0cmFjayA9IGF1ZGlvVHJh
Y2tzLT5sYXN0SXRlbSgpOworICAgICAgICAgICAgYXV0byYgdHJhY2sgPSAqYXVkaW9UcmFja3Mt
Pmxhc3RJdGVtKCk7CiAKICAgICAgICAgICAgIC8vIDUuMy4xIFNldCB0aGUgc291cmNlQnVmZmVy
IGF0dHJpYnV0ZSBvbiB0aGUgQXVkaW9UcmFjayBvYmplY3QgdG8gbnVsbC4KLSAgICAgICAgICAg
IHRyYWNrLT5zZXRTb3VyY2VCdWZmZXIobnVsbHB0cik7CisgICAgICAgICAgICB0cmFjay5zZXRT
b3VyY2VCdWZmZXIobnVsbHB0cik7CiAKICAgICAgICAgICAgIC8vIDUuMy4yIElmIHRoZSBlbmFi
bGVkIGF0dHJpYnV0ZSBvbiB0aGUgQXVkaW9UcmFjayBvYmplY3QgaXMgdHJ1ZSwgdGhlbiBzZXQg
dGhlIHJlbW92ZWQgZW5hYmxlZAogICAgICAgICAgICAgLy8gYXVkaW8gdHJhY2sgZmxhZyB0byB0
cnVlLgotICAgICAgICAgICAgaWYgKHRyYWNrLT5lbmFibGVkKCkpCisgICAgICAgICAgICBpZiAo
dHJhY2suZW5hYmxlZCgpKQogICAgICAgICAgICAgICAgIHJlbW92ZWRFbmFibGVkQXVkaW9UcmFj
ayA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIDUuMy4zIFJlbW92ZSB0aGUgQXVkaW9UcmFjayBv
YmplY3QgZnJvbSB0aGUgSFRNTE1lZGlhRWxlbWVudCBhdWRpb1RyYWNrcyBsaXN0LgpAQCAtNjA5
LDcgKzYwOSw3IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZVNvdXJjZUJ1ZmZlcihTb3VyY2VC
dWZmZXImIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIDUuNCBJZiB0aGUg
cmVtb3ZlZCBlbmFibGVkIGF1ZGlvIHRyYWNrIGZsYWcgZXF1YWxzIHRydWUsIHRoZW4gcXVldWUg
YSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQKICAgICAgICAgLy8gbmFtZWQgY2hhbmdlIGF0
IHRoZSBIVE1MTWVkaWFFbGVtZW50IGF1ZGlvVHJhY2tzIGxpc3QuCiAgICAgICAgIGlmIChyZW1v
dmVkRW5hYmxlZEF1ZGlvVHJhY2spCi0gICAgICAgICAgICBtZWRpYUVsZW1lbnQoKS0+YXVkaW9U
cmFja3MoKS0+c2NoZWR1bGVDaGFuZ2VFdmVudCgpOworICAgICAgICAgICAgbWVkaWFFbGVtZW50
KCktPmF1ZGlvVHJhY2tzKCkuc2NoZWR1bGVDaGFuZ2VFdmVudCgpOwogICAgIH0KIAogICAgIC8v
IDYuIExldCBTb3VyY2VCdWZmZXIgdmlkZW9UcmFja3MgbGlzdCBlcXVhbCB0aGUgVmlkZW9UcmFj
a0xpc3Qgb2JqZWN0IHJldHVybmVkIGJ5IHNvdXJjZUJ1ZmZlci52aWRlb1RyYWNrcy4KQEAgLTYy
NCwxNCArNjI0LDE0IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZVNvdXJjZUJ1ZmZlcihTb3Vy
Y2VCdWZmZXImIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKICAgICAgICAgLy8gNy4zIEZv
ciBlYWNoIFZpZGVvVHJhY2sgb2JqZWN0IGluIHRoZSBTb3VyY2VCdWZmZXIgdmlkZW9UcmFja3Mg
bGlzdCwgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CiAgICAgICAgIHdoaWxlICh2aWRlb1RyYWNr
cy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIFZpZGVvVHJhY2sqIHRyYWNrID0gdmlkZW9UcmFj
a3MtPmxhc3RJdGVtKCk7CisgICAgICAgICAgICBhdXRvJiB0cmFjayA9ICp2aWRlb1RyYWNrcy0+
bGFzdEl0ZW0oKTsKIAogICAgICAgICAgICAgLy8gNy4zLjEgU2V0IHRoZSBzb3VyY2VCdWZmZXIg
YXR0cmlidXRlIG9uIHRoZSBWaWRlb1RyYWNrIG9iamVjdCB0byBudWxsLgotICAgICAgICAgICAg
dHJhY2stPnNldFNvdXJjZUJ1ZmZlcihudWxscHRyKTsKKyAgICAgICAgICAgIHRyYWNrLnNldFNv
dXJjZUJ1ZmZlcihudWxscHRyKTsKIAogICAgICAgICAgICAgLy8gNy4zLjIgSWYgdGhlIHNlbGVj
dGVkIGF0dHJpYnV0ZSBvbiB0aGUgVmlkZW9UcmFjayBvYmplY3QgaXMgdHJ1ZSwgdGhlbiBzZXQg
dGhlIHJlbW92ZWQgc2VsZWN0ZWQKICAgICAgICAgICAgIC8vIHZpZGVvIHRyYWNrIGZsYWcgdG8g
dHJ1ZS4KLSAgICAgICAgICAgIGlmICh0cmFjay0+c2VsZWN0ZWQoKSkKKyAgICAgICAgICAgIGlm
ICh0cmFjay5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHJlbW92ZWRTZWxlY3RlZFZpZGVv
VHJhY2sgPSB0cnVlOwogCiAgICAgICAgICAgICAvLyA3LjMuMyBSZW1vdmUgdGhlIFZpZGVvVHJh
Y2sgb2JqZWN0IGZyb20gdGhlIEhUTUxNZWRpYUVsZW1lbnQgdmlkZW9UcmFja3MgbGlzdC4KQEAg
LTY0OSw3ICs2NDksNyBAQCB2b2lkIE1lZGlhU291cmNlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291
cmNlQnVmZmVyJiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAvLyA3LjQgSWYg
dGhlIHJlbW92ZWQgc2VsZWN0ZWQgdmlkZW8gdHJhY2sgZmxhZyBlcXVhbHMgdHJ1ZSwgdGhlbiBx
dWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudAogICAgICAgICAvLyBuYW1lZCBjaGFu
Z2UgYXQgdGhlIEhUTUxNZWRpYUVsZW1lbnQgdmlkZW9UcmFja3MgbGlzdC4KICAgICAgICAgaWYg
KHJlbW92ZWRTZWxlY3RlZFZpZGVvVHJhY2spCi0gICAgICAgICAgICBtZWRpYUVsZW1lbnQoKS0+
dmlkZW9UcmFja3MoKS0+c2NoZWR1bGVDaGFuZ2VFdmVudCgpOworICAgICAgICAgICAgbWVkaWFF
bGVtZW50KCktPnZpZGVvVHJhY2tzKCkuc2NoZWR1bGVDaGFuZ2VFdmVudCgpOwogICAgIH0KIAog
ICAgIC8vIDguIExldCBTb3VyY2VCdWZmZXIgdGV4dFRyYWNrcyBsaXN0IGVxdWFsIHRoZSBUZXh0
VHJhY2tMaXN0IG9iamVjdCByZXR1cm5lZCBieSBzb3VyY2VCdWZmZXIudGV4dFRyYWNrcy4KQEAg
LTY2NCwxNCArNjY0LDE0IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZVNvdXJjZUJ1ZmZlcihT
b3VyY2VCdWZmZXImIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKICAgICAgICAgLy8gOS4z
IEZvciBlYWNoIFRleHRUcmFjayBvYmplY3QgaW4gdGhlIFNvdXJjZUJ1ZmZlciB0ZXh0VHJhY2tz
IGxpc3QsIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgICAgICB3aGlsZSAodGV4dFRyYWNr
cy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIFRleHRUcmFjayogdHJhY2sgPSB0ZXh0VHJhY2tz
LT5sYXN0SXRlbSgpOworICAgICAgICAgICAgYXV0byYgdHJhY2sgPSAqdGV4dFRyYWNrcy0+bGFz
dEl0ZW0oKTsKIAogICAgICAgICAgICAgLy8gOS4zLjEgU2V0IHRoZSBzb3VyY2VCdWZmZXIgYXR0
cmlidXRlIG9uIHRoZSBUZXh0VHJhY2sgb2JqZWN0IHRvIG51bGwuCi0gICAgICAgICAgICB0cmFj
ay0+c2V0U291cmNlQnVmZmVyKG51bGxwdHIpOworICAgICAgICAgICAgdHJhY2suc2V0U291cmNl
QnVmZmVyKG51bGxwdHIpOwogCiAgICAgICAgICAgICAvLyA5LjMuMiBJZiB0aGUgbW9kZSBhdHRy
aWJ1dGUgb24gdGhlIFRleHRUcmFjayBvYmplY3QgaXMgc2V0IHRvICJzaG93aW5nIiBvciAiaGlk
ZGVuIiwgdGhlbgogICAgICAgICAgICAgLy8gc2V0IHRoZSByZW1vdmVkIGVuYWJsZWQgdGV4dCB0
cmFjayBmbGFnIHRvIHRydWUuCi0gICAgICAgICAgICBpZiAodHJhY2stPm1vZGUoKSA9PSBUZXh0
VHJhY2s6Ok1vZGU6OlNob3dpbmcgfHwgdHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6
OkhpZGRlbikKKyAgICAgICAgICAgIGlmICh0cmFjay5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2Rl
OjpTaG93aW5nIHx8IHRyYWNrLm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OkhpZGRlbikKICAg
ICAgICAgICAgICAgICByZW1vdmVkRW5hYmxlZFRleHRUcmFjayA9IHRydWU7CiAKICAgICAgICAg
ICAgIC8vIDkuMy4zIFJlbW92ZSB0aGUgVGV4dFRyYWNrIG9iamVjdCBmcm9tIHRoZSBIVE1MTWVk
aWFFbGVtZW50IHRleHRUcmFja3MgbGlzdC4KQEAgLTY4OSw3ICs2ODksNyBAQCB2b2lkIE1lZGlh
U291cmNlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291cmNlQnVmZmVyJiBidWZmZXIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogICAgICAgICAvLyA5LjQgSWYgdGhlIHJlbW92ZWQgZW5hYmxlZCB0ZXh0IHRy
YWNrIGZsYWcgZXF1YWxzIHRydWUsIHRoZW4gcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUg
ZXZlbnQKICAgICAgICAgLy8gbmFtZWQgY2hhbmdlIGF0IHRoZSBIVE1MTWVkaWFFbGVtZW50IHRl
eHRUcmFja3MgbGlzdC4KICAgICAgICAgaWYgKHJlbW92ZWRFbmFibGVkVGV4dFRyYWNrKQotICAg
ICAgICAgICAgbWVkaWFFbGVtZW50KCktPnRleHRUcmFja3MoKS0+c2NoZWR1bGVDaGFuZ2VFdmVu
dCgpOworICAgICAgICAgICAgbWVkaWFFbGVtZW50KCktPnRleHRUcmFja3MoKS5zY2hlZHVsZUNo
YW5nZUV2ZW50KCk7CiAgICAgfQogICAgIAogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCmluZGV4IDcwZDAxZTQxZTY1NmVj
MDEzNDZiOTRhNjg1YjhiNzVhOWQ5M2YwMzUuLjJlNTBhNmJkYWQxZjRhM2M3ZTQwMzQ5OTQ0Zjk1
ZWQ1Mjg1ZjY5OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvU291cmNlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL1NvdXJjZUJ1ZmZlci5jcHAKQEAgLTEwMzUsNyArMTAzNSw3IEBAIHZvaWQgU291cmNlQnVm
ZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChT
b3VyY2VCdWZmCiAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHN0ZXBzIDUuMi4xLTUu
Mi44LjEgYXMgcGVyIEVkaXRvcidzIERyYWZ0IDA5IEphbnVhcnkgMjAxNSwgYW5kIHJlb3JkZXIg
dGhpcwogICAgICAgICAgICAgLy8gNS4yLjEgTGV0IG5ldyBhdWRpbyB0cmFjayBiZSBhIG5ldyBB
dWRpb1RyYWNrIG9iamVjdC4KICAgICAgICAgICAgIC8vIDUuMi4yIEdlbmVyYXRlIGEgdW5pcXVl
IElEIGFuZCBhc3NpZ24gaXQgdG8gdGhlIGlkIHByb3BlcnR5IG9uIG5ldyB2aWRlbyB0cmFjay4K
LSAgICAgICAgICAgIFJlZlB0cjxBdWRpb1RyYWNrPiBuZXdBdWRpb1RyYWNrID0gQXVkaW9UcmFj
azo6Y3JlYXRlKHRoaXMsIGF1ZGlvVHJhY2tQcml2YXRlKTsKKyAgICAgICAgICAgIGF1dG8gbmV3
QXVkaW9UcmFjayA9IEF1ZGlvVHJhY2s6OmNyZWF0ZSh0aGlzLCBhdWRpb1RyYWNrUHJpdmF0ZSk7
CiAgICAgICAgICAgICBuZXdBdWRpb1RyYWNrLT5zZXRTb3VyY2VCdWZmZXIodGhpcyk7CiAKICAg
ICAgICAgICAgIC8vIDUuMi4zIElmIGF1ZGlvVHJhY2tzLmxlbmd0aCBlcXVhbHMgMCwgdGhlbiBy
dW4gdGhlIGZvbGxvd2luZyBzdGVwczoKQEAgLTEwNTEsMTMgKzEwNTEsMTMgQEAgdm9pZCBTb3Vy
Y2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdt
ZW50KFNvdXJjZUJ1ZmYKICAgICAgICAgICAgIC8vIDUuMi41IFF1ZXVlIGEgdGFzayB0byBmaXJl
IGEgdHJ1c3RlZCBldmVudCBuYW1lZCBhZGR0cmFjaywgdGhhdCBkb2VzIG5vdCBidWJibGUgYW5k
IGlzCiAgICAgICAgICAgICAvLyBub3QgY2FuY2VsYWJsZSwgYW5kIHRoYXQgdXNlcyB0aGUgVHJh
Y2tFdmVudCBpbnRlcmZhY2UsIGF0IHRoZSBBdWRpb1RyYWNrTGlzdCBvYmplY3QKICAgICAgICAg
ICAgIC8vIHJlZmVyZW5jZWQgYnkgdGhlIGF1ZGlvVHJhY2tzIGF0dHJpYnV0ZSBvbiB0aGlzIFNv
dXJjZUJ1ZmZlciBvYmplY3QuCi0gICAgICAgICAgICBhdWRpb1RyYWNrcygpLT5hcHBlbmQobmV3
QXVkaW9UcmFjayk7CisgICAgICAgICAgICBhdWRpb1RyYWNrcygpLT5hcHBlbmQobmV3QXVkaW9U
cmFjay5jb3B5UmVmKCkpOwogCiAgICAgICAgICAgICAvLyA1LjIuNiBBZGQgbmV3IGF1ZGlvIHRy
YWNrIHRvIHRoZSBhdWRpb1RyYWNrcyBhdHRyaWJ1dGUgb24gdGhlIEhUTUxNZWRpYUVsZW1lbnQu
CiAgICAgICAgICAgICAvLyA1LjIuNyBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHRydXN0ZWQgZXZl
bnQgbmFtZWQgYWRkdHJhY2ssIHRoYXQgZG9lcyBub3QgYnViYmxlIGFuZCBpcwogICAgICAgICAg
ICAgLy8gbm90IGNhbmNlbGFibGUsIGFuZCB0aGF0IHVzZXMgdGhlIFRyYWNrRXZlbnQgaW50ZXJm
YWNlLCBhdCB0aGUgQXVkaW9UcmFja0xpc3Qgb2JqZWN0CiAgICAgICAgICAgICAvLyByZWZlcmVu
Y2VkIGJ5IHRoZSBhdWRpb1RyYWNrcyBhdHRyaWJ1dGUgb24gdGhlIEhUTUxNZWRpYUVsZW1lbnQu
Ci0gICAgICAgICAgICBtX3NvdXJjZS0+bWVkaWFFbGVtZW50KCktPmF1ZGlvVHJhY2tzKCktPmFw
cGVuZChuZXdBdWRpb1RyYWNrKTsKKyAgICAgICAgICAgIG1fc291cmNlLT5tZWRpYUVsZW1lbnQo
KS0+YXVkaW9UcmFja3MoKS5hcHBlbmQobmV3QXVkaW9UcmFjay5jb3B5UmVmKCkpOwogCiAgICAg
ICAgICAgICAvLyA1LjIuOCBDcmVhdGUgYSBuZXcgdHJhY2sgYnVmZmVyIHRvIHN0b3JlIGNvZGVk
IGZyYW1lcyBmb3IgdGhpcyB0cmFjay4KICAgICAgICAgICAgIEFTU0VSVCghbV90cmFja0J1ZmZl
ck1hcC5jb250YWlucyhuZXdBdWRpb1RyYWNrLT5pZCgpKSk7CkBAIC0xMDc2LDcgKzEwNzYsNyBA
QCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFs
aXphdGlvblNlZ21lbnQoU291cmNlQnVmZgogICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBzdGVwcyA1LjMuMS01LjMuOC4xIGFzIHBlciBFZGl0b3IncyBEcmFmdCAwOSBKYW51YXJ5IDIw
MTUsIGFuZCByZW9yZGVyIHRoaXMKICAgICAgICAgICAgIC8vIDUuMy4xIExldCBuZXcgdmlkZW8g
dHJhY2sgYmUgYSBuZXcgVmlkZW9UcmFjayBvYmplY3QuCiAgICAgICAgICAgICAvLyA1LjMuMiBH
ZW5lcmF0ZSBhIHVuaXF1ZSBJRCBhbmQgYXNzaWduIGl0IHRvIHRoZSBpZCBwcm9wZXJ0eSBvbiBu
ZXcgdmlkZW8gdHJhY2suCi0gICAgICAgICAgICBSZWZQdHI8VmlkZW9UcmFjaz4gbmV3VmlkZW9U
cmFjayA9IFZpZGVvVHJhY2s6OmNyZWF0ZSh0aGlzLCB2aWRlb1RyYWNrUHJpdmF0ZSk7CisgICAg
ICAgICAgICBhdXRvIG5ld1ZpZGVvVHJhY2sgPSBWaWRlb1RyYWNrOjpjcmVhdGUodGhpcywgdmlk
ZW9UcmFja1ByaXZhdGUpOwogICAgICAgICAgICAgbmV3VmlkZW9UcmFjay0+c2V0U291cmNlQnVm
ZmVyKHRoaXMpOwogCiAgICAgICAgICAgICAvLyA1LjMuMyBJZiB2aWRlb1RyYWNrcy5sZW5ndGgg
ZXF1YWxzIDAsIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CkBAIC0xMDkyLDEzICsxMDky
LDEzIEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUlu
aXRpYWxpemF0aW9uU2VnbWVudChTb3VyY2VCdWZmCiAgICAgICAgICAgICAvLyA1LjMuNSBRdWV1
ZSBhIHRhc2sgdG8gZmlyZSBhIHRydXN0ZWQgZXZlbnQgbmFtZWQgYWRkdHJhY2ssIHRoYXQgZG9l
cyBub3QgYnViYmxlIGFuZCBpcwogICAgICAgICAgICAgLy8gbm90IGNhbmNlbGFibGUsIGFuZCB0
aGF0IHVzZXMgdGhlIFRyYWNrRXZlbnQgaW50ZXJmYWNlLCBhdCB0aGUgVmlkZW9UcmFja0xpc3Qg
b2JqZWN0CiAgICAgICAgICAgICAvLyByZWZlcmVuY2VkIGJ5IHRoZSB2aWRlb1RyYWNrcyBhdHRy
aWJ1dGUgb24gdGhpcyBTb3VyY2VCdWZmZXIgb2JqZWN0LgotICAgICAgICAgICAgdmlkZW9UcmFj
a3MoKS0+YXBwZW5kKG5ld1ZpZGVvVHJhY2spOworICAgICAgICAgICAgdmlkZW9UcmFja3MoKS0+
YXBwZW5kKG5ld1ZpZGVvVHJhY2suY29weVJlZigpKTsKIAogICAgICAgICAgICAgLy8gNS4zLjYg
QWRkIG5ldyB2aWRlbyB0cmFjayB0byB0aGUgdmlkZW9UcmFja3MgYXR0cmlidXRlIG9uIHRoZSBI
VE1MTWVkaWFFbGVtZW50LgogICAgICAgICAgICAgLy8gNS4zLjcgUXVldWUgYSB0YXNrIHRvIGZp
cmUgYSB0cnVzdGVkIGV2ZW50IG5hbWVkIGFkZHRyYWNrLCB0aGF0IGRvZXMgbm90IGJ1YmJsZSBh
bmQgaXMKICAgICAgICAgICAgIC8vIG5vdCBjYW5jZWxhYmxlLCBhbmQgdGhhdCB1c2VzIHRoZSBU
cmFja0V2ZW50IGludGVyZmFjZSwgYXQgdGhlIFZpZGVvVHJhY2tMaXN0IG9iamVjdAogICAgICAg
ICAgICAgLy8gcmVmZXJlbmNlZCBieSB0aGUgdmlkZW9UcmFja3MgYXR0cmlidXRlIG9uIHRoZSBI
VE1MTWVkaWFFbGVtZW50LgotICAgICAgICAgICAgbV9zb3VyY2UtPm1lZGlhRWxlbWVudCgpLT52
aWRlb1RyYWNrcygpLT5hcHBlbmQobmV3VmlkZW9UcmFjayk7CisgICAgICAgICAgICBtX3NvdXJj
ZS0+bWVkaWFFbGVtZW50KCktPnZpZGVvVHJhY2tzKCkuYXBwZW5kKG5ld1ZpZGVvVHJhY2suY29w
eVJlZigpKTsKIAogICAgICAgICAgICAgLy8gNS4zLjggQ3JlYXRlIGEgbmV3IHRyYWNrIGJ1ZmZl
ciB0byBzdG9yZSBjb2RlZCBmcmFtZXMgZm9yIHRoaXMgdHJhY2suCiAgICAgICAgICAgICBBU1NF
UlQoIW1fdHJhY2tCdWZmZXJNYXAuY29udGFpbnMobmV3VmlkZW9UcmFjay0+aWQoKSkpOwpAQCAt
MTEyOCwxMyArMTEyOCwxMyBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0
ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoU291cmNlQnVmZgogICAgICAgICAgICAg
Ly8gNS40LjQgUXVldWUgYSB0YXNrIHRvIGZpcmUgYSB0cnVzdGVkIGV2ZW50IG5hbWVkIGFkZHRy
YWNrLCB0aGF0IGRvZXMgbm90IGJ1YmJsZSBhbmQgaXMKICAgICAgICAgICAgIC8vIG5vdCBjYW5j
ZWxhYmxlLCBhbmQgdGhhdCB1c2VzIHRoZSBUcmFja0V2ZW50IGludGVyZmFjZSwgYXQgdGV4dFRy
YWNrcyBhdHRyaWJ1dGUgb24gdGhpcwogICAgICAgICAgICAgLy8gU291cmNlQnVmZmVyIG9iamVj
dC4KLSAgICAgICAgICAgIHRleHRUcmFja3MoKS0+YXBwZW5kKG5ld1RleHRUcmFjayk7CisgICAg
ICAgICAgICB0ZXh0VHJhY2tzKCktPmFwcGVuZCgqbmV3VGV4dFRyYWNrKTsKIAogICAgICAgICAg
ICAgLy8gNS40LjUgQWRkIG5ldyB0ZXh0IHRyYWNrIHRvIHRoZSB0ZXh0VHJhY2tzIGF0dHJpYnV0
ZSBvbiB0aGUgSFRNTE1lZGlhRWxlbWVudC4KICAgICAgICAgICAgIC8vIDUuNC42IFF1ZXVlIGEg
dGFzayB0byBmaXJlIGEgdHJ1c3RlZCBldmVudCBuYW1lZCBhZGR0cmFjaywgdGhhdCBkb2VzIG5v
dCBidWJibGUgYW5kIGlzCiAgICAgICAgICAgICAvLyBub3QgY2FuY2VsYWJsZSwgYW5kIHRoYXQg
dXNlcyB0aGUgVHJhY2tFdmVudCBpbnRlcmZhY2UsIGF0IHRoZSBUZXh0VHJhY2tMaXN0IG9iamVj
dAogICAgICAgICAgICAgLy8gcmVmZXJlbmNlZCBieSB0aGUgdGV4dFRyYWNrcyBhdHRyaWJ1dGUg
b24gdGhlIEhUTUxNZWRpYUVsZW1lbnQuCi0gICAgICAgICAgICBtX3NvdXJjZS0+bWVkaWFFbGVt
ZW50KCktPnRleHRUcmFja3MoKS0+YXBwZW5kKG5ld1RleHRUcmFjayk7CisgICAgICAgICAgICBt
X3NvdXJjZS0+bWVkaWFFbGVtZW50KCktPnRleHRUcmFja3MoKS5hcHBlbmQobmV3VGV4dFRyYWNr
LnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgICAgICAgICAvLyA1LjQuNyBDcmVhdGUgYSBuZXcg
dHJhY2sgYnVmZmVyIHRvIHN0b3JlIGNvZGVkIGZyYW1lcyBmb3IgdGhpcyB0cmFjay4KICAgICAg
ICAgICAgIEFTU0VSVCghbV90cmFja0J1ZmZlck1hcC5jb250YWlucyh0ZXh0VHJhY2tQcml2YXRl
LT5pZCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNr
Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3Bw
CmluZGV4IDVkMGFkYTRhZTU0NDZjOWI2MjAxZjcyYmNiNzFiZDc0MmFkMGRmNTYuLjg2NWUyMGQw
NjM4NDQ2OTM3M2MzYWRiYTkwYTcxZjY3ZTQ0ZjJkMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIFRyYWNrQmFzZSogdG9UcmFjayhKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICBpZiAo
b2JqZWN0LT5pbmhlcml0cyhKU1RleHRUcmFjazo6aW5mbygpKSkKQEAgLTUwLDcgKzUwLDcgQEAg
VHJhY2tCYXNlKiB0b1RyYWNrKEpTVmFsdWUgdmFsdWUpCiAgICAgaWYgKG9iamVjdC0+aW5oZXJp
dHMoSlNWaWRlb1RyYWNrOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gJmpzQ2FzdDxKU1ZpZGVv
VHJhY2sqPihvYmplY3QpLT53cmFwcGVkKCk7CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUcmFja0Jhc2UmIHRyYWNrKQpAQCAtNjIsMTcgKzYy
LDE3IEBAIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVHJhY2tCYXNlJiB0CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIFRyYWNrQmFzZTo6QXVkaW9UcmFjazoKLSAgICAgICAgaWYgKGF1dG8qIHdyYXBw
ZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgKnRvQXVkaW9UcmFj
aygmdHJhY2spKSkKKyAgICAgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVy
KGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG93bmNhc3Q8QXVkaW9UcmFjaz4odHJhY2spKSkKICAg
ICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgICByZXR1cm4gQ1JFQVRFX0RPTV9XUkFQ
UEVSKGdsb2JhbE9iamVjdCwgQXVkaW9UcmFjaywgdHJhY2spOwogCiAgICAgY2FzZSBUcmFja0Jh
c2U6OlZpZGVvVHJhY2s6Ci0gICAgICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3Jh
cHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksICp0b1ZpZGVvVHJhY2soJnRyYWNrKSkpCisgICAg
ICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndv
cmxkKCksIGRvd25jYXN0PFZpZGVvVHJhY2s+KHRyYWNrKSkpCiAgICAgICAgICAgICByZXR1cm4g
d3JhcHBlcjsKICAgICAgICAgcmV0dXJuIENSRUFURV9ET01fV1JBUFBFUihnbG9iYWxPYmplY3Qs
IFZpZGVvVHJhY2ssIHRyYWNrKTsKIAogICAgIGNhc2UgVHJhY2tCYXNlOjpUZXh0VHJhY2s6Ci0g
ICAgICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3Qt
PndvcmxkKCksICp0b1RleHRUcmFjaygmdHJhY2spKSkKKyAgICAgICAgaWYgKGF1dG8qIHdyYXBw
ZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG93bmNhc3Q8VGV4
dFRyYWNrPih0cmFjaykpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgICAgIHJl
dHVybiBDUkVBVEVfRE9NX1dSQVBQRVIoZ2xvYmFsT2JqZWN0LCBUZXh0VHJhY2ssIHRyYWNrKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAzNTlj
OTU3ZmRhZmVmM2ZjNWQ3MmJjN2ZiMDM2NTA3Njg3MGY2ODAyLi44MzYzNTVjNWJlYWM3ZWYxODBm
YmVjMDg5NGEwMzM0NjYzODlkYzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKQEAgLTE3MzksNyArMTczOSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4
dFRyYWNrUmVhZHlTdGF0ZUNoYW5nZWQoVGV4dFRyYWNrKiB0cmFjaykKIAogdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjphdWRpb1RyYWNrRW5hYmxlZENoYW5nZWQoQXVkaW9UcmFjayogdHJhY2spCiB7
Ci0gICAgaWYgKG1fYXVkaW9UcmFja3MgJiYgbV9hdWRpb1RyYWNrcy0+Y29udGFpbnModHJhY2sp
KQorICAgIEFTU0VSVCh0cmFjayk7CisgICAgaWYgKG1fYXVkaW9UcmFja3MgJiYgbV9hdWRpb1Ry
YWNrcy0+Y29udGFpbnMoKnRyYWNrKSkKICAgICAgICAgbV9hdWRpb1RyYWNrcy0+c2NoZWR1bGVD
aGFuZ2VFdmVudCgpOwogfQogCkBAIC0xNzY5LDcgKzE3NzAsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuZ2VkKFRleHRUcmFjayogdHJhY2spCiAKICAgICBjb25m
aWd1cmVUZXh0VHJhY2tEaXNwbGF5KEFzc3VtZVRleHRUcmFja1Zpc2liaWxpdHlDaGFuZ2VkKTsK
IAotICAgIGlmIChtX3RleHRUcmFja3MgJiYgbV90ZXh0VHJhY2tzLT5jb250YWlucyh0cmFjaykp
CisgICAgaWYgKG1fdGV4dFRyYWNrcyAmJiBtX3RleHRUcmFja3MtPmNvbnRhaW5zKCp0cmFjaykp
CiAgICAgICAgIG1fdGV4dFRyYWNrcy0+c2NoZWR1bGVDaGFuZ2VFdmVudCgpOwogCiAjaWYgRU5B
QkxFKEFWRl9DQVBUSU9OUykKQEAgLTE3ODAsNyArMTc4MSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6dGV4dFRyYWNrTW9kZUNoYW5nZWQoVGV4dFRyYWNrKiB0cmFjaykKIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojp2aWRlb1RyYWNrU2VsZWN0ZWRDaGFuZ2VkKFZpZGVvVHJhY2sqIHRyYWNr
KQogewotICAgIGlmIChtX3ZpZGVvVHJhY2tzICYmIG1fdmlkZW9UcmFja3MtPmNvbnRhaW5zKHRy
YWNrKSkKKyAgICBBU1NFUlQodHJhY2spOworICAgIGlmIChtX3ZpZGVvVHJhY2tzICYmIG1fdmlk
ZW9UcmFja3MtPmNvbnRhaW5zKCp0cmFjaykpCiAgICAgICAgIG1fdmlkZW9UcmFja3MtPnNjaGVk
dWxlQ2hhbmdlRXZlbnQoKTsKIH0KIApAQCAtMTgxMyw3ICsxODE1LDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50Ojp0ZXh0VHJhY2tBZGRDdWVzKFRleHRUcmFjayogdHJhY2ssIGNvbnN0IFRleHRU
cmFja0N1ZUxpc3QKICAgICAgICAgdGV4dFRyYWNrQWRkQ3VlKHRyYWNrLCBjdWVzLT5pdGVtKGkp
KTsKIH0KIAotdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tSZW1vdmVDdWVzKFRleHRU
cmFjayosIGNvbnN0IFRleHRUcmFja0N1ZUxpc3QqIGN1ZXMpIAordm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp0ZXh0VHJhY2tSZW1vdmVDdWVzKFRleHRUcmFjayosIGNvbnN0IFRleHRUcmFja0N1ZUxp
c3QqIGN1ZXMpCiB7CiAgICAgVHJhY2tEaXNwbGF5VXBkYXRlU2NvcGUgc2NvcGUodGhpcyk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjdWVzLT5sZW5ndGgoKTsgKytpKQpAQCAtMzU3Miw3
ICszNTc0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckRpZEFkZFRleHRU
cmFjayhQYXNzUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXYKICAgICAvLyA5LiBGaXJlIGFuIGV2
ZW50IHdpdGggdGhlIG5hbWUgYWRkdHJhY2ssIHRoYXQgZG9lcyBub3QgYnViYmxlIGFuZCBpcyBu
b3QgY2FuY2VsYWJsZSwgYW5kIHRoYXQgdXNlcyB0aGUgVHJhY2tFdmVudAogICAgIC8vIGludGVy
ZmFjZSwgd2l0aCB0aGUgdHJhY2sgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSB0ZXh0IHRy
YWNrJ3MgVGV4dFRyYWNrIG9iamVjdCwgYXQgdGhlIG1lZGlhIGVsZW1lbnQncwogICAgIC8vIHRl
eHRUcmFja3MgYXR0cmlidXRlJ3MgVGV4dFRyYWNrTGlzdCBvYmplY3QuCi0gICAgYWRkVGV4dFRy
YWNrKHRleHRUcmFjay5yZWxlYXNlKCkpOworICAgIGFkZFRleHRUcmFjayh0ZXh0VHJhY2sucmVs
ZWFzZU5vbk51bGwoKSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJE
aWRBZGRWaWRlb1RyYWNrKFBhc3NSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGU+IHBycFRyYWNrKQpA
QCAtMzYwMSwxMiArMzYwMywxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNsb3NlQ2FwdGlv
blRyYWNrc0NoYW5nZWQoKQogICAgICAgICBtZWRpYUNvbnRyb2xzKCktPmNsb3NlZENhcHRpb25U
cmFja3NDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YWRkQXVkaW9UcmFj
ayhQYXNzUmVmUHRyPEF1ZGlvVHJhY2s+IHRyYWNrKQordm9pZCBIVE1MTWVkaWFFbGVtZW50Ojph
ZGRBdWRpb1RyYWNrKFJlZjxBdWRpb1RyYWNrPiYmIHRyYWNrKQogewotICAgIGF1ZGlvVHJhY2tz
KCktPmFwcGVuZCh0cmFjayk7CisgICAgYXVkaW9UcmFja3MoKS5hcHBlbmQoV1RGTW92ZSh0cmFj
aykpOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhQYXNzUmVmUHRy
PFRleHRUcmFjaz4gdHJhY2spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhS
ZWY8VGV4dFRyYWNrPiYmIHRyYWNrKQogewogICAgIGlmICghbV9yZXF1aXJlQ2FwdGlvblByZWZl
cmVuY2VzQ2hhbmdlZENhbGxiYWNrcykgewogICAgICAgICBtX3JlcXVpcmVDYXB0aW9uUHJlZmVy
ZW5jZXNDaGFuZ2VkQ2FsbGJhY2tzID0gdHJ1ZTsKQEAgLTM2MTYsMzQgKzM2MTgsMzQgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2soUGFzc1JlZlB0cjxUZXh0VHJhY2s+IHRy
YWNrKQogICAgICAgICAgICAgbV9jYXB0aW9uRGlzcGxheU1vZGUgPSBwYWdlLT5ncm91cCgpLmNh
cHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25EaXNwbGF5TW9kZSgpOwogICAgIH0KIAotICAgIHRl
eHRUcmFja3MoKS0+YXBwZW5kKHRyYWNrKTsKKyAgICB0ZXh0VHJhY2tzKCkuYXBwZW5kKFdURk1v
dmUodHJhY2spKTsKIAogICAgIGNsb3NlQ2FwdGlvblRyYWNrc0NoYW5nZWQoKTsKIH0KIAotdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjphZGRWaWRlb1RyYWNrKFBhc3NSZWZQdHI8VmlkZW9UcmFjaz4g
dHJhY2spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFZpZGVvVHJhY2soUmVmPFZpZGVvVHJh
Y2s+JiYgdHJhY2spCiB7Ci0gICAgdmlkZW9UcmFja3MoKS0+YXBwZW5kKHRyYWNrKTsKKyAgICB2
aWRlb1RyYWNrcygpLmFwcGVuZChXVEZNb3ZlKHRyYWNrKSk7CiB9CiAKLXZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6cmVtb3ZlQXVkaW9UcmFjayhBdWRpb1RyYWNrKiB0cmFjaykKK3ZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6cmVtb3ZlQXVkaW9UcmFjayhBdWRpb1RyYWNrJiB0cmFjaykKIHsKICAgICBt
X2F1ZGlvVHJhY2tzLT5yZW1vdmUodHJhY2spOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnJlbW92ZVRleHRUcmFjayhUZXh0VHJhY2sqIHRyYWNrLCBib29sIHNjaGVkdWxlRXZlbnQpCit2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZVRleHRUcmFjayhUZXh0VHJhY2smIHRyYWNrLCBi
b29sIHNjaGVkdWxlRXZlbnQpCiB7CiAgICAgVHJhY2tEaXNwbGF5VXBkYXRlU2NvcGUgc2NvcGUo
dGhpcyk7Ci0gICAgaWYgKFRleHRUcmFja0N1ZUxpc3QqIGN1ZXMgPSB0cmFjay0+Y3VlcygpKQot
ICAgICAgICB0ZXh0VHJhY2tSZW1vdmVDdWVzKHRyYWNrLCBjdWVzKTsKLSAgICB0cmFjay0+Y2xl
YXJDbGllbnQoKTsKKyAgICBpZiAoVGV4dFRyYWNrQ3VlTGlzdCogY3VlcyA9IHRyYWNrLmN1ZXMo
KSkKKyAgICAgICAgdGV4dFRyYWNrUmVtb3ZlQ3VlcygmdHJhY2ssIGN1ZXMpOworICAgIHRyYWNr
LmNsZWFyQ2xpZW50KCk7CiAgICAgaWYgKG1fdGV4dFRyYWNrcykKICAgICAgICAgbV90ZXh0VHJh
Y2tzLT5yZW1vdmUodHJhY2ssIHNjaGVkdWxlRXZlbnQpOwogCiAgICAgY2xvc2VDYXB0aW9uVHJh
Y2tzQ2hhbmdlZCgpOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZVZpZGVvVHJh
Y2soVmlkZW9UcmFjayogdHJhY2spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZVZpZGVv
VHJhY2soVmlkZW9UcmFjayYgdHJhY2spCiB7CiAgICAgbV92aWRlb1RyYWNrcy0+cmVtb3ZlKHRy
YWNrKTsKIH0KQEAgLTM2NTEsMjAgKzM2NTMsMTkgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpy
ZW1vdmVWaWRlb1RyYWNrKFZpZGVvVHJhY2sqIHRyYWNrKQogdm9pZCBIVE1MTWVkaWFFbGVtZW50
Ojpmb3JnZXRSZXNvdXJjZVNwZWNpZmljVHJhY2tzKCkKIHsKICAgICB3aGlsZSAobV9hdWRpb1Ry
YWNrcyAmJiAgbV9hdWRpb1RyYWNrcy0+bGVuZ3RoKCkpCi0gICAgICAgIHJlbW92ZUF1ZGlvVHJh
Y2sobV9hdWRpb1RyYWNrcy0+bGFzdEl0ZW0oKSk7CisgICAgICAgIHJlbW92ZUF1ZGlvVHJhY2so
Km1fYXVkaW9UcmFja3MtPmxhc3RJdGVtKCkpOwogCiAgICAgaWYgKG1fdGV4dFRyYWNrcykgewog
ICAgICAgICBUcmFja0Rpc3BsYXlVcGRhdGVTY29wZSBzY29wZSh0aGlzKTsKICAgICAgICAgZm9y
IChpbnQgaSA9IG1fdGV4dFRyYWNrcy0+bGVuZ3RoKCkgLSAxOyBpID49IDA7IC0taSkgewotICAg
ICAgICAgICAgVGV4dFRyYWNrKiB0cmFjayA9IG1fdGV4dFRyYWNrcy0+aXRlbShpKTsKLQotICAg
ICAgICAgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OkluQmFuZCkKKyAg
ICAgICAgICAgIGF1dG8mIHRyYWNrID0gKm1fdGV4dFRyYWNrcy0+aXRlbShpKTsKKyAgICAgICAg
ICAgIGlmICh0cmFjay50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OkluQmFuZCkKICAgICAgICAg
ICAgICAgICByZW1vdmVUZXh0VHJhY2sodHJhY2ssIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIHdoaWxlIChtX3ZpZGVvVHJhY2tzICYmICBtX3ZpZGVvVHJhY2tzLT5sZW5ndGgoKSkK
LSAgICAgICAgcmVtb3ZlVmlkZW9UcmFjayhtX3ZpZGVvVHJhY2tzLT5sYXN0SXRlbSgpKTsKKyAg
ICAgICAgcmVtb3ZlVmlkZW9UcmFjaygqbV92aWRlb1RyYWNrcy0+bGFzdEl0ZW0oKSk7CiB9CiAK
IFJlZlB0cjxUZXh0VHJhY2s+IEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhjb25zdCBT
dHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMzY5MCw3ICszNjkxLDcgQEAgUmVmUHRyPFRleHRUcmFj
az4gSFRNTE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKGNvbnN0IFN0cmluZyYga2luZCwgY29u
c3QgU3RyaW4KICAgICAvLyBmaXJzdCBhcHBlbmQgdGhlIHRyYWNrIHRvIHRoZSB0ZXh0IHRyYWNr
IGxpc3QuCiAKICAgICAvLyA2LiBBZGQgdGhlIG5ldyB0ZXh0IHRyYWNrIHRvIHRoZSBtZWRpYSBl
bGVtZW50J3MgbGlzdCBvZiB0ZXh0IHRyYWNrcy4KLSAgICBhZGRUZXh0VHJhY2sodGV4dFRyYWNr
LnB0cigpKTsKKyAgICBhZGRUZXh0VHJhY2sodGV4dFRyYWNrLmNvcHlSZWYoKSk7CiAKICAgICAv
LyAuLi4gaXRzIHRleHQgdHJhY2sgcmVhZGluZXNzIHN0YXRlIHRvIHRoZSB0ZXh0IHRyYWNrIGxv
YWRlZCBzdGF0ZSAuLi4KICAgICB0ZXh0VHJhY2stPnNldFJlYWRpbmVzc1N0YXRlKFRleHRUcmFj
azo6TG9hZGVkKTsKQEAgLTM3MDEsMjggKzM3MDIsMjggQEAgUmVmUHRyPFRleHRUcmFjaz4gSFRN
TE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3Ry
aW4KICAgICByZXR1cm4gV1RGTW92ZSh0ZXh0VHJhY2spOwogfQogCi1BdWRpb1RyYWNrTGlzdCog
SFRNTE1lZGlhRWxlbWVudDo6YXVkaW9UcmFja3MoKQorQXVkaW9UcmFja0xpc3QmIEhUTUxNZWRp
YUVsZW1lbnQ6OmF1ZGlvVHJhY2tzKCkKIHsKICAgICBpZiAoIW1fYXVkaW9UcmFja3MpCiAgICAg
ICAgIG1fYXVkaW9UcmFja3MgPSBBdWRpb1RyYWNrTGlzdDo6Y3JlYXRlKHRoaXMsIEFjdGl2ZURP
TU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIAotICAgIHJldHVybiBtX2F1ZGlv
VHJhY2tzLmdldCgpOworICAgIHJldHVybiAqbV9hdWRpb1RyYWNrczsKIH0KIAotVGV4dFRyYWNr
TGlzdCogSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrcygpIAorVGV4dFRyYWNrTGlzdCYgSFRN
TE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrcygpCiB7CiAgICAgaWYgKCFtX3RleHRUcmFja3MpCiAg
ICAgICAgIG1fdGV4dFRyYWNrcyA9IFRleHRUcmFja0xpc3Q6OmNyZWF0ZSh0aGlzLCBBY3RpdmVE
T01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAKLSAgICByZXR1cm4gbV90ZXh0
VHJhY2tzLmdldCgpOworICAgIHJldHVybiAqbV90ZXh0VHJhY2tzOwogfQogCi1WaWRlb1RyYWNr
TGlzdCogSFRNTE1lZGlhRWxlbWVudDo6dmlkZW9UcmFja3MoKQorVmlkZW9UcmFja0xpc3QmIEhU
TUxNZWRpYUVsZW1lbnQ6OnZpZGVvVHJhY2tzKCkKIHsKICAgICBpZiAoIW1fdmlkZW9UcmFja3Mp
CiAgICAgICAgIG1fdmlkZW9UcmFja3MgPSBWaWRlb1RyYWNrTGlzdDo6Y3JlYXRlKHRoaXMsIEFj
dGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIAotICAgIHJldHVybiBt
X3ZpZGVvVHJhY2tzLmdldCgpOworICAgIHJldHVybiAqbV92aWRlb1RyYWNrczsKIH0KIAogdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRUZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCogdHJh
Y2tFbGVtZW50KQpAQCAtMzczNyw3ICszNzM4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpk
aWRBZGRUZXh0VHJhY2soSFRNTFRyYWNrRWxlbWVudCogdHJhY2tFbGVtZW50KQogICAgIGlmICgh
dGV4dFRyYWNrKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkVGV4dFRyYWNrKHRleHRU
cmFjay5yZWxlYXNlKCkpOworICAgIGFkZFRleHRUcmFjayh0ZXh0VHJhY2sucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgCiAgICAgLy8gRG8gbm90IHNjaGVkdWxlIHRoZSB0cmFjayBsb2FkaW5nIHVu
dGlsIHBhcnNpbmcgZmluaXNoZXMgc28gd2UgZG9uJ3Qgc3RhcnQgYmVmb3JlIGFsbCB0cmFja3MK
ICAgICAvLyBpbiB0aGUgbWFya3VwIGhhdmUgYmVlbiBhZGRlZC4KQEAgLTM3NzIsNyArMzc3Myw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkUmVtb3ZlVGV4dFRyYWNrKEhUTUxUcmFja0Vs
ZW1lbnQqIHRyYWNrRWxlbWVudCkKICAgICAvLyBXaGVuIGEgdHJhY2sgZWxlbWVudCdzIHBhcmVu
dCBlbGVtZW50IGNoYW5nZXMgYW5kIHRoZSBvbGQgcGFyZW50IHdhcyBhIG1lZGlhIGVsZW1lbnQs
IAogICAgIC8vIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdCByZW1vdmUgdGhlIHRyYWNrIGVsZW1l
bnQncyBjb3JyZXNwb25kaW5nIHRleHQgdHJhY2sgZnJvbSB0aGUgCiAgICAgLy8gbWVkaWEgZWxl
bWVudCdzIGxpc3Qgb2YgdGV4dCB0cmFja3MuCi0gICAgcmVtb3ZlVGV4dFRyYWNrKHRleHRUcmFj
ay5nZXQoKSk7CisgICAgcmVtb3ZlVGV4dFRyYWNrKCp0ZXh0VHJhY2spOwogCiAgICAgc2l6ZV90
IGluZGV4ID0gbV90ZXh0VHJhY2tzV2hlblJlc291cmNlU2VsZWN0aW9uQmVnYW4uZmluZCh0ZXh0
VHJhY2suZ2V0KCkpOwogICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKQEAgLTQwMDIsMjQgKzQw
MDMsMjQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp2aXNpYmlsaXR5RGlkQ2hhbmdlKCkKIAog
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRUcmFjayhUZXh0VHJhY2sqIHRy
YWNrVG9TZWxlY3QpCiB7Ci0gICAgVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0ID0gdGV4dFRyYWNr
cygpOwotICAgIGlmICghdHJhY2tMaXN0IHx8ICF0cmFja0xpc3QtPmxlbmd0aCgpKQorICAgIFRl
eHRUcmFja0xpc3QmIHRyYWNrTGlzdCA9IHRleHRUcmFja3MoKTsKKyAgICBpZiAoIXRyYWNrTGlz
dC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHRyYWNrVG9TZWxlY3QgIT0g
VGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSAmJiB0cmFja1RvU2VsZWN0ICE9IFRleHRU
cmFjazo6Y2FwdGlvbk1lbnVBdXRvbWF0aWNJdGVtKCkpIHsKLSAgICAgICAgaWYgKCF0cmFja0xp
c3QtPmNvbnRhaW5zKHRyYWNrVG9TZWxlY3QpKQorICAgICAgICBpZiAoIXRyYWNrVG9TZWxlY3Qg
fHwgIXRyYWNrTGlzdC5jb250YWlucygqdHJhY2tUb1NlbGVjdCkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMCwgbGVuZ3RoID0gdHJhY2tMaXN0
LT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBUZXh0VHJhY2sqIHRy
YWNrID0gdHJhY2tMaXN0LT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKCF0cmFja1RvU2VsZWN0
IHx8IHRyYWNrICE9IHRyYWNrVG9TZWxlY3QpCisgICAgICAgIGZvciAoaW50IGkgPSAwLCBsZW5n
dGggPSB0cmFja0xpc3QubGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
VGV4dFRyYWNrKiB0cmFjayA9IHRyYWNrTGlzdC5pdGVtKGkpOworICAgICAgICAgICAgaWYgKHRy
YWNrICE9IHRyYWNrVG9TZWxlY3QpCiAgICAgICAgICAgICAgICAgdHJhY2stPnNldE1vZGUoVGV4
dFRyYWNrOjpNb2RlOjpEaXNhYmxlZCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgdHJhY2stPnNldE1vZGUoVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSBpZiAodHJhY2tUb1NlbGVjdCA9PSBUZXh0VHJhY2s6OmNhcHRpb25NZW51T2Zm
SXRlbSgpKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwLCBsZW5ndGggPSB0cmFja0xpc3QtPmxl
bmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0cmFja0xpc3QtPml0ZW0oaSkt
PnNldE1vZGUoVGV4dFRyYWNrOjpNb2RlOjpEaXNhYmxlZCk7CisgICAgICAgIGZvciAoaW50IGkg
PSAwLCBsZW5ndGggPSB0cmFja0xpc3QubGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIHRyYWNrTGlzdC5pdGVtKGkpLT5zZXRNb2RlKFRleHRUcmFjazo6TW9kZTo6RGlzYWJs
ZWQpOwogICAgIH0KIAogICAgIGlmICghZG9jdW1lbnQoKS5wYWdlKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IGI0MzFiMGM3Mjc1NDFkYTAwZDAyMTkwOTQ3ZGY2
ZjFkZGQxZDQ3YzEuLmU1MmU4Nzk4ZTQ0YmFlNzQ0YjVmOTk4MzVkMjc3NzMzOGJjMzc5ODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC0yODAsMTggKzI4MCwxOCBA
QCBwdWJsaWM6CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIFJlZlB0cjxUZXh0VHJhY2s+
IGFkZFRleHRUcmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGNv
bnN0IFN0cmluZyYgbGFuZ3VhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIEF1ZGlvVHJhY2tM
aXN0KiBhdWRpb1RyYWNrcygpOwotICAgIFRleHRUcmFja0xpc3QqIHRleHRUcmFja3MoKTsKLSAg
ICBWaWRlb1RyYWNrTGlzdCogdmlkZW9UcmFja3MoKTsKKyAgICBBdWRpb1RyYWNrTGlzdCYgYXVk
aW9UcmFja3MoKTsKKyAgICBUZXh0VHJhY2tMaXN0JiB0ZXh0VHJhY2tzKCk7CisgICAgVmlkZW9U
cmFja0xpc3QmIHZpZGVvVHJhY2tzKCk7CiAKICAgICBDdWVMaXN0IGN1cnJlbnRseUFjdGl2ZUN1
ZXMoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRseUFjdGl2ZUN1ZXM7IH0KIAotICAgIHZvaWQg
YWRkQXVkaW9UcmFjayhQYXNzUmVmUHRyPEF1ZGlvVHJhY2s+KTsKLSAgICB2b2lkIGFkZFRleHRU
cmFjayhQYXNzUmVmUHRyPFRleHRUcmFjaz4pOwotICAgIHZvaWQgYWRkVmlkZW9UcmFjayhQYXNz
UmVmUHRyPFZpZGVvVHJhY2s+KTsKLSAgICB2b2lkIHJlbW92ZUF1ZGlvVHJhY2soQXVkaW9UcmFj
ayopOwotICAgIHZvaWQgcmVtb3ZlVGV4dFRyYWNrKFRleHRUcmFjayosIGJvb2wgc2NoZWR1bGVF
dmVudCA9IHRydWUpOwotICAgIHZvaWQgcmVtb3ZlVmlkZW9UcmFjayhWaWRlb1RyYWNrKik7Cisg
ICAgdm9pZCBhZGRBdWRpb1RyYWNrKFJlZjxBdWRpb1RyYWNrPiYmKTsKKyAgICB2b2lkIGFkZFRl
eHRUcmFjayhSZWY8VGV4dFRyYWNrPiYmKTsKKyAgICB2b2lkIGFkZFZpZGVvVHJhY2soUmVmPFZp
ZGVvVHJhY2s+JiYpOworICAgIHZvaWQgcmVtb3ZlQXVkaW9UcmFjayhBdWRpb1RyYWNrJik7Cisg
ICAgdm9pZCByZW1vdmVUZXh0VHJhY2soVGV4dFRyYWNrJiwgYm9vbCBzY2hlZHVsZUV2ZW50ID0g
dHJ1ZSk7CisgICAgdm9pZCByZW1vdmVWaWRlb1RyYWNrKFZpZGVvVHJhY2smKTsKICAgICB2b2lk
IGZvcmdldFJlc291cmNlU3BlY2lmaWNUcmFja3MoKTsKICAgICB2b2lkIGNsb3NlQ2FwdGlvblRy
YWNrc0NoYW5nZWQoKTsKICAgICB2b2lkIG5vdGlmeU1lZGlhUGxheWVyT2ZUZXh0VHJhY2tDaGFu
Z2VzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKaW5kZXggYzlmNGE0OTc3MTgyNTFlMzZmZTBlMWEyODNkMmVjNzQxNjNhZGVk
MC4uMmVmMGU4NjU3MzBhOGRkM2UzMDBiNDY2Y2Q1ZGQxZjk2YmIwMmZlYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAt
NzM0LDggKzczNCw3IEBAIHZvaWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RF
bGVtZW50Ojp1cGRhdGVEaXNwbGF5KCkKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVGV4dFRyYWNrTGlzdCogdHJhY2tMaXN0ID0gbWVkaWFFbGVtZW50LT50
ZXh0VHJhY2tzKCk7Ci0gICAgaWYgKCF0cmFja0xpc3QgfHwgIXRyYWNrTGlzdC0+bGVuZ3RoKCkp
CisgICAgaWYgKCFtZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS5sZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgcmVidWlsZFRyYWNrTGlzdE1lbnUoKTsKQEAgLTc5NiwxNCArNzk1LDE0
IEBAIHZvaWQgTWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50OjpyZWJ1
aWxkVHJhY2tMaXN0TWVudSgpCiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1lZGlhRWxlbWVudC0+dGV4dFRy
YWNrcygpOwotICAgIGlmICghdHJhY2tMaXN0IHx8ICF0cmFja0xpc3QtPmxlbmd0aCgpKQorICAg
IFRleHRUcmFja0xpc3QmIHRyYWNrTGlzdCA9IG1lZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpOwor
ICAgIGlmICghdHJhY2tMaXN0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
IWRvY3VtZW50KCkucGFnZSgpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byYgY2FwdGlvblBy
ZWZlcmVuY2VzID0gZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2Vz
KCk7Ci0gICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiB0cmFja3NGb3JNZW51ID0gY2FwdGlv
blByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodHJhY2tMaXN0KTsKKyAgICBWZWN0
b3I8UmVmUHRyPFRleHRUcmFjaz4+IHRyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMu
c29ydGVkVHJhY2tMaXN0Rm9yTWVudSgmdHJhY2tMaXN0KTsKIAogICAgIGF1dG8gY2FwdGlvbnNI
ZWFkZXIgPSBkb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQoaDNUYWcsIEFTU0VSVF9OT19FWENFUFRJ
T04pOwogICAgIGNhcHRpb25zSGVhZGVyLT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLmNyZWF0ZVRl
eHROb2RlKHRleHRUcmFja1N1YnRpdGxlc1RleHQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svQXVkaW9UcmFjay5jcHAKaW5kZXggNWFmNDc2MTQ5ZDE5MTAzYmUyNTc4MDljZjhkMDQyMmJj
Y2QzZjVhNi4uOGMzNTZmNzkxNWQ0OThjZTM0MTJmNzk4ODJmOGQwNjBiMDg1NjE5MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2suY3BwCkBAIC05MCw3ICs5MCw3IEBAIEF1
ZGlvVHJhY2s6OkF1ZGlvVHJhY2soQXVkaW9UcmFja0NsaWVudCogY2xpZW50LCBQYXNzUmVmUHRy
PEF1ZGlvVHJhY2tQcml2YXRlPiB0CiAKIEF1ZGlvVHJhY2s6On5BdWRpb1RyYWNrKCkKIHsKLSAg
ICBtX3ByaXZhdGUtPnNldENsaWVudCgwKTsKKyAgICBtX3ByaXZhdGUtPnNldENsaWVudChudWxs
cHRyKTsKIH0KIAogdm9pZCBBdWRpb1RyYWNrOjpzZXRQcml2YXRlKFBhc3NSZWZQdHI8QXVkaW9U
cmFja1ByaXZhdGU+IHRyYWNrUHJpdmF0ZSkKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIEF1ZGlv
VHJhY2s6OnNldFByaXZhdGUoUGFzc1JlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZT4gdHJhY2tQcml2
YXRlKQogICAgIGlmIChtX3ByaXZhdGUgPT0gdHJhY2tQcml2YXRlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX3ByaXZhdGUtPnNldENsaWVudCgwKTsKKyAgICBtX3ByaXZhdGUtPnNldENsaWVu
dChudWxscHRyKTsKICAgICBtX3ByaXZhdGUgPSB0cmFja1ByaXZhdGU7CiAgICAgbV9wcml2YXRl
LT5zZXRDbGllbnQodGhpcyk7CiAKQEAgLTExMSwyMCArMTExLDEyIEBAIHZvaWQgQXVkaW9UcmFj
azo6c2V0UHJpdmF0ZShQYXNzUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlPiB0cmFja1ByaXZhdGUp
CiAKIGJvb2wgQXVkaW9UcmFjazo6aXNWYWxpZEtpbmQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSkgY29uc3QKIHsKLSAgICBpZiAodmFsdWUgPT0gYWx0ZXJuYXRpdmVLZXl3b3JkKCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSBkZXNjcmlwdGlvbktleXdvcmQoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09IG1haW5LZXl3b3JkKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSBtYWluRGVzY0tleXdvcmQoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09IHRyYW5zbGF0aW9uS2V5d29y
ZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodmFsdWUgPT0gY29tbWVudGFyeUtl
eXdvcmQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHZhbHVlID09IGFsdGVybmF0aXZlS2V5d29yZCgpCisgICAgICAgIHx8IHZhbHVlID09
IGRlc2NyaXB0aW9uS2V5d29yZCgpCisgICAgICAgIHx8IHZhbHVlID09IG1haW5LZXl3b3JkKCkK
KyAgICAgICAgfHwgdmFsdWUgPT0gbWFpbkRlc2NLZXl3b3JkKCkKKyAgICAgICAgfHwgdmFsdWUg
PT0gdHJhbnNsYXRpb25LZXl3b3JkKCkKKyAgICAgICAgfHwgdmFsdWUgPT0gY29tbWVudGFyeUtl
eXdvcmQoKTsKIH0KIAogdm9pZCBBdWRpb1RyYWNrOjpzZXRFbmFibGVkKGNvbnN0IGJvb2wgZW5h
YmxlZCkKQEAgLTE3NSw3ICsxNjcsNyBAQCB2b2lkIEF1ZGlvVHJhY2s6Omxhbmd1YWdlQ2hhbmdl
ZChUcmFja1ByaXZhdGVCYXNlKiB0cmFja1ByaXZhdGUsIGNvbnN0IEF0b21pY1N0cgogdm9pZCBB
dWRpb1RyYWNrOjp3aWxsUmVtb3ZlKFRyYWNrUHJpdmF0ZUJhc2UqIHRyYWNrUHJpdmF0ZSkKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKHRyYWNrUHJpdmF0ZSwgdHJhY2tQcml2YXRlID09IG1fcHJpdmF0
ZSk7Ci0gICAgbWVkaWFFbGVtZW50KCktPnJlbW92ZUF1ZGlvVHJhY2sodGhpcyk7CisgICAgbWVk
aWFFbGVtZW50KCktPnJlbW92ZUF1ZGlvVHJhY2soKnRoaXMpOwogfQogCiB2b2lkIEF1ZGlvVHJh
Y2s6OnVwZGF0ZUtpbmRGcm9tUHJpdmF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0F1ZGlvVHJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9U
cmFjay5oCmluZGV4IDJmMzk0MTU1ZDc2ZjRkYzE2ZjY3MjNiNTYzZTM5OWM0ZThmYWMzZjIuLjcw
NTg5YzI1MzljNThiN2Y4MTU3MzAyZWY0YTU3ZWJkMGY5Y2Q1Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svQXVkaW9UcmFjay5oCkBAIC05MywxMiArOTMsMTAgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8QXVkaW9UcmFja1ByaXZhdGU+IG1fcHJpdmF0ZTsKIH07CiAKLWlubGluZSBBdWRpb1Ry
YWNrKiB0b0F1ZGlvVHJhY2soVHJhY2tCYXNlKiB0cmFjaykKLXsKLSAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTih0cmFjay0+dHlwZSgpID09IFRyYWNrQmFzZTo6QXVkaW9UcmFj
ayk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEF1ZGlvVHJhY2sqPih0cmFjayk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpBdWRpb1RyYWNrKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpU
cmFja0Jhc2UmIHRyYWNrKSB7IHJldHVybiB0cmFjay50eXBlKCkgPT0gV2ViQ29yZTo6VHJhY2tC
YXNlOjpBdWRpb1RyYWNrOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAppbmRleCA2
YWFhMzJlZmU1MTc3YTE3YTZhOWU2YWQ3NDMxNzUzNGVkNGJiMThjLi5mNjFlZjk0MThhZTAzYTNh
OGIyYTE5NTI0ZjI1N2FhZDE4OGQ1ZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0F1ZGlvVHJhY2tMaXN0LmNwcApAQCAtNDMsNDMgKzQzLDQwIEBAIEF1ZGlvVHJhY2tMaXN0Ojp+
QXVkaW9UcmFja0xpc3QoKQogewogfQogCi12b2lkIEF1ZGlvVHJhY2tMaXN0OjphcHBlbmQoUGFz
c1JlZlB0cjxBdWRpb1RyYWNrPiBwcnBUcmFjaykKK3ZvaWQgQXVkaW9UcmFja0xpc3Q6OmFwcGVu
ZChSZWY8QXVkaW9UcmFjaz4mJiB0cmFjaykKIHsKLSAgICBSZWZQdHI8QXVkaW9UcmFjaz4gdHJh
Y2sgPSBwcnBUcmFjazsKLQogICAgIC8vIEluc2VydCB0cmFja3MgaW4gdGhlIG1lZGlhIGZpbGUg
b3JkZXIuCiAgICAgc2l6ZV90IGluZGV4ID0gdHJhY2stPmluYmFuZFRyYWNrSW5kZXgoKTsKICAg
ICBzaXplX3QgaW5zZXJ0aW9uSW5kZXg7CiAgICAgZm9yIChpbnNlcnRpb25JbmRleCA9IDA7IGlu
c2VydGlvbkluZGV4IDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgpOyArK2luc2VydGlvbkluZGV4KSB7
Ci0gICAgICAgIEF1ZGlvVHJhY2sqIG90aGVyVHJhY2sgPSBzdGF0aWNfY2FzdDxBdWRpb1RyYWNr
Kj4obV9pbmJhbmRUcmFja3NbaW5zZXJ0aW9uSW5kZXhdLmdldCgpKTsKLSAgICAgICAgaWYgKG90
aGVyVHJhY2stPmluYmFuZFRyYWNrSW5kZXgoKSA+IGluZGV4KQorICAgICAgICBhdXRvJiBvdGhl
clRyYWNrID0gZG93bmNhc3Q8QXVkaW9UcmFjaz4oKm1faW5iYW5kVHJhY2tzW2luc2VydGlvbklu
ZGV4XSk7CisgICAgICAgIGlmIChvdGhlclRyYWNrLmluYmFuZFRyYWNrSW5kZXgoKSA+IGluZGV4
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIG1faW5iYW5kVHJhY2tzLmluc2VydChp
bnNlcnRpb25JbmRleCwgdHJhY2spOworICAgIG1faW5iYW5kVHJhY2tzLmluc2VydChpbnNlcnRp
b25JbmRleCwgdHJhY2sucHRyKCkpOwogCiAKICAgICBBU1NFUlQoIXRyYWNrLT5tZWRpYUVsZW1l
bnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50KCkgPT0gbWVkaWFFbGVtZW50KCkpOwogICAgIHRy
YWNrLT5zZXRNZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50KCkpOwogCi0gICAgc2NoZWR1bGVBZGRU
cmFja0V2ZW50KHRyYWNrLnJlbGVhc2UoKSk7CisgICAgc2NoZWR1bGVBZGRUcmFja0V2ZW50KFdU
Rk1vdmUodHJhY2spKTsKIH0KIAogQXVkaW9UcmFjayogQXVkaW9UcmFja0xpc3Q6Oml0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKGluZGV4IDwgbV9pbmJhbmRUcmFja3Muc2l6
ZSgpKQotICAgICAgICByZXR1cm4gdG9BdWRpb1RyYWNrKG1faW5iYW5kVHJhY2tzW2luZGV4XS5n
ZXQoKSk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEF1ZGlvVHJh
Y2s+KG1faW5iYW5kVHJhY2tzW2luZGV4XS5nZXQoKSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKIEF1ZGlvVHJhY2sqIEF1ZGlvVHJhY2tMaXN0OjpnZXRUcmFja0J5SWQoY29uc3QgQXRvbWlj
U3RyaW5nJiBpZCkgY29uc3QKIHsKICAgICBmb3IgKGF1dG8mIGluYmFuZFRyYWNrIDogbV9pbmJh
bmRUcmFja3MpIHsKLSAgICAgICAgQXVkaW9UcmFjayogdHJhY2sgPSB0b0F1ZGlvVHJhY2soaW5i
YW5kVHJhY2suZ2V0KCkpOwotICAgICAgICBpZiAodHJhY2stPmlkKCkgPT0gaWQpCi0gICAgICAg
ICAgICByZXR1cm4gdHJhY2s7CisgICAgICAgIGF1dG8mIHRyYWNrID0gZG93bmNhc3Q8QXVkaW9U
cmFjaz4oKmluYmFuZFRyYWNrKTsKKyAgICAgICAgaWYgKHRyYWNrLmlkKCkgPT0gaWQpCisgICAg
ICAgICAgICByZXR1cm4gJnRyYWNrOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAogRXZlbnRUYXJnZXRJbnRlcmZhY2UgQXVkaW9UcmFja0xpc3Q6OmV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svQXVkaW9UcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9U
cmFja0xpc3QuaAppbmRleCA1ODNiZmY3YTQyY2UyMDAwYjNmNjEzYmY4ZmE4MmJjNjMwOWIyNGE2
Li5iZjIyMTNkYWE3MGU1MjYzNjdjMzBmOWNmZTNkN2UxZTQ1NzcwNTM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5oCkBAIC00Niw3ICs0Niw3IEBAIHB1Ymxp
YzoKIAogICAgIEF1ZGlvVHJhY2sqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIEF1
ZGlvVHJhY2sqIGxhc3RJdGVtKCkgY29uc3QgeyByZXR1cm4gaXRlbShsZW5ndGgoKSAtIDEpOyB9
Ci0gICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxBdWRpb1RyYWNrPik7CisgICAgdm9pZCBhcHBl
bmQoUmVmPEF1ZGlvVHJhY2s+JiYpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICBFdmVudFRh
cmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCmluZGV4IGYwNjI4
NjJiNDVjZDk0MDY4OTBmZTdkNTAxNGVmMjM3ZGZmMTM4NTAuLmU3NzA5NDcxYWI1MWYyYjcyZDcz
MDFlYmI2Y2MxZDU4NDQzMzJhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svSW5iYW5kVGV4dFRyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0lu
YmFuZFRleHRUcmFjay5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIEluYmFuZFRleHRUcmFj
azo6d2lsbFJlbW92ZShUcmFja1ByaXZhdGVCYXNlKiB0cmFja1ByaXZhdGUpCiAgICAgaWYgKCFt
ZWRpYUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVF9VTlVTRUQodHJhY2tQ
cml2YXRlLCB0cmFja1ByaXZhdGUgPT0gbV9wcml2YXRlKTsKLSAgICBtZWRpYUVsZW1lbnQoKS0+
cmVtb3ZlVGV4dFRyYWNrKHRoaXMpOworICAgIG1lZGlhRWxlbWVudCgpLT5yZW1vdmVUZXh0VHJh
Y2soKnRoaXMpOwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFjazo6dXBkYXRlS2luZEZyb21Qcml2
YXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAppbmRleCAzMTg4Nzgx
ZGJmNWY0OTUwMjE3NDRhMDQzOGJjN2E3YjIzOTMwY2E5Li5hYjdhMmZmMThmMTk5MmU1MGRhYThl
ZTA3ODZkYTNlY2E4MTJlYTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2su
Y3BwCkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBUZXh0VHJhY2s6OnNldEtpbmQoS2luZCBuZXdL
aW5kKQogICAgIC8vIDQuIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVk
IGNoYW5nZSBhdCB0aGUgVGV4dFRyYWNrTGlzdCBvYmplY3QgcmVmZXJlbmNlZCBieQogICAgIC8v
IHRoZSB0ZXh0VHJhY2tzIGF0dHJpYnV0ZSBvbiB0aGUgSFRNTE1lZGlhRWxlbWVudC4KICAgICBp
ZiAobWVkaWFFbGVtZW50KCkpCi0gICAgICAgIG1lZGlhRWxlbWVudCgpLT50ZXh0VHJhY2tzKCkt
PnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKKyAgICAgICAgbWVkaWFFbGVtZW50KCktPnRleHRUcmFj
a3MoKS5zY2hlZHVsZUNoYW5nZUV2ZW50KCk7CiAjZW5kaWYKIAogICAgIGlmIChtX2NsaWVudCAm
JiBvbGRLaW5kICE9IG1fa2luZCkKQEAgLTQ1NCw3ICs0NTQsNyBAQCBpbnQgVGV4dFRyYWNrOjp0
cmFja0luZGV4KCkKICAgICBBU1NFUlQobV9tZWRpYUVsZW1lbnQpOwogCiAgICAgaWYgKG1fdHJh
Y2tJbmRleCA9PSBpbnZhbGlkVHJhY2tJbmRleCkKLSAgICAgICAgbV90cmFja0luZGV4ID0gbV9t
ZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS0+Z2V0VHJhY2tJbmRleCh0aGlzKTsKKyAgICAgICAg
bV90cmFja0luZGV4ID0gbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS5nZXRUcmFja0luZGV4
KCp0aGlzKTsKIAogICAgIHJldHVybiBtX3RyYWNrSW5kZXg7CiB9CkBAIC00ODMsNyArNDgzLDcg
QEAgaW50IFRleHRUcmFjazo6dHJhY2tJbmRleFJlbGF0aXZlVG9SZW5kZXJlZFRyYWNrcygpCiAg
ICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50KTsKICAgICAKICAgICBpZiAobV9yZW5kZXJlZFRyYWNr
SW5kZXggPT0gaW52YWxpZFRyYWNrSW5kZXgpCi0gICAgICAgIG1fcmVuZGVyZWRUcmFja0luZGV4
ID0gbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKS0+Z2V0VHJhY2tJbmRleFJlbGF0aXZlVG9S
ZW5kZXJlZFRyYWNrcyh0aGlzKTsKKyAgICAgICAgbV9yZW5kZXJlZFRyYWNrSW5kZXggPSBtX21l
ZGlhRWxlbWVudC0+dGV4dFRyYWNrcygpLmdldFRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRU
cmFja3MoKnRoaXMpOwogICAgIAogICAgIHJldHVybiBtX3JlbmRlcmVkVHJhY2tJbmRleDsKIH0K
QEAgLTU4MSw3ICs1ODEsNyBAQCB2b2lkIFRleHRUcmFjazo6c2V0TGFuZ3VhZ2UoY29uc3QgQXRv
bWljU3RyaW5nJiBsYW5ndWFnZSkKICAgICAvLyA0LiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNp
bXBsZSBldmVudCBuYW1lZCBjaGFuZ2UgYXQgdGhlIFRleHRUcmFja0xpc3Qgb2JqZWN0IHJlZmVy
ZW5jZWQgYnkKICAgICAvLyB0aGUgdGV4dFRyYWNrcyBhdHRyaWJ1dGUgb24gdGhlIEhUTUxNZWRp
YUVsZW1lbnQuCiAgICAgaWYgKG1lZGlhRWxlbWVudCgpKQotICAgICAgICBtZWRpYUVsZW1lbnQo
KS0+dGV4dFRyYWNrcygpLT5zY2hlZHVsZUNoYW5nZUV2ZW50KCk7CisgICAgICAgIG1lZGlhRWxl
bWVudCgpLT50ZXh0VHJhY2tzKCkuc2NoZWR1bGVDaGFuZ2VFdmVudCgpOwogfQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCmluZGV4IDc4MThkMjI0N2FhZDE2YTU1
MzNjMzMzNjM0MGJkZDhmYWVlYmU4NWEuLjRlZGUyMjlkN2UxMmY0ZmE0ZGNkY2VjMzc4YmZmYTdl
ZTA3NWFmOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaApAQCAtMTczLDEy
ICsxNzMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNCZWVuQ29uZmlndXJlZCB7IGZhbHNl
IH07CiB9OwogCi1pbmxpbmUgVGV4dFRyYWNrKiB0b1RleHRUcmFjayhUcmFja0Jhc2UqIHRyYWNr
KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHRyYWNrLT50eXBlKCkg
PT0gVHJhY2tCYXNlOjpUZXh0VHJhY2spOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0VHJh
Y2sqPih0cmFjayk7Ci19Ci0KIGlubGluZSBhdXRvIFRleHRUcmFjazo6bW9kZSgpIGNvbnN0IC0+
IE1vZGUKIHsKICAgICByZXR1cm4gbV9tb2RlOwpAQCAtMjE1LDQgKzIwOSw4IEBAIGlubGluZSB2
b2lkIFRleHRUcmFjazo6c2V0S2luZEZvckJpbmRpbmdzKEtpbmQga2luZCkKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRl
eHRUcmFjaykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6VHJhY2tCYXNl
JiB0cmFjaykgeyByZXR1cm4gdHJhY2sudHlwZSgpID09IFdlYkNvcmU6OlRyYWNrQmFzZTo6VGV4
dFRyYWNrOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAKaW5kZXggZmRiYmM0OWUwZjU4
Njc0ZTQ5NzI4MThiNWE2NjNjN2I5MjIxZWE1Yy4uMGVjYzBlOGExZmIyNjVmMmQ3MjY5YzE0OWMz
MDgyNDZjYzhjZjY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xp
c3QuY3BwCkBAIC01MSw1NiArNTEsNTEgQEAgdW5zaWduZWQgVGV4dFRyYWNrTGlzdDo6bGVuZ3Ro
KCkgY29uc3QKICAgICByZXR1cm4gbV9hZGRUcmFja1RyYWNrcy5zaXplKCkgKyBtX2VsZW1lbnRU
cmFja3Muc2l6ZSgpICsgbV9pbmJhbmRUcmFja3Muc2l6ZSgpOwogfQogCi1pbnQgVGV4dFRyYWNr
TGlzdDo6Z2V0VHJhY2tJbmRleChUZXh0VHJhY2sqIHRleHRUcmFjaykKK2ludCBUZXh0VHJhY2tM
aXN0OjpnZXRUcmFja0luZGV4KFRleHRUcmFjayYgdGV4dFRyYWNrKQogewogICAgIGlmIChpczxM
b2FkYWJsZVRleHRUcmFjaz4odGV4dFRyYWNrKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PExv
YWRhYmxlVGV4dFRyYWNrPigqdGV4dFRyYWNrKS50cmFja0VsZW1lbnRJbmRleCgpOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8TG9hZGFibGVUZXh0VHJhY2s+KHRleHRUcmFjaykudHJhY2tFbGVt
ZW50SW5kZXgoKTsKIAotICAgIGlmICh0ZXh0VHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFj
azo6QWRkVHJhY2spCi0gICAgICAgIHJldHVybiBtX2VsZW1lbnRUcmFja3Muc2l6ZSgpICsgbV9h
ZGRUcmFja1RyYWNrcy5maW5kKHRleHRUcmFjayk7CisgICAgaWYgKHRleHRUcmFjay50cmFja1R5
cGUoKSA9PSBUZXh0VHJhY2s6OkFkZFRyYWNrKQorICAgICAgICByZXR1cm4gbV9lbGVtZW50VHJh
Y2tzLnNpemUoKSArIG1fYWRkVHJhY2tUcmFja3MuZmluZCgmdGV4dFRyYWNrKTsKIAotICAgIGlm
ICh0ZXh0VHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5kKQotICAgICAgICBy
ZXR1cm4gbV9lbGVtZW50VHJhY2tzLnNpemUoKSArIG1fYWRkVHJhY2tUcmFja3Muc2l6ZSgpICsg
bV9pbmJhbmRUcmFja3MuZmluZCh0ZXh0VHJhY2spOworICAgIGlmICh0ZXh0VHJhY2sudHJhY2tU
eXBlKCkgPT0gVGV4dFRyYWNrOjpJbkJhbmQpCisgICAgICAgIHJldHVybiBtX2VsZW1lbnRUcmFj
a3Muc2l6ZSgpICsgbV9hZGRUcmFja1RyYWNrcy5zaXplKCkgKyBtX2luYmFuZFRyYWNrcy5maW5k
KCZ0ZXh0VHJhY2spOwogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKICAgICByZXR1cm4g
LTE7CiB9CiAKLWludCBUZXh0VHJhY2tMaXN0OjpnZXRUcmFja0luZGV4UmVsYXRpdmVUb1JlbmRl
cmVkVHJhY2tzKFRleHRUcmFjayAqdGV4dFRyYWNrKQoraW50IFRleHRUcmFja0xpc3Q6OmdldFRy
YWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRUcmFja3MoVGV4dFRyYWNrJiB0ZXh0VHJhY2spCiB7
CiAgICAgLy8gQ2FsY3VsYXRlIHRoZSAiTGV0IG4gYmUgdGhlIG51bWJlciBvZiB0ZXh0IHRyYWNr
cyB3aG9zZSB0ZXh0IHRyYWNrIG1vZGUgaXMgc2hvd2luZyBhbmQgdGhhdCBhcmUgaW4gdGhlIG1l
ZGlhIGVsZW1lbnQncyBsaXN0IG9mIHRleHQgdHJhY2tzIGJlZm9yZSB0cmFjay4iCiAgICAgaW50
IHRyYWNrSW5kZXggPSAwOwogCiAgICAgZm9yIChhdXRvJiBlbGVtZW50VHJhY2sgOiBtX2VsZW1l
bnRUcmFja3MpIHsKLSAgICAgICAgaWYgKCF0b1RleHRUcmFjayhlbGVtZW50VHJhY2suZ2V0KCkp
LT5pc1JlbmRlcmVkKCkpCisgICAgICAgIGlmICghZG93bmNhc3Q8VGV4dFRyYWNrPigqZWxlbWVu
dFRyYWNrKS5pc1JlbmRlcmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBp
ZiAoZWxlbWVudFRyYWNrID09IHRleHRUcmFjaykKKyAgICAgICAgaWYgKGVsZW1lbnRUcmFjayA9
PSAmdGV4dFRyYWNrKQogICAgICAgICAgICAgcmV0dXJuIHRyYWNrSW5kZXg7CiAgICAgICAgICsr
dHJhY2tJbmRleDsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGFkZFRyYWNrIDogbV9hZGRUcmFj
a1RyYWNrcykgewotICAgICAgICBpZiAoIXRvVGV4dFRyYWNrKGFkZFRyYWNrLmdldCgpKS0+aXNS
ZW5kZXJlZCgpKQorICAgICAgICBpZiAoIWRvd25jYXN0PFRleHRUcmFjaz4oKmFkZFRyYWNrKS5p
c1JlbmRlcmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoYWRkVHJh
Y2sgPT0gdGV4dFRyYWNrKQorICAgICAgICBpZiAoYWRkVHJhY2sgPT0gJnRleHRUcmFjaykKICAg
ICAgICAgICAgIHJldHVybiB0cmFja0luZGV4OwogICAgICAgICArK3RyYWNrSW5kZXg7CiAgICAg
fQogCiAgICAgZm9yIChhdXRvJiBpbmJhbmRUcmFjayA6IG1faW5iYW5kVHJhY2tzKSB7Ci0gICAg
ICAgIGlmICghdG9UZXh0VHJhY2soaW5iYW5kVHJhY2suZ2V0KCkpLT5pc1JlbmRlcmVkKCkpCisg
ICAgICAgIGlmICghZG93bmNhc3Q8VGV4dFRyYWNrPigqaW5iYW5kVHJhY2spLmlzUmVuZGVyZWQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChpbmJhbmRUcmFjayA9PSB0
ZXh0VHJhY2spCisgICAgICAgIGlmIChpbmJhbmRUcmFjayA9PSAmdGV4dFRyYWNrKQogICAgICAg
ICAgICAgcmV0dXJuIHRyYWNrSW5kZXg7CiAgICAgICAgICsrdHJhY2tJbmRleDsKICAgICB9Ci0K
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQogICAgIHJldHVybiAtMTsKIH0KIApAQCAtMTE0
LDE3ICsxMDksMTcgQEAgVGV4dFRyYWNrKiBUZXh0VHJhY2tMaXN0OjppdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAogICAgIC8vIHJlc291cmNlKSwgaW4gdGhlIG9yZGVyIGRlZmluZWQgYnkgdGhl
IG1lZGlhIHJlc291cmNlJ3MgZm9ybWF0IHNwZWNpZmljYXRpb24uCiAKICAgICBpZiAoaW5kZXgg
PCBtX2VsZW1lbnRUcmFja3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gdG9UZXh0VHJhY2sobV9l
bGVtZW50VHJhY2tzW2luZGV4XS5nZXQoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxUZXh0
VHJhY2s+KG1fZWxlbWVudFRyYWNrc1tpbmRleF0uZ2V0KCkpOwogCiAgICAgaW5kZXggLT0gbV9l
bGVtZW50VHJhY2tzLnNpemUoKTsKICAgICBpZiAoaW5kZXggPCBtX2FkZFRyYWNrVHJhY2tzLnNp
emUoKSkKLSAgICAgICAgcmV0dXJuIHRvVGV4dFRyYWNrKG1fYWRkVHJhY2tUcmFja3NbaW5kZXhd
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFRleHRUcmFjaz4obV9hZGRUcmFja1Ry
YWNrc1tpbmRleF0uZ2V0KCkpOwogCiAgICAgaW5kZXggLT0gbV9hZGRUcmFja1RyYWNrcy5zaXpl
KCk7CiAgICAgaWYgKGluZGV4IDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgpKQotICAgICAgICByZXR1
cm4gdG9UZXh0VHJhY2sobV9pbmJhbmRUcmFja3NbaW5kZXhdLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFRleHRUcmFjaz4obV9pbmJhbmRUcmFja3NbaW5kZXhdLmdldCgpKTsKIAot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBUZXh0VHJhY2sqIFRleHRU
cmFja0xpc3Q6OmdldFRyYWNrQnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKQpAQCAtMTM0LDEx
MCArMTI5LDEyMiBAQCBUZXh0VHJhY2sqIFRleHRUcmFja0xpc3Q6OmdldFRyYWNrQnlJZChjb25z
dCBBdG9taWNTdHJpbmcmIGlkKQogICAgIC8vIFRleHRUcmFja0xpc3Qgb2JqZWN0IHdob3NlIGlk
IElETCBhdHRyaWJ1dGUgd291bGQgcmV0dXJuIGEgdmFsdWUgZXF1YWwKICAgICAvLyB0byB0aGUg
dmFsdWUgb2YgdGhlIGlkIGFyZ3VtZW50LgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFRleHRUcmFjayogdHJhY2sgPSBpdGVtKGkpOwotICAg
ICAgICBpZiAodHJhY2stPmlkKCkgPT0gaWQpCi0gICAgICAgICAgICByZXR1cm4gdHJhY2s7Cisg
ICAgICAgIGF1dG8mIHRyYWNrID0gKml0ZW0oaSk7CisgICAgICAgIGlmICh0cmFjay5pZCgpID09
IGlkKQorICAgICAgICAgICAgcmV0dXJuICZ0cmFjazsKICAgICB9CiAKICAgICAvLyBXaGVuIG5v
IHRyYWNrcyBtYXRjaCB0aGUgZ2l2ZW4gYXJndW1lbnQsIHRoZSBtZXRob2QgbXVzdCByZXR1cm4g
bnVsbC4KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBUZXh0VHJhY2tMaXN0OjppbnZh
bGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayhUZXh0VHJhY2sqIHRyYWNrKQordm9pZCBUZXh0
VHJhY2tMaXN0OjppbnZhbGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayhUZXh0VHJhY2smIHRy
YWNrKQogewotICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNlPj4qIHRyYWNrcyA9IDA7CisgICAg
VmVjdG9yPFJlZlB0cjxUcmFja0Jhc2U+PiogdHJhY2tzID0gbnVsbHB0cjsKIAotICAgIGlmICh0
cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQpIHsKKyAgICBzd2l0
Y2ggKHRyYWNrLnRyYWNrVHlwZSgpKSB7CisgICAgY2FzZSBUZXh0VHJhY2s6OlRyYWNrRWxlbWVu
dDoKICAgICAgICAgdHJhY2tzID0gJm1fZWxlbWVudFRyYWNrczsKICAgICAgICAgZm9yIChhdXRv
JiBhZGRUcmFjayA6IG1fYWRkVHJhY2tUcmFja3MpCi0gICAgICAgICAgICB0b1RleHRUcmFjayhh
ZGRUcmFjay5nZXQoKSktPmludmFsaWRhdGVUcmFja0luZGV4KCk7CisgICAgICAgICAgICBkb3du
Y2FzdDxUZXh0VHJhY2s+KGFkZFRyYWNrLmdldCgpKS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsK
ICAgICAgICAgZm9yIChhdXRvJiBpbmJhbmRUcmFjayA6IG1faW5iYW5kVHJhY2tzKQotICAgICAg
ICAgICAgdG9UZXh0VHJhY2soaW5iYW5kVHJhY2suZ2V0KCkpLT5pbnZhbGlkYXRlVHJhY2tJbmRl
eCgpOwotICAgIH0gZWxzZSBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6QWRk
VHJhY2spIHsKKyAgICAgICAgICAgIGRvd25jYXN0PFRleHRUcmFjaz4oaW5iYW5kVHJhY2suZ2V0
KCkpLT5pbnZhbGlkYXRlVHJhY2tJbmRleCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRl
eHRUcmFjazo6QWRkVHJhY2s6CiAgICAgICAgIHRyYWNrcyA9ICZtX2FkZFRyYWNrVHJhY2tzOwog
ICAgICAgICBmb3IgKGF1dG8mIGluYmFuZFRyYWNrIDogbV9pbmJhbmRUcmFja3MpCi0gICAgICAg
ICAgICB0b1RleHRUcmFjayhpbmJhbmRUcmFjay5nZXQoKSktPmludmFsaWRhdGVUcmFja0luZGV4
KCk7Ci0gICAgfSBlbHNlIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpJbkJh
bmQpCisgICAgICAgICAgICBkb3duY2FzdDxUZXh0VHJhY2s+KGluYmFuZFRyYWNrLmdldCgpKS0+
aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0VHJh
Y2s6OkluQmFuZDoKICAgICAgICAgdHJhY2tzID0gJm1faW5iYW5kVHJhY2tzOwotICAgIGVsc2UK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQogCi0gICAgc2l6ZV90IGluZGV4ID0gdHJhY2tzLT5maW5kKHRyYWNrKTsKKyAg
ICBzaXplX3QgaW5kZXggPSB0cmFja3MtPmZpbmQoJnRyYWNrKTsKICAgICBpZiAoaW5kZXggPT0g
bm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsg
aSA8IHRyYWNrcy0+c2l6ZSgpOyArK2kpCi0gICAgICAgIHRvVGV4dFRyYWNrKHRyYWNrcy0+YXQo
aW5kZXgpLmdldCgpKS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsKKyAgICAgICAgZG93bmNhc3Q8
VGV4dFRyYWNrPigqdHJhY2tzLT5hdChpbmRleCkpLmludmFsaWRhdGVUcmFja0luZGV4KCk7CiB9
CiAKLXZvaWQgVGV4dFRyYWNrTGlzdDo6YXBwZW5kKFBhc3NSZWZQdHI8VGV4dFRyYWNrPiBwcnBU
cmFjaykKK3ZvaWQgVGV4dFRyYWNrTGlzdDo6YXBwZW5kKFJlZjxUZXh0VHJhY2s+JiYgdHJhY2sp
CiB7Ci0gICAgUmVmUHRyPFRleHRUcmFjaz4gdHJhY2sgPSBwcnBUcmFjazsKLQogICAgIGlmICh0
cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpBZGRUcmFjaykKLSAgICAgICAgbV9hZGRU
cmFja1RyYWNrcy5hcHBlbmQodHJhY2spOwotICAgIGVsc2UgaWYgKGlzPExvYWRhYmxlVGV4dFRy
YWNrPigqdHJhY2spKSB7CisgICAgICAgIG1fYWRkVHJhY2tUcmFja3MuYXBwZW5kKHRyYWNrLnB0
cigpKTsKKyAgICBlbHNlIGlmIChpczxMb2FkYWJsZVRleHRUcmFjaz4odHJhY2suZ2V0KCkpKSB7
CiAgICAgICAgIC8vIEluc2VydCB0cmFja3MgYWRkZWQgZm9yIDx0cmFjaz4gZWxlbWVudCBpbiB0
cmVlIG9yZGVyLgotICAgICAgICBzaXplX3QgaW5kZXggPSBkb3duY2FzdDxMb2FkYWJsZVRleHRU
cmFjaz4oKnRyYWNrKS50cmFja0VsZW1lbnRJbmRleCgpOwotICAgICAgICBtX2VsZW1lbnRUcmFj
a3MuaW5zZXJ0KGluZGV4LCB0cmFjayk7CisgICAgICAgIHNpemVfdCBpbmRleCA9IGRvd25jYXN0
PExvYWRhYmxlVGV4dFRyYWNrPih0cmFjay5nZXQoKSkudHJhY2tFbGVtZW50SW5kZXgoKTsKKyAg
ICAgICAgbV9lbGVtZW50VHJhY2tzLmluc2VydChpbmRleCwgdHJhY2sucHRyKCkpOwogICAgIH0g
ZWxzZSBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5kKSB7CiAgICAg
ICAgIC8vIEluc2VydCB0cmFja3MgYWRkZWQgZm9yIGluLWJhbmQgaW4gdGhlIG1lZGlhIGZpbGUg
b3JkZXIuCi0gICAgICAgIHNpemVfdCBpbmRleCA9IHN0YXRpY19jYXN0PEluYmFuZFRleHRUcmFj
ayo+KHRyYWNrLmdldCgpKS0+aW5iYW5kVHJhY2tJbmRleCgpOwotICAgICAgICBtX2luYmFuZFRy
YWNrcy5pbnNlcnQoaW5kZXgsIHRyYWNrKTsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gZG93bmNh
c3Q8SW5iYW5kVGV4dFRyYWNrPih0cmFjay5nZXQoKSkuaW5iYW5kVHJhY2tJbmRleCgpOworICAg
ICAgICBtX2luYmFuZFRyYWNrcy5pbnNlcnQoaW5kZXgsIHRyYWNrLnB0cigpKTsKICAgICB9IGVs
c2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKLSAgICBpbnZhbGlkYXRlVHJhY2tJ
bmRleGVzQWZ0ZXJUcmFjayh0cmFjay5nZXQoKSk7CisgICAgaW52YWxpZGF0ZVRyYWNrSW5kZXhl
c0FmdGVyVHJhY2sodHJhY2spOwogCiAgICAgQVNTRVJUKCF0cmFjay0+bWVkaWFFbGVtZW50KCkg
fHwgdHJhY2stPm1lZGlhRWxlbWVudCgpID09IG1lZGlhRWxlbWVudCgpKTsKICAgICB0cmFjay0+
c2V0TWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCgpKTsKIAotICAgIHNjaGVkdWxlQWRkVHJhY2tF
dmVudCh0cmFjay5yZWxlYXNlKCkpOworICAgIHNjaGVkdWxlQWRkVHJhY2tFdmVudChXVEZNb3Zl
KHRyYWNrKSk7CiB9CiAKLXZvaWQgVGV4dFRyYWNrTGlzdDo6cmVtb3ZlKFRyYWNrQmFzZSogdHJh
Y2ssIGJvb2wgc2NoZWR1bGVFdmVudCkKK3ZvaWQgVGV4dFRyYWNrTGlzdDo6cmVtb3ZlKFRyYWNr
QmFzZSYgdHJhY2ssIGJvb2wgc2NoZWR1bGVFdmVudCkKIHsKLSAgICBUZXh0VHJhY2sqIHRleHRU
cmFjayA9IHRvVGV4dFRyYWNrKHRyYWNrKTsKLSAgICBWZWN0b3I8UmVmUHRyPFRyYWNrQmFzZT4+
KiB0cmFja3MgPSAwOwotICAgIGlmICh0ZXh0VHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFj
azo6VHJhY2tFbGVtZW50KQorICAgIGF1dG8mIHRleHRUcmFjayA9IGRvd25jYXN0PFRleHRUcmFj
az4odHJhY2spOworICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNlPj4qIHRyYWNrcyA9IG51bGxw
dHI7CisgICAgc3dpdGNoICh0ZXh0VHJhY2sudHJhY2tUeXBlKCkpIHsKKyAgICBjYXNlIFRleHRU
cmFjazo6VHJhY2tFbGVtZW50OgogICAgICAgICB0cmFja3MgPSAmbV9lbGVtZW50VHJhY2tzOwot
ICAgIGVsc2UgaWYgKHRleHRUcmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpBZGRUcmFj
aykKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0VHJhY2s6OkFkZFRyYWNrOgogICAgICAg
ICB0cmFja3MgPSAmbV9hZGRUcmFja1RyYWNrczsKLSAgICBlbHNlIGlmICh0ZXh0VHJhY2stPnRy
YWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5kKQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IFRleHRUcmFjazo6SW5CYW5kOgogICAgICAgICB0cmFja3MgPSAmbV9pbmJhbmRUcmFja3M7Ci0g
ICAgZWxzZQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CiAKLSAgICBzaXplX3QgaW5kZXggPSB0cmFja3MtPmZpbmQodHJh
Y2spOworICAgIHNpemVfdCBpbmRleCA9IHRyYWNrcy0+ZmluZCgmdHJhY2spOwogICAgIGlmIChp
bmRleCA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW52YWxpZGF0ZVRyYWNr
SW5kZXhlc0FmdGVyVHJhY2sodGV4dFRyYWNrKTsKIAotICAgIEFTU0VSVCghdHJhY2stPm1lZGlh
RWxlbWVudCgpIHx8IHRyYWNrLT5tZWRpYUVsZW1lbnQoKSA9PSBlbGVtZW50KCkpOwotICAgIHRy
YWNrLT5zZXRNZWRpYUVsZW1lbnQoMCk7CisgICAgQVNTRVJUKCF0cmFjay5tZWRpYUVsZW1lbnQo
KSB8fCB0cmFjay5tZWRpYUVsZW1lbnQoKSA9PSBlbGVtZW50KCkpOworICAgIHRyYWNrLnNldE1l
ZGlhRWxlbWVudChudWxscHRyKTsKIAotICAgIFJlZlB0cjxUcmFja0Jhc2U+IHRyYWNrUmVmID0g
KCp0cmFja3MpW2luZGV4XTsKKyAgICBSZWY8VHJhY2tCYXNlPiB0cmFja1JlZiA9ICooKnRyYWNr
cylbaW5kZXhdOwogICAgIHRyYWNrcy0+cmVtb3ZlKGluZGV4KTsKIAogICAgIGlmIChzY2hlZHVs
ZUV2ZW50KQotICAgICAgICBzY2hlZHVsZVJlbW92ZVRyYWNrRXZlbnQodHJhY2tSZWYucmVsZWFz
ZSgpKTsKKyAgICAgICAgc2NoZWR1bGVSZW1vdmVUcmFja0V2ZW50KFdURk1vdmUodHJhY2tSZWYp
KTsKIH0KIAotYm9vbCBUZXh0VHJhY2tMaXN0Ojpjb250YWlucyhUcmFja0Jhc2UqIHRyYWNrKSBj
b25zdAorYm9vbCBUZXh0VHJhY2tMaXN0Ojpjb250YWlucyhUcmFja0Jhc2UmIHRyYWNrKSBjb25z
dAogewotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNlPj4qIHRyYWNrcyA9IDA7Ci0g
ICAgVGV4dFRyYWNrOjpUZXh0VHJhY2tUeXBlIHR5cGUgPSB0b1RleHRUcmFjayh0cmFjayktPnRy
YWNrVHlwZSgpOwotICAgIGlmICh0eXBlID09IFRleHRUcmFjazo6VHJhY2tFbGVtZW50KQorICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNlPj4qIHRyYWNrcyA9IG51bGxwdHI7CisgICAg
c3dpdGNoIChkb3duY2FzdDxUZXh0VHJhY2s+KHRyYWNrKS50cmFja1R5cGUoKSkgeworICAgIGNh
c2UgVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQ6CiAgICAgICAgIHRyYWNrcyA9ICZtX2VsZW1lbnRU
cmFja3M7Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBUZXh0VHJhY2s6OkFkZFRyYWNrKQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFRleHRUcmFjazo6QWRkVHJhY2s6CiAgICAgICAgIHRyYWNrcyA9
ICZtX2FkZFRyYWNrVHJhY2tzOwotICAgIGVsc2UgaWYgKHR5cGUgPT0gVGV4dFRyYWNrOjpJbkJh
bmQpCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dFRyYWNrOjpJbkJhbmQ6CiAgICAgICAg
IHRyYWNrcyA9ICZtX2luYmFuZFRyYWNrczsKLSAgICBlbHNlCisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KICAgICAKLSAg
ICByZXR1cm4gdHJhY2tzLT5maW5kKHRyYWNrKSAhPSBub3RGb3VuZDsKKyAgICByZXR1cm4gdHJh
Y2tzLT5maW5kKCZ0cmFjaykgIT0gbm90Rm91bmQ7CiB9CiAKIEV2ZW50VGFyZ2V0SW50ZXJmYWNl
IFRleHRUcmFja0xpc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmgKaW5kZXggMDQxZTIxODhkNjRmZmViY2EzOTVj
ZGVjZjY4OWU1NzhhMjg3NDczMC4uOTI5Nzg1NTA5NzRmYzI2YjczMzc0ZWNiODNmNmU1NGFlZGRh
ZTVjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmgKQEAgLTQz
LDE2ICs0MywxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGV4dFRyYWNrTGlzdCgpOwogCiAg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgaW50IGdldFRyYWNrSW5k
ZXgoVGV4dFRyYWNrKik7Ci0gICAgaW50IGdldFRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRU
cmFja3MoVGV4dFRyYWNrKik7Ci0gICAgYm9vbCBjb250YWlucyhUcmFja0Jhc2UqKSBjb25zdCBv
dmVycmlkZTsKKyAgICBpbnQgZ2V0VHJhY2tJbmRleChUZXh0VHJhY2smKTsKKyAgICBpbnQgZ2V0
VHJhY2tJbmRleFJlbGF0aXZlVG9SZW5kZXJlZFRyYWNrcyhUZXh0VHJhY2smKTsKKyAgICBib29s
IGNvbnRhaW5zKFRyYWNrQmFzZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVGV4dFRyYWNrKiBp
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAgICBUZXh0VHJhY2sqIGdldFRyYWNrQnlJZChj
b25zdCBBdG9taWNTdHJpbmcmKTsKICAgICBUZXh0VHJhY2sqIGxhc3RJdGVtKCkgY29uc3QgeyBy
ZXR1cm4gaXRlbShsZW5ndGgoKSAtIDEpOyB9CiAKLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRy
PFRleHRUcmFjaz4pOwotICAgIHZvaWQgcmVtb3ZlKFRyYWNrQmFzZSosIGJvb2wgc2NoZWR1bGVF
dmVudCA9IHRydWUpIG92ZXJyaWRlOworICAgIHZvaWQgYXBwZW5kKFJlZjxUZXh0VHJhY2s+JiYp
OworICAgIHZvaWQgcmVtb3ZlKFRyYWNrQmFzZSYsIGJvb2wgc2NoZWR1bGVFdmVudCA9IHRydWUp
IG92ZXJyaWRlOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICBFdmVudFRhcmdldEludGVyZmFj
ZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjAsNyArNjAsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFRleHRUcmFja0xpc3QoSFRNTE1lZGlhRWxlbWVudCos
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZVRyYWNrSW5k
ZXhlc0FmdGVyVHJhY2soVGV4dFRyYWNrKik7CisgICAgdm9pZCBpbnZhbGlkYXRlVHJhY2tJbmRl
eGVzQWZ0ZXJUcmFjayhUZXh0VHJhY2smKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNl
Pj4gbV9hZGRUcmFja1RyYWNrczsKICAgICBWZWN0b3I8UmVmUHRyPFRyYWNrQmFzZT4+IG1fZWxl
bWVudFRyYWNrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tC
YXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrQmFzZS5oCmluZGV4IGY3NTY3
OGY1NjczOTAwZDY5YTM2ZWM3MzhhODE1MTczZDdjN2QyMzUuLmQ2YzVlNDg1NmE1NWFhODhmNGM2
OWYwNzNkMDdkMDZkNGIwYjVjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVHJhY2tCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2Uu
aApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Ry
YWNrRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmNwcApp
bmRleCA4MTU2MjVmY2UzZGMwOTllN2IwZjY4ZTg2YWNhODgzMzkyMGYyMDI1Li40MzRlZDRjNzhm
ZDg1OTVhZjliY2NiNjk2NDNkYjEzNTVjZDU4NzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVHJhY2tFdmVudC5jcHAKQEAgLTMzLDkgKzMzLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1UcmFja0V2ZW50OjpUcmFja0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9v
bCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUmVmUHRyPFRyYWNrQmFzZT4mJiB0cmFjaykK
K1RyYWNrRXZlbnQ6OlRyYWNrRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNh
bkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBSZWY8VHJhY2tCYXNlPiYmIHRyYWNrKQogICAgIDog
RXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlKQotICAgICwgbV90cmFjayh0cmFjaykK
KyAgICAsIG1fdHJhY2soV1RGTW92ZSh0cmFjaykpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UcmFja0V2ZW50LmgKaW5kZXggNDY2ZDlmODgyOTg2NzllOGJhMTc3ZWNmZjc4ZWZkZTE4
MzhmY2ZkYS4uOGFlZmZjZDY0ZjE4ZDA5ZmQ2NmYwOGU4NGZkMTQzODI5NTYzYzVjZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3Mg
VHJhY2tFdmVudCBmaW5hbCA6IHB1YmxpYyBFdmVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
VHJhY2tFdmVudCgpOwogCi0gICAgc3RhdGljIFJlZjxUcmFja0V2ZW50PiBjcmVhdGUoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBSZWZQ
dHI8VHJhY2tCYXNlPiYmIHRyYWNrKQorICAgIHN0YXRpYyBSZWY8VHJhY2tFdmVudD4gY3JlYXRl
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJs
ZSwgUmVmPFRyYWNrQmFzZT4mJiB0cmFjaykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFRyYWNrRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCBXVEZNb3ZlKHRy
YWNrKSkpOwogICAgIH0KQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIFRyYWNrQmFzZSog
dHJhY2soKSBjb25zdCB7IHJldHVybiBtX3RyYWNrLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAg
VHJhY2tFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29s
IGNhbmNlbGFibGUsIFJlZlB0cjxUcmFja0Jhc2U+JiYpOworICAgIFRyYWNrRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBSZWY8
VHJhY2tCYXNlPiYmKTsKICAgICBUcmFja0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwg
Y29uc3QgVHJhY2tFdmVudEluaXQmIGluaXRpYWxpemVyKTsKIAogICAgIFJlZlB0cjxUcmFja0Jh
c2U+IG1fdHJhY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNr
TGlzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmNw
cAppbmRleCBmMjM0NjcxZDZkMTllNjg1NGJkYTIwOTJkNjgxYmRmNWQ0MWQxYmI3Li5kYmVkM2Fh
ZWM3NzI3YTBlMzg1OWE4NTUyZTFjMGEzN2JlNDY1MDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAKQEAgLTU4LDMzICs1OCwzMyBAQCB1bnNpZ25lZCBU
cmFja0xpc3RCYXNlOjpsZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBtX2luYmFuZFRyYWNrcy5z
aXplKCk7CiB9CiAKLXZvaWQgVHJhY2tMaXN0QmFzZTo6cmVtb3ZlKFRyYWNrQmFzZSogdHJhY2ss
IGJvb2wgc2NoZWR1bGVFdmVudCkKK3ZvaWQgVHJhY2tMaXN0QmFzZTo6cmVtb3ZlKFRyYWNrQmFz
ZSYgdHJhY2ssIGJvb2wgc2NoZWR1bGVFdmVudCkKIHsKLSAgICBzaXplX3QgaW5kZXggPSBtX2lu
YmFuZFRyYWNrcy5maW5kKHRyYWNrKTsKKyAgICBzaXplX3QgaW5kZXggPSBtX2luYmFuZFRyYWNr
cy5maW5kKCZ0cmFjayk7CiAgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKIAotICAgIEFT
U0VSVCh0cmFjay0+bWVkaWFFbGVtZW50KCkgPT0gbV9lbGVtZW50KTsKLSAgICB0cmFjay0+c2V0
TWVkaWFFbGVtZW50KDApOworICAgIEFTU0VSVCh0cmFjay5tZWRpYUVsZW1lbnQoKSA9PSBtX2Vs
ZW1lbnQpOworICAgIHRyYWNrLnNldE1lZGlhRWxlbWVudChudWxscHRyKTsKIAotICAgIFJlZlB0
cjxUcmFja0Jhc2U+IHRyYWNrUmVmID0gbV9pbmJhbmRUcmFja3NbaW5kZXhdOworICAgIFJlZjxU
cmFja0Jhc2U+IHRyYWNrUmVmID0gKm1faW5iYW5kVHJhY2tzW2luZGV4XTsKIAogICAgIG1faW5i
YW5kVHJhY2tzLnJlbW92ZShpbmRleCk7CiAKICAgICBpZiAoc2NoZWR1bGVFdmVudCkKLSAgICAg
ICAgc2NoZWR1bGVSZW1vdmVUcmFja0V2ZW50KHRyYWNrUmVmLnJlbGVhc2UoKSk7CisgICAgICAg
IHNjaGVkdWxlUmVtb3ZlVHJhY2tFdmVudChXVEZNb3ZlKHRyYWNrUmVmKSk7CiB9CiAKLWJvb2wg
VHJhY2tMaXN0QmFzZTo6Y29udGFpbnMoVHJhY2tCYXNlKiB0cmFjaykgY29uc3QKK2Jvb2wgVHJh
Y2tMaXN0QmFzZTo6Y29udGFpbnMoVHJhY2tCYXNlJiB0cmFjaykgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9pbmJhbmRUcmFja3MuZmluZCh0cmFjaykgIT0gbm90Rm91bmQ7CisgICAgcmV0dXJuIG1f
aW5iYW5kVHJhY2tzLmZpbmQoJnRyYWNrKSAhPSBub3RGb3VuZDsKIH0KIAotdm9pZCBUcmFja0xp
c3RCYXNlOjpzY2hlZHVsZVRyYWNrRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUs
IFBhc3NSZWZQdHI8VHJhY2tCYXNlPiB0cmFjaykKK3ZvaWQgVHJhY2tMaXN0QmFzZTo6c2NoZWR1
bGVUcmFja0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBSZWY8VHJhY2tCYXNl
PiYmIHRyYWNrKQogewotICAgIG1fYXN5bmNFdmVudFF1ZXVlLmVucXVldWVFdmVudChUcmFja0V2
ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgZmFsc2UsIHRyYWNrKSk7CisgICAgbV9hc3lu
Y0V2ZW50UXVldWUuZW5xdWV1ZUV2ZW50KFRyYWNrRXZlbnQ6OmNyZWF0ZShldmVudE5hbWUsIGZh
bHNlLCBmYWxzZSwgV1RGTW92ZSh0cmFjaykpKTsKIH0KIAotdm9pZCBUcmFja0xpc3RCYXNlOjpz
Y2hlZHVsZUFkZFRyYWNrRXZlbnQoUGFzc1JlZlB0cjxUcmFja0Jhc2U+IHRyYWNrKQordm9pZCBU
cmFja0xpc3RCYXNlOjpzY2hlZHVsZUFkZFRyYWNrRXZlbnQoUmVmPFRyYWNrQmFzZT4mJiB0cmFj
aykKIHsKICAgICAvLyA0LjguMTAuNSBMb2FkaW5nIHRoZSBtZWRpYSByZXNvdXJjZQogICAgIC8v
IC4uLgpAQCAtMTA0LDEwICsxMDQsMTAgQEAgdm9pZCBUcmFja0xpc3RCYXNlOjpzY2hlZHVsZUFk
ZFRyYWNrRXZlbnQoUGFzc1JlZlB0cjxUcmFja0Jhc2U+IHRyYWNrKQogICAgIC8vIGJ1YmJsZSBh
bmQgaXMgbm90IGNhbmNlbGFibGUsIGFuZCB0aGF0IHVzZXMgdGhlIFRyYWNrRXZlbnQgaW50ZXJm
YWNlLCB3aXRoCiAgICAgLy8gdGhlIHRyYWNrIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUg
dGV4dCB0cmFjaydzIFRleHRUcmFjayBvYmplY3QsIGF0CiAgICAgLy8gdGhlIG1lZGlhIGVsZW1l
bnQncyB0ZXh0VHJhY2tzIGF0dHJpYnV0ZSdzIFRleHRUcmFja0xpc3Qgb2JqZWN0LgotICAgIHNj
aGVkdWxlVHJhY2tFdmVudChldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudCwgdHJhY2spOworICAg
IHNjaGVkdWxlVHJhY2tFdmVudChldmVudE5hbWVzKCkuYWRkdHJhY2tFdmVudCwgV1RGTW92ZSh0
cmFjaykpOwogfQogCi12b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlUmVtb3ZlVHJhY2tFdmVu
dChQYXNzUmVmUHRyPFRyYWNrQmFzZT4gdHJhY2spCit2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVk
dWxlUmVtb3ZlVHJhY2tFdmVudChSZWY8VHJhY2tCYXNlPiYmIHRyYWNrKQogewogICAgIC8vIDQu
OC4xMC42IE9mZnNldHMgaW50byB0aGUgbWVkaWEgcmVzb3VyY2UKICAgICAvLyBJZiBhdCBhbnkg
dGltZSB0aGUgdXNlciBhZ2VudCBsZWFybnMgdGhhdCBhbiBhdWRpbyBvciB2aWRlbyB0cmFjayBo
YXMKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlUmVtb3Zl
VHJhY2tFdmVudChQYXNzUmVmUHRyPFRyYWNrQmFzZT4gdHJhY2spCiAgICAgLy8gaW50ZXJmYWNl
LCB3aXRoIHRoZSB0cmFjayBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHRleHQgdHJhY2sn
cwogICAgIC8vIFRleHRUcmFjayBvYmplY3QsIGF0IHRoZSBtZWRpYSBlbGVtZW50J3MgdGV4dFRy
YWNrcyBhdHRyaWJ1dGUncwogICAgIC8vIFRleHRUcmFja0xpc3Qgb2JqZWN0LgotICAgIHNjaGVk
dWxlVHJhY2tFdmVudChldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCwgdHJhY2spOworICAg
IHNjaGVkdWxlVHJhY2tFdmVudChldmVudE5hbWVzKCkucmVtb3ZldHJhY2tFdmVudCwgV1RGTW92
ZSh0cmFjaykpOwogfQogCiB2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlQ2hhbmdlRXZlbnQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuaAppbmRleCBiZDY0MTBk
NGEyNzc5NWVjYjdhMTc1ZTgxNGYzYjg0NGZiZTYyOWZiLi5lMmUxOGQwMWViZWMwNDdkNmM0YzAw
ZWFlNzU3YmRlZTZjYWYxNDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RyYWNrTGlzdEJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrTGlz
dEJhc2UuaApAQCAtNDcsOCArNDcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+VHJhY2tMaXN0
QmFzZSgpOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgY29udGFpbnMoVHJhY2tCYXNlKikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHJl
bW92ZShUcmFja0Jhc2UqLCBib29sIHNjaGVkdWxlRXZlbnQgPSB0cnVlKTsKKyAgICB2aXJ0dWFs
IGJvb2wgY29udGFpbnMoVHJhY2tCYXNlJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZShUcmFja0Jhc2UmLCBib29sIHNjaGVkdWxlRXZlbnQgPSB0cnVlKTsKIAogICAgIC8vIEV2ZW50
VGFyZ2V0CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdCBvdmVycmlkZSA9IDA7CkBAIC02OCwxMyArNjgsMTMgQEAgcHVibGljOgogcHJvdGVjdGVk
OgogICAgIFRyYWNrTGlzdEJhc2UoSFRNTE1lZGlhRWxlbWVudCosIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKTsKIAotICAgIHZvaWQgc2NoZWR1bGVBZGRUcmFja0V2ZW50KFBhc3NSZWZQdHI8VHJh
Y2tCYXNlPik7Ci0gICAgdm9pZCBzY2hlZHVsZVJlbW92ZVRyYWNrRXZlbnQoUGFzc1JlZlB0cjxU
cmFja0Jhc2U+KTsKKyAgICB2b2lkIHNjaGVkdWxlQWRkVHJhY2tFdmVudChSZWY8VHJhY2tCYXNl
PiYmKTsKKyAgICB2b2lkIHNjaGVkdWxlUmVtb3ZlVHJhY2tFdmVudChSZWY8VHJhY2tCYXNlPiYm
KTsKIAogICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tCYXNlPj4gbV9pbmJhbmRUcmFja3M7CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBzY2hlZHVsZVRyYWNrRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudE5hbWUsIFBhc3NSZWZQdHI8VHJhY2tCYXNlPik7CisgICAgdm9pZCBzY2hlZHVsZVRyYWNr
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5hbWUsIFJlZjxUcmFja0Jhc2U+JiYpOwog
CiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyBy
ZWYoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5jcHAKaW5kZXggYmUy
OTY4ODhkNzEwMDIyMDEwMTA1N2FlNTcyNzE1OWY3Y2U4NmMwZC4uZjgwYmMxMGE4Y2M4ZGUyODJk
OWZhZjMxOTQ2ZDYxY2RlMGNiYzQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9WaWRlb1RyYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVv
VHJhY2suY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBWaWRlb1RyYWNrOjpsYW5ndWFnZUNo
YW5nZWQoVHJhY2tQcml2YXRlQmFzZSogdHJhY2tQcml2YXRlLCBjb25zdCBBdG9taWNTdHIKIHZv
aWQgVmlkZW9UcmFjazo6d2lsbFJlbW92ZShUcmFja1ByaXZhdGVCYXNlKiB0cmFja1ByaXZhdGUp
CiB7CiAgICAgQVNTRVJUX1VOVVNFRCh0cmFja1ByaXZhdGUsIHRyYWNrUHJpdmF0ZSA9PSBtX3By
aXZhdGUpOwotICAgIG1lZGlhRWxlbWVudCgpLT5yZW1vdmVWaWRlb1RyYWNrKHRoaXMpOworICAg
IG1lZGlhRWxlbWVudCgpLT5yZW1vdmVWaWRlb1RyYWNrKCp0aGlzKTsKIH0KIAogI2lmIEVOQUJM
RShNRURJQV9TT1VSQ0UpCkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBWaWRlb1RyYWNrOjpzZXRL
aW5kKGNvbnN0IEF0b21pY1N0cmluZyYga2luZCkKIAogICAgIC8vIDQuIFF1ZXVlIGEgdGFzayB0
byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGNoYW5nZSBhdCB0aGUgVmlkZW9UcmFja0xpc3Qg
b2JqZWN0IHJlZmVyZW5jZWQgYnkKICAgICAvLyB0aGUgdmlkZW9UcmFja3MgYXR0cmlidXRlIG9u
IHRoZSBIVE1MTWVkaWFFbGVtZW50LgotICAgIG1lZGlhRWxlbWVudCgpLT52aWRlb1RyYWNrcygp
LT5zY2hlZHVsZUNoYW5nZUV2ZW50KCk7CisgICAgbWVkaWFFbGVtZW50KCktPnZpZGVvVHJhY2tz
KCkuc2NoZWR1bGVDaGFuZ2VFdmVudCgpOwogfQogCiB2b2lkIFZpZGVvVHJhY2s6OnNldExhbmd1
YWdlKGNvbnN0IEF0b21pY1N0cmluZyYgbGFuZ3VhZ2UpCkBAIC0yMTcsOCArMjE3LDcgQEAgdm9p
ZCBWaWRlb1RyYWNrOjpzZXRMYW5ndWFnZShjb25zdCBBdG9taWNTdHJpbmcmIGxhbmd1YWdlKQog
CiAgICAgLy8gNC4gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgY2hh
bmdlIGF0IHRoZSBWaWRlb1RyYWNrTGlzdCBvYmplY3QgcmVmZXJlbmNlZCBieQogICAgIC8vIHRo
ZSB2aWRlb1RyYWNrcyBhdHRyaWJ1dGUgb24gdGhlIEhUTUxNZWRpYUVsZW1lbnQuCi0gICAgaWYg
KG1lZGlhRWxlbWVudCgpLT52aWRlb1RyYWNrcygpKQotICAgICAgICBtZWRpYUVsZW1lbnQoKS0+
dmlkZW9UcmFja3MoKS0+c2NoZWR1bGVDaGFuZ2VFdmVudCgpOworICAgIG1lZGlhRWxlbWVudCgp
LT52aWRlb1RyYWNrcygpLnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKIH0KICNlbmRpZgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5oCmluZGV4IDVjNzFmNWY0ODk1NmI3ODJkMGJk
ZTBlN2JlMWI3Mjg2MjljYjk4MjEuLmUxNDNjMDlmOWNiMzBiMzFkNTgxMWVlMGEyZDZhZTk1YmY0
YjY5M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5oCkBAIC0xMDIsMTIg
KzEwMiwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZT4gbV9wcml2
YXRlOwogfTsKIAotaW5saW5lIFZpZGVvVHJhY2sqIHRvVmlkZW9UcmFjayhUcmFja0Jhc2UqIHRy
YWNrKQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHRyYWNrLT50eXBl
KCkgPT0gVHJhY2tCYXNlOjpWaWRlb1RyYWNrKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Vmlk
ZW9UcmFjayo+KHRyYWNrKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlZpZGVvVHJhY2spCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlRyYWNrQmFzZSYgdHJhY2spIHsgcmV0dXJuIHRyYWNr
LnR5cGUoKSA9PSBXZWJDb3JlOjpUcmFja0Jhc2U6OlZpZGVvVHJhY2s7IH0KK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VmlkZW9UcmFja0xpc3QuY3BwCmluZGV4IDQyNmIyYTAyNWFlMTczZDA2NmRkMzE2YWYwMTlhMmIz
NzE1MGVkOGMuLjhkOTVmMTBmZWYzMjg4N2ViMzU4NmJkZTI1YTFhNTBmMTUxMjZmYTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuY3BwCkBAIC00Myw1NCAr
NDMsNTEgQEAgVmlkZW9UcmFja0xpc3Q6On5WaWRlb1RyYWNrTGlzdCgpCiB7CiB9CiAKLXZvaWQg
VmlkZW9UcmFja0xpc3Q6OmFwcGVuZChQYXNzUmVmUHRyPFZpZGVvVHJhY2s+IHBycFRyYWNrKQor
dm9pZCBWaWRlb1RyYWNrTGlzdDo6YXBwZW5kKFJlZjxWaWRlb1RyYWNrPiYmIHRyYWNrKQogewot
ICAgIFJlZlB0cjxWaWRlb1RyYWNrPiB0cmFjayA9IHBycFRyYWNrOwotCiAgICAgLy8gSW5zZXJ0
IHRyYWNrcyBpbiB0aGUgbWVkaWEgZmlsZSBvcmRlci4KICAgICBzaXplX3QgaW5kZXggPSB0cmFj
ay0+aW5iYW5kVHJhY2tJbmRleCgpOwogICAgIHNpemVfdCBpbnNlcnRpb25JbmRleDsKICAgICBm
b3IgKGluc2VydGlvbkluZGV4ID0gMDsgaW5zZXJ0aW9uSW5kZXggPCBtX2luYmFuZFRyYWNrcy5z
aXplKCk7ICsraW5zZXJ0aW9uSW5kZXgpIHsKLSAgICAgICAgVmlkZW9UcmFjayogb3RoZXJUcmFj
ayA9IHN0YXRpY19jYXN0PFZpZGVvVHJhY2sqPihtX2luYmFuZFRyYWNrc1tpbnNlcnRpb25JbmRl
eF0uZ2V0KCkpOwotICAgICAgICBpZiAob3RoZXJUcmFjay0+aW5iYW5kVHJhY2tJbmRleCgpID4g
aW5kZXgpCisgICAgICAgIGF1dG8mIG90aGVyVHJhY2sgPSBkb3duY2FzdDxWaWRlb1RyYWNrPigq
bV9pbmJhbmRUcmFja3NbaW5zZXJ0aW9uSW5kZXhdKTsKKyAgICAgICAgaWYgKG90aGVyVHJhY2su
aW5iYW5kVHJhY2tJbmRleCgpID4gaW5kZXgpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgbV9pbmJhbmRUcmFja3MuaW5zZXJ0KGluc2VydGlvbkluZGV4LCB0cmFjayk7CisgICAgbV9p
bmJhbmRUcmFja3MuaW5zZXJ0KGluc2VydGlvbkluZGV4LCB0cmFjay5wdHIoKSk7CiAKICAgICBB
U1NFUlQoIXRyYWNrLT5tZWRpYUVsZW1lbnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50KCkgPT0g
bWVkaWFFbGVtZW50KCkpOwogICAgIHRyYWNrLT5zZXRNZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50
KCkpOwogCi0gICAgc2NoZWR1bGVBZGRUcmFja0V2ZW50KHRyYWNrLnJlbGVhc2UoKSk7CisgICAg
c2NoZWR1bGVBZGRUcmFja0V2ZW50KFdURk1vdmUodHJhY2spKTsKIH0KIAogVmlkZW9UcmFjayog
VmlkZW9UcmFja0xpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKGlu
ZGV4IDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gdG9WaWRlb1RyYWNr
KG1faW5iYW5kVHJhY2tzW2luZGV4XS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFZpZGVvVHJhY2s+KG1faW5iYW5kVHJhY2tzW2luZGV4XS5nZXQoKSk7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFZpZGVvVHJhY2sqIFZpZGVvVHJhY2tMaXN0Ojpn
ZXRUcmFja0J5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QKIHsKICAgICBmb3IgKGF1
dG8mIGluYmFuZFRyYWNrcyA6IG1faW5iYW5kVHJhY2tzKSB7Ci0gICAgICAgIFZpZGVvVHJhY2sq
IHRyYWNrID0gdG9WaWRlb1RyYWNrKGluYmFuZFRyYWNrcy5nZXQoKSk7Ci0gICAgICAgIGlmICh0
cmFjay0+aWQoKSA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiB0cmFjazsKKyAgICAgICAgYXV0
byYgdHJhY2sgPSBkb3duY2FzdDxWaWRlb1RyYWNrPigqaW5iYW5kVHJhY2tzKTsKKyAgICAgICAg
aWYgKHRyYWNrLmlkKCkgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4gJnRyYWNrOwogICAgIH0K
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotbG9uZyBWaWRlb1RyYWNr
TGlzdDo6c2VsZWN0ZWRJbmRleCgpIGNvbnN0CitpbnQgVmlkZW9UcmFja0xpc3Q6OnNlbGVjdGVk
SW5kZXgoKSBjb25zdAogewogICAgIC8vIDQuOC4xMC4xMC4xIEF1ZGlvVHJhY2tMaXN0IGFuZCBW
aWRlb1RyYWNrTGlzdCBvYmplY3RzCiAgICAgLy8gVGhlIFZpZGVvVHJhY2tMaXN0LnNlbGVjdGVk
SW5kZXggYXR0cmlidXRlIG11c3QgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUKICAgICAvLyBjdXJy
ZW50bHkgc2VsZWN0ZWQgdHJhY2ssIGlmIGFueS4gSWYgdGhlIFZpZGVvVHJhY2tMaXN0IG9iamVj
dCBkb2VzIG5vdAogICAgIC8vIGN1cnJlbnRseSByZXByZXNlbnQgYW55IHRyYWNrcywgb3IgaWYg
bm9uZSBvZiB0aGUgdHJhY2tzIGFyZSBzZWxlY3RlZCwKICAgICAvLyBpdCBtdXN0IGluc3RlYWQg
cmV0dXJuIOKIkjEuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7
Ci0gICAgICAgIFZpZGVvVHJhY2sqIHRyYWNrID0gdG9WaWRlb1RyYWNrKG1faW5iYW5kVHJhY2tz
W2ldLmdldCgpKTsKLSAgICAgICAgaWYgKHRyYWNrLT5zZWxlY3RlZCgpKQorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIHRyYWNrID0g
ZG93bmNhc3Q8VmlkZW9UcmFjaz4oKm1faW5iYW5kVHJhY2tzW2ldKTsKKyAgICAgICAgaWYgKHRy
YWNrLnNlbGVjdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gaTsKICAgICB9CiAgICAgcmV0dXJu
IC0xOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlz
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5oCmluZGV4IGY2
ZDlkNDVmNzc4NTY5ODk5NDU5NGM5YThmYzhiZDM5MzZiNjExMmIuLmJjNGUwNTA3OTY4MWJlZWMy
YzljYjhhYzZhMjk1MjEzYTZjNTJmYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVmlkZW9UcmFja0xpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Zp
ZGVvVHJhY2tMaXN0LmgKQEAgLTQzLDExICs0MywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
VmlkZW9UcmFja0xpc3QoKTsKIAogICAgIFZpZGVvVHJhY2sqIGdldFRyYWNrQnlJZChjb25zdCBB
dG9taWNTdHJpbmcmKSBjb25zdDsKLSAgICBsb25nIHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKKyAg
ICBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0OwogCiAgICAgVmlkZW9UcmFjayogaXRlbSh1bnNp
Z25lZCkgY29uc3Q7CiAgICAgVmlkZW9UcmFjayogbGFzdEl0ZW0oKSBjb25zdCB7IHJldHVybiBp
dGVtKGxlbmd0aCgpIC0gMSk7IH0KLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPFZpZGVvVHJh
Y2s+KTsKKyAgICB2b2lkIGFwcGVuZChSZWY8VmlkZW9UcmFjaz4mJik7CiAKICAgICAvLyBFdmVu
dFRhcmdldAogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCmlu
ZGV4IDgwZDZiODJjMmZjMmJmOWY3OWFkM2JjYzY5NjI5MGQ1NzRmYmVlN2UuLmE0YzZmYTNjZGUw
NmZlY2YxOTRjNWEyMjkyZmJlZDVjNDQ3YzJkOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1dlYlBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50Lm1tCkBAIC0yNTksMTUgKzI1OSwxMiBAQCB2b2lkIFdlYlBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Ojp1cGRhdGVMZWdpYmxlT3B0aW9ucygpCiAgICAgaWYgKCFt
X21lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQXVkaW9UcmFja0xpc3QqIGF1
ZGlvVHJhY2tMaXN0ID0gbV9tZWRpYUVsZW1lbnQtPmF1ZGlvVHJhY2tzKCk7Ci0gICAgVGV4dFRy
YWNrTGlzdCogdHJhY2tMaXN0ID0gbV9tZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKTsKLQotICAg
IGlmICgoIXRyYWNrTGlzdCAmJiAhYXVkaW9UcmFja0xpc3QpIHx8ICFtX21lZGlhRWxlbWVudC0+
ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgaWYgKCFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5w
YWdlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9
IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVy
ZW5jZXMoKTsKLSAgICBtX2xlZ2libGVUcmFja3NGb3JNZW51ID0gY2FwdGlvblByZWZlcmVuY2Vz
LnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodHJhY2tMaXN0KTsKLSAgICBtX2F1ZGlvVHJhY2tzRm9y
TWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KGF1ZGlvVHJh
Y2tMaXN0KTsKKyAgICBtX2xlZ2libGVUcmFja3NGb3JNZW51ID0gY2FwdGlvblByZWZlcmVuY2Vz
LnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoJm1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkpOwor
ICAgIG1fYXVkaW9UcmFja3NGb3JNZW51ID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNr
TGlzdEZvck1lbnUoJm1fbWVkaWFFbGVtZW50LT5hdWRpb1RyYWNrcygpKTsKIAogICAgIG1fcGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5zZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9ucyhhdWRp
b01lZGlhU2VsZWN0aW9uT3B0aW9ucygpLCBhdWRpb01lZGlhU2VsZWN0ZWRJbmRleCgpKTsKICAg
ICBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+c2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9ucyhsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zKCksIGxlZ2libGVNZWRpYVNlbGVjdGVk
SW5kZXgoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279020</attachid>
            <date>2016-05-16 09:07:13 -0700</date>
            <delta_ts>2016-05-16 09:36:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157735-20160516090809.patch</filename>
            <type>text/plain</type>
            <size>63305</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwOTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjY5ZTViZWYwMjY3NjAx
M2JlMWUyOTEwOWQwZDEzYTYzNTIwN2NhYS4uNzc3MTU2ZDAzYWM2YTljNTU4YTJlMTVkYjQ1Y2I4
MGFmNmI1NWRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEwNCBAQAogMjAxNi0wNS0xNSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIE1vZGVybml6ZSBUcmFjayBj
bGFzc2VzJyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTc3MzUKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAg
ICAgTW9kZXJuaXplIFRyYWNrIGNsYXNzZXMnIGNvZGUgYSBiaXQuCisKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U291cmNlOjpyZW1vdmVTb3VyY2VCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3Vy
Y2UvU291cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6c291
cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9U
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6YXVkaW9U
cmFja0VuYWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OnRleHRUcmFja01vZGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OnZpZGVvVHJhY2tTZWxlY3RlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6dGV4dFRyYWNrUmVtb3ZlQ3Vlcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjptZWRpYVBsYXllckRpZEFkZFRleHRUcmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjphZGRBdWRpb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjphZGRWaWRlb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OnJlbW92ZUF1ZGlvVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6cmVtb3ZlVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OnJlbW92ZVZpZGVvVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6Zm9yZ2V0UmVzb3VyY2VTcGVjaWZpY1RyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjphdWRpb1RyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50Ojp0ZXh0VHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OnZpZGVvVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRp
ZEFkZFRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpkaWRS
ZW1vdmVUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0
U2VsZWN0ZWRUZXh0VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
dGV4dFRyYWNrQWRkQ3Vlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpjbG9zZUNhcHRpb25UcmFja3NDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKiBo
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xDbG9zZWRDYXB0
aW9uc1RyYWNrTGlzdEVsZW1lbnQ6OnVwZGF0ZURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFDb250cm9sQ2xvc2VkQ2FwdGlvbnNUcmFja0xpc3RFbGVtZW50OjpyZWJ1aWxkVHJhY2tM
aXN0TWVudSk6CisgICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvVHJhY2s6On5BdWRpb1RyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvVHJhY2s6OnNldFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9UcmFjazo6aXNW
YWxpZEtpbmQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9UcmFjazo6d2lsbFJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1RyYWNrOjpzZXRFbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvVHJhY2s6OnVwZGF0ZUtpbmRGcm9tUHJpdmF0ZSk6IERlbGV0ZWQu
CisgICAgICAgICogaHRtbC90cmFjay9BdWRpb1RyYWNrLmg6CisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAqIGh0bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuY3BwOgorICAgICAgICAoQXVkaW9U
cmFja0xpc3Q6OmFwcGVuZCk6CisgICAgICAgIChBdWRpb1RyYWNrTGlzdDo6aXRlbSk6CisgICAg
ICAgIChBdWRpb1RyYWNrTGlzdDo6Z2V0VHJhY2tCeUlkKToKKyAgICAgICAgKEF1ZGlvVHJhY2tM
aXN0OjpldmVudFRhcmdldEludGVyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC90cmFj
ay9BdWRpb1RyYWNrTGlzdC5oOgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNr
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFjazo6d2lsbFJlbW92ZSk6Cisg
ICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFRyYWNrOjpzZXRLaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6dHJhY2tJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2s6OnRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVu
ZGVyZWRUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpzZXRMYW5ndWFnZSk6
CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2suaDoKKyAgICAgICAgKGlzVHlwZSk6Cisg
ICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcDoKKyAgICAgICAgKFRleHRUcmFj
a0xpc3Q6OmdldFRyYWNrSW5kZXgpOgorICAgICAgICAoVGV4dFRyYWNrTGlzdDo6Z2V0VHJhY2tJ
bmRleFJlbGF0aXZlVG9SZW5kZXJlZFRyYWNrcyk6CisgICAgICAgIChUZXh0VHJhY2tMaXN0Ojpp
dGVtKToKKyAgICAgICAgKFRleHRUcmFja0xpc3Q6OmdldFRyYWNrQnlJZCk6CisgICAgICAgIChU
ZXh0VHJhY2tMaXN0OjppbnZhbGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayk6CisgICAgICAg
IChUZXh0VHJhY2tMaXN0OjphcHBlbmQpOgorICAgICAgICAoVGV4dFRyYWNrTGlzdDo6cmVtb3Zl
KToKKyAgICAgICAgKFRleHRUcmFja0xpc3Q6OmNvbnRhaW5zKToKKyAgICAgICAgKiBodG1sL3Ry
YWNrL1RleHRUcmFja0xpc3QuaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1RyYWNrQmFzZS5oOgor
ICAgICAgICAqIGh0bWwvdHJhY2svVHJhY2tFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
cmFja0V2ZW50OjpUcmFja0V2ZW50KToKKyAgICAgICAgKiBodG1sL3RyYWNrL1RyYWNrRXZlbnQu
aDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwOgorICAgICAgICAoVHJh
Y2tMaXN0QmFzZTo6cmVtb3ZlKToKKyAgICAgICAgKFRyYWNrTGlzdEJhc2U6OmNvbnRhaW5zKToK
KyAgICAgICAgKFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxlVHJhY2tFdmVudCk6CisgICAgICAgIChU
cmFja0xpc3RCYXNlOjpzY2hlZHVsZUFkZFRyYWNrRXZlbnQpOgorICAgICAgICAoVHJhY2tMaXN0
QmFzZTo6c2NoZWR1bGVSZW1vdmVUcmFja0V2ZW50KToKKyAgICAgICAgKiBodG1sL3RyYWNrL1Ry
YWNrTGlzdEJhc2UuaDoKKyAgICAgICAgKiBodG1sL3RyYWNrL1ZpZGVvVHJhY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VmlkZW9UcmFjazo6d2lsbFJlbW92ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWaWRlb1RyYWNrOjpzZXRLaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvVHJhY2s6OnNl
dExhbmd1YWdlKToKKyAgICAgICAgKiBodG1sL3RyYWNrL1ZpZGVvVHJhY2suaDoKKyAgICAgICAg
KGlzVHlwZSk6CisgICAgICAgICogaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHA6CisgICAg
ICAgIChWaWRlb1RyYWNrTGlzdDo6YXBwZW5kKToKKyAgICAgICAgKFZpZGVvVHJhY2tMaXN0Ojpp
dGVtKToKKyAgICAgICAgKFZpZGVvVHJhY2tMaXN0OjpnZXRUcmFja0J5SWQpOgorICAgICAgICAo
VmlkZW9UcmFja0xpc3Q6OnNlbGVjdGVkSW5kZXgpOgorICAgICAgICAqIGh0bWwvdHJhY2svVmlk
ZW9UcmFja0xpc3QuaDoKKworMjAxNi0wNS0xNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCiAgICAgICAgIFVzZSBtb3JlIHJlZmVyZW5jZXMgaW4gSlMgd3JhcHBlcnMgcmVsYXRl
ZCBjb2RlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTc3MjEKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlh
U291cmNlLmNwcAppbmRleCBlMjg0OWFlY2QzOTg5NzBiNmJhYmQ2NzE4YjQyODc4OTAzMTM2Y2Yx
Li45YTU0YjYxZGVhNzMyMDljNzc0ZDNiYTRkNDFlZmY4ZDRmOGM5ZmJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcApAQCAtNTg0
LDE0ICs1ODQsMTQgQEAgdm9pZCBNZWRpYVNvdXJjZTo6cmVtb3ZlU291cmNlQnVmZmVyKFNvdXJj
ZUJ1ZmZlciYgYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgICAgICAvLyA1LjMgRm9y
IGVhY2ggQXVkaW9UcmFjayBvYmplY3QgaW4gdGhlIFNvdXJjZUJ1ZmZlciBhdWRpb1RyYWNrcyBs
aXN0LCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKICAgICAgICAgd2hpbGUgKGF1ZGlvVHJhY2tz
LT5sZW5ndGgoKSkgewotICAgICAgICAgICAgQXVkaW9UcmFjayogdHJhY2sgPSBhdWRpb1RyYWNr
cy0+bGFzdEl0ZW0oKTsKKyAgICAgICAgICAgIGF1dG8mIHRyYWNrID0gKmF1ZGlvVHJhY2tzLT5s
YXN0SXRlbSgpOwogCiAgICAgICAgICAgICAvLyA1LjMuMSBTZXQgdGhlIHNvdXJjZUJ1ZmZlciBh
dHRyaWJ1dGUgb24gdGhlIEF1ZGlvVHJhY2sgb2JqZWN0IHRvIG51bGwuCi0gICAgICAgICAgICB0
cmFjay0+c2V0U291cmNlQnVmZmVyKG51bGxwdHIpOworICAgICAgICAgICAgdHJhY2suc2V0U291
cmNlQnVmZmVyKG51bGxwdHIpOwogCiAgICAgICAgICAgICAvLyA1LjMuMiBJZiB0aGUgZW5hYmxl
ZCBhdHRyaWJ1dGUgb24gdGhlIEF1ZGlvVHJhY2sgb2JqZWN0IGlzIHRydWUsIHRoZW4gc2V0IHRo
ZSByZW1vdmVkIGVuYWJsZWQKICAgICAgICAgICAgIC8vIGF1ZGlvIHRyYWNrIGZsYWcgdG8gdHJ1
ZS4KLSAgICAgICAgICAgIGlmICh0cmFjay0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgaWYgKHRy
YWNrLmVuYWJsZWQoKSkKICAgICAgICAgICAgICAgICByZW1vdmVkRW5hYmxlZEF1ZGlvVHJhY2sg
PSB0cnVlOwogCiAgICAgICAgICAgICAvLyA1LjMuMyBSZW1vdmUgdGhlIEF1ZGlvVHJhY2sgb2Jq
ZWN0IGZyb20gdGhlIEhUTUxNZWRpYUVsZW1lbnQgYXVkaW9UcmFja3MgbGlzdC4KQEAgLTYwOSw3
ICs2MDksNyBAQCB2b2lkIE1lZGlhU291cmNlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291cmNlQnVm
ZmVyJiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAvLyA1LjQgSWYgdGhlIHJl
bW92ZWQgZW5hYmxlZCBhdWRpbyB0cmFjayBmbGFnIGVxdWFscyB0cnVlLCB0aGVuIHF1ZXVlIGEg
dGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50CiAgICAgICAgIC8vIG5hbWVkIGNoYW5nZSBhdCB0
aGUgSFRNTE1lZGlhRWxlbWVudCBhdWRpb1RyYWNrcyBsaXN0LgogICAgICAgICBpZiAocmVtb3Zl
ZEVuYWJsZWRBdWRpb1RyYWNrKQotICAgICAgICAgICAgbWVkaWFFbGVtZW50KCktPmF1ZGlvVHJh
Y2tzKCktPnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKKyAgICAgICAgICAgIG1lZGlhRWxlbWVudCgp
LT5hdWRpb1RyYWNrcygpLnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKICAgICB9CiAKICAgICAvLyA2
LiBMZXQgU291cmNlQnVmZmVyIHZpZGVvVHJhY2tzIGxpc3QgZXF1YWwgdGhlIFZpZGVvVHJhY2tM
aXN0IG9iamVjdCByZXR1cm5lZCBieSBzb3VyY2VCdWZmZXIudmlkZW9UcmFja3MuCkBAIC02MjQs
MTQgKzYyNCwxNCBAQCB2b2lkIE1lZGlhU291cmNlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291cmNl
QnVmZmVyJiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgICAgIC8vIDcuMyBGb3Ig
ZWFjaCBWaWRlb1RyYWNrIG9iamVjdCBpbiB0aGUgU291cmNlQnVmZmVyIHZpZGVvVHJhY2tzIGxp
c3QsIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgogICAgICAgICB3aGlsZSAodmlkZW9UcmFja3Mt
Pmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBWaWRlb1RyYWNrKiB0cmFjayA9IHZpZGVvVHJhY2tz
LT5sYXN0SXRlbSgpOworICAgICAgICAgICAgYXV0byYgdHJhY2sgPSAqdmlkZW9UcmFja3MtPmxh
c3RJdGVtKCk7CiAKICAgICAgICAgICAgIC8vIDcuMy4xIFNldCB0aGUgc291cmNlQnVmZmVyIGF0
dHJpYnV0ZSBvbiB0aGUgVmlkZW9UcmFjayBvYmplY3QgdG8gbnVsbC4KLSAgICAgICAgICAgIHRy
YWNrLT5zZXRTb3VyY2VCdWZmZXIobnVsbHB0cik7CisgICAgICAgICAgICB0cmFjay5zZXRTb3Vy
Y2VCdWZmZXIobnVsbHB0cik7CiAKICAgICAgICAgICAgIC8vIDcuMy4yIElmIHRoZSBzZWxlY3Rl
ZCBhdHRyaWJ1dGUgb24gdGhlIFZpZGVvVHJhY2sgb2JqZWN0IGlzIHRydWUsIHRoZW4gc2V0IHRo
ZSByZW1vdmVkIHNlbGVjdGVkCiAgICAgICAgICAgICAvLyB2aWRlbyB0cmFjayBmbGFnIHRvIHRy
dWUuCi0gICAgICAgICAgICBpZiAodHJhY2stPnNlbGVjdGVkKCkpCisgICAgICAgICAgICBpZiAo
dHJhY2suc2VsZWN0ZWQoKSkKICAgICAgICAgICAgICAgICByZW1vdmVkU2VsZWN0ZWRWaWRlb1Ry
YWNrID0gdHJ1ZTsKIAogICAgICAgICAgICAgLy8gNy4zLjMgUmVtb3ZlIHRoZSBWaWRlb1RyYWNr
IG9iamVjdCBmcm9tIHRoZSBIVE1MTWVkaWFFbGVtZW50IHZpZGVvVHJhY2tzIGxpc3QuCkBAIC02
NDksNyArNjQ5LDcgQEAgdm9pZCBNZWRpYVNvdXJjZTo6cmVtb3ZlU291cmNlQnVmZmVyKFNvdXJj
ZUJ1ZmZlciYgYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgLy8gNy40IElmIHRo
ZSByZW1vdmVkIHNlbGVjdGVkIHZpZGVvIHRyYWNrIGZsYWcgZXF1YWxzIHRydWUsIHRoZW4gcXVl
dWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQKICAgICAgICAgLy8gbmFtZWQgY2hhbmdl
IGF0IHRoZSBIVE1MTWVkaWFFbGVtZW50IHZpZGVvVHJhY2tzIGxpc3QuCiAgICAgICAgIGlmIChy
ZW1vdmVkU2VsZWN0ZWRWaWRlb1RyYWNrKQotICAgICAgICAgICAgbWVkaWFFbGVtZW50KCktPnZp
ZGVvVHJhY2tzKCktPnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKKyAgICAgICAgICAgIG1lZGlhRWxl
bWVudCgpLT52aWRlb1RyYWNrcygpLnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKICAgICB9CiAKICAg
ICAvLyA4LiBMZXQgU291cmNlQnVmZmVyIHRleHRUcmFja3MgbGlzdCBlcXVhbCB0aGUgVGV4dFRy
YWNrTGlzdCBvYmplY3QgcmV0dXJuZWQgYnkgc291cmNlQnVmZmVyLnRleHRUcmFja3MuCkBAIC02
NjQsMTQgKzY2NCwxNCBAQCB2b2lkIE1lZGlhU291cmNlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291
cmNlQnVmZmVyJiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgICAgIC8vIDkuMyBG
b3IgZWFjaCBUZXh0VHJhY2sgb2JqZWN0IGluIHRoZSBTb3VyY2VCdWZmZXIgdGV4dFRyYWNrcyBs
aXN0LCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKICAgICAgICAgd2hpbGUgKHRleHRUcmFja3Mt
Pmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBUZXh0VHJhY2sqIHRyYWNrID0gdGV4dFRyYWNrcy0+
bGFzdEl0ZW0oKTsKKyAgICAgICAgICAgIGF1dG8mIHRyYWNrID0gKnRleHRUcmFja3MtPmxhc3RJ
dGVtKCk7CiAKICAgICAgICAgICAgIC8vIDkuMy4xIFNldCB0aGUgc291cmNlQnVmZmVyIGF0dHJp
YnV0ZSBvbiB0aGUgVGV4dFRyYWNrIG9iamVjdCB0byBudWxsLgotICAgICAgICAgICAgdHJhY2st
PnNldFNvdXJjZUJ1ZmZlcihudWxscHRyKTsKKyAgICAgICAgICAgIHRyYWNrLnNldFNvdXJjZUJ1
ZmZlcihudWxscHRyKTsKIAogICAgICAgICAgICAgLy8gOS4zLjIgSWYgdGhlIG1vZGUgYXR0cmli
dXRlIG9uIHRoZSBUZXh0VHJhY2sgb2JqZWN0IGlzIHNldCB0byAic2hvd2luZyIgb3IgImhpZGRl
biIsIHRoZW4KICAgICAgICAgICAgIC8vIHNldCB0aGUgcmVtb3ZlZCBlbmFibGVkIHRleHQgdHJh
Y2sgZmxhZyB0byB0cnVlLgotICAgICAgICAgICAgaWYgKHRyYWNrLT5tb2RlKCkgPT0gVGV4dFRy
YWNrOjpNb2RlOjpTaG93aW5nIHx8IHRyYWNrLT5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpI
aWRkZW4pCisgICAgICAgICAgICBpZiAodHJhY2subW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6
U2hvd2luZyB8fCB0cmFjay5tb2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpIaWRkZW4pCiAgICAg
ICAgICAgICAgICAgcmVtb3ZlZEVuYWJsZWRUZXh0VHJhY2sgPSB0cnVlOwogCiAgICAgICAgICAg
ICAvLyA5LjMuMyBSZW1vdmUgdGhlIFRleHRUcmFjayBvYmplY3QgZnJvbSB0aGUgSFRNTE1lZGlh
RWxlbWVudCB0ZXh0VHJhY2tzIGxpc3QuCkBAIC02ODksNyArNjg5LDcgQEAgdm9pZCBNZWRpYVNv
dXJjZTo6cmVtb3ZlU291cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlciYgYnVmZmVyLCBFeGNlcHRpb25D
b2RlJiBlYykKICAgICAgICAgLy8gOS40IElmIHRoZSByZW1vdmVkIGVuYWJsZWQgdGV4dCB0cmFj
ayBmbGFnIGVxdWFscyB0cnVlLCB0aGVuIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2
ZW50CiAgICAgICAgIC8vIG5hbWVkIGNoYW5nZSBhdCB0aGUgSFRNTE1lZGlhRWxlbWVudCB0ZXh0
VHJhY2tzIGxpc3QuCiAgICAgICAgIGlmIChyZW1vdmVkRW5hYmxlZFRleHRUcmFjaykKLSAgICAg
ICAgICAgIG1lZGlhRWxlbWVudCgpLT50ZXh0VHJhY2tzKCktPnNjaGVkdWxlQ2hhbmdlRXZlbnQo
KTsKKyAgICAgICAgICAgIG1lZGlhRWxlbWVudCgpLT50ZXh0VHJhY2tzKCkuc2NoZWR1bGVDaGFu
Z2VFdmVudCgpOwogICAgIH0KICAgICAKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAppbmRleCA3MGQwMWU0MWU2NTZlYzAx
MzQ2Yjk0YTY4NWI4Yjc1YTlkOTNmMDM1Li4yZTUwYTZiZGFkMWY0YTNjN2U0MDM0OTk0NGY5NWVk
NTI4NWY2OThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9Tb3VyY2VCdWZmZXIuY3BwCkBAIC0xMDM1LDcgKzEwMzUsNyBAQCB2b2lkIFNvdXJjZUJ1ZmZl
cjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoU291
cmNlQnVmZgogICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdGVwcyA1LjIuMS01LjIu
OC4xIGFzIHBlciBFZGl0b3IncyBEcmFmdCAwOSBKYW51YXJ5IDIwMTUsIGFuZCByZW9yZGVyIHRo
aXMKICAgICAgICAgICAgIC8vIDUuMi4xIExldCBuZXcgYXVkaW8gdHJhY2sgYmUgYSBuZXcgQXVk
aW9UcmFjayBvYmplY3QuCiAgICAgICAgICAgICAvLyA1LjIuMiBHZW5lcmF0ZSBhIHVuaXF1ZSBJ
RCBhbmQgYXNzaWduIGl0IHRvIHRoZSBpZCBwcm9wZXJ0eSBvbiBuZXcgdmlkZW8gdHJhY2suCi0g
ICAgICAgICAgICBSZWZQdHI8QXVkaW9UcmFjaz4gbmV3QXVkaW9UcmFjayA9IEF1ZGlvVHJhY2s6
OmNyZWF0ZSh0aGlzLCBhdWRpb1RyYWNrUHJpdmF0ZSk7CisgICAgICAgICAgICBhdXRvIG5ld0F1
ZGlvVHJhY2sgPSBBdWRpb1RyYWNrOjpjcmVhdGUodGhpcywgYXVkaW9UcmFja1ByaXZhdGUpOwog
ICAgICAgICAgICAgbmV3QXVkaW9UcmFjay0+c2V0U291cmNlQnVmZmVyKHRoaXMpOwogCiAgICAg
ICAgICAgICAvLyA1LjIuMyBJZiBhdWRpb1RyYWNrcy5sZW5ndGggZXF1YWxzIDAsIHRoZW4gcnVu
IHRoZSBmb2xsb3dpbmcgc3RlcHM6CkBAIC0xMDUxLDEzICsxMDUxLDEzIEBAIHZvaWQgU291cmNl
QnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVu
dChTb3VyY2VCdWZmCiAgICAgICAgICAgICAvLyA1LjIuNSBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBh
IHRydXN0ZWQgZXZlbnQgbmFtZWQgYWRkdHJhY2ssIHRoYXQgZG9lcyBub3QgYnViYmxlIGFuZCBp
cwogICAgICAgICAgICAgLy8gbm90IGNhbmNlbGFibGUsIGFuZCB0aGF0IHVzZXMgdGhlIFRyYWNr
RXZlbnQgaW50ZXJmYWNlLCBhdCB0aGUgQXVkaW9UcmFja0xpc3Qgb2JqZWN0CiAgICAgICAgICAg
ICAvLyByZWZlcmVuY2VkIGJ5IHRoZSBhdWRpb1RyYWNrcyBhdHRyaWJ1dGUgb24gdGhpcyBTb3Vy
Y2VCdWZmZXIgb2JqZWN0LgotICAgICAgICAgICAgYXVkaW9UcmFja3MoKS0+YXBwZW5kKG5ld0F1
ZGlvVHJhY2spOworICAgICAgICAgICAgYXVkaW9UcmFja3MoKS0+YXBwZW5kKG5ld0F1ZGlvVHJh
Y2suY29weVJlZigpKTsKIAogICAgICAgICAgICAgLy8gNS4yLjYgQWRkIG5ldyBhdWRpbyB0cmFj
ayB0byB0aGUgYXVkaW9UcmFja3MgYXR0cmlidXRlIG9uIHRoZSBIVE1MTWVkaWFFbGVtZW50Lgog
ICAgICAgICAgICAgLy8gNS4yLjcgUXVldWUgYSB0YXNrIHRvIGZpcmUgYSB0cnVzdGVkIGV2ZW50
IG5hbWVkIGFkZHRyYWNrLCB0aGF0IGRvZXMgbm90IGJ1YmJsZSBhbmQgaXMKICAgICAgICAgICAg
IC8vIG5vdCBjYW5jZWxhYmxlLCBhbmQgdGhhdCB1c2VzIHRoZSBUcmFja0V2ZW50IGludGVyZmFj
ZSwgYXQgdGhlIEF1ZGlvVHJhY2tMaXN0IG9iamVjdAogICAgICAgICAgICAgLy8gcmVmZXJlbmNl
ZCBieSB0aGUgYXVkaW9UcmFja3MgYXR0cmlidXRlIG9uIHRoZSBIVE1MTWVkaWFFbGVtZW50Lgot
ICAgICAgICAgICAgbV9zb3VyY2UtPm1lZGlhRWxlbWVudCgpLT5hdWRpb1RyYWNrcygpLT5hcHBl
bmQobmV3QXVkaW9UcmFjayk7CisgICAgICAgICAgICBtX3NvdXJjZS0+bWVkaWFFbGVtZW50KCkt
PmF1ZGlvVHJhY2tzKCkuYXBwZW5kKG5ld0F1ZGlvVHJhY2suY29weVJlZigpKTsKIAogICAgICAg
ICAgICAgLy8gNS4yLjggQ3JlYXRlIGEgbmV3IHRyYWNrIGJ1ZmZlciB0byBzdG9yZSBjb2RlZCBm
cmFtZXMgZm9yIHRoaXMgdHJhY2suCiAgICAgICAgICAgICBBU1NFUlQoIW1fdHJhY2tCdWZmZXJN
YXAuY29udGFpbnMobmV3QXVkaW9UcmFjay0+aWQoKSkpOwpAQCAtMTA3Niw3ICsxMDc2LDcgQEAg
dm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6
YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmYKICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
c3RlcHMgNS4zLjEtNS4zLjguMSBhcyBwZXIgRWRpdG9yJ3MgRHJhZnQgMDkgSmFudWFyeSAyMDE1
LCBhbmQgcmVvcmRlciB0aGlzCiAgICAgICAgICAgICAvLyA1LjMuMSBMZXQgbmV3IHZpZGVvIHRy
YWNrIGJlIGEgbmV3IFZpZGVvVHJhY2sgb2JqZWN0LgogICAgICAgICAgICAgLy8gNS4zLjIgR2Vu
ZXJhdGUgYSB1bmlxdWUgSUQgYW5kIGFzc2lnbiBpdCB0byB0aGUgaWQgcHJvcGVydHkgb24gbmV3
IHZpZGVvIHRyYWNrLgotICAgICAgICAgICAgUmVmUHRyPFZpZGVvVHJhY2s+IG5ld1ZpZGVvVHJh
Y2sgPSBWaWRlb1RyYWNrOjpjcmVhdGUodGhpcywgdmlkZW9UcmFja1ByaXZhdGUpOworICAgICAg
ICAgICAgYXV0byBuZXdWaWRlb1RyYWNrID0gVmlkZW9UcmFjazo6Y3JlYXRlKHRoaXMsIHZpZGVv
VHJhY2tQcml2YXRlKTsKICAgICAgICAgICAgIG5ld1ZpZGVvVHJhY2stPnNldFNvdXJjZUJ1ZmZl
cih0aGlzKTsKIAogICAgICAgICAgICAgLy8gNS4zLjMgSWYgdmlkZW9UcmFja3MubGVuZ3RoIGVx
dWFscyAwLCB0aGVuIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgpAQCAtMTA5MiwxMyArMTA5Miwx
MyBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0
aWFsaXphdGlvblNlZ21lbnQoU291cmNlQnVmZgogICAgICAgICAgICAgLy8gNS4zLjUgUXVldWUg
YSB0YXNrIHRvIGZpcmUgYSB0cnVzdGVkIGV2ZW50IG5hbWVkIGFkZHRyYWNrLCB0aGF0IGRvZXMg
bm90IGJ1YmJsZSBhbmQgaXMKICAgICAgICAgICAgIC8vIG5vdCBjYW5jZWxhYmxlLCBhbmQgdGhh
dCB1c2VzIHRoZSBUcmFja0V2ZW50IGludGVyZmFjZSwgYXQgdGhlIFZpZGVvVHJhY2tMaXN0IG9i
amVjdAogICAgICAgICAgICAgLy8gcmVmZXJlbmNlZCBieSB0aGUgdmlkZW9UcmFja3MgYXR0cmli
dXRlIG9uIHRoaXMgU291cmNlQnVmZmVyIG9iamVjdC4KLSAgICAgICAgICAgIHZpZGVvVHJhY2tz
KCktPmFwcGVuZChuZXdWaWRlb1RyYWNrKTsKKyAgICAgICAgICAgIHZpZGVvVHJhY2tzKCktPmFw
cGVuZChuZXdWaWRlb1RyYWNrLmNvcHlSZWYoKSk7CiAKICAgICAgICAgICAgIC8vIDUuMy42IEFk
ZCBuZXcgdmlkZW8gdHJhY2sgdG8gdGhlIHZpZGVvVHJhY2tzIGF0dHJpYnV0ZSBvbiB0aGUgSFRN
TE1lZGlhRWxlbWVudC4KICAgICAgICAgICAgIC8vIDUuMy43IFF1ZXVlIGEgdGFzayB0byBmaXJl
IGEgdHJ1c3RlZCBldmVudCBuYW1lZCBhZGR0cmFjaywgdGhhdCBkb2VzIG5vdCBidWJibGUgYW5k
IGlzCiAgICAgICAgICAgICAvLyBub3QgY2FuY2VsYWJsZSwgYW5kIHRoYXQgdXNlcyB0aGUgVHJh
Y2tFdmVudCBpbnRlcmZhY2UsIGF0IHRoZSBWaWRlb1RyYWNrTGlzdCBvYmplY3QKICAgICAgICAg
ICAgIC8vIHJlZmVyZW5jZWQgYnkgdGhlIHZpZGVvVHJhY2tzIGF0dHJpYnV0ZSBvbiB0aGUgSFRN
TE1lZGlhRWxlbWVudC4KLSAgICAgICAgICAgIG1fc291cmNlLT5tZWRpYUVsZW1lbnQoKS0+dmlk
ZW9UcmFja3MoKS0+YXBwZW5kKG5ld1ZpZGVvVHJhY2spOworICAgICAgICAgICAgbV9zb3VyY2Ut
Pm1lZGlhRWxlbWVudCgpLT52aWRlb1RyYWNrcygpLmFwcGVuZChuZXdWaWRlb1RyYWNrLmNvcHlS
ZWYoKSk7CiAKICAgICAgICAgICAgIC8vIDUuMy44IENyZWF0ZSBhIG5ldyB0cmFjayBidWZmZXIg
dG8gc3RvcmUgY29kZWQgZnJhbWVzIGZvciB0aGlzIHRyYWNrLgogICAgICAgICAgICAgQVNTRVJU
KCFtX3RyYWNrQnVmZmVyTWFwLmNvbnRhaW5zKG5ld1ZpZGVvVHJhY2stPmlkKCkpKTsKQEAgLTEx
MjgsMTMgKzExMjgsMTMgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVE
aWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmYKICAgICAgICAgICAgIC8v
IDUuNC40IFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgdHJ1c3RlZCBldmVudCBuYW1lZCBhZGR0cmFj
aywgdGhhdCBkb2VzIG5vdCBidWJibGUgYW5kIGlzCiAgICAgICAgICAgICAvLyBub3QgY2FuY2Vs
YWJsZSwgYW5kIHRoYXQgdXNlcyB0aGUgVHJhY2tFdmVudCBpbnRlcmZhY2UsIGF0IHRleHRUcmFj
a3MgYXR0cmlidXRlIG9uIHRoaXMKICAgICAgICAgICAgIC8vIFNvdXJjZUJ1ZmZlciBvYmplY3Qu
Ci0gICAgICAgICAgICB0ZXh0VHJhY2tzKCktPmFwcGVuZChuZXdUZXh0VHJhY2spOworICAgICAg
ICAgICAgdGV4dFRyYWNrcygpLT5hcHBlbmQoKm5ld1RleHRUcmFjayk7CiAKICAgICAgICAgICAg
IC8vIDUuNC41IEFkZCBuZXcgdGV4dCB0cmFjayB0byB0aGUgdGV4dFRyYWNrcyBhdHRyaWJ1dGUg
b24gdGhlIEhUTUxNZWRpYUVsZW1lbnQuCiAgICAgICAgICAgICAvLyA1LjQuNiBRdWV1ZSBhIHRh
c2sgdG8gZmlyZSBhIHRydXN0ZWQgZXZlbnQgbmFtZWQgYWRkdHJhY2ssIHRoYXQgZG9lcyBub3Qg
YnViYmxlIGFuZCBpcwogICAgICAgICAgICAgLy8gbm90IGNhbmNlbGFibGUsIGFuZCB0aGF0IHVz
ZXMgdGhlIFRyYWNrRXZlbnQgaW50ZXJmYWNlLCBhdCB0aGUgVGV4dFRyYWNrTGlzdCBvYmplY3QK
ICAgICAgICAgICAgIC8vIHJlZmVyZW5jZWQgYnkgdGhlIHRleHRUcmFja3MgYXR0cmlidXRlIG9u
IHRoZSBIVE1MTWVkaWFFbGVtZW50LgotICAgICAgICAgICAgbV9zb3VyY2UtPm1lZGlhRWxlbWVu
dCgpLT50ZXh0VHJhY2tzKCktPmFwcGVuZChuZXdUZXh0VHJhY2spOworICAgICAgICAgICAgbV9z
b3VyY2UtPm1lZGlhRWxlbWVudCgpLT50ZXh0VHJhY2tzKCkuYXBwZW5kKG5ld1RleHRUcmFjay5y
ZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICAgICAgLy8gNS40LjcgQ3JlYXRlIGEgbmV3IHRy
YWNrIGJ1ZmZlciB0byBzdG9yZSBjb2RlZCBmcmFtZXMgZm9yIHRoaXMgdHJhY2suCiAgICAgICAg
ICAgICBBU1NFUlQoIW1fdHJhY2tCdWZmZXJNYXAuY29udGFpbnModGV4dFRyYWNrUHJpdmF0ZS0+
aWQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFja0N1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcApp
bmRleCA1ZDBhZGE0YWU1NDQ2YzliNjIwMWY3MmJjYjcxYmQ3NDJhZDBkZjU2Li44NjVlMjBkMDYz
ODQ0NjkzNzNjM2FkYmE5MGE3MWY2N2U0NGYyZDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBUcmFja0Jhc2UqIHRvVHJhY2soSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CiAgICAgaWYgKG9i
amVjdC0+aW5oZXJpdHMoSlNUZXh0VHJhY2s6OmluZm8oKSkpCkBAIC01MCw3ICs1MCw3IEBAIFRy
YWNrQmFzZSogdG9UcmFjayhKU1ZhbHVlIHZhbHVlKQogICAgIGlmIChvYmplY3QtPmluaGVyaXRz
KEpTVmlkZW9UcmFjazo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuICZqc0Nhc3Q8SlNWaWRlb1Ry
YWNrKj4ob2JqZWN0KS0+d3JhcHBlZCgpOwogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVHJhY2tCYXNlJiB0cmFjaykKQEAgLTYyLDE3ICs2Miwx
NyBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRyYWNrQmFzZSYgdAogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBUcmFja0Jhc2U6OkF1ZGlvVHJhY2s6Ci0gICAgICAgIGlmIChhdXRvKiB3cmFwcGVy
ID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksICp0b0F1ZGlvVHJhY2so
JnRyYWNrKSkpCisgICAgICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihn
bG9iYWxPYmplY3QtPndvcmxkKCksIGRvd25jYXN0PEF1ZGlvVHJhY2s+KHRyYWNrKSkpCiAgICAg
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICAgICAgcmV0dXJuIENSRUFURV9ET01fV1JBUFBF
UihnbG9iYWxPYmplY3QsIEF1ZGlvVHJhY2ssIHRyYWNrKTsKIAogICAgIGNhc2UgVHJhY2tCYXNl
OjpWaWRlb1RyYWNrOgotICAgICAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldENhY2hlZFdyYXBw
ZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCAqdG9WaWRlb1RyYWNrKCZ0cmFjaykpKQorICAgICAg
ICBpZiAoYXV0byogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3Js
ZCgpLCBkb3duY2FzdDxWaWRlb1RyYWNrPih0cmFjaykpKQogICAgICAgICAgICAgcmV0dXJuIHdy
YXBwZXI7CiAgICAgICAgIHJldHVybiBDUkVBVEVfRE9NX1dSQVBQRVIoZ2xvYmFsT2JqZWN0LCBW
aWRlb1RyYWNrLCB0cmFjayk7CiAKICAgICBjYXNlIFRyYWNrQmFzZTo6VGV4dFRyYWNrOgotICAg
ICAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53
b3JsZCgpLCAqdG9UZXh0VHJhY2soJnRyYWNrKSkpCisgICAgICAgIGlmIChhdXRvKiB3cmFwcGVy
ID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGRvd25jYXN0PFRleHRU
cmFjaz4odHJhY2spKSkKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgICByZXR1
cm4gQ1JFQVRFX0RPTV9XUkFQUEVSKGdsb2JhbE9iamVjdCwgVGV4dFRyYWNrLCB0cmFjayk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggMzU5Yzk1
N2ZkYWZlZjNmYzVkNzJiYzdmYjAzNjUwNzY4NzBmNjgwMi4uNjdiNDAyYzYxYmI1ZjZlY2I4YjNh
ZDgyZjJlMGQ5YjE5ZWNmNjNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCkBAIC0xNzM5LDcgKzE3MzksOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRU
cmFja1JlYWR5U3RhdGVDaGFuZ2VkKFRleHRUcmFjayogdHJhY2spCiAKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6YXVkaW9UcmFja0VuYWJsZWRDaGFuZ2VkKEF1ZGlvVHJhY2sqIHRyYWNrKQogewot
ICAgIGlmIChtX2F1ZGlvVHJhY2tzICYmIG1fYXVkaW9UcmFja3MtPmNvbnRhaW5zKHRyYWNrKSkK
KyAgICBBU1NFUlQodHJhY2spOworICAgIGlmIChtX2F1ZGlvVHJhY2tzICYmIG1fYXVkaW9UcmFj
a3MtPmNvbnRhaW5zKCp0cmFjaykpCiAgICAgICAgIG1fYXVkaW9UcmFja3MtPnNjaGVkdWxlQ2hh
bmdlRXZlbnQoKTsKIH0KIApAQCAtMTc2OSw3ICsxNzcwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp0ZXh0VHJhY2tNb2RlQ2hhbmdlZChUZXh0VHJhY2sqIHRyYWNrKQogCiAgICAgY29uZmln
dXJlVGV4dFRyYWNrRGlzcGxheShBc3N1bWVUZXh0VHJhY2tWaXNpYmlsaXR5Q2hhbmdlZCk7CiAK
LSAgICBpZiAobV90ZXh0VHJhY2tzICYmIG1fdGV4dFRyYWNrcy0+Y29udGFpbnModHJhY2spKQor
ICAgIGlmIChtX3RleHRUcmFja3MgJiYgbV90ZXh0VHJhY2tzLT5jb250YWlucygqdHJhY2spKQog
ICAgICAgICBtX3RleHRUcmFja3MtPnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKIAogI2lmIEVOQUJM
RShBVkZfQ0FQVElPTlMpCkBAIC0xNzgwLDcgKzE3ODEsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnRleHRUcmFja01vZGVDaGFuZ2VkKFRleHRUcmFjayogdHJhY2spCiAKIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6dmlkZW9UcmFja1NlbGVjdGVkQ2hhbmdlZChWaWRlb1RyYWNrKiB0cmFjaykK
IHsKLSAgICBpZiAobV92aWRlb1RyYWNrcyAmJiBtX3ZpZGVvVHJhY2tzLT5jb250YWlucyh0cmFj
aykpCisgICAgQVNTRVJUKHRyYWNrKTsKKyAgICBpZiAobV92aWRlb1RyYWNrcyAmJiBtX3ZpZGVv
VHJhY2tzLT5jb250YWlucygqdHJhY2spKQogICAgICAgICBtX3ZpZGVvVHJhY2tzLT5zY2hlZHVs
ZUNoYW5nZUV2ZW50KCk7CiB9CiAKQEAgLTE4MTMsNyArMTgxNSw3IEBAIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6dGV4dFRyYWNrQWRkQ3VlcyhUZXh0VHJhY2sqIHRyYWNrLCBjb25zdCBUZXh0VHJh
Y2tDdWVMaXN0CiAgICAgICAgIHRleHRUcmFja0FkZEN1ZSh0cmFjaywgY3Vlcy0+aXRlbShpKSk7
CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrUmVtb3ZlQ3VlcyhUZXh0VHJh
Y2sqLCBjb25zdCBUZXh0VHJhY2tDdWVMaXN0KiBjdWVzKSAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6dGV4dFRyYWNrUmVtb3ZlQ3VlcyhUZXh0VHJhY2sqLCBjb25zdCBUZXh0VHJhY2tDdWVMaXN0
KiBjdWVzKQogewogICAgIFRyYWNrRGlzcGxheVVwZGF0ZVNjb3BlIHNjb3BlKHRoaXMpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3Vlcy0+bGVuZ3RoKCk7ICsraSkKQEAgLTM1NzIsNyAr
MzU3NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJEaWRBZGRUZXh0VHJh
Y2soUGFzc1JlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2CiAgICAgLy8gOS4gRmlyZSBhbiBldmVu
dCB3aXRoIHRoZSBuYW1lIGFkZHRyYWNrLCB0aGF0IGRvZXMgbm90IGJ1YmJsZSBhbmQgaXMgbm90
IGNhbmNlbGFibGUsIGFuZCB0aGF0IHVzZXMgdGhlIFRyYWNrRXZlbnQKICAgICAvLyBpbnRlcmZh
Y2UsIHdpdGggdGhlIHRyYWNrIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgdGV4dCB0cmFj
aydzIFRleHRUcmFjayBvYmplY3QsIGF0IHRoZSBtZWRpYSBlbGVtZW50J3MKICAgICAvLyB0ZXh0
VHJhY2tzIGF0dHJpYnV0ZSdzIFRleHRUcmFja0xpc3Qgb2JqZWN0LgotICAgIGFkZFRleHRUcmFj
ayh0ZXh0VHJhY2sucmVsZWFzZSgpKTsKKyAgICBhZGRUZXh0VHJhY2sodGV4dFRyYWNrLnJlbGVh
c2VOb25OdWxsKCkpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyRGlk
QWRkVmlkZW9UcmFjayhQYXNzUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlPiBwcnBUcmFjaykKQEAg
LTM2MDEsMTIgKzM2MDMsMTIgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjbG9zZUNhcHRpb25U
cmFja3NDaGFuZ2VkKCkKICAgICAgICAgbWVkaWFDb250cm9scygpLT5jbG9zZWRDYXB0aW9uVHJh
Y2tzQ2hhbmdlZCgpOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZEF1ZGlvVHJhY2so
UGFzc1JlZlB0cjxBdWRpb1RyYWNrPiB0cmFjaykKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YWRk
QXVkaW9UcmFjayhSZWY8QXVkaW9UcmFjaz4mJiB0cmFjaykKIHsKLSAgICBhdWRpb1RyYWNrcygp
LT5hcHBlbmQodHJhY2spOworICAgIGF1ZGlvVHJhY2tzKCkuYXBwZW5kKFdURk1vdmUodHJhY2sp
KTsKIH0KIAotdm9pZCBIVE1MTWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2soUGFzc1JlZlB0cjxU
ZXh0VHJhY2s+IHRyYWNrKQordm9pZCBIVE1MTWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2soUmVm
PFRleHRUcmFjaz4mJiB0cmFjaykKIHsKICAgICBpZiAoIW1fcmVxdWlyZUNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWRDYWxsYmFja3MpIHsKICAgICAgICAgbV9yZXF1aXJlQ2FwdGlvblByZWZlcmVu
Y2VzQ2hhbmdlZENhbGxiYWNrcyA9IHRydWU7CkBAIC0zNjE2LDM0ICszNjE4LDM0IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6YWRkVGV4dFRyYWNrKFBhc3NSZWZQdHI8VGV4dFRyYWNrPiB0cmFj
aykKICAgICAgICAgICAgIG1fY2FwdGlvbkRpc3BsYXlNb2RlID0gcGFnZS0+Z3JvdXAoKS5jYXB0
aW9uUHJlZmVyZW5jZXMoKS5jYXB0aW9uRGlzcGxheU1vZGUoKTsKICAgICB9CiAKLSAgICB0ZXh0
VHJhY2tzKCktPmFwcGVuZCh0cmFjayk7CisgICAgdGV4dFRyYWNrcygpLmFwcGVuZChXVEZNb3Zl
KHRyYWNrKSk7CiAKICAgICBjbG9zZUNhcHRpb25UcmFja3NDaGFuZ2VkKCk7CiB9CiAKLXZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6YWRkVmlkZW9UcmFjayhQYXNzUmVmUHRyPFZpZGVvVHJhY2s+IHRy
YWNrKQordm9pZCBIVE1MTWVkaWFFbGVtZW50OjphZGRWaWRlb1RyYWNrKFJlZjxWaWRlb1RyYWNr
PiYmIHRyYWNrKQogewotICAgIHZpZGVvVHJhY2tzKCktPmFwcGVuZCh0cmFjayk7CisgICAgdmlk
ZW9UcmFja3MoKS5hcHBlbmQoV1RGTW92ZSh0cmFjaykpOwogfQogCi12b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnJlbW92ZUF1ZGlvVHJhY2soQXVkaW9UcmFjayogdHJhY2spCit2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnJlbW92ZUF1ZGlvVHJhY2soQXVkaW9UcmFjayYgdHJhY2spCiB7CiAgICAgbV9h
dWRpb1RyYWNrcy0+cmVtb3ZlKHRyYWNrKTsKIH0KIAotdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpy
ZW1vdmVUZXh0VHJhY2soVGV4dFRyYWNrKiB0cmFjaywgYm9vbCBzY2hlZHVsZUV2ZW50KQordm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVUZXh0VHJhY2soVGV4dFRyYWNrJiB0cmFjaywgYm9v
bCBzY2hlZHVsZUV2ZW50KQogewogICAgIFRyYWNrRGlzcGxheVVwZGF0ZVNjb3BlIHNjb3BlKHRo
aXMpOwotICAgIGlmIChUZXh0VHJhY2tDdWVMaXN0KiBjdWVzID0gdHJhY2stPmN1ZXMoKSkKLSAg
ICAgICAgdGV4dFRyYWNrUmVtb3ZlQ3Vlcyh0cmFjaywgY3Vlcyk7Ci0gICAgdHJhY2stPmNsZWFy
Q2xpZW50KCk7CisgICAgaWYgKFRleHRUcmFja0N1ZUxpc3QqIGN1ZXMgPSB0cmFjay5jdWVzKCkp
CisgICAgICAgIHRleHRUcmFja1JlbW92ZUN1ZXMoJnRyYWNrLCBjdWVzKTsKKyAgICB0cmFjay5j
bGVhckNsaWVudCgpOwogICAgIGlmIChtX3RleHRUcmFja3MpCiAgICAgICAgIG1fdGV4dFRyYWNr
cy0+cmVtb3ZlKHRyYWNrLCBzY2hlZHVsZUV2ZW50KTsKIAogICAgIGNsb3NlQ2FwdGlvblRyYWNr
c0NoYW5nZWQoKTsKIH0KIAotdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVWaWRlb1RyYWNr
KFZpZGVvVHJhY2sqIHRyYWNrKQordm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVWaWRlb1Ry
YWNrKFZpZGVvVHJhY2smIHRyYWNrKQogewogICAgIG1fdmlkZW9UcmFja3MtPnJlbW92ZSh0cmFj
ayk7CiB9CkBAIC0zNjUxLDIwICszNjUzLDE5IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVt
b3ZlVmlkZW9UcmFjayhWaWRlb1RyYWNrKiB0cmFjaykKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
Zm9yZ2V0UmVzb3VyY2VTcGVjaWZpY1RyYWNrcygpCiB7CiAgICAgd2hpbGUgKG1fYXVkaW9UcmFj
a3MgJiYgIG1fYXVkaW9UcmFja3MtPmxlbmd0aCgpKQotICAgICAgICByZW1vdmVBdWRpb1RyYWNr
KG1fYXVkaW9UcmFja3MtPmxhc3RJdGVtKCkpOworICAgICAgICByZW1vdmVBdWRpb1RyYWNrKCpt
X2F1ZGlvVHJhY2tzLT5sYXN0SXRlbSgpKTsKIAogICAgIGlmIChtX3RleHRUcmFja3MpIHsKICAg
ICAgICAgVHJhY2tEaXNwbGF5VXBkYXRlU2NvcGUgc2NvcGUodGhpcyk7CiAgICAgICAgIGZvciAo
aW50IGkgPSBtX3RleHRUcmFja3MtPmxlbmd0aCgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAg
ICAgICAgIFRleHRUcmFjayogdHJhY2sgPSBtX3RleHRUcmFja3MtPml0ZW0oaSk7Ci0KLSAgICAg
ICAgICAgIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpJbkJhbmQpCisgICAg
ICAgICAgICBhdXRvJiB0cmFjayA9ICptX3RleHRUcmFja3MtPml0ZW0oaSk7CisgICAgICAgICAg
ICBpZiAodHJhY2sudHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpJbkJhbmQpCiAgICAgICAgICAg
ICAgICAgcmVtb3ZlVGV4dFRyYWNrKHRyYWNrLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICB3aGlsZSAobV92aWRlb1RyYWNrcyAmJiAgbV92aWRlb1RyYWNrcy0+bGVuZ3RoKCkpCi0g
ICAgICAgIHJlbW92ZVZpZGVvVHJhY2sobV92aWRlb1RyYWNrcy0+bGFzdEl0ZW0oKSk7CisgICAg
ICAgIHJlbW92ZVZpZGVvVHJhY2soKm1fdmlkZW9UcmFja3MtPmxhc3RJdGVtKCkpOwogfQogCiBS
ZWZQdHI8VGV4dFRyYWNrPiBIVE1MTWVkaWFFbGVtZW50OjphZGRUZXh0VHJhY2soY29uc3QgU3Ry
aW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBF
eGNlcHRpb25Db2RlJiBlYykKQEAgLTM2OTAsNyArMzY5MSw3IEBAIFJlZlB0cjxUZXh0VHJhY2s+
IEhUTUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0
IFN0cmluCiAgICAgLy8gZmlyc3QgYXBwZW5kIHRoZSB0cmFjayB0byB0aGUgdGV4dCB0cmFjayBs
aXN0LgogCiAgICAgLy8gNi4gQWRkIHRoZSBuZXcgdGV4dCB0cmFjayB0byB0aGUgbWVkaWEgZWxl
bWVudCdzIGxpc3Qgb2YgdGV4dCB0cmFja3MuCi0gICAgYWRkVGV4dFRyYWNrKHRleHRUcmFjay5w
dHIoKSk7CisgICAgYWRkVGV4dFRyYWNrKHRleHRUcmFjay5jb3B5UmVmKCkpOwogCiAgICAgLy8g
Li4uIGl0cyB0ZXh0IHRyYWNrIHJlYWRpbmVzcyBzdGF0ZSB0byB0aGUgdGV4dCB0cmFjayBsb2Fk
ZWQgc3RhdGUgLi4uCiAgICAgdGV4dFRyYWNrLT5zZXRSZWFkaW5lc3NTdGF0ZShUZXh0VHJhY2s6
OkxvYWRlZCk7CkBAIC0zNzAxLDI4ICszNzAyLDI4IEBAIFJlZlB0cjxUZXh0VHJhY2s+IEhUTUxN
ZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmlu
CiAgICAgcmV0dXJuIFdURk1vdmUodGV4dFRyYWNrKTsKIH0KIAotQXVkaW9UcmFja0xpc3QqIEhU
TUxNZWRpYUVsZW1lbnQ6OmF1ZGlvVHJhY2tzKCkKK0F1ZGlvVHJhY2tMaXN0JiBIVE1MTWVkaWFF
bGVtZW50OjphdWRpb1RyYWNrcygpCiB7CiAgICAgaWYgKCFtX2F1ZGlvVHJhY2tzKQogICAgICAg
ICBtX2F1ZGlvVHJhY2tzID0gQXVkaW9UcmFja0xpc3Q6OmNyZWF0ZSh0aGlzLCBBY3RpdmVET01P
YmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAKLSAgICByZXR1cm4gbV9hdWRpb1Ry
YWNrcy5nZXQoKTsKKyAgICByZXR1cm4gKm1fYXVkaW9UcmFja3M7CiB9CiAKLVRleHRUcmFja0xp
c3QqIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja3MoKSAKK1RleHRUcmFja0xpc3QmIEhUTUxN
ZWRpYUVsZW1lbnQ6OnRleHRUcmFja3MoKQogewogICAgIGlmICghbV90ZXh0VHJhY2tzKQogICAg
ICAgICBtX3RleHRUcmFja3MgPSBUZXh0VHJhY2tMaXN0OjpjcmVhdGUodGhpcywgQWN0aXZlRE9N
T2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogCi0gICAgcmV0dXJuIG1fdGV4dFRy
YWNrcy5nZXQoKTsKKyAgICByZXR1cm4gKm1fdGV4dFRyYWNrczsKIH0KIAotVmlkZW9UcmFja0xp
c3QqIEhUTUxNZWRpYUVsZW1lbnQ6OnZpZGVvVHJhY2tzKCkKK1ZpZGVvVHJhY2tMaXN0JiBIVE1M
TWVkaWFFbGVtZW50Ojp2aWRlb1RyYWNrcygpCiB7CiAgICAgaWYgKCFtX3ZpZGVvVHJhY2tzKQog
ICAgICAgICBtX3ZpZGVvVHJhY2tzID0gVmlkZW9UcmFja0xpc3Q6OmNyZWF0ZSh0aGlzLCBBY3Rp
dmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAKLSAgICByZXR1cm4gbV92
aWRlb1RyYWNrcy5nZXQoKTsKKyAgICByZXR1cm4gKm1fdmlkZW9UcmFja3M7CiB9CiAKIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqIHRyYWNr
RWxlbWVudCkKQEAgLTM3MzcsNyArMzczOCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlk
QWRkVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqIHRyYWNrRWxlbWVudCkKICAgICBpZiAoIXRl
eHRUcmFjaykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGFkZFRleHRUcmFjayh0ZXh0VHJh
Y2sucmVsZWFzZSgpKTsKKyAgICBhZGRUZXh0VHJhY2sodGV4dFRyYWNrLnJlbGVhc2VOb25OdWxs
KCkpOwogICAgIAogICAgIC8vIERvIG5vdCBzY2hlZHVsZSB0aGUgdHJhY2sgbG9hZGluZyB1bnRp
bCBwYXJzaW5nIGZpbmlzaGVzIHNvIHdlIGRvbid0IHN0YXJ0IGJlZm9yZSBhbGwgdHJhY2tzCiAg
ICAgLy8gaW4gdGhlIG1hcmt1cCBoYXZlIGJlZW4gYWRkZWQuCkBAIC0zNzcyLDcgKzM3NzMsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZFJlbW92ZVRleHRUcmFjayhIVE1MVHJhY2tFbGVt
ZW50KiB0cmFja0VsZW1lbnQpCiAgICAgLy8gV2hlbiBhIHRyYWNrIGVsZW1lbnQncyBwYXJlbnQg
ZWxlbWVudCBjaGFuZ2VzIGFuZCB0aGUgb2xkIHBhcmVudCB3YXMgYSBtZWRpYSBlbGVtZW50LCAK
ICAgICAvLyB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3QgcmVtb3ZlIHRoZSB0cmFjayBlbGVtZW50
J3MgY29ycmVzcG9uZGluZyB0ZXh0IHRyYWNrIGZyb20gdGhlIAogICAgIC8vIG1lZGlhIGVsZW1l
bnQncyBsaXN0IG9mIHRleHQgdHJhY2tzLgotICAgIHJlbW92ZVRleHRUcmFjayh0ZXh0VHJhY2su
Z2V0KCkpOworICAgIHJlbW92ZVRleHRUcmFjaygqdGV4dFRyYWNrKTsKIAogICAgIHNpemVfdCBp
bmRleCA9IG1fdGV4dFRyYWNrc1doZW5SZXNvdXJjZVNlbGVjdGlvbkJlZ2FuLmZpbmQodGV4dFRy
YWNrLmdldCgpKTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCkBAIC00MDAyLDI0ICs0MDAz
LDI0IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dmlzaWJpbGl0eURpZENoYW5nZSgpCiAKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0VHJhY2soVGV4dFRyYWNrKiB0cmFj
a1RvU2VsZWN0KQogewotICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IHRleHRUcmFja3Mo
KTsKLSAgICBpZiAoIXRyYWNrTGlzdCB8fCAhdHJhY2tMaXN0LT5sZW5ndGgoKSkKKyAgICBUZXh0
VHJhY2tMaXN0JiB0cmFja0xpc3QgPSB0ZXh0VHJhY2tzKCk7CisgICAgaWYgKCF0cmFja0xpc3Qu
bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICh0cmFja1RvU2VsZWN0ICE9IFRl
eHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkgJiYgdHJhY2tUb1NlbGVjdCAhPSBUZXh0VHJh
Y2s6OmNhcHRpb25NZW51QXV0b21hdGljSXRlbSgpKSB7Ci0gICAgICAgIGlmICghdHJhY2tMaXN0
LT5jb250YWlucyh0cmFja1RvU2VsZWN0KSkKKyAgICAgICAgaWYgKCF0cmFja1RvU2VsZWN0IHx8
ICF0cmFja0xpc3QuY29udGFpbnMoKnRyYWNrVG9TZWxlY3QpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IHRyYWNrTGlzdC0+
bGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgVGV4dFRyYWNrKiB0cmFj
ayA9IHRyYWNrTGlzdC0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmICghdHJhY2tUb1NlbGVjdCB8
fCB0cmFjayAhPSB0cmFja1RvU2VsZWN0KQotICAgICAgICAgICAgICAgIHRyYWNrLT5zZXRNb2Rl
KFRleHRUcmFjazo6TW9kZTo6RGlzYWJsZWQpOworICAgICAgICBmb3IgKGludCBpID0gMCwgbGVu
Z3RoID0gdHJhY2tMaXN0Lmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IGF1dG8mIHRyYWNrID0gKnRyYWNrTGlzdC5pdGVtKGkpOworICAgICAgICAgICAgaWYgKCZ0cmFj
ayAhPSB0cmFja1RvU2VsZWN0KQorICAgICAgICAgICAgICAgIHRyYWNrLnNldE1vZGUoVGV4dFRy
YWNrOjpNb2RlOjpEaXNhYmxlZCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
dHJhY2stPnNldE1vZGUoVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKTsKKyAgICAgICAgICAgICAg
ICB0cmFjay5zZXRNb2RlKFRleHRUcmFjazo6TW9kZTo6U2hvd2luZyk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKHRyYWNrVG9TZWxlY3QgPT0gVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0
ZW0oKSkgewotICAgICAgICBmb3IgKGludCBpID0gMCwgbGVuZ3RoID0gdHJhY2tMaXN0LT5sZW5n
dGgoKTsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgdHJhY2tMaXN0LT5pdGVtKGkpLT5z
ZXRNb2RlKFRleHRUcmFjazo6TW9kZTo6RGlzYWJsZWQpOworICAgICAgICBmb3IgKGludCBpID0g
MCwgbGVuZ3RoID0gdHJhY2tMaXN0Lmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAg
ICAgICB0cmFja0xpc3QuaXRlbShpKS0+c2V0TW9kZShUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVk
KTsKICAgICB9CiAKICAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCBiNDMxYjBjNzI3NTQxZGEwMGQwMjE5MDk0N2RmNmYx
ZGRkMWQ0N2MxLi5lNTJlODc5OGU0NGJhZTc0NGI1Zjk5ODM1ZDI3NzczMzhiYzM3OTg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtMjgwLDE4ICsyODAsMTggQEAg
cHVibGljOgogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBSZWZQdHI8VGV4dFRyYWNrPiBh
ZGRUZXh0VHJhY2soY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25z
dCBTdHJpbmcmIGxhbmd1YWdlLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBBdWRpb1RyYWNrTGlz
dCogYXVkaW9UcmFja3MoKTsKLSAgICBUZXh0VHJhY2tMaXN0KiB0ZXh0VHJhY2tzKCk7Ci0gICAg
VmlkZW9UcmFja0xpc3QqIHZpZGVvVHJhY2tzKCk7CisgICAgQXVkaW9UcmFja0xpc3QmIGF1ZGlv
VHJhY2tzKCk7CisgICAgVGV4dFRyYWNrTGlzdCYgdGV4dFRyYWNrcygpOworICAgIFZpZGVvVHJh
Y2tMaXN0JiB2aWRlb1RyYWNrcygpOwogCiAgICAgQ3VlTGlzdCBjdXJyZW50bHlBY3RpdmVDdWVz
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50bHlBY3RpdmVDdWVzOyB9CiAKLSAgICB2b2lkIGFk
ZEF1ZGlvVHJhY2soUGFzc1JlZlB0cjxBdWRpb1RyYWNrPik7Ci0gICAgdm9pZCBhZGRUZXh0VHJh
Y2soUGFzc1JlZlB0cjxUZXh0VHJhY2s+KTsKLSAgICB2b2lkIGFkZFZpZGVvVHJhY2soUGFzc1Jl
ZlB0cjxWaWRlb1RyYWNrPik7Ci0gICAgdm9pZCByZW1vdmVBdWRpb1RyYWNrKEF1ZGlvVHJhY2sq
KTsKLSAgICB2b2lkIHJlbW92ZVRleHRUcmFjayhUZXh0VHJhY2sqLCBib29sIHNjaGVkdWxlRXZl
bnQgPSB0cnVlKTsKLSAgICB2b2lkIHJlbW92ZVZpZGVvVHJhY2soVmlkZW9UcmFjayopOworICAg
IHZvaWQgYWRkQXVkaW9UcmFjayhSZWY8QXVkaW9UcmFjaz4mJik7CisgICAgdm9pZCBhZGRUZXh0
VHJhY2soUmVmPFRleHRUcmFjaz4mJik7CisgICAgdm9pZCBhZGRWaWRlb1RyYWNrKFJlZjxWaWRl
b1RyYWNrPiYmKTsKKyAgICB2b2lkIHJlbW92ZUF1ZGlvVHJhY2soQXVkaW9UcmFjayYpOworICAg
IHZvaWQgcmVtb3ZlVGV4dFRyYWNrKFRleHRUcmFjayYsIGJvb2wgc2NoZWR1bGVFdmVudCA9IHRy
dWUpOworICAgIHZvaWQgcmVtb3ZlVmlkZW9UcmFjayhWaWRlb1RyYWNrJik7CiAgICAgdm9pZCBm
b3JnZXRSZXNvdXJjZVNwZWNpZmljVHJhY2tzKCk7CiAgICAgdm9pZCBjbG9zZUNhcHRpb25UcmFj
a3NDaGFuZ2VkKCk7CiAgICAgdm9pZCBub3RpZnlNZWRpYVBsYXllck9mVGV4dFRyYWNrQ2hhbmdl
cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudHMuY3BwCmluZGV4IGM5ZjRhNDk3NzE4MjUxZTM2ZmUwZTFhMjgzZDJlYzc0MTYzYWRlZDAu
LjJlZjBlODY1NzMwYThkZDNlMzAwYjQ2NmNkNWRkMWY5NmJiMDJmZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTcz
NCw4ICs3MzQsNyBAQCB2b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxl
bWVudDo6dXBkYXRlRGlzcGxheSgpCiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1lZGlhRWxlbWVudC0+dGV4
dFRyYWNrcygpOwotICAgIGlmICghdHJhY2tMaXN0IHx8ICF0cmFja0xpc3QtPmxlbmd0aCgpKQor
ICAgIGlmICghbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkubGVuZ3RoKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHJlYnVpbGRUcmFja0xpc3RNZW51KCk7CkBAIC03OTYsMTQgKzc5NSwxNCBA
QCB2b2lkIE1lZGlhQ29udHJvbENsb3NlZENhcHRpb25zVHJhY2tMaXN0RWxlbWVudDo6cmVidWls
ZFRyYWNrTGlzdE1lbnUoKQogICAgIGlmICghbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1cm47
CiAKLSAgICBUZXh0VHJhY2tMaXN0KiB0cmFja0xpc3QgPSBtZWRpYUVsZW1lbnQtPnRleHRUcmFj
a3MoKTsKLSAgICBpZiAoIXRyYWNrTGlzdCB8fCAhdHJhY2tMaXN0LT5sZW5ndGgoKSkKKyAgICBU
ZXh0VHJhY2tMaXN0JiB0cmFja0xpc3QgPSBtZWRpYUVsZW1lbnQtPnRleHRUcmFja3MoKTsKKyAg
ICBpZiAoIXRyYWNrTGlzdC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFk
b2N1bWVudCgpLnBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8mIGNhcHRpb25QcmVm
ZXJlbmNlcyA9IGRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygp
OwotICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gdHJhY2tzRm9yTWVudSA9IGNhcHRpb25Q
cmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlzdCk7CisgICAgVmVjdG9y
PFJlZlB0cjxUZXh0VHJhY2s+PiB0cmFja3NGb3JNZW51ID0gY2FwdGlvblByZWZlcmVuY2VzLnNv
cnRlZFRyYWNrTGlzdEZvck1lbnUoJnRyYWNrTGlzdCk7CiAKICAgICBhdXRvIGNhcHRpb25zSGVh
ZGVyID0gZG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50KGgzVGFnLCBBU1NFUlRfTk9fRVhDRVBUSU9O
KTsKICAgICBjYXB0aW9uc0hlYWRlci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS5jcmVhdGVUZXh0
Tm9kZSh0ZXh0VHJhY2tTdWJ0aXRsZXNUZXh0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0F1ZGlvVHJhY2suY3BwCmluZGV4IDVhZjQ3NjE0OWQxOTEwM2JlMjU3ODA5Y2Y4ZDA0MjJiY2Nk
M2Y1YTYuLjhjMzU2Zjc5MTVkNDk4Y2UzNDEyZjc5ODgyZjhkMDYwYjA4NTYxOTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFjay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrLmNwcApAQCAtOTAsNyArOTAsNyBAQCBBdWRp
b1RyYWNrOjpBdWRpb1RyYWNrKEF1ZGlvVHJhY2tDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxB
dWRpb1RyYWNrUHJpdmF0ZT4gdAogCiBBdWRpb1RyYWNrOjp+QXVkaW9UcmFjaygpCiB7Ci0gICAg
bV9wcml2YXRlLT5zZXRDbGllbnQoMCk7CisgICAgbV9wcml2YXRlLT5zZXRDbGllbnQobnVsbHB0
cik7CiB9CiAKIHZvaWQgQXVkaW9UcmFjazo6c2V0UHJpdmF0ZShQYXNzUmVmUHRyPEF1ZGlvVHJh
Y2tQcml2YXRlPiB0cmFja1ByaXZhdGUpCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBBdWRpb1Ry
YWNrOjpzZXRQcml2YXRlKFBhc3NSZWZQdHI8QXVkaW9UcmFja1ByaXZhdGU+IHRyYWNrUHJpdmF0
ZSkKICAgICBpZiAobV9wcml2YXRlID09IHRyYWNrUHJpdmF0ZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9wcml2YXRlLT5zZXRDbGllbnQoMCk7CisgICAgbV9wcml2YXRlLT5zZXRDbGllbnQo
bnVsbHB0cik7CiAgICAgbV9wcml2YXRlID0gdHJhY2tQcml2YXRlOwogICAgIG1fcHJpdmF0ZS0+
c2V0Q2xpZW50KHRoaXMpOwogCkBAIC0xMTEsMjAgKzExMSwxMiBAQCB2b2lkIEF1ZGlvVHJhY2s6
OnNldFByaXZhdGUoUGFzc1JlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZT4gdHJhY2tQcml2YXRlKQog
CiBib29sIEF1ZGlvVHJhY2s6OmlzVmFsaWRLaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
IGNvbnN0CiB7Ci0gICAgaWYgKHZhbHVlID09IGFsdGVybmF0aXZlS2V5d29yZCgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodmFsdWUgPT0gZGVzY3JpcHRpb25LZXl3b3JkKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSBtYWluS2V5d29yZCgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodmFsdWUgPT0gbWFpbkRlc2NLZXl3b3JkKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSB0cmFuc2xhdGlvbktleXdvcmQo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09IGNvbW1lbnRhcnlLZXl3
b3JkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiB2YWx1ZSA9PSBhbHRlcm5hdGl2ZUtleXdvcmQoKQorICAgICAgICB8fCB2YWx1ZSA9PSBk
ZXNjcmlwdGlvbktleXdvcmQoKQorICAgICAgICB8fCB2YWx1ZSA9PSBtYWluS2V5d29yZCgpCisg
ICAgICAgIHx8IHZhbHVlID09IG1haW5EZXNjS2V5d29yZCgpCisgICAgICAgIHx8IHZhbHVlID09
IHRyYW5zbGF0aW9uS2V5d29yZCgpCisgICAgICAgIHx8IHZhbHVlID09IGNvbW1lbnRhcnlLZXl3
b3JkKCk7CiB9CiAKIHZvaWQgQXVkaW9UcmFjazo6c2V0RW5hYmxlZChjb25zdCBib29sIGVuYWJs
ZWQpCkBAIC0xNzUsNyArMTY3LDcgQEAgdm9pZCBBdWRpb1RyYWNrOjpsYW5ndWFnZUNoYW5nZWQo
VHJhY2tQcml2YXRlQmFzZSogdHJhY2tQcml2YXRlLCBjb25zdCBBdG9taWNTdHIKIHZvaWQgQXVk
aW9UcmFjazo6d2lsbFJlbW92ZShUcmFja1ByaXZhdGVCYXNlKiB0cmFja1ByaXZhdGUpCiB7CiAg
ICAgQVNTRVJUX1VOVVNFRCh0cmFja1ByaXZhdGUsIHRyYWNrUHJpdmF0ZSA9PSBtX3ByaXZhdGUp
OwotICAgIG1lZGlhRWxlbWVudCgpLT5yZW1vdmVBdWRpb1RyYWNrKHRoaXMpOworICAgIG1lZGlh
RWxlbWVudCgpLT5yZW1vdmVBdWRpb1RyYWNrKCp0aGlzKTsKIH0KIAogdm9pZCBBdWRpb1RyYWNr
Ojp1cGRhdGVLaW5kRnJvbVByaXZhdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9BdWRpb1RyYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJh
Y2suaAppbmRleCAyZjM5NDE1NWQ3NmY0ZGMxNmY2NzIzYjU2M2UzOTljNGU4ZmFjM2YyLi43MDU4
OWMyNTM5YzU4YjdmODE1NzMwMmVmNGE1N2ViZDBmOWNkNWNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL0F1ZGlvVHJhY2suaApAQCAtOTMsMTIgKzkzLDEwIEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPEF1ZGlvVHJhY2tQcml2YXRlPiBtX3ByaXZhdGU7CiB9OwogCi1pbmxpbmUgQXVkaW9UcmFj
ayogdG9BdWRpb1RyYWNrKFRyYWNrQmFzZSogdHJhY2spCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04odHJhY2stPnR5cGUoKSA9PSBUcmFja0Jhc2U6OkF1ZGlvVHJhY2sp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdWRpb1RyYWNrKj4odHJhY2spOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29y
ZTo6QXVkaW9UcmFjaykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6VHJh
Y2tCYXNlJiB0cmFjaykgeyByZXR1cm4gdHJhY2sudHlwZSgpID09IFdlYkNvcmU6OlRyYWNrQmFz
ZTo6QXVkaW9UcmFjazsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5jcHAKaW5kZXggNmFh
YTMyZWZlNTE3N2ExN2E2YTllNmFkNzQzMTc1MzRlZDRiYjE4Yy4uZjYxZWY5NDE4YWUwM2EzYThi
MmExOTUyNGYyNTdhYWQxODhkNWU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9BdWRpb1RyYWNrTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9B
dWRpb1RyYWNrTGlzdC5jcHAKQEAgLTQzLDQzICs0Myw0MCBAQCBBdWRpb1RyYWNrTGlzdDo6fkF1
ZGlvVHJhY2tMaXN0KCkKIHsKIH0KIAotdm9pZCBBdWRpb1RyYWNrTGlzdDo6YXBwZW5kKFBhc3NS
ZWZQdHI8QXVkaW9UcmFjaz4gcHJwVHJhY2spCit2b2lkIEF1ZGlvVHJhY2tMaXN0OjphcHBlbmQo
UmVmPEF1ZGlvVHJhY2s+JiYgdHJhY2spCiB7Ci0gICAgUmVmUHRyPEF1ZGlvVHJhY2s+IHRyYWNr
ID0gcHJwVHJhY2s7Ci0KICAgICAvLyBJbnNlcnQgdHJhY2tzIGluIHRoZSBtZWRpYSBmaWxlIG9y
ZGVyLgogICAgIHNpemVfdCBpbmRleCA9IHRyYWNrLT5pbmJhbmRUcmFja0luZGV4KCk7CiAgICAg
c2l6ZV90IGluc2VydGlvbkluZGV4OwogICAgIGZvciAoaW5zZXJ0aW9uSW5kZXggPSAwOyBpbnNl
cnRpb25JbmRleCA8IG1faW5iYW5kVHJhY2tzLnNpemUoKTsgKytpbnNlcnRpb25JbmRleCkgewot
ICAgICAgICBBdWRpb1RyYWNrKiBvdGhlclRyYWNrID0gc3RhdGljX2Nhc3Q8QXVkaW9UcmFjayo+
KG1faW5iYW5kVHJhY2tzW2luc2VydGlvbkluZGV4XS5nZXQoKSk7Ci0gICAgICAgIGlmIChvdGhl
clRyYWNrLT5pbmJhbmRUcmFja0luZGV4KCkgPiBpbmRleCkKKyAgICAgICAgYXV0byYgb3RoZXJU
cmFjayA9IGRvd25jYXN0PEF1ZGlvVHJhY2s+KCptX2luYmFuZFRyYWNrc1tpbnNlcnRpb25JbmRl
eF0pOworICAgICAgICBpZiAob3RoZXJUcmFjay5pbmJhbmRUcmFja0luZGV4KCkgPiBpbmRleCkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBtX2luYmFuZFRyYWNrcy5pbnNlcnQoaW5z
ZXJ0aW9uSW5kZXgsIHRyYWNrKTsKKyAgICBtX2luYmFuZFRyYWNrcy5pbnNlcnQoaW5zZXJ0aW9u
SW5kZXgsIHRyYWNrLnB0cigpKTsKIAogCiAgICAgQVNTRVJUKCF0cmFjay0+bWVkaWFFbGVtZW50
KCkgfHwgdHJhY2stPm1lZGlhRWxlbWVudCgpID09IG1lZGlhRWxlbWVudCgpKTsKICAgICB0cmFj
ay0+c2V0TWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCgpKTsKIAotICAgIHNjaGVkdWxlQWRkVHJh
Y2tFdmVudCh0cmFjay5yZWxlYXNlKCkpOworICAgIHNjaGVkdWxlQWRkVHJhY2tFdmVudChXVEZN
b3ZlKHRyYWNrKSk7CiB9CiAKIEF1ZGlvVHJhY2sqIEF1ZGlvVHJhY2tMaXN0OjppdGVtKHVuc2ln
bmVkIGluZGV4KSBjb25zdAogewogICAgIGlmIChpbmRleCA8IG1faW5iYW5kVHJhY2tzLnNpemUo
KSkKLSAgICAgICAgcmV0dXJuIHRvQXVkaW9UcmFjayhtX2luYmFuZFRyYWNrc1tpbmRleF0uZ2V0
KCkpOwotCi0gICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBdWRpb1RyYWNr
PihtX2luYmFuZFRyYWNrc1tpbmRleF0uZ2V0KCkpOworICAgIHJldHVybiBudWxscHRyOwogfQog
CiBBdWRpb1RyYWNrKiBBdWRpb1RyYWNrTGlzdDo6Z2V0VHJhY2tCeUlkKGNvbnN0IEF0b21pY1N0
cmluZyYgaWQpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiBpbmJhbmRUcmFjayA6IG1faW5iYW5k
VHJhY2tzKSB7Ci0gICAgICAgIEF1ZGlvVHJhY2sqIHRyYWNrID0gdG9BdWRpb1RyYWNrKGluYmFu
ZFRyYWNrLmdldCgpKTsKLSAgICAgICAgaWYgKHRyYWNrLT5pZCgpID09IGlkKQotICAgICAgICAg
ICAgcmV0dXJuIHRyYWNrOworICAgICAgICBhdXRvJiB0cmFjayA9IGRvd25jYXN0PEF1ZGlvVHJh
Y2s+KCppbmJhbmRUcmFjayk7CisgICAgICAgIGlmICh0cmFjay5pZCgpID09IGlkKQorICAgICAg
ICAgICAgcmV0dXJuICZ0cmFjazsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIEF1ZGlvVHJhY2tMaXN0OjpldmVudFRh
cmdldEludGVyZmFjZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL0F1ZGlvVHJhY2tMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0F1ZGlvVHJh
Y2tMaXN0LmgKaW5kZXggNTgzYmZmN2E0MmNlMjAwMGIzZjYxM2JmOGZhODJiYzYzMDliMjRhNi4u
YmYyMjEzZGFhNzBlNTI2MzY3YzMwZjljZmUzZDdlMWU0NTc3MDUzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6
CiAKICAgICBBdWRpb1RyYWNrKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAgICBBdWRp
b1RyYWNrKiBsYXN0SXRlbSgpIGNvbnN0IHsgcmV0dXJuIGl0ZW0obGVuZ3RoKCkgLSAxKTsgfQot
ICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8QXVkaW9UcmFjaz4pOworICAgIHZvaWQgYXBwZW5k
KFJlZjxBdWRpb1RyYWNrPiYmKTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgRXZlbnRUYXJn
ZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcAppbmRleCBmMDYyODYy
YjQ1Y2Q5NDA2ODkwZmU3ZDUwMTRlZjIzN2RmZjEzODUwLi5lNzcwOTQ3MWFiNTFmMmI3MmQ3MzAx
ZWJiNmNjMWQ1ODQ0MzMyYTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0luYmFuZFRleHRUcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJh
bmRUZXh0VHJhY2suY3BwCkBAIC0xODksNyArMTg5LDcgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2s6
OndpbGxSZW1vdmUoVHJhY2tQcml2YXRlQmFzZSogdHJhY2tQcml2YXRlKQogICAgIGlmICghbWVk
aWFFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlRfVU5VU0VEKHRyYWNrUHJp
dmF0ZSwgdHJhY2tQcml2YXRlID09IG1fcHJpdmF0ZSk7Ci0gICAgbWVkaWFFbGVtZW50KCktPnJl
bW92ZVRleHRUcmFjayh0aGlzKTsKKyAgICBtZWRpYUVsZW1lbnQoKS0+cmVtb3ZlVGV4dFRyYWNr
KCp0aGlzKTsKIH0KIAogdm9pZCBJbmJhbmRUZXh0VHJhY2s6OnVwZGF0ZUtpbmRGcm9tUHJpdmF0
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKaW5kZXggMzE4ODc4MWRi
ZjVmNDk1MDIxNzQ0YTA0MzhiYzdhN2IyMzkzMGNhOS4uYWI3YTJmZjE4ZjE5OTJlNTBkYWE4ZWUw
Nzg2ZGEzZWNhODEyZWE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNw
cApAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgVGV4dFRyYWNrOjpzZXRLaW5kKEtpbmQgbmV3S2lu
ZCkKICAgICAvLyA0LiBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBj
aGFuZ2UgYXQgdGhlIFRleHRUcmFja0xpc3Qgb2JqZWN0IHJlZmVyZW5jZWQgYnkKICAgICAvLyB0
aGUgdGV4dFRyYWNrcyBhdHRyaWJ1dGUgb24gdGhlIEhUTUxNZWRpYUVsZW1lbnQuCiAgICAgaWYg
KG1lZGlhRWxlbWVudCgpKQotICAgICAgICBtZWRpYUVsZW1lbnQoKS0+dGV4dFRyYWNrcygpLT5z
Y2hlZHVsZUNoYW5nZUV2ZW50KCk7CisgICAgICAgIG1lZGlhRWxlbWVudCgpLT50ZXh0VHJhY2tz
KCkuc2NoZWR1bGVDaGFuZ2VFdmVudCgpOwogI2VuZGlmCiAKICAgICBpZiAobV9jbGllbnQgJiYg
b2xkS2luZCAhPSBtX2tpbmQpCkBAIC00NTQsNyArNDU0LDcgQEAgaW50IFRleHRUcmFjazo6dHJh
Y2tJbmRleCgpCiAgICAgQVNTRVJUKG1fbWVkaWFFbGVtZW50KTsKIAogICAgIGlmIChtX3RyYWNr
SW5kZXggPT0gaW52YWxpZFRyYWNrSW5kZXgpCi0gICAgICAgIG1fdHJhY2tJbmRleCA9IG1fbWVk
aWFFbGVtZW50LT50ZXh0VHJhY2tzKCktPmdldFRyYWNrSW5kZXgodGhpcyk7CisgICAgICAgIG1f
dHJhY2tJbmRleCA9IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCkuZ2V0VHJhY2tJbmRleCgq
dGhpcyk7CiAKICAgICByZXR1cm4gbV90cmFja0luZGV4OwogfQpAQCAtNDgzLDcgKzQ4Myw3IEBA
IGludCBUZXh0VHJhY2s6OnRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRUcmFja3MoKQogICAg
IEFTU0VSVChtX21lZGlhRWxlbWVudCk7CiAgICAgCiAgICAgaWYgKG1fcmVuZGVyZWRUcmFja0lu
ZGV4ID09IGludmFsaWRUcmFja0luZGV4KQotICAgICAgICBtX3JlbmRlcmVkVHJhY2tJbmRleCA9
IG1fbWVkaWFFbGVtZW50LT50ZXh0VHJhY2tzKCktPmdldFRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVu
ZGVyZWRUcmFja3ModGhpcyk7CisgICAgICAgIG1fcmVuZGVyZWRUcmFja0luZGV4ID0gbV9tZWRp
YUVsZW1lbnQtPnRleHRUcmFja3MoKS5nZXRUcmFja0luZGV4UmVsYXRpdmVUb1JlbmRlcmVkVHJh
Y2tzKCp0aGlzKTsKICAgICAKICAgICByZXR1cm4gbV9yZW5kZXJlZFRyYWNrSW5kZXg7CiB9CkBA
IC01ODEsNyArNTgxLDcgQEAgdm9pZCBUZXh0VHJhY2s6OnNldExhbmd1YWdlKGNvbnN0IEF0b21p
Y1N0cmluZyYgbGFuZ3VhZ2UpCiAgICAgLy8gNC4gUXVldWUgYSB0YXNrIHRvIGZpcmUgYSBzaW1w
bGUgZXZlbnQgbmFtZWQgY2hhbmdlIGF0IHRoZSBUZXh0VHJhY2tMaXN0IG9iamVjdCByZWZlcmVu
Y2VkIGJ5CiAgICAgLy8gdGhlIHRleHRUcmFja3MgYXR0cmlidXRlIG9uIHRoZSBIVE1MTWVkaWFF
bGVtZW50LgogICAgIGlmIChtZWRpYUVsZW1lbnQoKSkKLSAgICAgICAgbWVkaWFFbGVtZW50KCkt
PnRleHRUcmFja3MoKS0+c2NoZWR1bGVDaGFuZ2VFdmVudCgpOworICAgICAgICBtZWRpYUVsZW1l
bnQoKS0+dGV4dFRyYWNrcygpLnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKIH0KIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaAppbmRleCA3ODE4ZDIyNDdhYWQxNmE1NTMz
YzMzMzYzNDBiZGQ4ZmFlZWJlODVhLi40ZWRlMjI5ZDdlMTJmNGZhNGRjZGNlYzM3OGJmZmE3ZWUw
NzVhZjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgKQEAgLTE3MywxMiAr
MTczLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzQmVlbkNvbmZpZ3VyZWQgeyBmYWxzZSB9
OwogfTsKIAotaW5saW5lIFRleHRUcmFjayogdG9UZXh0VHJhY2soVHJhY2tCYXNlKiB0cmFjaykK
LXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih0cmFjay0+dHlwZSgpID09
IFRyYWNrQmFzZTo6VGV4dFRyYWNrKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dFRyYWNr
Kj4odHJhY2spOwotfQotCiBpbmxpbmUgYXV0byBUZXh0VHJhY2s6Om1vZGUoKSBjb25zdCAtPiBN
b2RlCiB7CiAgICAgcmV0dXJuIG1fbW9kZTsKQEAgLTIxNSw0ICsyMDksOCBAQCBpbmxpbmUgdm9p
ZCBUZXh0VHJhY2s6OnNldEtpbmRGb3JCaW5kaW5ncyhLaW5kIGtpbmQpCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUZXh0
VHJhY2spCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlRyYWNrQmFzZSYg
dHJhY2spIHsgcmV0dXJuIHRyYWNrLnR5cGUoKSA9PSBXZWJDb3JlOjpUcmFja0Jhc2U6OlRleHRU
cmFjazsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwCmluZGV4IGZkYmJjNDllMGY1ODY3
NGU0OTcyODE4YjVhNjYzYzdiOTIyMWVhNWMuLjBlY2MwZThhMWZiMjY1ZjJkNzI2OWMxNDljMzA4
MjQ2Y2M4Y2Y2NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0
LmNwcApAQCAtNTEsNTYgKzUxLDUxIEBAIHVuc2lnbmVkIFRleHRUcmFja0xpc3Q6Omxlbmd0aCgp
IGNvbnN0CiAgICAgcmV0dXJuIG1fYWRkVHJhY2tUcmFja3Muc2l6ZSgpICsgbV9lbGVtZW50VHJh
Y2tzLnNpemUoKSArIG1faW5iYW5kVHJhY2tzLnNpemUoKTsKIH0KIAotaW50IFRleHRUcmFja0xp
c3Q6OmdldFRyYWNrSW5kZXgoVGV4dFRyYWNrKiB0ZXh0VHJhY2spCitpbnQgVGV4dFRyYWNrTGlz
dDo6Z2V0VHJhY2tJbmRleChUZXh0VHJhY2smIHRleHRUcmFjaykKIHsKICAgICBpZiAoaXM8TG9h
ZGFibGVUZXh0VHJhY2s+KHRleHRUcmFjaykpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxMb2Fk
YWJsZVRleHRUcmFjaz4oKnRleHRUcmFjaykudHJhY2tFbGVtZW50SW5kZXgoKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PExvYWRhYmxlVGV4dFRyYWNrPih0ZXh0VHJhY2spLnRyYWNrRWxlbWVu
dEluZGV4KCk7CiAKLSAgICBpZiAodGV4dFRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6
OkFkZFRyYWNrKQotICAgICAgICByZXR1cm4gbV9lbGVtZW50VHJhY2tzLnNpemUoKSArIG1fYWRk
VHJhY2tUcmFja3MuZmluZCh0ZXh0VHJhY2spOworICAgIGlmICh0ZXh0VHJhY2sudHJhY2tUeXBl
KCkgPT0gVGV4dFRyYWNrOjpBZGRUcmFjaykKKyAgICAgICAgcmV0dXJuIG1fZWxlbWVudFRyYWNr
cy5zaXplKCkgKyBtX2FkZFRyYWNrVHJhY2tzLmZpbmQoJnRleHRUcmFjayk7CiAKLSAgICBpZiAo
dGV4dFRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OkluQmFuZCkKLSAgICAgICAgcmV0
dXJuIG1fZWxlbWVudFRyYWNrcy5zaXplKCkgKyBtX2FkZFRyYWNrVHJhY2tzLnNpemUoKSArIG1f
aW5iYW5kVHJhY2tzLmZpbmQodGV4dFRyYWNrKTsKKyAgICBpZiAodGV4dFRyYWNrLnRyYWNrVHlw
ZSgpID09IFRleHRUcmFjazo6SW5CYW5kKQorICAgICAgICByZXR1cm4gbV9lbGVtZW50VHJhY2tz
LnNpemUoKSArIG1fYWRkVHJhY2tUcmFja3Muc2l6ZSgpICsgbV9pbmJhbmRUcmFja3MuZmluZCgm
dGV4dFRyYWNrKTsKIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgcmV0dXJuIC0x
OwogfQogCi1pbnQgVGV4dFRyYWNrTGlzdDo6Z2V0VHJhY2tJbmRleFJlbGF0aXZlVG9SZW5kZXJl
ZFRyYWNrcyhUZXh0VHJhY2sgKnRleHRUcmFjaykKK2ludCBUZXh0VHJhY2tMaXN0OjpnZXRUcmFj
a0luZGV4UmVsYXRpdmVUb1JlbmRlcmVkVHJhY2tzKFRleHRUcmFjayYgdGV4dFRyYWNrKQogewog
ICAgIC8vIENhbGN1bGF0ZSB0aGUgIkxldCBuIGJlIHRoZSBudW1iZXIgb2YgdGV4dCB0cmFja3Mg
d2hvc2UgdGV4dCB0cmFjayBtb2RlIGlzIHNob3dpbmcgYW5kIHRoYXQgYXJlIGluIHRoZSBtZWRp
YSBlbGVtZW50J3MgbGlzdCBvZiB0ZXh0IHRyYWNrcyBiZWZvcmUgdHJhY2suIgogICAgIGludCB0
cmFja0luZGV4ID0gMDsKIAogICAgIGZvciAoYXV0byYgZWxlbWVudFRyYWNrIDogbV9lbGVtZW50
VHJhY2tzKSB7Ci0gICAgICAgIGlmICghdG9UZXh0VHJhY2soZWxlbWVudFRyYWNrLmdldCgpKS0+
aXNSZW5kZXJlZCgpKQorICAgICAgICBpZiAoIWRvd25jYXN0PFRleHRUcmFjaz4oKmVsZW1lbnRU
cmFjaykuaXNSZW5kZXJlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYg
KGVsZW1lbnRUcmFjayA9PSB0ZXh0VHJhY2spCisgICAgICAgIGlmIChlbGVtZW50VHJhY2sgPT0g
JnRleHRUcmFjaykKICAgICAgICAgICAgIHJldHVybiB0cmFja0luZGV4OwogICAgICAgICArK3Ry
YWNrSW5kZXg7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBhZGRUcmFjayA6IG1fYWRkVHJhY2tU
cmFja3MpIHsKLSAgICAgICAgaWYgKCF0b1RleHRUcmFjayhhZGRUcmFjay5nZXQoKSktPmlzUmVu
ZGVyZWQoKSkKKyAgICAgICAgaWYgKCFkb3duY2FzdDxUZXh0VHJhY2s+KCphZGRUcmFjaykuaXNS
ZW5kZXJlZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGFkZFRyYWNr
ID09IHRleHRUcmFjaykKKyAgICAgICAgaWYgKGFkZFRyYWNrID09ICZ0ZXh0VHJhY2spCiAgICAg
ICAgICAgICByZXR1cm4gdHJhY2tJbmRleDsKICAgICAgICAgKyt0cmFja0luZGV4OwogICAgIH0K
IAogICAgIGZvciAoYXV0byYgaW5iYW5kVHJhY2sgOiBtX2luYmFuZFRyYWNrcykgewotICAgICAg
ICBpZiAoIXRvVGV4dFRyYWNrKGluYmFuZFRyYWNrLmdldCgpKS0+aXNSZW5kZXJlZCgpKQorICAg
ICAgICBpZiAoIWRvd25jYXN0PFRleHRUcmFjaz4oKmluYmFuZFRyYWNrKS5pc1JlbmRlcmVkKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoaW5iYW5kVHJhY2sgPT0gdGV4
dFRyYWNrKQorICAgICAgICBpZiAoaW5iYW5kVHJhY2sgPT0gJnRleHRUcmFjaykKICAgICAgICAg
ICAgIHJldHVybiB0cmFja0luZGV4OwogICAgICAgICArK3RyYWNrSW5kZXg7CiAgICAgfQotCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTExNCwx
NyArMTA5LDE3IEBAIFRleHRUcmFjayogVGV4dFRyYWNrTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKICAgICAvLyByZXNvdXJjZSksIGluIHRoZSBvcmRlciBkZWZpbmVkIGJ5IHRoZSBt
ZWRpYSByZXNvdXJjZSdzIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgogCiAgICAgaWYgKGluZGV4IDwg
bV9lbGVtZW50VHJhY2tzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIHRvVGV4dFRyYWNrKG1fZWxl
bWVudFRyYWNrc1tpbmRleF0uZ2V0KCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8VGV4dFRy
YWNrPihtX2VsZW1lbnRUcmFja3NbaW5kZXhdLmdldCgpKTsKIAogICAgIGluZGV4IC09IG1fZWxl
bWVudFRyYWNrcy5zaXplKCk7CiAgICAgaWYgKGluZGV4IDwgbV9hZGRUcmFja1RyYWNrcy5zaXpl
KCkpCi0gICAgICAgIHJldHVybiB0b1RleHRUcmFjayhtX2FkZFRyYWNrVHJhY2tzW2luZGV4XS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxUZXh0VHJhY2s+KG1fYWRkVHJhY2tUcmFj
a3NbaW5kZXhdLmdldCgpKTsKIAogICAgIGluZGV4IC09IG1fYWRkVHJhY2tUcmFja3Muc2l6ZSgp
OwogICAgIGlmIChpbmRleCA8IG1faW5iYW5kVHJhY2tzLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
IHRvVGV4dFRyYWNrKG1faW5iYW5kVHJhY2tzW2luZGV4XS5nZXQoKSk7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxUZXh0VHJhY2s+KG1faW5iYW5kVHJhY2tzW2luZGV4XS5nZXQoKSk7CiAKLSAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogVGV4dFRyYWNrKiBUZXh0VHJh
Y2tMaXN0OjpnZXRUcmFja0J5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkKQEAgLTEzNCwxMTAg
KzEyOSwxMjIgQEAgVGV4dFRyYWNrKiBUZXh0VHJhY2tMaXN0OjpnZXRUcmFja0J5SWQoY29uc3Qg
QXRvbWljU3RyaW5nJiBpZCkKICAgICAvLyBUZXh0VHJhY2tMaXN0IG9iamVjdCB3aG9zZSBpZCBJ
REwgYXR0cmlidXRlIHdvdWxkIHJldHVybiBhIHZhbHVlIGVxdWFsCiAgICAgLy8gdG8gdGhlIHZh
bHVlIG9mIHRoZSBpZCBhcmd1bWVudC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoKCk7ICsraSkgewotICAgICAgICBUZXh0VHJhY2sqIHRyYWNrID0gaXRlbShpKTsKLSAgICAg
ICAgaWYgKHRyYWNrLT5pZCgpID09IGlkKQotICAgICAgICAgICAgcmV0dXJuIHRyYWNrOworICAg
ICAgICBhdXRvJiB0cmFjayA9ICppdGVtKGkpOworICAgICAgICBpZiAodHJhY2suaWQoKSA9PSBp
ZCkKKyAgICAgICAgICAgIHJldHVybiAmdHJhY2s7CiAgICAgfQogCiAgICAgLy8gV2hlbiBubyB0
cmFja3MgbWF0Y2ggdGhlIGdpdmVuIGFyZ3VtZW50LCB0aGUgbWV0aG9kIG11c3QgcmV0dXJuIG51
bGwuCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgVGV4dFRyYWNrTGlzdDo6aW52YWxp
ZGF0ZVRyYWNrSW5kZXhlc0FmdGVyVHJhY2soVGV4dFRyYWNrKiB0cmFjaykKK3ZvaWQgVGV4dFRy
YWNrTGlzdDo6aW52YWxpZGF0ZVRyYWNrSW5kZXhlc0FmdGVyVHJhY2soVGV4dFRyYWNrJiB0cmFj
aykKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFRyYWNrQmFzZT4+KiB0cmFja3MgPSAwOworICAgIFZl
Y3RvcjxSZWZQdHI8VHJhY2tCYXNlPj4qIHRyYWNrcyA9IG51bGxwdHI7CiAKLSAgICBpZiAodHJh
Y2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6VHJhY2tFbGVtZW50KSB7CisgICAgc3dpdGNo
ICh0cmFjay50cmFja1R5cGUoKSkgeworICAgIGNhc2UgVGV4dFRyYWNrOjpUcmFja0VsZW1lbnQ6
CiAgICAgICAgIHRyYWNrcyA9ICZtX2VsZW1lbnRUcmFja3M7CiAgICAgICAgIGZvciAoYXV0byYg
YWRkVHJhY2sgOiBtX2FkZFRyYWNrVHJhY2tzKQotICAgICAgICAgICAgdG9UZXh0VHJhY2soYWRk
VHJhY2suZ2V0KCkpLT5pbnZhbGlkYXRlVHJhY2tJbmRleCgpOworICAgICAgICAgICAgZG93bmNh
c3Q8VGV4dFRyYWNrPihhZGRUcmFjay5nZXQoKSktPmludmFsaWRhdGVUcmFja0luZGV4KCk7CiAg
ICAgICAgIGZvciAoYXV0byYgaW5iYW5kVHJhY2sgOiBtX2luYmFuZFRyYWNrcykKLSAgICAgICAg
ICAgIHRvVGV4dFRyYWNrKGluYmFuZFRyYWNrLmdldCgpKS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgo
KTsKLSAgICB9IGVsc2UgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OkFkZFRy
YWNrKSB7CisgICAgICAgICAgICBkb3duY2FzdDxUZXh0VHJhY2s+KGluYmFuZFRyYWNrLmdldCgp
KS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0
VHJhY2s6OkFkZFRyYWNrOgogICAgICAgICB0cmFja3MgPSAmbV9hZGRUcmFja1RyYWNrczsKICAg
ICAgICAgZm9yIChhdXRvJiBpbmJhbmRUcmFjayA6IG1faW5iYW5kVHJhY2tzKQotICAgICAgICAg
ICAgdG9UZXh0VHJhY2soaW5iYW5kVHJhY2suZ2V0KCkpLT5pbnZhbGlkYXRlVHJhY2tJbmRleCgp
OwotICAgIH0gZWxzZSBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5k
KQorICAgICAgICAgICAgZG93bmNhc3Q8VGV4dFRyYWNrPihpbmJhbmRUcmFjay5nZXQoKSktPmlu
dmFsaWRhdGVUcmFja0luZGV4KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dFRyYWNr
OjpJbkJhbmQ6CiAgICAgICAgIHRyYWNrcyA9ICZtX2luYmFuZFRyYWNrczsKLSAgICBlbHNlCisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KIAotICAgIHNpemVfdCBpbmRleCA9IHRyYWNrcy0+ZmluZCh0cmFjayk7CisgICAg
c2l6ZV90IGluZGV4ID0gdHJhY2tzLT5maW5kKCZ0cmFjayk7CiAgICAgaWYgKGluZGV4ID09IG5v
dEZvdW5kKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHNpemVfdCBpID0gaW5kZXg7IGkg
PCB0cmFja3MtPnNpemUoKTsgKytpKQotICAgICAgICB0b1RleHRUcmFjayh0cmFja3MtPmF0KGlu
ZGV4KS5nZXQoKSktPmludmFsaWRhdGVUcmFja0luZGV4KCk7CisgICAgICAgIGRvd25jYXN0PFRl
eHRUcmFjaz4oKnRyYWNrcy0+YXQoaW5kZXgpKS5pbnZhbGlkYXRlVHJhY2tJbmRleCgpOwogfQog
Ci12b2lkIFRleHRUcmFja0xpc3Q6OmFwcGVuZChQYXNzUmVmUHRyPFRleHRUcmFjaz4gcHJwVHJh
Y2spCit2b2lkIFRleHRUcmFja0xpc3Q6OmFwcGVuZChSZWY8VGV4dFRyYWNrPiYmIHRyYWNrKQog
ewotICAgIFJlZlB0cjxUZXh0VHJhY2s+IHRyYWNrID0gcHJwVHJhY2s7Ci0KICAgICBpZiAodHJh
Y2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6QWRkVHJhY2spCi0gICAgICAgIG1fYWRkVHJh
Y2tUcmFja3MuYXBwZW5kKHRyYWNrKTsKLSAgICBlbHNlIGlmIChpczxMb2FkYWJsZVRleHRUcmFj
az4oKnRyYWNrKSkgeworICAgICAgICBtX2FkZFRyYWNrVHJhY2tzLmFwcGVuZCh0cmFjay5wdHIo
KSk7CisgICAgZWxzZSBpZiAoaXM8TG9hZGFibGVUZXh0VHJhY2s+KHRyYWNrLmdldCgpKSkgewog
ICAgICAgICAvLyBJbnNlcnQgdHJhY2tzIGFkZGVkIGZvciA8dHJhY2s+IGVsZW1lbnQgaW4gdHJl
ZSBvcmRlci4KLSAgICAgICAgc2l6ZV90IGluZGV4ID0gZG93bmNhc3Q8TG9hZGFibGVUZXh0VHJh
Y2s+KCp0cmFjaykudHJhY2tFbGVtZW50SW5kZXgoKTsKLSAgICAgICAgbV9lbGVtZW50VHJhY2tz
Lmluc2VydChpbmRleCwgdHJhY2spOworICAgICAgICBzaXplX3QgaW5kZXggPSBkb3duY2FzdDxM
b2FkYWJsZVRleHRUcmFjaz4odHJhY2suZ2V0KCkpLnRyYWNrRWxlbWVudEluZGV4KCk7CisgICAg
ICAgIG1fZWxlbWVudFRyYWNrcy5pbnNlcnQoaW5kZXgsIHRyYWNrLnB0cigpKTsKICAgICB9IGVs
c2UgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OkluQmFuZCkgewogICAgICAg
ICAvLyBJbnNlcnQgdHJhY2tzIGFkZGVkIGZvciBpbi1iYW5kIGluIHRoZSBtZWRpYSBmaWxlIG9y
ZGVyLgotICAgICAgICBzaXplX3QgaW5kZXggPSBzdGF0aWNfY2FzdDxJbmJhbmRUZXh0VHJhY2sq
Pih0cmFjay5nZXQoKSktPmluYmFuZFRyYWNrSW5kZXgoKTsKLSAgICAgICAgbV9pbmJhbmRUcmFj
a3MuaW5zZXJ0KGluZGV4LCB0cmFjayk7CisgICAgICAgIHNpemVfdCBpbmRleCA9IGRvd25jYXN0
PEluYmFuZFRleHRUcmFjaz4odHJhY2suZ2V0KCkpLmluYmFuZFRyYWNrSW5kZXgoKTsKKyAgICAg
ICAgbV9pbmJhbmRUcmFja3MuaW5zZXJ0KGluZGV4LCB0cmFjay5wdHIoKSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgaW52YWxpZGF0ZVRyYWNrSW5k
ZXhlc0FmdGVyVHJhY2sodHJhY2suZ2V0KCkpOworICAgIGludmFsaWRhdGVUcmFja0luZGV4ZXNB
ZnRlclRyYWNrKHRyYWNrKTsKIAogICAgIEFTU0VSVCghdHJhY2stPm1lZGlhRWxlbWVudCgpIHx8
IHRyYWNrLT5tZWRpYUVsZW1lbnQoKSA9PSBtZWRpYUVsZW1lbnQoKSk7CiAgICAgdHJhY2stPnNl
dE1lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQoKSk7CiAKLSAgICBzY2hlZHVsZUFkZFRyYWNrRXZl
bnQodHJhY2sucmVsZWFzZSgpKTsKKyAgICBzY2hlZHVsZUFkZFRyYWNrRXZlbnQoV1RGTW92ZSh0
cmFjaykpOwogfQogCi12b2lkIFRleHRUcmFja0xpc3Q6OnJlbW92ZShUcmFja0Jhc2UqIHRyYWNr
LCBib29sIHNjaGVkdWxlRXZlbnQpCit2b2lkIFRleHRUcmFja0xpc3Q6OnJlbW92ZShUcmFja0Jh
c2UmIHRyYWNrLCBib29sIHNjaGVkdWxlRXZlbnQpCiB7Ci0gICAgVGV4dFRyYWNrKiB0ZXh0VHJh
Y2sgPSB0b1RleHRUcmFjayh0cmFjayk7Ci0gICAgVmVjdG9yPFJlZlB0cjxUcmFja0Jhc2U+Piog
dHJhY2tzID0gMDsKLSAgICBpZiAodGV4dFRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6
OlRyYWNrRWxlbWVudCkKKyAgICBhdXRvJiB0ZXh0VHJhY2sgPSBkb3duY2FzdDxUZXh0VHJhY2s+
KHRyYWNrKTsKKyAgICBWZWN0b3I8UmVmUHRyPFRyYWNrQmFzZT4+KiB0cmFja3MgPSBudWxscHRy
OworICAgIHN3aXRjaCAodGV4dFRyYWNrLnRyYWNrVHlwZSgpKSB7CisgICAgY2FzZSBUZXh0VHJh
Y2s6OlRyYWNrRWxlbWVudDoKICAgICAgICAgdHJhY2tzID0gJm1fZWxlbWVudFRyYWNrczsKLSAg
ICBlbHNlIGlmICh0ZXh0VHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6QWRkVHJhY2sp
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dFRyYWNrOjpBZGRUcmFjazoKICAgICAgICAg
dHJhY2tzID0gJm1fYWRkVHJhY2tUcmFja3M7Ci0gICAgZWxzZSBpZiAodGV4dFRyYWNrLT50cmFj
a1R5cGUoKSA9PSBUZXh0VHJhY2s6OkluQmFuZCkKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBU
ZXh0VHJhY2s6OkluQmFuZDoKICAgICAgICAgdHJhY2tzID0gJm1faW5iYW5kVHJhY2tzOwotICAg
IGVsc2UKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQogCi0gICAgc2l6ZV90IGluZGV4ID0gdHJhY2tzLT5maW5kKHRyYWNr
KTsKKyAgICBzaXplX3QgaW5kZXggPSB0cmFja3MtPmZpbmQoJnRyYWNrKTsKICAgICBpZiAoaW5k
ZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGludmFsaWRhdGVUcmFja0lu
ZGV4ZXNBZnRlclRyYWNrKHRleHRUcmFjayk7CiAKLSAgICBBU1NFUlQoIXRyYWNrLT5tZWRpYUVs
ZW1lbnQoKSB8fCB0cmFjay0+bWVkaWFFbGVtZW50KCkgPT0gZWxlbWVudCgpKTsKLSAgICB0cmFj
ay0+c2V0TWVkaWFFbGVtZW50KDApOworICAgIEFTU0VSVCghdHJhY2subWVkaWFFbGVtZW50KCkg
fHwgdHJhY2subWVkaWFFbGVtZW50KCkgPT0gZWxlbWVudCgpKTsKKyAgICB0cmFjay5zZXRNZWRp
YUVsZW1lbnQobnVsbHB0cik7CiAKLSAgICBSZWZQdHI8VHJhY2tCYXNlPiB0cmFja1JlZiA9ICgq
dHJhY2tzKVtpbmRleF07CisgICAgUmVmPFRyYWNrQmFzZT4gdHJhY2tSZWYgPSAqKCp0cmFja3Mp
W2luZGV4XTsKICAgICB0cmFja3MtPnJlbW92ZShpbmRleCk7CiAKICAgICBpZiAoc2NoZWR1bGVF
dmVudCkKLSAgICAgICAgc2NoZWR1bGVSZW1vdmVUcmFja0V2ZW50KHRyYWNrUmVmLnJlbGVhc2Uo
KSk7CisgICAgICAgIHNjaGVkdWxlUmVtb3ZlVHJhY2tFdmVudChXVEZNb3ZlKHRyYWNrUmVmKSk7
CiB9CiAKLWJvb2wgVGV4dFRyYWNrTGlzdDo6Y29udGFpbnMoVHJhY2tCYXNlKiB0cmFjaykgY29u
c3QKK2Jvb2wgVGV4dFRyYWNrTGlzdDo6Y29udGFpbnMoVHJhY2tCYXNlJiB0cmFjaykgY29uc3QK
IHsKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFRyYWNrQmFzZT4+KiB0cmFja3MgPSAwOwotICAg
IFRleHRUcmFjazo6VGV4dFRyYWNrVHlwZSB0eXBlID0gdG9UZXh0VHJhY2sodHJhY2spLT50cmFj
a1R5cGUoKTsKLSAgICBpZiAodHlwZSA9PSBUZXh0VHJhY2s6OlRyYWNrRWxlbWVudCkKKyAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPFRyYWNrQmFzZT4+KiB0cmFja3MgPSBudWxscHRyOworICAgIHN3
aXRjaCAoZG93bmNhc3Q8VGV4dFRyYWNrPih0cmFjaykudHJhY2tUeXBlKCkpIHsKKyAgICBjYXNl
IFRleHRUcmFjazo6VHJhY2tFbGVtZW50OgogICAgICAgICB0cmFja3MgPSAmbV9lbGVtZW50VHJh
Y2tzOwotICAgIGVsc2UgaWYgKHR5cGUgPT0gVGV4dFRyYWNrOjpBZGRUcmFjaykKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBUZXh0VHJhY2s6OkFkZFRyYWNrOgogICAgICAgICB0cmFja3MgPSAm
bV9hZGRUcmFja1RyYWNrczsKLSAgICBlbHNlIGlmICh0eXBlID09IFRleHRUcmFjazo6SW5CYW5k
KQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRUcmFjazo6SW5CYW5kOgogICAgICAgICB0
cmFja3MgPSAmbV9pbmJhbmRUcmFja3M7Ci0gICAgZWxzZQorICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiAgICAgCi0gICAg
cmV0dXJuIHRyYWNrcy0+ZmluZCh0cmFjaykgIT0gbm90Rm91bmQ7CisgICAgcmV0dXJuIHRyYWNr
cy0+ZmluZCgmdHJhY2spICE9IG5vdEZvdW5kOwogfQogCiBFdmVudFRhcmdldEludGVyZmFjZSBU
ZXh0VHJhY2tMaXN0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oCmluZGV4IDA0MWUyMTg4ZDY0ZmZlYmNhMzk1Y2Rl
Y2Y2ODllNTc4YTI4NzQ3MzAuLjkyOTc4NTUwOTc0ZmMyNmI3MzM3NGVjYjgzZjZlNTRhZWRkYWU1
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oCkBAIC00Mywx
NiArNDMsMTYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflRleHRUcmFja0xpc3QoKTsKIAogICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGludCBnZXRUcmFja0luZGV4
KFRleHRUcmFjayopOwotICAgIGludCBnZXRUcmFja0luZGV4UmVsYXRpdmVUb1JlbmRlcmVkVHJh
Y2tzKFRleHRUcmFjayopOwotICAgIGJvb2wgY29udGFpbnMoVHJhY2tCYXNlKikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgaW50IGdldFRyYWNrSW5kZXgoVGV4dFRyYWNrJik7CisgICAgaW50IGdldFRy
YWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRUcmFja3MoVGV4dFRyYWNrJik7CisgICAgYm9vbCBj
b250YWlucyhUcmFja0Jhc2UmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFRleHRUcmFjayogaXRl
bSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAgICAgVGV4dFRyYWNrKiBnZXRUcmFja0J5SWQoY29u
c3QgQXRvbWljU3RyaW5nJik7CiAgICAgVGV4dFRyYWNrKiBsYXN0SXRlbSgpIGNvbnN0IHsgcmV0
dXJuIGl0ZW0obGVuZ3RoKCkgLSAxKTsgfQogCi0gICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxU
ZXh0VHJhY2s+KTsKLSAgICB2b2lkIHJlbW92ZShUcmFja0Jhc2UqLCBib29sIHNjaGVkdWxlRXZl
bnQgPSB0cnVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGVuZChSZWY8VGV4dFRyYWNrPiYmKTsK
KyAgICB2b2lkIHJlbW92ZShUcmFja0Jhc2UmLCBib29sIHNjaGVkdWxlRXZlbnQgPSB0cnVlKSBv
dmVycmlkZTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKQEAgLTYwLDcgKzYwLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBUZXh0VHJhY2tMaXN0KEhUTUxNZWRpYUVsZW1lbnQqLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKLSAgICB2b2lkIGludmFsaWRhdGVUcmFja0luZGV4
ZXNBZnRlclRyYWNrKFRleHRUcmFjayopOworICAgIHZvaWQgaW52YWxpZGF0ZVRyYWNrSW5kZXhl
c0FmdGVyVHJhY2soVGV4dFRyYWNrJik7CiAKICAgICBWZWN0b3I8UmVmUHRyPFRyYWNrQmFzZT4+
IG1fYWRkVHJhY2tUcmFja3M7CiAgICAgVmVjdG9yPFJlZlB0cjxUcmFja0Jhc2U+PiBtX2VsZW1l
bnRUcmFja3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrQmFz
ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0Jhc2UuaAppbmRleCBmNzU2Nzhm
NTY3MzkwMGQ2OWEzNmVjNzM4YTgxNTE3M2Q3YzdkMjM1Li5kNmM1ZTQ4NTZhNTVhYTg4ZjRjNjlm
MDczZDA3ZDA2ZDRiMGI1YzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RyYWNrQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tCYXNlLmgK
QEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFj
a0V2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5jcHAKaW5k
ZXggODE1NjI1ZmNlM2RjMDk5ZTdiMGY2OGU4NmFjYTg4MzM5MjBmMjAyNS4uNDM0ZWQ0Yzc4ZmQ4
NTk1YWY5YmNjYjY5NjQzZGIxMzU1Y2Q1ODc4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UcmFja0V2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RyYWNrRXZlbnQuY3BwCkBAIC0zMyw5ICszMyw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotVHJhY2tFdmVudDo6VHJhY2tFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wg
Y2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFJlZlB0cjxUcmFja0Jhc2U+JiYgdHJhY2spCitU
cmFja0V2ZW50OjpUcmFja0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5C
dWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUmVmPFRyYWNrQmFzZT4mJiB0cmFjaykKICAgICA6IEV2
ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSkKLSAgICAsIG1fdHJhY2sodHJhY2spCisg
ICAgLCBtX3RyYWNrKFdURk1vdmUodHJhY2spKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVHJhY2tFdmVudC5oCmluZGV4IDQ2NmQ5Zjg4Mjk4Njc5ZThiYTE3N2VjZmY3OGVmZGUxODM4
ZmNmZGEuLjhhZWZmY2Q2NGYxOGQwOWZkNjZmMDhlODRmZDE0MzgyOTU2M2M1Y2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFRy
YWNrRXZlbnQgZmluYWwgOiBwdWJsaWMgRXZlbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgflRy
YWNrRXZlbnQoKTsKIAotICAgIHN0YXRpYyBSZWY8VHJhY2tFdmVudD4gY3JlYXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUmVmUHRy
PFRyYWNrQmFzZT4mJiB0cmFjaykKKyAgICBzdGF0aWMgUmVmPFRyYWNrRXZlbnQ+IGNyZWF0ZShj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUs
IFJlZjxUcmFja0Jhc2U+JiYgdHJhY2spCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBUcmFja0V2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgV1RGTW92ZSh0cmFj
aykpKTsKICAgICB9CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBUcmFja0Jhc2UqIHRy
YWNrKCkgY29uc3QgeyByZXR1cm4gbV90cmFjay5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIFRy
YWNrRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBj
YW5jZWxhYmxlLCBSZWZQdHI8VHJhY2tCYXNlPiYmKTsKKyAgICBUcmFja0V2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUmVmPFRy
YWNrQmFzZT4mJik7CiAgICAgVHJhY2tFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNv
bnN0IFRyYWNrRXZlbnRJbml0JiBpbml0aWFsaXplcik7CiAKICAgICBSZWZQdHI8VHJhY2tCYXNl
PiBtX3RyYWNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xp
c3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5jcHAK
aW5kZXggZjIzNDY3MWQ2ZDE5ZTY4NTRiZGEyMDkyZDY4MWJkZjVkNDFkMWJiNy4uZGJlZDNhYWVj
NzcyN2EwZTM4NTlhODU1MmUxYzBhMzdiZTQ2NTA0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RyYWNrTGlzdEJhc2UuY3BwCkBAIC01OCwzMyArNTgsMzMgQEAgdW5zaWduZWQgVHJh
Y2tMaXN0QmFzZTo6bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gbV9pbmJhbmRUcmFja3Muc2l6
ZSgpOwogfQogCi12b2lkIFRyYWNrTGlzdEJhc2U6OnJlbW92ZShUcmFja0Jhc2UqIHRyYWNrLCBi
b29sIHNjaGVkdWxlRXZlbnQpCit2b2lkIFRyYWNrTGlzdEJhc2U6OnJlbW92ZShUcmFja0Jhc2Um
IHRyYWNrLCBib29sIHNjaGVkdWxlRXZlbnQpCiB7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9pbmJh
bmRUcmFja3MuZmluZCh0cmFjayk7CisgICAgc2l6ZV90IGluZGV4ID0gbV9pbmJhbmRUcmFja3Mu
ZmluZCgmdHJhY2spOwogICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CiAKLSAgICBBU1NF
UlQodHJhY2stPm1lZGlhRWxlbWVudCgpID09IG1fZWxlbWVudCk7Ci0gICAgdHJhY2stPnNldE1l
ZGlhRWxlbWVudCgwKTsKKyAgICBBU1NFUlQodHJhY2subWVkaWFFbGVtZW50KCkgPT0gbV9lbGVt
ZW50KTsKKyAgICB0cmFjay5zZXRNZWRpYUVsZW1lbnQobnVsbHB0cik7CiAKLSAgICBSZWZQdHI8
VHJhY2tCYXNlPiB0cmFja1JlZiA9IG1faW5iYW5kVHJhY2tzW2luZGV4XTsKKyAgICBSZWY8VHJh
Y2tCYXNlPiB0cmFja1JlZiA9ICptX2luYmFuZFRyYWNrc1tpbmRleF07CiAKICAgICBtX2luYmFu
ZFRyYWNrcy5yZW1vdmUoaW5kZXgpOwogCiAgICAgaWYgKHNjaGVkdWxlRXZlbnQpCi0gICAgICAg
IHNjaGVkdWxlUmVtb3ZlVHJhY2tFdmVudCh0cmFja1JlZi5yZWxlYXNlKCkpOworICAgICAgICBz
Y2hlZHVsZVJlbW92ZVRyYWNrRXZlbnQoV1RGTW92ZSh0cmFja1JlZikpOwogfQogCi1ib29sIFRy
YWNrTGlzdEJhc2U6OmNvbnRhaW5zKFRyYWNrQmFzZSogdHJhY2spIGNvbnN0Citib29sIFRyYWNr
TGlzdEJhc2U6OmNvbnRhaW5zKFRyYWNrQmFzZSYgdHJhY2spIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1faW5iYW5kVHJhY2tzLmZpbmQodHJhY2spICE9IG5vdEZvdW5kOworICAgIHJldHVybiBtX2lu
YmFuZFRyYWNrcy5maW5kKCZ0cmFjaykgIT0gbm90Rm91bmQ7CiB9CiAKLXZvaWQgVHJhY2tMaXN0
QmFzZTo6c2NoZWR1bGVUcmFja0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBQ
YXNzUmVmUHRyPFRyYWNrQmFzZT4gdHJhY2spCit2b2lkIFRyYWNrTGlzdEJhc2U6OnNjaGVkdWxl
VHJhY2tFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50TmFtZSwgUmVmPFRyYWNrQmFzZT4m
JiB0cmFjaykKIHsKLSAgICBtX2FzeW5jRXZlbnRRdWV1ZS5lbnF1ZXVlRXZlbnQoVHJhY2tFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNlLCB0cmFjaykpOworICAgIG1fYXN5bmNF
dmVudFF1ZXVlLmVucXVldWVFdmVudChUcmFja0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxz
ZSwgZmFsc2UsIFdURk1vdmUodHJhY2spKSk7CiB9CiAKLXZvaWQgVHJhY2tMaXN0QmFzZTo6c2No
ZWR1bGVBZGRUcmFja0V2ZW50KFBhc3NSZWZQdHI8VHJhY2tCYXNlPiB0cmFjaykKK3ZvaWQgVHJh
Y2tMaXN0QmFzZTo6c2NoZWR1bGVBZGRUcmFja0V2ZW50KFJlZjxUcmFja0Jhc2U+JiYgdHJhY2sp
CiB7CiAgICAgLy8gNC44LjEwLjUgTG9hZGluZyB0aGUgbWVkaWEgcmVzb3VyY2UKICAgICAvLyAu
Li4KQEAgLTEwNCwxMCArMTA0LDEwIEBAIHZvaWQgVHJhY2tMaXN0QmFzZTo6c2NoZWR1bGVBZGRU
cmFja0V2ZW50KFBhc3NSZWZQdHI8VHJhY2tCYXNlPiB0cmFjaykKICAgICAvLyBidWJibGUgYW5k
IGlzIG5vdCBjYW5jZWxhYmxlLCBhbmQgdGhhdCB1c2VzIHRoZSBUcmFja0V2ZW50IGludGVyZmFj
ZSwgd2l0aAogICAgIC8vIHRoZSB0cmFjayBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHRl
eHQgdHJhY2sncyBUZXh0VHJhY2sgb2JqZWN0LCBhdAogICAgIC8vIHRoZSBtZWRpYSBlbGVtZW50
J3MgdGV4dFRyYWNrcyBhdHRyaWJ1dGUncyBUZXh0VHJhY2tMaXN0IG9iamVjdC4KLSAgICBzY2hl
ZHVsZVRyYWNrRXZlbnQoZXZlbnROYW1lcygpLmFkZHRyYWNrRXZlbnQsIHRyYWNrKTsKKyAgICBz
Y2hlZHVsZVRyYWNrRXZlbnQoZXZlbnROYW1lcygpLmFkZHRyYWNrRXZlbnQsIFdURk1vdmUodHJh
Y2spKTsKIH0KIAotdm9pZCBUcmFja0xpc3RCYXNlOjpzY2hlZHVsZVJlbW92ZVRyYWNrRXZlbnQo
UGFzc1JlZlB0cjxUcmFja0Jhc2U+IHRyYWNrKQordm9pZCBUcmFja0xpc3RCYXNlOjpzY2hlZHVs
ZVJlbW92ZVRyYWNrRXZlbnQoUmVmPFRyYWNrQmFzZT4mJiB0cmFjaykKIHsKICAgICAvLyA0Ljgu
MTAuNiBPZmZzZXRzIGludG8gdGhlIG1lZGlhIHJlc291cmNlCiAgICAgLy8gSWYgYXQgYW55IHRp
bWUgdGhlIHVzZXIgYWdlbnQgbGVhcm5zIHRoYXQgYW4gYXVkaW8gb3IgdmlkZW8gdHJhY2sgaGFz
CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBUcmFja0xpc3RCYXNlOjpzY2hlZHVsZVJlbW92ZVRy
YWNrRXZlbnQoUGFzc1JlZlB0cjxUcmFja0Jhc2U+IHRyYWNrKQogICAgIC8vIGludGVyZmFjZSwg
d2l0aCB0aGUgdHJhY2sgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSB0ZXh0IHRyYWNrJ3MK
ICAgICAvLyBUZXh0VHJhY2sgb2JqZWN0LCBhdCB0aGUgbWVkaWEgZWxlbWVudCdzIHRleHRUcmFj
a3MgYXR0cmlidXRlJ3MKICAgICAvLyBUZXh0VHJhY2tMaXN0IG9iamVjdC4KLSAgICBzY2hlZHVs
ZVRyYWNrRXZlbnQoZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQsIHRyYWNrKTsKKyAgICBz
Y2hlZHVsZVRyYWNrRXZlbnQoZXZlbnROYW1lcygpLnJlbW92ZXRyYWNrRXZlbnQsIFdURk1vdmUo
dHJhY2spKTsKIH0KIAogdm9pZCBUcmFja0xpc3RCYXNlOjpzY2hlZHVsZUNoYW5nZUV2ZW50KCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tMaXN0QmFzZS5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RCYXNlLmgKaW5kZXggYmQ2NDEwZDRh
Mjc3OTVlY2I3YTE3NWU4MTRmM2I4NDRmYmU2MjlmYi4uZTJlMThkMDFlYmVjMDQ3ZDZjNGMwMGVh
ZTc1N2JkZWU2Y2FmMTQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
cmFja0xpc3RCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0xpc3RC
YXNlLmgKQEAgLTQ3LDggKzQ3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgflRyYWNrTGlzdEJh
c2UoKTsKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIGNvbnRhaW5zKFRyYWNrQmFzZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCByZW1v
dmUoVHJhY2tCYXNlKiwgYm9vbCBzY2hlZHVsZUV2ZW50ID0gdHJ1ZSk7CisgICAgdmlydHVhbCBi
b29sIGNvbnRhaW5zKFRyYWNrQmFzZSYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmUo
VHJhY2tCYXNlJiwgYm9vbCBzY2hlZHVsZUV2ZW50ID0gdHJ1ZSk7CiAKICAgICAvLyBFdmVudFRh
cmdldAogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3Qgb3ZlcnJpZGUgPSAwOwpAQCAtNjgsMTMgKzY4LDEzIEBAIHB1YmxpYzoKIHByb3RlY3RlZDoK
ICAgICBUcmFja0xpc3RCYXNlKEhUTUxNZWRpYUVsZW1lbnQqLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kik7CiAKLSAgICB2b2lkIHNjaGVkdWxlQWRkVHJhY2tFdmVudChQYXNzUmVmUHRyPFRyYWNr
QmFzZT4pOwotICAgIHZvaWQgc2NoZWR1bGVSZW1vdmVUcmFja0V2ZW50KFBhc3NSZWZQdHI8VHJh
Y2tCYXNlPik7CisgICAgdm9pZCBzY2hlZHVsZUFkZFRyYWNrRXZlbnQoUmVmPFRyYWNrQmFzZT4m
Jik7CisgICAgdm9pZCBzY2hlZHVsZVJlbW92ZVRyYWNrRXZlbnQoUmVmPFRyYWNrQmFzZT4mJik7
CiAKICAgICBWZWN0b3I8UmVmUHRyPFRyYWNrQmFzZT4+IG1faW5iYW5kVHJhY2tzOwogCiBwcml2
YXRlOgotICAgIHZvaWQgc2NoZWR1bGVUcmFja0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnROYW1lLCBQYXNzUmVmUHRyPFRyYWNrQmFzZT4pOworICAgIHZvaWQgc2NoZWR1bGVUcmFja0V2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnROYW1lLCBSZWY8VHJhY2tCYXNlPiYmKTsKIAog
ICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdm9pZCByZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgcmVm
KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVmlkZW9UcmFjay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suY3BwCmluZGV4IGJlMjk2
ODg4ZDcxMDAyMjAxMDEwNTdhZTU3MjcxNTlmN2NlODZjMGQuLmY4MGJjMTBhOGNjOGRlMjgyZDlm
YWYzMTk0NmQ2MWNkZTBjYmM0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVmlkZW9UcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1Ry
YWNrLmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgVmlkZW9UcmFjazo6bGFuZ3VhZ2VDaGFu
Z2VkKFRyYWNrUHJpdmF0ZUJhc2UqIHRyYWNrUHJpdmF0ZSwgY29uc3QgQXRvbWljU3RyCiB2b2lk
IFZpZGVvVHJhY2s6OndpbGxSZW1vdmUoVHJhY2tQcml2YXRlQmFzZSogdHJhY2tQcml2YXRlKQog
ewogICAgIEFTU0VSVF9VTlVTRUQodHJhY2tQcml2YXRlLCB0cmFja1ByaXZhdGUgPT0gbV9wcml2
YXRlKTsKLSAgICBtZWRpYUVsZW1lbnQoKS0+cmVtb3ZlVmlkZW9UcmFjayh0aGlzKTsKKyAgICBt
ZWRpYUVsZW1lbnQoKS0+cmVtb3ZlVmlkZW9UcmFjaygqdGhpcyk7CiB9CiAKICNpZiBFTkFCTEUo
TUVESUFfU09VUkNFKQpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgVmlkZW9UcmFjazo6c2V0S2lu
ZChjb25zdCBBdG9taWNTdHJpbmcmIGtpbmQpCiAKICAgICAvLyA0LiBRdWV1ZSBhIHRhc2sgdG8g
ZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBjaGFuZ2UgYXQgdGhlIFZpZGVvVHJhY2tMaXN0IG9i
amVjdCByZWZlcmVuY2VkIGJ5CiAgICAgLy8gdGhlIHZpZGVvVHJhY2tzIGF0dHJpYnV0ZSBvbiB0
aGUgSFRNTE1lZGlhRWxlbWVudC4KLSAgICBtZWRpYUVsZW1lbnQoKS0+dmlkZW9UcmFja3MoKS0+
c2NoZWR1bGVDaGFuZ2VFdmVudCgpOworICAgIG1lZGlhRWxlbWVudCgpLT52aWRlb1RyYWNrcygp
LnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKIH0KIAogdm9pZCBWaWRlb1RyYWNrOjpzZXRMYW5ndWFn
ZShjb25zdCBBdG9taWNTdHJpbmcmIGxhbmd1YWdlKQpAQCAtMjE3LDggKzIxNyw3IEBAIHZvaWQg
VmlkZW9UcmFjazo6c2V0TGFuZ3VhZ2UoY29uc3QgQXRvbWljU3RyaW5nJiBsYW5ndWFnZSkKIAog
ICAgIC8vIDQuIFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGNoYW5n
ZSBhdCB0aGUgVmlkZW9UcmFja0xpc3Qgb2JqZWN0IHJlZmVyZW5jZWQgYnkKICAgICAvLyB0aGUg
dmlkZW9UcmFja3MgYXR0cmlidXRlIG9uIHRoZSBIVE1MTWVkaWFFbGVtZW50LgotICAgIGlmICht
ZWRpYUVsZW1lbnQoKS0+dmlkZW9UcmFja3MoKSkKLSAgICAgICAgbWVkaWFFbGVtZW50KCktPnZp
ZGVvVHJhY2tzKCktPnNjaGVkdWxlQ2hhbmdlRXZlbnQoKTsKKyAgICBtZWRpYUVsZW1lbnQoKS0+
dmlkZW9UcmFja3MoKS5zY2hlZHVsZUNoYW5nZUV2ZW50KCk7CiB9CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suaAppbmRleCA1YzcxZjVmNDg5NTZiNzgyZDBiZGUw
ZTdiZTFiNzI4NjI5Y2I5ODIxLi5lMTQzYzA5ZjljYjMwYjMxZDU4MTFlZTBhMmQ2YWU5NWJmNGI2
OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2suaApAQCAtMTAyLDEyICsx
MDIsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGU+IG1fcHJpdmF0
ZTsKIH07CiAKLWlubGluZSBWaWRlb1RyYWNrKiB0b1ZpZGVvVHJhY2soVHJhY2tCYXNlKiB0cmFj
aykKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih0cmFjay0+dHlwZSgp
ID09IFRyYWNrQmFzZTo6VmlkZW9UcmFjayk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFZpZGVv
VHJhY2sqPih0cmFjayk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpWaWRlb1RyYWNrKQorICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpUcmFja0Jhc2UmIHRyYWNrKSB7IHJldHVybiB0cmFjay50
eXBlKCkgPT0gV2ViQ29yZTo6VHJhY2tCYXNlOjpWaWRlb1RyYWNrOyB9CitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9WaWRlb1RyYWNrTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Zp
ZGVvVHJhY2tMaXN0LmNwcAppbmRleCA0MjZiMmEwMjVhZTE3M2QwNjZkZDMxNmFmMDE5YTJiMzcx
NTBlZDhjLi4xNTk5NTc4MGQzMzMyYzA4MzEyNDFmYzU5ZDk1NGMwZTdiNmVjMjNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmNwcApAQCAtNDMsNTQgKzQz
LDUwIEBAIFZpZGVvVHJhY2tMaXN0Ojp+VmlkZW9UcmFja0xpc3QoKQogewogfQogCi12b2lkIFZp
ZGVvVHJhY2tMaXN0OjphcHBlbmQoUGFzc1JlZlB0cjxWaWRlb1RyYWNrPiBwcnBUcmFjaykKK3Zv
aWQgVmlkZW9UcmFja0xpc3Q6OmFwcGVuZChSZWY8VmlkZW9UcmFjaz4mJiB0cmFjaykKIHsKLSAg
ICBSZWZQdHI8VmlkZW9UcmFjaz4gdHJhY2sgPSBwcnBUcmFjazsKLQogICAgIC8vIEluc2VydCB0
cmFja3MgaW4gdGhlIG1lZGlhIGZpbGUgb3JkZXIuCiAgICAgc2l6ZV90IGluZGV4ID0gdHJhY2st
PmluYmFuZFRyYWNrSW5kZXgoKTsKICAgICBzaXplX3QgaW5zZXJ0aW9uSW5kZXg7CiAgICAgZm9y
IChpbnNlcnRpb25JbmRleCA9IDA7IGluc2VydGlvbkluZGV4IDwgbV9pbmJhbmRUcmFja3Muc2l6
ZSgpOyArK2luc2VydGlvbkluZGV4KSB7Ci0gICAgICAgIFZpZGVvVHJhY2sqIG90aGVyVHJhY2sg
PSBzdGF0aWNfY2FzdDxWaWRlb1RyYWNrKj4obV9pbmJhbmRUcmFja3NbaW5zZXJ0aW9uSW5kZXhd
LmdldCgpKTsKLSAgICAgICAgaWYgKG90aGVyVHJhY2stPmluYmFuZFRyYWNrSW5kZXgoKSA+IGlu
ZGV4KQorICAgICAgICBhdXRvJiBvdGhlclRyYWNrID0gZG93bmNhc3Q8VmlkZW9UcmFjaz4oKm1f
aW5iYW5kVHJhY2tzW2luc2VydGlvbkluZGV4XSk7CisgICAgICAgIGlmIChvdGhlclRyYWNrLmlu
YmFuZFRyYWNrSW5kZXgoKSA+IGluZGV4KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IG1faW5iYW5kVHJhY2tzLmluc2VydChpbnNlcnRpb25JbmRleCwgdHJhY2spOworICAgIG1faW5i
YW5kVHJhY2tzLmluc2VydChpbnNlcnRpb25JbmRleCwgdHJhY2sucHRyKCkpOwogCiAgICAgQVNT
RVJUKCF0cmFjay0+bWVkaWFFbGVtZW50KCkgfHwgdHJhY2stPm1lZGlhRWxlbWVudCgpID09IG1l
ZGlhRWxlbWVudCgpKTsKICAgICB0cmFjay0+c2V0TWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCgp
KTsKIAotICAgIHNjaGVkdWxlQWRkVHJhY2tFdmVudCh0cmFjay5yZWxlYXNlKCkpOworICAgIHNj
aGVkdWxlQWRkVHJhY2tFdmVudChXVEZNb3ZlKHRyYWNrKSk7CiB9CiAKIFZpZGVvVHJhY2sqIFZp
ZGVvVHJhY2tMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIGlmIChpbmRl
eCA8IG1faW5iYW5kVHJhY2tzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIHRvVmlkZW9UcmFjayht
X2luYmFuZFRyYWNrc1tpbmRleF0uZ2V0KCkpOwotCi0gICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxWaWRlb1RyYWNrPihtX2luYmFuZFRyYWNrc1tpbmRleF0uZ2V0KCkpOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiBWaWRlb1RyYWNrKiBWaWRlb1RyYWNrTGlzdDo6Z2V0
VHJhY2tCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRv
JiBpbmJhbmRUcmFja3MgOiBtX2luYmFuZFRyYWNrcykgewotICAgICAgICBWaWRlb1RyYWNrKiB0
cmFjayA9IHRvVmlkZW9UcmFjayhpbmJhbmRUcmFja3MuZ2V0KCkpOwotICAgICAgICBpZiAodHJh
Y2stPmlkKCkgPT0gaWQpCi0gICAgICAgICAgICByZXR1cm4gdHJhY2s7CisgICAgICAgIGF1dG8m
IHRyYWNrID0gZG93bmNhc3Q8VmlkZW9UcmFjaz4oKmluYmFuZFRyYWNrcyk7CisgICAgICAgIGlm
ICh0cmFjay5pZCgpID09IGlkKQorICAgICAgICAgICAgcmV0dXJuICZ0cmFjazsKICAgICB9Ci0g
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWxvbmcgVmlkZW9UcmFja0xp
c3Q6OnNlbGVjdGVkSW5kZXgoKSBjb25zdAoraW50IFZpZGVvVHJhY2tMaXN0OjpzZWxlY3RlZElu
ZGV4KCkgY29uc3QKIHsKICAgICAvLyA0LjguMTAuMTAuMSBBdWRpb1RyYWNrTGlzdCBhbmQgVmlk
ZW9UcmFja0xpc3Qgb2JqZWN0cwogICAgIC8vIFRoZSBWaWRlb1RyYWNrTGlzdC5zZWxlY3RlZElu
ZGV4IGF0dHJpYnV0ZSBtdXN0IHJldHVybiB0aGUgaW5kZXggb2YgdGhlCiAgICAgLy8gY3VycmVu
dGx5IHNlbGVjdGVkIHRyYWNrLCBpZiBhbnkuIElmIHRoZSBWaWRlb1RyYWNrTGlzdCBvYmplY3Qg
ZG9lcyBub3QKICAgICAvLyBjdXJyZW50bHkgcmVwcmVzZW50IGFueSB0cmFja3MsIG9yIGlmIG5v
bmUgb2YgdGhlIHRyYWNrcyBhcmUgc2VsZWN0ZWQsCiAgICAgLy8gaXQgbXVzdCBpbnN0ZWFkIHJl
dHVybiDiiJIxLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewot
ICAgICAgICBWaWRlb1RyYWNrKiB0cmFjayA9IHRvVmlkZW9UcmFjayhtX2luYmFuZFRyYWNrc1tp
XS5nZXQoKSk7Ci0gICAgICAgIGlmICh0cmFjay0+c2VsZWN0ZWQoKSkKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoZG93bmNhc3Q8Vmlk
ZW9UcmFjaz4oKm1faW5iYW5kVHJhY2tzW2ldKS5zZWxlY3RlZCgpKQogICAgICAgICAgICAgcmV0
dXJuIGk7CiAgICAgfQogICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VmlkZW9UcmFja0xpc3QuaAppbmRleCBmNmQ5ZDQ1Zjc3ODU2OTg5OTQ1OTRjOWE4ZmM4YmQzOTM2
YjYxMTJiLi5iYzRlMDUwNzk2ODFiZWVjMmM5Y2I4YWM2YTI5NTIxM2E2YzUyZmI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZpZGVvVHJhY2tMaXN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WaWRlb1RyYWNrTGlzdC5oCkBAIC00MywxMSArNDMsMTEg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgflZpZGVvVHJhY2tMaXN0KCk7CiAKICAgICBWaWRlb1Ry
YWNrKiBnZXRUcmFja0J5SWQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0gICAgbG9uZyBz
ZWxlY3RlZEluZGV4KCkgY29uc3Q7CisgICAgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKIAog
ICAgIFZpZGVvVHJhY2sqIGl0ZW0odW5zaWduZWQpIGNvbnN0OwogICAgIFZpZGVvVHJhY2sqIGxh
c3RJdGVtKCkgY29uc3QgeyByZXR1cm4gaXRlbShsZW5ndGgoKSAtIDEpOyB9Ci0gICAgdm9pZCBh
cHBlbmQoUGFzc1JlZlB0cjxWaWRlb1RyYWNrPik7CisgICAgdm9pZCBhcHBlbmQoUmVmPFZpZGVv
VHJhY2s+JiYpOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICBFdmVudFRhcmdldEludGVyZmFj
ZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvV2ViUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5tbQppbmRleCA4MGQ2YjgyYzJmYzJiZjlmNzlhZDNiY2M2OTYy
OTBkNTc0ZmJlZTdlLi5hNGM2ZmEzY2RlMDZmZWNmMTk0YzVhMjI5MmZiZWQ1YzQ0N2MyZDkzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9XZWJQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9XZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQpAQCAtMjU5LDE1ICsyNTks
MTIgQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6dXBkYXRlTGVn
aWJsZU9wdGlvbnMoKQogICAgIGlmICghbV9tZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEF1ZGlvVHJhY2tMaXN0KiBhdWRpb1RyYWNrTGlzdCA9IG1fbWVkaWFFbGVtZW50LT5h
dWRpb1RyYWNrcygpOwotICAgIFRleHRUcmFja0xpc3QqIHRyYWNrTGlzdCA9IG1fbWVkaWFFbGVt
ZW50LT50ZXh0VHJhY2tzKCk7Ci0KLSAgICBpZiAoKCF0cmFja0xpc3QgJiYgIWF1ZGlvVHJhY2tM
aXN0KSB8fCAhbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQorICAgIGlmICghbV9t
ZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCktPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCk7Ci0gICAgbV9sZWdpYmxlVHJhY2tzRm9y
TWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRyYWNrTGlz
dCk7Ci0gICAgbV9hdWRpb1RyYWNrc0Zvck1lbnUgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVk
VHJhY2tMaXN0Rm9yTWVudShhdWRpb1RyYWNrTGlzdCk7CisgICAgbV9sZWdpYmxlVHJhY2tzRm9y
TWVudSA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KCZtX21lZGlh
RWxlbWVudC0+dGV4dFRyYWNrcygpKTsKKyAgICBtX2F1ZGlvVHJhY2tzRm9yTWVudSA9IGNhcHRp
b25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KCZtX21lZGlhRWxlbWVudC0+YXVk
aW9UcmFja3MoKSk7CiAKICAgICBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+c2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnMoKSwgYXVkaW9N
ZWRpYVNlbGVjdGVkSW5kZXgoKSk7CiAgICAgbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnNl
dExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnMobGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9u
cygpLCBsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>