<?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>157279</bug_id>
          
          <creation_ts>2016-05-02 14:14:02 -0700</creation_ts>
          <short_desc>Modernize HTMLConstructionSite</short_desc>
          <delta_ts>2016-05-02 15:17:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>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>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1189506</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-02 14:14:02 -0700</bug_when>
    <thetext>Modernize HTMLConstructionSite.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189509</commentid>
    <comment_count>1</comment_count>
      <attachid>277933</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-02 14:16:26 -0700</bug_when>
    <thetext>Created attachment 277933
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189529</commentid>
    <comment_count>2</comment_count>
      <attachid>277933</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-02 15:09:13 -0700</bug_when>
    <thetext>Comment on attachment 277933
Patch

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

&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:723
&gt; +            return firstUnopenElementIndex &lt; m_activeFormattingElements.size() ? firstUnopenElementIndex : Optional&lt;unsigned&gt;(Nullopt);

Doesn&apos;t just Nullopt work?

&gt; Source/WebCore/html/parser/HTMLFormattingElementList.h:53
&gt; +        { }

Don&apos;t we like these on different lines in this case?

&gt; Source/WebCore/html/parser/HTMLFormattingElementList.h:56
&gt; +        { }

ditto

&gt; Source/WebCore/html/parser/HTMLFormattingElementList.h:83
&gt; +        { }

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189530</commentid>
    <comment_count>3</comment_count>
      <attachid>277933</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-02 15:15:20 -0700</bug_when>
    <thetext>Comment on attachment 277933
Patch

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

&gt;&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:723
&gt;&gt; +            return firstUnopenElementIndex &lt; m_activeFormattingElements.size() ? firstUnopenElementIndex : Optional&lt;unsigned&gt;(Nullopt);
&gt; 
&gt; Doesn&apos;t just Nullopt work?

No, it did not build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189531</commentid>
    <comment_count>4</comment_count>
      <attachid>277940</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-02 15:16:41 -0700</bug_when>
    <thetext>Created attachment 277940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189533</commentid>
    <comment_count>5</comment_count>
      <attachid>277940</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-02 15:17:29 -0700</bug_when>
    <thetext>Comment on attachment 277940
Patch

Clearing flags on attachment: 277940

Committed r200340: &lt;http://trac.webkit.org/changeset/200340&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189535</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-02 15:17:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277933</attachid>
            <date>2016-05-02 14:16:26 -0700</date>
            <delta_ts>2016-05-02 15:16:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157279-20160502141703.patch</filename>
            <type>text/plain</type>
            <size>104853</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwMzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUyOGM0OTVjYzdlNGRh
ODI2ZDZmNmI3NjA1MjRmODk5ZjEzNWYxZS4uODE0MGVlNDNjZDgxYzYwNzA3YjMwYTA5MTk3Y2Rj
MWVhMDliNjFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAxNi0wNS0wMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSBIVE1MQ29u
c3RydWN0aW9uU2l0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU3Mjc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTW9kZXJuaXplIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOiBVc2UgbGVzcyByYXcgcG9pbnRl
cnMsIG1vcmUgYXV0bywgbW9yZQorICAgICAgICByYW5nZSBsb29wcyBhbmQgbW9yZSBudWxscHRy
LgorCisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRBdHRyaWJ1
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFVzZUxlbmd0aExpbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OmV4ZWN1dGVSZXBhcmVudFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENv
bnN0cnVjdGlvblNpdGU6OmF0dGFjaExhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpleGVjdXRlUXVldWVkVGFza3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjp0YWtlRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRN
TEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVj
dGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5C
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1M
Qm9keVN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpzZXREZWZhdWx0Q29tcGF0aWJpbGl0eU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbnN0cnVjdGlvblNpdGU6OnNldENvbXBhdGliaWxpdHlNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5pc2hlZFBhcnNpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnRPbkRvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25IVE1M
SHRtbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydEhUTUxIZWFkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0SFRNTEJvZHlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRWxlbWVudE9yRmluZEN1c3RvbUVs
ZW1lbnRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6
Omluc2VydEN1c3RvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlv
blNpdGU6Omluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcm1hdHRpbmdFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OnJlcGFyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRBbHJlYWR5UGFy
c2VkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OnRha2VB
bGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3Jl
YXRlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3Jl
YXRlSFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZlZFRv
a2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbmRleE9mRmly
c3RVbm9wZW5Gb3JtYXR0aW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6cmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmZpbmRGb3N0ZXJTaXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpzaG91bGRGb3N0ZXJQYXJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmZvc3RlclBhcmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6fkhUTUxDb25zdHJ1Y3Rp
b25TaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjpzZXRGb3JtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpzZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpvd25lckRvY3VtZW50Rm9yQ3VycmVudE5v
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omdl
bmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBo
dG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbnN0cnVjdGlvblNpdGU6OmluUXVpcmtzTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aXNUZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6UmVkaXJlY3RUb0Zvc3RlclBhcmVu
dEd1YXJkOjpSZWRpcmVjdFRvRm9zdGVyUGFyZW50R3VhcmQpOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxFbGVtZW50U3RhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVzOjpp
c1Jvb3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRS
ZWNvcmQ6OkVsZW1lbnRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFj
azo6RWxlbWVudFJlY29yZDo6cmVwbGFjZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6aXNBYm92ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudFN0YWNrOjpwb3BBbGwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1l
bnRTdGFjazo6cG9wVW50aWwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6
cG9wVW50aWxQb3BwZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVz
aFJvb3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1M
SHRtbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaFJv
b3ROb2RlQ29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnB1c2hI
VE1MSGVhZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVz
aEhUTUxCb2R5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpw
dXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3ZlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZUhUTUxIZWFkRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6aW5TY29wZUNvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpo
YXNOdW1iZXJlZEhlYWRlckVsZW1lbnRJblNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50U3RhY2s6OmluU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFj
azo6cHVzaENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwb3BD
b21tb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uVG9w
Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnNob3cpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6aGFzT25seU9uZUVsZW1lbnQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6c2Vjb25kRWxlbWVudElz
SFRNTEJvZHlFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50
U3RhY2s6OnBvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNr
Ojpwb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEVsZW1lbnRTdGFjazo6b25lQmVsb3dUb3ApOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50
U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnN0YWNrSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpzZXROZXh0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnBvcFVudGlsUG9wcGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmNvbnRhaW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OnN3YXBUbyk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjphcHBlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6cmVtb3ZlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OnRyeVRvRW5zdXJlTm9haHNBcmtDb25k
aXRpb25RdWlja2x5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3Q6OmVuc3VyZU5vYWhzQXJrQ29uZGl0aW9uKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0OjpFbnRyeTo6RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OnJlcGxhY2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkJvb2ttYXJrOjpCb29rbWFyayk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpCb29rbWFyazo6bW92ZVRv
QWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Qm9v
a21hcms6Om1hcmspOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dDo6Zmlyc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6
RW50cnk6OmlzTWFya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpzdGFja0l0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnk6Om9wZXJhdG9yIT0pOiBEZWxl
dGVkLgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFnKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5C
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0R2VuZXJpY0hU
TUxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rl
bXBsYXRlU3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzU3RhcnRUYWdGb3JJblRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJbkJvZHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29tbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JCZWZvcmVIVE1MKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNSQ0RBVEFTdGFy
dFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NHZW5lcmlj
UmF3VGV4dFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1NjcmlwdFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCk6CisKIDIwMTYtMDUtMDIgIFlvYXYgV2Vpc3Mg
IDx5b2F2QHlvYXYud3M+CiAKICAgICAgICAgU3BlY3VsYXRpdmVseSBmaXggdGhlIGNtYWtlIGJ1
aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAppbmRleCBjZDRmYmQwZTI5YzMxZDdjMDIx
YTJhZjYzODNiZjA0MGIyOWU2MWExLi42NDgzMTdlMTFlY2ZiZmE3MjBlOGJhNDU2OTU4NmQ5ZTc2
YTVmZTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgKQEAgLTExMiw2ICsxMTIsNyBA
QCBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZhbGxiYWNrQ2hhcmFjdGVyRW5jb2Rpbmc7CiB9Owog
CisvLyBGSVhNRTogcmVwbGFjZSB3aXRoIGRvd25jYXN0PFNjcmlwdEVsZW1lbnQ+LgogU2NyaXB0
RWxlbWVudCogdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShFbGVtZW50Kik7CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApp
bmRleCA4OWE3YzBmZDI3MTAyNTU1MGMxODY5NWYyZGQ0MmI3NWMwNTZiMWExLi5mZDE4MjhmYjMy
YzY3YTIwZjQzZWU3ZDRhZDk1MzdhMjIzYzczYThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC02MCw5ICs2MCw5IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRBdHRyaWJ1dGVzKEVsZW1lbnQmIGVsZW1lbnQsIFZlY3Rv
cjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzCiAgICAgZWxlbWVudC5wYXJzZXJTZXRBdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0QXR0cmlidXRlcyhFbGVt
ZW50JiBlbGVtZW50LCBBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBQYXJzZXJDb250ZW50UG9saWN5
IHBhcnNlckNvbnRlbnRQb2xpY3kpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0QXR0cmlidXRlcyhF
bGVtZW50JiBlbGVtZW50LCBBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBQYXJzZXJDb250ZW50UG9s
aWN5IHBhcnNlckNvbnRlbnRQb2xpY3kpCiB7Ci0gICAgc2V0QXR0cmlidXRlcyhlbGVtZW50LCB0
b2tlbi0+YXR0cmlidXRlcygpLCBwYXJzZXJDb250ZW50UG9saWN5KTsKKyAgICBzZXRBdHRyaWJ1
dGVzKGVsZW1lbnQsIHRva2VuLmF0dHJpYnV0ZXMoKSwgcGFyc2VyQ29udGVudFBvbGljeSk7CiB9
CiAKIHN0YXRpYyBib29sIGhhc0ltcGxpZWRFbmRUYWcoY29uc3QgSFRNTFN0YWNrSXRlbSYgaXRl
bSkKQEAgLTc5LDExICs3OSw5IEBAIHN0YXRpYyBib29sIGhhc0ltcGxpZWRFbmRUYWcoY29uc3Qg
SFRNTFN0YWNrSXRlbSYgaXRlbSkKICAgICAgICAgfHwgaXRlbS5oYXNUYWdOYW1lKHJ0Y1RhZyk7
CiB9CiAKLXN0YXRpYyBib29sIHNob3VsZFVzZUxlbmd0aExpbWl0KGNvbnN0IENvbnRhaW5lck5v
ZGUqIG5vZGUpCitzdGF0aWMgYm9vbCBzaG91bGRVc2VMZW5ndGhMaW1pdChjb25zdCBDb250YWlu
ZXJOb2RlJiBub2RlKQogewotICAgIHJldHVybiAhbm9kZS0+aGFzVGFnTmFtZShzY3JpcHRUYWcp
Ci0gICAgICAgICYmICFub2RlLT5oYXNUYWdOYW1lKHN0eWxlVGFnKQotICAgICAgICAmJiAhbm9k
ZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c2NyaXB0VGFnKTsKKyAgICByZXR1cm4gIW5vZGUuaGFz
VGFnTmFtZShzY3JpcHRUYWcpICYmICFub2RlLmhhc1RhZ05hbWUoc3R5bGVUYWcpICYmICFub2Rl
Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnNjcmlwdFRhZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9v
bCBjYXVzZXNGb3N0ZXJQYXJlbnRpbmcoY29uc3QgSFRNTFN0YWNrSXRlbSYgaXRlbSkKQEAgLTEz
MCw3ICsxMjgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZXhlY3V0ZVJlcGFyZW50VGFzayhIVE1M
Q29uc3RydWN0aW9uU2l0ZVRhc2smIHRhc2spCiB7CiAgICAgQVNTRVJUKHRhc2sub3BlcmF0aW9u
ID09IEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzazo6UmVwYXJlbnQpOwogCi0gICAgaWYgKENvbnRh
aW5lck5vZGUqIHBhcmVudCA9IHRhc2suY2hpbGQtPnBhcmVudE5vZGUoKSkKKyAgICBpZiAoYXV0
byogcGFyZW50ID0gdGFzay5jaGlsZC0+cGFyZW50Tm9kZSgpKQogICAgICAgICBwYXJlbnQtPnBh
cnNlclJlbW92ZUNoaWxkKCp0YXNrLmNoaWxkKTsKIAogICAgIHRhc2sucGFyZW50LT5wYXJzZXJB
cHBlbmRDaGlsZCgqdGFzay5jaGlsZCk7CkBAIC0xNzIsNzkgKzE3MCw3MiBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgZXhlY3V0ZVRhc2soSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrJiB0YXNrKQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjph
dHRhY2hMYXRlcihDb250YWluZXJOb2RlKiBwYXJlbnQsIFBhc3NSZWZQdHI8Tm9kZT4gcHJwQ2hp
bGQsIGJvb2wgc2VsZkNsb3NpbmcpCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2hM
YXRlcihDb250YWluZXJOb2RlJiBwYXJlbnQsIFJlZjxOb2RlPiYmIGNoaWxkLCBib29sIHNlbGZD
bG9zaW5nKQogewotICAgIEFTU0VSVChzY3JpcHRpbmdDb250ZW50SXNBbGxvd2VkKG1fcGFyc2Vy
Q29udGVudFBvbGljeSkgfHwgIWlzPEVsZW1lbnQ+KCpwcnBDaGlsZCkgfHwgIXRvU2NyaXB0RWxl
bWVudElmUG9zc2libGUoZG93bmNhc3Q8RWxlbWVudD4ocHJwQ2hpbGQuZ2V0KCkpKSk7Ci0gICAg
QVNTRVJUKHBsdWdpbkNvbnRlbnRJc0FsbG93ZWQobV9wYXJzZXJDb250ZW50UG9saWN5KSB8fCAh
cHJwQ2hpbGQtPmlzUGx1Z2luRWxlbWVudCgpKTsKLQotICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
VGFzayB0YXNrKEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzazo6SW5zZXJ0KTsKLSAgICB0YXNrLnBh
cmVudCA9IHBhcmVudDsKLSAgICB0YXNrLmNoaWxkID0gcHJwQ2hpbGQ7Ci0gICAgdGFzay5zZWxm
Q2xvc2luZyA9IHNlbGZDbG9zaW5nOworICAgIEFTU0VSVChzY3JpcHRpbmdDb250ZW50SXNBbGxv
d2VkKG1fcGFyc2VyQ29udGVudFBvbGljeSkgfHwgIWlzPEVsZW1lbnQ+KGNoaWxkLmdldCgpKSB8
fCAhdG9TY3JpcHRFbGVtZW50SWZQb3NzaWJsZShkb3duY2FzdDxFbGVtZW50PihjaGlsZC5wdHIo
KSkpKTsKKyAgICBBU1NFUlQocGx1Z2luQ29udGVudElzQWxsb3dlZChtX3BhcnNlckNvbnRlbnRQ
b2xpY3kpIHx8ICFjaGlsZC0+aXNQbHVnaW5FbGVtZW50KCkpOwogCiAgICAgaWYgKHNob3VsZEZv
c3RlclBhcmVudCgpKSB7Ci0gICAgICAgIGZvc3RlclBhcmVudCh0YXNrLmNoaWxkKTsKKyAgICAg
ICAgZm9zdGVyUGFyZW50KFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayB0YXNrKEhUTUxDb25zdHJ1Y3Rpb25TaXRl
VGFzazo6SW5zZXJ0KTsKKyAgICB0YXNrLnBhcmVudCA9ICZwYXJlbnQ7CisgICAgdGFzay5jaGls
ZCA9IFdURk1vdmUoY2hpbGQpOworICAgIHRhc2suc2VsZkNsb3NpbmcgPSBzZWxmQ2xvc2luZzsK
KwogICAgIC8vIEFkZCBhcyBhIHNpYmxpbmcgb2YgdGhlIHBhcmVudCBpZiB3ZSBoYXZlIHJlYWNo
ZWQgdGhlIG1heGltdW0gZGVwdGggYWxsb3dlZC4KICAgICBpZiAobV9vcGVuRWxlbWVudHMuc3Rh
Y2tEZXB0aCgpID4gbV9tYXhpbXVtRE9NVHJlZURlcHRoICYmIHRhc2sucGFyZW50LT5wYXJlbnRO
b2RlKCkpCiAgICAgICAgIHRhc2sucGFyZW50ID0gdGFzay5wYXJlbnQtPnBhcmVudE5vZGUoKTsK
IAogICAgIEFTU0VSVCh0YXNrLnBhcmVudCk7Ci0gICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2sp
OworICAgIG1fdGFza1F1ZXVlLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKIH0KIAogdm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6ZXhlY3V0ZVF1ZXVlZFRhc2tzKCkKIHsKLSAgICBjb25zdCBzaXpl
X3Qgc2l6ZSA9IG1fdGFza1F1ZXVlLnNpemUoKTsKLSAgICBpZiAoIXNpemUpCisgICAgaWYgKG1f
dGFza1F1ZXVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ29weSB0aGUg
dGFzayBxdWV1ZSBpbnRvIGEgbG9jYWwgdmFyaWFibGUgaW4gY2FzZSBleGVjdXRlVGFzawogICAg
IC8vIHJlLWVudGVycyB0aGUgcGFyc2VyLgogICAgIFRhc2tRdWV1ZSBxdWV1ZSA9IFdURk1vdmUo
bV90YXNrUXVldWUpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0g
ICAgICAgIGV4ZWN1dGVUYXNrKHF1ZXVlW2ldKTsKKyAgICBmb3IgKGF1dG8mIHRhc2sgOiBxdWV1
ZSkKKyAgICAgICAgZXhlY3V0ZVRhc2sodGFzayk7CiAKICAgICAvLyBXZSBtaWdodCBiZSBkZXRh
Y2hlZCBub3cuCiB9CiAKIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpIVE1MQ29uc3RydWN0aW9uU2l0
ZShEb2N1bWVudCYgZG9jdW1lbnQsIFBhcnNlckNvbnRlbnRQb2xpY3kgcGFyc2VyQ29udGVudFBv
bGljeSwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCkKLSAgICA6IG1fZG9jdW1lbnQoJmRv
Y3VtZW50KQotICAgICwgbV9hdHRhY2htZW50Um9vdCgmZG9jdW1lbnQpCisgICAgOiBtX2RvY3Vt
ZW50KGRvY3VtZW50KQorICAgICwgbV9hdHRhY2htZW50Um9vdChkb2N1bWVudCkKICAgICAsIG1f
cGFyc2VyQ29udGVudFBvbGljeShwYXJzZXJDb250ZW50UG9saWN5KQogICAgICwgbV9pc1BhcnNp
bmdGcmFnbWVudChmYWxzZSkKICAgICAsIG1fcmVkaXJlY3RBdHRhY2hUb0Zvc3RlclBhcmVudChm
YWxzZSkKICAgICAsIG1fbWF4aW11bURPTVRyZWVEZXB0aChtYXhpbXVtRE9NVHJlZURlcHRoKQog
ICAgICwgbV9pblF1aXJrc01vZGUoZG9jdW1lbnQuaW5RdWlya3NNb2RlKCkpCiB7Ci0gICAgQVNT
RVJUKG1fZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkgfHwgbV9kb2N1bWVudC0+aXNYSFRNTERv
Y3VtZW50KCkpOworICAgIEFTU0VSVChtX2RvY3VtZW50LmlzSFRNTERvY3VtZW50KCkgfHwgbV9k
b2N1bWVudC5pc1hIVE1MRG9jdW1lbnQoKSk7CiB9CiAKIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpI
VE1MQ29uc3RydWN0aW9uU2l0ZShEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgUGFyc2VyQ29u
dGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5LCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURl
cHRoKQotICAgIDogbV9kb2N1bWVudCgmZnJhZ21lbnQuZG9jdW1lbnQoKSkKLSAgICAsIG1fYXR0
YWNobWVudFJvb3QoJmZyYWdtZW50KQorICAgIDogbV9kb2N1bWVudChmcmFnbWVudC5kb2N1bWVu
dCgpKQorICAgICwgbV9hdHRhY2htZW50Um9vdChmcmFnbWVudCkKICAgICAsIG1fcGFyc2VyQ29u
dGVudFBvbGljeShwYXJzZXJDb250ZW50UG9saWN5KQogICAgICwgbV9pc1BhcnNpbmdGcmFnbWVu
dCh0cnVlKQogICAgICwgbV9yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50KGZhbHNlKQogICAg
ICwgbV9tYXhpbXVtRE9NVHJlZURlcHRoKG1heGltdW1ET01UcmVlRGVwdGgpCiAgICAgLCBtX2lu
UXVpcmtzTW9kZShmcmFnbWVudC5kb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKQogewotICAgIEFT
U0VSVChtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpIHx8IG1fZG9jdW1lbnQtPmlzWEhUTUxE
b2N1bWVudCgpKTsKKyAgICBBU1NFUlQobV9kb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpIHx8IG1f
ZG9jdW1lbnQuaXNYSFRNTERvY3VtZW50KCkpOwogfQogCiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
fkhUTUxDb25zdHJ1Y3Rpb25TaXRlKCkKIHsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6ZGV0YWNoKCkKLXsKLSAgICBtX2RvY3VtZW50ID0gMDsKLSAgICBtX2F0dGFjaG1lbnRSb290
ID0gMDsKLX0KLQogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6c2V0Rm9ybShIVE1MRm9ybUVs
ZW1lbnQqIGZvcm0pCiB7CiAgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgbmVlZGVk
IGZvciBIVE1MVHJlZUJ1aWxkZXIgaW4gdGhlIGZyYWdtZW50IGNhc2UuCkBAIC0yNTIsNjEgKzI0
Myw2MyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpzZXRGb3JtKEhUTUxGb3JtRWxlbWVu
dCogZm9ybSkKICAgICBtX2Zvcm0gPSBmb3JtOwogfQogCi1QYXNzUmVmUHRyPEhUTUxGb3JtRWxl
bWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OnRha2VGb3JtKCkKK1JlZlB0cjxIVE1MRm9ybUVs
ZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjp0YWtlRm9ybSgpCiB7Ci0gICAgcmV0dXJuIG1f
Zm9ybS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIFdURk1vdmUobV9mb3JtKTsKIH0KIAogdm9pZCBI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5l
ZWRlZCgpCiB7Ci0gICAgQVNTRVJUKG1fZG9jdW1lbnQpOwotICAgIGlmIChtX2RvY3VtZW50LT5m
cmFtZSgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQotICAgICAgICBtX2RvY3VtZW50LT5mcmFt
ZSgpLT5pbmplY3RVc2VyU2NyaXB0cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOworICAgIGlmICht
X2lzUGFyc2luZ0ZyYWdtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogZnJh
bWUgPSBtX2RvY3VtZW50LmZyYW1lKCkpCisgICAgICAgIGZyYW1lLT5pbmplY3RVc2VyU2NyaXB0
cyhJbmplY3RBdERvY3VtZW50U3RhcnQpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9y
ZUhUTUwoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBSZWY8SFRNTEh0bWxFbGVtZW50
PiBlbGVtZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUoKm1fZG9jdW1lbnQpOwotICAgIHNl
dEF0dHJpYnV0ZXMoZWxlbWVudC5nZXQoKSwgdG9rZW4sIG1fcGFyc2VyQ29udGVudFBvbGljeSk7
Ci0gICAgYXR0YWNoTGF0ZXIobV9hdHRhY2htZW50Um9vdCwgZWxlbWVudC5wdHIoKSk7Ci0gICAg
bV9vcGVuRWxlbWVudHMucHVzaEhUTUxIdG1sRWxlbWVudChIVE1MU3RhY2tJdGVtOjpjcmVhdGUo
ZWxlbWVudC5jb3B5UmVmKCksICp0b2tlbikpOworICAgIGF1dG8gZWxlbWVudCA9IEhUTUxIdG1s
RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOworICAgIHNldEF0dHJpYnV0ZXMoZWxlbWVudCwg
dG9rZW4sIG1fcGFyc2VyQ29udGVudFBvbGljeSk7CisgICAgYXR0YWNoTGF0ZXIobV9hdHRhY2ht
ZW50Um9vdCwgZWxlbWVudC5jb3B5UmVmKCkpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1M
SHRtbEVsZW1lbnQoSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQuY29weVJlZigpLCB0b2tl
bikpOwogCiAgICAgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAgICAgZWxlbWVudC0+aW5zZXJ0ZWRC
eVBhcnNlcigpOwogICAgIGRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVkZWQo
KTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1dGVzRnJvbVRv
a2VuSW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgRWxlbWVudCogZWxlbWVudCkK
K3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9F
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
aWYgKHRva2VuLT5hdHRyaWJ1dGVzKCkuaXNFbXB0eSgpKQorICAgIGlmICh0b2tlbi5hdHRyaWJ1
dGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8mIHRva2Vu
QXR0cmlidXRlIDogdG9rZW4tPmF0dHJpYnV0ZXMoKSkgewotICAgICAgICBpZiAoIWVsZW1lbnQt
PmVsZW1lbnREYXRhKCkgfHwgIWVsZW1lbnQtPmZpbmRBdHRyaWJ1dGVCeU5hbWUodG9rZW5BdHRy
aWJ1dGUubmFtZSgpKSkKLSAgICAgICAgICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0b2tlbkF0
dHJpYnV0ZS5uYW1lKCksIHRva2VuQXR0cmlidXRlLnZhbHVlKCkpOworICAgIGZvciAoYXV0byYg
dG9rZW5BdHRyaWJ1dGUgOiB0b2tlbi5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgaWYgKCFlbGVt
ZW50LmVsZW1lbnREYXRhKCkgfHwgIWVsZW1lbnQuZmluZEF0dHJpYnV0ZUJ5TmFtZSh0b2tlbkF0
dHJpYnV0ZS5uYW1lKCkpKQorICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUodG9rZW5B
dHRyaWJ1dGUubmFtZSgpLCB0b2tlbkF0dHJpYnV0ZS52YWx1ZSgpKTsKICAgICB9CiB9CiAKLXZv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhU
TUxIdG1sU3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICAvLyBG
cmFnbWVudHMgZG8gbm90IGhhdmUgYSByb290IEhUTUwgZWxlbWVudCwgc28gYW55IGFkZGl0aW9u
YWwgSFRNTCBlbGVtZW50cwogICAgIC8vIGVuY291bnRlcmVkIGR1cmluZyBmcmFnbWVudCBwYXJz
aW5nIHNob3VsZCBiZSBpZ25vcmVkLgogICAgIGlmIChtX2lzUGFyc2luZ0ZyYWdtZW50KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudCh0
b2tlbiwgJm1fb3BlbkVsZW1lbnRzLmh0bWxFbGVtZW50KCkpOworICAgIG1lcmdlQXR0cmlidXRl
c0Zyb21Ub2tlbkludG9FbGVtZW50KHRva2VuLCBtX29wZW5FbGVtZW50cy5odG1sRWxlbWVudCgp
KTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJvZHlTdGFydFRh
Z0luQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6aW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ewotICAgIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KHRva2VuLCAmbV9vcGVu
RWxlbWVudHMuYm9keUVsZW1lbnQoKSk7CisgICAgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50
b0VsZW1lbnQodG9rZW4sIG1fb3BlbkVsZW1lbnRzLmJvZHlFbGVtZW50KCkpOwogfQogCiB2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpzZXREZWZhdWx0Q29tcGF0aWJpbGl0eU1vZGUoKQogewog
ICAgIGlmIChtX2lzUGFyc2luZ0ZyYWdtZW50KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1f
ZG9jdW1lbnQtPmlzU3JjZG9jRG9jdW1lbnQoKSkKKyAgICBpZiAobV9kb2N1bWVudC5pc1NyY2Rv
Y0RvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRDb21wYXRpYmlsaXR5TW9kZShE
b2N1bWVudENvbXBhdGliaWxpdHlNb2RlOjpRdWlya3NNb2RlKTsKIH0KQEAgLTMxNCw3ICszMDcs
NyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpzZXREZWZhdWx0Q29tcGF0aWJpbGl0eU1v
ZGUoKQogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6c2V0Q29tcGF0aWJpbGl0eU1vZGUoRG9j
dW1lbnRDb21wYXRpYmlsaXR5TW9kZSBtb2RlKQogewogICAgIG1faW5RdWlya3NNb2RlID0gKG1v
ZGUgPT0gRG9jdW1lbnRDb21wYXRpYmlsaXR5TW9kZTo6UXVpcmtzTW9kZSk7Ci0gICAgbV9kb2N1
bWVudC0+c2V0Q29tcGF0aWJpbGl0eU1vZGUobW9kZSk7CisgICAgbV9kb2N1bWVudC5zZXRDb21w
YXRpYmlsaXR5TW9kZShtb2RlKTsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6c2V0
Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9jdHlwZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmluZyYgc3lzdGVtSWQpCkBAIC00MDcsMTggKzQwMCwx
NyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpzZXRDb21wYXRpYmlsaXR5TW9kZUZyb21E
b2N0eXBlKGNvbnN0IFN0cmluZyYgbmFtZSwgYwogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjpmaW5pc2hlZFBhcnNpbmcoKQogewotICAgIG1fZG9jdW1lbnQtPmZpbmlzaGVkUGFyc2luZygp
OworICAgIG1fZG9jdW1lbnQuZmluaXNoZWRQYXJzaW5nKCk7CiB9CiAKLXZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKK3ZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkRPQ1RZUEUpOwor
ICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpET0NUWVBFKTsKIAotICAgIFN0
cmluZyBwdWJsaWNJZCA9IHRva2VuLT5wdWJsaWNJZGVudGlmaWVyKCk7Ci0gICAgU3RyaW5nIHN5
c3RlbUlkID0gdG9rZW4tPnN5c3RlbUlkZW50aWZpZXIoKTsKKyAgICBTdHJpbmcgcHVibGljSWQg
PSB0b2tlbi5wdWJsaWNJZGVudGlmaWVyKCk7CisgICAgU3RyaW5nIHN5c3RlbUlkID0gdG9rZW4u
c3lzdGVtSWRlbnRpZmllcigpOwogCi0gICAgUmVmUHRyPERvY3VtZW50VHlwZT4gZG9jdHlwZSA9
IERvY3VtZW50VHlwZTo6Y3JlYXRlKCptX2RvY3VtZW50LCB0b2tlbi0+bmFtZSgpLCBwdWJsaWNJ
ZCwgc3lzdGVtSWQpOwotICAgIGF0dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3QsIGRvY3R5cGUu
cmVsZWFzZSgpKTsKKyAgICBhdHRhY2hMYXRlcihtX2F0dGFjaG1lbnRSb290LCBEb2N1bWVudFR5
cGU6OmNyZWF0ZShtX2RvY3VtZW50LCB0b2tlbi5uYW1lKCksIHB1YmxpY0lkLCBzeXN0ZW1JZCkp
OwogCiAgICAgLy8gRE9DVFlQRSBub2RlcyBhcmUgb25seSBwcm9jZXNzZWQgd2hlbiBwYXJzaW5n
IGZyYWdtZW50cyB3L28gY29udGV4dEVsZW1lbnRzLCB3aGljaAogICAgIC8vIG5ldmVyIG9jY3Vy
cy4gIEhvd2V2ZXIsIGlmIHdlIGV2ZXIgY2hvc2UgdG8gc3VwcG9ydCBzdWNoLCB0aGlzIGNvZGUg
aXMgc3VidGx5IHdyb25nLApAQCAtNDI5LDEwNiArNDIxLDEwNyBAQCB2b2lkIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgaWYg
KG1faXNQYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0b2tlbi0+
Zm9yY2VRdWlya3MoKSkKKyAgICBpZiAodG9rZW4uZm9yY2VRdWlya3MoKSkKICAgICAgICAgc2V0
Q29tcGF0aWJpbGl0eU1vZGUoRG9jdW1lbnRDb21wYXRpYmlsaXR5TW9kZTo6UXVpcmtzTW9kZSk7
CiAgICAgZWxzZQotICAgICAgICBzZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlKHRva2Vu
LT5uYW1lKCksIHB1YmxpY0lkLCBzeXN0ZW1JZCk7CisgICAgICAgIHNldENvbXBhdGliaWxpdHlN
b2RlRnJvbURvY3R5cGUodG9rZW4ubmFtZSgpLCBwdWJsaWNJZCwgc3lzdGVtSWQpOwogfQogCi12
b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KEF0b21pY0hUTUxUb2tlbiog
dG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2Vu
OjpDb21tZW50KTsKLSAgICBhdHRhY2hMYXRlcigmY3VycmVudE5vZGUoKSwgQ29tbWVudDo6Y3Jl
YXRlKG93bmVyRG9jdW1lbnRGb3JDdXJyZW50Tm9kZSgpLCB0b2tlbi0+Y29tbWVudCgpKSk7Cisg
ICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkNvbW1lbnQpOworICAgIGF0dGFj
aExhdGVyKGN1cnJlbnROb2RlKCksIENvbW1lbnQ6OmNyZWF0ZShvd25lckRvY3VtZW50Rm9yQ3Vy
cmVudE5vZGUoKSwgdG9rZW4uY29tbWVudCgpKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlv
blNpdGU6Omluc2VydENvbW1lbnRPbkRvY3VtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2
b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25Eb2N1bWVudChBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tl
bjo6Q29tbWVudCk7Ci0gICAgYXR0YWNoTGF0ZXIobV9hdHRhY2htZW50Um9vdCwgQ29tbWVudDo6
Y3JlYXRlKCptX2RvY3VtZW50LCB0b2tlbi0+Y29tbWVudCgpKSk7CisgICAgQVNTRVJUKHRva2Vu
LnR5cGUoKSA9PSBIVE1MVG9rZW46OkNvbW1lbnQpOworICAgIGF0dGFjaExhdGVyKG1fYXR0YWNo
bWVudFJvb3QsIENvbW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50LCB0b2tlbi5jb21tZW50KCkpKTsK
IH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uSFRNTEh0bWxF
bGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
IHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkNvbW1lbnQpOworICAg
IEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpDb21tZW50KTsKICAgICBDb250YWlu
ZXJOb2RlJiBwYXJlbnQgPSBtX29wZW5FbGVtZW50cy5yb290Tm9kZSgpOwotICAgIGF0dGFjaExh
dGVyKCZwYXJlbnQsIENvbW1lbnQ6OmNyZWF0ZShwYXJlbnQuZG9jdW1lbnQoKSwgdG9rZW4tPmNv
bW1lbnQoKSkpOworICAgIGF0dGFjaExhdGVyKHBhcmVudCwgQ29tbWVudDo6Y3JlYXRlKHBhcmVu
dC5kb2N1bWVudCgpLCB0b2tlbi5jb21tZW50KCkpKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0SFRNTEhlYWRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2
b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKIHsKICAgICBBU1NFUlQoIXNob3VsZEZvc3RlclBhcmVudCgpKTsKLSAg
ICBtX2hlYWQgPSBIVE1MU3RhY2tJdGVtOjpjcmVhdGUoY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4p
LCAqdG9rZW4pOwotICAgIGF0dGFjaExhdGVyKCZjdXJyZW50Tm9kZSgpLCAmbV9oZWFkLT5lbGVt
ZW50KCkpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MSGVhZEVsZW1lbnQobV9oZWFkKTsK
KyAgICBtX2hlYWQgPSBIVE1MU3RhY2tJdGVtOjpjcmVhdGUoY3JlYXRlSFRNTEVsZW1lbnQodG9r
ZW4pLCB0b2tlbik7CisgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgbV9oZWFkLT5lbGVt
ZW50KCkpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MSGVhZEVsZW1lbnQoKm1faGVhZCk7
CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
SFRNTEJvZHlFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKCFz
aG91bGRGb3N0ZXJQYXJlbnQoKSk7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBjcmVhdGVI
VE1MRWxlbWVudCh0b2tlbik7Ci0gICAgYXR0YWNoTGF0ZXIoJmN1cnJlbnROb2RlKCksIGJvZHku
Z2V0KCkpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MQm9keUVsZW1lbnQoSFRNTFN0YWNr
SXRlbTo6Y3JlYXRlKGJvZHkucmVsZWFzZU5vbk51bGwoKSwgKnRva2VuKSk7CisgICAgYXV0byBi
b2R5ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOworICAgIGF0dGFjaExhdGVyKGN1cnJlbnRO
b2RlKCksIGJvZHkuY29weVJlZigpKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEJvZHlF
bGVtZW50KEhUTUxTdGFja0l0ZW06OmNyZWF0ZShXVEZNb3ZlKGJvZHkpLCB0b2tlbikpOwogfQog
Ci12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVsZW1lbnQoQXRvbWlj
SFRNTFRva2VuKiB0b2tlbiwgYm9vbCBpc0RlbW90ZWQpCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbiwgYm9vbCBp
c0RlbW90ZWQpCiB7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxl
bWVudCh0b2tlbik7Ci0gICAgQVNTRVJUKGlzPEhUTUxGb3JtRWxlbWVudD4oKmVsZW1lbnQpKTsK
LSAgICBtX2Zvcm0gPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxGb3JtRWxlbWVudD4oZWxlbWVu
dC5yZWxlYXNlKCkpOworICAgIGF1dG8gZWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KHRva2Vu
KTsKKyAgICBtX2Zvcm0gPSAmZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50PihlbGVtZW50LmdldCgp
KTsKICAgICBtX2Zvcm0tPnNldERlbW90ZWQoaXNEZW1vdGVkKTsKLSAgICBhdHRhY2hMYXRlcigm
Y3VycmVudE5vZGUoKSwgbV9mb3JtKTsKLSAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFj
a0l0ZW06OmNyZWF0ZSgqbV9mb3JtLCAqdG9rZW4pKTsKKyAgICBhdHRhY2hMYXRlcihjdXJyZW50
Tm9kZSgpLCAqbV9mb3JtKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06
OmNyZWF0ZSgqbV9mb3JtLCB0b2tlbikpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnRIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
IHsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KHRva2Vu
KTsKLSAgICBhdHRhY2hMYXRlcigmY3VycmVudE5vZGUoKSwgZWxlbWVudCk7Ci0gICAgbV9vcGVu
RWxlbWVudHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlTm9uTnVs
bCgpLCAqdG9rZW4pKTsKKyAgICBhdXRvIGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudCh0b2tl
bik7CisgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudC5jb3B5UmVmKCkpOwor
ICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKFdURk1vdmUoZWxl
bWVudCksIHRva2VuKSk7CiB9CiAKICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQotSlNDdXN0
b21FbGVtZW50SW50ZXJmYWNlKiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEVsZW1l
bnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJmYWNlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCisK
K0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZSogSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhU
TUxFbGVtZW50T3JGaW5kQ3VzdG9tRWxlbWVudEludGVyZmFjZShBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogewogICAgIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSogaW50ZXJmYWNlID0gbnVsbHB0
cjsKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50T3JGaW5k
Q3VzdG9tRWxlbWVudEludGVyZmFjZSh0b2tlbiwgJmludGVyZmFjZSk7CiAgICAgaWYgKFVOTElL
RUxZKGludGVyZmFjZSkpCiAgICAgICAgIHJldHVybiBpbnRlcmZhY2U7Ci0gICAgYXR0YWNoTGF0
ZXIoJmN1cnJlbnROb2RlKCksIGVsZW1lbnQpOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRN
TFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZU5vbk51bGwoKSwgKnRva2VuKSk7Cisg
ICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgKmVsZW1lbnQpOworICAgIG1fb3BlbkVsZW1l
bnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZU5vbk51bGwoKSwg
dG9rZW4pKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0Q3VzdG9tRWxlbWVudChSZWY8RWxlbWVudD4mJiBlbGVtZW50LCBjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCiB7
Ci0gICAgc2V0QXR0cmlidXRlcyhlbGVtZW50LmdldCgpLCBhdHRyaWJ1dGVzLCBtX3BhcnNlckNv
bnRlbnRQb2xpY3kpOwotICAgIGF0dGFjaExhdGVyKCZjdXJyZW50Tm9kZSgpLCBlbGVtZW50LnB0
cigpKTsKKyAgICBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMsIG1fcGFyc2VyQ29u
dGVudFBvbGljeSk7CisgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgZWxlbWVudC5jb3B5
UmVmKCkpOwogICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKFdU
Rk1vdmUoZWxlbWVudCksIGxvY2FsTmFtZSwgYXR0cmlidXRlcykpOwogfQorCiAjZW5kaWYKIAot
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudChB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
U2VsZkNsb3NpbmdIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFT
U0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOworICAgIEFTU0VSVCh0
b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CiAgICAgLy8gTm9ybWFsbHkgSFRN
TEVsZW1lbnRTdGFjayBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBmaW5pc2hQYXJzaW5nQ2hp
bGRyZW4sCiAgICAgLy8gYnV0IHNlbGYtY2xvc2luZyBlbGVtZW50cyBhcmUgbmV2ZXIgaW4gdGhl
IGVsZW1lbnQgc3RhY2sgc28gdGhlIHN0YWNrCiAgICAgLy8gZG9lc24ndCBnZXQgYSBjaGFuY2Ug
dG8gdGVsbCB0aGVtIHRoYXQgd2UncmUgZG9uZSBwYXJzaW5nIHRoZWlyIGNoaWxkcmVuLgotICAg
IGF0dGFjaExhdGVyKCZjdXJyZW50Tm9kZSgpLCBjcmVhdGVIVE1MRWxlbWVudCh0b2tlbiksIHRy
dWUpOworICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGNyZWF0ZUhUTUxFbGVtZW50KHRv
a2VuKSwgdHJ1ZSk7CiAgICAgLy8gRklYTUU6IERvIHdlIHdhbnQgdG8gYWNrbm93bGVkZ2UgdGhl
IHRva2VuJ3Mgc2VsZi1jbG9zaW5nIGZsYWc/CiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwj
YWNrbm93bGVkZ2Utc2VsZi1jbG9zaW5nLWZsYWcKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKK3Zv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcm1hdHRpbmdFbGVtZW50KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dl
Yi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3RoZS1zdGFjay1vZi1v
cGVuLWVsZW1lbnRzCiAgICAgLy8gUG9zc2libGUgYWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVudHMg
aW5jbHVkZToKICAgICAvLyBhLCBiLCBiaWcsIGNvZGUsIGVtLCBmb250LCBpLCBub2JyLCBzLCBz
bWFsbCwgc3RyaWtlLCBzdHJvbmcsIHR0LCBhbmQgdS4KLSAgICBBU1NFUlQoaXNGb3JtYXR0aW5n
VGFnKHRva2VuLT5uYW1lKCkpKTsKKyAgICBBU1NFUlQoaXNGb3JtYXR0aW5nVGFnKHRva2VuLm5h
bWUoKSkpOwogICAgIGluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKLSAgICBtX2FjdGl2ZUZvcm1h
dHRpbmdFbGVtZW50cy5hcHBlbmQoJmN1cnJlbnRTdGFja0l0ZW0oKSk7CisgICAgbV9hY3RpdmVG
b3JtYXR0aW5nRWxlbWVudHMuYXBwZW5kKGN1cnJlbnRTdGFja0l0ZW0oKSk7CiB9CiAKLXZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQo
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9zY3JpcHRpbmctMS5odG1sI2Fs
cmVhZHktc3RhcnRlZAogICAgIC8vIGh0dHA6Ly9odG1sNS5vcmcvc3BlY3MvZG9tLXBhcnNpbmcu
aHRtbCNkb20tcmFuZ2UtY3JlYXRlY29udGV4dHVhbGZyYWdtZW50CkBAIC01MzcsMjMgKzUzMCwy
MyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KEF0b21p
Y0hUTUxUb2tlbiogdG9rZW4pCiAgICAgLy8gdGhvc2UgZmxhZ3Mgb3IgZWZmZWN0cyB0aGVyZW9m
LgogICAgIGNvbnN0IGJvb2wgcGFyc2VySW5zZXJ0ZWQgPSBtX3BhcnNlckNvbnRlbnRQb2xpY3kg
IT0gQWxsb3dTY3JpcHRpbmdDb250ZW50QW5kRG9Ob3RNYXJrQWxyZWFkeVN0YXJ0ZWQ7CiAgICAg
Y29uc3QgYm9vbCBhbHJlYWR5U3RhcnRlZCA9IG1faXNQYXJzaW5nRnJhZ21lbnQgJiYgcGFyc2Vy
SW5zZXJ0ZWQ7Ci0gICAgUmVmPEhUTUxTY3JpcHRFbGVtZW50PiBlbGVtZW50ID0gSFRNTFNjcmlw
dEVsZW1lbnQ6OmNyZWF0ZShzY3JpcHRUYWcsIG93bmVyRG9jdW1lbnRGb3JDdXJyZW50Tm9kZSgp
LCBwYXJzZXJJbnNlcnRlZCwgYWxyZWFkeVN0YXJ0ZWQpOwotICAgIHNldEF0dHJpYnV0ZXMoZWxl
bWVudC5nZXQoKSwgdG9rZW4sIG1fcGFyc2VyQ29udGVudFBvbGljeSk7CisgICAgYXV0byBlbGVt
ZW50ID0gSFRNTFNjcmlwdEVsZW1lbnQ6OmNyZWF0ZShzY3JpcHRUYWcsIG93bmVyRG9jdW1lbnRG
b3JDdXJyZW50Tm9kZSgpLCBwYXJzZXJJbnNlcnRlZCwgYWxyZWFkeVN0YXJ0ZWQpOworICAgIHNl
dEF0dHJpYnV0ZXMoZWxlbWVudCwgdG9rZW4sIG1fcGFyc2VyQ29udGVudFBvbGljeSk7CiAgICAg
aWYgKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV9wYXJzZXJDb250ZW50UG9saWN5KSkKLSAg
ICAgICAgYXR0YWNoTGF0ZXIoJmN1cnJlbnROb2RlKCksIGVsZW1lbnQucHRyKCkpOwotICAgIG1f
b3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKFdURk1vdmUoZWxlbWVudCks
ICp0b2tlbikpOworICAgICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBlbGVtZW50LmNv
cHlSZWYoKSk7CisgICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUo
V1RGTW92ZShlbGVtZW50KSwgdG9rZW4pKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6aW5zZXJ0Rm9yZWlnbkVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRGb3JlaWduRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVzcGFjZVVSSSkKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9r
ZW46OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3Rh
cnRUYWcpOwogICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIHBhcnNlRXJyb3Igd2hlbiB4bWxucyBv
ciB4bWxuczp4bGluayBhcmUgd3JvbmcuCiAKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9
IGNyZWF0ZUVsZW1lbnQodG9rZW4sIG5hbWVzcGFjZVVSSSk7Ci0gICAgaWYgKHNjcmlwdGluZ0Nv
bnRlbnRJc0FsbG93ZWQobV9wYXJzZXJDb250ZW50UG9saWN5KSB8fCAhdG9TY3JpcHRFbGVtZW50
SWZQb3NzaWJsZShlbGVtZW50LmdldCgpKSkKLSAgICAgICAgYXR0YWNoTGF0ZXIoJmN1cnJlbnRO
b2RlKCksIGVsZW1lbnQsIHRva2VuLT5zZWxmQ2xvc2luZygpKTsKLSAgICBpZiAoIXRva2VuLT5z
ZWxmQ2xvc2luZygpKQotICAgICAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06
OmNyZWF0ZShlbGVtZW50LnJlbGVhc2VOb25OdWxsKCksICp0b2tlbiwgbmFtZXNwYWNlVVJJKSk7
CisgICAgYXV0byBlbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0b2tlbiwgbmFtZXNwYWNlVVJJKTsK
KyAgICBpZiAoc2NyaXB0aW5nQ29udGVudElzQWxsb3dlZChtX3BhcnNlckNvbnRlbnRQb2xpY3kp
IHx8ICF0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKGVsZW1lbnQucHRyKCkpKQorICAgICAgICBh
dHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBlbGVtZW50LmNvcHlSZWYoKSwgdG9rZW4uc2VsZkNs
b3NpbmcoKSk7CisgICAgaWYgKCF0b2tlbi5zZWxmQ2xvc2luZygpKQorICAgICAgICBtX29wZW5F
bGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShXVEZNb3ZlKGVsZW1lbnQpLCB0b2tl
biwgbmFtZXNwYWNlVVJJKSk7CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2Vy
dFRleHROb2RlKGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgV2hpdGVzcGFjZU1vZGUgd2hpdGVz
cGFjZU1vZGUpCkBAIC01NjksMTEgKzU2MiwxMCBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnRUZXh0Tm9kZShjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIFdoaXRlc3BhY2VNbwog
CiAgICAgLy8gU3RyaW5ncyBjb21wb3NlZCBlbnRpcmVseSBvZiB3aGl0ZXNwYWNlIGFyZSBsaWtl
bHkgdG8gYmUgcmVwZWF0ZWQuCiAgICAgLy8gVHVybiB0aGVtIGludG8gQXRvbWljU3RyaW5nIHNv
IHdlIHNoYXJlIGEgc2luZ2xlIHN0cmluZyBmb3IgZWFjaC4KLSAgICBib29sIHNob3VsZFVzZUF0
b21pY1N0cmluZyA9IHdoaXRlc3BhY2VNb2RlID09IEFsbFdoaXRlc3BhY2UKLSAgICAgICAgfHwg
KHdoaXRlc3BhY2VNb2RlID09IFdoaXRlc3BhY2VVbmtub3duICYmIGlzQWxsV2hpdGVzcGFjZShj
aGFyYWN0ZXJzKSk7CisgICAgYm9vbCBzaG91bGRVc2VBdG9taWNTdHJpbmcgPSB3aGl0ZXNwYWNl
TW9kZSA9PSBBbGxXaGl0ZXNwYWNlIHx8ICh3aGl0ZXNwYWNlTW9kZSA9PSBXaGl0ZXNwYWNlVW5r
bm93biAmJiBpc0FsbFdoaXRlc3BhY2UoY2hhcmFjdGVycykpOwogCiAgICAgdW5zaWduZWQgY3Vy
cmVudFBvc2l0aW9uID0gMDsKLSAgICB1bnNpZ25lZCBsZW5ndGhMaW1pdCA9IHNob3VsZFVzZUxl
bmd0aExpbWl0KHRhc2sucGFyZW50LmdldCgpKSA/IFRleHQ6OmRlZmF1bHRMZW5ndGhMaW1pdCA6
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICB1bnNpZ25lZCBsZW5n
dGhMaW1pdCA9IHNob3VsZFVzZUxlbmd0aExpbWl0KCp0YXNrLnBhcmVudCkgPyBUZXh0OjpkZWZh
dWx0TGVuZ3RoTGltaXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAK
ICAgICAvLyBGSVhNRTogU3BsaXR0aW5nIHRleHQgbm9kZXMgaW50byBzbWFsbGVyIGNodW5rcyBj
b250cmFkaWN0cyBIVE1MNSBzcGVjLCBidXQgaXMgY3VycmVudGx5IG5lY2Vzc2FyeQogICAgIC8v
IGZvciBwZXJmb3JtYW5jZSwgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTU4OTg+LgpAQCAtNTgyLDEyICs1NzQsMTEgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0VGV4dE5vZGUoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNwYWNl
TW8KICAgICBpZiAoaXM8VGV4dD4ocHJldmlvdXNDaGlsZCkpIHsKICAgICAgICAgLy8gRklYTUU6
IFdlJ3JlIG9ubHkgc3VwcG9zZWQgdG8gYXBwZW5kIHRvIHRoaXMgdGV4dCBub2RlIGlmIGl0CiAg
ICAgICAgIC8vIHdhcyB0aGUgbGFzdCB0ZXh0IG5vZGUgaW5zZXJ0ZWQgYnkgdGhlIHBhcnNlci4K
LSAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PigqcHJldmlvdXNDaGlsZCk7
Ci0gICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHRleHROb2RlLnBhcnNlckFwcGVuZERhdGEoY2hh
cmFjdGVycywgMCwgbGVuZ3RoTGltaXQpOworICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBkb3du
Y2FzdDxUZXh0PigqcHJldmlvdXNDaGlsZCkucGFyc2VyQXBwZW5kRGF0YShjaGFyYWN0ZXJzLCAw
LCBsZW5ndGhMaW1pdCk7CiAgICAgfQogCiAgICAgd2hpbGUgKGN1cnJlbnRQb3NpdGlvbiA8IGNo
YXJhY3RlcnMubGVuZ3RoKCkpIHsKLSAgICAgICAgUmVmPFRleHQ+IHRleHROb2RlID0gVGV4dDo6
Y3JlYXRlV2l0aExlbmd0aExpbWl0KHRhc2sucGFyZW50LT5kb2N1bWVudCgpLCBzaG91bGRVc2VB
dG9taWNTdHJpbmcgPyBBdG9taWNTdHJpbmcoY2hhcmFjdGVycykuc3RyaW5nKCkgOiBjaGFyYWN0
ZXJzLCBjdXJyZW50UG9zaXRpb24sIGxlbmd0aExpbWl0KTsKKyAgICAgICAgYXV0byB0ZXh0Tm9k
ZSA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdCh0YXNrLnBhcmVudC0+ZG9jdW1lbnQoKSwg
c2hvdWxkVXNlQXRvbWljU3RyaW5nID8gQXRvbWljU3RyaW5nKGNoYXJhY3RlcnMpLnN0cmluZygp
IDogY2hhcmFjdGVycywgY3VycmVudFBvc2l0aW9uLCBsZW5ndGhMaW1pdCk7CiAgICAgICAgIC8v
IElmIHdlIGhhdmUgYSB3aG9sZSBzdHJpbmcgb2YgdW5icmVha2FibGUgY2hhcmFjdGVycyB0aGUg
YWJvdmUgY291bGQgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wLiBFeGNlZWRpbmcgdGhlIGxlbmd0
aCBsaW1pdCBpcyB0aGUgbGVzc2VyIGV2aWwuCiAgICAgICAgIGlmICghdGV4dE5vZGUtPmxlbmd0
aCgpKSB7CiAgICAgICAgICAgICBTdHJpbmcgc3Vic3RyaW5nID0gY2hhcmFjdGVycy5zdWJzdHJp
bmcoY3VycmVudFBvc2l0aW9uKTsKQEAgLTYwNyw3ICs1OTgsNyBAQCB2b2lkIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjpyZXBhcmVudChIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkJiBuZXdQ
YXJlbnQsCiAgICAgSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrIHRhc2soSFRNTENvbnN0cnVjdGlv
blNpdGVUYXNrOjpSZXBhcmVudCk7CiAgICAgdGFzay5wYXJlbnQgPSAmbmV3UGFyZW50Lm5vZGUo
KTsKICAgICB0YXNrLmNoaWxkID0gJmNoaWxkLmVsZW1lbnQoKTsKLSAgICBtX3Rhc2tRdWV1ZS5h
cHBlbmQodGFzayk7CisgICAgbV90YXNrUXVldWUuYXBwZW5kKFdURk1vdmUodGFzaykpOwogfQog
CiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpyZXBhcmVudChIVE1MRWxlbWVudFN0YWNrOjpF
bGVtZW50UmVjb3JkJiBuZXdQYXJlbnQsIEhUTUxTdGFja0l0ZW0mIGNoaWxkKQpAQCAtNjE1LDIw
ICs2MDYsMjAgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6cmVwYXJlbnQoSFRNTEVsZW1l
bnRTdGFjazo6RWxlbWVudFJlY29yZCYgbmV3UGFyZW50LAogICAgIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlVGFzayB0YXNrKEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzazo6UmVwYXJlbnQpOwogICAgIHRh
c2sucGFyZW50ID0gJm5ld1BhcmVudC5ub2RlKCk7CiAgICAgdGFzay5jaGlsZCA9ICZjaGlsZC5l
bGVtZW50KCk7Ci0gICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2spOworICAgIG1fdGFza1F1ZXVl
LmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0QWxyZWFkeVBhcnNlZENoaWxkKEhUTUxTdGFja0l0ZW0mIG5ld1BhcmVudCwgSFRNTEVs
ZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCYgY2hpbGQpCiB7CiAgICAgaWYgKGNhdXNlc0Zvc3Rl
clBhcmVudGluZyhuZXdQYXJlbnQpKSB7Ci0gICAgICAgIGZvc3RlclBhcmVudCgmY2hpbGQuZWxl
bWVudCgpKTsKKyAgICAgICAgZm9zdGVyUGFyZW50KGNoaWxkLmVsZW1lbnQoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2sgdGFzayhIVE1M
Q29uc3RydWN0aW9uU2l0ZVRhc2s6Okluc2VydEFscmVhZHlQYXJzZWRDaGlsZCk7CiAgICAgdGFz
ay5wYXJlbnQgPSAmbmV3UGFyZW50Lm5vZGUoKTsKICAgICB0YXNrLmNoaWxkID0gJmNoaWxkLmVs
ZW1lbnQoKTsKLSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7CisgICAgbV90YXNrUXVldWUu
YXBwZW5kKFdURk1vdmUodGFzaykpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjp0
YWtlQWxsQ2hpbGRyZW4oSFRNTFN0YWNrSXRlbSYgbmV3UGFyZW50LCBIVE1MRWxlbWVudFN0YWNr
OjpFbGVtZW50UmVjb3JkJiBvbGRQYXJlbnQpCkBAIC02MzYsMTQgKzYyNywxNCBAQCB2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjp0YWtlQWxsQ2hpbGRyZW4oSFRNTFN0YWNrSXRlbSYgbmV3UGFy
ZW50LCBIVE1MRWxlbWVudAogICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayB0YXNrKEhUTUxD
b25zdHJ1Y3Rpb25TaXRlVGFzazo6VGFrZUFsbENoaWxkcmVuKTsKICAgICB0YXNrLnBhcmVudCA9
ICZuZXdQYXJlbnQubm9kZSgpOwogICAgIHRhc2suY2hpbGQgPSAmb2xkUGFyZW50Lm5vZGUoKTsK
LSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7CisgICAgbV90YXNrUXVldWUuYXBwZW5kKFdU
Rk1vdmUodGFzaykpOwogfQogCi1SZWY8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNy
ZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lc3BhY2VVUkkpCitSZWY8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUVs
ZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkkpCiB7Ci0gICAgUXVhbGlmaWVkTmFtZSB0YWdOYW1lKG51bGxBdG9tLCB0b2tlbi0+bmFt
ZSgpLCBuYW1lc3BhY2VVUkkpOwotICAgIFJlZjxFbGVtZW50PiBlbGVtZW50ID0gb3duZXJEb2N1
bWVudEZvckN1cnJlbnROb2RlKCkuY3JlYXRlRWxlbWVudCh0YWdOYW1lLCB0cnVlKTsKLSAgICBz
ZXRBdHRyaWJ1dGVzKGVsZW1lbnQuZ2V0KCksIHRva2VuLCBtX3BhcnNlckNvbnRlbnRQb2xpY3kp
OworICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZShudWxsQXRvbSwgdG9rZW4ubmFtZSgpLCBuYW1l
c3BhY2VVUkkpOworICAgIGF1dG8gZWxlbWVudCA9IG93bmVyRG9jdW1lbnRGb3JDdXJyZW50Tm9k
ZSgpLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgdHJ1ZSk7CisgICAgc2V0QXR0cmlidXRlcyhlbGVt
ZW50LCB0b2tlbiwgbV9wYXJzZXJDb250ZW50UG9saWN5KTsKICAgICByZXR1cm4gZWxlbWVudDsK
IH0KIApAQCAtNjU1LDkgKzY0Niw5IEBAIGlubGluZSBEb2N1bWVudCYgSFRNTENvbnN0cnVjdGlv
blNpdGU6Om93bmVyRG9jdW1lbnRGb3JDdXJyZW50Tm9kZSgpCiB9CiAKIFJlZlB0cjxFbGVtZW50
PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVt
ZW50SW50ZXJmYWNlKAotICAgIEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIEpTQ3VzdG9tRWxlbWVu
dEludGVyZmFjZSoqIGN1c3RvbUVsZW1lbnRJbnRlcmZhY2UpCisgICAgQXRvbWljSFRNTFRva2Vu
JiB0b2tlbiwgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKiogY3VzdG9tRWxlbWVudEludGVyZmFj
ZSkKIHsKLSAgICBhdXRvJiBsb2NhbE5hbWUgPSB0b2tlbi0+bmFtZSgpOworICAgIGF1dG8mIGxv
Y2FsTmFtZSA9IHRva2VuLm5hbWUoKTsKICAgICAvLyBGSVhNRTogVGhpcyBjYW4ndCB1c2UgSFRN
TENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUVsZW1lbnQgYmVjYXVzZSB3ZQogICAgIC8vIGhhdmUg
dG8gcGFzcyB0aGUgY3VycmVudCBmb3JtIGVsZW1lbnQuICBXZSBzaG91bGQgcmV3b3JrIGZvcm0g
YXNzb2NpYXRpb24KICAgICAvLyB0byBvY2N1ciBhZnRlciBjb25zdHJ1Y3Rpb24gdG8gYWxsb3cg
YmV0dGVyIGNvZGUgc2hhcmluZyBoZXJlLgpAQCAtNzAzLDUzICs2OTQsNTMgQEAgUmVmUHRyPEVs
ZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudE9yRmluZEN1c3Rv
bUVsZW1lbnRJbnRlcmYKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIAotUmVmPEVsZW1lbnQ+IEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRv
a2VuKQorUmVmPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVu
dChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
ID0gY3JlYXRlSFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJmYWNlKHRva2VuLCBu
dWxscHRyKTsKICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgcmV0dXJuIGVsZW1lbnQucmVsZWFz
ZU5vbk51bGwoKTsKIH0KIAotUmVmPEhUTUxTdGFja0l0ZW0+IEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjpjcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oSFRNTFN0YWNrSXRlbSogaXRlbSkKK1JlZjxI
VE1MU3RhY2tJdGVtPiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEZyb21TYXZl
ZFRva2VuKEhUTUxTdGFja0l0ZW0mIGl0ZW0pCiB7CiAgICAgLy8gTk9URTogTW92aW5nIGZyb20g
aXRlbSAtPiB0b2tlbiAtPiBpdGVtIGNvcGllcyB0aGUgQXR0cmlidXRlIHZlY3RvciB0d2ljZSEK
LSAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGl0ZW0t
PmxvY2FsTmFtZSgpLCBWZWN0b3I8QXR0cmlidXRlPihpdGVtLT5hdHRyaWJ1dGVzKCkpKTsKLSAg
ICBBU1NFUlQoaXRlbS0+bmFtZXNwYWNlVVJJKCkgPT0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFj
ZVVSSSk7Ci0gICAgQVNTRVJUKGlzRm9ybWF0dGluZ1RhZyhpdGVtLT5sb2NhbE5hbWUoKSkpOwot
ICAgIHJldHVybiBIVE1MU3RhY2tJdGVtOjpjcmVhdGUoY3JlYXRlSFRNTEVsZW1lbnQoJmZha2VU
b2tlbiksIGZha2VUb2tlbiwgaXRlbS0+bmFtZXNwYWNlVVJJKCkpOworICAgIEF0b21pY0hUTUxU
b2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgaXRlbS5sb2NhbE5hbWUoKSwgVmVj
dG9yPEF0dHJpYnV0ZT4oaXRlbS5hdHRyaWJ1dGVzKCkpKTsKKyAgICBBU1NFUlQoaXRlbS5uYW1l
c3BhY2VVUkkoKSA9PSBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKTsKKyAgICBBU1NFUlQo
aXNGb3JtYXR0aW5nVGFnKGl0ZW0ubG9jYWxOYW1lKCkpKTsKKyAgICByZXR1cm4gSFRNTFN0YWNr
SXRlbTo6Y3JlYXRlKGNyZWF0ZUhUTUxFbGVtZW50KGZha2VUb2tlbiksIGZha2VUb2tlbiwgaXRl
bS5uYW1lc3BhY2VVUkkoKSk7CiB9CiAKLWJvb2wgSFRNTENvbnN0cnVjdGlvblNpdGU6OmluZGV4
T2ZGaXJzdFVub3BlbkZvcm1hdHRpbmdFbGVtZW50KHVuc2lnbmVkJiBmaXJzdFVub3BlbkVsZW1l
bnRJbmRleCkgY29uc3QKK09wdGlvbmFsPHVuc2lnbmVkPiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5kZXhPZkZpcnN0VW5vcGVuRm9ybWF0dGluZ0VsZW1lbnQoKSBjb25zdAogewogICAgIGlmICht
X2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgdW5zaWduZWQgaW5kZXggPSBtX2FjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cy5zaXplKCk7CiAgICAgZG8gewogICAgICAgICAtLWluZGV4Owot
ICAgICAgICBjb25zdCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeSYgZW50cnkgPSBt
X2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5hdChpbmRleCk7Ci0gICAgICAgIGlmIChlbnRyeS5p
c01hcmtlcigpIHx8IG1fb3BlbkVsZW1lbnRzLmNvbnRhaW5zKCZlbnRyeS5lbGVtZW50KCkpKSB7
Ci0gICAgICAgICAgICBmaXJzdFVub3BlbkVsZW1lbnRJbmRleCA9IGluZGV4ICsgMTsKLSAgICAg
ICAgICAgIHJldHVybiBmaXJzdFVub3BlbkVsZW1lbnRJbmRleCA8IG1fYWN0aXZlRm9ybWF0dGlu
Z0VsZW1lbnRzLnNpemUoKTsKKyAgICAgICAgY29uc3QgYXV0byYgZW50cnkgPSBtX2FjdGl2ZUZv
cm1hdHRpbmdFbGVtZW50cy5hdChpbmRleCk7CisgICAgICAgIGlmIChlbnRyeS5pc01hcmtlcigp
IHx8IG1fb3BlbkVsZW1lbnRzLmNvbnRhaW5zKGVudHJ5LmVsZW1lbnQoKSkpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGZpcnN0VW5vcGVuRWxlbWVudEluZGV4ID0gaW5kZXggKyAxOworICAgICAg
ICAgICAgcmV0dXJuIGZpcnN0VW5vcGVuRWxlbWVudEluZGV4IDwgbV9hY3RpdmVGb3JtYXR0aW5n
RWxlbWVudHMuc2l6ZSgpID8gZmlyc3RVbm9wZW5FbGVtZW50SW5kZXggOiBPcHRpb25hbDx1bnNp
Z25lZD4oTnVsbG9wdCk7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChpbmRleCk7Ci0gICAgZmly
c3RVbm9wZW5FbGVtZW50SW5kZXggPSBpbmRleDsKLSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBpbmRleDsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6cmVjb25zdHJ1Y3RU
aGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKQogewotICAgIHVuc2lnbmVkIGZpcnN0VW5vcGVu
RWxlbWVudEluZGV4OwotICAgIGlmICghaW5kZXhPZkZpcnN0VW5vcGVuRm9ybWF0dGluZ0VsZW1l
bnQoZmlyc3RVbm9wZW5FbGVtZW50SW5kZXgpKQorICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBmaXJz
dFVub3BlbkVsZW1lbnRJbmRleCA9IGluZGV4T2ZGaXJzdFVub3BlbkZvcm1hdHRpbmdFbGVtZW50
KCk7CisgICAgaWYgKCFmaXJzdFVub3BlbkVsZW1lbnRJbmRleCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgdW5zaWduZWQgdW5vcGVuRW50cnlJbmRleCA9IGZpcnN0VW5vcGVuRWxlbWVudEluZGV4
OwotICAgIEFTU0VSVCh1bm9wZW5FbnRyeUluZGV4IDwgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVu
dHMuc2l6ZSgpKTsKLSAgICBmb3IgKDsgdW5vcGVuRW50cnlJbmRleCA8IG1fYWN0aXZlRm9ybWF0
dGluZ0VsZW1lbnRzLnNpemUoKTsgKyt1bm9wZW5FbnRyeUluZGV4KSB7Ci0gICAgICAgIEhUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5JiB1bm9wZW5lZEVudHJ5ID0gbV9hY3RpdmVGb3Jt
YXR0aW5nRWxlbWVudHMuYXQodW5vcGVuRW50cnlJbmRleCk7Ci0gICAgICAgIFJlZlB0cjxIVE1M
U3RhY2tJdGVtPiByZWNvbnN0cnVjdGVkID0gY3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKHVu
b3BlbmVkRW50cnkuc3RhY2tJdGVtKCkpOwotICAgICAgICBhdHRhY2hMYXRlcigmY3VycmVudE5v
ZGUoKSwgJnJlY29uc3RydWN0ZWQtPm5vZGUoKSk7Ci0gICAgICAgIG1fb3BlbkVsZW1lbnRzLnB1
c2gocmVjb25zdHJ1Y3RlZCk7Ci0gICAgICAgIHVub3BlbmVkRW50cnkucmVwbGFjZUVsZW1lbnQo
cmVjb25zdHJ1Y3RlZC5yZWxlYXNlKCkpOworICAgIEFTU0VSVChmaXJzdFVub3BlbkVsZW1lbnRJ
bmRleC52YWx1ZSgpIDwgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIHVub3BlbkVudHJ5SW5kZXggPSBmaXJzdFVub3BlbkVsZW1lbnRJbmRleC52
YWx1ZSgpOyB1bm9wZW5FbnRyeUluZGV4IDwgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuc2l6
ZSgpOyArK3Vub3BlbkVudHJ5SW5kZXgpIHsKKyAgICAgICAgYXV0byYgdW5vcGVuZWRFbnRyeSA9
IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmF0KHVub3BlbkVudHJ5SW5kZXgpOworICAgICAg
ICBBU1NFUlQodW5vcGVuZWRFbnRyeS5zdGFja0l0ZW0oKSk7CisgICAgICAgIGF1dG8gcmVjb25z
dHJ1Y3RlZCA9IGNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbigqdW5vcGVuZWRFbnRyeS5zdGFj
a0l0ZW0oKSk7CisgICAgICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIHJlY29uc3RydWN0
ZWQtPm5vZGUoKSk7CisgICAgICAgIG1fb3BlbkVsZW1lbnRzLnB1c2gocmVjb25zdHJ1Y3RlZC5j
b3B5UmVmKCkpOworICAgICAgICB1bm9wZW5lZEVudHJ5LnJlcGxhY2VFbGVtZW50KFdURk1vdmUo
cmVjb25zdHJ1Y3RlZCkpOwogICAgIH0KIH0KIApAQCAtNzY1LDI0ICs3NTYsMTggQEAgdm9pZCBI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6Z2VuZXJhdGVJbXBsaWVkRW5kVGFncygpCiAgICAgICAgIG1f
b3BlbkVsZW1lbnRzLnBvcCgpOwogfQogCi1ib29sIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppblF1
aXJrc01vZGUoKQotewotICAgIHJldHVybiBtX2luUXVpcmtzTW9kZTsKLX0KLQogdm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6ZmluZEZvc3RlclNpdGUoSFRNTENvbnN0cnVjdGlvblNpdGVUYXNr
JiB0YXNrKQogewogICAgIC8vIFdoZW4gYSBub2RlIGlzIHRvIGJlIGZvc3RlciBwYXJlbnRlZCwg
dGhlIGxhc3QgdGVtcGxhdGUgZWxlbWVudCB3aXRoIG5vIHRhYmxlIGVsZW1lbnQgaXMgYmVsb3cg
aXQgaW4gdGhlIHN0YWNrIG9mIG9wZW4gZWxlbWVudHMgaXMgdGhlIGZvc3RlciBwYXJlbnQgZWxl
bWVudCAoTk9UIHRoZSB0ZW1wbGF0ZSdzIHBhcmVudCEpCi0gICAgSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZCogbGFzdFRlbXBsYXRlRWxlbWVudCA9IG1fb3BlbkVsZW1lbnRzLnRvcG1v
c3QodGVtcGxhdGVUYWcubG9jYWxOYW1lKCkpOworICAgIGF1dG8qIGxhc3RUZW1wbGF0ZUVsZW1l
bnQgPSBtX29wZW5FbGVtZW50cy50b3Btb3N0KHRlbXBsYXRlVGFnLmxvY2FsTmFtZSgpKTsKICAg
ICBpZiAobGFzdFRlbXBsYXRlRWxlbWVudCAmJiAhbV9vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3Bl
KHRhYmxlVGFnKSkgewogICAgICAgICB0YXNrLnBhcmVudCA9ICZsYXN0VGVtcGxhdGVFbGVtZW50
LT5lbGVtZW50KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkKiBsYXN0VGFibGVFbGVtZW50UmVjb3JkID0gbV9vcGVuRWxlbWVu
dHMudG9wbW9zdCh0YWJsZVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgaWYgKGxhc3RUYWJsZUVsZW1l
bnRSZWNvcmQpIHsKLSAgICAgICAgRWxlbWVudCYgbGFzdFRhYmxlRWxlbWVudCA9IGxhc3RUYWJs
ZUVsZW1lbnRSZWNvcmQtPmVsZW1lbnQoKTsKLSAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50
ID0gbGFzdFRhYmxlRWxlbWVudC5wYXJlbnROb2RlKCk7CisgICAgaWYgKGF1dG8qIGxhc3RUYWJs
ZUVsZW1lbnRSZWNvcmQgPSBtX29wZW5FbGVtZW50cy50b3Btb3N0KHRhYmxlVGFnLmxvY2FsTmFt
ZSgpKSkgeworICAgICAgICBhdXRvJiBsYXN0VGFibGVFbGVtZW50ID0gbGFzdFRhYmxlRWxlbWVu
dFJlY29yZC0+ZWxlbWVudCgpOworICAgICAgICBhdXRvKiBwYXJlbnQgPSBsYXN0VGFibGVFbGVt
ZW50LnBhcmVudE5vZGUoKTsKICAgICAgICAgLy8gV2hlbiBwYXJzaW5nIEhUTUwgZnJhZ21lbnRz
LCB3ZSBza2lwIHN0ZXAgNC4yICgiTGV0IHJvb3QgYmUgYSBuZXcgaHRtbCBlbGVtZW50IHdpdGgg
bm8gYXR0cmlidXRlcyIpIGZvciBlZmZpY2llbmN5LAogICAgICAgICAvLyBhbmQgaW5zdGVhZCB1
c2UgdGhlIERvY3VtZW50RnJhZ21lbnQgYXMgYSByb290IG5vZGUuIFNvIHdlIG11c3QgdHJlYXQg
dGhlIHJvb3Qgbm9kZSAoRG9jdW1lbnRGcmFnbWVudCkgYXMgaWYgaXQgaXMgYSBodG1sIGVsZW1l
bnQgaGVyZS4KICAgICAgICAgYm9vbCBwYXJlbnRDYW5CZUZvc3RlclBhcmVudCA9IHBhcmVudCAm
JiAocGFyZW50LT5pc0VsZW1lbnROb2RlKCkgfHwgKG1faXNQYXJzaW5nRnJhZ21lbnQgJiYgcGFy
ZW50ID09ICZtX29wZW5FbGVtZW50cy5yb290Tm9kZSgpKSk7CkBAIC04MDEsMTggKzc4NiwxNyBA
QCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9zdGVyU2l0ZShIVE1MQ29uc3RydWN0
aW9uU2l0ZVRhc2smIHRhc2spCiAKIGJvb2wgSFRNTENvbnN0cnVjdGlvblNpdGU6OnNob3VsZEZv
c3RlclBhcmVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmVkaXJlY3RBdHRhY2hUb0Zvc3Rl
clBhcmVudAotICAgICAgICAmJiBjYXVzZXNGb3N0ZXJQYXJlbnRpbmcoY3VycmVudFN0YWNrSXRl
bSgpKTsKKyAgICByZXR1cm4gbV9yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50ICYmIGNhdXNl
c0Zvc3RlclBhcmVudGluZyhjdXJyZW50U3RhY2tJdGVtKCkpOwogfQogCi12b2lkIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpmb3N0ZXJQYXJlbnQoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQordm9pZCBI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6Zm9zdGVyUGFyZW50KFJlZjxOb2RlPiYmIG5vZGUpCiB7CiAg
ICAgSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrIHRhc2soSFRNTENvbnN0cnVjdGlvblNpdGVUYXNr
OjpJbnNlcnQpOwogICAgIGZpbmRGb3N0ZXJTaXRlKHRhc2spOwotICAgIHRhc2suY2hpbGQgPSBu
b2RlOworICAgIHRhc2suY2hpbGQgPSBXVEZNb3ZlKG5vZGUpOwogICAgIEFTU0VSVCh0YXNrLnBh
cmVudCk7CiAKLSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7CisgICAgbV90YXNrUXVldWUu
YXBwZW5kKFdURk1vdmUodGFzaykpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAppbmRleCAyNmM4Mjk5MGI0YjAzYmVmMTQ1
MmE3ZjRhMTMzNjgyZTc1YTJjMGZiLi45NGYwZDc4MjAyOGUzNWFlYmMxMGE5NTc1OWIzN2JkNDEz
ZTM5OTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3Ry
dWN0aW9uU2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1
Y3Rpb25TaXRlLmgKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJIVE1MRWxlbWVudFN0YWNr
LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oIgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTkzLDMzICs5MywzMiBA
QCBwdWJsaWM6CiAgICAgSFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnRGcmFnbWVudCYsIFBh
cnNlckNvbnRlbnRQb2xpY3ksIHVuc2lnbmVkIG1heGltdW1ET01UcmVlRGVwdGgpOwogICAgIH5I
VE1MQ29uc3RydWN0aW9uU2l0ZSgpOwogCi0gICAgdm9pZCBkZXRhY2goKTsKICAgICB2b2lkIGV4
ZWN1dGVRdWV1ZWRUYXNrcygpOwogCiAgICAgdm9pZCBzZXREZWZhdWx0Q29tcGF0aWJpbGl0eU1v
ZGUoKTsKICAgICB2b2lkIGZpbmlzaGVkUGFyc2luZygpOwogCi0gICAgdm9pZCBpbnNlcnREb2N0
eXBlKEF0b21pY0hUTUxUb2tlbiopOwotICAgIHZvaWQgaW5zZXJ0Q29tbWVudChBdG9taWNIVE1M
VG9rZW4qKTsKLSAgICB2b2lkIGluc2VydENvbW1lbnRPbkRvY3VtZW50KEF0b21pY0hUTUxUb2tl
biopOwotICAgIHZvaWQgaW5zZXJ0Q29tbWVudE9uSFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxU
b2tlbiopOwotICAgIHZvaWQgaW5zZXJ0SFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7Cisg
ICAgdm9pZCBpbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0
Q29tbWVudChBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIGluc2VydENvbW1lbnRPbkRvY3Vt
ZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0Q29tbWVudE9uSFRNTEh0bWxF
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0SFRNTEVsZW1lbnQoQXRv
bWljSFRNTFRva2VuJik7CiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKLSAgICBKU0N1c3Rv
bUVsZW1lbnRJbnRlcmZhY2UqIGluc2VydEhUTUxFbGVtZW50T3JGaW5kQ3VzdG9tRWxlbWVudElu
dGVyZmFjZShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2Uq
IGluc2VydEhUTUxFbGVtZW50T3JGaW5kQ3VzdG9tRWxlbWVudEludGVyZmFjZShBdG9taWNIVE1M
VG9rZW4mKTsKICAgICB2b2lkIGluc2VydEN1c3RvbUVsZW1lbnQoUmVmPEVsZW1lbnQ+JiYsIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBWZWN0b3I8QXR0cmlidXRlPiYpOwogI2VuZGlm
Ci0gICAgdm9pZCBpbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiop
OwotICAgIHZvaWQgaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7Ci0g
ICAgdm9pZCBpbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7Ci0gICAgdm9p
ZCBpbnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7Ci0gICAgdm9pZCBpbnNl
cnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiwgYm9vbCBpc0RlbW90ZWQgPSBmYWxz
ZSk7Ci0gICAgdm9pZCBpbnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiopOworICAg
IHZvaWQgaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKKyAg
ICB2b2lkIGluc2VydEZvcm1hdHRpbmdFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZv
aWQgaW5zZXJ0SFRNTEhlYWRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5z
ZXJ0SFRNTEJvZHlFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0SFRN
TEZvcm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYsIGJvb2wgaXNEZW1vdGVkID0gZmFsc2UpOwor
ICAgIHZvaWQgaW5zZXJ0U2NyaXB0RWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKICAgICB2b2lk
IGluc2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYsIFdoaXRlc3BhY2VNb2RlID0gV2hpdGVzcGFj
ZVVua25vd24pOwotICAgIHZvaWQgaW5zZXJ0Rm9yZWlnbkVsZW1lbnQoQXRvbWljSFRNTFRva2Vu
KiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpOworICAgIHZvaWQgaW5zZXJ0Rm9y
ZWlnbkVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkkpOwogCi0gICAgdm9pZCBpbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChBdG9t
aWNIVE1MVG9rZW4qKTsKLSAgICB2b2lkIGluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoQXRv
bWljSFRNTFRva2VuKik7Ci0gICAgdm9pZCBpbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KEF0
b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhU
TUwoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5C
b2R5KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0lu
Qm9keShBdG9taWNIVE1MVG9rZW4mKTsKIAogICAgIHZvaWQgcmVwYXJlbnQoSFRNTEVsZW1lbnRT
dGFjazo6RWxlbWVudFJlY29yZCYgbmV3UGFyZW50LCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
UmVjb3JkJiBjaGlsZCk7CiAgICAgdm9pZCByZXBhcmVudChIVE1MRWxlbWVudFN0YWNrOjpFbGVt
ZW50UmVjb3JkJiBuZXdQYXJlbnQsIEhUTUxTdGFja0l0ZW0mIGNoaWxkKTsKQEAgLTEyOSwxOCAr
MTI4LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGluc2VydEFscmVhZHlQYXJzZWRDaGlsZChIVE1M
U3RhY2tJdGVtJiBuZXdQYXJlbnQsIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQmIGNo
aWxkKTsKICAgICB2b2lkIHRha2VBbGxDaGlsZHJlbihIVE1MU3RhY2tJdGVtJiBuZXdQYXJlbnQs
IEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQmIG9sZFBhcmVudCk7CiAKLSAgICBSZWY8
SFRNTFN0YWNrSXRlbT4gY3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKEhUTUxTdGFja0l0ZW0q
KTsKKyAgICBSZWY8SFRNTFN0YWNrSXRlbT4gY3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKEhU
TUxTdGFja0l0ZW0mKTsKIAogICAgIGJvb2wgc2hvdWxkRm9zdGVyUGFyZW50KCkgY29uc3Q7Ci0g
ICAgdm9pZCBmb3N0ZXJQYXJlbnQoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCBmb3N0ZXJQ
YXJlbnQoUmVmPE5vZGU+JiYpOwogCi0gICAgYm9vbCBpbmRleE9mRmlyc3RVbm9wZW5Gb3JtYXR0
aW5nRWxlbWVudCh1bnNpZ25lZCYgZmlyc3RVbm9wZW5FbGVtZW50SW5kZXgpIGNvbnN0OworICAg
IE9wdGlvbmFsPHVuc2lnbmVkPiBpbmRleE9mRmlyc3RVbm9wZW5Gb3JtYXR0aW5nRWxlbWVudCgp
IGNvbnN0OwogICAgIHZvaWQgcmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMo
KTsKIAogICAgIHZvaWQgZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpOwogICAgIHZvaWQgZ2VuZXJh
dGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24oY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
KTsKIAotICAgIGJvb2wgaW5RdWlya3NNb2RlKCk7CisgICAgYm9vbCBpblF1aXJrc01vZGUoKSB7
IHJldHVybiBtX2luUXVpcmtzTW9kZTsgfQogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIW1fb3BlbkVsZW1lbnRzLnN0YWNrRGVwdGgoKTsgfQogICAgIEVsZW1lbnQmIGN1cnJl
bnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9vcGVuRWxlbWVudHMudG9wKCk7IH0KQEAgLTE1
NywzMiArMTU2LDIzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Rm9ybShIVE1MRm9ybUVsZW1l
bnQqKTsKICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0oKSBjb25zdCB7IHJldHVybiBtX2Zvcm0u
Z2V0KCk7IH0KLSAgICBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gdGFrZUZvcm0oKTsKKyAg
ICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiB0YWtlRm9ybSgpOwogCiAgICAgUGFyc2VyQ29udGVu
dFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KCkgeyByZXR1cm4gbV9wYXJzZXJDb250ZW50UG9s
aWN5OyB9CiAKICNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCi0gICAgYm9v
bCBpc1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkKCkgeyByZXR1cm4gbV9kb2N1bWVudC0+
aXNUZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZCgpOyB9CisgICAgYm9vbCBpc1RlbGVwaG9u
ZU51bWJlclBhcnNpbmdFbmFibGVkKCkgeyByZXR1cm4gbV9kb2N1bWVudC5pc1RlbGVwaG9uZU51
bWJlclBhcnNpbmdFbmFibGVkKCk7IH0KICNlbmRpZgogCiAgICAgY2xhc3MgUmVkaXJlY3RUb0Zv
c3RlclBhcmVudEd1YXJkIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVkaXJlY3RU
b0Zvc3RlclBhcmVudEd1YXJkKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlZGlyZWN0VG9Gb3N0
ZXJQYXJlbnRHdWFyZChIVE1MQ29uc3RydWN0aW9uU2l0ZSYgdHJlZSkKLSAgICAgICAgICAgIDog
bV90cmVlKHRyZWUpCi0gICAgICAgICAgICAsIG1fd2FzUmVkaXJlY3RpbmdCZWZvcmUodHJlZS5t
X3JlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
dHJlZS5tX3JlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQgPSB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgflJlZGlyZWN0VG9Gb3N0ZXJQYXJlbnRHdWFyZCgpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1fdHJlZS5tX3JlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQgPSBtX3dhc1JlZGly
ZWN0aW5nQmVmb3JlOwotICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0IFJlZGlyZWN0VG9Gb3N0
ZXJQYXJlbnRHdWFyZChIVE1MQ29uc3RydWN0aW9uU2l0ZSYgdHJlZSkKKyAgICAgICAgICAgIDog
bV9yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50Q2hhbmdlKHRyZWUubV9yZWRpcmVjdEF0dGFj
aFRvRm9zdGVyUGFyZW50LCB0cnVlKQorICAgICAgICB7IH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlJiBtX3RyZWU7Ci0gICAgICAgIGJvb2wgbV93YXNSZWRp
cmVjdGluZ0JlZm9yZTsKKyAgICAgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IG1fcmVkaXJlY3RB
dHRhY2hUb0Zvc3RlclBhcmVudENoYW5nZTsKICAgICB9OwogCiAgICAgc3RhdGljIGJvb2wgaXNG
b3JtYXR0aW5nVGFnKGNvbnN0IEF0b21pY1N0cmluZyYpOwpAQCAtMTk1LDIzICsxODUsMjMgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHNldENvbXBhdGliaWxpdHlNb2RlKERvY3VtZW50Q29tcGF0aWJp
bGl0eU1vZGUpOwogICAgIHZvaWQgc2V0Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9jdHlwZShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmluZyYgc3lz
dGVtSWQpOwogCi0gICAgdm9pZCBhdHRhY2hMYXRlcihDb250YWluZXJOb2RlKiBwYXJlbnQsIFBh
c3NSZWZQdHI8Tm9kZT4gY2hpbGQsIGJvb2wgc2VsZkNsb3NpbmcgPSBmYWxzZSk7CisgICAgdm9p
ZCBhdHRhY2hMYXRlcihDb250YWluZXJOb2RlJiBwYXJlbnQsIFJlZjxOb2RlPiYmIGNoaWxkLCBi
b29sIHNlbGZDbG9zaW5nID0gZmFsc2UpOwogCiAgICAgdm9pZCBmaW5kRm9zdGVyU2l0ZShIVE1M
Q29uc3RydWN0aW9uU2l0ZVRhc2smKTsKIAotICAgIFJlZlB0cjxFbGVtZW50PiBjcmVhdGVIVE1M
RWxlbWVudE9yRmluZEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoQXRvbWljSFRNTFRva2VuKiwgSlND
dXN0b21FbGVtZW50SW50ZXJmYWNlKiopOwotICAgIFJlZjxFbGVtZW50PiBjcmVhdGVIVE1MRWxl
bWVudChBdG9taWNIVE1MVG9rZW4qKTsKLSAgICBSZWY8RWxlbWVudD4gY3JlYXRlRWxlbWVudChB
dG9taWNIVE1MVG9rZW4qLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7CisgICAg
UmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUhUTUxFbGVtZW50T3JGaW5kQ3VzdG9tRWxlbWVudEludGVy
ZmFjZShBdG9taWNIVE1MVG9rZW4mLCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UqKik7CisgICAg
UmVmPEVsZW1lbnQ+IGNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIFJl
ZjxFbGVtZW50PiBjcmVhdGVFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZXNwYWNlVVJJKTsKIAotICAgIHZvaWQgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2Vu
SW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuKiwgRWxlbWVudCopOworICAgIHZvaWQgbWVyZ2VB
dHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgRWxlbWVudCYp
OwogICAgIHZvaWQgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5lZWRlZCgpOwog
Ci0gICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAg
ICAgCiAgICAgLy8gVGhpcyBpcyB0aGUgcm9vdCBDb250YWluZXJOb2RlIHRvIHdoaWNoIHRoZSBw
YXJzZXIgYXR0YWNoZXMgYWxsIG5ld2x5CiAgICAgLy8gY29uc3RydWN0ZWQgbm9kZXMuIEl0IHBv
aW50cyB0byBhIERvY3VtZW50RnJhZ21lbnQgd2hlbiBwYXJzaW5nIGZyYWdtZW50cwogICAgIC8v
IGFuZCBhIERvY3VtZW50IGluIGFsbCBvdGhlciBjYXNlcy4KLSAgICBDb250YWluZXJOb2RlKiBt
X2F0dGFjaG1lbnRSb290OworICAgIENvbnRhaW5lck5vZGUmIG1fYXR0YWNobWVudFJvb3Q7CiAg
ICAgCiAgICAgUmVmUHRyPEhUTUxTdGFja0l0ZW0+IG1faGVhZDsKICAgICBSZWZQdHI8SFRNTEZv
cm1FbGVtZW50PiBtX2Zvcm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRWxlbWVudFN0YWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxF
bGVtZW50U3RhY2suY3BwCmluZGV4IGU4ZTRjYTI4YTI0N2YxOTYwYWRjMTk4M2U2YWJhYzc5OGNl
MmJmN2MuLjcwNTcwM2VmYzkxMzgzYjEwY2ViM2E1NGFmOTgzM2I0ZTFiNmU0MDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCkBAIC00MCw4
ICs0MCw3IEBAIG5hbWVzcGFjZSB7CiAKIGlubGluZSBib29sIGlzUm9vdE5vZGUoSFRNTFN0YWNr
SXRlbSYgaXRlbSkKIHsKLSAgICByZXR1cm4gaXRlbS5pc0RvY3VtZW50RnJhZ21lbnQoKQotICAg
ICAgICB8fCBpdGVtLmhhc1RhZ05hbWUoaHRtbFRhZyk7CisgICAgcmV0dXJuIGl0ZW0uaXNEb2N1
bWVudEZyYWdtZW50KCkgfHwgaXRlbS5oYXNUYWdOYW1lKGh0bWxUYWcpOwogfQogCiBpbmxpbmUg
Ym9vbCBpc1Njb3BlTWFya2VyKEhUTUxTdGFja0l0ZW0mIGl0ZW0pCkBAIC0xMTYsNDIgKzExNSwz
MiBAQCBpbmxpbmUgYm9vbCBpc1NlbGVjdFNjb3BlTWFya2VyKEhUTUxTdGFja0l0ZW0mIGl0ZW0p
CiAKIH0KIAotSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6RWxlbWVudFJlY29yZChQ
YXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGl0ZW0sIHN0ZDo6dW5pcXVlX3B0cjxFbGVtZW50UmVj
b3JkPiBuZXh0KQotICAgIDogbV9pdGVtKGl0ZW0pCitIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
UmVjb3JkOjpFbGVtZW50UmVjb3JkKFJlZjxIVE1MU3RhY2tJdGVtPiYmIGl0ZW0sIHN0ZDo6dW5p
cXVlX3B0cjxFbGVtZW50UmVjb3JkPiBuZXh0KQorICAgIDogbV9pdGVtKFdURk1vdmUoaXRlbSkp
CiAgICAgLCBtX25leHQoV1RGTW92ZShuZXh0KSkKIHsKLSAgICBBU1NFUlQobV9pdGVtKTsKIH0K
IAogSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6fkVsZW1lbnRSZWNvcmQoKQogewog
fQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnJlcGxhY2VFbGVtZW50
KFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6
RWxlbWVudFJlY29yZDo6cmVwbGFjZUVsZW1lbnQoUmVmPEhUTUxTdGFja0l0ZW0+JiYgaXRlbSkK
IHsKLSAgICBBU1NFUlQoaXRlbSk7Ci0gICAgQVNTRVJUKCFtX2l0ZW0gfHwgbV9pdGVtLT5pc0Vs
ZW1lbnQoKSk7CisgICAgQVNTRVJUKG1faXRlbS0+aXNFbGVtZW50KCkpOwogICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyBjYWxsIGZpbmlzaFBhcnNpbmdDaGlsZHJlbj8KLSAgICBtX2l0ZW0gPSBp
dGVtOworICAgIG1faXRlbSA9IFdURk1vdmUoaXRlbSk7CiB9CiAKLWJvb2wgSFRNTEVsZW1lbnRT
dGFjazo6RWxlbWVudFJlY29yZDo6aXNBYm92ZShFbGVtZW50UmVjb3JkKiBvdGhlcikgY29uc3QK
K2Jvb2wgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6aXNBYm92ZShFbGVtZW50UmVj
b3JkJiBvdGhlcikgY29uc3QKIHsKLSAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIGJlbG93ID0gbmV4
dCgpOyBiZWxvdzsgYmVsb3cgPSBiZWxvdy0+bmV4dCgpKSB7Ci0gICAgICAgIGlmIChiZWxvdyA9
PSBvdGhlcikKKyAgICBmb3IgKGF1dG8qIGJlbG93ID0gbmV4dCgpOyBiZWxvdzsgYmVsb3cgPSBi
ZWxvdy0+bmV4dCgpKSB7CisgICAgICAgIGlmIChiZWxvdyA9PSAmb3RoZXIpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1IVE1MRWxlbWVu
dFN0YWNrOjpIVE1MRWxlbWVudFN0YWNrKCkKLSAgICA6IG1fcm9vdE5vZGUoMCkKLSAgICAsIG1f
aGVhZEVsZW1lbnQoMCkKLSAgICAsIG1fYm9keUVsZW1lbnQoMCkKLSAgICAsIG1fc3RhY2tEZXB0
aCgwKQotewotfQotCiBIVE1MRWxlbWVudFN0YWNrOjp+SFRNTEVsZW1lbnRTdGFjaygpCiB7CiB9
CkBAIC0xODksOSArMTc4LDkgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BIVE1MQm9keUVs
ZW1lbnQoKQogCiB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnBvcEFsbCgpCiB7Ci0gICAgbV9yb290
Tm9kZSA9IDA7Ci0gICAgbV9oZWFkRWxlbWVudCA9IDA7Ci0gICAgbV9ib2R5RWxlbWVudCA9IDA7
CisgICAgbV9yb290Tm9kZSA9IG51bGxwdHI7CisgICAgbV9oZWFkRWxlbWVudCA9IG51bGxwdHI7
CisgICAgbV9ib2R5RWxlbWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGFja0RlcHRoID0gMDsKICAg
ICB3aGlsZSAobV90b3ApIHsKICAgICAgICAgdG9wTm9kZSgpLmZpbmlzaFBhcnNpbmdDaGlsZHJl
bigpOwpAQCAtMjI2LDEzICsyMTUsMTMgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BVbnRp
bE51bWJlcmVkSGVhZGVyRWxlbWVudFBvcHBlZCgpCiAgICAgcG9wKCk7CiB9CiAKLXZvaWQgSFRN
TEVsZW1lbnRTdGFjazo6cG9wVW50aWwoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1l
bnRTdGFjazo6cG9wVW50aWwoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICB3aGlsZSAoJnRvcCgp
ICE9IGVsZW1lbnQpCisgICAgd2hpbGUgKCZ0b3AoKSAhPSAmZWxlbWVudCkKICAgICAgICAgcG9w
KCk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wVW50aWxQb3BwZWQoRWxlbWVudCog
ZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wVW50aWxQb3BwZWQoRWxlbWVudCYg
ZWxlbWVudCkKIHsKICAgICBwb3BVbnRpbChlbGVtZW50KTsKICAgICBwb3AoKTsKQEAgLTI5Miw3
OCArMjgxLDc2IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wVW50aWxGb3JlaWduQ29udGVu
dFNjb3BlTWFya2VyKCkKICAgICAgICAgcG9wKCk7CiB9CiAgICAgCi12b2lkIEhUTUxFbGVtZW50
U3RhY2s6OnB1c2hSb290Tm9kZShQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IHJvb3RJdGVtKQor
dm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoUm9vdE5vZGUoUmVmPEhUTUxTdGFja0l0ZW0+JiYg
cm9vdEl0ZW0pCiB7CiAgICAgQVNTRVJUKHJvb3RJdGVtLT5pc0RvY3VtZW50RnJhZ21lbnQoKSk7
Ci0gICAgcHVzaFJvb3ROb2RlQ29tbW9uKHJvb3RJdGVtKTsKKyAgICBwdXNoUm9vdE5vZGVDb21t
b24oV1RGTW92ZShyb290SXRlbSkpOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hI
VE1MSHRtbEVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtKQordm9pZCBIVE1M
RWxlbWVudFN0YWNrOjpwdXNoSFRNTEh0bWxFbGVtZW50KFJlZjxIVE1MU3RhY2tJdGVtPiYmIGl0
ZW0pCiB7CiAgICAgQVNTRVJUKGl0ZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7
Ci0gICAgcHVzaFJvb3ROb2RlQ29tbW9uKGl0ZW0pOworICAgIHB1c2hSb290Tm9kZUNvbW1vbihX
VEZNb3ZlKGl0ZW0pKTsKIH0KICAgICAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaFJvb3RO
b2RlQ29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gcm9vdEl0ZW0pCit2b2lkIEhUTUxF
bGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZUNvbW1vbihSZWY8SFRNTFN0YWNrSXRlbT4mJiByb290
SXRlbSkKIHsKICAgICBBU1NFUlQoIW1fdG9wKTsKICAgICBBU1NFUlQoIW1fcm9vdE5vZGUpOwog
ICAgIG1fcm9vdE5vZGUgPSAmcm9vdEl0ZW0tPm5vZGUoKTsKLSAgICBwdXNoQ29tbW9uKHJvb3RJ
dGVtKTsKKyAgICBwdXNoQ29tbW9uKFdURk1vdmUocm9vdEl0ZW0pKTsKIH0KIAotdm9pZCBIVE1M
RWxlbWVudFN0YWNrOjpwdXNoSFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRl
bT4gaXRlbSkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaEhUTUxIZWFkRWxlbWVudChSZWY8
SFRNTFN0YWNrSXRlbT4mJiBpdGVtKQogewogICAgIEFTU0VSVChpdGVtLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aGVhZFRhZykpOwogICAgIEFTU0VSVCghbV9oZWFkRWxlbWVudCk7CiAgICAgbV9o
ZWFkRWxlbWVudCA9ICZpdGVtLT5lbGVtZW50KCk7Ci0gICAgcHVzaENvbW1vbihpdGVtKTsKKyAg
ICBwdXNoQ29tbW9uKFdURk1vdmUoaXRlbSkpOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6
OnB1c2hIVE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtKQordm9p
ZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEJvZHlFbGVtZW50KFJlZjxIVE1MU3RhY2tJdGVt
PiYmIGl0ZW0pCiB7CiAgICAgQVNTRVJUKGl0ZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5
VGFnKSk7CiAgICAgQVNTRVJUKCFtX2JvZHlFbGVtZW50KTsKICAgICBtX2JvZHlFbGVtZW50ID0g
Jml0ZW0tPmVsZW1lbnQoKTsKLSAgICBwdXNoQ29tbW9uKGl0ZW0pOworICAgIHB1c2hDb21tb24o
V1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaChQYXNzUmVm
UHRyPEhUTUxTdGFja0l0ZW0+IGl0ZW0pCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2goUmVm
PEhUTUxTdGFja0l0ZW0+JiYgaXRlbSkKIHsKICAgICBBU1NFUlQoIWl0ZW0tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpodG1sVGFnKSk7CiAgICAgQVNTRVJUKCFpdGVtLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aGVhZFRhZykpOwogICAgIEFTU0VSVCghaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJvZHlUYWcpKTsKICAgICBBU1NFUlQobV9yb290Tm9kZSk7Ci0gICAgcHVzaENvbW1vbihpdGVt
KTsKKyAgICBwdXNoQ29tbW9uKFdURk1vdmUoaXRlbSkpOwogfQogCi12b2lkIEhUTUxFbGVtZW50
U3RhY2s6Omluc2VydEFib3ZlKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSwgRWxlbWVu
dFJlY29yZCogcmVjb3JkQmVsb3cpCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3Zl
KFJlZjxIVE1MU3RhY2tJdGVtPiYmIGl0ZW0sIEVsZW1lbnRSZWNvcmQmIHJlY29yZEJlbG93KQog
ewotICAgIEFTU0VSVChpdGVtKTsKLSAgICBBU1NFUlQocmVjb3JkQmVsb3cpOwogICAgIEFTU0VS
VChtX3RvcCk7CiAgICAgQVNTRVJUKCFpdGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRh
ZykpOwogICAgIEFTU0VSVCghaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKTsK
ICAgICBBU1NFUlQoIWl0ZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5VGFnKSk7CiAgICAg
QVNTRVJUKG1fcm9vdE5vZGUpOwotICAgIGlmIChyZWNvcmRCZWxvdyA9PSBtX3RvcC5nZXQoKSkg
ewotICAgICAgICBwdXNoKGl0ZW0pOworICAgIGlmICgmcmVjb3JkQmVsb3cgPT0gbV90b3AuZ2V0
KCkpIHsKKyAgICAgICAgcHVzaChpdGVtLmNvcHlSZWYoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIHJlY29yZEFib3ZlID0gbV90b3AuZ2V0KCk7
IHJlY29yZEFib3ZlOyByZWNvcmRBYm92ZSA9IHJlY29yZEFib3ZlLT5uZXh0KCkpIHsKLSAgICAg
ICAgaWYgKHJlY29yZEFib3ZlLT5uZXh0KCkgIT0gcmVjb3JkQmVsb3cpCisgICAgZm9yIChhdXRv
KiByZWNvcmRBYm92ZSA9IG1fdG9wLmdldCgpOyByZWNvcmRBYm92ZTsgcmVjb3JkQWJvdmUgPSBy
ZWNvcmRBYm92ZS0+bmV4dCgpKSB7CisgICAgICAgIGlmIChyZWNvcmRBYm92ZS0+bmV4dCgpICE9
ICZyZWNvcmRCZWxvdykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG1fc3RhY2tE
ZXB0aCsrOwotICAgICAgICByZWNvcmRBYm92ZS0+c2V0TmV4dChzdGQ6Om1ha2VfdW5pcXVlPEVs
ZW1lbnRSZWNvcmQ+KGl0ZW0sIHJlY29yZEFib3ZlLT5yZWxlYXNlTmV4dCgpKSk7CisgICAgICAg
ICsrbV9zdGFja0RlcHRoOworICAgICAgICByZWNvcmRBYm92ZS0+c2V0TmV4dChzdGQ6Om1ha2Vf
dW5pcXVlPEVsZW1lbnRSZWNvcmQ+KFdURk1vdmUoaXRlbSksIHJlY29yZEFib3ZlLT5yZWxlYXNl
TmV4dCgpKSk7CiAgICAgICAgIHJlY29yZEFib3ZlLT5uZXh0KCktPmVsZW1lbnQoKS5iZWdpblBh
cnNpbmdDaGlsZHJlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi1IVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkJiBIVE1MRWxl
bWVudFN0YWNrOjp0b3BSZWNvcmQoKSBjb25zdAorYXV0byBIVE1MRWxlbWVudFN0YWNrOjp0b3BS
ZWNvcmQoKSBjb25zdCAtPiBFbGVtZW50UmVjb3JkJgogewogICAgIEFTU0VSVChtX3RvcCk7CiAg
ICAgcmV0dXJuICptX3RvcDsKQEAgLTM3OSwxMCArMzY2LDEwIEBAIEhUTUxTdGFja0l0ZW0qIEhU
TUxFbGVtZW50U3RhY2s6Om9uZUJlbG93VG9wKCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVIVE1MSGVhZEVsZW1lbnQoRWxlbWVu
dCogZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlSFRNTEhlYWRFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKG1faGVhZEVsZW1lbnQgPT0gZWxlbWVu
dCk7Ci0gICAgaWYgKCZtX3RvcC0+ZWxlbWVudCgpID09IGVsZW1lbnQpIHsKKyAgICBBU1NFUlQo
bV9oZWFkRWxlbWVudCA9PSAmZWxlbWVudCk7CisgICAgaWYgKCZtX3RvcC0+ZWxlbWVudCgpID09
ICZlbGVtZW50KSB7CiAgICAgICAgIHBvcEhUTUxIZWFkRWxlbWVudCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMzkwLDM1ICszNzcsMzUgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpy
ZW1vdmVIVE1MSGVhZEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKICAgICByZW1vdmVOb25Ub3BD
b21tb24oZWxlbWVudCk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlKEVsZW1l
bnQqIGVsZW1lbnQpCit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZShFbGVtZW50JiBlbGVt
ZW50KQogewotICAgIEFTU0VSVCghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRU
YWcpKTsKLSAgICBpZiAoJm1fdG9wLT5lbGVtZW50KCkgPT0gZWxlbWVudCkgeworICAgIEFTU0VS
VCghZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpOworICAgIGlmICgmbV90
b3AtPmVsZW1lbnQoKSA9PSAmZWxlbWVudCkgewogICAgICAgICBwb3AoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICByZW1vdmVOb25Ub3BDb21tb24oZWxlbWVudCk7CiB9CiAKLUhUTUxF
bGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIEhUTUxFbGVtZW50U3RhY2s6OmZpbmQoRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKK2F1dG8gSFRNTEVsZW1lbnRTdGFjazo6ZmluZChFbGVtZW50JiBl
bGVtZW50KSBjb25zdCAtPiBFbGVtZW50UmVjb3JkKgogewotICAgIGZvciAoRWxlbWVudFJlY29y
ZCogcmVjb3JkID0gbV90b3AuZ2V0KCk7IHJlY29yZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkp
IHsKLSAgICAgICAgaWYgKCZyZWNvcmQtPm5vZGUoKSA9PSBlbGVtZW50KQorICAgIGZvciAoYXV0
byogcmVjb3JkID0gbV90b3AuZ2V0KCk7IHJlY29yZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkp
IHsKKyAgICAgICAgaWYgKCZyZWNvcmQtPm5vZGUoKSA9PSAmZWxlbWVudCkKICAgICAgICAgICAg
IHJldHVybiByZWNvcmQ7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1IVE1MRWxl
bWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBIVE1MRWxlbWVudFN0YWNrOjp0b3Btb3N0KGNvbnN0
IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3QKK2F1dG8gSFRNTEVsZW1lbnRTdGFjazo6dG9w
bW9zdChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpIGNvbnN0IC0+IEVsZW1lbnRSZWNvcmQq
CiB7Ci0gICAgZm9yIChFbGVtZW50UmVjb3JkKiByZWNvcmQgPSBtX3RvcC5nZXQoKTsgcmVjb3Jk
OyByZWNvcmQgPSByZWNvcmQtPm5leHQoKSkgeworICAgIGZvciAoYXV0byogcmVjb3JkID0gbV90
b3AuZ2V0KCk7IHJlY29yZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkpIHsKICAgICAgICAgaWYg
KHJlY29yZC0+c3RhY2tJdGVtKCkubWF0Y2hlc0hUTUxUYWcodGFnTmFtZSkpCiAgICAgICAgICAg
ICByZXR1cm4gcmVjb3JkOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBI
VE1MRWxlbWVudFN0YWNrOjpjb250YWlucyhFbGVtZW50KiBlbGVtZW50KSBjb25zdAorYm9vbCBI
VE1MRWxlbWVudFN0YWNrOjpjb250YWlucyhFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAg
IHJldHVybiAhIWZpbmQoZWxlbWVudCk7CiB9CkBAIC00MzEsNyArNDE4LDcgQEAgYm9vbCBIVE1M
RWxlbWVudFN0YWNrOjpjb250YWlucyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpIGNvbnN0
CiB0ZW1wbGF0ZSA8Ym9vbCBpc01hcmtlcihIVE1MU3RhY2tJdGVtJik+IGJvb2wgaW5TY29wZUNv
bW1vbihIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiB0b3AsIGNvbnN0IEF0b21pY1N0
cmluZyYgdGFyZ2V0VGFnKQogewogICAgIGZvciAoYXV0byogcmVjb3JkID0gdG9wOyByZWNvcmQ7
IHJlY29yZCA9IHJlY29yZC0+bmV4dCgpKSB7Ci0gICAgICAgIEhUTUxTdGFja0l0ZW0mIGl0ZW0g
PSByZWNvcmQtPnN0YWNrSXRlbSgpOworICAgICAgICBhdXRvJiBpdGVtID0gcmVjb3JkLT5zdGFj
a0l0ZW0oKTsKICAgICAgICAgaWYgKGl0ZW0ubWF0Y2hlc0hUTUxUYWcodGFyZ2V0VGFnKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoaXNNYXJrZXIoaXRlbSkpCkBAIC00
NDMsOCArNDMwLDggQEAgdGVtcGxhdGUgPGJvb2wgaXNNYXJrZXIoSFRNTFN0YWNrSXRlbSYpPiBi
b29sIGluU2NvcGVDb21tb24oSFRNTEVsZW1lbnRTdGFjazo6RWwKIAogYm9vbCBIVE1MRWxlbWVu
dFN0YWNrOjpoYXNOdW1iZXJlZEhlYWRlckVsZW1lbnRJblNjb3BlKCkgY29uc3QKIHsKLSAgICBm
b3IgKEVsZW1lbnRSZWNvcmQqIHJlY29yZCA9IG1fdG9wLmdldCgpOyByZWNvcmQ7IHJlY29yZCA9
IHJlY29yZC0+bmV4dCgpKSB7Ci0gICAgICAgIEhUTUxTdGFja0l0ZW0mIGl0ZW0gPSByZWNvcmQt
PnN0YWNrSXRlbSgpOworICAgIGZvciAoYXV0byogcmVjb3JkID0gbV90b3AuZ2V0KCk7IHJlY29y
ZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkpIHsKKyAgICAgICAgYXV0byYgaXRlbSA9IHJlY29y
ZC0+c3RhY2tJdGVtKCk7CiAgICAgICAgIGlmIChpc051bWJlcmVkSGVhZGVyRWxlbWVudChpdGVt
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoaXNTY29wZU1hcmtlcihp
dGVtKSkKQEAgLTQ1NCwxMSArNDQxLDExIEBAIGJvb2wgSFRNTEVsZW1lbnRTdGFjazo6aGFzTnVt
YmVyZWRIZWFkZXJFbGVtZW50SW5TY29wZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEhUTUxFbGVtZW50U3RhY2s6OmluU2NvcGUoRWxlbWVudCogdGFyZ2V0RWxlbWVudCkg
Y29uc3QKK2Jvb2wgSFRNTEVsZW1lbnRTdGFjazo6aW5TY29wZShFbGVtZW50JiB0YXJnZXRFbGVt
ZW50KSBjb25zdAogewotICAgIGZvciAoRWxlbWVudFJlY29yZCogcmVjb3JkID0gbV90b3AuZ2V0
KCk7IHJlY29yZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkpIHsKLSAgICAgICAgSFRNTFN0YWNr
SXRlbSYgaXRlbSA9IHJlY29yZC0+c3RhY2tJdGVtKCk7Ci0gICAgICAgIGlmICgmaXRlbS5ub2Rl
KCkgPT0gdGFyZ2V0RWxlbWVudCkKKyAgICBmb3IgKGF1dG8qIHJlY29yZCA9IG1fdG9wLmdldCgp
OyByZWNvcmQ7IHJlY29yZCA9IHJlY29yZC0+bmV4dCgpKSB7CisgICAgICAgIGF1dG8mIGl0ZW0g
PSByZWNvcmQtPnN0YWNrSXRlbSgpOworICAgICAgICBpZiAoJml0ZW0ubm9kZSgpID09ICZ0YXJn
ZXRFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChpc1Njb3Bl
TWFya2VyKGl0ZW0pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ1LDEyICs1MzIs
MTIgQEAgQ29udGFpbmVyTm9kZSYgSFRNTEVsZW1lbnRTdGFjazo6cm9vdE5vZGUoKSBjb25zdAog
ICAgIHJldHVybiAqbV9yb290Tm9kZTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNo
Q29tbW9uKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSkKK3ZvaWQgSFRNTEVsZW1lbnRT
dGFjazo6cHVzaENvbW1vbihSZWY8SFRNTFN0YWNrSXRlbT4mJiBpdGVtKQogewogICAgIEFTU0VS
VChtX3Jvb3ROb2RlKTsKIAotICAgIG1fc3RhY2tEZXB0aCsrOwotICAgIG1fdG9wID0gc3RkOjpt
YWtlX3VuaXF1ZTxFbGVtZW50UmVjb3JkPihpdGVtLCBXVEZNb3ZlKG1fdG9wKSk7CisgICAgKytt
X3N0YWNrRGVwdGg7CisgICAgbV90b3AgPSBzdGQ6Om1ha2VfdW5pcXVlPEVsZW1lbnRSZWNvcmQ+
KFdURk1vdmUoaXRlbSksIFdURk1vdmUobV90b3ApKTsKIH0KIAogdm9pZCBIVE1MRWxlbWVudFN0
YWNrOjpwb3BDb21tb24oKQpAQCAtNTYyLDMyICs1NDksMzIgQEAgdm9pZCBIVE1MRWxlbWVudFN0
YWNrOjpwb3BDb21tb24oKQogICAgIHRvcCgpLmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwogICAg
IG1fdG9wID0gbV90b3AtPnJlbGVhc2VOZXh0KCk7CiAKLSAgICBtX3N0YWNrRGVwdGgtLTsKKyAg
ICAtLW1fc3RhY2tEZXB0aDsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVOb25U
b3BDb21tb24oRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3Zl
Tm9uVG9wQ29tbW9uKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykpOwotICAgIEFTU0VSVCghZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKLSAgICBBU1NFUlQoJnRvcCgpICE9IGVsZW1l
bnQpOwotICAgIGZvciAoRWxlbWVudFJlY29yZCogcmVjb3JkID0gbV90b3AuZ2V0KCk7IHJlY29y
ZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCZyZWNvcmQtPm5leHQo
KS0+ZWxlbWVudCgpID09IGVsZW1lbnQpIHsKKyAgICBBU1NFUlQoIWVsZW1lbnQuaGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKKyAgICBBU1NFUlQoIWVsZW1lbnQuaGFzVGFnTmFtZShI
VE1MTmFtZXM6OmJvZHlUYWcpKTsKKyAgICBBU1NFUlQoJnRvcCgpICE9ICZlbGVtZW50KTsKKyAg
ICBmb3IgKGF1dG8qIHJlY29yZCA9IG1fdG9wLmdldCgpOyByZWNvcmQ7IHJlY29yZCA9IHJlY29y
ZC0+bmV4dCgpKSB7CisgICAgICAgIGlmICgmcmVjb3JkLT5uZXh0KCktPmVsZW1lbnQoKSA9PSAm
ZWxlbWVudCkgewogICAgICAgICAgICAgLy8gRklYTUU6IElzIGl0IE9LIHRvIGNhbGwgZmluaXNo
UGFyc2luZ0NoaWxkcmVuKCkKICAgICAgICAgICAgIC8vIHdoZW4gdGhlIGNoaWxkcmVuIGFyZW4n
dCBhY3R1YWxseSBmaW5pc2hlZD8KLSAgICAgICAgICAgIGVsZW1lbnQtPmZpbmlzaFBhcnNpbmdD
aGlsZHJlbigpOworICAgICAgICAgICAgZWxlbWVudC5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsK
ICAgICAgICAgICAgIHJlY29yZC0+c2V0TmV4dChyZWNvcmQtPm5leHQoKS0+cmVsZWFzZU5leHQo
KSk7Ci0gICAgICAgICAgICBtX3N0YWNrRGVwdGgtLTsKKyAgICAgICAgICAgIC0tbV9zdGFja0Rl
cHRoOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi1IVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBIVE1M
RWxlbWVudFN0YWNrOjpmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoRWxlbWVudCog
Zm9ybWF0dGluZ0VsZW1lbnQpIGNvbnN0CithdXRvIEhUTUxFbGVtZW50U3RhY2s6OmZ1cnRoZXN0
QmxvY2tGb3JGb3JtYXR0aW5nRWxlbWVudChFbGVtZW50JiBmb3JtYXR0aW5nRWxlbWVudCkgY29u
c3QgLT4gRWxlbWVudFJlY29yZCoKIHsKICAgICBFbGVtZW50UmVjb3JkKiBmdXJ0aGVzdEJsb2Nr
ID0gbnVsbHB0cjsKLSAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIHJlY29yZCA9IG1fdG9wLmdldCgp
OyByZWNvcmQ7IHJlY29yZCA9IHJlY29yZC0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICgmcmVjb3Jk
LT5lbGVtZW50KCkgPT0gZm9ybWF0dGluZ0VsZW1lbnQpCisgICAgZm9yIChhdXRvKiByZWNvcmQg
PSBtX3RvcC5nZXQoKTsgcmVjb3JkOyByZWNvcmQgPSByZWNvcmQtPm5leHQoKSkgeworICAgICAg
ICBpZiAoJnJlY29yZC0+ZWxlbWVudCgpID09ICZmb3JtYXR0aW5nRWxlbWVudCkKICAgICAgICAg
ICAgIHJldHVybiBmdXJ0aGVzdEJsb2NrOwogICAgICAgICBpZiAoaXNTcGVjaWFsTm9kZShyZWNv
cmQtPnN0YWNrSXRlbSgpKSkKICAgICAgICAgICAgIGZ1cnRoZXN0QmxvY2sgPSByZWNvcmQ7CkBA
IC02MDAsNyArNTg3LDcgQEAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogSFRNTEVs
ZW1lbnRTdGFjazo6ZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGUKIAogdm9pZCBIVE1MRWxl
bWVudFN0YWNrOjpzaG93KCkKIHsKLSAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIHJlY29yZCA9IG1f
dG9wLmdldCgpOyByZWNvcmQ7IHJlY29yZCA9IHJlY29yZC0+bmV4dCgpKQorICAgIGZvciAoYXV0
byogcmVjb3JkID0gbV90b3AuZ2V0KCk7IHJlY29yZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkp
CiAgICAgICAgIHJlY29yZC0+ZWxlbWVudCgpLnNob3dOb2RlKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaAppbmRleCAzODIyYWY0YjFkN2M5
OTFjOGVmY2FmNTE1MTM5MjA4M2NkNDNlYzkzLi5iZTNiZDJlMDE5MmYwNWMwNGU3ODA2OGM3ZGM2
ZjkwMzdjYzFiZTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
RWxlbWVudFN0YWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1l
bnRTdGFjay5oCkBAIC00NCwyMiArNDQsMjQgQEAgY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNz
IEhUTUxFbGVtZW50U3RhY2sgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhUTUxFbGVtZW50
U3RhY2spOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBIVE1MRWxlbWVu
dFN0YWNrKCk7CisgICAgSFRNTEVsZW1lbnRTdGFjaygpID0gZGVmYXVsdDsKICAgICB+SFRNTEVs
ZW1lbnRTdGFjaygpOwogCiAgICAgY2xhc3MgRWxlbWVudFJlY29yZCB7CiAgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEVsZW1lbnRSZWNvcmQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEVsZW1lbnRSZWNvcmQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJ
dGVtPiwgc3RkOjp1bmlxdWVfcHRyPEVsZW1lbnRSZWNvcmQ+KTsKKyAgICAgICAgRWxlbWVudFJl
Y29yZChSZWY8SFRNTFN0YWNrSXRlbT4mJiwgc3RkOjp1bmlxdWVfcHRyPEVsZW1lbnRSZWNvcmQ+
KTsKICAgICAgICAgfkVsZW1lbnRSZWNvcmQoKTsKICAgICAKICAgICAgICAgRWxlbWVudCYgZWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS0+ZWxlbWVudCgpOyB9CiAgICAgICAgIENvbnRh
aW5lck5vZGUmIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX2l0ZW0tPm5vZGUoKTsgfQogICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1faXRl
bS0+bmFtZXNwYWNlVVJJKCk7IH0KLSAgICAgICAgSFRNTFN0YWNrSXRlbSYgc3RhY2tJdGVtKCkg
Y29uc3QgeyByZXR1cm4gKm1faXRlbTsgfQotICAgICAgICB2b2lkIHJlcGxhY2VFbGVtZW50KFBh
c3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4pOworICAgICAgICBIVE1MU3RhY2tJdGVtJiBzdGFja0l0
ZW0oKSB7IHJldHVybiBtX2l0ZW0uZ2V0KCk7IH0KKyAgICAgICAgY29uc3QgSFRNTFN0YWNrSXRl
bSYgc3RhY2tJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLmdldCgpOyB9CiAKLSAgICAgICAg
Ym9vbCBpc0Fib3ZlKEVsZW1lbnRSZWNvcmQqKSBjb25zdDsKKyAgICAgICAgdm9pZCByZXBsYWNl
RWxlbWVudChSZWY8SFRNTFN0YWNrSXRlbT4mJik7CisKKyAgICAgICAgYm9vbCBpc0Fib3ZlKEVs
ZW1lbnRSZWNvcmQmKSBjb25zdDsKIAogICAgICAgICBFbGVtZW50UmVjb3JkKiBuZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAKQEAgLTY5LDcgKzcxLDcgQEAgcHVibGljOgog
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RWxlbWVudFJlY29yZD4gcmVsZWFzZU5leHQoKSB7IHJl
dHVybiBXVEZNb3ZlKG1fbmV4dCk7IH0KICAgICAgICAgdm9pZCBzZXROZXh0KHN0ZDo6dW5pcXVl
X3B0cjxFbGVtZW50UmVjb3JkPiBuZXh0KSB7IG1fbmV4dCA9IFdURk1vdmUobmV4dCk7IH0KIAot
ICAgICAgICBSZWZQdHI8SFRNTFN0YWNrSXRlbT4gbV9pdGVtOworICAgICAgICBSZWY8SFRNTFN0
YWNrSXRlbT4gbV9pdGVtOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RWxlbWVudFJlY29yZD4g
bV9uZXh0OwogICAgIH07CiAKQEAgLTk0LDI1ICs5NiwyNSBAQCBwdWJsaWM6CiAKICAgICBIVE1M
U3RhY2tJdGVtKiBvbmVCZWxvd1RvcCgpIGNvbnN0OwogICAgIEVsZW1lbnRSZWNvcmQmIHRvcFJl
Y29yZCgpIGNvbnN0OwotICAgIEVsZW1lbnRSZWNvcmQqIGZpbmQoRWxlbWVudCopIGNvbnN0Owot
ICAgIEVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5nRWxlbWVudChFbGVt
ZW50KikgY29uc3Q7CisgICAgRWxlbWVudFJlY29yZCogZmluZChFbGVtZW50JikgY29uc3Q7Cisg
ICAgRWxlbWVudFJlY29yZCogZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KEVsZW1l
bnQmKSBjb25zdDsKICAgICBFbGVtZW50UmVjb3JkKiB0b3Btb3N0KGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGFnTmFtZSkgY29uc3Q7CiAKLSAgICB2b2lkIGluc2VydEFib3ZlKFBhc3NSZWZQdHI8SFRN
TFN0YWNrSXRlbT4sIEVsZW1lbnRSZWNvcmQqKTsKKyAgICB2b2lkIGluc2VydEFib3ZlKFJlZjxI
VE1MU3RhY2tJdGVtPiYmLCBFbGVtZW50UmVjb3JkJik7CiAKLSAgICB2b2lkIHB1c2goUGFzc1Jl
ZlB0cjxIVE1MU3RhY2tJdGVtPik7Ci0gICAgdm9pZCBwdXNoUm9vdE5vZGUoUGFzc1JlZlB0cjxI
VE1MU3RhY2tJdGVtPik7Ci0gICAgdm9pZCBwdXNoSFRNTEh0bWxFbGVtZW50KFBhc3NSZWZQdHI8
SFRNTFN0YWNrSXRlbT4pOwotICAgIHZvaWQgcHVzaEhUTUxIZWFkRWxlbWVudChQYXNzUmVmUHRy
PEhUTUxTdGFja0l0ZW0+KTsKLSAgICB2b2lkIHB1c2hIVE1MQm9keUVsZW1lbnQoUGFzc1JlZlB0
cjxIVE1MU3RhY2tJdGVtPik7CisgICAgdm9pZCBwdXNoKFJlZjxIVE1MU3RhY2tJdGVtPiYmKTsK
KyAgICB2b2lkIHB1c2hSb290Tm9kZShSZWY8SFRNTFN0YWNrSXRlbT4mJik7CisgICAgdm9pZCBw
dXNoSFRNTEh0bWxFbGVtZW50KFJlZjxIVE1MU3RhY2tJdGVtPiYmKTsKKyAgICB2b2lkIHB1c2hI
VE1MSGVhZEVsZW1lbnQoUmVmPEhUTUxTdGFja0l0ZW0+JiYpOworICAgIHZvaWQgcHVzaEhUTUxC
b2R5RWxlbWVudChSZWY8SFRNTFN0YWNrSXRlbT4mJik7CiAKICAgICB2b2lkIHBvcCgpOwogICAg
IHZvaWQgcG9wVW50aWwoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKLSAgICB2b2lkIHBv
cFVudGlsKEVsZW1lbnQqKTsKKyAgICB2b2lkIHBvcFVudGlsKEVsZW1lbnQmKTsKICAgICB2b2lk
IHBvcFVudGlsUG9wcGVkKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAgICAgdm9pZCBw
b3BVbnRpbFBvcHBlZChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSB7IHBvcFVudGlsUG9w
cGVkKHRhZ05hbWUubG9jYWxOYW1lKCkpOyB9CiAKLSAgICB2b2lkIHBvcFVudGlsUG9wcGVkKEVs
ZW1lbnQqKTsKKyAgICB2b2lkIHBvcFVudGlsUG9wcGVkKEVsZW1lbnQmKTsKICAgICB2b2lkIHBv
cFVudGlsTnVtYmVyZWRIZWFkZXJFbGVtZW50UG9wcGVkKCk7CiAgICAgdm9pZCBwb3BVbnRpbFRh
YmxlU2NvcGVNYXJrZXIoKTsgLy8gImNsZWFyIHRoZSBzdGFjayBiYWNrIHRvIGEgdGFibGUgY29u
dGV4dCIgaW4gdGhlIHNwZWMuCiAgICAgdm9pZCBwb3BVbnRpbFRhYmxlQm9keVNjb3BlTWFya2Vy
KCk7IC8vICJjbGVhciB0aGUgc3RhY2sgYmFjayB0byBhIHRhYmxlIGJvZHkgY29udGV4dCIgaW4g
dGhlIHNwZWMuCkBAIC0xMjUsMTMgKzEyNywxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wg
aXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludChIVE1MU3RhY2tJdGVtJik7CiAgICAgc3RhdGlj
IGJvb2wgaXNIVE1MSW50ZWdyYXRpb25Qb2ludChIVE1MU3RhY2tJdGVtJik7CiAKLSAgICB2b2lk
IHJlbW92ZShFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVIVE1MSGVhZEVsZW1lbnQoRWxlbWVu
dCopOworICAgIHZvaWQgcmVtb3ZlKEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZUhUTUxIZWFk
RWxlbWVudChFbGVtZW50Jik7CiAKLSAgICBib29sIGNvbnRhaW5zKEVsZW1lbnQqKSBjb25zdDsK
KyAgICBib29sIGNvbnRhaW5zKEVsZW1lbnQmKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3Q7CiAKLSAgICBib29sIGluU2NvcGUoRWxl
bWVudCopIGNvbnN0OworICAgIGJvb2wgaW5TY29wZShFbGVtZW50JikgY29uc3Q7CiAgICAgYm9v
bCBpblNjb3BlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3Q7CiAgICAgYm9vbCBp
blNjb3BlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICBib29sIGluTGlzdEl0ZW1T
Y29wZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpIGNvbnN0OwpAQCAtMTU5LDEwICsxNjEs
MTAgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgdm9pZCBwdXNoQ29tbW9uKFBh
c3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4pOwotICAgIHZvaWQgcHVzaFJvb3ROb2RlQ29tbW9uKFBh
c3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4pOworICAgIHZvaWQgcHVzaENvbW1vbihSZWY8SFRNTFN0
YWNrSXRlbT4mJik7CisgICAgdm9pZCBwdXNoUm9vdE5vZGVDb21tb24oUmVmPEhUTUxTdGFja0l0
ZW0+JiYpOwogICAgIHZvaWQgcG9wQ29tbW9uKCk7Ci0gICAgdm9pZCByZW1vdmVOb25Ub3BDb21t
b24oRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlTm9uVG9wQ29tbW9uKEVsZW1lbnQmKTsKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxFbGVtZW50UmVjb3JkPiBtX3RvcDsKIApAQCAtMTcxLDEwICsx
NzMsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5IHJlcXVp
cmUgdHlwZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dAogICAgIC8vIHRoZXNlIGVsZW1lbnRz
IHNvIHdlIGhhdmVuJ3QgeWV0IGJvdGhlcmVkIHRvIHBsdW1iIHRoZSB0eXBlcyBhbGwgdGhlCiAg
ICAgLy8gd2F5IGRvd24gdGhyb3VnaCBjcmVhdGVFbGVtZW50LCBldGMuCi0gICAgQ29udGFpbmVy
Tm9kZSogbV9yb290Tm9kZTsKLSAgICBFbGVtZW50KiBtX2hlYWRFbGVtZW50OwotICAgIEVsZW1l
bnQqIG1fYm9keUVsZW1lbnQ7Ci0gICAgdW5zaWduZWQgbV9zdGFja0RlcHRoOworICAgIENvbnRh
aW5lck5vZGUqIG1fcm9vdE5vZGUgeyBudWxscHRyIH07CisgICAgRWxlbWVudCogbV9oZWFkRWxl
bWVudCB7IG51bGxwdHIgfTsKKyAgICBFbGVtZW50KiBtX2JvZHlFbGVtZW50IHsgbnVsbHB0ciB9
OworICAgIHVuc2lnbmVkIG1fc3RhY2tEZXB0aCB7IDAgfTsKIH07CiAgICAgCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwCmluZGV4IDdjYzBiZmJlNDZiM2U0ZWZiNmFkN2Fk
ZWIzZTlhM2MzYWY3ZjU5M2YuLmQzNTEwMWI0OTA3MWVhNDQ5ZDA3NzY1M2Q0MjE0YTljYzA4MDUw
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3Jt
YXR0aW5nRWxlbWVudExpc3QuY3BwCkBAIC01Nyw1MiArNTcsNTIgQEAgRWxlbWVudCogSFRNTEZv
cm1hdHRpbmdFbGVtZW50TGlzdDo6Y2xvc2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUoY29uc3Qg
QXRvbWljU3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0Ojpjb250YWlucyhFbGVtZW50KiBlbGVtZW50KQorYm9vbCBIVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0Ojpjb250YWlucyhFbGVtZW50JiBlbGVtZW50KQogewogICAgIHJldHVybiAh
IWZpbmQoZWxlbWVudCk7CiB9CiAKLUhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5KiBI
VE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpmaW5kKEVsZW1lbnQqIGVsZW1lbnQpCithdXRvIEhU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmZpbmQoRWxlbWVudCYgZWxlbWVudCkgLT4gRW50cnkq
CiB7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9lbnRyaWVzLnJldmVyc2VGaW5kKGVsZW1lbnQpOwor
ICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmllcy5yZXZlcnNlRmluZCgmZWxlbWVudCk7CiAgICAg
aWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgc29tZXdoYXQgb2Yg
YSBoYWNrLCBhbmQgaXMgd2h5IHRoaXMgbWV0aG9kIGNhbid0IGJlIGNvbnN0LgogICAgICAgICBy
ZXR1cm4gJm1fZW50cmllc1tpbmRleF07CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVy
biBudWxscHRyOwogfQogCi1IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpCb29rbWFyayBIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpib29rbWFya0ZvcihFbGVtZW50KiBlbGVtZW50KQorYXV0
byBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpib29rbWFya0ZvcihFbGVtZW50JiBlbGVtZW50
KSAtPiBCb29rbWFyawogewotICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmllcy5yZXZlcnNlRmlu
ZChlbGVtZW50KTsKKyAgICBzaXplX3QgaW5kZXggPSBtX2VudHJpZXMucmV2ZXJzZUZpbmQoJmVs
ZW1lbnQpOwogICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7Ci0gICAgcmV0dXJuIEJvb2tt
YXJrKCZhdChpbmRleCkpOworICAgIHJldHVybiBCb29rbWFyayhhdChpbmRleCkpOwogfQogCi12
b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OnN3YXBUbyhFbGVtZW50KiBvbGRFbGVtZW50
LCBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IG5ld0l0ZW0sIGNvbnN0IEJvb2ttYXJrJiBib29r
bWFyaykKK3ZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c3dhcFRvKEVsZW1lbnQmIG9s
ZEVsZW1lbnQsIFJlZjxIVE1MU3RhY2tJdGVtPiYmIG5ld0l0ZW0sIGNvbnN0IEJvb2ttYXJrJiBi
b29rbWFyaykKIHsKICAgICBBU1NFUlQoY29udGFpbnMob2xkRWxlbWVudCkpOwotICAgIEFTU0VS
VCghY29udGFpbnMoJm5ld0l0ZW0tPmVsZW1lbnQoKSkpOworICAgIEFTU0VSVCghY29udGFpbnMo
bmV3SXRlbS0+ZWxlbWVudCgpKSk7CiAgICAgaWYgKCFib29rbWFyay5oYXNCZWVuTW92ZWQoKSkg
ewotICAgICAgICBBU1NFUlQoJmJvb2ttYXJrLm1hcmsoKS0+ZWxlbWVudCgpID09IG9sZEVsZW1l
bnQpOwotICAgICAgICBib29rbWFyay5tYXJrKCktPnJlcGxhY2VFbGVtZW50KG5ld0l0ZW0pOwor
ICAgICAgICBBU1NFUlQoJmJvb2ttYXJrLm1hcmsoKS5lbGVtZW50KCkgPT0gJm9sZEVsZW1lbnQp
OworICAgICAgICBib29rbWFyay5tYXJrKCkucmVwbGFjZUVsZW1lbnQobmV3SXRlbS5jb3B5UmVm
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHNpemVfdCBpbmRleCA9IGJvb2ttYXJr
Lm1hcmsoKSAtIGZpcnN0KCk7CisgICAgc2l6ZV90IGluZGV4ID0gJmJvb2ttYXJrLm1hcmsoKSAt
ICZmaXJzdCgpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwg
c2l6ZSgpKTsKLSAgICBtX2VudHJpZXMuaW5zZXJ0KGluZGV4ICsgMSwgbmV3SXRlbSk7CisgICAg
bV9lbnRyaWVzLmluc2VydChpbmRleCArIDEsIFdURk1vdmUobmV3SXRlbSkpOwogICAgIHJlbW92
ZShvbGRFbGVtZW50KTsKIH0KIAotdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjphcHBl
bmQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtKQordm9pZCBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0OjphcHBlbmQoUmVmPEhUTUxTdGFja0l0ZW0+JiYgaXRlbSkKIHsKLSAgICBlbnN1
cmVOb2Foc0Fya0NvbmRpdGlvbihpdGVtLmdldCgpKTsKLSAgICBtX2VudHJpZXMuYXBwZW5kKGl0
ZW0pOworICAgIGVuc3VyZU5vYWhzQXJrQ29uZGl0aW9uKGl0ZW0pOworICAgIG1fZW50cmllcy5h
cHBlbmQoV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dDo6cmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExp
c3Q6OnJlbW92ZShFbGVtZW50JiBlbGVtZW50KQogewotICAgIHNpemVfdCBpbmRleCA9IG1fZW50
cmllcy5yZXZlcnNlRmluZChlbGVtZW50KTsKKyAgICBzaXplX3QgaW5kZXggPSBtX2VudHJpZXMu
cmV2ZXJzZUZpbmQoJmVsZW1lbnQpOwogICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKICAgICAg
ICAgbV9lbnRyaWVzLnJlbW92ZShpbmRleCk7CiB9CkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBI
VE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpjbGVhclRvTGFzdE1hcmtlcigpCiAgICAgfQogfQog
Ci12b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OnRyeVRvRW5zdXJlTm9haHNBcmtDb25k
aXRpb25RdWlja2x5KEhUTUxTdGFja0l0ZW0qIG5ld0l0ZW0sIFZlY3RvcjxIVE1MU3RhY2tJdGVt
Kj4mIHJlbWFpbmluZ0NhbmRpZGF0ZXMpCit2b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6
OnRyeVRvRW5zdXJlTm9haHNBcmtDb25kaXRpb25RdWlja2x5KEhUTUxTdGFja0l0ZW0mIG5ld0l0
ZW0sIFZlY3RvcjxIVE1MU3RhY2tJdGVtKj4mIHJlbWFpbmluZ0NhbmRpZGF0ZXMpCiB7CiAgICAg
QVNTRVJUKHJlbWFpbmluZ0NhbmRpZGF0ZXMuaXNFbXB0eSgpKTsKIApAQCAtMTM0LDcgKzEzNCw3
IEBAIHZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6dHJ5VG9FbnN1cmVOb2Foc0Fya0Nv
bmRpdGlvblF1aWNrbHkoSFRNTFN0YWNrSXRlCiAgICAgLy8gb2YgYSBxdWlja2x5IGVuc3VyaW5n
IHRoZSBjb25kaXRpb24uCiAgICAgVmVjdG9yPEhUTUxTdGFja0l0ZW0qLCAxMD4gY2FuZGlkYXRl
czsKIAotICAgIHNpemVfdCBuZXdJdGVtQXR0cmlidXRlQ291bnQgPSBuZXdJdGVtLT5hdHRyaWJ1
dGVzKCkuc2l6ZSgpOworICAgIHNpemVfdCBuZXdJdGVtQXR0cmlidXRlQ291bnQgPSBuZXdJdGVt
LmF0dHJpYnV0ZXMoKS5zaXplKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gbV9lbnRyaWVzLnNp
emUoKTsgaTsgKSB7CiAgICAgICAgIC0taTsKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIEhUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3Q6OnRyeVRvRW5zdXJlTm9haHNBcmtDb25kaXRpb25RdWlja2x5
KEhUTUxTdGFja0l0ZQogCiAgICAgICAgIC8vIFF1aWNrbHkgcmVqZWN0IG9idmlvdXNseSBub24t
bWF0Y2hpbmcgY2FuZGlkYXRlcy4KICAgICAgICAgSFRNTFN0YWNrSXRlbSogY2FuZGlkYXRlID0g
ZW50cnkuc3RhY2tJdGVtKCk7Ci0gICAgICAgIGlmIChuZXdJdGVtLT5sb2NhbE5hbWUoKSAhPSBj
YW5kaWRhdGUtPmxvY2FsTmFtZSgpIHx8IG5ld0l0ZW0tPm5hbWVzcGFjZVVSSSgpICE9IGNhbmRp
ZGF0ZS0+bmFtZXNwYWNlVVJJKCkpCisgICAgICAgIGlmIChuZXdJdGVtLmxvY2FsTmFtZSgpICE9
IGNhbmRpZGF0ZS0+bG9jYWxOYW1lKCkgfHwgbmV3SXRlbS5uYW1lc3BhY2VVUkkoKSAhPSBjYW5k
aWRhdGUtPm5hbWVzcGFjZVVSSSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlm
IChjYW5kaWRhdGUtPmF0dHJpYnV0ZXMoKS5zaXplKCkgIT0gbmV3SXRlbUF0dHJpYnV0ZUNvdW50
KQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBIVE1MRm9y
bWF0dGluZ0VsZW1lbnRMaXN0Ojp0cnlUb0Vuc3VyZU5vYWhzQXJrQ29uZGl0aW9uUXVpY2tseShI
VE1MU3RhY2tJdGUKICAgICByZW1haW5pbmdDYW5kaWRhdGVzLmFwcGVuZFZlY3RvcihjYW5kaWRh
dGVzKTsKIH0KIAotdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjplbnN1cmVOb2Foc0Fy
a0NvbmRpdGlvbihIVE1MU3RhY2tJdGVtKiBuZXdJdGVtKQordm9pZCBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0OjplbnN1cmVOb2Foc0Fya0NvbmRpdGlvbihIVE1MU3RhY2tJdGVtJiBuZXdJdGVt
KQogewogICAgIFZlY3RvcjxIVE1MU3RhY2tJdGVtKj4gY2FuZGlkYXRlczsKICAgICB0cnlUb0Vu
c3VyZU5vYWhzQXJrQ29uZGl0aW9uUXVpY2tseShuZXdJdGVtLCBjYW5kaWRhdGVzKTsKQEAgLTE3
MCwxNSArMTcwLDE1IEBAIHZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6ZW5zdXJlTm9h
aHNBcmtDb25kaXRpb24oSFRNTFN0YWNrSXRlbSogbmV3SXRlbSkKICAgICBWZWN0b3I8SFRNTFN0
YWNrSXRlbSo+IHJlbWFpbmluZ0NhbmRpZGF0ZXM7CiAgICAgcmVtYWluaW5nQ2FuZGlkYXRlcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNhbmRpZGF0ZXMuc2l6ZSgpKTsKIAotICAgIGZvciAoYXV0
byYgYXR0cmlidXRlIDogbmV3SXRlbS0+YXR0cmlidXRlcygpKSB7CisgICAgZm9yIChhdXRvJiBh
dHRyaWJ1dGUgOiBuZXdJdGVtLmF0dHJpYnV0ZXMoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGNh
bmRpZGF0ZSA6IGNhbmRpZGF0ZXMpIHsKICAgICAgICAgICAgIC8vIFRoZXNlIHByb3BlcnRpZXMg
c2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGNoZWNrZWQgYnkgdHJ5VG9FbnN1cmVOb2Foc0Fya0Nv
bmRpdGlvblF1aWNrbHkuCi0gICAgICAgICAgICBBU1NFUlQobmV3SXRlbS0+YXR0cmlidXRlcygp
LnNpemUoKSA9PSBjYW5kaWRhdGUtPmF0dHJpYnV0ZXMoKS5zaXplKCkpOwotICAgICAgICAgICAg
QVNTRVJUKG5ld0l0ZW0tPmxvY2FsTmFtZSgpID09IGNhbmRpZGF0ZS0+bG9jYWxOYW1lKCkgJiYg
bmV3SXRlbS0+bmFtZXNwYWNlVVJJKCkgPT0gY2FuZGlkYXRlLT5uYW1lc3BhY2VVUkkoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQobmV3SXRlbS5hdHRyaWJ1dGVzKCkuc2l6ZSgpID09IGNhbmRpZGF0
ZS0+YXR0cmlidXRlcygpLnNpemUoKSk7CisgICAgICAgICAgICBBU1NFUlQobmV3SXRlbS5sb2Nh
bE5hbWUoKSA9PSBjYW5kaWRhdGUtPmxvY2FsTmFtZSgpICYmIG5ld0l0ZW0ubmFtZXNwYWNlVVJJ
KCkgPT0gY2FuZGlkYXRlLT5uYW1lc3BhY2VVUkkoKSk7CiAKLSAgICAgICAgICAgIGNvbnN0IEF0
dHJpYnV0ZSogY2FuZGlkYXRlQXR0cmlidXRlID0gY2FuZGlkYXRlLT5maW5kQXR0cmlidXRlKGF0
dHJpYnV0ZS5uYW1lKCkpOworICAgICAgICAgICAgYXV0byogY2FuZGlkYXRlQXR0cmlidXRlID0g
Y2FuZGlkYXRlLT5maW5kQXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lKCkpOwogICAgICAgICAgICAg
aWYgKGNhbmRpZGF0ZUF0dHJpYnV0ZSAmJiBjYW5kaWRhdGVBdHRyaWJ1dGUtPnZhbHVlKCkgPT0g
YXR0cmlidXRlLnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmVtYWluaW5nQ2FuZGlkYXRlcy5h
cHBlbmQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdDYW5kaWRhdGVzLnVu
Y2hlY2tlZEFwcGVuZChjYW5kaWRhdGUpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlbWFp
bmluZ0NhbmRpZGF0ZXMuc2l6ZSgpIDwga05vYWhzQXJrQ2FwYWNpdHkpCkBAIC0xOTIsNyArMTky
LDcgQEAgdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjplbnN1cmVOb2Foc0Fya0NvbmRp
dGlvbihIVE1MU3RhY2tJdGVtKiBuZXdJdGVtKQogICAgIC8vIGhvd2V2ZXIsIHRoYXQgd2Ugd2ls
IHNwaW4gdGhlIGxvb3AgbW9yZSB0aGFuIG9uY2UgYmVjYXVzZSBvZiBob3cgdGhlCiAgICAgLy8g
Zm9ybWF0dGluZyBlbGVtZW50IGxpc3QgZ2V0cyBwZXJtdXRlZC4KICAgICBmb3IgKHNpemVfdCBp
ID0ga05vYWhzQXJrQ2FwYWNpdHkgLSAxOyBpIDwgY2FuZGlkYXRlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgcmVtb3ZlKCZjYW5kaWRhdGVzW2ldLT5lbGVtZW50KCkpOworICAgICAgICByZW1vdmUo
Y2FuZGlkYXRlc1tpXS0+ZWxlbWVudCgpKTsKIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3QuaAppbmRleCA4YjI1MWIyN2ViZDYwNGIxMmUyNjVjNGEzNDg3NWVjNzk3NDJj
OWIxLi41ZWQzYzgzNzkxNjZhZTZjNjYwNzAxYzAxMDAyZDgyMmRjNTE5YzAzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dC5oCkBAIC00OCwxNiArNDgsMTIgQEAgcHVibGljOgogICAgIGNsYXNzIEVudHJ5IHsKICAgICBw
dWJsaWM6CiAgICAgICAgIC8vIElubGluZSBiZWNhdXNlIHRoZXkncmUgaG90IGFuZCBWZWN0b3I8
VD4gdXNlcyB0aGVtLgotICAgICAgICBleHBsaWNpdCBFbnRyeShQYXNzUmVmUHRyPEhUTUxTdGFj
a0l0ZW0+IGl0ZW0pCi0gICAgICAgICAgICA6IG1faXRlbShpdGVtKQotICAgICAgICB7Ci0gICAg
ICAgIH0KKyAgICAgICAgZXhwbGljaXQgRW50cnkoUmVmPEhUTUxTdGFja0l0ZW0+JiYgaXRlbSkK
KyAgICAgICAgICAgIDogbV9pdGVtKFdURk1vdmUoaXRlbSkpCisgICAgICAgIHsgfQogICAgICAg
ICBlbnVtIE1hcmtlckVudHJ5VHlwZSB7IE1hcmtlckVudHJ5IH07CiAgICAgICAgIEVudHJ5KE1h
cmtlckVudHJ5VHlwZSkKLSAgICAgICAgICAgIDogbV9pdGVtKDApCi0gICAgICAgIHsKLSAgICAg
ICAgfQotICAgICAgICB+RW50cnkoKSB7fQorICAgICAgICB7IH0KIAogICAgICAgICBib29sIGlz
TWFya2VyKCkgY29uc3QgeyByZXR1cm4gIW1faXRlbTsgfQogCkBAIC02OSw3ICs2NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChtX2l0ZW0pOwogICAgICAgICAgICAgcmV0dXJuIG1f
aXRlbS0+ZWxlbWVudCgpOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQo
UGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtKSB7IG1faXRlbSA9IGl0ZW07IH0KKyAgICAg
ICAgdm9pZCByZXBsYWNlRWxlbWVudChSZWY8SFRNTFN0YWNrSXRlbT4mJiBpdGVtKSB7IG1faXRl
bSA9IFdURk1vdmUoaXRlbSk7IH0KIAogICAgICAgICAvLyBOZWVkZWQgZm9yIHVzZSB3aXRoIFZl
Y3Rvci4gIFRoZXNlIGFyZSBzdXBlci1ob3QgYW5kIG11c3QgYmUgaW5saW5lLgogICAgICAgICBi
b29sIG9wZXJhdG9yPT0oRWxlbWVudCogZWxlbWVudCkgY29uc3QgeyByZXR1cm4gIW1faXRlbSA/
ICFlbGVtZW50IDogJm1faXRlbS0+ZWxlbWVudCgpID09IGVsZW1lbnQ7IH0KQEAgLTgxLDIwICs3
NywxOSBAQCBwdWJsaWM6CiAKICAgICBjbGFzcyBCb29rbWFyayB7CiAgICAgcHVibGljOgotICAg
ICAgICBCb29rbWFyayhFbnRyeSogZW50cnkpCisgICAgICAgIGV4cGxpY2l0IEJvb2ttYXJrKEVu
dHJ5JiBlbnRyeSkKICAgICAgICAgICAgIDogbV9oYXNCZWVuTW92ZWQoZmFsc2UpCi0gICAgICAg
ICAgICAsIG1fbWFyayhlbnRyeSkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgICAgICAs
IG1fbWFyaygmZW50cnkpCisgICAgICAgIHsgfQogCi0gICAgICAgIHZvaWQgbW92ZVRvQWZ0ZXIo
RW50cnkqIGJlZm9yZSkKKyAgICAgICAgdm9pZCBtb3ZlVG9BZnRlcihFbnRyeSYgYmVmb3JlKQog
ICAgICAgICB7CiAgICAgICAgICAgICBtX2hhc0JlZW5Nb3ZlZCA9IHRydWU7Ci0gICAgICAgICAg
ICBtX21hcmsgPSBiZWZvcmU7CisgICAgICAgICAgICBtX21hcmsgPSAmYmVmb3JlOwogICAgICAg
ICB9CiAKICAgICAgICAgYm9vbCBoYXNCZWVuTW92ZWQoKSBjb25zdCB7IHJldHVybiBtX2hhc0Jl
ZW5Nb3ZlZDsgfQotICAgICAgICBFbnRyeSogbWFyaygpIGNvbnN0IHsgcmV0dXJuIG1fbWFyazsg
fQorICAgICAgICBFbnRyeSYgbWFyaygpIGNvbnN0IHsgQVNTRVJUKG1fbWFyayk7IHJldHVybiAq
bV9tYXJrOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBib29sIG1faGFzQmVlbk1vdmVkOwpA
QCAtMTA2LDEzICsxMDEsMTMgQEAgcHVibGljOgogCiAgICAgRWxlbWVudCogY2xvc2VzdEVsZW1l
bnRJblNjb3BlV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBFbnRyeSogZmlu
ZChFbGVtZW50Kik7Ci0gICAgYm9vbCBjb250YWlucyhFbGVtZW50Kik7Ci0gICAgdm9pZCBhcHBl
bmQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7Ci0gICAgdm9pZCByZW1vdmUoRWxlbWVudCop
OworICAgIEVudHJ5KiBmaW5kKEVsZW1lbnQmKTsKKyAgICBib29sIGNvbnRhaW5zKEVsZW1lbnQm
KTsKKyAgICB2b2lkIGFwcGVuZChSZWY8SFRNTFN0YWNrSXRlbT4mJik7CisgICAgdm9pZCByZW1v
dmUoRWxlbWVudCYpOwogCi0gICAgQm9va21hcmsgYm9va21hcmtGb3IoRWxlbWVudCopOwotICAg
IHZvaWQgc3dhcFRvKEVsZW1lbnQqIG9sZEVsZW1lbnQsIFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRl
bT4gbmV3SXRlbSwgY29uc3QgQm9va21hcmsmKTsKKyAgICBCb29rbWFyayBib29rbWFya0ZvcihF
bGVtZW50Jik7CisgICAgdm9pZCBzd2FwVG8oRWxlbWVudCYgb2xkRWxlbWVudCwgUmVmPEhUTUxT
dGFja0l0ZW0+JiYgbmV3SXRlbSwgY29uc3QgQm9va21hcmsmKTsKIAogICAgIHZvaWQgYXBwZW5k
TWFya2VyKCk7CiAgICAgLy8gY2xlYXJUb0xhc3RNYXJrZXIgYWxzbyBjbGVhcnMgdGhlIG1hcmtl
ciAocGVyIHRoZSBIVE1MNSBzcGVjKS4KQEAgLTEyNiwxMiArMTIxLDEyIEBAIHB1YmxpYzoKICNl
bmRpZgogCiBwcml2YXRlOgotICAgIEVudHJ5KiBmaXJzdCgpIHsgcmV0dXJuICZhdCgwKTsgfQor
ICAgIEVudHJ5JiBmaXJzdCgpIHsgcmV0dXJuIGF0KDApOyB9CiAKICAgICAvLyBodHRwOi8vd3d3
LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5n
Lmh0bWwjbGlzdC1vZi1hY3RpdmUtZm9ybWF0dGluZy1lbGVtZW50cwogICAgIC8vIFRoZXNlIGZ1
bmN0aW9ucyBlbmZvcmNlIHRoZSAiTm9haCdzIEFyayIgY29uZGl0aW9uLCB3aGljaCByZW1vdmVz
IHJlZHVuZGFudCBtaXMtbmVzdGVkIGVsZW1lbnRzLgotICAgIHZvaWQgdHJ5VG9FbnN1cmVOb2Fo
c0Fya0NvbmRpdGlvblF1aWNrbHkoSFRNTFN0YWNrSXRlbSosIFZlY3RvcjxIVE1MU3RhY2tJdGVt
Kj4mIHJlbWFpbmluZ0NhbmRpYXRlcyk7Ci0gICAgdm9pZCBlbnN1cmVOb2Foc0Fya0NvbmRpdGlv
bihIVE1MU3RhY2tJdGVtKik7CisgICAgdm9pZCB0cnlUb0Vuc3VyZU5vYWhzQXJrQ29uZGl0aW9u
UXVpY2tseShIVE1MU3RhY2tJdGVtJiwgVmVjdG9yPEhUTUxTdGFja0l0ZW0qPiYgcmVtYWluaW5n
Q2FuZGlkYXRlcyk7CisgICAgdm9pZCBlbnN1cmVOb2Foc0Fya0NvbmRpdGlvbihIVE1MU3RhY2tJ
dGVtJik7CiAKICAgICBWZWN0b3I8RW50cnk+IG1fZW50cmllczsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCAzZWMyODUwNmVhZjlh
NjhjZmRlMWY1YjJjNDE1ZmZhNjgxYWUyMTZkLi5hYjg2NWUwNzA0NjMyYWI3NjA5NDg4MmI2MTcz
NDg4NmIzMGQ1YTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
VHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHAKQEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0RvY3R5cGVUb2tlbihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFTU0VSVCh0
b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpET0NUWVBFKTsKICAgICBpZiAobV9pbnNlcnRpb25N
b2RlID09IEluc2VydGlvbk1vZGU6OkluaXRpYWwpIHsKLSAgICAgICAgbV90cmVlLmluc2VydERv
Y3R5cGUoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydERvY3R5cGUodG9rZW4pOwogICAg
ICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtNTEwLDcgKzUxMCw3IEBAIHRlbXBsYXRlIDxib29sIHNob3Vs
ZENsb3NlKGNvbnN0IEhUTUxTdGFja0l0ZW0mKT4gdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NDCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQ
SW5CdXR0b25TY29wZSgpOwotICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOwor
ICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUYWJsZVF1YWxpZmllZE5hbWU+IHN0YXRpYyBIYXNoTWFwPEF0b21pY1N0cmluZywgUXVh
bGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUqIGNvbnN0
IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKQEAgLTYxOCw3ICs2MTgsNyBAQCB2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9mcmFtZXNldE9r
ID0gZmFsc2U7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KCZ0
b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KHRva2Vu
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGZyYW1l
c2V0VGFnKSB7CkBAIC02MzAsMTAgKzYzMCwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIGlm
ICghbV9mcmFtZXNldE9rKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCkuYm9keUVsZW1lbnQoKS5yZW1vdmUoQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0g
ICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3BVbnRpbCgmbV90cmVlLm9wZW5FbGVtZW50
cygpLmJvZHlFbGVtZW50KCkpOworICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucG9wVW50
aWwobV90cmVlLm9wZW5FbGVtZW50cygpLmJvZHlFbGVtZW50KCkpOwogICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCkucG9wSFRNTEJvZHlFbGVtZW50KCk7CiAgICAgICAgIEFTU0VSVCgmbV90
cmVlLm9wZW5FbGVtZW50cygpLnRvcCgpID09ICZtX3RyZWUub3BlbkVsZW1lbnRzKCkuaHRtbEVs
ZW1lbnQoKSk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAg
ICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX2luc2VydGlv
bk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkZyYW1lc2V0OwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNjYxLDcgKzY2MSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRU
YWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IHN1bW1hcnlUYWcKICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHVsVGFnKSB7CiAg
ICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1M
RWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzTnVtYmVy
ZWRIZWFkZXJUYWcodG9rZW4ubmFtZSgpKSkgewpAQCAtNjcwLDEyICs2NzAsMTIgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBtX3Ry
ZWUub3BlbkVsZW1lbnRzKCkucG9wKCk7CiAgICAgICAgIH0KLSAgICAgICAgbV90cmVlLmluc2Vy
dEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0
b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBw
cmVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGxpc3RpbmdUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zh
a2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVs
ZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsK
ICAgICAgICAgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICBtX2Zy
YW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjg2LDcgKzY4Niw3IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBwcm9j
ZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRI
VE1MRm9ybUVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxGb3JtRWxl
bWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBsaVRhZykgewpAQCAtNjk5LDcgKzY5OSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICB9CiAg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwbGFpbnRleHRUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zh
a2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVs
ZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsK
ICAgICAgICAgbV9wYXJzZXIudG9rZW5pemVyKCkuc2V0UExBSU5URVhUU3RhdGUoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTcxMSw3ICs3MTEsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhl
QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwog
ICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTcyMCwxNyArNzIwLDE3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdG
b3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgaWYgKGFjdGl2ZUFUYWcp
IHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcHJvY2Vzc0Zh
a2VFbmRUYWcoYVRhZyk7Ci0gICAgICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1l
bnRzKCkucmVtb3ZlKGFjdGl2ZUFUYWcpOwotICAgICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxl
bWVudHMoKS5jb250YWlucyhhY3RpdmVBVGFnKSkKLSAgICAgICAgICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCkucmVtb3ZlKGFjdGl2ZUFUYWcpOworICAgICAgICAgICAgbV90cmVlLmFjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cygpLnJlbW92ZSgqYWN0aXZlQVRhZyk7CisgICAgICAgICAgICBp
ZiAobV90cmVlLm9wZW5FbGVtZW50cygpLmNvbnRhaW5zKCphY3RpdmVBVGFnKSkKKyAgICAgICAg
ICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucmVtb3ZlKCphY3RpdmVBVGFnKTsKICAgICAg
ICAgfQogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVu
dHMoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50KCZ0b2tlbik7Cisg
ICAgICAgIG1fdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgaWYgKGlzTm9uQW5jaG9yTm9uTm9ickZvcm1hdHRpbmdUYWcodG9r
ZW4ubmFtZSgpKSkgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0
aW5nRWxlbWVudHMoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50KCZ0
b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudCh0b2tlbik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub2JyVGFnKSB7
CkBAIC03NDAsNyArNzQwLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRh
Z0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcHJvY2Vzc0Zh
a2VFbmRUYWcobm9iclRhZyk7CiAgICAgICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3Rp
dmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUuaW5zZXJ0
Rm9ybWF0dGluZ0VsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEZvcm1hdHRp
bmdFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4u
bmFtZSgpID09IGFwcGxldFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gZW1iZWRUYWcgfHwgdG9rZW4u
bmFtZSgpID09IG9iamVjdFRhZykgewpAQCAtNzQ5LDcgKzc0OSw3IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhcHBsZXRUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IG1hcnF1ZWVUYWcgfHwgdG9rZW4ubmFtZSgpID09IG9iamVjdFRhZykgewogICAgICAgICBt
X3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAg
bV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRI
VE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVu
dHMoKS5hcHBlbmRNYXJrZXIoKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAg
ICAgIHJldHVybjsKQEAgLTc1Nyw3ICs3NTcsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSB0YWJsZVRhZykgewogICAgICAgICBpZiAoIW1fdHJlZS5pblF1aXJrc01v
ZGUoKSAmJiBtX3RyZWUub3BlbkVsZW1lbnRzKCkuaW5CdXR0b25TY29wZShwVGFnKSkKICAgICAg
ICAgICAgIHByb2Nlc3NGYWtlRW5kVGFnKHBUYWcpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRN
TEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2Vu
KTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIG1faW5zZXJ0aW9uTW9k
ZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGU7CiAgICAgICAgIHJldHVybjsKQEAgLTc3NSwyNSAr
Nzc1LDI1IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHko
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGtleWdl
blRhZwogICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gd2JyVGFnKSB7CiAgICAgICAgIG1fdHJl
ZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBtX3Ry
ZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUu
aW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fZnJhbWVzZXRP
ayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gaW5wdXRUYWcpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0
dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVt
ZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50
KHRva2VuKTsKICAgICAgICAgQXR0cmlidXRlKiB0eXBlQXR0cmlidXRlID0gZmluZEF0dHJpYnV0
ZSh0b2tlbi5hdHRyaWJ1dGVzKCksIHR5cGVBdHRyKTsKICAgICAgICAgaWYgKCF0eXBlQXR0cmli
dXRlIHx8ICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh0eXBlQXR0cmlidXRlLT52YWx1
ZSgpLCAiaGlkZGVuIikpCiAgICAgICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IHBhcmFtVGFnIHx8IHRv
a2VuLm5hbWUoKSA9PSBzb3VyY2VUYWcgfHwgdG9rZW4ubmFtZSgpID09IHRyYWNrVGFnKSB7Ci0g
ICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CisgICAg
ICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhyVGFnKSB7CiAgICAgICAg
IHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmlu
c2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2Vy
dFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBm
YWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTgwMiw3ICs4MDIsNyBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0
ZXh0YXJlYVRhZykgewotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsK
KyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgbV9zaG91
bGRTa2lwTGVhZGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICBtX3BhcnNlci50b2tlbml6ZXIo
KS5zZXRSQ0RBVEFTdGF0ZSgpOwogICAgICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1f
aW5zZXJ0aW9uTW9kZTsKQEAgLTgzMiw3ICs4MzIsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgfQog
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CiAgICAgICAgIG1fdHJlZS5yZWNv
bnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBtX3RyZWUuaW5z
ZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KHRva2VuKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIGlmIChtX2lu
c2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZQogICAgICAgICAgICAgfHwgbV9p
bnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluQ2FwdGlvbgpAQCAtODUxLDcgKzg1MSw3
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kT3B0aW9uKTsK
ICAgICAgICAgfQogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5n
RWxlbWVudHMoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7Cisg
ICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSByYlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0g
cnRjVGFnKSB7CkBAIC04NjAsNyArODYwLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAg
aWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLmhhc1RhZ05hbWUocnVieVRhZykpCiAgICAg
ICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIH0KLSAgICAgICAgbV90cmVl
Lmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBydFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gcnBUYWcpIHsKQEAgLTg2OSwyMSArODY5LDIx
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIGlmICghbV90cmVlLmN1cnJlbnRTdGFja0l0
ZW0oKS5oYXNUYWdOYW1lKHJ1YnlUYWcpICYmICFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLmhh
c1RhZ05hbWUocnRjVGFnKSkKICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAg
ICAgICAgfQotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAg
ICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IE1hdGhNTE5hbWVzOjptYXRoVGFnLmxvY2FsTmFt
ZSgpKSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cygpOwogICAgICAgICBhZGp1c3RNYXRoTUxBdHRyaWJ1dGVzKHRva2VuKTsKICAgICAgICAg
YWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXModG9rZW4pOwotICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9y
ZWlnbkVsZW1lbnQoJnRva2VuLCBNYXRoTUxOYW1lczo6bWF0aG1sTmFtZXNwYWNlVVJJKTsKKyAg
ICAgICAgbV90cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KHRva2VuLCBNYXRoTUxOYW1lczo6bWF0
aG1sTmFtZXNwYWNlVVJJKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4u
bmFtZSgpID09IFNWR05hbWVzOjpzdmdUYWcubG9jYWxOYW1lKCkpIHsKICAgICAgICAgbV90cmVl
LnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAgIGFkanVz
dFNWR0F0dHJpYnV0ZXModG9rZW4pOwogICAgICAgICBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyh0
b2tlbik7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRGb3JlaWduRWxlbWVudCgmdG9rZW4sIFNWR05h
bWVzOjpzdmdOYW1lc3BhY2VVUkkpOworICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9yZWlnbkVsZW1l
bnQodG9rZW4sIFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKQEAg
LTkwNywxMSArOTA3LDExIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdG
b3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIGlubGluZSB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6aW5zZXJ0R2VuZXJpY0hUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7
CiAjaWYgRU5BQkxFKENVU1RPTV9FTEVNRU5UUykKLSAgICBhdXRvKiBpbnRlcmZhY2UgPSBtX3Ry
ZWUuaW5zZXJ0SFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJmYWNlKCZ0b2tlbik7
CisgICAgYXV0byogaW50ZXJmYWNlID0gbV90cmVlLmluc2VydEhUTUxFbGVtZW50T3JGaW5kQ3Vz
dG9tRWxlbWVudEludGVyZmFjZSh0b2tlbik7CiAgICAgaWYgKFVOTElLRUxZKGludGVyZmFjZSkp
CiAgICAgICAgIG1fY3VzdG9tRWxlbWVudFRvQ29uc3RydWN0ID0gc3RkOjptYWtlX3VuaXF1ZTxD
dXN0b21FbGVtZW50Q29uc3RydWN0aW9uRGF0YT4oKmludGVyZmFjZSwgdG9rZW4ubmFtZSgpLCB0
b2tlbi5hdHRyaWJ1dGVzKCkpOwogI2Vsc2UKLSAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQo
JnRva2VuKTsKKyAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogI2VuZGlmCiB9
CiAKQEAgLTkyNSw3ICs5MjUsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGlkQ3JlYXRlQ3Vz
dG9tT3JDYWxsYmFja0VsZW1lbnQoUmVmPEVsZW1lbnQ+JiYgZWxlbWVudCwgQwogdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiB7CiAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLmFwcGVuZE1hcmtl
cigpOwotICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgIG1fdHJlZS5p
bnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgbV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmFw
cGVuZChJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzKTsKICAgICBtX2luc2VydGlvbk1v
ZGUgPSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzOwogfQpAQCAtOTkyLDEzICs5OTIs
MTMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNhcHRpb25UYWcp
IHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGlsVGFibGVTY29wZU1hcmtl
cigpOwogICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkuYXBwZW5kTWFy
a2VyKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX2luc2VydGlvbk1v
ZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb247CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBjb2xncm91cFRhZykgewogICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCkucG9wVW50aWxUYWJsZVNjb3BlTWFya2VyKCk7Ci0gICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1l
bnQodG9rZW4pOwogICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkNv
bHVtbkdyb3VwOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTAxMCw3ICsxMDEwLDcgQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICB9CiAgICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tl
bi5uYW1lKCkpKSB7CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3BVbnRpbFRhYmxl
U2NvcGVNYXJrZXIoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7
CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1faW5z
ZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5OwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTAzNyw3ICsxMDM3LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgQXR0
cmlidXRlKiB0eXBlQXR0cmlidXRlID0gZmluZEF0dHJpYnV0ZSh0b2tlbi5hdHRyaWJ1dGVzKCks
IHR5cGVBdHRyKTsKICAgICAgICAgaWYgKHR5cGVBdHRyaWJ1dGUgJiYgZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UodHlwZUF0dHJpYnV0ZS0+dmFsdWUoKSwgImhpZGRlbiIpKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxm
Q2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0U2Vs
ZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvICJhbnl0aGluZyBlbHNlIiBjYXNlLgpAQCAt
MTA0Niw3ICsxMDQ2LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0Zv
ckluVGFibGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7CiAgICAgICAgIGlmIChtX3RyZWUuZm9ybSgpICYmICFpc1BhcnNpbmdUZW1wbGF0ZUNvbnRl
bnRzKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRm9y
bUVsZW1lbnQoJnRva2VuLCB0cnVlKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxGb3JtRWxl
bWVudCh0b2tlbiwgdHJ1ZSk7CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3AoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNjksNyArMTA2OSw3IEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAg
ICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MOgogICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCgmdG9rZW4pOworICAgICAgICAgICAgbV90
cmVlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKHRva2VuKTsKICAgICAgICAgICAg
IG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQ7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEwODIsNyArMTA4Miw3IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRU
YWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSGVhZEVsZW1lbnQoJnRva2VuKTsK
KyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MSGVhZEVsZW1lbnQodG9rZW4pOwogICAgICAg
ICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5IZWFkOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMTAyLDEyICsxMTAyLDEyIEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAg
ICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJvZHlUYWcpIHsKICAgICAgICAgICAg
IG1fZnJhbWVzZXRPayA9IGZhbHNlOwotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxCb2R5
RWxlbWVudCgmdG9rZW4pOworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxCb2R5RWxlbWVu
dCh0b2tlbik7CiAgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJ
bkJvZHk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBmcmFtZXNldFRhZykgewotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KCZ0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9r
ZW4pOwogICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5GcmFt
ZXNldDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTEyMiw5ICsxMTIyLDEw
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKICAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZwogICAg
ICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRpdGxlVGFnKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKHRva2VuKTsKLSAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wdXNoSFRN
TEhlYWRFbGVtZW50KG1fdHJlZS5oZWFkU3RhY2tJdGVtKCkpOworICAgICAgICAgICAgQVNTRVJU
KG1fdHJlZS5oZWFkU3RhY2tJdGVtKCkpOworICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50
cygpLnB1c2hIVE1MSGVhZEVsZW1lbnQoKm1fdHJlZS5oZWFkU3RhY2tJdGVtKCkpOwogICAgICAg
ICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKTsKLSAgICAgICAgICAgIG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS5yZW1vdmVIVE1MSGVhZEVsZW1lbnQoJm1fdHJlZS5oZWFkKCkpOwor
ICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnJlbW92ZUhUTUxIZWFkRWxlbWVudCht
X3RyZWUuaGVhZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKQEAgLTExNjEsNyArMTE2Miw3IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgp
ID09IGNvbFRhZykgewotICAgICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVs
ZW1lbnQoJnRva2VuKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxF
bGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CkBAIC0xMTc3LDcgKzExNzgsNyBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keToKICAgICAgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSB0clRhZykgewogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygp
LnBvcFVudGlsVGFibGVCb2R5U2NvcGVNYXJrZXIoKTsgLy8gSG93IGlzIHRoZXJlIGV2ZXIgYW55
dGhpbmcgdG8gcG9wPwotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tl
bik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAg
ICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3c7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEyMDYsNyArMTIwNyw3IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBjYXNl
IEluc2VydGlvbk1vZGU6OkluUm93OgogICAgICAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFn
KHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3BV
bnRpbFRhYmxlUm93U2NvcGVNYXJrZXIoKTsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1M
RWxlbWVudCgmdG9rZW4pOworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRv
a2VuKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluQ2Vs
bDsKICAgICAgICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS5hcHBlbmRN
YXJrZXIoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyNzgsMTEgKzEyNzksMTEgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gZnJhbWVzZXRUYWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVu
dCgmdG9rZW4pOworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgp
ID09IGZyYW1lVGFnKSB7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1M
RWxlbWVudCgmdG9rZW4pOworICAgICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRN
TEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IGlmICh0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcpIHsKQEAgLTEzMjYsNyArMTMyNyw3IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICAgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kT3B0aW9uKEhUTUxUb2tl
bjo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOwogICAgICAgICAgICAgICAgIHByb2Nl
c3NFbmRUYWcoZW5kT3B0aW9uKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IG9wdGdyb3VwVGFnKSB7CkBAIC0xMzM4LDcgKzEzMzksNyBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiAgICAgICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZE9wdGdyb3VwKEhUTUxUb2tl
bjo6RW5kVGFnLCBvcHRncm91cFRhZy5sb2NhbE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgcHJv
Y2Vzc0VuZFRhZyhlbmRPcHRncm91cCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRI
VE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzZWxlY3RUYWcpIHsKQEAgLTE0MTgsNyArMTQxOSw3IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdUZW1wbGF0ZUNvbnRl
bnRzKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRt
bFN0YXJ0VGFnSW5Cb2R5KCZ0b2tlbik7CisgICAgbV90cmVlLmluc2VydEhUTUxIdG1sU3RhcnRU
YWdJbkJvZHkodG9rZW4pOwogfQogCiBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlF
bmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKQEAgLTE0NDMsNyArMTQ0NCw3
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJvZHko
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxp
ZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi5uYW1lKCkpOwogICAgICAgICAgICAgaWYgKCFt
X3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLm1hdGNoZXNIVE1MVGFnKHRva2VuLm5hbWUoKSkpCiAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCkucG9wVW50aWxQb3BwZWQoJml0ZW0uZWxlbWVudCgpKTsKKyAgICAgICAgICAg
IG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3BVbnRpbFBvcHBlZChpdGVtLmVsZW1lbnQoKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzU3BlY2lhbE5vZGUo
aXRlbSkpIHsKQEAgLTE0NzEsMzQgKzE0NzIsMzQgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNh
bGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBpZiAo
IWZvcm1hdHRpbmdFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NBbnlPdGhlckVu
ZFRhZ0ZvckluQm9keSh0b2tlbik7CiAgICAgICAgIC8vIDQuYwotICAgICAgICBpZiAoKG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS5jb250YWlucyhmb3JtYXR0aW5nRWxlbWVudCkpICYmICFtX3RyZWUu
b3BlbkVsZW1lbnRzKCkuaW5TY29wZShmb3JtYXR0aW5nRWxlbWVudCkpIHsKKyAgICAgICAgaWYg
KChtX3RyZWUub3BlbkVsZW1lbnRzKCkuY29udGFpbnMoKmZvcm1hdHRpbmdFbGVtZW50KSkgJiYg
IW1fdHJlZS5vcGVuRWxlbWVudHMoKS5pblNjb3BlKCpmb3JtYXR0aW5nRWxlbWVudCkpIHsKICAg
ICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQo
KTsgLy8gQ2hlY2sgdGhlIHN0YWNrIG9mIG9wZW4gZWxlbWVudHMgZm9yIGEgbW9yZSBzcGVjaWZp
YyBwYXJzZSBlcnJvci4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAv
LyA0LmIKLSAgICAgICAgYXV0byogZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQgPSBtX3RyZWUub3Bl
bkVsZW1lbnRzKCkuZmluZChmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIGF1dG8qIGZvcm1h
dHRpbmdFbGVtZW50UmVjb3JkID0gbV90cmVlLm9wZW5FbGVtZW50cygpLmZpbmQoKmZvcm1hdHRp
bmdFbGVtZW50KTsKICAgICAgICAgaWYgKCFmb3JtYXR0aW5nRWxlbWVudFJlY29yZCkgewogICAg
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAgICBtX3RyZWUuYWN0aXZlRm9y
bWF0dGluZ0VsZW1lbnRzKCkucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAgICAg
IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS5yZW1vdmUoKmZvcm1hdHRpbmdFbGVt
ZW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyA0LmQKICAg
ICAgICAgaWYgKGZvcm1hdHRpbmdFbGVtZW50ICE9ICZtX3RyZWUuY3VycmVudEVsZW1lbnQoKSkK
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAvLyA1LgotICAgICAgICBh
dXRvKiBmdXJ0aGVzdEJsb2NrID0gbV90cmVlLm9wZW5FbGVtZW50cygpLmZ1cnRoZXN0QmxvY2tG
b3JGb3JtYXR0aW5nRWxlbWVudChmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIGF1dG8qIGZ1
cnRoZXN0QmxvY2sgPSBtX3RyZWUub3BlbkVsZW1lbnRzKCkuZnVydGhlc3RCbG9ja0ZvckZvcm1h
dHRpbmdFbGVtZW50KCpmb3JtYXR0aW5nRWxlbWVudCk7CiAgICAgICAgIC8vIDYuCiAgICAgICAg
IGlmICghZnVydGhlc3RCbG9jaykgewotICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygp
LnBvcFVudGlsUG9wcGVkKGZvcm1hdHRpbmdFbGVtZW50KTsKLSAgICAgICAgICAgIG1fdHJlZS5h
Y3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOworICAg
ICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGlsUG9wcGVkKCpmb3JtYXR0aW5n
RWxlbWVudCk7CisgICAgICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCku
cmVtb3ZlKCpmb3JtYXR0aW5nRWxlbWVudCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgLy8gNy4KLSAgICAgICAgQVNTRVJUKGZ1cnRoZXN0QmxvY2stPmlzQWJvdmUo
Zm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQpKTsKKyAgICAgICAgQVNTRVJUKGZ1cnRoZXN0QmxvY2st
PmlzQWJvdmUoKmZvcm1hdHRpbmdFbGVtZW50UmVjb3JkKSk7CiAgICAgICAgIFJlZjxIVE1MU3Rh
Y2tJdGVtPiBjb21tb25BbmNlc3RvciA9IGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkLT5uZXh0KCkt
PnN0YWNrSXRlbSgpOwogICAgICAgICAvLyA4LgotICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0OjpCb29rbWFyayBib29rbWFyayA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVu
dHMoKS5ib29rbWFya0Zvcihmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIEhUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3Q6OkJvb2ttYXJrIGJvb2ttYXJrID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cygpLmJvb2ttYXJrRm9yKCpmb3JtYXR0aW5nRWxlbWVudCk7CiAgICAgICAgIC8v
IDkuCiAgICAgICAgIGF1dG8qIG5vZGUgPSBmdXJ0aGVzdEJsb2NrOwogICAgICAgICBhdXRvKiBu
ZXh0Tm9kZSA9IG5vZGUtPm5leHQoKTsKQEAgLTE1MTAsOCArMTUxMSw4IEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgICAgIEFTU0VSVChub2RlKTsKICAgICAgICAgICAgIG5leHROb2RlID0gbm9kZS0+
bmV4dCgpOyAvLyBTYXZlIG5vZGUtPm5leHQoKSBmb3IgdGhlIG5leHQgaXRlcmF0aW9uIGluIGNh
c2Ugbm9kZSBpcyBkZWxldGVkIGluIDkuNS4KICAgICAgICAgICAgIC8vIDkuNQotICAgICAgICAg
ICAgaWYgKCFtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkuY29udGFpbnMoJm5vZGUt
PmVsZW1lbnQoKSkpIHsKLSAgICAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucmVt
b3ZlKCZub2RlLT5lbGVtZW50KCkpOworICAgICAgICAgICAgaWYgKCFtX3RyZWUuYWN0aXZlRm9y
bWF0dGluZ0VsZW1lbnRzKCkuY29udGFpbnMobm9kZS0+ZWxlbWVudCgpKSkgeworICAgICAgICAg
ICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5yZW1vdmUobm9kZS0+ZWxlbWVudCgpKTsKICAg
ICAgICAgICAgICAgICBub2RlID0gMDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KQEAgLTE1MTksMTUgKzE1MjAsMTUgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNh
bGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAg
aWYgKG5vZGUgPT0gZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAvLyA5LjcKLSAgICAgICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVt
PiBuZXdJdGVtID0gbV90cmVlLmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbigmbm9kZS0+c3Rh
Y2tJdGVtKCkpOworICAgICAgICAgICAgYXV0byBuZXdJdGVtID0gbV90cmVlLmNyZWF0ZUVsZW1l
bnRGcm9tU2F2ZWRUb2tlbihub2RlLT5zdGFja0l0ZW0oKSk7CiAKLSAgICAgICAgICAgIEhUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5KiBub2RlRW50cnkgPSBtX3RyZWUuYWN0aXZlRm9y
bWF0dGluZ0VsZW1lbnRzKCkuZmluZCgmbm9kZS0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIEhU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5KiBub2RlRW50cnkgPSBtX3RyZWUuYWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzKCkuZmluZChub2RlLT5lbGVtZW50KCkpOwogICAgICAgICAgICAg
bm9kZUVudHJ5LT5yZXBsYWNlRWxlbWVudChuZXdJdGVtLmNvcHlSZWYoKSk7Ci0gICAgICAgICAg
ICBub2RlLT5yZXBsYWNlRWxlbWVudChuZXdJdGVtLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBu
b2RlLT5yZXBsYWNlRWxlbWVudChXVEZNb3ZlKG5ld0l0ZW0pKTsKIAogICAgICAgICAgICAgLy8g
OS44CiAgICAgICAgICAgICBpZiAobGFzdE5vZGUgPT0gZnVydGhlc3RCbG9jaykKLSAgICAgICAg
ICAgICAgICBib29rbWFyay5tb3ZlVG9BZnRlcihub2RlRW50cnkpOworICAgICAgICAgICAgICAg
IGJvb2ttYXJrLm1vdmVUb0FmdGVyKCpub2RlRW50cnkpOwogICAgICAgICAgICAgLy8gOS45CiAg
ICAgICAgICAgICBtX3RyZWUucmVwYXJlbnQoKm5vZGUsICpsYXN0Tm9kZSk7CiAgICAgICAgICAg
ICAvLyA5LjEwCkBAIC0xNTM2LDE2ICsxNTM3LDE2IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpj
YWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgLy8g
MTAuCiAgICAgICAgIG1fdHJlZS5pbnNlcnRBbHJlYWR5UGFyc2VkQ2hpbGQoY29tbW9uQW5jZXN0
b3IuZ2V0KCksICpsYXN0Tm9kZSk7CiAgICAgICAgIC8vIDExLgotICAgICAgICBSZWZQdHI8SFRN
TFN0YWNrSXRlbT4gbmV3SXRlbSA9IG1fdHJlZS5jcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4o
JmZvcm1hdHRpbmdFbGVtZW50UmVjb3JkLT5zdGFja0l0ZW0oKSk7CisgICAgICAgIGF1dG8gbmV3
SXRlbSA9IG1fdHJlZS5jcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oZm9ybWF0dGluZ0VsZW1l
bnRSZWNvcmQtPnN0YWNrSXRlbSgpKTsKICAgICAgICAgLy8gMTIuCi0gICAgICAgIG1fdHJlZS50
YWtlQWxsQ2hpbGRyZW4oKm5ld0l0ZW0sICpmdXJ0aGVzdEJsb2NrKTsKKyAgICAgICAgbV90cmVl
LnRha2VBbGxDaGlsZHJlbihuZXdJdGVtLCAqZnVydGhlc3RCbG9jayk7CiAgICAgICAgIC8vIDEz
LgotICAgICAgICBtX3RyZWUucmVwYXJlbnQoKmZ1cnRoZXN0QmxvY2ssICpuZXdJdGVtKTsKKyAg
ICAgICAgbV90cmVlLnJlcGFyZW50KCpmdXJ0aGVzdEJsb2NrLCBuZXdJdGVtKTsKICAgICAgICAg
Ly8gMTQuCi0gICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS5zd2FwVG8o
Zm9ybWF0dGluZ0VsZW1lbnQsIG5ld0l0ZW0sIGJvb2ttYXJrKTsKKyAgICAgICAgbV90cmVlLmFj
dGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLnN3YXBUbygqZm9ybWF0dGluZ0VsZW1lbnQsIG5ld0l0
ZW0uY29weVJlZigpLCBib29rbWFyayk7CiAgICAgICAgIC8vIDE1LgotICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCkucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKLSAgICAgICAgbV90cmVl
Lm9wZW5FbGVtZW50cygpLmluc2VydEFib3ZlKG5ld0l0ZW0sIGZ1cnRoZXN0QmxvY2spOworICAg
ICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucmVtb3ZlKCpmb3JtYXR0aW5nRWxlbWVudCk7Cisg
ICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5pbnNlcnRBYm92ZShXVEZNb3ZlKG5ld0l0ZW0p
LCAqZnVydGhlc3RCbG9jayk7CiAgICAgfQogfQogCkBAIC0xNzk4LDE1ICsxNzk5LDE1IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZm9ybVRhZykgewogICAg
ICAgICBpZiAoIWlzUGFyc2luZ1RlbXBsYXRlQ29udGVudHMoKSkgewotICAgICAgICAgICAgUmVm
UHRyPEVsZW1lbnQ+IG5vZGUgPSBtX3RyZWUudGFrZUZvcm0oKTsKLSAgICAgICAgICAgIGlmICgh
bm9kZSB8fCAhbV90cmVlLm9wZW5FbGVtZW50cygpLmluU2NvcGUobm9kZS5nZXQoKSkpIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBmb3JtRWxlbWVudCA9IG1fdHJlZS50YWtlRm9ybSgp
OworICAgICAgICAgICAgaWYgKCFmb3JtRWxlbWVudCB8fCAhbV90cmVlLm9wZW5FbGVtZW50cygp
LmluU2NvcGUoKmZvcm1FbGVtZW50KSkgewogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9r
ZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7Ci0gICAgICAgICAgICBpZiAoJm1fdHJl
ZS5jdXJyZW50Tm9kZSgpICE9IG5vZGUuZ2V0KCkpCisgICAgICAgICAgICBpZiAoJm1fdHJlZS5j
dXJyZW50Tm9kZSgpICE9IGZvcm1FbGVtZW50LmdldCgpKQogICAgICAgICAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOwotICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnJlbW92ZShu
b2RlLmdldCgpKTsKKyAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5yZW1vdmUoKmZv
cm1FbGVtZW50KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICghbV90cmVlLm9w
ZW5FbGVtZW50cygpLmluU2NvcGUodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwpAQCAtMjIxMywxMSArMjIxNCwxMSBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0NvbW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgfHwg
bV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUwKICAgICAgICAgfHwg
bV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJCb2R5CiAgICAgICAg
IHx8IG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyRnJhbWVzZXQp
IHsKLSAgICAgICAgbV90cmVlLmluc2VydENvbW1lbnRPbkRvY3VtZW50KCZ0b2tlbik7CisgICAg
ICAgIG1fdHJlZS5pbnNlcnRDb21tZW50T25Eb2N1bWVudCh0b2tlbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgaWYgKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRl
ckJvZHkpIHsKLSAgICAgICAgbV90cmVlLmluc2VydENvbW1lbnRPbkhUTUxIdG1sRWxlbWVudCgm
dG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0Q29tbWVudE9uSFRNTEh0bWxFbGVtZW50KHRv
a2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9pbnNlcnRpb25Nb2RlID09
IEluc2VydGlvbk1vZGU6OkluVGFibGVUZXh0KSB7CkBAIC0yMjI1LDcgKzIyMjYsNyBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NvbW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgcHJvY2Vzc0NvbW1lbnQodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIG1fdHJlZS5pbnNlcnRDb21tZW50KCZ0b2tlbik7CisgICAgbV90cmVlLmluc2VydENvbW1l
bnQodG9rZW4pOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlcihB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQpAQCAtMjU4Myw3ICsyNTg0LDcgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbml0aWFsKCkKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZh
dWx0Rm9yQmVmb3JlSFRNTCgpCiB7CiAgICAgQXRvbWljSFRNTFRva2VuIHN0YXJ0SFRNTChIVE1M
VG9rZW46OlN0YXJ0VGFnLCBodG1sVGFnLmxvY2FsTmFtZSgpKTsKLSAgICBtX3RyZWUuaW5zZXJ0
SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoJnN0YXJ0SFRNTCk7CisgICAgbV90cmVlLmluc2Vy
dEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKHN0YXJ0SFRNTCk7CiAgICAgbV9pbnNlcnRpb25N
b2RlID0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZDsKIH0KIApAQCAtMjY0Miw3ICsyNjQzLDcg
QEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZChBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY29tbWFuZFRhZwog
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbGlua1RhZwogICAgICAgICB8fCB0b2tlbi5uYW1l
KCkgPT0gbWV0YVRhZykgewotICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxl
bWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVu
dCh0b2tlbik7CiAgICAgICAgIC8vIE5vdGU6IFRoZSBjdXN0b20gcHJvY2Vzc2luZyBmb3IgdGhl
IDxtZXRhPiB0YWcgaXMgZG9uZSBpbiBIVE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3MoKS4KICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjY1NSw3ICsyNjU2LDcgQEAgYm9vbCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZChBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgICAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcodG9rZW4pOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgbV90cmVlLmluc2VydEhU
TUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tl
bik7CiAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluSGVhZE5vc2Ny
aXB0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yNjg0LDcgKzI2ODUsNyBAQCBi
b29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNSQ0RBVEFT
dGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7Ci0gICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KCZ0b2tlbik7CisgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICBtX3Bh
cnNlci50b2tlbml6ZXIoKS5zZXRSQ0RBVEFTdGF0ZSgpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRp
b25Nb2RlID0gbV9pbnNlcnRpb25Nb2RlOwogICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlv
bk1vZGU6OlRleHQ7CkBAIC0yNjkzLDcgKzI2OTQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0dlbmVyaWNSQ0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46
OlN0YXJ0VGFnKTsKLSAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICBt
X3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgIG1fcGFyc2VyLnRva2VuaXplcigp
LnNldFJBV1RFWFRTdGF0ZSgpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNl
cnRpb25Nb2RlOwogICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OlRleHQ7CkBA
IC0yNzAyLDcgKzI3MDMsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNS
YXdUZXh0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAg
ICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwotICAgIG1fdHJl
ZS5pbnNlcnRTY3JpcHRFbGVtZW50KCZ0b2tlbik7CisgICAgbV90cmVlLmluc2VydFNjcmlwdEVs
ZW1lbnQodG9rZW4pOwogICAgIG1fcGFyc2VyLnRva2VuaXplcigpLnNldFNjcmlwdERhdGFTdGF0
ZSgpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2RlOwogCkBA
IC0yODI0LDcgKzI4MjUsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5G
b3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgYWRqdXN0
U1ZHQXR0cmlidXRlcyh0b2tlbik7CiAgICAgICAgIH0KICAgICAgICAgYWRqdXN0Rm9yZWlnbkF0
dHJpYnV0ZXModG9rZW4pOwotICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9yZWlnbkVsZW1lbnQoJnRv
a2VuLCBjdXJyZW50TmFtZXNwYWNlKTsKKyAgICAgICAgbV90cmVlLmluc2VydEZvcmVpZ25FbGVt
ZW50KHRva2VuLCBjdXJyZW50TmFtZXNwYWNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgSFRNTFRva2VuOjpFbmRUYWc6IHsKQEAgLTI4NDQsNyArMjg0NSw3IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAg
ICB3aGlsZSAoMSkgewogICAgICAgICAgICAgICAgIGlmIChub2RlUmVjb3JkLT5zdGFja0l0ZW0o
KS5sb2NhbE5hbWUoKSA9PSB0b2tlbi5uYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV90
cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGlsUG9wcGVkKCZub2RlUmVjb3JkLT5lbGVtZW50KCkp
OworICAgICAgICAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucG9wVW50aWxQb3Bw
ZWQobm9kZVJlY29yZC0+ZWxlbWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBub2RlUmVjb3JkID0gbm9kZVJlY29y
ZC0+bmV4dCgpOwpAQCAtMjg1OCw3ICsyODU5LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSFRNTFRva2VuOjpDb21tZW50OgotICAgICAgICBt
X3RyZWUuaW5zZXJ0Q29tbWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0Q29tbWVu
dCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEhUTUxUb2tlbjo6Q2hhcmFjdGVy
OiB7CiAgICAgICAgIFN0cmluZyBjaGFyYWN0ZXJzID0gU3RyaW5nKHRva2VuLmNoYXJhY3RlcnMo
KSwgdG9rZW4uY2hhcmFjdGVyc0xlbmd0aCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277940</attachid>
            <date>2016-05-02 15:16:41 -0700</date>
            <delta_ts>2016-05-02 15:17:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157279-20160502151719.patch</filename>
            <type>text/plain</type>
            <size>104816</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwMzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUyOGM0OTVjYzdlNGRh
ODI2ZDZmNmI3NjA1MjRmODk5ZjEzNWYxZS4uM2ZlODBjNmFhOTZiN2E0NmE5YjUwMzMwYjY5YzUz
NTA4MGQ1ZTBmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAxNi0wNS0wMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSBIVE1MQ29u
c3RydWN0aW9uU2l0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU3Mjc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKwor
ICAgICAgICBNb2Rlcm5pemUgSFRNTENvbnN0cnVjdGlvblNpdGU6IFVzZSBsZXNzIHJhdyBwb2lu
dGVycywgbW9yZSBhdXRvLCBtb3JlCisgICAgICAgIHJhbmdlIGxvb3BzIGFuZCBtb3JlIG51bGxw
dHIuCisKKyAgICAgICAgKiBkb20vU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVXNlTGVuZ3RoTGltaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZVJlcGFyZW50VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoTGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENv
bnN0cnVjdGlvblNpdGU6OmV4ZWN1dGVRdWV1ZWRUYXNrcyk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OnRha2VGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZUlm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRI
VE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdJ
bkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhU
TUxCb2R5U3RhcnRUYWdJbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlv
blNpdGU6OnNldERlZmF1bHRDb21wYXRpYmlsaXR5TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6c2V0Q29tcGF0aWJpbGl0eU1vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmZpbmlzaGVkUGFyc2luZyk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnRPbkhU
TUxIdG1sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0SFRNTEhlYWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRIVE1MQm9keUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxGb3JtRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxFbGVtZW50T3JGaW5kQ3VzdG9t
RWxlbWVudEludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6aW5zZXJ0Q3VzdG9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcmVpZ25FbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6cmVwYXJlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEFscmVhZHlQ
YXJzZWRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6dGFr
ZUFsbENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpj
cmVhdGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpj
cmVhdGVIVE1MRWxlbWVudE9yRmluZEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50RnJvbVNhdmVk
VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmluZGV4T2ZG
aXJzdFVub3BlbkZvcm1hdHRpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6ZmluZEZvc3RlclNpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OnNob3VsZEZvc3RlclBhcmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Zm9zdGVyUGFyZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjp+SFRNTENvbnN0cnVj
dGlvblNpdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNp
dGU6OnNldEZvcm0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlv
blNpdGU6OnNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Om93bmVyRG9jdW1lbnRGb3JDdXJyZW50
Tm9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
Z2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24pOiBEZWxldGVkLgorICAgICAgICAq
IGh0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5RdWlya3NNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppc1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpSZWRpcmVjdFRvRm9zdGVyUGFy
ZW50R3VhcmQ6OlJlZGlyZWN0VG9Gb3N0ZXJQYXJlbnRHdWFyZCk6CisgICAgICAgICogaHRtbC9w
YXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZXM6
OmlzUm9vdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVu
dFJlY29yZDo6RWxlbWVudFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkOjpyZXBsYWNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjppc0Fib3ZlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxFbGVtZW50U3RhY2s6OnBvcEFsbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxl
bWVudFN0YWNrOjpwb3BVbnRpbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNr
Ojpwb3BVbnRpbFBvcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpw
dXNoUm9vdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVzaEhU
TUxIdG1sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwdXNo
Um9vdE5vZGVDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cHVz
aEhUTUxIZWFkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpw
dXNoSFRNTEJvZHlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6
OnB1c2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlSFRNTEhlYWRFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpjb250YWlucyk6CisgICAgICAgIChXZWJD
b3JlOjppblNjb3BlQ29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6
Omhhc051bWJlcmVkSGVhZGVyRWxlbWVudEluU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnRTdGFjazo6aW5TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0
YWNrOjpwdXNoQ29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnBv
cENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVOb25U
b3BDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6c2hvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpoYXNPbmx5T25lRWxlbWVudCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpzZWNvbmRFbGVtZW50
SXNIVE1MQm9keUVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1l
bnRTdGFjazo6cG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3Rh
Y2s6OnBvcFVudGlsVGFibGVTY29wZU1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudFN0YWNrOjpvbmVCZWxvd1RvcCk6IERlbGV0ZWQuCisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1l
bnRTdGFjazo6RWxlbWVudFJlY29yZDo6c3RhY2tJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OnNldE5leHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cG9wVW50aWxQb3BwZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Y29udGFpbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c3dhcFRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmFwcGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpyZW1vdmUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6dHJ5VG9FbnN1cmVOb2Foc0Fya0Nv
bmRpdGlvblF1aWNrbHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50
TGlzdDo6ZW5zdXJlTm9haHNBcmtDb25kaXRpb24pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3Q6OkVudHJ5OjpFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeTo6cmVwbGFjZUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Qm9va21hcms6OkJvb2ttYXJrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkJvb2ttYXJrOjptb3Zl
VG9BZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpC
b29rbWFyazo6bWFyayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRM
aXN0OjpmaXJzdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
OjpFbnRyeTo6aXNNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1h
dHRpbmdFbGVtZW50TGlzdDo6RW50cnk6OnN0YWNrSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeTo6b3BlcmF0b3IhPSk6IERl
bGV0ZWQuCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RvY3R5cGVUb2tlbik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWcp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
bkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjppbnNlcnRHZW5lcmlj
SFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
VGVtcGxhdGVTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NTdGFydFRhZ0ZvckluVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQm9keSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDb21tZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckJlZm9yZUhUTUwpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1JDREFUQVN0
YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVy
aWNSYXdUZXh0U3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU2NyaXB0U3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KToKKwogMjAxNi0wNS0wMiAgWW9hdiBXZWlz
cyAgPHlvYXZAeW9hdi53cz4KIAogICAgICAgICBTcGVjdWxhdGl2ZWx5IGZpeCB0aGUgY21ha2Ug
YnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCmluZGV4IGNkNGZiZDBlMjljMzFkN2Mw
MjFhMmFmNjM4M2JmMDQwYjI5ZTYxYTEuLjY0ODMxN2UxMWVjZmJmYTcyMGU4YmE0NTY5NTg2ZDll
NzZhNWZlMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaApAQCAtMTEyLDYgKzExMiw3
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZmFsbGJhY2tDaGFyYWN0ZXJFbmNvZGluZzsKIH07
CiAKKy8vIEZJWE1FOiByZXBsYWNlIHdpdGggZG93bmNhc3Q8U2NyaXB0RWxlbWVudD4uCiBTY3Jp
cHRFbGVtZW50KiB0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKEVsZW1lbnQqKTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3Bw
CmluZGV4IDg5YTdjMGZkMjcxMDI1NTUwYzE4Njk1ZjJkZDQyYjc1YzA1NmIxYTEuLmZkMTgyOGZi
MzJjNjdhMjBmNDNlZTdkNGFkOTUzN2EyMjNjNzNhOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKQEAgLTYwLDkgKzYwLDkg
QEAgc3RhdGljIGlubGluZSB2b2lkIHNldEF0dHJpYnV0ZXMoRWxlbWVudCYgZWxlbWVudCwgVmVj
dG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMKICAgICBlbGVtZW50LnBhcnNlclNldEF0dHJpYnV0
ZXMoYXR0cmlidXRlcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRBdHRyaWJ1dGVzKEVs
ZW1lbnQmIGVsZW1lbnQsIEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIFBhcnNlckNvbnRlbnRQb2xp
Y3kgcGFyc2VyQ29udGVudFBvbGljeSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRBdHRyaWJ1dGVz
KEVsZW1lbnQmIGVsZW1lbnQsIEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIFBhcnNlckNvbnRlbnRQ
b2xpY3kgcGFyc2VyQ29udGVudFBvbGljeSkKIHsKLSAgICBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQs
IHRva2VuLT5hdHRyaWJ1dGVzKCksIHBhcnNlckNvbnRlbnRQb2xpY3kpOworICAgIHNldEF0dHJp
YnV0ZXMoZWxlbWVudCwgdG9rZW4uYXR0cmlidXRlcygpLCBwYXJzZXJDb250ZW50UG9saWN5KTsK
IH0KIAogc3RhdGljIGJvb2wgaGFzSW1wbGllZEVuZFRhZyhjb25zdCBIVE1MU3RhY2tJdGVtJiBp
dGVtKQpAQCAtNzksMTEgKzc5LDkgQEAgc3RhdGljIGJvb2wgaGFzSW1wbGllZEVuZFRhZyhjb25z
dCBIVE1MU3RhY2tJdGVtJiBpdGVtKQogICAgICAgICB8fCBpdGVtLmhhc1RhZ05hbWUocnRjVGFn
KTsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkVXNlTGVuZ3RoTGltaXQoY29uc3QgQ29udGFpbmVy
Tm9kZSogbm9kZSkKK3N0YXRpYyBib29sIHNob3VsZFVzZUxlbmd0aExpbWl0KGNvbnN0IENvbnRh
aW5lck5vZGUmIG5vZGUpCiB7Ci0gICAgcmV0dXJuICFub2RlLT5oYXNUYWdOYW1lKHNjcmlwdFRh
ZykKLSAgICAgICAgJiYgIW5vZGUtPmhhc1RhZ05hbWUoc3R5bGVUYWcpCi0gICAgICAgICYmICFu
b2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzY3JpcHRUYWcpOworICAgIHJldHVybiAhbm9kZS5o
YXNUYWdOYW1lKHNjcmlwdFRhZykgJiYgIW5vZGUuaGFzVGFnTmFtZShzdHlsZVRhZykgJiYgIW5v
ZGUuaGFzVGFnTmFtZShTVkdOYW1lczo6c2NyaXB0VGFnKTsKIH0KIAogc3RhdGljIGlubGluZSBi
b29sIGNhdXNlc0Zvc3RlclBhcmVudGluZyhjb25zdCBIVE1MU3RhY2tJdGVtJiBpdGVtKQpAQCAt
MTMwLDcgKzEyOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBleGVjdXRlUmVwYXJlbnRUYXNrKEhU
TUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYgdGFzaykKIHsKICAgICBBU1NFUlQodGFzay5vcGVyYXRp
b24gPT0gSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrOjpSZXBhcmVudCk7CiAKLSAgICBpZiAoQ29u
dGFpbmVyTm9kZSogcGFyZW50ID0gdGFzay5jaGlsZC0+cGFyZW50Tm9kZSgpKQorICAgIGlmIChh
dXRvKiBwYXJlbnQgPSB0YXNrLmNoaWxkLT5wYXJlbnROb2RlKCkpCiAgICAgICAgIHBhcmVudC0+
cGFyc2VyUmVtb3ZlQ2hpbGQoKnRhc2suY2hpbGQpOwogCiAgICAgdGFzay5wYXJlbnQtPnBhcnNl
ckFwcGVuZENoaWxkKCp0YXNrLmNoaWxkKTsKQEAgLTE3Miw3OSArMTcwLDcyIEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBleGVjdXRlVGFzayhIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2smIHRhc2spCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6
OmF0dGFjaExhdGVyKENvbnRhaW5lck5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxOb2RlPiBwcnBD
aGlsZCwgYm9vbCBzZWxmQ2xvc2luZykKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFj
aExhdGVyKENvbnRhaW5lck5vZGUmIHBhcmVudCwgUmVmPE5vZGU+JiYgY2hpbGQsIGJvb2wgc2Vs
ZkNsb3NpbmcpCiB7Ci0gICAgQVNTRVJUKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV9wYXJz
ZXJDb250ZW50UG9saWN5KSB8fCAhaXM8RWxlbWVudD4oKnBycENoaWxkKSB8fCAhdG9TY3JpcHRF
bGVtZW50SWZQb3NzaWJsZShkb3duY2FzdDxFbGVtZW50PihwcnBDaGlsZC5nZXQoKSkpKTsKLSAg
ICBBU1NFUlQocGx1Z2luQ29udGVudElzQWxsb3dlZChtX3BhcnNlckNvbnRlbnRQb2xpY3kpIHx8
ICFwcnBDaGlsZC0+aXNQbHVnaW5FbGVtZW50KCkpOwotCi0gICAgSFRNTENvbnN0cnVjdGlvblNp
dGVUYXNrIHRhc2soSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrOjpJbnNlcnQpOwotICAgIHRhc2su
cGFyZW50ID0gcGFyZW50OwotICAgIHRhc2suY2hpbGQgPSBwcnBDaGlsZDsKLSAgICB0YXNrLnNl
bGZDbG9zaW5nID0gc2VsZkNsb3Npbmc7CisgICAgQVNTRVJUKHNjcmlwdGluZ0NvbnRlbnRJc0Fs
bG93ZWQobV9wYXJzZXJDb250ZW50UG9saWN5KSB8fCAhaXM8RWxlbWVudD4oY2hpbGQuZ2V0KCkp
IHx8ICF0b1NjcmlwdEVsZW1lbnRJZlBvc3NpYmxlKGRvd25jYXN0PEVsZW1lbnQ+KGNoaWxkLnB0
cigpKSkpOworICAgIEFTU0VSVChwbHVnaW5Db250ZW50SXNBbGxvd2VkKG1fcGFyc2VyQ29udGVu
dFBvbGljeSkgfHwgIWNoaWxkLT5pc1BsdWdpbkVsZW1lbnQoKSk7CiAKICAgICBpZiAoc2hvdWxk
Rm9zdGVyUGFyZW50KCkpIHsKLSAgICAgICAgZm9zdGVyUGFyZW50KHRhc2suY2hpbGQpOworICAg
ICAgICBmb3N0ZXJQYXJlbnQoV1RGTW92ZShjaGlsZCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrIHRhc2soSFRNTENvbnN0cnVjdGlvblNp
dGVUYXNrOjpJbnNlcnQpOworICAgIHRhc2sucGFyZW50ID0gJnBhcmVudDsKKyAgICB0YXNrLmNo
aWxkID0gV1RGTW92ZShjaGlsZCk7CisgICAgdGFzay5zZWxmQ2xvc2luZyA9IHNlbGZDbG9zaW5n
OworCiAgICAgLy8gQWRkIGFzIGEgc2libGluZyBvZiB0aGUgcGFyZW50IGlmIHdlIGhhdmUgcmVh
Y2hlZCB0aGUgbWF4aW11bSBkZXB0aCBhbGxvd2VkLgogICAgIGlmIChtX29wZW5FbGVtZW50cy5z
dGFja0RlcHRoKCkgPiBtX21heGltdW1ET01UcmVlRGVwdGggJiYgdGFzay5wYXJlbnQtPnBhcmVu
dE5vZGUoKSkKICAgICAgICAgdGFzay5wYXJlbnQgPSB0YXNrLnBhcmVudC0+cGFyZW50Tm9kZSgp
OwogCiAgICAgQVNTRVJUKHRhc2sucGFyZW50KTsKLSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFz
ayk7CisgICAgbV90YXNrUXVldWUuYXBwZW5kKFdURk1vdmUodGFzaykpOwogfQogCiB2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjpleGVjdXRlUXVldWVkVGFza3MoKQogewotICAgIGNvbnN0IHNp
emVfdCBzaXplID0gbV90YXNrUXVldWUuc2l6ZSgpOwotICAgIGlmICghc2l6ZSkKKyAgICBpZiAo
bV90YXNrUXVldWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDb3B5IHRo
ZSB0YXNrIHF1ZXVlIGludG8gYSBsb2NhbCB2YXJpYWJsZSBpbiBjYXNlIGV4ZWN1dGVUYXNrCiAg
ICAgLy8gcmUtZW50ZXJzIHRoZSBwYXJzZXIuCiAgICAgVGFza1F1ZXVlIHF1ZXVlID0gV1RGTW92
ZShtX3Rhc2tRdWV1ZSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgZXhlY3V0ZVRhc2socXVldWVbaV0pOworICAgIGZvciAoYXV0byYgdGFzayA6IHF1
ZXVlKQorICAgICAgICBleGVjdXRlVGFzayh0YXNrKTsKIAogICAgIC8vIFdlIG1pZ2h0IGJlIGRl
dGFjaGVkIG5vdy4KIH0KIAogSFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlKERvY3VtZW50JiBkb2N1bWVudCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50
UG9saWN5LCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQotICAgIDogbV9kb2N1bWVudCgm
ZG9jdW1lbnQpCi0gICAgLCBtX2F0dGFjaG1lbnRSb290KCZkb2N1bWVudCkKKyAgICA6IG1fZG9j
dW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2F0dGFjaG1lbnRSb290KGRvY3VtZW50KQogICAgICwg
bV9wYXJzZXJDb250ZW50UG9saWN5KHBhcnNlckNvbnRlbnRQb2xpY3kpCiAgICAgLCBtX2lzUGFy
c2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50
KGZhbHNlKQogICAgICwgbV9tYXhpbXVtRE9NVHJlZURlcHRoKG1heGltdW1ET01UcmVlRGVwdGgp
CiAgICAgLCBtX2luUXVpcmtzTW9kZShkb2N1bWVudC5pblF1aXJrc01vZGUoKSkKIHsKLSAgICBB
U1NFUlQobV9kb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSB8fCBtX2RvY3VtZW50LT5pc1hIVE1M
RG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKG1fZG9jdW1lbnQuaXNIVE1MRG9jdW1lbnQoKSB8fCBt
X2RvY3VtZW50LmlzWEhUTUxEb2N1bWVudCgpKTsKIH0KIAogSFRNTENvbnN0cnVjdGlvblNpdGU6
OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBQYXJzZXJD
b250ZW50UG9saWN5IHBhcnNlckNvbnRlbnRQb2xpY3ksIHVuc2lnbmVkIG1heGltdW1ET01UcmVl
RGVwdGgpCi0gICAgOiBtX2RvY3VtZW50KCZmcmFnbWVudC5kb2N1bWVudCgpKQotICAgICwgbV9h
dHRhY2htZW50Um9vdCgmZnJhZ21lbnQpCisgICAgOiBtX2RvY3VtZW50KGZyYWdtZW50LmRvY3Vt
ZW50KCkpCisgICAgLCBtX2F0dGFjaG1lbnRSb290KGZyYWdtZW50KQogICAgICwgbV9wYXJzZXJD
b250ZW50UG9saWN5KHBhcnNlckNvbnRlbnRQb2xpY3kpCiAgICAgLCBtX2lzUGFyc2luZ0ZyYWdt
ZW50KHRydWUpCiAgICAgLCBtX3JlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQoZmFsc2UpCiAg
ICAgLCBtX21heGltdW1ET01UcmVlRGVwdGgobWF4aW11bURPTVRyZWVEZXB0aCkKICAgICAsIG1f
aW5RdWlya3NNb2RlKGZyYWdtZW50LmRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpCiB7Ci0gICAg
QVNTRVJUKG1fZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkgfHwgbV9kb2N1bWVudC0+aXNYSFRN
TERvY3VtZW50KCkpOworICAgIEFTU0VSVChtX2RvY3VtZW50LmlzSFRNTERvY3VtZW50KCkgfHwg
bV9kb2N1bWVudC5pc1hIVE1MRG9jdW1lbnQoKSk7CiB9CiAKIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
Ojp+SFRNTENvbnN0cnVjdGlvblNpdGUoKQogewogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpkZXRhY2goKQotewotICAgIG1fZG9jdW1lbnQgPSAwOwotICAgIG1fYXR0YWNobWVudFJv
b3QgPSAwOwotfQotCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpzZXRGb3JtKEhUTUxGb3Jt
RWxlbWVudCogZm9ybSkKIHsKICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBuZWVk
ZWQgZm9yIEhUTUxUcmVlQnVpbGRlciBpbiB0aGUgZnJhZ21lbnQgY2FzZS4KQEAgLTI1Miw2MSAr
MjQzLDYzIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OnNldEZvcm0oSFRNTEZvcm1FbGVt
ZW50KiBmb3JtKQogICAgIG1fZm9ybSA9IGZvcm07CiB9CiAKLVBhc3NSZWZQdHI8SFRNTEZvcm1F
bGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6dGFrZUZvcm0oKQorUmVmUHRyPEhUTUxGb3Jt
RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OnRha2VGb3JtKCkKIHsKLSAgICByZXR1cm4g
bV9mb3JtLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gV1RGTW92ZShtX2Zvcm0pOwogfQogCiB2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZUlm
TmVlZGVkKCkKIHsKLSAgICBBU1NFUlQobV9kb2N1bWVudCk7Ci0gICAgaWYgKG1fZG9jdW1lbnQt
PmZyYW1lKCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCi0gICAgICAgIG1fZG9jdW1lbnQtPmZy
YW1lKCktPmluamVjdFVzZXJTY3JpcHRzKEluamVjdEF0RG9jdW1lbnRTdGFydCk7CisgICAgaWYg
KG1faXNQYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvKiBm
cmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKSkKKyAgICAgICAgZnJhbWUtPmluamVjdFVzZXJTY3Jp
cHRzKEluamVjdEF0RG9jdW1lbnRTdGFydCk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiogdG9r
ZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVm
b3JlSFRNTChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIFJlZjxIVE1MSHRtbEVsZW1l
bnQ+IGVsZW1lbnQgPSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZSgqbV9kb2N1bWVudCk7Ci0gICAg
c2V0QXR0cmlidXRlcyhlbGVtZW50LmdldCgpLCB0b2tlbiwgbV9wYXJzZXJDb250ZW50UG9saWN5
KTsKLSAgICBhdHRhY2hMYXRlcihtX2F0dGFjaG1lbnRSb290LCBlbGVtZW50LnB0cigpKTsKLSAg
ICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEh0bWxFbGVtZW50KEhUTUxTdGFja0l0ZW06OmNyZWF0
ZShlbGVtZW50LmNvcHlSZWYoKSwgKnRva2VuKSk7CisgICAgYXV0byBlbGVtZW50ID0gSFRNTEh0
bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7CisgICAgc2V0QXR0cmlidXRlcyhlbGVtZW50
LCB0b2tlbiwgbV9wYXJzZXJDb250ZW50UG9saWN5KTsKKyAgICBhdHRhY2hMYXRlcihtX2F0dGFj
aG1lbnRSb290LCBlbGVtZW50LmNvcHlSZWYoKSk7CisgICAgbV9vcGVuRWxlbWVudHMucHVzaEhU
TUxIdG1sRWxlbWVudChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoZWxlbWVudC5jb3B5UmVmKCksIHRv
a2VuKSk7CiAKICAgICBleGVjdXRlUXVldWVkVGFza3MoKTsKICAgICBlbGVtZW50LT5pbnNlcnRl
ZEJ5UGFyc2VyKCk7CiAgICAgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5lZWRl
ZCgpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9t
VG9rZW5JbnRvRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBFbGVtZW50KiBlbGVtZW50
KQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50
b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbiwgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAg
ICBpZiAodG9rZW4tPmF0dHJpYnV0ZXMoKS5pc0VtcHR5KCkpCisgICAgaWYgKHRva2VuLmF0dHJp
YnV0ZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byYgdG9r
ZW5BdHRyaWJ1dGUgOiB0b2tlbi0+YXR0cmlidXRlcygpKSB7Ci0gICAgICAgIGlmICghZWxlbWVu
dC0+ZWxlbWVudERhdGEoKSB8fCAhZWxlbWVudC0+ZmluZEF0dHJpYnV0ZUJ5TmFtZSh0b2tlbkF0
dHJpYnV0ZS5uYW1lKCkpKQotICAgICAgICAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKHRva2Vu
QXR0cmlidXRlLm5hbWUoKSwgdG9rZW5BdHRyaWJ1dGUudmFsdWUoKSk7CisgICAgZm9yIChhdXRv
JiB0b2tlbkF0dHJpYnV0ZSA6IHRva2VuLmF0dHJpYnV0ZXMoKSkgeworICAgICAgICBpZiAoIWVs
ZW1lbnQuZWxlbWVudERhdGEoKSB8fCAhZWxlbWVudC5maW5kQXR0cmlidXRlQnlOYW1lKHRva2Vu
QXR0cmlidXRlLm5hbWUoKSkpCisgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSh0b2tl
bkF0dHJpYnV0ZS5uYW1lKCksIHRva2VuQXR0cmlidXRlLnZhbHVlKCkpOwogICAgIH0KIH0KIAot
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keShB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
SFRNTEh0bWxTdGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIC8v
IEZyYWdtZW50cyBkbyBub3QgaGF2ZSBhIHJvb3QgSFRNTCBlbGVtZW50LCBzbyBhbnkgYWRkaXRp
b25hbCBIVE1MIGVsZW1lbnRzCiAgICAgLy8gZW5jb3VudGVyZWQgZHVyaW5nIGZyYWdtZW50IHBh
cnNpbmcgc2hvdWxkIGJlIGlnbm9yZWQuCiAgICAgaWYgKG1faXNQYXJzaW5nRnJhZ21lbnQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50
KHRva2VuLCAmbV9vcGVuRWxlbWVudHMuaHRtbEVsZW1lbnQoKSk7CisgICAgbWVyZ2VBdHRyaWJ1
dGVzRnJvbVRva2VuSW50b0VsZW1lbnQodG9rZW4sIG1fb3BlbkVsZW1lbnRzLmh0bWxFbGVtZW50
KCkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keVN0YXJ0
VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiB7Ci0gICAgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQodG9rZW4sICZtX29w
ZW5FbGVtZW50cy5ib2R5RWxlbWVudCgpKTsKKyAgICBtZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5J
bnRvRWxlbWVudCh0b2tlbiwgbV9vcGVuRWxlbWVudHMuYm9keUVsZW1lbnQoKSk7CiB9CiAKIHZv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OnNldERlZmF1bHRDb21wYXRpYmlsaXR5TW9kZSgpCiB7
CiAgICAgaWYgKG1faXNQYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAo
bV9kb2N1bWVudC0+aXNTcmNkb2NEb2N1bWVudCgpKQorICAgIGlmIChtX2RvY3VtZW50LmlzU3Jj
ZG9jRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHNldENvbXBhdGliaWxpdHlNb2Rl
KERvY3VtZW50Q29tcGF0aWJpbGl0eU1vZGU6OlF1aXJrc01vZGUpOwogfQpAQCAtMzE0LDcgKzMw
Nyw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OnNldERlZmF1bHRDb21wYXRpYmlsaXR5
TW9kZSgpCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpzZXRDb21wYXRpYmlsaXR5TW9kZShE
b2N1bWVudENvbXBhdGliaWxpdHlNb2RlIG1vZGUpCiB7CiAgICAgbV9pblF1aXJrc01vZGUgPSAo
bW9kZSA9PSBEb2N1bWVudENvbXBhdGliaWxpdHlNb2RlOjpRdWlya3NNb2RlKTsKLSAgICBtX2Rv
Y3VtZW50LT5zZXRDb21wYXRpYmlsaXR5TW9kZShtb2RlKTsKKyAgICBtX2RvY3VtZW50LnNldENv
bXBhdGliaWxpdHlNb2RlKG1vZGUpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpz
ZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCkKQEAgLTQwNywxOCArNDAw
LDE3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OnNldENvbXBhdGliaWxpdHlNb2RlRnJv
bURvY3R5cGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjCiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6OmZpbmlzaGVkUGFyc2luZygpCiB7Ci0gICAgbV9kb2N1bWVudC0+ZmluaXNoZWRQYXJzaW5n
KCk7CisgICAgbV9kb2N1bWVudC5maW5pc2hlZFBhcnNpbmcoKTsKIH0KIAotdm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQordm9p
ZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZShBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogewotICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6RE9DVFlQRSk7
CisgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkRPQ1RZUEUpOwogCi0gICAg
U3RyaW5nIHB1YmxpY0lkID0gdG9rZW4tPnB1YmxpY0lkZW50aWZpZXIoKTsKLSAgICBTdHJpbmcg
c3lzdGVtSWQgPSB0b2tlbi0+c3lzdGVtSWRlbnRpZmllcigpOworICAgIFN0cmluZyBwdWJsaWNJ
ZCA9IHRva2VuLnB1YmxpY0lkZW50aWZpZXIoKTsKKyAgICBTdHJpbmcgc3lzdGVtSWQgPSB0b2tl
bi5zeXN0ZW1JZGVudGlmaWVyKCk7CiAKLSAgICBSZWZQdHI8RG9jdW1lbnRUeXBlPiBkb2N0eXBl
ID0gRG9jdW1lbnRUeXBlOjpjcmVhdGUoKm1fZG9jdW1lbnQsIHRva2VuLT5uYW1lKCksIHB1Ymxp
Y0lkLCBzeXN0ZW1JZCk7Ci0gICAgYXR0YWNoTGF0ZXIobV9hdHRhY2htZW50Um9vdCwgZG9jdHlw
ZS5yZWxlYXNlKCkpOworICAgIGF0dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3QsIERvY3VtZW50
VHlwZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2VuLm5hbWUoKSwgcHVibGljSWQsIHN5c3RlbUlk
KSk7CiAKICAgICAvLyBET0NUWVBFIG5vZGVzIGFyZSBvbmx5IHByb2Nlc3NlZCB3aGVuIHBhcnNp
bmcgZnJhZ21lbnRzIHcvbyBjb250ZXh0RWxlbWVudHMsIHdoaWNoCiAgICAgLy8gbmV2ZXIgb2Nj
dXJzLiAgSG93ZXZlciwgaWYgd2UgZXZlciBjaG9zZSB0byBzdXBwb3J0IHN1Y2gsIHRoaXMgY29k
ZSBpcyBzdWJ0bHkgd3JvbmcsCkBAIC00MjksMTA2ICs0MjEsMTA3IEBAIHZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICBp
ZiAobV9pc1BhcnNpbmdGcmFnbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHRva2Vu
LT5mb3JjZVF1aXJrcygpKQorICAgIGlmICh0b2tlbi5mb3JjZVF1aXJrcygpKQogICAgICAgICBz
ZXRDb21wYXRpYmlsaXR5TW9kZShEb2N1bWVudENvbXBhdGliaWxpdHlNb2RlOjpRdWlya3NNb2Rl
KTsKICAgICBlbHNlCi0gICAgICAgIHNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUodG9r
ZW4tPm5hbWUoKSwgcHVibGljSWQsIHN5c3RlbUlkKTsKKyAgICAgICAgc2V0Q29tcGF0aWJpbGl0
eU1vZGVGcm9tRG9jdHlwZSh0b2tlbi5uYW1lKCksIHB1YmxpY0lkLCBzeXN0ZW1JZCk7CiB9CiAK
LXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnQoQXRvbWljSFRNTFRva2Vu
KiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnQoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9r
ZW46OkNvbW1lbnQpOwotICAgIGF0dGFjaExhdGVyKCZjdXJyZW50Tm9kZSgpLCBDb21tZW50Ojpj
cmVhdGUob3duZXJEb2N1bWVudEZvckN1cnJlbnROb2RlKCksIHRva2VuLT5jb21tZW50KCkpKTsK
KyAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6Q29tbWVudCk7CisgICAgYXR0
YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgQ29tbWVudDo6Y3JlYXRlKG93bmVyRG9jdW1lbnRGb3JD
dXJyZW50Tm9kZSgpLCB0b2tlbi5jb21tZW50KCkpKTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikK
K3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnRPbkRvY3VtZW50KEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRv
a2VuOjpDb21tZW50KTsKLSAgICBhdHRhY2hMYXRlcihtX2F0dGFjaG1lbnRSb290LCBDb21tZW50
OjpjcmVhdGUoKm1fZG9jdW1lbnQsIHRva2VuLT5jb21tZW50KCkpKTsKKyAgICBBU1NFUlQodG9r
ZW4udHlwZSgpID09IEhUTUxUb2tlbjo6Q29tbWVudCk7CisgICAgYXR0YWNoTGF0ZXIobV9hdHRh
Y2htZW50Um9vdCwgQ29tbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2VuLmNvbW1lbnQoKSkp
OwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25IVE1MSHRt
bEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydENvbW1lbnRPbkhUTUxIdG1sRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogewotICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6Q29tbWVudCk7Cisg
ICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkNvbW1lbnQpOwogICAgIENvbnRh
aW5lck5vZGUmIHBhcmVudCA9IG1fb3BlbkVsZW1lbnRzLnJvb3ROb2RlKCk7Ci0gICAgYXR0YWNo
TGF0ZXIoJnBhcmVudCwgQ29tbWVudDo6Y3JlYXRlKHBhcmVudC5kb2N1bWVudCgpLCB0b2tlbi0+
Y29tbWVudCgpKSk7CisgICAgYXR0YWNoTGF0ZXIocGFyZW50LCBDb21tZW50OjpjcmVhdGUocGFy
ZW50LmRvY3VtZW50KCksIHRva2VuLmNvbW1lbnQoKSkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikK
K3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIZWFkRWxlbWVudChBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogewogICAgIEFTU0VSVCghc2hvdWxkRm9zdGVyUGFyZW50KCkpOwot
ICAgIG1faGVhZCA9IEhUTUxTdGFja0l0ZW06OmNyZWF0ZShjcmVhdGVIVE1MRWxlbWVudCh0b2tl
biksICp0b2tlbik7Ci0gICAgYXR0YWNoTGF0ZXIoJmN1cnJlbnROb2RlKCksICZtX2hlYWQtPmVs
ZW1lbnQoKSk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxIZWFkRWxlbWVudChtX2hlYWQp
OworICAgIG1faGVhZCA9IEhUTUxTdGFja0l0ZW06OmNyZWF0ZShjcmVhdGVIVE1MRWxlbWVudCh0
b2tlbiksIHRva2VuKTsKKyAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBtX2hlYWQtPmVs
ZW1lbnQoKSk7CisgICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxIZWFkRWxlbWVudCgqbV9oZWFk
KTsKIH0KIAotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJvZHlFbGVtZW50
KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBBU1NFUlQo
IXNob3VsZEZvc3RlclBhcmVudCgpKTsKLSAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IGNyZWF0
ZUhUTUxFbGVtZW50KHRva2VuKTsKLSAgICBhdHRhY2hMYXRlcigmY3VycmVudE5vZGUoKSwgYm9k
eS5nZXQoKSk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxCb2R5RWxlbWVudChIVE1MU3Rh
Y2tJdGVtOjpjcmVhdGUoYm9keS5yZWxlYXNlTm9uTnVsbCgpLCAqdG9rZW4pKTsKKyAgICBhdXRv
IGJvZHkgPSBjcmVhdGVIVE1MRWxlbWVudCh0b2tlbik7CisgICAgYXR0YWNoTGF0ZXIoY3VycmVu
dE5vZGUoKSwgYm9keS5jb3B5UmVmKCkpOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MQm9k
eUVsZW1lbnQoSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKFdURk1vdmUoYm9keSksIHRva2VuKSk7CiB9
CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxGb3JtRWxlbWVudChBdG9t
aWNIVE1MVG9rZW4qIHRva2VuLCBib29sIGlzRGVtb3RlZCkKK3ZvaWQgSFRNTENvbnN0cnVjdGlv
blNpdGU6Omluc2VydEhUTUxGb3JtRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBib29s
IGlzRGVtb3RlZCkKIHsKLSAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUhUTUxF
bGVtZW50KHRva2VuKTsKLSAgICBBU1NFUlQoaXM8SFRNTEZvcm1FbGVtZW50PigqZWxlbWVudCkp
OwotICAgIG1fZm9ybSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8SFRNTEZvcm1FbGVtZW50PihlbGVt
ZW50LnJlbGVhc2UoKSk7CisgICAgYXV0byBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9r
ZW4pOworICAgIG1fZm9ybSA9ICZkb3duY2FzdDxIVE1MRm9ybUVsZW1lbnQ+KGVsZW1lbnQuZ2V0
KCkpOwogICAgIG1fZm9ybS0+c2V0RGVtb3RlZChpc0RlbW90ZWQpOwotICAgIGF0dGFjaExhdGVy
KCZjdXJyZW50Tm9kZSgpLCBtX2Zvcm0pOwotICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0
YWNrSXRlbTo6Y3JlYXRlKCptX2Zvcm0sICp0b2tlbikpOworICAgIGF0dGFjaExhdGVyKGN1cnJl
bnROb2RlKCksICptX2Zvcm0pOworICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRl
bTo6Y3JlYXRlKCptX2Zvcm0sIHRva2VuKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogewotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9r
ZW4pOwotICAgIGF0dGFjaExhdGVyKCZjdXJyZW50Tm9kZSgpLCBlbGVtZW50KTsKLSAgICBtX29w
ZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShlbGVtZW50LnJlbGVhc2VOb25O
dWxsKCksICp0b2tlbikpOworICAgIGF1dG8gZWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KHRv
a2VuKTsKKyAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBlbGVtZW50LmNvcHlSZWYoKSk7
CisgICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoV1RGTW92ZShl
bGVtZW50KSwgdG9rZW4pKTsKIH0KIAogI2lmIEVOQUJMRShDVVNUT01fRUxFTUVOVFMpCi1KU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2UqIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRWxl
bWVudE9yRmluZEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UoQXRvbWljSFRNTFRva2VuKiB0b2tlbikK
KworSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
SFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJmYWNlKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiB7CiAgICAgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlKiBpbnRlcmZhY2UgPSBudWxs
cHRyOwogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnRPckZp
bmRDdXN0b21FbGVtZW50SW50ZXJmYWNlKHRva2VuLCAmaW50ZXJmYWNlKTsKICAgICBpZiAoVU5M
SUtFTFkoaW50ZXJmYWNlKSkKICAgICAgICAgcmV0dXJuIGludGVyZmFjZTsKLSAgICBhdHRhY2hM
YXRlcigmY3VycmVudE5vZGUoKSwgZWxlbWVudCk7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaChI
VE1MU3RhY2tJdGVtOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlTm9uTnVsbCgpLCAqdG9rZW4pKTsK
KyAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCAqZWxlbWVudCk7CisgICAgbV9vcGVuRWxl
bWVudHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlTm9uTnVsbCgp
LCB0b2tlbikpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRDdXN0b21FbGVtZW50KFJlZjxFbGVtZW50PiYmIGVsZW1lbnQsIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcykK
IHsKLSAgICBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQuZ2V0KCksIGF0dHJpYnV0ZXMsIG1fcGFyc2Vy
Q29udGVudFBvbGljeSk7Ci0gICAgYXR0YWNoTGF0ZXIoJmN1cnJlbnROb2RlKCksIGVsZW1lbnQu
cHRyKCkpOworICAgIHNldEF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cmlidXRlcywgbV9wYXJzZXJD
b250ZW50UG9saWN5KTsKKyAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBlbGVtZW50LmNv
cHlSZWYoKSk7CiAgICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUo
V1RGTW92ZShlbGVtZW50KSwgbG9jYWxOYW1lLCBhdHRyaWJ1dGVzKSk7CiB9CisKICNlbmRpZgog
Ci12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50
KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAg
QVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CisgICAgQVNTRVJU
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKICAgICAvLyBOb3JtYWxseSBI
VE1MRWxlbWVudFN0YWNrIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGZpbmlzaFBhcnNpbmdD
aGlsZHJlbiwKICAgICAvLyBidXQgc2VsZi1jbG9zaW5nIGVsZW1lbnRzIGFyZSBuZXZlciBpbiB0
aGUgZWxlbWVudCBzdGFjayBzbyB0aGUgc3RhY2sKICAgICAvLyBkb2Vzbid0IGdldCBhIGNoYW5j
ZSB0byB0ZWxsIHRoZW0gdGhhdCB3ZSdyZSBkb25lIHBhcnNpbmcgdGhlaXIgY2hpbGRyZW4uCi0g
ICAgYXR0YWNoTGF0ZXIoJmN1cnJlbnROb2RlKCksIGNyZWF0ZUhUTUxFbGVtZW50KHRva2VuKSwg
dHJ1ZSk7CisgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgY3JlYXRlSFRNTEVsZW1lbnQo
dG9rZW4pLCB0cnVlKTsKICAgICAvLyBGSVhNRTogRG8gd2Ugd2FudCB0byBhY2tub3dsZWRnZSB0
aGUgdG9rZW4ncyBzZWxmLWNsb3NpbmcgZmxhZz8KICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRt
bCNhY2tub3dsZWRnZS1zZWxmLWNsb3NpbmctZmxhZwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQor
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKIHsKICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjdGhlLXN0YWNrLW9m
LW9wZW4tZWxlbWVudHMKICAgICAvLyBQb3NzaWJsZSBhY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50
cyBpbmNsdWRlOgogICAgIC8vIGEsIGIsIGJpZywgY29kZSwgZW0sIGZvbnQsIGksIG5vYnIsIHMs
IHNtYWxsLCBzdHJpa2UsIHN0cm9uZywgdHQsIGFuZCB1LgotICAgIEFTU0VSVChpc0Zvcm1hdHRp
bmdUYWcodG9rZW4tPm5hbWUoKSkpOworICAgIEFTU0VSVChpc0Zvcm1hdHRpbmdUYWcodG9rZW4u
bmFtZSgpKSk7CiAgICAgaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwotICAgIG1fYWN0aXZlRm9y
bWF0dGluZ0VsZW1lbnRzLmFwcGVuZCgmY3VycmVudFN0YWNrSXRlbSgpKTsKKyAgICBtX2FjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cy5hcHBlbmQoY3VycmVudFN0YWNrSXRlbSgpKTsKIH0KIAotdm9p
ZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudChBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVu
dChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9y
Zy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3NjcmlwdGluZy0xLmh0bWwj
YWxyZWFkeS1zdGFydGVkCiAgICAgLy8gaHR0cDovL2h0bWw1Lm9yZy9zcGVjcy9kb20tcGFyc2lu
Zy5odG1sI2RvbS1yYW5nZS1jcmVhdGVjb250ZXh0dWFsZnJhZ21lbnQKQEAgLTUzNywyMyArNTMw
LDIzIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKICAgICAvLyB0aG9zZSBmbGFncyBvciBlZmZlY3RzIHRoZXJl
b2YuCiAgICAgY29uc3QgYm9vbCBwYXJzZXJJbnNlcnRlZCA9IG1fcGFyc2VyQ29udGVudFBvbGlj
eSAhPSBBbGxvd1NjcmlwdGluZ0NvbnRlbnRBbmREb05vdE1hcmtBbHJlYWR5U3RhcnRlZDsKICAg
ICBjb25zdCBib29sIGFscmVhZHlTdGFydGVkID0gbV9pc1BhcnNpbmdGcmFnbWVudCAmJiBwYXJz
ZXJJbnNlcnRlZDsKLSAgICBSZWY8SFRNTFNjcmlwdEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MU2Ny
aXB0RWxlbWVudDo6Y3JlYXRlKHNjcmlwdFRhZywgb3duZXJEb2N1bWVudEZvckN1cnJlbnROb2Rl
KCksIHBhcnNlckluc2VydGVkLCBhbHJlYWR5U3RhcnRlZCk7Ci0gICAgc2V0QXR0cmlidXRlcyhl
bGVtZW50LmdldCgpLCB0b2tlbiwgbV9wYXJzZXJDb250ZW50UG9saWN5KTsKKyAgICBhdXRvIGVs
ZW1lbnQgPSBIVE1MU2NyaXB0RWxlbWVudDo6Y3JlYXRlKHNjcmlwdFRhZywgb3duZXJEb2N1bWVu
dEZvckN1cnJlbnROb2RlKCksIHBhcnNlckluc2VydGVkLCBhbHJlYWR5U3RhcnRlZCk7CisgICAg
c2V0QXR0cmlidXRlcyhlbGVtZW50LCB0b2tlbiwgbV9wYXJzZXJDb250ZW50UG9saWN5KTsKICAg
ICBpZiAoc2NyaXB0aW5nQ29udGVudElzQWxsb3dlZChtX3BhcnNlckNvbnRlbnRQb2xpY3kpKQot
ICAgICAgICBhdHRhY2hMYXRlcigmY3VycmVudE5vZGUoKSwgZWxlbWVudC5wdHIoKSk7Ci0gICAg
bV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tJdGVtOjpjcmVhdGUoV1RGTW92ZShlbGVtZW50
KSwgKnRva2VuKSk7CisgICAgICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQu
Y29weVJlZigpKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0
ZShXVEZNb3ZlKGVsZW1lbnQpLCB0b2tlbikpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnRGb3JlaWduRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSkKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydEZvcmVpZ25FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZXNwYWNlVVJJKQogewotICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxU
b2tlbjo6U3RhcnRUYWcpOworICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpT
dGFydFRhZyk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gcGFyc2VFcnJvciB3aGVuIHhtbG5z
IG9yIHhtbG5zOnhsaW5rIGFyZSB3cm9uZy4KIAotICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
ID0gY3JlYXRlRWxlbWVudCh0b2tlbiwgbmFtZXNwYWNlVVJJKTsKLSAgICBpZiAoc2NyaXB0aW5n
Q29udGVudElzQWxsb3dlZChtX3BhcnNlckNvbnRlbnRQb2xpY3kpIHx8ICF0b1NjcmlwdEVsZW1l
bnRJZlBvc3NpYmxlKGVsZW1lbnQuZ2V0KCkpKQotICAgICAgICBhdHRhY2hMYXRlcigmY3VycmVu
dE5vZGUoKSwgZWxlbWVudCwgdG9rZW4tPnNlbGZDbG9zaW5nKCkpOwotICAgIGlmICghdG9rZW4t
PnNlbGZDbG9zaW5nKCkpCi0gICAgICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRl
bTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZU5vbk51bGwoKSwgKnRva2VuLCBuYW1lc3BhY2VVUkkp
KTsKKyAgICBhdXRvIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHRva2VuLCBuYW1lc3BhY2VVUkkp
OworICAgIGlmIChzY3JpcHRpbmdDb250ZW50SXNBbGxvd2VkKG1fcGFyc2VyQ29udGVudFBvbGlj
eSkgfHwgIXRvU2NyaXB0RWxlbWVudElmUG9zc2libGUoZWxlbWVudC5wdHIoKSkpCisgICAgICAg
IGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQuY29weVJlZigpLCB0b2tlbi5zZWxm
Q2xvc2luZygpKTsKKyAgICBpZiAoIXRva2VuLnNlbGZDbG9zaW5nKCkpCisgICAgICAgIG1fb3Bl
bkVsZW1lbnRzLnB1c2goSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKFdURk1vdmUoZWxlbWVudCksIHRv
a2VuLCBuYW1lc3BhY2VVUkkpKTsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5z
ZXJ0VGV4dE5vZGUoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNwYWNlTW9kZSB3aGl0
ZXNwYWNlTW9kZSkKQEAgLTU2OSwxMSArNTYyLDEwIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydFRleHROb2RlKGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgV2hpdGVzcGFjZU1v
CiAKICAgICAvLyBTdHJpbmdzIGNvbXBvc2VkIGVudGlyZWx5IG9mIHdoaXRlc3BhY2UgYXJlIGxp
a2VseSB0byBiZSByZXBlYXRlZC4KICAgICAvLyBUdXJuIHRoZW0gaW50byBBdG9taWNTdHJpbmcg
c28gd2Ugc2hhcmUgYSBzaW5nbGUgc3RyaW5nIGZvciBlYWNoLgotICAgIGJvb2wgc2hvdWxkVXNl
QXRvbWljU3RyaW5nID0gd2hpdGVzcGFjZU1vZGUgPT0gQWxsV2hpdGVzcGFjZQotICAgICAgICB8
fCAod2hpdGVzcGFjZU1vZGUgPT0gV2hpdGVzcGFjZVVua25vd24gJiYgaXNBbGxXaGl0ZXNwYWNl
KGNoYXJhY3RlcnMpKTsKKyAgICBib29sIHNob3VsZFVzZUF0b21pY1N0cmluZyA9IHdoaXRlc3Bh
Y2VNb2RlID09IEFsbFdoaXRlc3BhY2UgfHwgKHdoaXRlc3BhY2VNb2RlID09IFdoaXRlc3BhY2VV
bmtub3duICYmIGlzQWxsV2hpdGVzcGFjZShjaGFyYWN0ZXJzKSk7CiAKICAgICB1bnNpZ25lZCBj
dXJyZW50UG9zaXRpb24gPSAwOwotICAgIHVuc2lnbmVkIGxlbmd0aExpbWl0ID0gc2hvdWxkVXNl
TGVuZ3RoTGltaXQodGFzay5wYXJlbnQuZ2V0KCkpID8gVGV4dDo6ZGVmYXVsdExlbmd0aExpbWl0
IDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgIHVuc2lnbmVkIGxl
bmd0aExpbWl0ID0gc2hvdWxkVXNlTGVuZ3RoTGltaXQoKnRhc2sucGFyZW50KSA/IFRleHQ6OmRl
ZmF1bHRMZW5ndGhMaW1pdCA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsK
IAogICAgIC8vIEZJWE1FOiBTcGxpdHRpbmcgdGV4dCBub2RlcyBpbnRvIHNtYWxsZXIgY2h1bmtz
IGNvbnRyYWRpY3RzIEhUTUw1IHNwZWMsIGJ1dCBpcyBjdXJyZW50bHkgbmVjZXNzYXJ5CiAgICAg
Ly8gZm9yIHBlcmZvcm1hbmNlLCBzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NTg5OD4uCkBAIC01ODIsMTIgKzU3NCwxMSBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRUZXh0Tm9kZShjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIFdoaXRlc3Bh
Y2VNbwogICAgIGlmIChpczxUZXh0PihwcmV2aW91c0NoaWxkKSkgewogICAgICAgICAvLyBGSVhN
RTogV2UncmUgb25seSBzdXBwb3NlZCB0byBhcHBlbmQgdG8gdGhpcyB0ZXh0IG5vZGUgaWYgaXQK
ICAgICAgICAgLy8gd2FzIHRoZSBsYXN0IHRleHQgbm9kZSBpbnNlcnRlZCBieSB0aGUgcGFyc2Vy
LgotICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpwcmV2aW91c0NoaWxk
KTsKLSAgICAgICAgY3VycmVudFBvc2l0aW9uID0gdGV4dE5vZGUucGFyc2VyQXBwZW5kRGF0YShj
aGFyYWN0ZXJzLCAwLCBsZW5ndGhMaW1pdCk7CisgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IGRv
d25jYXN0PFRleHQ+KCpwcmV2aW91c0NoaWxkKS5wYXJzZXJBcHBlbmREYXRhKGNoYXJhY3RlcnMs
IDAsIGxlbmd0aExpbWl0KTsKICAgICB9CiAKICAgICB3aGlsZSAoY3VycmVudFBvc2l0aW9uIDwg
Y2hhcmFjdGVycy5sZW5ndGgoKSkgewotICAgICAgICBSZWY8VGV4dD4gdGV4dE5vZGUgPSBUZXh0
OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQodGFzay5wYXJlbnQtPmRvY3VtZW50KCksIHNob3VsZFVz
ZUF0b21pY1N0cmluZyA/IEF0b21pY1N0cmluZyhjaGFyYWN0ZXJzKS5zdHJpbmcoKSA6IGNoYXJh
Y3RlcnMsIGN1cnJlbnRQb3NpdGlvbiwgbGVuZ3RoTGltaXQpOworICAgICAgICBhdXRvIHRleHRO
b2RlID0gVGV4dDo6Y3JlYXRlV2l0aExlbmd0aExpbWl0KHRhc2sucGFyZW50LT5kb2N1bWVudCgp
LCBzaG91bGRVc2VBdG9taWNTdHJpbmcgPyBBdG9taWNTdHJpbmcoY2hhcmFjdGVycykuc3RyaW5n
KCkgOiBjaGFyYWN0ZXJzLCBjdXJyZW50UG9zaXRpb24sIGxlbmd0aExpbWl0KTsKICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBhIHdob2xlIHN0cmluZyBvZiB1bmJyZWFrYWJsZSBjaGFyYWN0ZXJzIHRo
ZSBhYm92ZSBjb3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuIEV4Y2VlZGluZyB0aGUgbGVu
Z3RoIGxpbWl0IGlzIHRoZSBsZXNzZXIgZXZpbC4KICAgICAgICAgaWYgKCF0ZXh0Tm9kZS0+bGVu
Z3RoKCkpIHsKICAgICAgICAgICAgIFN0cmluZyBzdWJzdHJpbmcgPSBjaGFyYWN0ZXJzLnN1YnN0
cmluZyhjdXJyZW50UG9zaXRpb24pOwpAQCAtNjA3LDcgKzU5OCw3IEBAIHZvaWQgSFRNTENvbnN0
cnVjdGlvblNpdGU6OnJlcGFyZW50KEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQmIG5l
d1BhcmVudCwKICAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2sgdGFzayhIVE1MQ29uc3RydWN0
aW9uU2l0ZVRhc2s6OlJlcGFyZW50KTsKICAgICB0YXNrLnBhcmVudCA9ICZuZXdQYXJlbnQubm9k
ZSgpOwogICAgIHRhc2suY2hpbGQgPSAmY2hpbGQuZWxlbWVudCgpOwotICAgIG1fdGFza1F1ZXVl
LmFwcGVuZCh0YXNrKTsKKyAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiB9
CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OnJlcGFyZW50KEhUTUxFbGVtZW50U3RhY2s6
OkVsZW1lbnRSZWNvcmQmIG5ld1BhcmVudCwgSFRNTFN0YWNrSXRlbSYgY2hpbGQpCkBAIC02MTUs
MjAgKzYwNiwyMCBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpyZXBhcmVudChIVE1MRWxl
bWVudFN0YWNrOjpFbGVtZW50UmVjb3JkJiBuZXdQYXJlbnQsCiAgICAgSFRNTENvbnN0cnVjdGlv
blNpdGVUYXNrIHRhc2soSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrOjpSZXBhcmVudCk7CiAgICAg
dGFzay5wYXJlbnQgPSAmbmV3UGFyZW50Lm5vZGUoKTsKICAgICB0YXNrLmNoaWxkID0gJmNoaWxk
LmVsZW1lbnQoKTsKLSAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7CisgICAgbV90YXNrUXVl
dWUuYXBwZW5kKFdURk1vdmUodGFzaykpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnRBbHJlYWR5UGFyc2VkQ2hpbGQoSFRNTFN0YWNrSXRlbSYgbmV3UGFyZW50LCBIVE1M
RWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkJiBjaGlsZCkKIHsKICAgICBpZiAoY2F1c2VzRm9z
dGVyUGFyZW50aW5nKG5ld1BhcmVudCkpIHsKLSAgICAgICAgZm9zdGVyUGFyZW50KCZjaGlsZC5l
bGVtZW50KCkpOworICAgICAgICBmb3N0ZXJQYXJlbnQoY2hpbGQuZWxlbWVudCgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzayB0YXNrKEhU
TUxDb25zdHJ1Y3Rpb25TaXRlVGFzazo6SW5zZXJ0QWxyZWFkeVBhcnNlZENoaWxkKTsKICAgICB0
YXNrLnBhcmVudCA9ICZuZXdQYXJlbnQubm9kZSgpOwogICAgIHRhc2suY2hpbGQgPSAmY2hpbGQu
ZWxlbWVudCgpOwotICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBtX3Rhc2tRdWV1
ZS5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6
OnRha2VBbGxDaGlsZHJlbihIVE1MU3RhY2tJdGVtJiBuZXdQYXJlbnQsIEhUTUxFbGVtZW50U3Rh
Y2s6OkVsZW1lbnRSZWNvcmQmIG9sZFBhcmVudCkKQEAgLTYzNiwxNCArNjI3LDE0IEBAIHZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6OnRha2VBbGxDaGlsZHJlbihIVE1MU3RhY2tJdGVtJiBuZXdQ
YXJlbnQsIEhUTUxFbGVtZW50CiAgICAgSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrIHRhc2soSFRN
TENvbnN0cnVjdGlvblNpdGVUYXNrOjpUYWtlQWxsQ2hpbGRyZW4pOwogICAgIHRhc2sucGFyZW50
ID0gJm5ld1BhcmVudC5ub2RlKCk7CiAgICAgdGFzay5jaGlsZCA9ICZvbGRQYXJlbnQubm9kZSgp
OwotICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQo
V1RGTW92ZSh0YXNrKSk7CiB9CiAKLVJlZjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
Y3JlYXRlRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWVzcGFjZVVSSSkKK1JlZjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRl
RWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSkKIHsKLSAgICBRdWFsaWZpZWROYW1lIHRhZ05hbWUobnVsbEF0b20sIHRva2VuLT5u
YW1lKCksIG5hbWVzcGFjZVVSSSk7Ci0gICAgUmVmPEVsZW1lbnQ+IGVsZW1lbnQgPSBvd25lckRv
Y3VtZW50Rm9yQ3VycmVudE5vZGUoKS5jcmVhdGVFbGVtZW50KHRhZ05hbWUsIHRydWUpOwotICAg
IHNldEF0dHJpYnV0ZXMoZWxlbWVudC5nZXQoKSwgdG9rZW4sIG1fcGFyc2VyQ29udGVudFBvbGlj
eSk7CisgICAgUXVhbGlmaWVkTmFtZSB0YWdOYW1lKG51bGxBdG9tLCB0b2tlbi5uYW1lKCksIG5h
bWVzcGFjZVVSSSk7CisgICAgYXV0byBlbGVtZW50ID0gb3duZXJEb2N1bWVudEZvckN1cnJlbnRO
b2RlKCkuY3JlYXRlRWxlbWVudCh0YWdOYW1lLCB0cnVlKTsKKyAgICBzZXRBdHRyaWJ1dGVzKGVs
ZW1lbnQsIHRva2VuLCBtX3BhcnNlckNvbnRlbnRQb2xpY3kpOwogICAgIHJldHVybiBlbGVtZW50
OwogfQogCkBAIC02NTUsOSArNjQ2LDkgQEAgaW5saW5lIERvY3VtZW50JiBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6b3duZXJEb2N1bWVudEZvckN1cnJlbnROb2RlKCkKIH0KIAogUmVmUHRyPEVsZW1l
bnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudE9yRmluZEN1c3RvbUVs
ZW1lbnRJbnRlcmZhY2UoCi0gICAgQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgSlNDdXN0b21FbGVt
ZW50SW50ZXJmYWNlKiogY3VzdG9tRWxlbWVudEludGVyZmFjZSkKKyAgICBBdG9taWNIVE1MVG9r
ZW4mIHRva2VuLCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UqKiBjdXN0b21FbGVtZW50SW50ZXJm
YWNlKQogewotICAgIGF1dG8mIGxvY2FsTmFtZSA9IHRva2VuLT5uYW1lKCk7CisgICAgYXV0byYg
bG9jYWxOYW1lID0gdG9rZW4ubmFtZSgpOwogICAgIC8vIEZJWE1FOiBUaGlzIGNhbid0IHVzZSBI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudCBiZWNhdXNlIHdlCiAgICAgLy8gaGF2
ZSB0byBwYXNzIHRoZSBjdXJyZW50IGZvcm0gZWxlbWVudC4gIFdlIHNob3VsZCByZXdvcmsgZm9y
bSBhc3NvY2lhdGlvbgogICAgIC8vIHRvIG9jY3VyIGFmdGVyIGNvbnN0cnVjdGlvbiB0byBhbGxv
dyBiZXR0ZXIgY29kZSBzaGFyaW5nIGhlcmUuCkBAIC03MDMsNTMgKzY5NCw1MyBAQCBSZWZQdHI8
RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50T3JGaW5kQ3Vz
dG9tRWxlbWVudEludGVyZgogICAgIHJldHVybiBlbGVtZW50OwogfQogCi1SZWY8RWxlbWVudD4g
SFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiog
dG9rZW4pCitSZWY8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1l
bnQgPSBjcmVhdGVIVE1MRWxlbWVudE9yRmluZEN1c3RvbUVsZW1lbnRJbnRlcmZhY2UodG9rZW4s
IG51bGxwdHIpOwogICAgIEFTU0VSVChlbGVtZW50KTsKICAgICByZXR1cm4gZWxlbWVudC5yZWxl
YXNlTm9uTnVsbCgpOwogfQogCi1SZWY8SFRNTFN0YWNrSXRlbT4gSFRNTENvbnN0cnVjdGlvblNp
dGU6OmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbihIVE1MU3RhY2tJdGVtKiBpdGVtKQorUmVm
PEhUTUxTdGFja0l0ZW0+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50RnJvbVNh
dmVkVG9rZW4oSFRNTFN0YWNrSXRlbSYgaXRlbSkKIHsKICAgICAvLyBOT1RFOiBNb3ZpbmcgZnJv
bSBpdGVtIC0+IHRva2VuIC0+IGl0ZW0gY29waWVzIHRoZSBBdHRyaWJ1dGUgdmVjdG9yIHR3aWNl
IQotICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgaXRl
bS0+bG9jYWxOYW1lKCksIFZlY3RvcjxBdHRyaWJ1dGU+KGl0ZW0tPmF0dHJpYnV0ZXMoKSkpOwot
ICAgIEFTU0VSVChpdGVtLT5uYW1lc3BhY2VVUkkoKSA9PSBIVE1MTmFtZXM6OnhodG1sTmFtZXNw
YWNlVVJJKTsKLSAgICBBU1NFUlQoaXNGb3JtYXR0aW5nVGFnKGl0ZW0tPmxvY2FsTmFtZSgpKSk7
Ci0gICAgcmV0dXJuIEhUTUxTdGFja0l0ZW06OmNyZWF0ZShjcmVhdGVIVE1MRWxlbWVudCgmZmFr
ZVRva2VuKSwgZmFrZVRva2VuLCBpdGVtLT5uYW1lc3BhY2VVUkkoKSk7CisgICAgQXRvbWljSFRN
TFRva2VuIGZha2VUb2tlbihIVE1MVG9rZW46OlN0YXJ0VGFnLCBpdGVtLmxvY2FsTmFtZSgpLCBW
ZWN0b3I8QXR0cmlidXRlPihpdGVtLmF0dHJpYnV0ZXMoKSkpOworICAgIEFTU0VSVChpdGVtLm5h
bWVzcGFjZVVSSSgpID09IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpOworICAgIEFTU0VS
VChpc0Zvcm1hdHRpbmdUYWcoaXRlbS5sb2NhbE5hbWUoKSkpOworICAgIHJldHVybiBIVE1MU3Rh
Y2tJdGVtOjpjcmVhdGUoY3JlYXRlSFRNTEVsZW1lbnQoZmFrZVRva2VuKSwgZmFrZVRva2VuLCBp
dGVtLm5hbWVzcGFjZVVSSSgpKTsKIH0KIAotYm9vbCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5k
ZXhPZkZpcnN0VW5vcGVuRm9ybWF0dGluZ0VsZW1lbnQodW5zaWduZWQmIGZpcnN0VW5vcGVuRWxl
bWVudEluZGV4KSBjb25zdAorT3B0aW9uYWw8dW5zaWduZWQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbmRleE9mRmlyc3RVbm9wZW5Gb3JtYXR0aW5nRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgaWYg
KG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB1bnNpZ25lZCBpbmRleCA9IG1fYWN0
aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnNpemUoKTsKICAgICBkbyB7CiAgICAgICAgIC0taW5kZXg7
Ci0gICAgICAgIGNvbnN0IEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5JiBlbnRyeSA9
IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmF0KGluZGV4KTsKLSAgICAgICAgaWYgKGVudHJ5
LmlzTWFya2VyKCkgfHwgbV9vcGVuRWxlbWVudHMuY29udGFpbnMoJmVudHJ5LmVsZW1lbnQoKSkp
IHsKLSAgICAgICAgICAgIGZpcnN0VW5vcGVuRWxlbWVudEluZGV4ID0gaW5kZXggKyAxOwotICAg
ICAgICAgICAgcmV0dXJuIGZpcnN0VW5vcGVuRWxlbWVudEluZGV4IDwgbV9hY3RpdmVGb3JtYXR0
aW5nRWxlbWVudHMuc2l6ZSgpOworICAgICAgICBjb25zdCBhdXRvJiBlbnRyeSA9IG1fYWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzLmF0KGluZGV4KTsKKyAgICAgICAgaWYgKGVudHJ5LmlzTWFya2Vy
KCkgfHwgbV9vcGVuRWxlbWVudHMuY29udGFpbnMoZW50cnkuZWxlbWVudCgpKSkgeworICAgICAg
ICAgICAgdW5zaWduZWQgZmlyc3RVbm9wZW5FbGVtZW50SW5kZXggPSBpbmRleCArIDE7CisgICAg
ICAgICAgICByZXR1cm4gZmlyc3RVbm9wZW5FbGVtZW50SW5kZXggPCBtX2FjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cy5zaXplKCkgPyBmaXJzdFVub3BlbkVsZW1lbnRJbmRleCA6IE9wdGlvbmFsPHVu
c2lnbmVkPihOdWxsb3B0KTsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKGluZGV4KTsKLSAgICBm
aXJzdFVub3BlbkVsZW1lbnRJbmRleCA9IGluZGV4OwotICAgIHJldHVybiB0cnVlOworCisgICAg
cmV0dXJuIGluZGV4OwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpyZWNvbnN0cnVj
dFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpCiB7Ci0gICAgdW5zaWduZWQgZmlyc3RVbm9w
ZW5FbGVtZW50SW5kZXg7Ci0gICAgaWYgKCFpbmRleE9mRmlyc3RVbm9wZW5Gb3JtYXR0aW5nRWxl
bWVudChmaXJzdFVub3BlbkVsZW1lbnRJbmRleCkpCisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGZp
cnN0VW5vcGVuRWxlbWVudEluZGV4ID0gaW5kZXhPZkZpcnN0VW5vcGVuRm9ybWF0dGluZ0VsZW1l
bnQoKTsKKyAgICBpZiAoIWZpcnN0VW5vcGVuRWxlbWVudEluZGV4KQogICAgICAgICByZXR1cm47
CiAKLSAgICB1bnNpZ25lZCB1bm9wZW5FbnRyeUluZGV4ID0gZmlyc3RVbm9wZW5FbGVtZW50SW5k
ZXg7Ci0gICAgQVNTRVJUKHVub3BlbkVudHJ5SW5kZXggPCBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cy5zaXplKCkpOwotICAgIGZvciAoOyB1bm9wZW5FbnRyeUluZGV4IDwgbV9hY3RpdmVGb3Jt
YXR0aW5nRWxlbWVudHMuc2l6ZSgpOyArK3Vub3BlbkVudHJ5SW5kZXgpIHsKLSAgICAgICAgSFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnkmIHVub3BlbmVkRW50cnkgPSBtX2FjdGl2ZUZv
cm1hdHRpbmdFbGVtZW50cy5hdCh1bm9wZW5FbnRyeUluZGV4KTsKLSAgICAgICAgUmVmUHRyPEhU
TUxTdGFja0l0ZW0+IHJlY29uc3RydWN0ZWQgPSBjcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4o
dW5vcGVuZWRFbnRyeS5zdGFja0l0ZW0oKSk7Ci0gICAgICAgIGF0dGFjaExhdGVyKCZjdXJyZW50
Tm9kZSgpLCAmcmVjb25zdHJ1Y3RlZC0+bm9kZSgpKTsKLSAgICAgICAgbV9vcGVuRWxlbWVudHMu
cHVzaChyZWNvbnN0cnVjdGVkKTsKLSAgICAgICAgdW5vcGVuZWRFbnRyeS5yZXBsYWNlRWxlbWVu
dChyZWNvbnN0cnVjdGVkLnJlbGVhc2UoKSk7CisgICAgQVNTRVJUKGZpcnN0VW5vcGVuRWxlbWVu
dEluZGV4LnZhbHVlKCkgPCBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgdW5vcGVuRW50cnlJbmRleCA9IGZpcnN0VW5vcGVuRWxlbWVudEluZGV4
LnZhbHVlKCk7IHVub3BlbkVudHJ5SW5kZXggPCBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5z
aXplKCk7ICsrdW5vcGVuRW50cnlJbmRleCkgeworICAgICAgICBhdXRvJiB1bm9wZW5lZEVudHJ5
ID0gbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuYXQodW5vcGVuRW50cnlJbmRleCk7CisgICAg
ICAgIEFTU0VSVCh1bm9wZW5lZEVudHJ5LnN0YWNrSXRlbSgpKTsKKyAgICAgICAgYXV0byByZWNv
bnN0cnVjdGVkID0gY3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKCp1bm9wZW5lZEVudHJ5LnN0
YWNrSXRlbSgpKTsKKyAgICAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgcmVjb25zdHJ1
Y3RlZC0+bm9kZSgpKTsKKyAgICAgICAgbV9vcGVuRWxlbWVudHMucHVzaChyZWNvbnN0cnVjdGVk
LmNvcHlSZWYoKSk7CisgICAgICAgIHVub3BlbmVkRW50cnkucmVwbGFjZUVsZW1lbnQoV1RGTW92
ZShyZWNvbnN0cnVjdGVkKSk7CiAgICAgfQogfQogCkBAIC03NjUsMjQgKzc1NiwxOCBAQCB2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpnZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCkKICAgICAgICAg
bV9vcGVuRWxlbWVudHMucG9wKCk7CiB9CiAKLWJvb2wgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
UXVpcmtzTW9kZSgpCi17Ci0gICAgcmV0dXJuIG1faW5RdWlya3NNb2RlOwotfQotCiB2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9zdGVyU2l0ZShIVE1MQ29uc3RydWN0aW9uU2l0ZVRh
c2smIHRhc2spCiB7CiAgICAgLy8gV2hlbiBhIG5vZGUgaXMgdG8gYmUgZm9zdGVyIHBhcmVudGVk
LCB0aGUgbGFzdCB0ZW1wbGF0ZSBlbGVtZW50IHdpdGggbm8gdGFibGUgZWxlbWVudCBpcyBiZWxv
dyBpdCBpbiB0aGUgc3RhY2sgb2Ygb3BlbiBlbGVtZW50cyBpcyB0aGUgZm9zdGVyIHBhcmVudCBl
bGVtZW50IChOT1QgdGhlIHRlbXBsYXRlJ3MgcGFyZW50ISkKLSAgICBIVE1MRWxlbWVudFN0YWNr
OjpFbGVtZW50UmVjb3JkKiBsYXN0VGVtcGxhdGVFbGVtZW50ID0gbV9vcGVuRWxlbWVudHMudG9w
bW9zdCh0ZW1wbGF0ZVRhZy5sb2NhbE5hbWUoKSk7CisgICAgYXV0byogbGFzdFRlbXBsYXRlRWxl
bWVudCA9IG1fb3BlbkVsZW1lbnRzLnRvcG1vc3QodGVtcGxhdGVUYWcubG9jYWxOYW1lKCkpOwog
ICAgIGlmIChsYXN0VGVtcGxhdGVFbGVtZW50ICYmICFtX29wZW5FbGVtZW50cy5pblRhYmxlU2Nv
cGUodGFibGVUYWcpKSB7CiAgICAgICAgIHRhc2sucGFyZW50ID0gJmxhc3RUZW1wbGF0ZUVsZW1l
bnQtPmVsZW1lbnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEhUTUxFbGVtZW50
U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGxhc3RUYWJsZUVsZW1lbnRSZWNvcmQgPSBtX29wZW5FbGVt
ZW50cy50b3Btb3N0KHRhYmxlVGFnLmxvY2FsTmFtZSgpKTsKLSAgICBpZiAobGFzdFRhYmxlRWxl
bWVudFJlY29yZCkgewotICAgICAgICBFbGVtZW50JiBsYXN0VGFibGVFbGVtZW50ID0gbGFzdFRh
YmxlRWxlbWVudFJlY29yZC0+ZWxlbWVudCgpOwotICAgICAgICBDb250YWluZXJOb2RlKiBwYXJl
bnQgPSBsYXN0VGFibGVFbGVtZW50LnBhcmVudE5vZGUoKTsKKyAgICBpZiAoYXV0byogbGFzdFRh
YmxlRWxlbWVudFJlY29yZCA9IG1fb3BlbkVsZW1lbnRzLnRvcG1vc3QodGFibGVUYWcubG9jYWxO
YW1lKCkpKSB7CisgICAgICAgIGF1dG8mIGxhc3RUYWJsZUVsZW1lbnQgPSBsYXN0VGFibGVFbGVt
ZW50UmVjb3JkLT5lbGVtZW50KCk7CisgICAgICAgIGF1dG8qIHBhcmVudCA9IGxhc3RUYWJsZUVs
ZW1lbnQucGFyZW50Tm9kZSgpOwogICAgICAgICAvLyBXaGVuIHBhcnNpbmcgSFRNTCBmcmFnbWVu
dHMsIHdlIHNraXAgc3RlcCA0LjIgKCJMZXQgcm9vdCBiZSBhIG5ldyBodG1sIGVsZW1lbnQgd2l0
aCBubyBhdHRyaWJ1dGVzIikgZm9yIGVmZmljaWVuY3ksCiAgICAgICAgIC8vIGFuZCBpbnN0ZWFk
IHVzZSB0aGUgRG9jdW1lbnRGcmFnbWVudCBhcyBhIHJvb3Qgbm9kZS4gU28gd2UgbXVzdCB0cmVh
dCB0aGUgcm9vdCBub2RlIChEb2N1bWVudEZyYWdtZW50KSBhcyBpZiBpdCBpcyBhIGh0bWwgZWxl
bWVudCBoZXJlLgogICAgICAgICBib29sIHBhcmVudENhbkJlRm9zdGVyUGFyZW50ID0gcGFyZW50
ICYmIChwYXJlbnQtPmlzRWxlbWVudE5vZGUoKSB8fCAobV9pc1BhcnNpbmdGcmFnbWVudCAmJiBw
YXJlbnQgPT0gJm1fb3BlbkVsZW1lbnRzLnJvb3ROb2RlKCkpKTsKQEAgLTgwMSwxOCArNzg2LDE3
IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmZpbmRGb3N0ZXJTaXRlKEhUTUxDb25zdHJ1
Y3Rpb25TaXRlVGFzayYgdGFzaykKIAogYm9vbCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6c2hvdWxk
Rm9zdGVyUGFyZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZWRpcmVjdEF0dGFjaFRvRm9z
dGVyUGFyZW50Ci0gICAgICAgICYmIGNhdXNlc0Zvc3RlclBhcmVudGluZyhjdXJyZW50U3RhY2tJ
dGVtKCkpOworICAgIHJldHVybiBtX3JlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQgJiYgY2F1
c2VzRm9zdGVyUGFyZW50aW5nKGN1cnJlbnRTdGFja0l0ZW0oKSk7CiB9CiAKLXZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6OmZvc3RlclBhcmVudChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCit2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmb3N0ZXJQYXJlbnQoUmVmPE5vZGU+JiYgbm9kZSkKIHsK
ICAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2sgdGFzayhIVE1MQ29uc3RydWN0aW9uU2l0ZVRh
c2s6Okluc2VydCk7CiAgICAgZmluZEZvc3RlclNpdGUodGFzayk7Ci0gICAgdGFzay5jaGlsZCA9
IG5vZGU7CisgICAgdGFzay5jaGlsZCA9IFdURk1vdmUobm9kZSk7CiAgICAgQVNTRVJUKHRhc2su
cGFyZW50KTsKIAotICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBtX3Rhc2tRdWV1
ZS5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCmluZGV4IDI2YzgyOTkwYjRiMDNiZWYx
NDUyYTdmNGExMzM2ODJlNzVhMmMwZmIuLjk0ZjBkNzgyMDI4ZTM1YWViYzEwYTk1NzU5YjM3YmQ0
MTNlMzk5NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25z
dHJ1Y3Rpb25TaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0
cnVjdGlvblNpdGUuaApAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50U3Rh
Y2suaCIKICNpbmNsdWRlICJIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmgiCiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTMsMzMgKzkzLDMy
IEBAIHB1YmxpYzoKICAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZShEb2N1bWVudEZyYWdtZW50Jiwg
UGFyc2VyQ29udGVudFBvbGljeSwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCk7CiAgICAg
fkhUTUxDb25zdHJ1Y3Rpb25TaXRlKCk7CiAKLSAgICB2b2lkIGRldGFjaCgpOwogICAgIHZvaWQg
ZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAKICAgICB2b2lkIHNldERlZmF1bHRDb21wYXRpYmlsaXR5
TW9kZSgpOwogICAgIHZvaWQgZmluaXNoZWRQYXJzaW5nKCk7CiAKLSAgICB2b2lkIGluc2VydERv
Y3R5cGUoQXRvbWljSFRNTFRva2VuKik7Ci0gICAgdm9pZCBpbnNlcnRDb21tZW50KEF0b21pY0hU
TUxUb2tlbiopOwotICAgIHZvaWQgaW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRv
a2VuKik7Ci0gICAgdm9pZCBpbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoQXRvbWljSFRN
TFRva2VuKik7Ci0gICAgdm9pZCBpbnNlcnRIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4qKTsK
KyAgICB2b2lkIGluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNl
cnRDb21tZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0Q29tbWVudE9uRG9j
dW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRDb21tZW50T25IVE1MSHRt
bEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRIVE1MRWxlbWVudChB
dG9taWNIVE1MVG9rZW4mKTsKICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQotICAgIEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZSogaW5zZXJ0SFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50
SW50ZXJmYWNlKEF0b21pY0hUTUxUb2tlbiopOworICAgIEpTQ3VzdG9tRWxlbWVudEludGVyZmFj
ZSogaW5zZXJ0SFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJmYWNlKEF0b21pY0hU
TUxUb2tlbiYpOwogICAgIHZvaWQgaW5zZXJ0Q3VzdG9tRWxlbWVudChSZWY8RWxlbWVudD4mJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIFZlY3RvcjxBdHRyaWJ1dGU+Jik7CiAjZW5k
aWYKLSAgICB2b2lkIGluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2Vu
Kik7Ci0gICAgdm9pZCBpbnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNIVE1MVG9rZW4qKTsK
LSAgICB2b2lkIGluc2VydEhUTUxIZWFkRWxlbWVudChBdG9taWNIVE1MVG9rZW4qKTsKLSAgICB2
b2lkIGluc2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4qKTsKLSAgICB2b2lkIGlu
c2VydEhUTUxGb3JtRWxlbWVudChBdG9taWNIVE1MVG9rZW4qLCBib29sIGlzRGVtb3RlZCA9IGZh
bHNlKTsKLSAgICB2b2lkIGluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7Cisg
ICAgdm9pZCBpbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwor
ICAgIHZvaWQgaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAg
dm9pZCBpbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBp
bnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRI
VE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgYm9vbCBpc0RlbW90ZWQgPSBmYWxzZSk7
CisgICAgdm9pZCBpbnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwogICAgIHZv
aWQgaW5zZXJ0VGV4dE5vZGUoY29uc3QgU3RyaW5nJiwgV2hpdGVzcGFjZU1vZGUgPSBXaGl0ZXNw
YWNlVW5rbm93bik7Ci0gICAgdm9pZCBpbnNlcnRGb3JlaWduRWxlbWVudChBdG9taWNIVE1MVG9r
ZW4qLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7CisgICAgdm9pZCBpbnNlcnRG
b3JlaWduRWxlbWVudChBdG9taWNIVE1MVG9rZW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSk7CiAKLSAgICB2b2lkIGluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0
b21pY0hUTUxUb2tlbiopOwotICAgIHZvaWQgaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keShB
dG9taWNIVE1MVG9rZW4qKTsKLSAgICB2b2lkIGluc2VydEhUTUxCb2R5U3RhcnRUYWdJbkJvZHko
QXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBpbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3Jl
SFRNTChBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIGluc2VydEhUTUxIdG1sU3RhcnRUYWdJ
bkJvZHkoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRIVE1MQm9keVN0YXJ0VGFn
SW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYpOwogCiAgICAgdm9pZCByZXBhcmVudChIVE1MRWxlbWVu
dFN0YWNrOjpFbGVtZW50UmVjb3JkJiBuZXdQYXJlbnQsIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1l
bnRSZWNvcmQmIGNoaWxkKTsKICAgICB2b2lkIHJlcGFyZW50KEhUTUxFbGVtZW50U3RhY2s6OkVs
ZW1lbnRSZWNvcmQmIG5ld1BhcmVudCwgSFRNTFN0YWNrSXRlbSYgY2hpbGQpOwpAQCAtMTI5LDE4
ICsxMjgsMTggQEAgcHVibGljOgogICAgIHZvaWQgaW5zZXJ0QWxyZWFkeVBhcnNlZENoaWxkKEhU
TUxTdGFja0l0ZW0mIG5ld1BhcmVudCwgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCYg
Y2hpbGQpOwogICAgIHZvaWQgdGFrZUFsbENoaWxkcmVuKEhUTUxTdGFja0l0ZW0mIG5ld1BhcmVu
dCwgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCYgb2xkUGFyZW50KTsKIAotICAgIFJl
ZjxIVE1MU3RhY2tJdGVtPiBjcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oSFRNTFN0YWNrSXRl
bSopOworICAgIFJlZjxIVE1MU3RhY2tJdGVtPiBjcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4o
SFRNTFN0YWNrSXRlbSYpOwogCiAgICAgYm9vbCBzaG91bGRGb3N0ZXJQYXJlbnQoKSBjb25zdDsK
LSAgICB2b2lkIGZvc3RlclBhcmVudChQYXNzUmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIGZvc3Rl
clBhcmVudChSZWY8Tm9kZT4mJik7CiAKLSAgICBib29sIGluZGV4T2ZGaXJzdFVub3BlbkZvcm1h
dHRpbmdFbGVtZW50KHVuc2lnbmVkJiBmaXJzdFVub3BlbkVsZW1lbnRJbmRleCkgY29uc3Q7Cisg
ICAgT3B0aW9uYWw8dW5zaWduZWQ+IGluZGV4T2ZGaXJzdFVub3BlbkZvcm1hdHRpbmdFbGVtZW50
KCkgY29uc3Q7CiAgICAgdm9pZCByZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
cygpOwogCiAgICAgdm9pZCBnZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7CiAgICAgdm9pZCBnZW5l
cmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUpOwogCi0gICAgYm9vbCBpblF1aXJrc01vZGUoKTsKKyAgICBib29sIGluUXVpcmtzTW9kZSgp
IHsgcmV0dXJuIG1faW5RdWlya3NNb2RlOyB9CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiAhbV9vcGVuRWxlbWVudHMuc3RhY2tEZXB0aCgpOyB9CiAgICAgRWxlbWVudCYgY3Vy
cmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX29wZW5FbGVtZW50cy50b3AoKTsgfQpAQCAt
MTU3LDMyICsxNTYsMjMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGb3JtKEhUTUxGb3JtRWxl
bWVudCopOwogICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9y
bS5nZXQoKTsgfQotICAgIFBhc3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiB0YWtlRm9ybSgpOwor
ICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IHRha2VGb3JtKCk7CiAKICAgICBQYXJzZXJDb250
ZW50UG9saWN5IHBhcnNlckNvbnRlbnRQb2xpY3koKSB7IHJldHVybiBtX3BhcnNlckNvbnRlbnRQ
b2xpY3k7IH0KIAogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKLSAgICBi
b29sIGlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSB7IHJldHVybiBtX2RvY3VtZW50
LT5pc1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkKCk7IH0KKyAgICBib29sIGlzVGVsZXBo
b25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSB7IHJldHVybiBtX2RvY3VtZW50LmlzVGVsZXBob25l
TnVtYmVyUGFyc2luZ0VuYWJsZWQoKTsgfQogI2VuZGlmCiAKICAgICBjbGFzcyBSZWRpcmVjdFRv
Rm9zdGVyUGFyZW50R3VhcmQgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWRpcmVj
dFRvRm9zdGVyUGFyZW50R3VhcmQpOwogICAgIHB1YmxpYzoKLSAgICAgICAgUmVkaXJlY3RUb0Zv
c3RlclBhcmVudEd1YXJkKEhUTUxDb25zdHJ1Y3Rpb25TaXRlJiB0cmVlKQotICAgICAgICAgICAg
OiBtX3RyZWUodHJlZSkKLSAgICAgICAgICAgICwgbV93YXNSZWRpcmVjdGluZ0JlZm9yZSh0cmVl
Lm1fcmVkaXJlY3RBdHRhY2hUb0Zvc3RlclBhcmVudCkKLSAgICAgICAgewotICAgICAgICAgICAg
bV90cmVlLm1fcmVkaXJlY3RBdHRhY2hUb0Zvc3RlclBhcmVudCA9IHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICB+UmVkaXJlY3RUb0Zvc3RlclBhcmVudEd1YXJkKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV90cmVlLm1fcmVkaXJlY3RBdHRhY2hUb0Zvc3RlclBhcmVudCA9IG1fd2FzUmVk
aXJlY3RpbmdCZWZvcmU7Ci0gICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgUmVkaXJlY3RUb0Zv
c3RlclBhcmVudEd1YXJkKEhUTUxDb25zdHJ1Y3Rpb25TaXRlJiB0cmVlKQorICAgICAgICAgICAg
OiBtX3JlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnRDaGFuZ2UodHJlZS5tX3JlZGlyZWN0QXR0
YWNoVG9Gb3N0ZXJQYXJlbnQsIHRydWUpCisgICAgICAgIHsgfQogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgSFRNTENvbnN0cnVjdGlvblNpdGUmIG1fdHJlZTsKLSAgICAgICAgYm9vbCBtX3dhc1Jl
ZGlyZWN0aW5nQmVmb3JlOworICAgICAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gbV9yZWRpcmVj
dEF0dGFjaFRvRm9zdGVyUGFyZW50Q2hhbmdlOwogICAgIH07CiAKICAgICBzdGF0aWMgYm9vbCBp
c0Zvcm1hdHRpbmdUYWcoY29uc3QgQXRvbWljU3RyaW5nJik7CkBAIC0xOTUsMjMgKzE4NSwyMyBA
QCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q29tcGF0aWJpbGl0eU1vZGUoRG9jdW1lbnRDb21wYXRp
YmlsaXR5TW9kZSk7CiAgICAgdm9pZCBzZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nJiBz
eXN0ZW1JZCk7CiAKLSAgICB2b2lkIGF0dGFjaExhdGVyKENvbnRhaW5lck5vZGUqIHBhcmVudCwg
UGFzc1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9vbCBzZWxmQ2xvc2luZyA9IGZhbHNlKTsKKyAgICB2
b2lkIGF0dGFjaExhdGVyKENvbnRhaW5lck5vZGUmIHBhcmVudCwgUmVmPE5vZGU+JiYgY2hpbGQs
IGJvb2wgc2VsZkNsb3NpbmcgPSBmYWxzZSk7CiAKICAgICB2b2lkIGZpbmRGb3N0ZXJTaXRlKEhU
TUxDb25zdHJ1Y3Rpb25TaXRlVGFzayYpOwogCi0gICAgUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUhU
TUxFbGVtZW50T3JGaW5kQ3VzdG9tRWxlbWVudEludGVyZmFjZShBdG9taWNIVE1MVG9rZW4qLCBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UqKik7Ci0gICAgUmVmPEVsZW1lbnQ+IGNyZWF0ZUhUTUxF
bGVtZW50KEF0b21pY0hUTUxUb2tlbiopOwotICAgIFJlZjxFbGVtZW50PiBjcmVhdGVFbGVtZW50
KEF0b21pY0hUTUxUb2tlbiosIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKTsKKyAg
ICBSZWZQdHI8RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50
ZXJmYWNlKEF0b21pY0hUTUxUb2tlbiYsIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZSoqKTsKKyAg
ICBSZWY8RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAg
UmVmPEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lc3BhY2VVUkkpOwogCi0gICAgdm9pZCBtZXJnZUF0dHJpYnV0ZXNGcm9tVG9r
ZW5JbnRvRWxlbWVudChBdG9taWNIVE1MVG9rZW4qLCBFbGVtZW50Kik7CisgICAgdm9pZCBtZXJn
ZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudChBdG9taWNIVE1MVG9rZW4mLCBFbGVtZW50
Jik7CiAgICAgdm9pZCBkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZUlmTmVlZGVkKCk7
CiAKLSAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsK
ICAgICAKICAgICAvLyBUaGlzIGlzIHRoZSByb290IENvbnRhaW5lck5vZGUgdG8gd2hpY2ggdGhl
IHBhcnNlciBhdHRhY2hlcyBhbGwgbmV3bHkKICAgICAvLyBjb25zdHJ1Y3RlZCBub2Rlcy4gSXQg
cG9pbnRzIHRvIGEgRG9jdW1lbnRGcmFnbWVudCB3aGVuIHBhcnNpbmcgZnJhZ21lbnRzCiAgICAg
Ly8gYW5kIGEgRG9jdW1lbnQgaW4gYWxsIG90aGVyIGNhc2VzLgotICAgIENvbnRhaW5lck5vZGUq
IG1fYXR0YWNobWVudFJvb3Q7CisgICAgQ29udGFpbmVyTm9kZSYgbV9hdHRhY2htZW50Um9vdDsK
ICAgICAKICAgICBSZWZQdHI8SFRNTFN0YWNrSXRlbT4gbV9oZWFkOwogICAgIFJlZlB0cjxIVE1M
Rm9ybUVsZW1lbnQ+IG1fZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxFbGVtZW50U3RhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TEVsZW1lbnRTdGFjay5jcHAKaW5kZXggZThlNGNhMjhhMjQ3ZjE5NjBhZGMxOTgzZTZhYmFjNzk4
Y2UyYmY3Yy4uNzA1NzAzZWZjOTEzODNiMTBjZWIzYTU0YWY5ODMzYjRlMWI2ZTQwMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKQEAgLTQw
LDggKzQwLDcgQEAgbmFtZXNwYWNlIHsKIAogaW5saW5lIGJvb2wgaXNSb290Tm9kZShIVE1MU3Rh
Y2tJdGVtJiBpdGVtKQogewotICAgIHJldHVybiBpdGVtLmlzRG9jdW1lbnRGcmFnbWVudCgpCi0g
ICAgICAgIHx8IGl0ZW0uaGFzVGFnTmFtZShodG1sVGFnKTsKKyAgICByZXR1cm4gaXRlbS5pc0Rv
Y3VtZW50RnJhZ21lbnQoKSB8fCBpdGVtLmhhc1RhZ05hbWUoaHRtbFRhZyk7CiB9CiAKIGlubGlu
ZSBib29sIGlzU2NvcGVNYXJrZXIoSFRNTFN0YWNrSXRlbSYgaXRlbSkKQEAgLTExNiw0MiArMTE1
LDMyIEBAIGlubGluZSBib29sIGlzU2VsZWN0U2NvcGVNYXJrZXIoSFRNTFN0YWNrSXRlbSYgaXRl
bSkKIAogfQogCi1IVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjpFbGVtZW50UmVjb3Jk
KFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSwgc3RkOjp1bmlxdWVfcHRyPEVsZW1lbnRS
ZWNvcmQ+IG5leHQpCi0gICAgOiBtX2l0ZW0oaXRlbSkKK0hUTUxFbGVtZW50U3RhY2s6OkVsZW1l
bnRSZWNvcmQ6OkVsZW1lbnRSZWNvcmQoUmVmPEhUTUxTdGFja0l0ZW0+JiYgaXRlbSwgc3RkOjp1
bmlxdWVfcHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpCisgICAgOiBtX2l0ZW0oV1RGTW92ZShpdGVt
KSkKICAgICAsIG1fbmV4dChXVEZNb3ZlKG5leHQpKQogewotICAgIEFTU0VSVChtX2l0ZW0pOwog
fQogCiBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjp+RWxlbWVudFJlY29yZCgpCiB7
CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6cmVwbGFjZUVsZW1l
bnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtKQordm9pZCBIVE1MRWxlbWVudFN0YWNr
OjpFbGVtZW50UmVjb3JkOjpyZXBsYWNlRWxlbWVudChSZWY8SFRNTFN0YWNrSXRlbT4mJiBpdGVt
KQogewotICAgIEFTU0VSVChpdGVtKTsKLSAgICBBU1NFUlQoIW1faXRlbSB8fCBtX2l0ZW0tPmlz
RWxlbWVudCgpKTsKKyAgICBBU1NFUlQobV9pdGVtLT5pc0VsZW1lbnQoKSk7CiAgICAgLy8gRklY
TUU6IFNob3VsZCB0aGlzIGNhbGwgZmluaXNoUGFyc2luZ0NoaWxkcmVuPwotICAgIG1faXRlbSA9
IGl0ZW07CisgICAgbV9pdGVtID0gV1RGTW92ZShpdGVtKTsKIH0KIAotYm9vbCBIVE1MRWxlbWVu
dFN0YWNrOjpFbGVtZW50UmVjb3JkOjppc0Fib3ZlKEVsZW1lbnRSZWNvcmQqIG90aGVyKSBjb25z
dAorYm9vbCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjppc0Fib3ZlKEVsZW1lbnRS
ZWNvcmQmIG90aGVyKSBjb25zdAogewotICAgIGZvciAoRWxlbWVudFJlY29yZCogYmVsb3cgPSBu
ZXh0KCk7IGJlbG93OyBiZWxvdyA9IGJlbG93LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKGJlbG93
ID09IG90aGVyKQorICAgIGZvciAoYXV0byogYmVsb3cgPSBuZXh0KCk7IGJlbG93OyBiZWxvdyA9
IGJlbG93LT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGJlbG93ID09ICZvdGhlcikKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUhUTUxFbGVt
ZW50U3RhY2s6OkhUTUxFbGVtZW50U3RhY2soKQotICAgIDogbV9yb290Tm9kZSgwKQotICAgICwg
bV9oZWFkRWxlbWVudCgwKQotICAgICwgbV9ib2R5RWxlbWVudCgwKQotICAgICwgbV9zdGFja0Rl
cHRoKDApCi17Ci19Ci0KIEhUTUxFbGVtZW50U3RhY2s6On5IVE1MRWxlbWVudFN0YWNrKCkKIHsK
IH0KQEAgLTE4OSw5ICsxNzgsOSBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnBvcEhUTUxCb2R5
RWxlbWVudCgpCiAKIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wQWxsKCkKIHsKLSAgICBtX3Jv
b3ROb2RlID0gMDsKLSAgICBtX2hlYWRFbGVtZW50ID0gMDsKLSAgICBtX2JvZHlFbGVtZW50ID0g
MDsKKyAgICBtX3Jvb3ROb2RlID0gbnVsbHB0cjsKKyAgICBtX2hlYWRFbGVtZW50ID0gbnVsbHB0
cjsKKyAgICBtX2JvZHlFbGVtZW50ID0gbnVsbHB0cjsKICAgICBtX3N0YWNrRGVwdGggPSAwOwog
ICAgIHdoaWxlIChtX3RvcCkgewogICAgICAgICB0b3BOb2RlKCkuZmluaXNoUGFyc2luZ0NoaWxk
cmVuKCk7CkBAIC0yMjYsMTMgKzIxNSwxMyBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnBvcFVu
dGlsTnVtYmVyZWRIZWFkZXJFbGVtZW50UG9wcGVkKCkKICAgICBwb3AoKTsKIH0KIAotdm9pZCBI
VE1MRWxlbWVudFN0YWNrOjpwb3BVbnRpbChFbGVtZW50KiBlbGVtZW50KQordm9pZCBIVE1MRWxl
bWVudFN0YWNrOjpwb3BVbnRpbChFbGVtZW50JiBlbGVtZW50KQogewotICAgIHdoaWxlICgmdG9w
KCkgIT0gZWxlbWVudCkKKyAgICB3aGlsZSAoJnRvcCgpICE9ICZlbGVtZW50KQogICAgICAgICBw
b3AoKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BVbnRpbFBvcHBlZChFbGVtZW50
KiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BVbnRpbFBvcHBlZChFbGVtZW50
JiBlbGVtZW50KQogewogICAgIHBvcFVudGlsKGVsZW1lbnQpOwogICAgIHBvcCgpOwpAQCAtMjky
LDc4ICsyODEsNzYgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BVbnRpbEZvcmVpZ25Db250
ZW50U2NvcGVNYXJrZXIoKQogICAgICAgICBwb3AoKTsKIH0KICAgICAKLXZvaWQgSFRNTEVsZW1l
bnRTdGFjazo6cHVzaFJvb3ROb2RlKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gcm9vdEl0ZW0p
Cit2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hSb290Tm9kZShSZWY8SFRNTFN0YWNrSXRlbT4m
JiByb290SXRlbSkKIHsKICAgICBBU1NFUlQocm9vdEl0ZW0tPmlzRG9jdW1lbnRGcmFnbWVudCgp
KTsKLSAgICBwdXNoUm9vdE5vZGVDb21tb24ocm9vdEl0ZW0pOworICAgIHB1c2hSb290Tm9kZUNv
bW1vbihXVEZNb3ZlKHJvb3RJdGVtKSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVz
aEhUTUxIdG1sRWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGl0ZW0pCit2b2lkIEhU
TUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSHRtbEVsZW1lbnQoUmVmPEhUTUxTdGFja0l0ZW0+JiYg
aXRlbSkKIHsKICAgICBBU1NFUlQoaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWxUYWcp
KTsKLSAgICBwdXNoUm9vdE5vZGVDb21tb24oaXRlbSk7CisgICAgcHVzaFJvb3ROb2RlQ29tbW9u
KFdURk1vdmUoaXRlbSkpOwogfQogICAgIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoUm9v
dE5vZGVDb21tb24oUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiByb290SXRlbSkKK3ZvaWQgSFRN
TEVsZW1lbnRTdGFjazo6cHVzaFJvb3ROb2RlQ29tbW9uKFJlZjxIVE1MU3RhY2tJdGVtPiYmIHJv
b3RJdGVtKQogewogICAgIEFTU0VSVCghbV90b3ApOwogICAgIEFTU0VSVCghbV9yb290Tm9kZSk7
CiAgICAgbV9yb290Tm9kZSA9ICZyb290SXRlbS0+bm9kZSgpOwotICAgIHB1c2hDb21tb24ocm9v
dEl0ZW0pOworICAgIHB1c2hDb21tb24oV1RGTW92ZShyb290SXRlbSkpOwogfQogCi12b2lkIEhU
TUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MSGVhZEVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJ
dGVtPiBpdGVtKQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoSFRNTEhlYWRFbGVtZW50KFJl
ZjxIVE1MU3RhY2tJdGVtPiYmIGl0ZW0pCiB7CiAgICAgQVNTRVJUKGl0ZW0tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoZWFkVGFnKSk7CiAgICAgQVNTRVJUKCFtX2hlYWRFbGVtZW50KTsKICAgICBt
X2hlYWRFbGVtZW50ID0gJml0ZW0tPmVsZW1lbnQoKTsKLSAgICBwdXNoQ29tbW9uKGl0ZW0pOwor
ICAgIHB1c2hDb21tb24oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnRTdGFj
azo6cHVzaEhUTUxCb2R5RWxlbWVudChQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGl0ZW0pCit2
b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1c2hIVE1MQm9keUVsZW1lbnQoUmVmPEhUTUxTdGFja0l0
ZW0+JiYgaXRlbSkKIHsKICAgICBBU1NFUlQoaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJv
ZHlUYWcpKTsKICAgICBBU1NFUlQoIW1fYm9keUVsZW1lbnQpOwogICAgIG1fYm9keUVsZW1lbnQg
PSAmaXRlbS0+ZWxlbWVudCgpOwotICAgIHB1c2hDb21tb24oaXRlbSk7CisgICAgcHVzaENvbW1v
bihXVEZNb3ZlKGl0ZW0pKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwdXNoKFBhc3NS
ZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cHVzaChS
ZWY8SFRNTFN0YWNrSXRlbT4mJiBpdGVtKQogewogICAgIEFTU0VSVCghaXRlbS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omh0bWxUYWcpKTsKICAgICBBU1NFUlQoIWl0ZW0tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpoZWFkVGFnKSk7CiAgICAgQVNTRVJUKCFpdGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6Ym9keVRhZykpOwogICAgIEFTU0VSVChtX3Jvb3ROb2RlKTsKLSAgICBwdXNoQ29tbW9uKGl0
ZW0pOworICAgIHB1c2hDb21tb24oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgSFRNTEVsZW1l
bnRTdGFjazo6aW5zZXJ0QWJvdmUoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtLCBFbGVt
ZW50UmVjb3JkKiByZWNvcmRCZWxvdykKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJv
dmUoUmVmPEhUTUxTdGFja0l0ZW0+JiYgaXRlbSwgRWxlbWVudFJlY29yZCYgcmVjb3JkQmVsb3cp
CiB7Ci0gICAgQVNTRVJUKGl0ZW0pOwotICAgIEFTU0VSVChyZWNvcmRCZWxvdyk7CiAgICAgQVNT
RVJUKG1fdG9wKTsKICAgICBBU1NFUlQoIWl0ZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1s
VGFnKSk7CiAgICAgQVNTRVJUKCFpdGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykp
OwogICAgIEFTU0VSVCghaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpKTsKICAg
ICBBU1NFUlQobV9yb290Tm9kZSk7Ci0gICAgaWYgKHJlY29yZEJlbG93ID09IG1fdG9wLmdldCgp
KSB7Ci0gICAgICAgIHB1c2goaXRlbSk7CisgICAgaWYgKCZyZWNvcmRCZWxvdyA9PSBtX3RvcC5n
ZXQoKSkgeworICAgICAgICBwdXNoKGl0ZW0uY29weVJlZigpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGZvciAoRWxlbWVudFJlY29yZCogcmVjb3JkQWJvdmUgPSBtX3RvcC5nZXQo
KTsgcmVjb3JkQWJvdmU7IHJlY29yZEFib3ZlID0gcmVjb3JkQWJvdmUtPm5leHQoKSkgewotICAg
ICAgICBpZiAocmVjb3JkQWJvdmUtPm5leHQoKSAhPSByZWNvcmRCZWxvdykKKyAgICBmb3IgKGF1
dG8qIHJlY29yZEFib3ZlID0gbV90b3AuZ2V0KCk7IHJlY29yZEFib3ZlOyByZWNvcmRBYm92ZSA9
IHJlY29yZEFib3ZlLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKHJlY29yZEFib3ZlLT5uZXh0KCkg
IT0gJnJlY29yZEJlbG93KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgbV9zdGFj
a0RlcHRoKys7Ci0gICAgICAgIHJlY29yZEFib3ZlLT5zZXROZXh0KHN0ZDo6bWFrZV91bmlxdWU8
RWxlbWVudFJlY29yZD4oaXRlbSwgcmVjb3JkQWJvdmUtPnJlbGVhc2VOZXh0KCkpKTsKKyAgICAg
ICAgKyttX3N0YWNrRGVwdGg7CisgICAgICAgIHJlY29yZEFib3ZlLT5zZXROZXh0KHN0ZDo6bWFr
ZV91bmlxdWU8RWxlbWVudFJlY29yZD4oV1RGTW92ZShpdGVtKSwgcmVjb3JkQWJvdmUtPnJlbGVh
c2VOZXh0KCkpKTsKICAgICAgICAgcmVjb3JkQWJvdmUtPm5leHQoKS0+ZWxlbWVudCgpLmJlZ2lu
UGFyc2luZ0NoaWxkcmVuKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKLUhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQmIEhUTUxF
bGVtZW50U3RhY2s6OnRvcFJlY29yZCgpIGNvbnN0CithdXRvIEhUTUxFbGVtZW50U3RhY2s6OnRv
cFJlY29yZCgpIGNvbnN0IC0+IEVsZW1lbnRSZWNvcmQmCiB7CiAgICAgQVNTRVJUKG1fdG9wKTsK
ICAgICByZXR1cm4gKm1fdG9wOwpAQCAtMzc5LDEwICszNjYsMTAgQEAgSFRNTFN0YWNrSXRlbSog
SFRNTEVsZW1lbnRTdGFjazo6b25lQmVsb3dUb3AoKSBjb25zdAogICAgIHJldHVybiBudWxscHRy
OwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZUhUTUxIZWFkRWxlbWVudChFbGVt
ZW50KiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmVIVE1MSGVhZEVsZW1l
bnQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQobV9oZWFkRWxlbWVudCA9PSBlbGVt
ZW50KTsKLSAgICBpZiAoJm1fdG9wLT5lbGVtZW50KCkgPT0gZWxlbWVudCkgeworICAgIEFTU0VS
VChtX2hlYWRFbGVtZW50ID09ICZlbGVtZW50KTsKKyAgICBpZiAoJm1fdG9wLT5lbGVtZW50KCkg
PT0gJmVsZW1lbnQpIHsKICAgICAgICAgcG9wSFRNTEhlYWRFbGVtZW50KCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zOTAsMzUgKzM3NywzNSBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6
OnJlbW92ZUhUTUxIZWFkRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgIHJlbW92ZU5vblRv
cENvbW1vbihlbGVtZW50KTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1vdmUoRWxl
bWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlKEVsZW1lbnQmIGVs
ZW1lbnQpCiB7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVh
ZFRhZykpOwotICAgIGlmICgmbV90b3AtPmVsZW1lbnQoKSA9PSBlbGVtZW50KSB7CisgICAgQVNT
RVJUKCFlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSk7CisgICAgaWYgKCZt
X3RvcC0+ZWxlbWVudCgpID09ICZlbGVtZW50KSB7CiAgICAgICAgIHBvcCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIHJlbW92ZU5vblRvcENvbW1vbihlbGVtZW50KTsKIH0KIAotSFRN
TEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogSFRNTEVsZW1lbnRTdGFjazo6ZmluZChFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAorYXV0byBIVE1MRWxlbWVudFN0YWNrOjpmaW5kKEVsZW1lbnQm
IGVsZW1lbnQpIGNvbnN0IC0+IEVsZW1lbnRSZWNvcmQqCiB7Ci0gICAgZm9yIChFbGVtZW50UmVj
b3JkKiByZWNvcmQgPSBtX3RvcC5nZXQoKTsgcmVjb3JkOyByZWNvcmQgPSByZWNvcmQtPm5leHQo
KSkgewotICAgICAgICBpZiAoJnJlY29yZC0+bm9kZSgpID09IGVsZW1lbnQpCisgICAgZm9yIChh
dXRvKiByZWNvcmQgPSBtX3RvcC5nZXQoKTsgcmVjb3JkOyByZWNvcmQgPSByZWNvcmQtPm5leHQo
KSkgeworICAgICAgICBpZiAoJnJlY29yZC0+bm9kZSgpID09ICZlbGVtZW50KQogICAgICAgICAg
ICAgcmV0dXJuIHJlY29yZDsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUhUTUxF
bGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIEhUTUxFbGVtZW50U3RhY2s6OnRvcG1vc3QoY29u
c3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKSBjb25zdAorYXV0byBIVE1MRWxlbWVudFN0YWNrOjp0
b3Btb3N0KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3QgLT4gRWxlbWVudFJlY29y
ZCoKIHsKLSAgICBmb3IgKEVsZW1lbnRSZWNvcmQqIHJlY29yZCA9IG1fdG9wLmdldCgpOyByZWNv
cmQ7IHJlY29yZCA9IHJlY29yZC0+bmV4dCgpKSB7CisgICAgZm9yIChhdXRvKiByZWNvcmQgPSBt
X3RvcC5nZXQoKTsgcmVjb3JkOyByZWNvcmQgPSByZWNvcmQtPm5leHQoKSkgewogICAgICAgICBp
ZiAocmVjb3JkLT5zdGFja0l0ZW0oKS5tYXRjaGVzSFRNTFRhZyh0YWdOYW1lKSkKICAgICAgICAg
ICAgIHJldHVybiByZWNvcmQ7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29s
IEhUTUxFbGVtZW50U3RhY2s6OmNvbnRhaW5zKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29s
IEhUTUxFbGVtZW50U3RhY2s6OmNvbnRhaW5zKEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuICEhZmluZChlbGVtZW50KTsKIH0KQEAgLTQzMSw3ICs0MTgsNyBAQCBib29sIEhU
TUxFbGVtZW50U3RhY2s6OmNvbnRhaW5zKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29u
c3QKIHRlbXBsYXRlIDxib29sIGlzTWFya2VyKEhUTUxTdGFja0l0ZW0mKT4gYm9vbCBpblNjb3Bl
Q29tbW9uKEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIHRvcCwgY29uc3QgQXRvbWlj
U3RyaW5nJiB0YXJnZXRUYWcpCiB7CiAgICAgZm9yIChhdXRvKiByZWNvcmQgPSB0b3A7IHJlY29y
ZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkpIHsKLSAgICAgICAgSFRNTFN0YWNrSXRlbSYgaXRl
bSA9IHJlY29yZC0+c3RhY2tJdGVtKCk7CisgICAgICAgIGF1dG8mIGl0ZW0gPSByZWNvcmQtPnN0
YWNrSXRlbSgpOwogICAgICAgICBpZiAoaXRlbS5tYXRjaGVzSFRNTFRhZyh0YXJnZXRUYWcpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChpc01hcmtlcihpdGVtKSkKQEAg
LTQ0Myw4ICs0MzAsOCBAQCB0ZW1wbGF0ZSA8Ym9vbCBpc01hcmtlcihIVE1MU3RhY2tJdGVtJik+
IGJvb2wgaW5TY29wZUNvbW1vbihIVE1MRWxlbWVudFN0YWNrOjpFbAogCiBib29sIEhUTUxFbGVt
ZW50U3RhY2s6Omhhc051bWJlcmVkSGVhZGVyRWxlbWVudEluU2NvcGUoKSBjb25zdAogewotICAg
IGZvciAoRWxlbWVudFJlY29yZCogcmVjb3JkID0gbV90b3AuZ2V0KCk7IHJlY29yZDsgcmVjb3Jk
ID0gcmVjb3JkLT5uZXh0KCkpIHsKLSAgICAgICAgSFRNTFN0YWNrSXRlbSYgaXRlbSA9IHJlY29y
ZC0+c3RhY2tJdGVtKCk7CisgICAgZm9yIChhdXRvKiByZWNvcmQgPSBtX3RvcC5nZXQoKTsgcmVj
b3JkOyByZWNvcmQgPSByZWNvcmQtPm5leHQoKSkgeworICAgICAgICBhdXRvJiBpdGVtID0gcmVj
b3JkLT5zdGFja0l0ZW0oKTsKICAgICAgICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJFbGVtZW50KGl0
ZW0pKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChpc1Njb3BlTWFya2Vy
KGl0ZW0pKQpAQCAtNDU0LDExICs0NDEsMTEgQEAgYm9vbCBIVE1MRWxlbWVudFN0YWNrOjpoYXNO
dW1iZXJlZEhlYWRlckVsZW1lbnRJblNjb3BlKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgSFRNTEVsZW1lbnRTdGFjazo6aW5TY29wZShFbGVtZW50KiB0YXJnZXRFbGVtZW50
KSBjb25zdAorYm9vbCBIVE1MRWxlbWVudFN0YWNrOjppblNjb3BlKEVsZW1lbnQmIHRhcmdldEVs
ZW1lbnQpIGNvbnN0CiB7Ci0gICAgZm9yIChFbGVtZW50UmVjb3JkKiByZWNvcmQgPSBtX3RvcC5n
ZXQoKTsgcmVjb3JkOyByZWNvcmQgPSByZWNvcmQtPm5leHQoKSkgewotICAgICAgICBIVE1MU3Rh
Y2tJdGVtJiBpdGVtID0gcmVjb3JkLT5zdGFja0l0ZW0oKTsKLSAgICAgICAgaWYgKCZpdGVtLm5v
ZGUoKSA9PSB0YXJnZXRFbGVtZW50KQorICAgIGZvciAoYXV0byogcmVjb3JkID0gbV90b3AuZ2V0
KCk7IHJlY29yZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkpIHsKKyAgICAgICAgYXV0byYgaXRl
bSA9IHJlY29yZC0+c3RhY2tJdGVtKCk7CisgICAgICAgIGlmICgmaXRlbS5ub2RlKCkgPT0gJnRh
cmdldEVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGlzU2Nv
cGVNYXJrZXIoaXRlbSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NDUsMTIgKzUz
MiwxMiBAQCBDb250YWluZXJOb2RlJiBIVE1MRWxlbWVudFN0YWNrOjpyb290Tm9kZSgpIGNvbnN0
CiAgICAgcmV0dXJuICptX3Jvb3ROb2RlOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnB1
c2hDb21tb24oUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVtKQordm9pZCBIVE1MRWxlbWVu
dFN0YWNrOjpwdXNoQ29tbW9uKFJlZjxIVE1MU3RhY2tJdGVtPiYmIGl0ZW0pCiB7CiAgICAgQVNT
RVJUKG1fcm9vdE5vZGUpOwogCi0gICAgbV9zdGFja0RlcHRoKys7Ci0gICAgbV90b3AgPSBzdGQ6
Om1ha2VfdW5pcXVlPEVsZW1lbnRSZWNvcmQ+KGl0ZW0sIFdURk1vdmUobV90b3ApKTsKKyAgICAr
K21fc3RhY2tEZXB0aDsKKyAgICBtX3RvcCA9IHN0ZDo6bWFrZV91bmlxdWU8RWxlbWVudFJlY29y
ZD4oV1RGTW92ZShpdGVtKSwgV1RGTW92ZShtX3RvcCkpOwogfQogCiB2b2lkIEhUTUxFbGVtZW50
U3RhY2s6OnBvcENvbW1vbigpCkBAIC01NjIsMzIgKzU0OSwzMiBAQCB2b2lkIEhUTUxFbGVtZW50
U3RhY2s6OnBvcENvbW1vbigpCiAgICAgdG9wKCkuZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAg
ICAgbV90b3AgPSBtX3RvcC0+cmVsZWFzZU5leHQoKTsKIAotICAgIG1fc3RhY2tEZXB0aC0tOwor
ICAgIC0tbV9zdGFja0RlcHRoOwogfQogCi12b2lkIEhUTUxFbGVtZW50U3RhY2s6OnJlbW92ZU5v
blRvcENvbW1vbihFbGVtZW50KiBlbGVtZW50KQordm9pZCBIVE1MRWxlbWVudFN0YWNrOjpyZW1v
dmVOb25Ub3BDb21tb24oRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoIWVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7Ci0gICAgQVNTRVJUKCFlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykpOwotICAgIEFTU0VSVCgmdG9wKCkgIT0gZWxl
bWVudCk7Ci0gICAgZm9yIChFbGVtZW50UmVjb3JkKiByZWNvcmQgPSBtX3RvcC5nZXQoKTsgcmVj
b3JkOyByZWNvcmQgPSByZWNvcmQtPm5leHQoKSkgewotICAgICAgICBpZiAoJnJlY29yZC0+bmV4
dCgpLT5lbGVtZW50KCkgPT0gZWxlbWVudCkgeworICAgIEFTU0VSVCghZWxlbWVudC5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aHRtbFRhZykpOworICAgIEFTU0VSVCghZWxlbWVudC5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Ym9keVRhZykpOworICAgIEFTU0VSVCgmdG9wKCkgIT0gJmVsZW1lbnQpOwor
ICAgIGZvciAoYXV0byogcmVjb3JkID0gbV90b3AuZ2V0KCk7IHJlY29yZDsgcmVjb3JkID0gcmVj
b3JkLT5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCZyZWNvcmQtPm5leHQoKS0+ZWxlbWVudCgpID09
ICZlbGVtZW50KSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogSXMgaXQgT0sgdG8gY2FsbCBmaW5p
c2hQYXJzaW5nQ2hpbGRyZW4oKQogICAgICAgICAgICAgLy8gd2hlbiB0aGUgY2hpbGRyZW4gYXJl
bid0IGFjdHVhbGx5IGZpbmlzaGVkPwotICAgICAgICAgICAgZWxlbWVudC0+ZmluaXNoUGFyc2lu
Z0NoaWxkcmVuKCk7CisgICAgICAgICAgICBlbGVtZW50LmZpbmlzaFBhcnNpbmdDaGlsZHJlbigp
OwogICAgICAgICAgICAgcmVjb3JkLT5zZXROZXh0KHJlY29yZC0+bmV4dCgpLT5yZWxlYXNlTmV4
dCgpKTsKLSAgICAgICAgICAgIG1fc3RhY2tEZXB0aC0tOworICAgICAgICAgICAgLS1tX3N0YWNr
RGVwdGg7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLUhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIEhU
TUxFbGVtZW50U3RhY2s6OmZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5nRWxlbWVudChFbGVtZW50
KiBmb3JtYXR0aW5nRWxlbWVudCkgY29uc3QKK2F1dG8gSFRNTEVsZW1lbnRTdGFjazo6ZnVydGhl
c3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KEVsZW1lbnQmIGZvcm1hdHRpbmdFbGVtZW50KSBj
b25zdCAtPiBFbGVtZW50UmVjb3JkKgogewogICAgIEVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0Qmxv
Y2sgPSBudWxscHRyOwotICAgIGZvciAoRWxlbWVudFJlY29yZCogcmVjb3JkID0gbV90b3AuZ2V0
KCk7IHJlY29yZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCZyZWNv
cmQtPmVsZW1lbnQoKSA9PSBmb3JtYXR0aW5nRWxlbWVudCkKKyAgICBmb3IgKGF1dG8qIHJlY29y
ZCA9IG1fdG9wLmdldCgpOyByZWNvcmQ7IHJlY29yZCA9IHJlY29yZC0+bmV4dCgpKSB7CisgICAg
ICAgIGlmICgmcmVjb3JkLT5lbGVtZW50KCkgPT0gJmZvcm1hdHRpbmdFbGVtZW50KQogICAgICAg
ICAgICAgcmV0dXJuIGZ1cnRoZXN0QmxvY2s7CiAgICAgICAgIGlmIChpc1NwZWNpYWxOb2RlKHJl
Y29yZC0+c3RhY2tJdGVtKCkpKQogICAgICAgICAgICAgZnVydGhlc3RCbG9jayA9IHJlY29yZDsK
QEAgLTYwMCw3ICs1ODcsNyBAQCBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBIVE1M
RWxlbWVudFN0YWNrOjpmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZQogCiB2b2lkIEhUTUxF
bGVtZW50U3RhY2s6OnNob3coKQogewotICAgIGZvciAoRWxlbWVudFJlY29yZCogcmVjb3JkID0g
bV90b3AuZ2V0KCk7IHJlY29yZDsgcmVjb3JkID0gcmVjb3JkLT5uZXh0KCkpCisgICAgZm9yIChh
dXRvKiByZWNvcmQgPSBtX3RvcC5nZXQoKTsgcmVjb3JkOyByZWNvcmQgPSByZWNvcmQtPm5leHQo
KSkKICAgICAgICAgcmVjb3JkLT5lbGVtZW50KCkuc2hvd05vZGUoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5oCmluZGV4IDM4MjJhZjRiMWQ3
Yzk5MWM4ZWZjYWY1MTUxMzkyMDgzY2Q0M2VjOTMuLmJlM2JkMmUwMTkyZjA1YzA0ZTc4MDY4Yzdk
YzZmOTAzN2NjMWJlNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxFbGVtZW50U3RhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxl
bWVudFN0YWNrLmgKQEAgLTQ0LDIyICs0NCwyNCBAQCBjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xh
c3MgSFRNTEVsZW1lbnRTdGFjayB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSFRNTEVsZW1l
bnRTdGFjayk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEhUTUxFbGVt
ZW50U3RhY2soKTsKKyAgICBIVE1MRWxlbWVudFN0YWNrKCkgPSBkZWZhdWx0OwogICAgIH5IVE1M
RWxlbWVudFN0YWNrKCk7CiAKICAgICBjbGFzcyBFbGVtZW50UmVjb3JkIHsKICAgICAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRWxlbWVudFJlY29yZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIHB1YmxpYzoKLSAgICAgICAgRWxlbWVudFJlY29yZChQYXNzUmVmUHRyPEhUTUxTdGFj
a0l0ZW0+LCBzdGQ6OnVuaXF1ZV9wdHI8RWxlbWVudFJlY29yZD4pOworICAgICAgICBFbGVtZW50
UmVjb3JkKFJlZjxIVE1MU3RhY2tJdGVtPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8RWxlbWVudFJlY29y
ZD4pOwogICAgICAgICB+RWxlbWVudFJlY29yZCgpOwogICAgIAogICAgICAgICBFbGVtZW50JiBl
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLT5lbGVtZW50KCk7IH0KICAgICAgICAgQ29u
dGFpbmVyTm9kZSYgbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS0+bm9kZSgpOyB9CiAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4gbV9p
dGVtLT5uYW1lc3BhY2VVUkkoKTsgfQotICAgICAgICBIVE1MU3RhY2tJdGVtJiBzdGFja0l0ZW0o
KSBjb25zdCB7IHJldHVybiAqbV9pdGVtOyB9Ci0gICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQo
UGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CisgICAgICAgIEhUTUxTdGFja0l0ZW0mIHN0YWNr
SXRlbSgpIHsgcmV0dXJuIG1faXRlbS5nZXQoKTsgfQorICAgICAgICBjb25zdCBIVE1MU3RhY2tJ
dGVtJiBzdGFja0l0ZW0oKSBjb25zdCB7IHJldHVybiBtX2l0ZW0uZ2V0KCk7IH0KIAotICAgICAg
ICBib29sIGlzQWJvdmUoRWxlbWVudFJlY29yZCopIGNvbnN0OworICAgICAgICB2b2lkIHJlcGxh
Y2VFbGVtZW50KFJlZjxIVE1MU3RhY2tJdGVtPiYmKTsKKworICAgICAgICBib29sIGlzQWJvdmUo
RWxlbWVudFJlY29yZCYpIGNvbnN0OwogCiAgICAgICAgIEVsZW1lbnRSZWNvcmQqIG5leHQoKSBj
b25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KIApAQCAtNjksNyArNzEsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxFbGVtZW50UmVjb3JkPiByZWxlYXNlTmV4dCgpIHsg
cmV0dXJuIFdURk1vdmUobV9uZXh0KTsgfQogICAgICAgICB2b2lkIHNldE5leHQoc3RkOjp1bmlx
dWVfcHRyPEVsZW1lbnRSZWNvcmQ+IG5leHQpIHsgbV9uZXh0ID0gV1RGTW92ZShuZXh0KTsgfQog
Ci0gICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBtX2l0ZW07CisgICAgICAgIFJlZjxIVE1M
U3RhY2tJdGVtPiBtX2l0ZW07CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxFbGVtZW50UmVjb3Jk
PiBtX25leHQ7CiAgICAgfTsKIApAQCAtOTQsMjUgKzk2LDI1IEBAIHB1YmxpYzoKIAogICAgIEhU
TUxTdGFja0l0ZW0qIG9uZUJlbG93VG9wKCkgY29uc3Q7CiAgICAgRWxlbWVudFJlY29yZCYgdG9w
UmVjb3JkKCkgY29uc3Q7Ci0gICAgRWxlbWVudFJlY29yZCogZmluZChFbGVtZW50KikgY29uc3Q7
Ci0gICAgRWxlbWVudFJlY29yZCogZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KEVs
ZW1lbnQqKSBjb25zdDsKKyAgICBFbGVtZW50UmVjb3JkKiBmaW5kKEVsZW1lbnQmKSBjb25zdDsK
KyAgICBFbGVtZW50UmVjb3JkKiBmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoRWxl
bWVudCYpIGNvbnN0OwogICAgIEVsZW1lbnRSZWNvcmQqIHRvcG1vc3QoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lKSBjb25zdDsKIAotICAgIHZvaWQgaW5zZXJ0QWJvdmUoUGFzc1JlZlB0cjxI
VE1MU3RhY2tJdGVtPiwgRWxlbWVudFJlY29yZCopOworICAgIHZvaWQgaW5zZXJ0QWJvdmUoUmVm
PEhUTUxTdGFja0l0ZW0+JiYsIEVsZW1lbnRSZWNvcmQmKTsKIAotICAgIHZvaWQgcHVzaChQYXNz
UmVmUHRyPEhUTUxTdGFja0l0ZW0+KTsKLSAgICB2b2lkIHB1c2hSb290Tm9kZShQYXNzUmVmUHRy
PEhUTUxTdGFja0l0ZW0+KTsKLSAgICB2b2lkIHB1c2hIVE1MSHRtbEVsZW1lbnQoUGFzc1JlZlB0
cjxIVE1MU3RhY2tJdGVtPik7Ci0gICAgdm9pZCBwdXNoSFRNTEhlYWRFbGVtZW50KFBhc3NSZWZQ
dHI8SFRNTFN0YWNrSXRlbT4pOwotICAgIHZvaWQgcHVzaEhUTUxCb2R5RWxlbWVudChQYXNzUmVm
UHRyPEhUTUxTdGFja0l0ZW0+KTsKKyAgICB2b2lkIHB1c2goUmVmPEhUTUxTdGFja0l0ZW0+JiYp
OworICAgIHZvaWQgcHVzaFJvb3ROb2RlKFJlZjxIVE1MU3RhY2tJdGVtPiYmKTsKKyAgICB2b2lk
IHB1c2hIVE1MSHRtbEVsZW1lbnQoUmVmPEhUTUxTdGFja0l0ZW0+JiYpOworICAgIHZvaWQgcHVz
aEhUTUxIZWFkRWxlbWVudChSZWY8SFRNTFN0YWNrSXRlbT4mJik7CisgICAgdm9pZCBwdXNoSFRN
TEJvZHlFbGVtZW50KFJlZjxIVE1MU3RhY2tJdGVtPiYmKTsKIAogICAgIHZvaWQgcG9wKCk7CiAg
ICAgdm9pZCBwb3BVbnRpbChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwotICAgIHZvaWQg
cG9wVW50aWwoRWxlbWVudCopOworICAgIHZvaWQgcG9wVW50aWwoRWxlbWVudCYpOwogICAgIHZv
aWQgcG9wVW50aWxQb3BwZWQoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKICAgICB2b2lk
IHBvcFVudGlsUG9wcGVkKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpIHsgcG9wVW50aWxQ
b3BwZWQodGFnTmFtZS5sb2NhbE5hbWUoKSk7IH0KIAotICAgIHZvaWQgcG9wVW50aWxQb3BwZWQo
RWxlbWVudCopOworICAgIHZvaWQgcG9wVW50aWxQb3BwZWQoRWxlbWVudCYpOwogICAgIHZvaWQg
cG9wVW50aWxOdW1iZXJlZEhlYWRlckVsZW1lbnRQb3BwZWQoKTsKICAgICB2b2lkIHBvcFVudGls
VGFibGVTY29wZU1hcmtlcigpOyAvLyAiY2xlYXIgdGhlIHN0YWNrIGJhY2sgdG8gYSB0YWJsZSBj
b250ZXh0IiBpbiB0aGUgc3BlYy4KICAgICB2b2lkIHBvcFVudGlsVGFibGVCb2R5U2NvcGVNYXJr
ZXIoKTsgLy8gImNsZWFyIHRoZSBzdGFjayBiYWNrIHRvIGEgdGFibGUgYm9keSBjb250ZXh0IiBp
biB0aGUgc3BlYy4KQEAgLTEyNSwxMyArMTI3LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9v
bCBpc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KEhUTUxTdGFja0l0ZW0mKTsKICAgICBzdGF0
aWMgYm9vbCBpc0hUTUxJbnRlZ3JhdGlvblBvaW50KEhUTUxTdGFja0l0ZW0mKTsKIAotICAgIHZv
aWQgcmVtb3ZlKEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUhUTUxIZWFkRWxlbWVudChFbGVt
ZW50Kik7CisgICAgdm9pZCByZW1vdmUoRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlSFRNTEhl
YWRFbGVtZW50KEVsZW1lbnQmKTsKIAotICAgIGJvb2wgY29udGFpbnMoRWxlbWVudCopIGNvbnN0
OworICAgIGJvb2wgY29udGFpbnMoRWxlbWVudCYpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKSBjb25zdDsKIAotICAgIGJvb2wgaW5TY29wZShF
bGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBpblNjb3BlKEVsZW1lbnQmKSBjb25zdDsKICAgICBi
b29sIGluU2NvcGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKSBjb25zdDsKICAgICBib29s
IGluU2NvcGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIGJvb2wgaW5MaXN0SXRl
bVNjb3BlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkgY29uc3Q7CkBAIC0xNTksMTAgKzE2
MSwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2b2lkIHB1c2hDb21tb24o
UGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7Ci0gICAgdm9pZCBwdXNoUm9vdE5vZGVDb21tb24o
UGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVtPik7CisgICAgdm9pZCBwdXNoQ29tbW9uKFJlZjxIVE1M
U3RhY2tJdGVtPiYmKTsKKyAgICB2b2lkIHB1c2hSb290Tm9kZUNvbW1vbihSZWY8SFRNTFN0YWNr
SXRlbT4mJik7CiAgICAgdm9pZCBwb3BDb21tb24oKTsKLSAgICB2b2lkIHJlbW92ZU5vblRvcENv
bW1vbihFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVOb25Ub3BDb21tb24oRWxlbWVudCYpOwog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEVsZW1lbnRSZWNvcmQ+IG1fdG9wOwogCkBAIC0xNzEsMTAg
KzE3MywxMCBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkgcmVx
dWlyZSB0eXBlLXNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0CiAgICAgLy8gdGhlc2UgZWxlbWVu
dHMgc28gd2UgaGF2ZW4ndCB5ZXQgYm90aGVyZWQgdG8gcGx1bWIgdGhlIHR5cGVzIGFsbCB0aGUK
ICAgICAvLyB3YXkgZG93biB0aHJvdWdoIGNyZWF0ZUVsZW1lbnQsIGV0Yy4KLSAgICBDb250YWlu
ZXJOb2RlKiBtX3Jvb3ROb2RlOwotICAgIEVsZW1lbnQqIG1faGVhZEVsZW1lbnQ7Ci0gICAgRWxl
bWVudCogbV9ib2R5RWxlbWVudDsKLSAgICB1bnNpZ25lZCBtX3N0YWNrRGVwdGg7CisgICAgQ29u
dGFpbmVyTm9kZSogbV9yb290Tm9kZSB7IG51bGxwdHIgfTsKKyAgICBFbGVtZW50KiBtX2hlYWRF
bGVtZW50IHsgbnVsbHB0ciB9OworICAgIEVsZW1lbnQqIG1fYm9keUVsZW1lbnQgeyBudWxscHRy
IH07CisgICAgdW5zaWduZWQgbV9zdGFja0RlcHRoIHsgMCB9OwogfTsKICAgICAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKaW5kZXggN2NjMGJmYmU0NmIzZTRlZmI2YWQ3
YWRlYjNlOWEzYzNhZjdmNTkzZi4uZDM1MTAxYjQ5MDcxZWE0NDlkMDc3NjUzZDQyMTRhOWNjMDgw
NTA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRp
bmdFbGVtZW50TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZv
cm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKQEAgLTU3LDUyICs1Nyw1MiBAQCBFbGVtZW50KiBIVE1M
Rm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpjbG9zZXN0RWxlbWVudEluU2NvcGVXaXRoTmFtZShjb25z
dCBBdG9taWNTdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3Q6OmNvbnRhaW5zKEVsZW1lbnQqIGVsZW1lbnQpCitib29sIEhUTUxGb3JtYXR0
aW5nRWxlbWVudExpc3Q6OmNvbnRhaW5zKEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgcmV0dXJu
ICEhZmluZChlbGVtZW50KTsKIH0KIAotSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnkq
IEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmZpbmQoRWxlbWVudCogZWxlbWVudCkKK2F1dG8g
SFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6ZmluZChFbGVtZW50JiBlbGVtZW50KSAtPiBFbnRy
eSoKIHsKLSAgICBzaXplX3QgaW5kZXggPSBtX2VudHJpZXMucmV2ZXJzZUZpbmQoZWxlbWVudCk7
CisgICAgc2l6ZV90IGluZGV4ID0gbV9lbnRyaWVzLnJldmVyc2VGaW5kKCZlbGVtZW50KTsKICAg
ICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKICAgICAgICAgLy8gVGhpcyBpcyBzb21ld2hhdCBv
ZiBhIGhhY2ssIGFuZCBpcyB3aHkgdGhpcyBtZXRob2QgY2FuJ3QgYmUgY29uc3QuCiAgICAgICAg
IHJldHVybiAmbV9lbnRyaWVzW2luZGV4XTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLUhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkJvb2ttYXJrIEhU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmJvb2ttYXJrRm9yKEVsZW1lbnQqIGVsZW1lbnQpCith
dXRvIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmJvb2ttYXJrRm9yKEVsZW1lbnQmIGVsZW1l
bnQpIC0+IEJvb2ttYXJrCiB7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9lbnRyaWVzLnJldmVyc2VG
aW5kKGVsZW1lbnQpOworICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmllcy5yZXZlcnNlRmluZCgm
ZWxlbWVudCk7CiAgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLSAgICByZXR1cm4gQm9v
a21hcmsoJmF0KGluZGV4KSk7CisgICAgcmV0dXJuIEJvb2ttYXJrKGF0KGluZGV4KSk7CiB9CiAK
LXZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6c3dhcFRvKEVsZW1lbnQqIG9sZEVsZW1l
bnQsIFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gbmV3SXRlbSwgY29uc3QgQm9va21hcmsmIGJv
b2ttYXJrKQordm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpzd2FwVG8oRWxlbWVudCYg
b2xkRWxlbWVudCwgUmVmPEhUTUxTdGFja0l0ZW0+JiYgbmV3SXRlbSwgY29uc3QgQm9va21hcmsm
IGJvb2ttYXJrKQogewogICAgIEFTU0VSVChjb250YWlucyhvbGRFbGVtZW50KSk7Ci0gICAgQVNT
RVJUKCFjb250YWlucygmbmV3SXRlbS0+ZWxlbWVudCgpKSk7CisgICAgQVNTRVJUKCFjb250YWlu
cyhuZXdJdGVtLT5lbGVtZW50KCkpKTsKICAgICBpZiAoIWJvb2ttYXJrLmhhc0JlZW5Nb3ZlZCgp
KSB7Ci0gICAgICAgIEFTU0VSVCgmYm9va21hcmsubWFyaygpLT5lbGVtZW50KCkgPT0gb2xkRWxl
bWVudCk7Ci0gICAgICAgIGJvb2ttYXJrLm1hcmsoKS0+cmVwbGFjZUVsZW1lbnQobmV3SXRlbSk7
CisgICAgICAgIEFTU0VSVCgmYm9va21hcmsubWFyaygpLmVsZW1lbnQoKSA9PSAmb2xkRWxlbWVu
dCk7CisgICAgICAgIGJvb2ttYXJrLm1hcmsoKS5yZXBsYWNlRWxlbWVudChuZXdJdGVtLmNvcHlS
ZWYoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2l6ZV90IGluZGV4ID0gYm9va21h
cmsubWFyaygpIC0gZmlyc3QoKTsKKyAgICBzaXplX3QgaW5kZXggPSAmYm9va21hcmsubWFyaygp
IC0gJmZpcnN0KCk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXgg
PCBzaXplKCkpOwotICAgIG1fZW50cmllcy5pbnNlcnQoaW5kZXggKyAxLCBuZXdJdGVtKTsKKyAg
ICBtX2VudHJpZXMuaW5zZXJ0KGluZGV4ICsgMSwgV1RGTW92ZShuZXdJdGVtKSk7CiAgICAgcmVt
b3ZlKG9sZEVsZW1lbnQpOwogfQogCi12b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmFw
cGVuZChQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IGl0ZW0pCit2b2lkIEhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3Q6OmFwcGVuZChSZWY8SFRNTFN0YWNrSXRlbT4mJiBpdGVtKQogewotICAgIGVu
c3VyZU5vYWhzQXJrQ29uZGl0aW9uKGl0ZW0uZ2V0KCkpOwotICAgIG1fZW50cmllcy5hcHBlbmQo
aXRlbSk7CisgICAgZW5zdXJlTm9haHNBcmtDb25kaXRpb24oaXRlbSk7CisgICAgbV9lbnRyaWVz
LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKIH0KIAotdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRM
aXN0OjpyZW1vdmUoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50
TGlzdDo6cmVtb3ZlKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9l
bnRyaWVzLnJldmVyc2VGaW5kKGVsZW1lbnQpOworICAgIHNpemVfdCBpbmRleCA9IG1fZW50cmll
cy5yZXZlcnNlRmluZCgmZWxlbWVudCk7CiAgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQogICAg
ICAgICBtX2VudHJpZXMucmVtb3ZlKGluZGV4KTsKIH0KQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lk
IEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmNsZWFyVG9MYXN0TWFya2VyKCkKICAgICB9CiB9
CiAKLXZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6dHJ5VG9FbnN1cmVOb2Foc0Fya0Nv
bmRpdGlvblF1aWNrbHkoSFRNTFN0YWNrSXRlbSogbmV3SXRlbSwgVmVjdG9yPEhUTUxTdGFja0l0
ZW0qPiYgcmVtYWluaW5nQ2FuZGlkYXRlcykKK3ZvaWQgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dDo6dHJ5VG9FbnN1cmVOb2Foc0Fya0NvbmRpdGlvblF1aWNrbHkoSFRNTFN0YWNrSXRlbSYgbmV3
SXRlbSwgVmVjdG9yPEhUTUxTdGFja0l0ZW0qPiYgcmVtYWluaW5nQ2FuZGlkYXRlcykKIHsKICAg
ICBBU1NFUlQocmVtYWluaW5nQ2FuZGlkYXRlcy5pc0VtcHR5KCkpOwogCkBAIC0xMzQsNyArMTM0
LDcgQEAgdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojp0cnlUb0Vuc3VyZU5vYWhzQXJr
Q29uZGl0aW9uUXVpY2tseShIVE1MU3RhY2tJdGUKICAgICAvLyBvZiBhIHF1aWNrbHkgZW5zdXJp
bmcgdGhlIGNvbmRpdGlvbi4KICAgICBWZWN0b3I8SFRNTFN0YWNrSXRlbSosIDEwPiBjYW5kaWRh
dGVzOwogCi0gICAgc2l6ZV90IG5ld0l0ZW1BdHRyaWJ1dGVDb3VudCA9IG5ld0l0ZW0tPmF0dHJp
YnV0ZXMoKS5zaXplKCk7CisgICAgc2l6ZV90IG5ld0l0ZW1BdHRyaWJ1dGVDb3VudCA9IG5ld0l0
ZW0uYXR0cmlidXRlcygpLnNpemUoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2VudHJpZXMu
c2l6ZSgpOyBpOyApIHsKICAgICAgICAgLS1pOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgSFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6dHJ5VG9FbnN1cmVOb2Foc0Fya0NvbmRpdGlvblF1aWNr
bHkoSFRNTFN0YWNrSXRlCiAKICAgICAgICAgLy8gUXVpY2tseSByZWplY3Qgb2J2aW91c2x5IG5v
bi1tYXRjaGluZyBjYW5kaWRhdGVzLgogICAgICAgICBIVE1MU3RhY2tJdGVtKiBjYW5kaWRhdGUg
PSBlbnRyeS5zdGFja0l0ZW0oKTsKLSAgICAgICAgaWYgKG5ld0l0ZW0tPmxvY2FsTmFtZSgpICE9
IGNhbmRpZGF0ZS0+bG9jYWxOYW1lKCkgfHwgbmV3SXRlbS0+bmFtZXNwYWNlVVJJKCkgIT0gY2Fu
ZGlkYXRlLT5uYW1lc3BhY2VVUkkoKSkKKyAgICAgICAgaWYgKG5ld0l0ZW0ubG9jYWxOYW1lKCkg
IT0gY2FuZGlkYXRlLT5sb2NhbE5hbWUoKSB8fCBuZXdJdGVtLm5hbWVzcGFjZVVSSSgpICE9IGNh
bmRpZGF0ZS0+bmFtZXNwYWNlVVJJKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
aWYgKGNhbmRpZGF0ZS0+YXR0cmlidXRlcygpLnNpemUoKSAhPSBuZXdJdGVtQXR0cmlidXRlQ291
bnQpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE1OCw3ICsxNTgsNyBAQCB2b2lkIEhUTUxG
b3JtYXR0aW5nRWxlbWVudExpc3Q6OnRyeVRvRW5zdXJlTm9haHNBcmtDb25kaXRpb25RdWlja2x5
KEhUTUxTdGFja0l0ZQogICAgIHJlbWFpbmluZ0NhbmRpZGF0ZXMuYXBwZW5kVmVjdG9yKGNhbmRp
ZGF0ZXMpOwogfQogCi12b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmVuc3VyZU5vYWhz
QXJrQ29uZGl0aW9uKEhUTUxTdGFja0l0ZW0qIG5ld0l0ZW0pCit2b2lkIEhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3Q6OmVuc3VyZU5vYWhzQXJrQ29uZGl0aW9uKEhUTUxTdGFja0l0ZW0mIG5ld0l0
ZW0pCiB7CiAgICAgVmVjdG9yPEhUTUxTdGFja0l0ZW0qPiBjYW5kaWRhdGVzOwogICAgIHRyeVRv
RW5zdXJlTm9haHNBcmtDb25kaXRpb25RdWlja2x5KG5ld0l0ZW0sIGNhbmRpZGF0ZXMpOwpAQCAt
MTcwLDE1ICsxNzAsMTUgQEAgdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjplbnN1cmVO
b2Foc0Fya0NvbmRpdGlvbihIVE1MU3RhY2tJdGVtKiBuZXdJdGVtKQogICAgIFZlY3RvcjxIVE1M
U3RhY2tJdGVtKj4gcmVtYWluaW5nQ2FuZGlkYXRlczsKICAgICByZW1haW5pbmdDYW5kaWRhdGVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2FuZGlkYXRlcy5zaXplKCkpOwogCi0gICAgZm9yIChh
dXRvJiBhdHRyaWJ1dGUgOiBuZXdJdGVtLT5hdHRyaWJ1dGVzKCkpIHsKKyAgICBmb3IgKGF1dG8m
IGF0dHJpYnV0ZSA6IG5ld0l0ZW0uYXR0cmlidXRlcygpKSB7CiAgICAgICAgIGZvciAoYXV0byYg
Y2FuZGlkYXRlIDogY2FuZGlkYXRlcykgewogICAgICAgICAgICAgLy8gVGhlc2UgcHJvcGVydGll
cyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gY2hlY2tlZCBieSB0cnlUb0Vuc3VyZU5vYWhzQXJr
Q29uZGl0aW9uUXVpY2tseS4KLSAgICAgICAgICAgIEFTU0VSVChuZXdJdGVtLT5hdHRyaWJ1dGVz
KCkuc2l6ZSgpID09IGNhbmRpZGF0ZS0+YXR0cmlidXRlcygpLnNpemUoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQobmV3SXRlbS0+bG9jYWxOYW1lKCkgPT0gY2FuZGlkYXRlLT5sb2NhbE5hbWUoKSAm
JiBuZXdJdGVtLT5uYW1lc3BhY2VVUkkoKSA9PSBjYW5kaWRhdGUtPm5hbWVzcGFjZVVSSSgpKTsK
KyAgICAgICAgICAgIEFTU0VSVChuZXdJdGVtLmF0dHJpYnV0ZXMoKS5zaXplKCkgPT0gY2FuZGlk
YXRlLT5hdHRyaWJ1dGVzKCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdJdGVtLmxv
Y2FsTmFtZSgpID09IGNhbmRpZGF0ZS0+bG9jYWxOYW1lKCkgJiYgbmV3SXRlbS5uYW1lc3BhY2VV
UkkoKSA9PSBjYW5kaWRhdGUtPm5hbWVzcGFjZVVSSSgpKTsKIAotICAgICAgICAgICAgY29uc3Qg
QXR0cmlidXRlKiBjYW5kaWRhdGVBdHRyaWJ1dGUgPSBjYW5kaWRhdGUtPmZpbmRBdHRyaWJ1dGUo
YXR0cmlidXRlLm5hbWUoKSk7CisgICAgICAgICAgICBhdXRvKiBjYW5kaWRhdGVBdHRyaWJ1dGUg
PSBjYW5kaWRhdGUtPmZpbmRBdHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUoKSk7CiAgICAgICAgICAg
ICBpZiAoY2FuZGlkYXRlQXR0cmlidXRlICYmIGNhbmRpZGF0ZUF0dHJpYnV0ZS0+dmFsdWUoKSA9
PSBhdHRyaWJ1dGUudmFsdWUoKSkKLSAgICAgICAgICAgICAgICByZW1haW5pbmdDYW5kaWRhdGVz
LmFwcGVuZChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NhbmRpZGF0ZXMu
dW5jaGVja2VkQXBwZW5kKGNhbmRpZGF0ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmVt
YWluaW5nQ2FuZGlkYXRlcy5zaXplKCkgPCBrTm9haHNBcmtDYXBhY2l0eSkKQEAgLTE5Miw3ICsx
OTIsNyBAQCB2b2lkIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmVuc3VyZU5vYWhzQXJrQ29u
ZGl0aW9uKEhUTUxTdGFja0l0ZW0qIG5ld0l0ZW0pCiAgICAgLy8gaG93ZXZlciwgdGhhdCB3ZSB3
aWwgc3BpbiB0aGUgbG9vcCBtb3JlIHRoYW4gb25jZSBiZWNhdXNlIG9mIGhvdyB0aGUKICAgICAv
LyBmb3JtYXR0aW5nIGVsZW1lbnQgbGlzdCBnZXRzIHBlcm11dGVkLgogICAgIGZvciAoc2l6ZV90
IGkgPSBrTm9haHNBcmtDYXBhY2l0eSAtIDE7IGkgPCBjYW5kaWRhdGVzLnNpemUoKTsgKytpKQot
ICAgICAgICByZW1vdmUoJmNhbmRpZGF0ZXNbaV0tPmVsZW1lbnQoKSk7CisgICAgICAgIHJlbW92
ZShjYW5kaWRhdGVzW2ldLT5lbGVtZW50KCkpOwogfQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdH
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRp
bmdFbGVtZW50TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRp
bmdFbGVtZW50TGlzdC5oCmluZGV4IDhiMjUxYjI3ZWJkNjA0YjEyZTI2NWM0YTM0ODc1ZWM3OTc0
MmM5YjEuLjMwNzNlOTQwNTdkOTUwY2IyYTBiNzVkNDI4MDAwM2NlZTdkNWUwM2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRM
aXN0LmgKQEAgLTQ4LDE2ICs0OCwxNCBAQCBwdWJsaWM6CiAgICAgY2xhc3MgRW50cnkgewogICAg
IHB1YmxpYzoKICAgICAgICAgLy8gSW5saW5lIGJlY2F1c2UgdGhleSdyZSBob3QgYW5kIFZlY3Rv
cjxUPiB1c2VzIHRoZW0uCi0gICAgICAgIGV4cGxpY2l0IEVudHJ5KFBhc3NSZWZQdHI8SFRNTFN0
YWNrSXRlbT4gaXRlbSkKLSAgICAgICAgICAgIDogbV9pdGVtKGl0ZW0pCisgICAgICAgIGV4cGxp
Y2l0IEVudHJ5KFJlZjxIVE1MU3RhY2tJdGVtPiYmIGl0ZW0pCisgICAgICAgICAgICA6IG1faXRl
bShXVEZNb3ZlKGl0ZW0pKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgZW51bSBNYXJr
ZXJFbnRyeVR5cGUgeyBNYXJrZXJFbnRyeSB9OwogICAgICAgICBFbnRyeShNYXJrZXJFbnRyeVR5
cGUpCi0gICAgICAgICAgICA6IG1faXRlbSgwKQogICAgICAgICB7CiAgICAgICAgIH0KLSAgICAg
ICAgfkVudHJ5KCkge30KIAogICAgICAgICBib29sIGlzTWFya2VyKCkgY29uc3QgeyByZXR1cm4g
IW1faXRlbTsgfQogCkBAIC02OSw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VS
VChtX2l0ZW0pOwogICAgICAgICAgICAgcmV0dXJuIG1faXRlbS0+ZWxlbWVudCgpOwogICAgICAg
ICB9Ci0gICAgICAgIHZvaWQgcmVwbGFjZUVsZW1lbnQoUGFzc1JlZlB0cjxIVE1MU3RhY2tJdGVt
PiBpdGVtKSB7IG1faXRlbSA9IGl0ZW07IH0KKyAgICAgICAgdm9pZCByZXBsYWNlRWxlbWVudChS
ZWY8SFRNTFN0YWNrSXRlbT4mJiBpdGVtKSB7IG1faXRlbSA9IFdURk1vdmUoaXRlbSk7IH0KIAog
ICAgICAgICAvLyBOZWVkZWQgZm9yIHVzZSB3aXRoIFZlY3Rvci4gIFRoZXNlIGFyZSBzdXBlci1o
b3QgYW5kIG11c3QgYmUgaW5saW5lLgogICAgICAgICBib29sIG9wZXJhdG9yPT0oRWxlbWVudCog
ZWxlbWVudCkgY29uc3QgeyByZXR1cm4gIW1faXRlbSA/ICFlbGVtZW50IDogJm1faXRlbS0+ZWxl
bWVudCgpID09IGVsZW1lbnQ7IH0KQEAgLTgxLDIwICs3OSwyMCBAQCBwdWJsaWM6CiAKICAgICBj
bGFzcyBCb29rbWFyayB7CiAgICAgcHVibGljOgotICAgICAgICBCb29rbWFyayhFbnRyeSogZW50
cnkpCisgICAgICAgIGV4cGxpY2l0IEJvb2ttYXJrKEVudHJ5JiBlbnRyeSkKICAgICAgICAgICAg
IDogbV9oYXNCZWVuTW92ZWQoZmFsc2UpCi0gICAgICAgICAgICAsIG1fbWFyayhlbnRyeSkKKyAg
ICAgICAgICAgICwgbV9tYXJrKCZlbnRyeSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgdm9pZCBtb3ZlVG9BZnRlcihFbnRyeSogYmVmb3JlKQorICAgICAgICB2b2lkIG1vdmVUb0Fm
dGVyKEVudHJ5JiBiZWZvcmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1faGFzQmVlbk1vdmVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fbWFyayA9IGJlZm9yZTsKKyAgICAgICAgICAgIG1fbWFy
ayA9ICZiZWZvcmU7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGhhc0JlZW5Nb3ZlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzQmVlbk1vdmVkOyB9Ci0gICAgICAgIEVudHJ5KiBtYXJrKCkgY29u
c3QgeyByZXR1cm4gbV9tYXJrOyB9CisgICAgICAgIEVudHJ5JiBtYXJrKCkgY29uc3QgeyBBU1NF
UlQobV9tYXJrKTsgcmV0dXJuICptX21hcms7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGJv
b2wgbV9oYXNCZWVuTW92ZWQ7CkBAIC0xMDYsMTMgKzEwNCwxMyBAQCBwdWJsaWM6CiAKICAgICBF
bGVtZW50KiBjbG9zZXN0RWxlbWVudEluU2NvcGVXaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcm
KTsKIAotICAgIEVudHJ5KiBmaW5kKEVsZW1lbnQqKTsKLSAgICBib29sIGNvbnRhaW5zKEVsZW1l
bnQqKTsKLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+KTsKLSAgICB2
b2lkIHJlbW92ZShFbGVtZW50Kik7CisgICAgRW50cnkqIGZpbmQoRWxlbWVudCYpOworICAgIGJv
b2wgY29udGFpbnMoRWxlbWVudCYpOworICAgIHZvaWQgYXBwZW5kKFJlZjxIVE1MU3RhY2tJdGVt
PiYmKTsKKyAgICB2b2lkIHJlbW92ZShFbGVtZW50Jik7CiAKLSAgICBCb29rbWFyayBib29rbWFy
a0ZvcihFbGVtZW50Kik7Ci0gICAgdm9pZCBzd2FwVG8oRWxlbWVudCogb2xkRWxlbWVudCwgUGFz
c1JlZlB0cjxIVE1MU3RhY2tJdGVtPiBuZXdJdGVtLCBjb25zdCBCb29rbWFyayYpOworICAgIEJv
b2ttYXJrIGJvb2ttYXJrRm9yKEVsZW1lbnQmKTsKKyAgICB2b2lkIHN3YXBUbyhFbGVtZW50JiBv
bGRFbGVtZW50LCBSZWY8SFRNTFN0YWNrSXRlbT4mJiBuZXdJdGVtLCBjb25zdCBCb29rbWFyayYp
OwogCiAgICAgdm9pZCBhcHBlbmRNYXJrZXIoKTsKICAgICAvLyBjbGVhclRvTGFzdE1hcmtlciBh
bHNvIGNsZWFycyB0aGUgbWFya2VyIChwZXIgdGhlIEhUTUw1IHNwZWMpLgpAQCAtMTI2LDEyICsx
MjQsMTIgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgRW50cnkqIGZpcnN0KCkg
eyByZXR1cm4gJmF0KDApOyB9CisgICAgRW50cnkmIGZpcnN0KCkgeyByZXR1cm4gYXQoMCk7IH0K
IAogICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdv
cmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNsaXN0LW9mLWFjdGl2ZS1mb3JtYXR0aW5nLWVsZW1l
bnRzCiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGVuZm9yY2UgdGhlICJOb2FoJ3MgQXJrIiBjb25k
aXRpb24sIHdoaWNoIHJlbW92ZXMgcmVkdW5kYW50IG1pcy1uZXN0ZWQgZWxlbWVudHMuCi0gICAg
dm9pZCB0cnlUb0Vuc3VyZU5vYWhzQXJrQ29uZGl0aW9uUXVpY2tseShIVE1MU3RhY2tJdGVtKiwg
VmVjdG9yPEhUTUxTdGFja0l0ZW0qPiYgcmVtYWluaW5nQ2FuZGlhdGVzKTsKLSAgICB2b2lkIGVu
c3VyZU5vYWhzQXJrQ29uZGl0aW9uKEhUTUxTdGFja0l0ZW0qKTsKKyAgICB2b2lkIHRyeVRvRW5z
dXJlTm9haHNBcmtDb25kaXRpb25RdWlja2x5KEhUTUxTdGFja0l0ZW0mLCBWZWN0b3I8SFRNTFN0
YWNrSXRlbSo+JiByZW1haW5pbmdDYW5kaWRhdGVzKTsKKyAgICB2b2lkIGVuc3VyZU5vYWhzQXJr
Q29uZGl0aW9uKEhUTUxTdGFja0l0ZW0mKTsKIAogICAgIFZlY3RvcjxFbnRyeT4gbV9lbnRyaWVz
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CmluZGV4IDNlYzI4NTA2ZWFmOWE2OGNmZGUxZjViMmM0MTVmZmE2ODFhZTIxNmQuLmFiODY1ZTA3
MDQ2MzJhYjc2MDk0ODgyYjYxNzM0ODg2YjMwZDVhMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtNDAwLDcgKzQwMCw3IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9jdHlwZVRva2VuKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkRPQ1RZUEUpOwog
ICAgIGlmIChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCkgewotICAg
ICAgICBtX3RyZWUuaW5zZXJ0RG9jdHlwZSgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0
RG9jdHlwZSh0b2tlbik7CiAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6
OkJlZm9yZUhUTUw7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01MTAsNyArNTEwLDcgQEAg
dGVtcGxhdGUgPGJvb2wgc2hvdWxkQ2xvc2UoY29uc3QgSFRNTFN0YWNrSXRlbSYpPiB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0MKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBw
cm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7Ci0gICAgbV90cmVlLmluc2VydEhU
TUxFbGVtZW50KCZ0b2tlbik7CisgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBjcmVhdGVDYXNlTWFwKGNvbnN0IFRhYmxl
UXVhbGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKQpAQCAtNjE4LDcg
KzYxOCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHko
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxC
b2R5U3RhcnRUYWdJbkJvZHkoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxCb2R5
U3RhcnRUYWdJbkJvZHkodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKQEAgLTYzMCwxMCArNjMwLDEwIEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKICAgICAgICAgaWYgKCFtX2ZyYW1lc2V0T2spCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5ib2R5RWxlbWVudCgpLnJlbW92ZShBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKLSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGls
KCZtX3RyZWUub3BlbkVsZW1lbnRzKCkuYm9keUVsZW1lbnQoKSk7CisgICAgICAgIG1fdHJlZS5v
cGVuRWxlbWVudHMoKS5wb3BVbnRpbChtX3RyZWUub3BlbkVsZW1lbnRzKCkuYm9keUVsZW1lbnQo
KSk7CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3BIVE1MQm9keUVsZW1lbnQoKTsK
ICAgICAgICAgQVNTRVJUKCZtX3RyZWUub3BlbkVsZW1lbnRzKCkudG9wKCkgPT0gJm1fdHJlZS5v
cGVuRWxlbWVudHMoKS5odG1sRWxlbWVudCgpKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7
CiAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluRnJhbWVzZXQ7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC02NjEsNyArNjYxLDcgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3VtbWFyeVRhZwogICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gdWxUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25T
Y29wZSgpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAg
ICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAoaXNOdW1iZXJlZEhlYWRlclRhZyh0b2tlbi5uYW1lKCkpKSB7CkBAIC02NzAs
MTIgKzY3MCwxMiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5C
b2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3AoKTsKICAgICAgICAgfQot
ICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVl
Lmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHByZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gbGlzdGluZ1RhZykg
ewogICAgICAgICBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7Ci0gICAgICAg
IG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZSA9
IHRydWU7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CkBA
IC02ODYsNyArNjg2LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0Zv
ckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAg
ICAgICAgbV90cmVlLmluc2VydEhUTUxGb3JtRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEZvcm1FbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IGxpVGFnKSB7CkBAIC02OTksNyArNjk5LDcgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IHBsYWludGV4dFRhZykg
ewogICAgICAgICBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7Ci0gICAgICAg
IG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX3BhcnNlci50b2tlbml6ZXIoKS5zZXRQTEFJ
TlRFWFRTdGF0ZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzExLDcgKzcxMSw3IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBt
X3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAg
bV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRI
VE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtNzIwLDE3ICs3MjAsMTcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
ICAgICBpZiAoYWN0aXZlQVRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAg
ICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhhVGFnKTsKLSAgICAgICAgICAgIG1fdHJlZS5h
Y3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS5yZW1vdmUoYWN0aXZlQVRhZyk7Ci0gICAgICAgICAg
ICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLmNvbnRhaW5zKGFjdGl2ZUFUYWcpKQotICAgICAg
ICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5yZW1vdmUoYWN0aXZlQVRhZyk7CisgICAg
ICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkucmVtb3ZlKCphY3RpdmVB
VGFnKTsKKyAgICAgICAgICAgIGlmIChtX3RyZWUub3BlbkVsZW1lbnRzKCkuY29udGFpbnMoKmFj
dGl2ZUFUYWcpKQorICAgICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5yZW1vdmUo
KmFjdGl2ZUFUYWcpOwogICAgICAgICB9CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFj
dGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGlu
Z0VsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50
KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNOb25BbmNob3JOb25O
b2JyRm9ybWF0dGluZ1RhZyh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0
cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0
Rm9ybWF0dGluZ0VsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEZvcm1hdHRp
bmdFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4u
bmFtZSgpID09IG5vYnJUYWcpIHsKQEAgLTc0MCw3ICs3NDAsNyBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAg
ICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhub2JyVGFnKTsKICAgICAgICAgICAgIG1fdHJl
ZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogICAgICAgICB9Ci0g
ICAgICAgIG1fdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudCgmdG9rZW4pOworICAgICAgICBt
X3RyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQodG9rZW4pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYXBwbGV0VGFnIHx8IHRva2VuLm5hbWUoKSA9
PSBlbWJlZFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gb2JqZWN0VGFnKSB7CkBAIC03NDksNyArNzQ5
LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGFwcGxl
dFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gbWFycXVlZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gb2Jq
ZWN0VGFnKSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdF
bGVtZW50cygpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAg
ICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgbV90cmVlLmFj
dGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLmFwcGVuZE1hcmtlcigpOwogICAgICAgICBtX2ZyYW1l
c2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzU3LDcgKzc1Nyw3IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CiAgICAgICAgIGlm
ICghbV90cmVlLmluUXVpcmtzTW9kZSgpICYmIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5pbkJ1dHRv
blNjb3BlKHBUYWcpKQogICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcocFRhZyk7Ci0gICAg
ICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5z
ZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAg
ICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNzc1LDI1ICs3NzUsMjUgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0ga2V5Z2VuVGFnCiAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB3YnJU
YWcpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1l
bnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tl
bik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsK
ICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBpbnB1dFRhZykgewogICAgICAgICBtX3RyZWUucmVjb25z
dHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAgbV90cmVlLmluc2Vy
dFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydFNl
bGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBBdHRyaWJ1dGUqIHR5cGVBdHRy
aWJ1dGUgPSBmaW5kQXR0cmlidXRlKHRva2VuLmF0dHJpYnV0ZXMoKSwgdHlwZUF0dHIpOwogICAg
ICAgICBpZiAoIXR5cGVBdHRyaWJ1dGUgfHwgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHR5cGVBdHRyaWJ1dGUtPnZhbHVlKCksICJoaWRkZW4iKSkKICAgICAgICAgICAgIG1fZnJhbWVz
ZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gcGFyYW1UYWcgfHwgdG9rZW4ubmFtZSgpID09IHNvdXJjZVRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gdHJhY2tUYWcpIHsKLSAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVs
ZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1l
bnQodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gaHJUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgp
OwotICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCgmdG9rZW4pOwor
ICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CiAgICAg
ICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODAy
LDcgKzgwMiw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJv
ZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHRleHRhcmVhVGFnKSB7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRI
VE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9r
ZW4pOwogICAgICAgICBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZSA9IHRydWU7CiAgICAgICAg
IG1fcGFyc2VyLnRva2VuaXplcigpLnNldFJDREFUQVN0YXRlKCk7CiAgICAgICAgIG1fb3JpZ2lu
YWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2RlOwpAQCAtODMyLDcgKzgzMiw3IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzZWxlY3RUYWcpIHsK
ICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7
Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxz
ZTsKICAgICAgICAgaWYgKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxl
CiAgICAgICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5DYXB0
aW9uCkBAIC04NTEsNyArODUxLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFy
dFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcHJvY2Vz
c0VuZFRhZyhlbmRPcHRpb24pOwogICAgICAgICB9CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVj
dFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRN
TEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2Vu
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IHJiVGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBydGNUYWcpIHsKQEAgLTg2MCw3ICs4NjAsNyBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkuaGFzVGFn
TmFtZShydWJ5VGFnKSkKICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAg
ICAgfQotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAg
bV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IHJ0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBycFRhZykg
ewpAQCAtODY5LDIxICs4NjksMjEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFy
dFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgaWYgKCFt
X3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLmhhc1RhZ05hbWUocnVieVRhZykgJiYgIW1fdHJlZS5j
dXJyZW50U3RhY2tJdGVtKCkuaGFzVGFnTmFtZShydGNUYWcpKQogICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgICAgICB9Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gTWF0aE1MTmFt
ZXM6Om1hdGhUYWcubG9jYWxOYW1lKCkpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhl
QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAgIGFkanVzdE1hdGhNTEF0dHJpYnV0
ZXModG9rZW4pOwogICAgICAgICBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyh0b2tlbik7Ci0gICAg
ICAgIG1fdHJlZS5pbnNlcnRGb3JlaWduRWxlbWVudCgmdG9rZW4sIE1hdGhNTE5hbWVzOjptYXRo
bWxOYW1lc3BhY2VVUkkpOworICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9yZWlnbkVsZW1lbnQodG9r
ZW4sIE1hdGhNTE5hbWVzOjptYXRobWxOYW1lc3BhY2VVUkkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN2Z1RhZy5sb2NhbE5hbWUo
KSkgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVu
dHMoKTsKICAgICAgICAgYWRqdXN0U1ZHQXR0cmlidXRlcyh0b2tlbik7CiAgICAgICAgIGFkanVz
dEZvcmVpZ25BdHRyaWJ1dGVzKHRva2VuKTsKLSAgICAgICAgbV90cmVlLmluc2VydEZvcmVpZ25F
bGVtZW50KCZ0b2tlbiwgU1ZHTmFtZXM6OnN2Z05hbWVzcGFjZVVSSSk7CisgICAgICAgIG1fdHJl
ZS5pbnNlcnRGb3JlaWduRWxlbWVudCh0b2tlbiwgU1ZHTmFtZXM6OnN2Z05hbWVzcGFjZVVSSSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBU
YWcodG9rZW4ubmFtZSgpKQpAQCAtOTA3LDExICs5MDcsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogaW5s
aW5lIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjppbnNlcnRHZW5lcmljSFRNTEVsZW1lbnQoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKIHsKICNpZiBFTkFCTEUoQ1VTVE9NX0VMRU1FTlRTKQotICAgIGF1
dG8qIGludGVyZmFjZSA9IG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudE9yRmluZEN1c3RvbUVsZW1l
bnRJbnRlcmZhY2UoJnRva2VuKTsKKyAgICBhdXRvKiBpbnRlcmZhY2UgPSBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnRPckZpbmRDdXN0b21FbGVtZW50SW50ZXJmYWNlKHRva2VuKTsKICAgICBpZiAo
VU5MSUtFTFkoaW50ZXJmYWNlKSkKICAgICAgICAgbV9jdXN0b21FbGVtZW50VG9Db25zdHJ1Y3Qg
PSBzdGQ6Om1ha2VfdW5pcXVlPEN1c3RvbUVsZW1lbnRDb25zdHJ1Y3Rpb25EYXRhPigqaW50ZXJm
YWNlLCB0b2tlbi5uYW1lKCksIHRva2VuLmF0dHJpYnV0ZXMoKSk7CiAjZWxzZQotICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVu
dCh0b2tlbik7CiAjZW5kaWYKIH0KIApAQCAtOTI1LDcgKzkyNSw3IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpkaWRDcmVhdGVDdXN0b21PckNhbGxiYWNrRWxlbWVudChSZWY8RWxlbWVudD4mJiBl
bGVtZW50LCBDCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1RlbXBsYXRlU3RhcnRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0Vs
ZW1lbnRzKCkuYXBwZW5kTWFya2VyKCk7Ci0gICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0
b2tlbik7CisgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICBtX3RlbXBs
YXRlSW5zZXJ0aW9uTW9kZXMuYXBwZW5kKEluc2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHMp
OwogICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHM7
CiB9CkBAIC05OTIsMTMgKzk5MiwxMyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0
YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gY2FwdGlvblRhZykgewogICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucG9w
VW50aWxUYWJsZVNjb3BlTWFya2VyKCk7CiAgICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5n
RWxlbWVudHMoKS5hcHBlbmRNYXJrZXIoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVt
ZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAg
ICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluQ2FwdGlvbjsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNvbGdyb3VwVGFnKSB7
CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIo
KTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1f
dHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9
IEluc2VydGlvbk1vZGU6OkluQ29sdW1uR3JvdXA7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xMDEwLDcgKzEwMTAsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFn
Rm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIH0KICAgICBpZiAoaXNUYWJs
ZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVt
ZW50cygpLnBvcFVudGlsVGFibGVTY29wZU1hcmtlcigpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRv
a2VuKTsKICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJv
ZHk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDM3LDcgKzEwMzcsNyBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQogICAgICAgICBBdHRyaWJ1dGUqIHR5cGVBdHRyaWJ1dGUgPSBmaW5kQXR0cmlidXRl
KHRva2VuLmF0dHJpYnV0ZXMoKSwgdHlwZUF0dHIpOwogICAgICAgICBpZiAodHlwZUF0dHJpYnV0
ZSAmJiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh0eXBlQXR0cmlidXRlLT52YWx1ZSgp
LCAiaGlkZGVuIikpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICAg
ICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAg
ICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gImFueXRo
aW5nIGVsc2UiIGNhc2UuCkBAIC0xMDQ2LDcgKzEwNDYsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
ICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgaWYgKG1fdHJlZS5mb3JtKCkgJiYgIWlz
UGFyc2luZ1RlbXBsYXRlQ29udGVudHMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
bV90cmVlLmluc2VydEhUTUxGb3JtRWxlbWVudCgmdG9rZW4sIHRydWUpOworICAgICAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEZvcm1FbGVtZW50KHRva2VuLCB0cnVlKTsKICAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLnBvcCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA2OSw3ICsx
MDY5LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1v
ZGU6OkJlZm9yZUhUTUw6CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewot
ICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKCZ0b2tl
bik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwo
dG9rZW4pOwogICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6QmVm
b3JlSGVhZDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTA4Miw3ICsxMDgy
LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gaGVhZFRhZykgewotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxI
ZWFkRWxlbWVudCgmdG9rZW4pOworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxIZWFkRWxl
bWVudCh0b2tlbik7CiAgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2Rl
OjpJbkhlYWQ7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTExMDIsMTIgKzEx
MDIsMTIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9k
eVRhZykgewogICAgICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7Ci0gICAgICAgICAgICBt
X3RyZWUuaW5zZXJ0SFRNTEJvZHlFbGVtZW50KCZ0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUu
aW5zZXJ0SFRNTEJvZHlFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9k
ZSA9IEluc2VydGlvbk1vZGU6OkluQm9keTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGZyYW1lc2V0VGFnKSB7Ci0gICAgICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJ
bnNlcnRpb25Nb2RlOjpJbkZyYW1lc2V0OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC0xMTIyLDkgKzExMjIsMTAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFy
dFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IHRlbXBsYXRlVGFnCiAgICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdGl0bGVUYWcp
IHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLnB1c2hIVE1MSGVhZEVsZW1lbnQobV90cmVlLmhlYWRTdGFja0l0ZW0oKSk7
CisgICAgICAgICAgICBBU1NFUlQobV90cmVlLmhlYWRTdGFja0l0ZW0oKSk7CisgICAgICAgICAg
ICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucHVzaEhUTUxIZWFkRWxlbWVudCgqbV90cmVlLmhlYWRT
dGFja0l0ZW0oKSk7CiAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4p
OwotICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnJlbW92ZUhUTUxIZWFkRWxlbWVu
dCgmbV90cmVlLmhlYWQoKSk7CisgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucmVt
b3ZlSFRNTEhlYWRFbGVtZW50KG1fdHJlZS5oZWFkKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaGVhZFRhZykgewpAQCAtMTE2
MSw3ICsxMTYyLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY29sVGFnKSB7Ci0gICAgICAgICAgICBtX3RyZWUuaW5z
ZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICAgICAgbV90cmVlLmlu
c2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKQEAg
LTExNzcsNyArMTE3OCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluVGFibGVC
b2R5OgogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgICAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCkucG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpOyAvLyBI
b3cgaXMgdGhlcmUgZXZlciBhbnl0aGluZyB0byBwb3A/Ci0gICAgICAgICAgICBtX3RyZWUuaW5z
ZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudCh0b2tlbik7CiAgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2Rl
OjpJblJvdzsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTIwNiw3ICsxMjA3
LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Sb3c6CiAgICAgICAgIGlmIChp
c1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgbV90cmVl
Lm9wZW5FbGVtZW50cygpLnBvcFVudGlsVGFibGVSb3dTY29wZU1hcmtlcigpOwotICAgICAgICAg
ICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUu
aW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0g
SW5zZXJ0aW9uTW9kZTo6SW5DZWxsOwogICAgICAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cygpLmFwcGVuZE1hcmtlcigpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTI3
OCwxMSArMTI3OSwxMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBmcmFtZXNldFRhZykgewotICAgICAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZnJhbWVUYWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5p
bnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUu
aW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub2ZyYW1lc1RhZykgewpA
QCAtMTMyNiw3ICsxMzI3LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRh
ZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgICAgIEF0b21pY0hUTUxUb2tl
biBlbmRPcHRpb24oSFRNTFRva2VuOjpFbmRUYWcsIG9wdGlvblRhZy5sb2NhbE5hbWUoKSk7CiAg
ICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRpb24pOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gb3B0Z3JvdXBUYWcpIHsKQEAg
LTEzMzgsNyArMTMzOSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4g
ZW5kT3B0Z3JvdXAoSFRNTFRva2VuOjpFbmRUYWcsIG9wdGdyb3VwVGFnLmxvY2FsTmFtZSgpKTsK
ICAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGdyb3VwKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAg
ICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHNlbGVjdFRhZykgewpA
QCAtMTQxOCw3ICsxNDE5LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NIdG1sU3Rh
cnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgQVNTRVJUKGlz
UGFyc2luZ1RlbXBsYXRlQ29udGVudHMoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
bV90cmVlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoJnRva2VuKTsKKyAgICBtX3RyZWUu
aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keSh0b2tlbik7CiB9CiAKIGJvb2wgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQpAQCAtMTQ0Myw3ICsxNDQ0LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NBbnlP
dGhlckVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAg
bV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKHRva2VuLm5hbWUoKSk7
CiAgICAgICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubWF0Y2hlc0hUTUxU
YWcodG9rZW4ubmFtZSgpKSkKICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAg
ICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5wb3BVbnRpbFBvcHBlZCgmaXRlbS5lbGVt
ZW50KCkpOworICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnBvcFVudGlsUG9wcGVk
KGl0ZW0uZWxlbWVudCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICBpZiAoaXNTcGVjaWFsTm9kZShpdGVtKSkgewpAQCAtMTQ3MSwzNCArMTQ3MiwzNCBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgICAgIGlmICghZm9ybWF0dGluZ0VsZW1lbnQpCiAgICAgICAgICAgICByZXR1
cm4gcHJvY2Vzc0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgLy8gNC5j
Ci0gICAgICAgIGlmICgobV90cmVlLm9wZW5FbGVtZW50cygpLmNvbnRhaW5zKGZvcm1hdHRpbmdF
bGVtZW50KSkgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS5pblNjb3BlKGZvcm1hdHRpbmdFbGVt
ZW50KSkgeworICAgICAgICBpZiAoKG1fdHJlZS5vcGVuRWxlbWVudHMoKS5jb250YWlucygqZm9y
bWF0dGluZ0VsZW1lbnQpKSAmJiAhbV90cmVlLm9wZW5FbGVtZW50cygpLmluU2NvcGUoKmZvcm1h
dHRpbmdFbGVtZW50KSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBDaGVjayB0aGUgc3RhY2sgb2Ygb3BlbiBlbGVtZW50
cyBmb3IgYSBtb3JlIHNwZWNpZmljIHBhcnNlIGVycm9yLgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIC8vIDQuYgotICAgICAgICBhdXRvKiBmb3JtYXR0aW5nRWxlbWVu
dFJlY29yZCA9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS5maW5kKGZvcm1hdHRpbmdFbGVtZW50KTsK
KyAgICAgICAgYXV0byogZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQgPSBtX3RyZWUub3BlbkVsZW1l
bnRzKCkuZmluZCgqZm9ybWF0dGluZ0VsZW1lbnQpOwogICAgICAgICBpZiAoIWZvcm1hdHRpbmdF
bGVtZW50UmVjb3JkKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAg
ICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS5yZW1vdmUoZm9ybWF0dGluZ0Vs
ZW1lbnQpOworICAgICAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLnJl
bW92ZSgqZm9ybWF0dGluZ0VsZW1lbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIC8vIDQuZAogICAgICAgICBpZiAoZm9ybWF0dGluZ0VsZW1lbnQgIT0gJm1fdHJl
ZS5jdXJyZW50RWxlbWVudCgpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAg
ICAgIC8vIDUuCi0gICAgICAgIGF1dG8qIGZ1cnRoZXN0QmxvY2sgPSBtX3RyZWUub3BlbkVsZW1l
bnRzKCkuZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KGZvcm1hdHRpbmdFbGVtZW50
KTsKKyAgICAgICAgYXV0byogZnVydGhlc3RCbG9jayA9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS5m
dXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoKmZvcm1hdHRpbmdFbGVtZW50KTsKICAg
ICAgICAgLy8gNi4KICAgICAgICAgaWYgKCFmdXJ0aGVzdEJsb2NrKSB7Ci0gICAgICAgICAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCkucG9wVW50aWxQb3BwZWQoZm9ybWF0dGluZ0VsZW1lbnQpOwot
ICAgICAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLnJlbW92ZShmb3Jt
YXR0aW5nRWxlbWVudCk7CisgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucG9wVW50
aWxQb3BwZWQoKmZvcm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAgICAgIG1fdHJlZS5hY3RpdmVG
b3JtYXR0aW5nRWxlbWVudHMoKS5yZW1vdmUoKmZvcm1hdHRpbmdFbGVtZW50KTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyA3LgotICAgICAgICBBU1NFUlQoZnVy
dGhlc3RCbG9jay0+aXNBYm92ZShmb3JtYXR0aW5nRWxlbWVudFJlY29yZCkpOworICAgICAgICBB
U1NFUlQoZnVydGhlc3RCbG9jay0+aXNBYm92ZSgqZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQpKTsK
ICAgICAgICAgUmVmPEhUTUxTdGFja0l0ZW0+IGNvbW1vbkFuY2VzdG9yID0gZm9ybWF0dGluZ0Vs
ZW1lbnRSZWNvcmQtPm5leHQoKS0+c3RhY2tJdGVtKCk7CiAgICAgICAgIC8vIDguCi0gICAgICAg
IEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkJvb2ttYXJrIGJvb2ttYXJrID0gbV90cmVlLmFj
dGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLmJvb2ttYXJrRm9yKGZvcm1hdHRpbmdFbGVtZW50KTsK
KyAgICAgICAgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Qm9va21hcmsgYm9va21hcmsgPSBt
X3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkuYm9va21hcmtGb3IoKmZvcm1hdHRpbmdF
bGVtZW50KTsKICAgICAgICAgLy8gOS4KICAgICAgICAgYXV0byogbm9kZSA9IGZ1cnRoZXN0Qmxv
Y2s7CiAgICAgICAgIGF1dG8qIG5leHROb2RlID0gbm9kZS0+bmV4dCgpOwpAQCAtMTUxMCw4ICsx
NTExLDggQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgQVNTRVJUKG5vZGUpOwogICAgICAgICAg
ICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0KCk7IC8vIFNhdmUgbm9kZS0+bmV4dCgpIGZvciB0aGUg
bmV4dCBpdGVyYXRpb24gaW4gY2FzZSBub2RlIGlzIGRlbGV0ZWQgaW4gOS41LgogICAgICAgICAg
ICAgLy8gOS41Ci0gICAgICAgICAgICBpZiAoIW1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVu
dHMoKS5jb250YWlucygmbm9kZS0+ZWxlbWVudCgpKSkgewotICAgICAgICAgICAgICAgIG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS5yZW1vdmUoJm5vZGUtPmVsZW1lbnQoKSk7CisgICAgICAgICAgICBp
ZiAoIW1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS5jb250YWlucyhub2RlLT5lbGVt
ZW50KCkpKSB7CisgICAgICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLnJlbW92ZShu
b2RlLT5lbGVtZW50KCkpOwogICAgICAgICAgICAgICAgIG5vZGUgPSAwOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtMTUxOSwxNSArMTUyMCwxNSBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgICAgICAgICBpZiAobm9kZSA9PSBmb3JtYXR0aW5nRWxlbWVudFJlY29yZCkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIC8vIDkuNwotICAgICAgICAgICAg
UmVmUHRyPEhUTUxTdGFja0l0ZW0+IG5ld0l0ZW0gPSBtX3RyZWUuY3JlYXRlRWxlbWVudEZyb21T
YXZlZFRva2VuKCZub2RlLT5zdGFja0l0ZW0oKSk7CisgICAgICAgICAgICBhdXRvIG5ld0l0ZW0g
PSBtX3RyZWUuY3JlYXRlRWxlbWVudEZyb21TYXZlZFRva2VuKG5vZGUtPnN0YWNrSXRlbSgpKTsK
IAotICAgICAgICAgICAgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnkqIG5vZGVFbnRy
eSA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS5maW5kKCZub2RlLT5lbGVtZW50
KCkpOworICAgICAgICAgICAgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6RW50cnkqIG5vZGVF
bnRyeSA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS5maW5kKG5vZGUtPmVsZW1l
bnQoKSk7CiAgICAgICAgICAgICBub2RlRW50cnktPnJlcGxhY2VFbGVtZW50KG5ld0l0ZW0uY29w
eVJlZigpKTsKLSAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VFbGVtZW50KG5ld0l0ZW0ucmVsZWFz
ZSgpKTsKKyAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VFbGVtZW50KFdURk1vdmUobmV3SXRlbSkp
OwogCiAgICAgICAgICAgICAvLyA5LjgKICAgICAgICAgICAgIGlmIChsYXN0Tm9kZSA9PSBmdXJ0
aGVzdEJsb2NrKQotICAgICAgICAgICAgICAgIGJvb2ttYXJrLm1vdmVUb0FmdGVyKG5vZGVFbnRy
eSk7CisgICAgICAgICAgICAgICAgYm9va21hcmsubW92ZVRvQWZ0ZXIoKm5vZGVFbnRyeSk7CiAg
ICAgICAgICAgICAvLyA5LjkKICAgICAgICAgICAgIG1fdHJlZS5yZXBhcmVudCgqbm9kZSwgKmxh
c3ROb2RlKTsKICAgICAgICAgICAgIC8vIDkuMTAKQEAgLTE1MzYsMTYgKzE1MzcsMTYgQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQogICAgICAgICAvLyAxMC4KICAgICAgICAgbV90cmVlLmluc2VydEFscmVhZHlQYXJz
ZWRDaGlsZChjb21tb25BbmNlc3Rvci5nZXQoKSwgKmxhc3ROb2RlKTsKICAgICAgICAgLy8gMTEu
Ci0gICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBuZXdJdGVtID0gbV90cmVlLmNyZWF0ZUVs
ZW1lbnRGcm9tU2F2ZWRUb2tlbigmZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQtPnN0YWNrSXRlbSgp
KTsKKyAgICAgICAgYXV0byBuZXdJdGVtID0gbV90cmVlLmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRU
b2tlbihmb3JtYXR0aW5nRWxlbWVudFJlY29yZC0+c3RhY2tJdGVtKCkpOwogICAgICAgICAvLyAx
Mi4KLSAgICAgICAgbV90cmVlLnRha2VBbGxDaGlsZHJlbigqbmV3SXRlbSwgKmZ1cnRoZXN0Qmxv
Y2spOworICAgICAgICBtX3RyZWUudGFrZUFsbENoaWxkcmVuKG5ld0l0ZW0sICpmdXJ0aGVzdEJs
b2NrKTsKICAgICAgICAgLy8gMTMuCi0gICAgICAgIG1fdHJlZS5yZXBhcmVudCgqZnVydGhlc3RC
bG9jaywgKm5ld0l0ZW0pOworICAgICAgICBtX3RyZWUucmVwYXJlbnQoKmZ1cnRoZXN0QmxvY2ss
IG5ld0l0ZW0pOwogICAgICAgICAvLyAxNC4KLSAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cygpLnN3YXBUbyhmb3JtYXR0aW5nRWxlbWVudCwgbmV3SXRlbSwgYm9va21hcmsp
OworICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkuc3dhcFRvKCpmb3Jt
YXR0aW5nRWxlbWVudCwgbmV3SXRlbS5jb3B5UmVmKCksIGJvb2ttYXJrKTsKICAgICAgICAgLy8g
MTUuCi0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5yZW1vdmUoZm9ybWF0dGluZ0VsZW1l
bnQpOwotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkuaW5zZXJ0QWJvdmUobmV3SXRlbSwg
ZnVydGhlc3RCbG9jayk7CisgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS5yZW1vdmUoKmZv
cm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLmluc2VydEFi
b3ZlKFdURk1vdmUobmV3SXRlbSksICpmdXJ0aGVzdEJsb2NrKTsKICAgICB9CiB9CiAKQEAgLTE3
OTgsMTUgKzE3OTksMTUgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJ
bkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBmb3JtVGFnKSB7CiAgICAgICAgIGlmICghaXNQYXJzaW5nVGVtcGxhdGVDb250ZW50cygp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gbm9kZSA9IG1fdHJlZS50YWtlRm9ybSgp
OwotICAgICAgICAgICAgaWYgKCFub2RlIHx8ICFtX3RyZWUub3BlbkVsZW1lbnRzKCkuaW5TY29w
ZShub2RlLmdldCgpKSkgeworICAgICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGZvcm1FbGVtZW50
ID0gbV90cmVlLnRha2VGb3JtKCk7CisgICAgICAgICAgICBpZiAoIWZvcm1FbGVtZW50IHx8ICFt
X3RyZWUub3BlbkVsZW1lbnRzKCkuaW5TY29wZSgqZm9ybUVsZW1lbnQpKSB7CiAgICAgICAgICAg
ICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKLSAg
ICAgICAgICAgIGlmICgmbV90cmVlLmN1cnJlbnROb2RlKCkgIT0gbm9kZS5nZXQoKSkKKyAgICAg
ICAgICAgIGlmICgmbV90cmVlLmN1cnJlbnROb2RlKCkgIT0gZm9ybUVsZW1lbnQuZ2V0KCkpCiAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAgICBtX3RyZWUub3Bl
bkVsZW1lbnRzKCkucmVtb3ZlKG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgbV90cmVlLm9wZW5F
bGVtZW50cygpLnJlbW92ZSgqZm9ybUVsZW1lbnQpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCkuaW5TY29wZSh0b2tlbi5uYW1lKCkpKSB7
CiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CkBAIC0yMjEzLDExICsyMjE0LDEx
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29tbWVudChBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQogICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QmVm
b3JlSFRNTAogICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0
ZXJBZnRlckJvZHkKICAgICAgICAgfHwgbV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6
OkFmdGVyQWZ0ZXJGcmFtZXNldCkgewotICAgICAgICBtX3RyZWUuaW5zZXJ0Q29tbWVudE9uRG9j
dW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydENvbW1lbnRPbkRvY3VtZW50KHRv
a2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9pbnNlcnRpb25Nb2RlID09
IEluc2VydGlvbk1vZGU6OkFmdGVyQm9keSkgewotICAgICAgICBtX3RyZWUuaW5zZXJ0Q29tbWVu
dE9uSFRNTEh0bWxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRDb21tZW50
T25IVE1MSHRtbEVsZW1lbnQodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
IChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZVRleHQpIHsKQEAgLTIy
MjUsNyArMjIyNiw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29tbWVudChBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBwcm9jZXNzQ29tbWVudCh0b2tlbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgbV90cmVlLmluc2VydENvbW1lbnQoJnRva2VuKTsKKyAg
ICBtX3RyZWUuaW5zZXJ0Q29tbWVudCh0b2tlbik7CiB9CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzQ2hhcmFjdGVyKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCkBAIC0yNTgzLDcgKzI1
ODQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluaXRpYWwoKQogdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JCZWZvcmVIVE1MKCkKIHsKICAgICBBdG9taWNIVE1M
VG9rZW4gc3RhcnRIVE1MKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGh0bWxUYWcubG9jYWxOYW1lKCkp
OwotICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCgmc3RhcnRIVE1M
KTsKKyAgICBtX3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoc3RhcnRIVE1M
KTsKICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkOwogfQog
CkBAIC0yNjQyLDcgKzI2NDMsNyBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnRm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBjb21tYW5kVGFnCiAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaW5rVGFnCiAg
ICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZXRhVGFnKSB7Ci0gICAgICAgIG1fdHJlZS5pbnNl
cnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRT
ZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgLy8gTm90ZTogVGhlIGN1c3Rv
bSBwcm9jZXNzaW5nIGZvciB0aGUgPG1ldGE+IHRhZyBpcyBkb25lIGluIEhUTUxNZXRhRWxlbWVu
dDo6cHJvY2VzcygpLgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yNjU1LDcgKzI2
NTYsNyBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1RleHRT
dGFydFRhZyh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAg
ICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmlu
c2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0
aW9uTW9kZTo6SW5IZWFkTm9zY3JpcHQ7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAg
LTI2ODQsNyArMjY4NSw3IEBAIGJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdG
b3JJbkhlYWQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzR2VuZXJpY1JDREFUQVN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAg
ICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKLSAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1l
bnQodG9rZW4pOwogICAgIG1fcGFyc2VyLnRva2VuaXplcigpLnNldFJDREFUQVN0YXRlKCk7CiAg
ICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7CiAgICAgbV9pbnNl
cnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6VGV4dDsKQEAgLTI2OTMsNyArMjY5NCw3IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1JDREFUQVN0YXJ0VGFnKEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNSYXdU
ZXh0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4u
dHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwotICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxl
bWVudCgmdG9rZW4pOworICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAg
bV9wYXJzZXIudG9rZW5pemVyKCkuc2V0UkFXVEVYVFN0YXRlKCk7CiAgICAgbV9vcmlnaW5hbElu
c2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7CiAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5z
ZXJ0aW9uTW9kZTo6VGV4dDsKQEAgLTI3MDIsNyArMjcwMyw3IEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpT
dGFydFRhZyk7Ci0gICAgbV90cmVlLmluc2VydFNjcmlwdEVsZW1lbnQoJnRva2VuKTsKKyAgICBt
X3RyZWUuaW5zZXJ0U2NyaXB0RWxlbWVudCh0b2tlbik7CiAgICAgbV9wYXJzZXIudG9rZW5pemVy
KCkuc2V0U2NyaXB0RGF0YVN0YXRlKCk7CiAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBt
X2luc2VydGlvbk1vZGU7CiAKQEAgLTI4MjQsNyArMjgyNSw3IEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgICAgICBhZGp1c3RTVkdBdHRyaWJ1dGVzKHRva2VuKTsKICAgICAgICAgfQogICAg
ICAgICBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyh0b2tlbik7Ci0gICAgICAgIG1fdHJlZS5pbnNl
cnRGb3JlaWduRWxlbWVudCgmdG9rZW4sIGN1cnJlbnROYW1lc3BhY2UpOworICAgICAgICBtX3Ry
ZWUuaW5zZXJ0Rm9yZWlnbkVsZW1lbnQodG9rZW4sIGN1cnJlbnROYW1lc3BhY2UpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIVE1MVG9rZW46OkVuZFRhZzogewpAQCAtMjg0NCw3
ICsyODQ1LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNv
bnRlbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgICAgICBwYXJzZUVycm9y
KHRva2VuKTsKICAgICAgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5v
ZGVSZWNvcmQtPnN0YWNrSXRlbSgpLmxvY2FsTmFtZSgpID09IHRva2VuLm5hbWUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkucG9wVW50aWxQb3BwZWQoJm5v
ZGVSZWNvcmQtPmVsZW1lbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS5wb3BVbnRpbFBvcHBlZChub2RlUmVjb3JkLT5lbGVtZW50KCkpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5v
ZGVSZWNvcmQgPSBub2RlUmVjb3JkLT5uZXh0KCk7CkBAIC0yODU4LDcgKzI4NTksNyBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIVE1MVG9rZW46
OkNvbW1lbnQ6Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRDb21tZW50KCZ0b2tlbik7CisgICAgICAg
IG1fdHJlZS5pbnNlcnRDb21tZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
SFRNTFRva2VuOjpDaGFyYWN0ZXI6IHsKICAgICAgICAgU3RyaW5nIGNoYXJhY3RlcnMgPSBTdHJp
bmcodG9rZW4uY2hhcmFjdGVycygpLCB0b2tlbi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>