<?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>214882</bug_id>
          
          <creation_ts>2020-07-28 10:00:54 -0700</creation_ts>
          <short_desc>Improve range idioms and other changes to prepare the way for more reduction in live range use</short_desc>
          <delta_ts>2020-08-15 10:16:25 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1675659</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-28 10:00:54 -0700</bug_when>
    <thetext>Improve range idioms and other changes to prepare the way for more reduction in live range use</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675843</commentid>
    <comment_count>1</comment_count>
      <attachid>405423</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-28 15:58:36 -0700</bug_when>
    <thetext>Created attachment 405423
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675855</commentid>
    <comment_count>2</comment_count>
      <attachid>405427</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-28 16:48:07 -0700</bug_when>
    <thetext>Created attachment 405427
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675886</commentid>
    <comment_count>3</comment_count>
      <attachid>405427</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-28 19:17:04 -0700</bug_when>
    <thetext>Comment on attachment 405427
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1181
&gt;  VisiblePositionRange AccessibilityObject::lineRangeForPosition(const VisiblePosition&amp; visiblePosition) const
&gt;  {
&gt; -    VisiblePosition startPosition = startOfLine(visiblePosition);
&gt; -    VisiblePosition endPosition = endOfLine(visiblePosition);
&gt; -    return VisiblePositionRange(startPosition, endPosition);
&gt; +    return { startOfLine(visiblePosition), endOfLine(visiblePosition) };

Some of these functions don&apos;t seem like they belong as member functions on AccessibilityObject, given how general they are, and that they don&apos;t seem to be using any state or functions of AccessibilityObject. In another change (not this one), it might be a good idea to move some of these to VisibileUnit.h or similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676014</commentid>
    <comment_count>4</comment_count>
      <attachid>405427</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-29 09:27:38 -0700</bug_when>
    <thetext>Comment on attachment 405427
Patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1181
&gt;&gt; +    return { startOfLine(visiblePosition), endOfLine(visiblePosition) };
&gt; 
&gt; Some of these functions don&apos;t seem like they belong as member functions on AccessibilityObject, given how general they are, and that they don&apos;t seem to be using any state or functions of AccessibilityObject. In another change (not this one), it might be a good idea to move some of these to VisibileUnit.h or similar.

Agreed. I’ll try to come back to that later. In some cases the functions look universal but have some sort of subtle dependency on the accessibility object, so it’s a non-trivial project to disentangle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676017</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-29 09:36:46 -0700</bug_when>
    <thetext>Committed r265044: &lt;https://trac.webkit.org/changeset/265044&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 405427.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676020</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-29 09:37:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/66277887&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680630</commentid>
    <comment_count>7</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-08-15 10:16:25 -0700</bug_when>
    <thetext>*** Bug 215521 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405423</attachid>
            <date>2020-07-28 15:58:36 -0700</date>
            <delta_ts>2020-07-28 16:48:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214882-20200728155835.patch</filename>
            <type>text/plain</type>
            <size>110760</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGNhNDI3YWNlZmI0OTcz
NzNjMjUyYjY2YTdjM2RhOTE0MWY3ZDBiNy4uMDkzZmYwNWI5YzJmMTliZTdhZmE2YmYyNTliMTZh
ZGE0OWU3ZTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NiBAQAorMjAyMC0wNy0yOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSByYW5nZSBpZGlv
bXMgYW5kIG90aGVyIGNoYW5nZXMgdG8gcHJlcGFyZSB0aGUgd2F5IGZvciBtb3JlIHJlZHVjdGlv
biBpbiBsaXZlIHJhbmdlIHVzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE0ODgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dDo6QWNjZXNzaWJpbGl0eVJlcGxhY2Vk
VGV4dCk6IENhbGwgdGhlCisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2ZXJzaW9ucyBvZiBzdGFy
dCBhbmQgZW5kIGluc3RlYWQgb2YgY29udmVydGluZyB0byBQb3NpdGlvbgorICAgICAgICBhbmQg
dGhlbiBiYWNrIHRvIFZpc2libGVQb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnJhbmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UpOiBTaW1wbGlmeSB3aXRoIG1ha2VTaW1w
bGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNl
dEZvclBvaW50KTogRGl0dG8uCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6dmlz
aWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGlvbnMgY29uc3QpOgorICAgICAgICBV
cGRhdGUgaWRpb20gZm9yIGNyZWF0aW5nIFZpc2libGVQb3NpdGlvblJhbmdlIHNpbmNlIGl0J3Mg
anVzdCBhIHN0cnVjdCBub3cKKyAgICAgICAgd2l0aG91dCBleHBsaWNpdCBjb25zdHJ1Y3RvcnMu
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpwb3NpdGlvbk9mTGVmdFdv
cmQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6
OnBvc2l0aW9uT2ZSaWdodFdvcmQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UgY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnJpZ2h0TGluZVZp
c2libGVQb3NpdGlvblJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzZW50ZW5jZUZvclBvc2l0aW9uIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJhZ3JhcGhGb3JQb3NpdGlvbiBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c3R5
bGVSYW5nZUZvclBvc2l0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlIGNvbnN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaW5lUmFuZ2VGb3JQ
b3NpdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Omxlbmd0aEZvclZpc2libGVQb3NpdGlvblJhbmdl
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpu
ZXh0U2VudGVuY2VFbmRQb3NpdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24gY29uc3Qp
OiBEaXR0by4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdElu
dGVyZmFjZS5oOiBNb3ZlZCBWaXNpYmxlUG9zaXRpb25SYW5nZQorICAgICAgICB0byBWaXNpYmxl
UG9zaXRpb24uaCBmb3Igd2lkZXIgdXNlLiBBbHNvIHJlbW92ZWQgY29uc3RydWN0b3JzLgorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1l
bnQgY29uc3QpOiBTaW1wbGlmeSB3aXRoCisgICAgICAgIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmxpbmtDbGlja1BvaW50KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjbGlj
a1BvaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZSBjb25zdCk6IFVwZGF0ZWQKKyAgICAgICAgZm9yIHJl
bW92YWwgb2YgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxp
bmUgY29uc3QpOgorICAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgZXhwbGljaXQgY29udmVyc2lv
biB0byBWaXNpYmxlUG9zaXRpb25SYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAodmlzaWJsZVBv
c2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UpOiBBZGRlZCwgcmVwbGFjaW5nIHNlcGFyYXRl
IGZ1bmN0aW9ucworICAgICAgICBmb3Igc3RhcnQgYW5kIGVuZC4KKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2Vy
UmFuZ2U6XSk6CisgICAgICAgIFNpbXBsaWZ5IHVzaW5nIHZpc2libGVQb3NpdGlvblJhbmdlRm9y
VGV4dE1hcmtlclJhbmdlLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDogQWRkZWQgaW5j
bHVkZSBvZiAiUmFuZ2UuaCIsIG1heSBub3QgYmUgbmVlZGVkIHJpZ2h0IG5vdywKKyAgICAgICAg
YnV0IGhpZ2hseSBsaWtlbHkgdG8gYmUgbmVlZGVkIGFmdGVyIGZ1dHVyZSBsaXZlIHJhbmdlIHdv
cmsuCisgICAgICAgICogZG9tL05vZGUuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgIlJhbmdlLmgi
LgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6IEFkZGVkIFBvc2l0aW9uUmFuZ2UuIFRoaXMg
d2lsbCBiZSBhIG1vcmUgZWZmaWNpZW50CisgICAgICAgIGFsdGVybmF0aXZlIHRvIFNpbXBsZVJh
bmdlIHRoYXQgY2FuIGF2b2lkIGNvbXB1dGluZyBub2RlIG9mZmV0cyBmb3IgcG9zaXRpb25zCisg
ICAgICAgIGJlZm9yZSBhbmQgYWZ0ZXIgYW5jaG9yIG5vZGVzIGluIHNvbWUgY2FzZXMuIE5vdCB1
c2VkIHlldC4KKworICAgICAgICAqIGRvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHA6IFJlbW92ZWQg
aW5jbHVkZSBvZiAiUmFuZ2UuaCIuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuaDogRXhwb3J0IG1h
a2VTaW1wbGVSYW5nZSBvdmVybG9hZCBub3cgdXNlZCBvdXRzaWRlIFdlYkNvcmUuCisKKyAgICAg
ICAgKiBkb20vU2ltcGxlUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZVJh
bmdlKTogQWRkZWQgb3ZlcmxvYWRzIGZvciByYW5nZXMgdGhhdCBjb25zaXN0IG9mIGp1c3QKKyAg
ICAgICAgYSBzaW5nbGUgYm91bmRhcnkgcG9pbnQsIHNvIHRoZSBhcmd1bWVudCBkb2VzIG5vdCBo
YXZlIHRvIGJlIHBhc3NlZCB0d2ljZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2
ZUFuY2VzdG9yKTogQWRkZWQgb3ZlcmxvYWQgc28gY2FsbGVyIGNhbiBqdXN0IHBhc3MKKyAgICAg
ICAgYSBzaW1wbGUgcmFuZ2UgcmF0aGVyIHRoYW4gcGFzc2luZyB0d28gYm91bmRhcnkgcG9pbnQg
Y29udGFpbmVyIG5vZGVzLgorCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6IEFkZGVkIG1h
a2VTaW1wbGVSYW5nZSBvdmVybG9hZHMgdGhhdCB0YWtlIG9uZSBvciBtb3JlCisgICAgICAgIGFy
Z3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byBtYWtlQm91bmRhcnlQb2ludCBvciBhY3R1YWwg
Ym91bmRhcnkgcG9pbnRzLgorCisgICAgICAgICogZG9tL1N0YXRpY1JhbmdlLmNwcDogUmVtb3Zl
ZCBpbmNsdWRlIG9mICJSYW5nZS5oIi4KKworICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFm
dGVyQ29tbWFuZCk6CisgICAgICAgIFNpbXBsaWZ5IHdpdGggbWFrZVNpbXBsZVJhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNP
blRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6CisgICAgICAgIERpdHRvLgorICAgICAgICAqIGVk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJpbmdGb3JWaXNp
YmxlUG9zaXRpb25JbmRleFJhbmdlKTogVXBkYXRlZCBmb3IgcmVtb3ZhbCBvZgorICAgICAgICBW
aXNpYmxlUG9zaXRpb25SYW5nZSBjb25zdHJ1Y3RvcjsgYWxzbyB1c2UgbW92ZSB0byByZWR1Y2Ug
cmVmZXJlbmNlIGNvdW50CisgICAgICAgIGNodXJuIGEgdGlueSBiaXQuCisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOiBTaW1wbGlmeSB3aXRo
IG1ha2VTaW1wbGVSYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6IEFkZGVkIGluY2x1ZGUgb2YgIlJhbmdlLmgiLCBtYXkgbm90IGJlIG5lZWRlZCBu
b3csCisgICAgICAgIGJ1dCBoaWdobHkgbGlrZWx5IHRvIGJlIG5lZWRlZCBhZnRlciBmdXR1cmUg
bGl2ZSByYW5nZSB3b3JrLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKTogU2ltcGxpZnkgdXNpbmcgbWFr
ZVNpbXBsZVJhbmdlIGFuZAorICAgICAgICBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250
ZW50cy4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2VsZWN0ZWRUZXh0IGNvbnN0KTogU2ltcGxpZnkgdXNpbmcgVmlzaWJsZVNlbGVj
dGlvbjo6Zmlyc3RSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFNlbGVjdGlvbik6IFNp
bXBsaWZ5IHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKTogU2ltcGxpZnkgd2l0aCB0
aGUgbmV3IG92ZXJsb2FkCisgICAgICAgIG9mIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yLgorCisg
ICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6d29yZE9mZnNldEluUmFuZ2UgY29uc3QpOiBEZWxldGVkLiBNb3ZlZCB0
aGUgY29kZQorICAgICAgICBpbnRvIHRoZSBpT1Mtc3BlY2lmaWMgcGFydCBvZiBXZWJLaXRMZWdh
Y3kgV2ViRnJhbWUuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c3BhY2VGb2xs
b3dzV29yZEluUmFuZ2UgY29uc3QpOiBEZWxldGVkLiBNb3ZlZCB0aGUKKyAgICAgICAgY29kZSBp
bnRvIHRoZSBpT1Mtc3BlY2lmaWMgcGFydCBvZiBXZWJLaXRMZWdhY3kgV2ViRnJhbWUuCisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0IGNv
bnN0KTogTWVyZ2VkIGluIHdpdGgKKyAgICAgICAgYWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0
YXJ0LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmFjdHVhbFNlbGVjdGlvbkF0
U2VudGVuY2VTdGFydCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUgZGVsZXRpb24uCisKKyAgICAgICAgKiBl
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGg6Om9mZnNldFRvIGNvbnN0KTogU2ltcGxpZnkgd2l0aCBtYWtlU2ltcGxl
UmFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6UGFyYWdyYXBo
Q29udGVudEl0ZXJhdG9yKTogU2ltcGxpZnkgd2l0aAorICAgICAgICBtYWtlU2ltcGxlUmFuZ2Uu
CisKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHlwaW5nQ29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0
aW9uKTogUGFzcworICAgICAgICB2aXNpYmxlU3RhcnQvRW5kIGluc3RlYWQgb2YgY29udmVydGlu
ZyB0byBQb3NpdGlvbiBhbmQgYmFjayB0byBWaXNpYmxlUG9zaXRpb24uCisKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxl
UmFuZ2UpOiBBZGRlZC4gQ29udmVydHMgYSBWaXNpYmxlUG9zaXRpb25SYW5nZSBpbnRvCisgICAg
ICAgIGEgU2ltcGxlUmFuZ2UuCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaDog
TW92ZWQgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgaGVyZS4KKworICAgICAgICAqIGVkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpm
aXJzdFJhbmdlIGNvbnN0KTogU2ltcGxpZnkgdXNpbmcgbWFrZVNpbXBsZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UgY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTZWFyY2hSYW5nZSk6IERlbGV0ZWQuIFRoaXMg
d2FzIGNvbmZ1c2luZ2x5IG5hbWVkIGdpdmVuIHRoYXQKKyAgICAgICAgaXQgd2FzIG9ubHkgdXNl
ZCBpbiBhcHBlbmRUcmFpbGluZ1doaXRlc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxl
U2VsZWN0aW9uOjphcHBlbmRUcmFpbGluZ1doaXRlc3BhY2UpOiBNZXJnZWQgbWFrZVNlYXJjaFJh
bmdlCisgICAgICAgIGluIGhlcmUgYW5kIHNpbXBsaWZpZWQgdXNpbmcgbWFrZVNpbXBsZVJhbmdl
LgorCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmg6IEFkZGVkIGNvbnZlcnNp
b24gdG8gVmlzaWJsZVBvc2l0aW9uUmFuZ2UuCisgICAgICAgIFByZXZpb3VzbHkgdGhpcyB3YXMg
aW1wbGVtZW50ZWQgYXMgYSBjb25zdHJ1Y3RvciBmb3IgVmlzaWJsZVBvc2l0aW9uUmFuZ2UsCisg
ICAgICAgIGJ1dCB0aGF0IHdhcyBhIGxheWVyaW5nIGludmVyc2lvbiBzaW5jZSB0aGlzIGlzIGJ1
aWx0IG9uIHRvcCBvZiBWaXNpYmxlUG9zaXRpb24uCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2li
bGVVbml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMp
OiBTaW1wbGlmaWVkIHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OmNo
YXJhY3RlcnNBcm91bmRQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6d29yZFJh
bmdlRnJvbVBvc2l0aW9uKTogUmVtb3ZlZCBhbiB1bmhlbHBmdWwgY29tbWVudC4KKyAgICAgICAg
KFdlYkNvcmU6OmNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbik6IERpdHRvLgorCisgICAg
ICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6
ZGV0ZWN0SXRlbSk6IFNpbXBsaWZ5IHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OnNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyk6IFJlbW92ZWQgb3V0
IGFyZ3VtZW50CisgICAgICAgIGFib3V0IG1vZGlmeWluZyB0aGUgRE9NLiBUaGlzIHdhcyB1c2Vk
IHRvIHdvcmsgYXJvdW5kIGEgcHJvYmxlbSBjYXVzZWQgYnkKKyAgICAgICAgdXNpbmcgbGl2ZSBy
YW5nZXMuIFRoZSBwcm9ibGVtIG5vIGxvbmdlciBleGlzdHMgYmVjYXVzZSB0aGUgY29kZSBkb2Vz
IG5vdAorICAgICAgICB1c2UgbGl2ZSByYW5nZXMgYW55IG1vcmUuCisgICAgICAgIChXZWJDb3Jl
OjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6IFJlbW92ZWQgdGhlIHdvcmth
cm91bmQuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbik6IFNp
bXBsaWZ5IHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rpb25h
cnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbTogQWRkZWQgaW5jbHVkZSBvZiAiUmFu
Z2UuaCIsIG1heQorICAgICAgICBub3QgYmUgbmVlZGVkIG5vdywgYnV0IGhpZ2hseSBsaWtlbHkg
dG8gYmUgbmVlZGVkIGFmdGVyIGZ1dHVyZSBsaXZlIHJhbmdlIHdvcmsuCisKKyAgICAgICAgKiBl
ZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mICJS
YW5nZS5oIi4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3ku
bW06CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlv
bik6IFNpbXBsaWZ5IHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRp
Y3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KTogRGl0dG8uCisKKyAgICAgICAg
KiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06IFJlbW92ZWQgaW5jbHVkZSBvZiAiUmFuZ2UuaCIu
CisKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6cmVuZGVyZWRUZXh0UmVzcGVjdGluZ1JhbmdlKTogU2ltcGxp
ZnkKKyAgICAgICAgdXNpbmcgbWFrZVNpbXBsZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy93
aW4vRWRpdG9yV2luLmNwcDogQWRkZWQgaW5jbHVkZSBvZiAiUmFuZ2UuaCIsIG1heSBub3QgYmUg
bmVlZGVkIG5vdywKKyAgICAgICAgYnV0IGhpZ2hseSBsaWtlbHkgdG8gYmUgbmVlZGVkIGFmdGVy
IGZ1dHVyZSBsaXZlIHJhbmdlIHdvcmsuCisKKyAgICAgICAgKiBodG1sL3NoYWRvdy9tYWMvSW1h
Z2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgIlJhbmdl
LmgiLgorCisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NU2VsZWN0aW9uOjphZGRSYW5nZSk6IENhbGwgc2V0U2VsZWN0aW9uIGluc3RlYWQgb2Yg
bW92ZVRvLgorICAgICAgICBObyBuZWVkIHRvIGhhdmUgdHdvIGZ1bmN0aW9ucyB0aGF0IGRvIHRo
ZSBzYW1lIHRoaW5nLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dGV4dERpc3RhbmNlKTogU2ltcGxpZnkgdXNpbmcgbWFrZVNpbXBsZVJhbmdl
LgorCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
cmFuZ2VGb3JQb2ludCk6IFNpbXBsaWZ5IHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKworICAgICAg
ICAqIHBhZ2UvVGV4dEluZGljYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjplc3RpbWF0ZWRC
YWNrZ3JvdW5kQ29sb3JGb3JSYW5nZSk6IFNpbXBsaWZ5IHVzaW5nIHRoZQorICAgICAgICBjb21t
b25JbmNsdXNpdmVBbmNlc3RvciBvdmVybG9hZCB0aGF0IHRha2VzIGEgcmFuZ2UuCisgICAgICAg
IChXZWJDb3JlOjppbml0aWFsaXplSW5kaWNhdG9yKTogRGl0dG8uCisKIDIwMjAtMDctMjggIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbRXZlbnRTb3VyY2VdIFdl
YktpdCBmYWlscyB0byBVVEYtOCBlbmNvZGUgdGhlIExhc3QtRXZlbnQtSUQgSFRUUCBoZWFkZXIg
dmFsdWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggNDQ3MWEzZGQ0NzMwNTQzZTkwNzIwMTY0MjU4YjNmZWJhMDNkMzQ4
ZC4uYWRlYmMxNmM0N2FlNWI4NDExZDMwMTIzZDI3MjcwMjY5Y2UzYmYwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw0MiBAQAorMjAyMC0wNy0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgSW1wcm92ZSByYW5nZSBpZGlvbXMgYW5kIG90aGVyIGNoYW5nZXMgdG8gcHJl
cGFyZSB0aGUgd2F5IGZvciBtb3JlIHJlZHVjdGlvbiBpbiBsaXZlIHJhbmdlIHVzZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0ODgyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTm9kZUhhbmRsZS5jcHA6CisgICAgICAgIChXS0J1
bmRsZU5vZGVIYW5kbGVHZXRSZW5kZXJSZWN0KTogRW1wdGllZCBvdXQgdGhpcyB1bnVzZWQgZnVu
Y3Rpb24gYW5kIGFkZGVkCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRC4gTGF0ZXIsIHdlIGNh
biBkZWxldGUgdGhpcyBvbmNlIHdlIGRlYWwgd2l0aCBhbnkgbGluay10aW1lCisgICAgICAgIGRl
cGVuZGVuY2llcy4gSSBiZWxpZXZlIFNhZmFyaSBtYXkgbGluayB3aXRoIHRoaXMgYnV0IG5ldmVy
IGNhbGxzIGl0LgorICAgICAgICAoV0tCdW5kbGVOb2RlSGFuZGxlQ29weVZpc2libGVSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFNw
ZWxsY2hlY2tFbmFibGVkKTogRGl0dG8uCisgICAgICAgIChXS0J1bmRsZU5vZGVIYW5kbGVHZXRI
VE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZCk6IERpdHRvLgorICAgICAgICAoV0tCdW5kbGVOb2Rl
SGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZCk6IERpdHRvLgor
ICAgICAgICAoV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQXZh
aWxhYmxlKTogRGl0dG8uCisgICAgICAgIChXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRF
bGVtZW50QXV0b0ZpbGxCdXR0b25Cb3VuZHMpOiBEaXR0by4KKyAgICAgICAgKFdLQnVuZGxlTm9k
ZUhhbmRsZUNvcHlIVE1MVGFibGVDZWxsRWxlbWVudENlbGxBYm92ZSk6IERpdHRvLgorICAgICAg
ICAoV0tCdW5kbGVOb2RlSGFuZGxlQ29weUhUTUxGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUpOiBE
aXR0by4KKyAgICAgICAgKFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRv
ZmlsbGVkKTogRGl0dG8uCisgICAgICAgIChXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRF
bGVtZW50QXV0b2ZpbGxlZCk6IERpdHRvLgorICAgICAgICAoV0tCdW5kbGVOb2RlSGFuZGxlU2V0
SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZCk6IERpdHRvLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5t
bToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0
ZWRTdWJzdHJpbmdCZXR3ZWVuUG9zaXRpb25zKToKKyAgICAgICAgU2ltcGxpZnkgd2l0aCBtYWtl
U2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdl
R0xpYi5jcHA6IEFkZGVkIGluY2x1ZGUgb2YgIlJhbmdlLmgiLAorICAgICAgICBtYXkgbm90IGJl
IG5lZWRlZCByaWdodCBub3csIGJ1dCBoaWdobHkgbGlrZWx5IHRvIGJlIG5lZWRlZCBhZnRlcgor
ICAgICAgICBmdXR1cmUgbGl2ZSByYW5nZSB3b3JrLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnNlbGVjdFdpdGhHZXN0dXJlKTogU2ltcGxpZnkgd2l0aCBtYWtlU2ltcGxlUmFuZ2UuCisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KTogRGl0
dG8uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJS
YW5nZUFzeW5jKToKKyAgICAgICAgVXNlIGF1dG8gZm9yIHJhbmdlIHRvIHByZXBhcmUgZm9yIHBv
c3NpYmxlIGNoYW5nZSBvZiB0eXBlIGZyb20gbGl2ZQorICAgICAgICByYW5nZSB0byBTaW1wbGVS
YW5nZS4KKwogMjAyMC0wNy0yOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgU2hhcmUgQVBJIExldmVsIDI6IENhbiBvbmx5IHBlcmZvcm0gb25l
IHNoYXJlIGFjdGlvbiBwZXIgc2hhcmUgc2hlZXQgaW52b2NhdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxv
ZwppbmRleCBlOWY5ZGQ4Njc0NTQ0ZjFlN2M4NDQ1YzFlZjE0NjBhMzNlNzBjODJkLi5hZjc4YWY3
N2JkYzlhNmY5NzdkYjIzZWI1ZjI1ZTBiNmUyODEwZDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTA3LTI4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBJbXByb3ZlIHJhbmdlIGlkaW9tcyBhbmQgb3RoZXIgY2hhbmdlcyB0byBw
cmVwYXJlIHRoZSB3YXkgZm9yIG1vcmUgcmVkdWN0aW9uIGluIGxpdmUgcmFuZ2UgdXNlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ4ODIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdExlZ2Fj
eS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBSZW1vdmVkIHNpbmdseS1idWlsZGluZworICAg
ICAgICBET01VSUtpdEV4dGVuc2lvbnMubW0sIHdoaWNoIGFsc28gaXMgYnVpbHQgaW4gYSB1bmlm
aWVkIHNvdXJjZSBmaWxlLgorICAgICAgICBXZSBkb24ndCBuZWVkIHRvIGJ1aWxkIGl0IHR3aWNl
LgorCiAyMDIwLTA3LTA1ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI2Mzk2MC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZwppbmRleCA3YmMzMzYzYWIyNjgyZGM4MTMxODc5YzY5ZWM4M2IwMmUwY2RhZTc1
Li45MzQ0ZDMxMjJlZTgzZTZjMTc0NzM0MjZlNTAyN2ZlMWQ2N2Q2NzUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDctMjggIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIEltcHJvdmUgcmFuZ2UgaWRpb21zIGFuZCBv
dGhlciBjaGFuZ2VzIHRvIHByZXBhcmUgdGhlIHdheSBmb3IgbW9yZSByZWR1Y3Rpb24gaW4gbGl2
ZSByYW5nZSB1c2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxNDg4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoaW5zZXJ0
aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6IFNpbXBsaWZ5IHdpdGggbWFrZVNpbXBsZVJh
bmdlLgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVj
dGlvbik6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAg
KC1bV2ViRnJhbWUgX2NvbnZlcnRUb0RPTVJhbmdlOnJhbmdlSXNSZWxhdGl2ZVRvOl0pOiBHZXQg
cmlkIG9mCisgICAgICAgIHVubmVjZXNzYXJ5IGNvbnN0cnVjdGlvbiBvZiBhIHJhbmdlIGp1c3Qg
dG8gZ2V0IGFuIGVuZCBwb2ludC4KKyAgICAgICAgKC1bV2ViRnJhbWUgd29yZE9mZnNldEluUmFu
Z2U6XSk6IE1vdmVkIGxvZ2ljIGhlcmUgZnJvbSBWaXNpYmxlU2VsZWN0aW9uLgorICAgICAgICAo
LVtXZWJGcmFtZSBzcGFjZUZvbGxvd3NXb3JkSW5SYW5nZTpdKTogRGl0dG8uCisKIDIwMjAtMDct
MjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3AgdXNpbmcg
bGl2ZSByYW5nZXMgaW4gU3BlbGxDaGVja2VyLmggYW5kIFRleHRDaGVja2luZ0hlbHBlci5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAy
MjQwNDI0MzA3NmRlNGFkMzA5ZWY5ZGQwNTNiOTcxMzZhZDcxZGEyLi5iZWI3MjEyYzc1MzE3NjY4
MDNhYWFlZWM2OWUyOTRiMjZiODAwMTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlICJJbmxp
bmVFbGVtZW50Qm94LmgiCiAjaW5jbHVkZSAiTWF0aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckF0dGFjaG1lbnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94Lmgi
CkBAIC0xNjYsMTAgKzE2NywxMCBAQCB2b2lkIEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNo
ZTo6c2V0SWdub3JlZChBWElEIGlkLCBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbAogQWNjZXNzaWJp
bGl0eVJlcGxhY2VkVGV4dDo6QWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dChjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2li
aWxpdHlFbmFibGVkKCkpIHsKLSAgICAgICAgbV9yZXBsYWNlZFJhbmdlLnN0YXJ0SW5kZXgudmFs
dWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSwgbV9yZXBsYWNl
ZFJhbmdlLnN0YXJ0SW5kZXguc2NvcGUpOworICAgICAgICBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJ
bmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKSwgbV9yZXBsYWNlZFJhbmdlLnN0YXJ0SW5kZXguc2NvcGUpOwogICAgICAgICBpZiAoc2Vs
ZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICAgICAgbV9yZXBsYWNlZFRleHQgPSBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShzZWxlY3Rpb24pOwot
ICAgICAgICAgICAgbV9yZXBsYWNlZFJhbmdlLmVuZEluZGV4LnZhbHVlID0gaW5kZXhGb3JWaXNp
YmxlUG9zaXRpb24oc2VsZWN0aW9uLmVuZCgpLCBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXguc2Nv
cGUpOworICAgICAgICAgICAgbV9yZXBsYWNlZFJhbmdlLmVuZEluZGV4LnZhbHVlID0gaW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnZpc2libGVFbmQoKSwgbV9yZXBsYWNlZFJhbmdl
LmVuZEluZGV4LnNjb3BlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX3JlcGxhY2Vk
UmFuZ2UuZW5kSW5kZXggPSBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleDsKICAgICB9CkBAIC0x
OTg1LDEyICsxOTg2LDEyIEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBWE9iamVjdENhY2hlOjpy
YW5nZU1hdGNoZXNUZXh0TmVhclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlCiAgICAgaWYgKGVuZFBv
c2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBlbmRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbkluT3JB
ZnRlck5vZGUob3JpZ2luYWxSYW5nZS5lbmQuY29udGFpbmVyLnB0cigpKTsKIAotICAgIGF1dG8g
c2VhcmNoUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0
aW9uKSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSB9OwotICAgIGlmIChzZWFyY2hS
YW5nZS5jb2xsYXBzZWQoKSkKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBpZiAoIXNlYXJjaFJhbmdlIHx8IHNl
YXJjaFJhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGF1dG8gdGFyZ2V0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBzZWFyY2hSYW5nZS5zdGFy
dCwgb3JpZ2luYWxSYW5nZS5zdGFydCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3
ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7Ci0gICAgcmV0dXJuIGZpbmRDbG9zZXN0UGxhaW5UZXh0
KHNlYXJjaFJhbmdlLCBtYXRjaFRleHQsIHsgfSwgdGFyZ2V0T2Zmc2V0KTsKKyAgICBhdXRvIHRh
cmdldE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgc2VhcmNoUmFuZ2UtPnN0YXJ0LCBvcmlnaW5h
bFJhbmdlLnN0YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zKTsKKyAgICByZXR1cm4gZmluZENsb3Nlc3RQbGFpblRleHQoKnNlYXJjaFJh
bmdlLCBtYXRjaFRleHQsIHsgfSwgdGFyZ2V0T2Zmc2V0KTsKIH0KIAogc3RhdGljIGJvb2wgaXNS
ZXBsYWNlZE5vZGVPckJSKE5vZGUqIG5vZGUpCkBAIC0yODgwLDE4ICsyODgxLDE4IEBAIENoYXJh
Y3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludChjb25zdCBJ
bnRQb2ludCYgcG9pbnQsIEFYCiB7CiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiB7
IH07Ci0gICAgYXV0byBib3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KG9iamVjdC0+dmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQocG9pbnQpKTsKLSAgICBpZiAoIWJvdW5kYXJ5KQorICAgIGF1dG8g
cmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uob2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChw
b2ludCkpOworICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJu
IHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSh7ICpib3VuZGFyeSwgKmJvdW5kYXJ5
IH0sIHRydWUpOworICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2Uo
KnJhbmdlLCB0cnVlKTsKIH0KIAogQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJh
Y3Rlck9mZnNldEZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKLSAgICBhdXRvIGJv
dW5kYXJ5ID0gbV9kb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KHBvaW50KTsKLSAgICBp
ZiAoIWJvdW5kYXJ5KQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobV9kb2N1bWVu
dC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KHBvaW50KSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJh
bmdlKHsgKmJvdW5kYXJ5LCAqYm91bmRhcnkgfSwgdHJ1ZSk7CisgICAgcmV0dXJuIHN0YXJ0T3JF
bmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSgqcmFuZ2UsIHRydWUpOwogfQogCiBDaGFyYWN0ZXJP
ZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yQm91bmRzKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGJvb2wgZmlyc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA5N2QzMDg4MzFiMzdhMmMzNTE1NzBj
NTk1MTcwZDFiODkyZjJmM2VmLi4yNzQyMWExZWEwODgxMjkzOGM2ZTk3ZWU4ZWVkNjEwNzk4ZWI2
Zjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJOb2RlTGlzdC5oIgog
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGlu
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCkBAIC05ODAsMjEgKzk4MSwxOSBAQCBWaXNp
YmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5n
ZUZvclVub3JkZXJlZFBvc2l0aQogICAgICAgICBlbmRQb3MgPSB2aXNpYmxlUG9zMTsKICAgICB9
CiAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7Cisg
ICAgcmV0dXJuIHsgc3RhcnRQb3MsIGVuZFBvcyB9OwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5n
ZSBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpwb3NpdGlvbk9mTGVmdFdvcmQoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdAogewotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBv
c2l0aW9uID0gc3RhcnRPZldvcmQodmlzaWJsZVBvcywgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwot
ICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGVuZE9mV29yZChzdGFydFBvc2l0aW9u
KTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24pOworICAgIGF1dG8gc3RhcnQgPSBzdGFydE9mV29yZCh2aXNpYmxlUG9zLCBMZWZ0V29y
ZElmT25Cb3VuZGFyeSk7CisgICAgcmV0dXJuIHsgc3RhcnQsIGVuZE9mV29yZChzdGFydCkgfTsK
IH0KIAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6cG9zaXRpb25P
ZlJpZ2h0V29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0CiB7Ci0g
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mV29yZCh2aXNpYmxlUG9z
LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlv
biA9IGVuZE9mV29yZChzdGFydFBvc2l0aW9uKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
UmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIGF1dG8gc3RhcnQgPSBzdGFy
dE9mV29yZCh2aXNpYmxlUG9zLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOworICAgIHJldHVybiB7
IHN0YXJ0LCBlbmRPZldvcmQoc3RhcnQpIH07CiB9CiAKIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24g
dXBkYXRlQVhMaW5lU3RhcnRGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiB2aXNpYmxlUG9zaXRpb24pCkBAIC0xMDQ0LDggKzEwNDMsNyBAQCBWaXNpYmxlUG9zaXRpb25S
YW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsZWZ0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKGNv
bnN0IFZpcwogICAgIH0gZWxzZQogICAgICAgICBzdGFydFBvc2l0aW9uID0gdXBkYXRlQVhMaW5l
U3RhcnRGb3JWaXNpYmxlUG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CiAKLSAgICBWaXNpYmxlUG9z
aXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZkxpbmUocHJldlZpc2libGVQb3MpOwotICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAg
cmV0dXJuIHsgc3RhcnRQb3NpdGlvbiwgZW5kT2ZMaW5lKHByZXZWaXNpYmxlUG9zKSB9OwogfQog
CiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyaWdodExpbmVWaXNp
YmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0
CkBAIC0xMDc4LDIzICsxMDc2LDIxIEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnJpZ2h0TGluZVZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpCiAgICAgICAg
IGVuZFBvc2l0aW9uID0gZW5kT2ZMaW5lKG5leHRWaXNpYmxlUG9zKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwor
ICAgIHJldHVybiB7IHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uIH07CiB9CiAKIFZpc2libGVQ
b3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbnRlbmNlRm9yUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBG
TyAyIElNUExFTUVOVCAoY3VycmVudGx5IHJldHVybnMgaW5jb3JyZWN0IGFuc3dlcikKICAgICAv
LyBSZWxhdGVkPyA8cmRhcjovL3Byb2JsZW0vMzkyNzczNj4gVGV4dCBzZWxlY3Rpb24gYnJva2Vu
IGluIDhBMzM2Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mU2Vu
dGVuY2UodmlzaWJsZVBvcyk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZW5k
T2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFu
Z2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9
IHN0YXJ0T2ZTZW50ZW5jZSh2aXNpYmxlUG9zKTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9u
LCBlbmRPZlNlbnRlbmNlKHN0YXJ0UG9zaXRpb24pIH07CiB9CiAKIFZpc2libGVQb3NpdGlvblJh
bmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmFncmFwaEZvclBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbiA9IHN0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVBvcyk7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIGVuZFBvc2l0aW9uID0gZW5kT2ZQYXJhZ3JhcGgoc3RhcnRQb3NpdGlvbik7Ci0gICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsK
KyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3MpOwor
ICAgIHJldHVybiB7IHN0YXJ0UG9zaXRpb24sIGVuZE9mUGFyYWdyYXBoKHN0YXJ0UG9zaXRpb24p
IH07CiB9CiAKIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlN0eWxlUmFuZ2UoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQpAQCAtMTE0Niw5ICsxMTQyLDkgQEAgc3RhdGlj
IFZpc2libGVQb3NpdGlvbiBlbmRPZlN0eWxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2
aXNpYmxlUG9zKQogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3R5
bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29u
c3QKIHsKICAgICBpZiAodmlzaWJsZVBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvblJhbmdlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRPZlN0eWxlUmFuZ2UodmlzaWJsZVBvcyksIGVuZE9mU3R5
bGVSYW5nZSh2aXNpYmxlUG9zKSk7CisgICAgcmV0dXJuIHsgc3RhcnRPZlN0eWxlUmFuZ2Uodmlz
aWJsZVBvcyksIGVuZE9mU3R5bGVSYW5nZSh2aXNpYmxlUG9zKSB9OwogfQogCiAvLyBOT1RFOiBD
b25zaWRlciBwcm92aWRpbmcgdGhpcyB1dGlsaXR5IG1ldGhvZCBhcyBBWCBBUEkKQEAgLTExNTYs
MTIgKzExNTIsMTEgQEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGEKIHsKICAgICB1bnNpZ25lZCB0
ZXh0TGVuZ3RoID0gZ2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCk7CiAgICAgaWYgKHJhbmdlLnN0YXJ0
ICsgcmFuZ2UubGVuZ3RoID4gdGV4dExlbmd0aCkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvblJhbmdlKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWaXNpYmxlUG9zaXRpb24g
c3RhcnRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLnN0YXJ0KTsKKyAg
ICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5zdGFy
dCk7CiAgICAgc3RhcnRQb3NpdGlvbi5zZXRBZmZpbml0eShET1dOU1RSRUFNKTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5z
dGFydCArIHJhbmdlLmxlbmd0aCk7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCB2
aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCkgfTsKIH0K
IAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlRm9yUGxh
aW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlKSBjb25zdApAQCAtMTE4Myw5
ICsxMTc4LDcgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJh
bmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXgKIAogVmlzaWJsZVBvc2l0aW9uUmFu
Z2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6bGluZVJhbmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mTGluZSh2aXNpYmxlUG9zaXRpb24pOwotICAgIFZpc2li
bGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGVuZE9mTGluZSh2aXNpYmxlUG9zaXRpb24pOwotICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7
CisgICAgcmV0dXJuIHsgc3RhcnRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKSwgZW5kT2ZMaW5lKHZp
c2libGVQb3NpdGlvbikgfTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBsYWNl
ZE5vZGVOZWVkc0NoYXJhY3RlcihOb2RlKiByZXBsYWNlZE5vZGUpCkBAIC0xMjcxLDE1ICsxMjY0
LDEyIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpz
dHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYg
dmlzaWJsZVBvc2l0aW9uUmFuZ2UpCiB7Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KHZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0KTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAg
ICByZXR1cm4geyB9OwotICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBv
c2l0aW9uUmFuZ2UuZW5kKTsKLSAgICBpZiAoIWVuZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdlKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAg
ICByZXR1cm4geyB9OwogCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoVGV4
dEl0ZXJhdG9yIGl0KHsgKnN0YXJ0LCAqZW5kIH0pOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgp
KSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKnJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFk
dmFuY2UoKSkgewogICAgICAgICAvLyBub24temVybyBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2Rl
LCB6ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBub2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBB
WCkKICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5ndGgoKSkgewogICAgICAgICAgICAgLy8gQWRk
IGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBmb3IgbGlzdCBtYXJrZXIgdGV4dC4KQEAgLTEyOTgs
MTYgKzEyODgsMTMgQEAgaW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxlbmd0aEZvclZpc2libGVQ
b3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmcKIHsKICAgICAvLyBGSVhNRTog
TXVsdGktYnl0ZSBzdXBwb3J0CiAKLSAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQo
dmlzaWJsZVBvc2l0aW9uUmFuZ2Uuc3RhcnQpOwotICAgIGlmICghc3RhcnQpCi0gICAgICAgIHJl
dHVybiAtMTsgLy8gRklYTUU6IFdoeSBub3QgcmV0dXJuIDA/Ci0gICAgYXV0byBlbmQgPSBtYWtl
Qm91bmRhcnlQb2ludCh2aXNpYmxlUG9zaXRpb25SYW5nZS5lbmQpOwotICAgIGlmICghZW5kKQor
ICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UodmlzaWJsZVBvc2l0aW9uUmFuZ2UpOwor
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiAtMTsgLy8gRklYTUU6IFdoeSBub3QgcmV0
dXJuIDA/CiAKICAgICAvLyBGSVhNRTogVXNlIGNoYXJhY3RlckNvdW50IGluc3RlYWQgb2Ygd3Jp
dGluZyBvdXIgb3duIGxvb3A/CiAgICAgaW50IGxlbmd0aCA9IDA7Ci0gICAgZm9yIChUZXh0SXRl
cmF0b3IgaXQoeyAqc3RhcnQsICplbmQgfSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsK
KyAgICBmb3IgKFRleHRJdGVyYXRvciBpdCgqcmFuZ2UpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5j
ZSgpKSB7CiAgICAgICAgIC8vIG5vbi16ZXJvIGxlbmd0aCBtZWFucyB0ZXh0dWFsIG5vZGUsIHpl
cm8gbGVuZ3RoIG1lYW5zIHJlcGxhY2VkIG5vZGUgKEFLQSAiYXR0YWNobWVudHMiIGluIEFYKQog
ICAgICAgICBpZiAoaXQudGV4dCgpLmxlbmd0aCgpKQogICAgICAgICAgICAgbGVuZ3RoICs9IGl0
LnRleHQoKS5sZW5ndGgoKTsKQEAgLTE0MzEsMTYgKzE0MTgsMTMgQEAgVmlzaWJsZVBvc2l0aW9u
IEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRTZW50ZW5jZUVuZFBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGkKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBtb3ZlIG9mZiBvZiBhIHNlbnRlbmNlIGVu
ZC4KICAgICBhdXRvIG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uLm5leHQoKTsKLSAgICBhdXRvIHN0
YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZkxpbmUobmV4dFBvc2l0aW9uKSk7Ci0gICAg
aWYgKCFzdGFydCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KGVuZE9mTGluZShuZXh0UG9zaXRpb24pKTsKLSAgICBpZiAoIWVuZCkKKyAgICBh
dXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZMaW5lKG5leHRQb3NpdGlvbiksIGVu
ZE9mTGluZShuZXh0UG9zaXRpb24pKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4g
eyB9OwogCiAgICAgLy8gQW4gZW1wdHkgbGluZSBpcyBjb25zaWRlcmVkIGEgc2VudGVuY2UuIElm
IGl0J3Mgc2tpcHBlZCwgdGhlbiB0aGUgc2VudGVuY2UgcGFyc2VyIHdpbGwgbm90CiAgICAgLy8g
c2VlIHRoaXMgZW1wdHkgbGluZS4gSW5zdGVhZCwgcmV0dXJuIHRoZSBlbmQgcG9zaXRpb24gb2Yg
dGhlIGVtcHR5IGxpbmUuCi0gICAgcmV0dXJuIGhhc0FueVBsYWluVGV4dCh7ICpzdGFydCwgKmVu
ZCB9KSA/IGVuZE9mU2VudGVuY2UobmV4dFBvc2l0aW9uKSA6IG5leHRQb3NpdGlvbjsKKyAgICBy
ZXR1cm4gaGFzQW55UGxhaW5UZXh0KCpyYW5nZSkgPyBlbmRPZlNlbnRlbmNlKG5leHRQb3NpdGlv
bikgOiBuZXh0UG9zaXRpb247CiB9CiAKIFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpwcmV2aW91c1NlbnRlbmNlU3RhcnRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHBvc2l0aW9uKSBjb25zdApAQCAtMTQ1MCwxNSArMTQzNCwxMiBAQCBWaXNpYmxlUG9zaXRpb24g
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3Qg
VmlzaWJsZQogCiAgICAgLy8gTWFrZSBzdXJlIHdlIG1vdmUgb2ZmIG9mIGEgc2VudGVuY2Ugc3Rh
cnQuCiAgICAgYXV0byBwcmV2aW91c1Bvc2l0aW9uID0gcG9zaXRpb24ucHJldmlvdXMoKTsKLSAg
ICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZkxpbmUocHJldmlvdXNQb3Np
dGlvbikpOwotICAgIGlmICghc3RhcnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBl
bmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZkxpbmUocHJldmlvdXNQb3NpdGlvbikpOwotICAg
IGlmICghZW5kKQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZkxpbmUo
cHJldmlvdXNQb3NpdGlvbiksIGVuZE9mTGluZShwcmV2aW91c1Bvc2l0aW9uKSk7CisgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIFRyZWF0IGVtcHR5IGxpbmUg
YXMgYSBzZXBhcmF0ZSBzZW50ZW5jZS4KLSAgICByZXR1cm4gaGFzQW55UGxhaW5UZXh0KHsgKnN0
YXJ0LCAqZW5kIH0pID8gc3RhcnRPZlNlbnRlbmNlKHByZXZpb3VzUG9zaXRpb24pIDogcHJldmlv
dXNQb3NpdGlvbjsKKyAgICByZXR1cm4gaGFzQW55UGxhaW5UZXh0KCpyYW5nZSkgPyBzdGFydE9m
U2VudGVuY2UocHJldmlvdXNQb3NpdGlvbikgOiBwcmV2aW91c1Bvc2l0aW9uOwogfQogCiBWaXNp
YmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eU9iamVjdDo6bmV4dFBhcmFncmFwaEVuZFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFj
ZS5oCmluZGV4IGRjNjU0ZmMyYjEyYTQ4NzM4ODRmNjFiZDViNjcxOTVlYjkzOTczODAuLjQ1Y2Q4
ZWE5NGZhZDJkZGI5ODg1N2RhMWY2NjE1NTcxMjBmZDUxNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFj
ZS5oCkBAIC00MzAsMjQgKzQzMCw2IEBAIGVudW0gY2xhc3MgQWNjZXNzaWJpbGl0eVZpc2libGVQ
b3NpdGlvbkZvckJvdW5kcyB7CiAgICAgTGFzdCwKIH07CiAKLXN0cnVjdCBWaXNpYmxlUG9zaXRp
b25SYW5nZSB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0OwotICAgIFZpc2libGVQb3NpdGlv
biBlbmQ7Ci0KLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSgpID0gZGVmYXVsdDsKLSAgICBWaXNp
YmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHMsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgZSkKLSAgICAgICAgOiBzdGFydChzKQotICAgICAgICAsIGVuZChlKQotICAgIHsg
fQotCi0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQotICAgICAgICA6IHN0YXJ0KHNlbGVjdGlvbi5zdGFydCgpKQotICAgICAgICAsIGVu
ZChzZWxlY3Rpb24uZW5kKCkpCi0gICAgeyB9Ci0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKTsgfQotfTsKLQogZW51bSBjbGFz
cyBBY2Nlc3NpYmlsaXR5TWF0aFNjcmlwdE9iamVjdFR5cGUgeyBTdWJzY3JpcHQsIFN1cGVyc2Ny
aXB0IH07CiBlbnVtIGNsYXNzIEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRPYmplY3RUeXBl
IHsgUHJlU3Vic2NyaXB0LCBQcmVTdXBlcnNjcmlwdCwgUG9zdFN1YnNjcmlwdCwgUG9zdFN1cGVy
c2NyaXB0IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGJiNGJhMGQ4NzgyM2NkMmY4MDIz
ODkwNzE3NWEyZDkxYTAxYWI4ZTcuLjQ0ODYyYWI2YTJlYmJmMjdhOGVhZjVlYzQ2ZDcwNThkM2Ez
MWNhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtNjQ5LDEyICs2NDksOSBAQCBTdHJpbmcg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5
VGV4dFVuZGVyRWxlbWVudAogICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGRSZW5kZXJlciAmJiBm
aXJzdENoaWxkUmVuZGVyZXItPm5vZGUoKSAmJiBsYXN0Q2hpbGRSZW5kZXJlciAmJiBsYXN0Q2hp
bGRSZW5kZXJlci0+bm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgZGVmaW5lIHRoZSBz
dGFydCBhbmQgZW5kIHBvc2l0aW9ucyBmb3IgdGhlIHJhbmdlIGFzIHRoZSBvbmVzIHJpZ2h0IGJl
Zm9yZSBhbmQgYWZ0ZXIKICAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0
IG5vZGVzIGluIHRoZSBET00gdHJlZSB0aGF0IGlzIHdyYXBwZWQgaW5zaWRlIHRoZSBhbm9ueW1v
dXMgYmxvY2suCi0gICAgICAgICAgICAgICAgTm9kZSogZmlyc3ROb2RlSW5CbG9jayA9IGZpcnN0
Q2hpbGRSZW5kZXJlci0+bm9kZSgpOwotICAgICAgICAgICAgICAgIFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24gPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShmaXJzdE5vZGVJbkJsb2NrKTsKLSAg
ICAgICAgICAgICAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IHBvc2l0aW9uSW5QYXJlbnRBZnRl
ck5vZGUobGFzdENoaWxkUmVuZGVyZXItPm5vZGUoKSk7Ci0KLSAgICAgICAgICAgICAgICBub2Rl
RG9jdW1lbnQgPSAmZmlyc3ROb2RlSW5CbG9jay0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgICAg
ICB0ZXh0UmFuZ2UgPSB7IHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH0gfTsKKyAgICAgICAgICAgICAgICBhdXRvJiBm
aXJzdE5vZGVJbkJsb2NrID0gKmZpcnN0Q2hpbGRSZW5kZXJlci0+bm9kZSgpOworICAgICAgICAg
ICAgICAgIG5vZGVEb2N1bWVudCA9ICZmaXJzdE5vZGVJbkJsb2NrLmRvY3VtZW50KCk7CisgICAg
ICAgICAgICAgICAgdGV4dFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uSW5QYXJlbnRC
ZWZvcmVOb2RlKCZmaXJzdE5vZGVJbkJsb2NrKSwgcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShs
YXN0Q2hpbGRSZW5kZXJlci0+bm9kZSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApA
QCAtOTE3LDcgKzkxNCw3IEBAIEludFBvaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omxp
bmtDbGlja1BvaW50KCkKICAgICAgICAgYXV0byBzdGFydCA9IFZpc2libGVQb3NpdGlvbiB7IGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpIH07CiAgICAgICAgIGF1dG8g
ZW5kID0gbmV4dFZpc2libGVQb3NpdGlvbihzdGFydCk7CiAgICAgICAgIGlmICghZW5kLmlzTnVs
bCgpICYmIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbnRhaW5zKGVuZCkpCi0gICAgICAgICAg
ICByZXR1cm4geyBib3VuZHNGb3JSYW5nZSh7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICpt
YWtlQm91bmRhcnlQb2ludChlbmQpIH0pLmNlbnRlcigpIH07CisgICAgICAgICAgICByZXR1cm4g
eyBib3VuZHNGb3JSYW5nZSgqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpKS5jZW50ZXIoKSB9
OwogICAgIH0KICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCgpOwog
fQpAQCAtOTM1LDkgKzkzMiw3IEBAIEludFBvaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmNsaWNrUG9pbnQoKQogICAgIGlmICghaXNXZWJBcmVhKCkgfHwgIWNhblNldFZhbHVlQXR0cmli
dXRlKCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGlja1BvaW50KCk7
CiAgICAgCi0gICAgVmlzaWJsZVNlbGVjdGlvbiB2aXNTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsK
LSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5nZSA9IFZpc2libGVQb3NpdGlvblJhbmdlKHZp
c1NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgdmlzU2VsZWN0aW9uLnZpc2libGVFbmQoKSk7Ci0g
ICAgcmV0dXJuIGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHJhbmdlKS5jZW50ZXIoKTsK
KyAgICByZXR1cm4gYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc2VsZWN0aW9uKCkpLmNl
bnRlcigpOwogfQogICAgIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aW50ZXJuYWxMaW5rRWxlbWVudCgpIGNvbnN0CkBAIC0xOTkwLDcgKzE5ODUsNiBA
QCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxl
UG9zaXRpb25SYW5nZSgpIGNvbnN0CiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKICAgICAKLSAgICAvLyBjb25zdHJ1Y3QgVmlzaWJs
ZVBvc2l0aW9ucyBmb3Igc3RhcnQgYW5kIGVuZAogICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVy
LT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
UmFuZ2UoKTsKQEAgLTIwMDgsNyArMjAwMiw3IEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3QKICAgICAg
ICAgICAgIGVuZFBvcyA9IHN0YXJ0UG9zOwogICAgIH0KIAotICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb25SYW5nZShzdGFydFBvcywgZW5kUG9zKTsKKyAgICByZXR1cm4geyBXVEZNb3ZlKHN0YXJ0
UG9zKSwgV1RGTW92ZShlbmRQb3MpIH07CiB9CiAKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25l
ZCBsaW5lQ291bnQpIGNvbnN0CkBAIC0yMDM4LDcgKzIwMzIsNyBAQCBWaXNpYmxlUG9zaXRpb25S
YW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxp
bmUodW5zaQogICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbih2aXNp
YmxlUG9zKSk7CiAgICAgc2VsZWN0aW9uLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bkV4dGVuZCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpSaWdodCwgVGV4dEdyYW51bGFyaXR5OjpMaW5l
Qm91bmRhcnkpOwogICAgIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShzZWxlY3Rp
b24uc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIHNlbGVjdGlvbi5zZWxlY3Rpb24oKS52aXNp
YmxlRW5kKCkpOworICAgIHJldHVybiBzZWxlY3Rpb24uc2VsZWN0aW9uKCk7CiB9CiAgICAgCiBW
aXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9u
Rm9ySW5kZXgoaW50IGluZGV4KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQppbmRleCBlNDRjYjRiN2VhNjVkOTNlNTEzOThkMjVlMjRjNTRkMWFhZDMxZGQwLi5j
MzYxYzQwMTFmNzQ3ZTA5NDQ2NDg2NGYzZmNhNDE3ODI3OGY1ZGIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtNjYsNiArNjYsNyBAQAogI2ltcG9ydCAiUGFn
ZS5oIgogI2ltcG9ydCAiUGx1Z2luRG9jdW1lbnQuaCIKICNpbXBvcnQgIlBsdWdpblZpZXdCYXNl
LmgiCisjaW1wb3J0ICJSYW5nZS5oIgogI2ltcG9ydCAiUmVuZGVySW5saW5lLmgiCiAjaW1wb3J0
ICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgpAQCAtOTIzLDI5
ICs5MjQsMjUgQEAgLSAoaWQpdGV4dE1hcmtlckZvckZpcnN0UG9zaXRpb25JblRleHRDb250cm9s
OihIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCAmKXRleHQKIHN0YXRpYyBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoZSwgQ0ZU
eXBlUmVmIHRleHRNYXJrZXIpCiB7CiAgICAgQVNTRVJUKGNhY2hlKTsKLSAgICAKICAgICBpZiAo
IXRleHRNYXJrZXIpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICBUZXh0
TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKICAgICBpZiAoIWdldEJ5dGVzRnJvbUFYVGV4dE1h
cmtlcih0ZXh0TWFya2VyLCAmdGV4dE1hcmtlckRhdGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkp
KQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgCiAgICAgcmV0dXJuIGNh
Y2hlLT52aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyRGF0YSh0ZXh0TWFya2VyRGF0YSk7CiB9
CiAKLS0gKFZpc2libGVQb3NpdGlvbil2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOihpZCl0
ZXh0TWFya2VyCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFu
Z2VGb3JUZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGlkIHRleHRNYXJrZXJS
YW5nZSkKIHsKLSAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihzZWxmLmF4
QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCAoX19icmlkZ2UgQ0ZUeXBlUmVmKXRleHRN
YXJrZXIpOworICAgIHJldHVybiB7CisgICAgICAgIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJr
ZXIoY2FjaGUsIChfX2JyaWRnZSBDRlR5cGVSZWYpQVhUZXh0TWFya2VyUmFuZ2VTdGFydCh0ZXh0
TWFya2VyUmFuZ2UpKSwKKyAgICAgICAgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNo
ZSwgKF9fYnJpZGdlIENGVHlwZVJlZilBWFRleHRNYXJrZXJSYW5nZUVuZCh0ZXh0TWFya2VyUmFu
Z2UpKQorICAgIH07CiB9CiAKLXN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9u
Rm9yU3RhcnRPZlRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgaWQgdGV4dE1h
cmtlclJhbmdlKQotewotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNh
Y2hlLCAoX19icmlkZ2UgQ0ZUeXBlUmVmKUFYVGV4dE1hcmtlclJhbmdlU3RhcnQodGV4dE1hcmtl
clJhbmdlKSk7Ci19Ci0KLXN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9y
RW5kT2ZUZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGlkIHRleHRNYXJrZXJS
YW5nZSkKKy0gKFZpc2libGVQb3NpdGlvbil2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOihp
ZCl0ZXh0TWFya2VyCiB7Ci0gICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIo
Y2FjaGUsIChfX2JyaWRnZSBDRlR5cGVSZWYpQVhUZXh0TWFya2VyUmFuZ2VFbmQodGV4dE1hcmtl
clJhbmdlKSk7CisgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgKF9fYnJpZGdlIENGVHlwZVJlZil0ZXh0
TWFya2VyKTsKIH0KIAogLy8gV2hlbiBtb2RpZnlpbmcgYXR0cmlidXRlZCBzdHJpbmdzLCB0aGUg
cmFuZ2UgY2FuIGNvbWUgZnJvbSBhIHNvdXJjZSB3aGljaCBtYXkgcHJvdmlkZSBmYXVsdHkgaW5m
b3JtYXRpb24gKGUuZy4gdGhlIHNwZWxsIGNoZWNrZXIpLgpAQCAtMTg0NywxMCArMTg0NCw3IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAtIChWaXNpYmxlUG9zaXRp
b25SYW5nZSl2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTooaWQpdGV4dE1h
cmtlclJhbmdlCiB7Ci0gICAgaWYgKCF0ZXh0TWFya2VyUmFuZ2UpCi0gICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZSgpOwotICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRPZlRleHRNYXJrZXJSYW5nZShjYWNoZSwg
dGV4dE1hcmtlclJhbmdlKSwgdmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2Uo
Y2FjaGUsIHRleHRNYXJrZXJSYW5nZSkpOworICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25SYW5n
ZUZvclRleHRNYXJrZXJSYW5nZShzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgp
LCB0ZXh0TWFya2VyUmFuZ2UpOwogfQogCiAtIChOU0FycmF5KilyZW5kZXJXaWRnZXRDaGlsZHJl
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggM2Q3NDJlNzE5ZDg1MGM3MmU3OTkxZmY1NzRm
MmYzOTg0M2I4M2ExZC4uYjY1ZmU5YzM5MDYzNDUzMjQ5NWQ1NjAyY2ZkYzU2ZDJlZWI2MzExNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xNjMsNiArMTYzLDcgQEAKICNpbmNsdWRlICJQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJQdWJsaWNTdWZmaXguaCIKICNpbmNs
dWRlICJRdWlya3MuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNjllNWE5YmE2OTE0NjZi
NjEwYWY5ZWRiYjM0MDI4YzM5MTQ0MTIxYy4uYzU2NjBmY2JlYzFlNmVlYmJlODVmNTczYzQ0Zjg0
MjQ3NzMzZGYwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtNTksNyArNTksNiBAQAogI2luY2x1ZGUg
Ik5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgog
I2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUg
IlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dENvbnRyb2wuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKaW5kZXggMmMyZDZhMjI2MTZmNGIyMmJh
ZDkyNjc5MTE2ZGNlYTU3OTY0YjBlZC4uYmI5OTMwOGRmY2Y0NTZhNjk4ODM0ZDU3Y2UxNzMzMDFm
YzM3OTMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgUmVu
ZGVyRWxlbWVudDsKIGNsYXNzIFRleHQ7CiAKIHN0cnVjdCBCb3VuZGFyeVBvaW50Oworc3RydWN0
IFNpbXBsZVJhbmdlOwogCiBlbnVtIFBvc2l0aW9uTW92ZVR5cGUgewogICAgIENvZGVQb2ludCwg
ICAgICAgLy8gTW92ZSBieSBhIHNpbmdsZSBjb2RlIHBvaW50LgpAQCAtMjQ5LDYgKzI1MCwxMyBA
QCBSZWZQdHI8Tm9kZT4gY29tbW9uU2hhZG93SW5jbHVkaW5nQW5jZXN0b3IoY29uc3QgUG9zaXRp
b24mLCBjb25zdCBQb3NpdGlvbiYpOwogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgY29uc3QgUG9zaXRpb24mKTsKIAorc3RydWN0IFBvc2l0aW9uUmFuZ2Ug
eworICAgIFBvc2l0aW9uIHN0YXJ0OworICAgIFBvc2l0aW9uIGVuZDsKK307CisKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUG9zaXRpb25SYW5nZSYpOworCiAv
LyBpbmxpbmVzCiAKIGlubGluZSBQb3NpdGlvbiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
Tm9kZSogbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRv
bkdyb3Vwcy5jcHAKaW5kZXggY2ZiNTVmMzk4ODhjMTFjMmY4M2RjOTkxM2IwNWQwY2IxMDYxZDUw
ZS4uN2EyMGE1ZjM5MDY2NmUyMjYyZGMxYTQ1ODVjOTg4ODc5NWE0NDNlMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVk
ZSAiUmFkaW9CdXR0b25Hcm91cHMuaCIKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggMzczYjJjODdhNjNhNTg5Nzg0
NTNlYjY4NTEyMGNiNDdkZTUzOTU1OS4uZDMxMjI1NGRjZGJhMmY4NTI2MmZlMGYzNjE0NzBmM2Ez
NTFiNmNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAgLTE3Niw3ICsxNzYsNyBAQCBXRUJDT1JFX0VYUE9S
VCBSZWY8UmFuZ2U+IHJhbmdlT2ZDb250ZW50cyhOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBib29s
IGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7CiAKLVNp
bXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQg
U2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJik7CiBTaW1wbGVSYW5nZSBt
YWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5nZSopOwogV0VCQ09SRV9F
WFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8
UmFuZ2U+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCBlNzU1NDkwZGIwZjdj
ZTgxYmJjMjE3MGUzODVmY2FjZGUwYzZhMjU5Li5kYmI3ZDM0NDZhOWQ2ZjkwYmNjMzdiZjliNDZk
Y2FjZTdhOGFmMmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTgyLDYgKzgy
LDIxIEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUm
IG5vZGUpCiAgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgeyAqcGFyZW50LCBvZmZzZXQgfSwgeyAq
cGFyZW50LCBvZmZzZXQgKyAxIH0gfTsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VT
aW1wbGVSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgcG9pbnQpCit7CisgICAg
aWYgKCFwb2ludCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7
ICpwb2ludCwgKnBvaW50IH0gfTsKK30KKworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1w
bGVSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmIHBvaW50KQoreworICAgIGlmICghcG9p
bnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBlbmQgPSAqcG9pbnQ7
CisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpwb2ludCksIFdURk1vdmUoZW5kKSB9IH07Cit9CisK
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91
bmRhcnlQb2ludD4mIHN0YXJ0LCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYgZW5kKQog
ewogICAgIGlmICghc3RhcnQgfHwgIWVuZCkKQEAgLTE1MSw0ICsxNjYsOSBAQCB2b2lkIEludGVy
c2VjdGluZ05vZGVJdGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQogICAgIH0KIH0K
IAorUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3Rh
cnQuY29udGFpbmVyLCByYW5nZS5lbmQuY29udGFpbmVyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2lt
cGxlUmFuZ2UuaAppbmRleCAwY2UwYmExOGU0ZGM3ZTQ4MmQyYTY1NTA1M2E1ZDc4NDQyN2IwYWE0
Li5mYTZhZjU0NGIzNzEzMjU3ODYxYzgyNTJiMGFlNWY4YmFjYmYxNGExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuaApAQCAtNTEsMTMgKzUxLDMzIEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAg
ICAgU2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogfTsKIAorU2ltcGxlUmFuZ2UgbWFr
ZVNpbXBsZVJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKK1NpbXBsZVJhbmdlIG1ha2VTaW1w
bGVSYW5nZShCb3VuZGFyeVBvaW50JiYpOworU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNv
bnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CitTaW1wbGVSYW5nZSBt
YWtlU2ltcGxlUmFuZ2UoQm91bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOworT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBv
aW50PiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVS
YW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2lu
dD4mLCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50
PiYmLCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmKTsKIAoraW5saW5lIEJvdW5kYXJ5UG9pbnQg
bWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQpIHsgcmV0
dXJuIHBvaW50OyB9CitpbmxpbmUgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEhlbHBl
cihCb3VuZGFyeVBvaW50JiYgcG9pbnQpIHsgcmV0dXJuIFdURk1vdmUocG9pbnQpOyB9Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBhdXRvIG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKFQmJiBhcmd1bWVu
dCkgLT4gZGVjbHR5cGUobWFrZUJvdW5kYXJ5UG9pbnQoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50
KSkpCit7CisgICAgcmV0dXJuIG1ha2VCb3VuZGFyeVBvaW50KHN0ZDo6Zm9yd2FyZDxUPihhcmd1
bWVudCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5UPiBhdXRvIG1ha2VTaW1wbGVSYW5n
ZShUJiYgLi4uYXJndW1lbnRzKSAtPiBkZWNsdHlwZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5k
YXJ5UG9pbnRIZWxwZXIoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50cykpLi4uKSkKK3sKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBvaW50SGVscGVyKHN0ZDo6Zm9yd2Fy
ZDxUPihhcmd1bWVudHMpKS4uLik7Cit9CisKIC8vIEZJWE1FOiBXb3VsZCBsaWtlIHRoZXNlIHRv
IGhhdmUgc2hvcnRlciBuYW1lczsgYW5vdGhlciBvcHRpb24gaXMgdG8gY2hhbmdlIHByZWZpeCB0
byBtYWtlU2ltcGxlUmFuZ2UuCiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4g
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5n
ZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCitSZWZQdHI8Tm9kZT4g
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKwogYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogY2xhc3Mg
SW50ZXJzZWN0aW5nTm9kZVJhbmdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0
YXRpY1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAKaW5kZXgg
OGE0ODQzYjFkMjYyZmRjYmVlM2M3OTAyMjAxMGY2YzliOTY5MzFiMC4uN2UwOTRhOWE3OThlNmJi
ODE1NjY1MjQ0YzcyY2NiMDM3YzZhZGQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1N0YXRpY1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3Bw
CkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiU3RhdGljUmFuZ2UuaCIKIAogI2luY2x1ZGUg
IkNvbnRhaW5lck5vZGUuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlRleHQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggMjljNDk3ZTEwOTY0ZGYwOTA1ODhi
YTQ2YjlkYThlZDEwM2FjNTU0My4uMmIzM2ZlNWMwYWE4ZGY4NWU3ZjcyZGMzYjAwYjZkNWExYjMx
MWNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwCkBAIC00NzIsMTUgKzQ3MiwxNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0
aW9uQQogICAgIGlmIChlbmRPZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlv
bikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9
IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHByZWNlZGluZ0NoYXJhY3RlclBvc2l0
aW9uKSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZE9mU2VsZWN0aW9uKSB9OwotICAgIFN0cmluZyBz
dHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UpOworICAgIGF1dG8gcHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVy
UG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsKKyAgICBpZiAoIXByZWNlZGluZ0NoYXJhY3RlclJh
bmdlKQorICAgICAgICByZXR1cm47CisgICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dCgqcHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UpOwogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXBy
ZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXJrIHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0
ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJlY3Rpb24gZm9sbG93aW5nIHRoaXMKICAgICAv
LyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3Jk
IGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCiAgICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQg
YWdhaW4uCi0gICAgYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0
ZWRBdXRvY29ycmVjdGlvbik7CisgICAgYWRkTWFya2VyKCpwcmVjZWRpbmdDaGFyYWN0ZXJSYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmlu
Z0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24pOwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29u
c3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVdp
dGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCkBAIC00OTgs
MTAgKzUwMCwxMSBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJr
ZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVAogICAgIGlmIChtYXJrZXJzLmhh
c01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpBY2NlcHRlZENh
bmRpZGF0ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gYmVmb3JlUHJlY2Vk
aW5nQ2hhcmFjdGVyID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVy
bmF0aXZlLnN0YXJ0KS5wcmV2aW91cygpOwotICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFu
Z2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChiZWZvcmVQcmVjZWRpbmdDaGFy
YWN0ZXIpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFydCB9OworICAgIGF1dG8gcHJlY2VkaW5n
Q2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0KS5wcmV2aW91cygpLCByYW5nZVdpdGhBbHRl
cm5hdGl2ZS5zdGFydCk7CisgICAgaWYgKCFwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChhdXRvJiBtYXJrZXIgOiBtYXJrZXJzLm1hcmtl
cnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uKSkgeworICAgIGZvciAoYXV0byYgbWFya2VyIDogbWFya2Vycy5tYXJr
ZXJzSW5SYW5nZSgqcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxl
dGVkQXV0b2NvcnJlY3Rpb24pKSB7CiAgICAgICAgIGlmIChtYXJrZXItPmRlc2NyaXB0aW9uKCkg
PT0gc3RyaW5nVG9CZVJlcGxhY2VkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggNGY0
OTk2OTlhZGUxY2EyMjRlYzQ3NDNhOTk0YjA5NTRlMDIxZTRlZC4uNWVkYzFlNzI0NzhiYzBhZDVk
ZmZmOTQ1MTdhMzEwODhjZjU3Njc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAKQEAgLTI0MSwxOCArMjQxLDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogICAgIC8vIFNhdmUg
YW5kIHJlc3RvcmUgdGhlIHNlbGVjdGlvbiBlbmRwb2ludHMgdXNpbmcgdGhlaXIgaW5kaWNlcyBp
biB0aGUgZWRpdGFibGUgcm9vdCwgc2luY2UKICAgICAvLyBhZGRCbG9ja1N0eWxlSWZOZWVkZWQg
bWF5IG1vdmVQYXJhZ3JhcGhzLCB3aGljaCBjYW4gcmVtb3ZlIHRoZXNlIGVuZHBvaW50cy4KICAg
ICAvLyBDYWxjdWxhdGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzIGZyb20gdGhlIHN0YXJ0IG9mIHRo
ZSB0cmVlIHRoYXQgdGhleSdyZSBpbi4KLSAgICBhdXRvIHNjb3BlID0gbWFrZVJlZlB0cihoaWdo
ZXN0RWRpdGFibGVSb290KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSk7Ci0gICAgaWYg
KCFzY29wZSkKKyAgICBhdXRvIHNjb3BlUm9vdCA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxl
Um9vdCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkpOworICAgIGlmICghc2NvcGVSb290
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNjb3BlU3RhcnQgPSBCb3VuZGFyeVBvaW50
IHsgKnNjb3BlLCAwIH07Ci0gICAgYXV0byBzdGFydEJvdW5kYXJ5UG9pbnQgPSBtYWtlQm91bmRh
cnlQb2ludCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKSk7Ci0gICAgYXV0byBlbmRCb3VuZGFyeVBvaW50ID0gbWFrZUJvdW5kYXJ5UG9pbnQo
dmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsK
LSAgICBpZiAoIXN0YXJ0Qm91bmRhcnlQb2ludCB8fCAhZW5kQm91bmRhcnlQb2ludCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBzdGFydEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBzY29w
ZVN0YXJ0LCAqc3RhcnRCb3VuZGFyeVBvaW50IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVy
c0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKLSAgICBhdXRvIGVuZEluZGV4ID0gY2hhcmFj
dGVyQ291bnQoeyBzY29wZVN0YXJ0LCAqZW5kQm91bmRhcnlQb2ludCB9LCBUZXh0SXRlcmF0b3JF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgYXV0byBzY29w
ZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqc2NvcGVSb290KTsKKyAgICBhdXRv
IHJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZSh2aXNpYmxlU3RhcnQsIHZpc2libGVFbmQpOworICAg
IGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGUuc3RhcnQsIHJhbmdlLnN0
YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zKTsKKyAgICBhdXRvIGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBzY29wZS5zdGFydCwg
cmFuZ2UuZW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxl
UG9zaXRpb25zKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydChzdGFydE9m
UGFyYWdyYXBoKHZpc2libGVTdGFydCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UGFyYWdy
YXBoU3RhcnQoZW5kT2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RhcnQpLm5leHQoKSk7CkBAIC0yODMs
OCArMjc5LDggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKEVkaXRp
bmdTdHlsZSYgc3R5bGUpCiAgICAgICAgIG5leHRQYXJhZ3JhcGhTdGFydCA9IGVuZE9mUGFyYWdy
YXBoKHBhcmFncmFwaFN0YXJ0KS5uZXh0KCk7CiAgICAgfQogICAgIAotICAgIGF1dG8gc3RhcnRQ
b3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZXNvbHZlQ2hhcmFjdGVyTG9j
YXRpb24obWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpzY29wZSksIHN0YXJ0SW5kZXgs
IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKSk7
Ci0gICAgYXV0byBlbmRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZXNv
bHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpzY29w
ZSksIGVuZEluZGV4LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJs
ZVBvc2l0aW9ucykpOworICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihyZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24oc2NvcGUsIHN0YXJ0SW5kZXgsIFRl
eHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKSk7Cisg
ICAgYXV0byBlbmRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZXNvbHZl
Q2hhcmFjdGVyTG9jYXRpb24oc2NvcGUsIGVuZEluZGV4LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJh
Y3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucykpOwogICAgIHVwZGF0ZVN0YXJ0RW5kKHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCA2ZmIxMmZkODNhOWVmY2ZkY2RmY2Zh
YTQ2OGNhZTA4MDRkZTQ1MDdhLi4xYzdmZDE0MWVlMTNiNzE3NmM1MzM2YTdkNWE3YWY4ZDI3OWQ4
OGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRpYyBTdHJpbmcgc3RyaW5nRm9yVmlzaWJsZVBv
c2l0aW9uSW5kZXhSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25JbmRleFJhbmdlCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSB2aXNpYmxlUG9z
aXRpb25Gb3JJbmRleChyYW5nZS5zdGFydEluZGV4LnZhbHVlLCByYW5nZS5zdGFydEluZGV4LnNj
b3BlLmdldCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gdmlzaWJsZVBvc2l0aW9uRm9y
SW5kZXgocmFuZ2UuZW5kSW5kZXgudmFsdWUsIHJhbmdlLmVuZEluZGV4LnNjb3BlLmdldCgpKTsK
LSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9u
UmFuZ2UoVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnQsIGVuZCkpOworICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSh7IFdURk1vdmUo
c3RhcnQpLCBXVEZNb3ZlKGVuZCkgfSk7CiB9CiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5VW5kb1Jl
cGxhY2VkVGV4dDo6dGV4dERlbGV0ZWRCeVVuYXBwbHkoKQpAQCAtMTQyMCwxOCArMTQyMCwxNCBA
QCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdGFy
dEluZGV4ID0gMDsKICAgICAgICAgICAgIGlmIChzdGFydEluUGFyYWdyYXBoKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQ
YXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KSk7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpKTsKLSAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uU3Rh
cnQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICpw
YXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFj
dGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0
byByYW5nZVRvU2VsZWN0aW9uU3RhcnQgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFncmFw
aFRvTW92ZSwgdmlzaWJsZVN0YXJ0KSkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9
IGNoYXJhY3RlckNvdW50KCpyYW5nZVRvU2VsZWN0aW9uU3RhcnQsIFRleHRJdGVyYXRvckVtaXRz
Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgZW5kSW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKGVuZEluUGFyYWdyYXBo
KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBtYWtl
Qm91bmRhcnlQb2ludCh2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRF
cXVpdmFsZW50KCkpOwotICAgICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGhTdGFydCAmJiBzZWxl
Y3Rpb25FbmQpCi0gICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQo
eyAqcGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25FbmQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFy
YWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOworICAgICAgICAgICAgICAgIGlmIChh
dXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFncmFw
aFRvTW92ZSwgdmlzaWJsZUVuZCkpCisgICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gY2hh
cmFjdGVyQ291bnQoKnJhbmdlVG9TZWxlY3Rpb25FbmQsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFj
dGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTE1MDQsNyArMTUwMCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAg
ICAgaWYgKCFlZGl0YWJsZVJvb3QpCiAgICAgICAgIGVkaXRhYmxlUm9vdCA9ICZkb2N1bWVudCgp
OwogCi0gICAgYXV0byBkZXN0aW5hdGlvbkluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyB7ICplZGl0
YWJsZVJvb3QsIDAgfSwgKm1ha2VCb3VuZGFyeVBvaW50KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFs
ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hh
cmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9u
SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7IHsgKmVkaXRhYmxlUm9vdCwgMCB9LCAqbWFrZUJvdW5k
YXJ5UG9pbnQoZGVzdGluYXRpb24pIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdl
ZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxl
U2VsZWN0aW9uKGRlc3RpbmF0aW9uLCBvcmlnaW5hbElzRGlyZWN0aW9uYWwpKTsKICAgICBBU1NF
UlQoZW5kaW5nU2VsZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2UoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA4NzBjNGRiYjY4
ZDM4MGY5YTFiODFhMGMwZTVmMTNhYTMyNzRhNGZjLi5mNjVkZjQ0OTY4N2QzZjUzMzI5NTdmZjg0
ODE0ZmRjN2VmNzg2YjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJIVE1MU3R5
bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxl
Q2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJlZERvY3Vt
ZW50TWFya2VyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBhNzg3ZGZhYWYx
YzUxMjg5NmY2ZTdiYjE3NjVlYTM0ODNkZDE1Mjg0Li5iYTZjY2NmMDcxNjNjMzgzZDY1NDczYWFi
ZmQ5ZTEzOGE1NzVhYWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTExMDQs
MjcgKzExMDQsMTUgQEAgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBSZWZQdHI8Q29udGEKICAgICAgICAgICAgIHNjb3Bl
ID0gJmRvY3VtZW50OwogICAgIH0KIAotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2lu
dChmaXJzdFBvc2l0aW9uSW5Ob2RlKHNjb3BlLmdldCgpKSk7Ci0gICAgaWYgKCFzdGFydCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlv
bi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFlbmQpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgKnN0YXJ0LCAqZW5kIH0sIFRl
eHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAg
ICBhdXRvIHJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5v
ZGVDb250ZW50cygqc2NvcGUpLCBwb3NpdGlvbik7CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50
KHJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0
aW9ucyk7CiB9CiAKIC8vIEZJWE1FOiBNZXJnZSB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIG9uZSBh
Ym92ZS4KIGludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihOb2RlJiBub2RlLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgYm9vbCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRp
b24pCiB7Ci0gICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGZpcnN0UG9zaXRpb25J
bk5vZGUoJm5vZGUpKTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBh
dXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVu
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIWVuZCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSwg
Zm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uID8gVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0
d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgOiBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOwor
ICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVO
b2RlQ29udGVudHMobm9kZSksIHZpc2libGVQb3NpdGlvbik7CisgICAgcmV0dXJuIHJhbmdlID8g
Y2hhcmFjdGVyQ291bnQoKnJhbmdlLCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24gPyBUZXh0SXRl
cmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVy
YXRvckRlZmF1bHRCZWhhdmlvcikgOiAwOwogfQogCiBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
c2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRp
b24sIGludCBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggZTg3Yjg5NGEz
Yjk2MzA1YmI1ZjY2ZTg1YWFhZjRmNzk1NjM2NTRiMS4uNzdlZDY4MDkzN2IwZjg1ZDVhYTdkNTFh
ZTkyODgxMGE0YWU5ZTQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMzI1OSwx
MiArMzI1OSw4IEBAIFN0cmluZyBFZGl0b3I6OnNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2Zlcigp
IGNvbnN0CiBTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3Ig
YmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgLy8gV2UgcmVtb3ZlICdcMCcgY2hhcmFjdGVycyBiZWNh
dXNlIHRoZXkgYXJlIG5vdCB2aXNpYmx5IHJlbmRlcmVkIHRvIHRoZSB1c2VyLgotICAgIGF1dG8m
IHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgYXV0
byBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpOwotICAgIGF1dG8gZW5kID0gc2VsZWN0aW9uLmVu
ZCgpOwotICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBzdGFydC5pc09ycGhhbigpIHx8IGVuZC5p
c051bGwoKSB8fCBlbmQuaXNPcnBoYW4oKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci0gICAgcmV0dXJuIHBsYWluVGV4dChTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChz
dGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpIH0sIGJlaGF2aW9yKS5yZXBsYWNlV2l0aExp
dGVyYWwoJ1wwJywgIiIpOworICAgIGF1dG8gcmFuZ2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHQo
KnJhbmdlLCBiZWhhdmlvcikucmVwbGFjZVdpdGhMaXRlcmFsKCdcMCcsICIiKSA6IGVtcHR5U3Ry
aW5nKCk7CiB9CiAKIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2Vy
dFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMzY4Miw3ICszNjc4LDcg
QEAgc3RhdGljIFNpbXBsZVJhbmdlIGV4dGVuZFNlbGVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIHVuc2lnbmVkIGNoYXJhY3RlcnMKICAgICAgICAgc3RhcnQgPSBzdGFydC5wcmV2aW91
cyhDaGFyYWN0ZXIpOwogICAgICAgICBlbmQgPSBlbmQubmV4dChDaGFyYWN0ZXIpOwogICAgIH0K
LSAgICByZXR1cm4geyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9p
bnQoZW5kKX07CisgICAgcmV0dXJuICptYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCk7CiB9CiAK
IHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCkBAIC0zOTA5
LDExICszOTA1LDcgQEAgU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgp
IGNvbnN0CiBPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5k
aWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQ
b2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSkpOwotICAgIGF1
dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2li
bGVFbmQoKSkpOwotICAgIGlmICghc3RhcnQgfHwgIWVuZCkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICByZXR1cm4geyB7ICpzdGFydCwgKmVuZCB9IH07CisgICAgcmV0dXJuIG1h
a2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSks
IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKIH0KIAogT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4
dENoZWNraW5nUmVzdWx0JiByZXN1bHQpIGNvbnN0CkBAIC00MjMxLDcgKzQyMjMsNyBAQCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKICAgICAv
LyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzZWxlY3Rpb24gdG8gaW5jbHVk
ZSB0aGUgYW5jaG9yIHRhZyBpdCdzIGluPyBXaG9ldmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5h
bGx5IGZvcmdvdCB0byBsZWF2ZSB1cyBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxl
LgogICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7Ci0g
ICAgICAgIGlmIChhdXRvIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFn
KGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2UtPnN0YXJ0
LmNvbnRhaW5lciwgcmFuZ2UtPmVuZC5jb250YWluZXIpLmdldCgpKSwgSFRNTE5hbWVzOjphVGFn
KSkgeworICAgICAgICBpZiAoYXV0byBlbmNsb3NpbmdBbmNob3IgPSBlbmNsb3NpbmdFbGVtZW50
V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpyYW5n
ZSkuZ2V0KCkpLCBIVE1MTmFtZXM6OmFUYWcpKSB7CiAgICAgICAgICAgICBpZiAoY29tcGFyZVBv
c2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUocmFuZ2UtPnN0YXJ0LmNvbnRhaW5l
ci5wdHIoKSksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpKSA+PSAw
KQogICAgICAgICAgICAgICAgIHJhbmdlLT5zdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50QmVmb3Jl
Tm9kZUNvbnRlbnRzKCplbmNsb3NpbmdBbmNob3IpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDRhNjNhZDgwYzUxZTExNzZlNGI5ODQy
MTU3NDJhNDkwMGFiNTdjNDcuLjBkMjhjY2RkYTA0MWRhNWY2MDJhZmVmNDBmMTgyZjAzYzc0MWFh
ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0yNjE4
LDM0ICsyNjE4LDYgQEAgVUNoYXIgRnJhbWVTZWxlY3Rpb246OmNoYXJhY3RlckFmdGVyQ2FyZXRT
ZWxlY3Rpb24oKSBjb25zdAogICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uY2hhcmFjdGVyQWZ0
ZXIoKTsKIH0KIAotaW50IEZyYW1lU2VsZWN0aW9uOjp3b3JkT2Zmc2V0SW5SYW5nZShjb25zdCBS
YW5nZSAqcmFuZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIC0x
OwotCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKLSAgICBp
ZiAoIXNlbGVjdGlvbi5pc0NhcmV0KCkpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIC8vIEZJ
WE1FOiBUaGlzIHdpbGwgb25seSB3b3JrIGluIGNhc2VzIHdoZXJlIHRoZSBzZWxlY3Rpb24gcmVt
YWlucyBpbgotICAgIC8vIHRoZSBzYW1lIG5vZGUgYWZ0ZXIgaXQgaXMgZXhwYW5kZWQuIEltcHJv
dmUgdG8gaGFuZGxlIG1vcmUgY29tcGxpY2F0ZWQKLSAgICAvLyBjYXNlcy4KLSAgICBpbnQgcmVz
dWx0ID0gc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAtIHJhbmdl
LT5zdGFydE9mZnNldCgpOwotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICByZXN1bHQgPSAw
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgRnJhbWVTZWxlY3Rpb246OnNwYWNlRm9s
bG93c1dvcmRJblJhbmdlKGNvbnN0IFJhbmdlICpyYW5nZSkgY29uc3QKLXsKLSAgICBpZiAoIXJh
bmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgTm9kZSYgbm9kZSA9IHJhbmdlLT5lbmRD
b250YWluZXIoKTsKLSAgICBpbnQgZW5kT2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOwotICAg
IFZpc2libGVQb3NpdGlvbiBwb3MoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKCZub2RlLCBl
bmRPZmZzZXQpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICByZXR1cm4gaXNTcGFjZU9yTmV3
bGluZShwb3MuY2hhcmFjdGVyQWZ0ZXIoKSk7Ci19Ci0KIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNl
bGVjdGlvbkF0RG9jdW1lbnRTdGFydCgpIGNvbnN0CiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKQEAgLTI2NjAsMTUgKzI2MzIsNiBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjpzZWxlY3Rpb25BdERvY3VtZW50U3RhcnQoKSBjb25zdAogICAgIHJldHVybiBp
c1N0YXJ0T2ZEb2N1bWVudChwb3MpOwogfQogCi1ib29sIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rp
b25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdAotewotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gbV9zZWxlY3Rpb247Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFjdHVhbFNlbGVjdGlvbkF0U2VudGVuY2VTdGFy
dChzZWxlY3Rpb24pOwotfQotCiBib29sIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25BdFdvcmRT
dGFydCgpIGNvbnN0CiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3NlbGVj
dGlvbjsKQEAgLTI4MzQsOSArMjc5NywxMiBAQCBWaXNpYmxlU2VsZWN0aW9uIEZyYW1lU2VsZWN0
aW9uOjp3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKGNvbnN0IFZpcwogICAg
IHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0VmlzaWJsZVBvcywgZW5kVmlzaWJsZVBvcyk7
ICAgIAogfQogCi1ib29sIEZyYW1lU2VsZWN0aW9uOjphY3R1YWxTZWxlY3Rpb25BdFNlbnRlbmNl
U3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsKSBjb25zdAorYm9vbCBGcmFtZVNlbGVj
dGlvbjo6c2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KCkgY29uc3QKIHsKLSAgICBQb3NpdGlvbiBz
dGFydFBvcyhzZWwuc3RhcnQoKSk7CisgICAgaWYgKG1fc2VsZWN0aW9uLmlzTm9uZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQb3NpdGlvbiBzdGFydFBvcyhtX3NlbGVjdGlvbi5z
dGFydCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgpLCBzdGFydFBvcy5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgaWYgKHBvcy5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5oCmluZGV4IGRhNDJlMGZmYWNjZWUxZGU1ZGU3ZmJhMjJlOWU5ZmQ4OTAzNDZhMmQuLjIxMWNh
OGJiMzZkODAyNmQ0YjJhMGIwZWUxYjYzYWNmYjk2N2JhZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTIzMiw4ICsyMzIsNiBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb24oaW50
IGFtb3VudCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVyQmVmb3Jl
Q2FyZXRTZWxlY3Rpb24oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0
ZXJBZnRlckNhcmV0U2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgaW50IHdv
cmRPZmZzZXRJblJhbmdlKGNvbnN0IFJhbmdlKikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBzcGFjZUZvbGxvd3NXb3JkSW5SYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCkgY29uc3Q7CiAgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdDsKICAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGlvbkF0V29yZFN0YXJ0KCkgY29uc3Q7CkBAIC0z
MzMsNyArMzMxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsK
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBhY3R1YWxTZWxlY3Rpb25BdFNl
bnRlbmNlU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OwogICAgIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9u
LCBpbnQgYW1vdW50KSBjb25zdDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggNGIyZjU0NTgyYTM2ODEyOTQwNWRmMjA5YWM5
ZmE4YzZiNjIwYzA2ZS4uOGZmZjRmNDE3MWIzNWQ5ZjQ4ZjAyNGY2MmQyNDY1NzQ5NmZlYmZkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKQEAgLTE2MCwxMCArMTYxLDEwIEBAIFNpbXBsZVJhbmdlIFRl
eHRDaGVja2luZ1BhcmFncmFwaDo6c3VicmFuZ2UoQ2hhcmFjdGVyUmFuZ2UgcmFuZ2UpIGNvbnN0
CiAKIEV4Y2VwdGlvbk9yPHVpbnQ2NF90PiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6Om9mZnNldFRv
KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKIHsKLSAgICBhdXRvIGVuZCA9IG1ha2VC
b3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKLSAgICBpZiAoIWVuZCkKKyAgICBhdXRvIHJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKHBhcmFncmFwaFJhbmdlKCkuc3RhcnQsIHBvc2l0aW9uKTsKKyAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07Ci0gICAg
cmV0dXJuIGNoYXJhY3RlckNvdW50KHsgcGFyYWdyYXBoUmFuZ2UoKS5zdGFydCwgKmVuZCB9KTsK
KyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoKnJhbmdlKTsKIH0KIAogYm9vbCBUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGg6OmlzRW1wdHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAppbmRleCA5NjlhN2MzOTNmMTMw
YzU0ZmRkMjkxZWVlOGRmOWQwZTA3MTI5ZTk2Li40MGM0NmE5OGVlZjdlZGM4YTYwMjhhNWU2YmRk
Njk4MDcwN2YwMmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyLmNwcApAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgIk5v
ZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQ
c2V1ZG9FbGVtZW50LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTY3JpcHREaXNh
bGxvd2VkU2NvcGUuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCkBAIC0xNTQsNyArMTUzLDcgQEAgc3RhdGljIGJvb2wgaXNOb3RTcGFjZShVQ2hhciBjaGFy
YWN0ZXIpCiBjbGFzcyBQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3IgewogcHVibGljOgogICAgIFBh
cmFncmFwaENvbnRlbnRJdGVyYXRvcihjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0
aW9uJiBlbmQpCi0gICAgICAgIDogbV9pdGVyYXRvcih7ICptYWtlQm91bmRhcnlQb2ludChzdGFy
dCksICptYWtlQm91bmRhcnlQb2ludChlbmQpIH0sIFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZp
c2liaWxpdHkpCisgICAgICAgIDogbV9pdGVyYXRvcigqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBl
bmQpLCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNpYmlsaXR5KQogICAgICAgICAsIG1fbm9k
ZShzdGFydC5maXJzdE5vZGUoKSkKICAgICAgICAgLCBtX3Bhc3RFbmROb2RlKGVuZC5maXJzdE5v
ZGUoKSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRl
eCBhZjVlYjFiN2U2YzQxZWQxMGQ0YTZjOGQwM2E1YWVlNDNhMDczYmFiLi5kMDE1MTAyYTYwOWZm
YWVkMjYxMmFmMmU3OWMzYjlmZWRkNWYxOWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlw
aW5nQ29tbWFuZC5jcHAKQEAgLTMzMiw4ICszMzIsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OnBv
c3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JEZWxldGlvbihjb25zdCBWaXNpYmxlU2Vs
ZQogICAgICAgICByZXR1cm47CiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihB
WFRleHRFZGl0VHlwZURlbGV0ZSwgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJs
ZVBvc2l0aW9uUmFuZ2Uoc2VsZWN0aW9uKSwgc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIFZpc2li
bGVQb3NpdGlvbkluZGV4UmFuZ2UgcmFuZ2U7Ci0gICAgcmFuZ2Uuc3RhcnRJbmRleC52YWx1ZSA9
IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCByYW5nZS5zdGFydElu
ZGV4LnNjb3BlKTsKLSAgICByYW5nZS5lbmRJbmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBv
c2l0aW9uKHNlbGVjdGlvbi5lbmQoKSwgcmFuZ2UuZW5kSW5kZXguc2NvcGUpOworICAgIHJhbmdl
LnN0YXJ0SW5kZXgudmFsdWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24udmlz
aWJsZVN0YXJ0KCksIHJhbmdlLnN0YXJ0SW5kZXguc2NvcGUpOworICAgIHJhbmdlLmVuZEluZGV4
LnZhbHVlID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnZpc2libGVFbmQoKSwg
cmFuZ2UuZW5kSW5kZXguc2NvcGUpOwogICAgIGNvbXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRl
ZEJ5VW5hcHBseShyYW5nZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBv
c2l0aW9uLmNwcAppbmRleCBkZjNlYWZkZDVlOTgwZTI0MjdlMmExYjc5OGFkNDBkZGU4Nzk5OWY0
Li4wMTY4ZWI4MTgxNDJkM2Y0Njk5ZjU1ZWEwZmY4YjIyYWFkYjYzNzZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCkBAIC04NDksNiArODQ5LDExIEBAIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHZpc2libGVQb3NpdGlvCiAgICAgcmV0dXJuIHN0cmVhbTsKIH0KIAorT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYg
cmFuZ2UpCit7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShyYW5nZS5zdGFydCwgcmFuZ2Uu
ZW5kKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmIEVOQUJMRShUUkVFX0RF
QlVHR0lORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCmluZGV4IGY4
NGJjZGZkNzJmNWJjNDU3NjMzZGE0ODMyNzIxZTUyNzdhMjQ4NTEuLjkxZWQ0Y2MwZjM0NDgzNDc1
MjJkNWQxMjZhZTQ5ZjNlMmMwMWUyZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
UG9zaXRpb24uaApAQCAtMzIsNiArMzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFJhbmdlOwogCitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CisKIC8vIFZpc2libGVQb3NpdGlvbiBkZWZh
dWx0IGFmZmluaXR5IGlzIGRvd25zdHJlYW0gYmVjYXVzZQogLy8gdGhlIGNhbGxlcnMgZG8gbm90
IHJlYWxseSBjYXJlICh0aGV5IGp1c3Qgd2FudCB0aGUKIC8vIGRlZXAgcG9zaXRpb24gd2l0aG91
dCByZWdhcmQgdG8gbGluZSBwb3NpdGlvbiksIGFuZCB0aGlzCkBAIC0xNDAsNiArMTQyLDE1IEBA
IGJvb2wgYXJlVmlzaWJsZVBvc2l0aW9uc0luU2FtZVRyZWVTY29wZShjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBjb25zdCBWaXNpYmxlUG9zCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgRUFmZmluaXR5KTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
IAorc3RydWN0IFZpc2libGVQb3NpdGlvblJhbmdlIHsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnQ7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZDsKKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3Qg
eyByZXR1cm4gc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpOyB9Cit9OworCitPcHRpb25h
bDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdl
Jik7CisKIC8vIGlubGluZXMKIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGlnbm9yZSBhZmZp
bml0eS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCmluZGV4
IDA0Zjg4NGI3MjA1ZTkzOTNhYTk5YzdkN2I0ZWJiOTZiYzRmM2Y4ODAuLjU3MTE5ZGIyYWE2ZTc4
NmRjNmI0MzJmNmMzODcxOWQ1Y2U4MTUxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmcu
aCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgot
I2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFk
b3dSb290LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCkBAIC0xMzIsMTEgKzEzMSw4IEBA
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29u
c3QKIHsKICAgICBpZiAoaXNOb25lT3JPcnBoYW5lZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIFBvc2l0aW9uIHN0YXJ0ID0gbV9zdGFydC5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKTsKLSAgICBQb3NpdGlvbiBlbmQgPSBtX2VuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKTsKLSAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQu
aXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZCkgfTsKKyAgICAvLyBGSVhNRTogU2VlbXMgbGlrZWx5IHdlIGRv
bid0IG5lZWQgdG8gY2FsbCBwYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQgaGVyZS4KKyAgICByZXR1
cm4gbWFrZVNpbXBsZVJhbmdlKG1fc3RhcnQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1f
ZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKQEAgLTE3OSwx
OCArMTc1LDEzIEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05v
cm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAgICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHMsIGUp
ID4gMCkgewogICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGFydCBpcyBiZWZvcmUgdGhl
IGVuZC4KICAgICAgICAgICAgIC8vIFRoZSBlbmQgY2FuIHdpbmQgdXAgYmVmb3JlIHRoZSBzdGFy
dCBpZiBjb2xsYXBzZWQgd2hpdGVzcGFjZSBpcyB0aGUgb25seSB0aGluZyBzZWxlY3RlZC4KLSAg
ICAgICAgICAgIFBvc2l0aW9uIHRtcCA9IHM7Ci0gICAgICAgICAgICBzID0gZTsKLSAgICAgICAg
ICAgIGUgPSB0bXA7CisgICAgICAgICAgICBzdGQ6OnN3YXAocywgZSk7CiAgICAgICAgIH0KICAg
ICAgICAgcyA9IHMucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgICAgIGUgPSBlLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIH0KIAotICAgIGlmIChzLmlzTnVsbCgpIHx8
IGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4g
U2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQocyksICptYWtlQm91bmRhcnlQb2ludChl
KSB9OworICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocywgZSk7CiB9CiAKIGJvb2wgVmlzaWJs
ZVNlbGVjdGlvbjo6ZXhwYW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCkBAIC0yMDIsMTggKzE5Myw2IEBAIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6ZXhwYW5k
VXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNlYXJjaFJhbmdl
KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKLXsKLSAgICBhdXRvIG5vZGUgPSBwb3NpdGlvbi5k
ZXByZWNhdGVkTm9kZSgpOwotICAgIGF1dG8gc2NvcGUgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxv
Y2tGbG93RWxlbWVudChub2RlKTsKLSAgICBpZiAoIXNjb3BlKQotICAgICAgICByZXR1cm4geyB9
OwotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbi5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFzdGFydCkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICByZXR1cm4geyB7IFdURk1vdmUoKnN0YXJ0KSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5v
ZGVDb250ZW50cygqc2NvcGUpIH0gfTsKLX0KLQogYm9vbCBWaXNpYmxlU2VsZWN0aW9uOjppc0Fs
bChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QKIHsKICAgICByZXR1cm4g
IW5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkgJiYgdmlzaWJsZVN0YXJ0KCkucHJldmlv
dXMocnVsZSkuaXNOdWxsKCkgJiYgdmlzaWJsZUVuZCgpLm5leHQocnVsZSkuaXNOdWxsKCk7CkBA
IC0yMjEsMTIgKzIwMCwxMSBAQCBib29sIFZpc2libGVTZWxlY3Rpb246OmlzQWxsKEVkaXRpbmdC
b3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogCiB2b2lkIFZpc2libGVTZWxlY3Rpb246
OmFwcGVuZFRyYWlsaW5nV2hpdGVzcGFjZSgpCiB7Ci0gICAgYXV0byBzZWFyY2hSYW5nZSA9IG1h
a2VTZWFyY2hSYW5nZShtX2VuZCk7Ci0gICAgaWYgKCFzZWFyY2hSYW5nZSkKKyAgICBhdXRvIHNj
b3BlID0gZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQobV9lbmQuZGVwcmVjYXRl
ZE5vZGUoKSk7CisgICAgaWYgKCFzY29wZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2hhcmFj
dGVySXRlcmF0b3IgY2hhckl0KCpzZWFyY2hSYW5nZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0
ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwotCisgICAgQ2hhcmFjdGVySXRlcmF0b3Ig
Y2hhckl0KCptYWtlU2ltcGxlUmFuZ2UobV9lbmQsIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2Rl
Q29udGVudHMoKnNjb3BlKSksIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxW
aXNpYmxlUG9zaXRpb25zKTsKICAgICBmb3IgKDsgIWNoYXJJdC5hdEVuZCgpICYmIGNoYXJJdC50
ZXh0KCkubGVuZ3RoKCk7IGNoYXJJdC5hZHZhbmNlKDEpKSB7CiAgICAgICAgIFVDaGFyIGMgPSBj
aGFySXQudGV4dCgpWzBdOwogICAgICAgICBpZiAoKCFpc1NwYWNlT3JOZXdsaW5lKGMpICYmIGMg
IT0gbm9CcmVha1NwYWNlKSB8fCBjID09ICdcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5oCmluZGV4IDNmODgyZTE5ZDQxOWJmYThkNWVkZWFlNTkyODZmNmFhZGRl
MjI3N2UuLjg3NmRlMTg2OTU0M2M1MjRlZGRjNDY1Mzc4ODVmOTE0ZDc4M2VmNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCkBAIC03Miw2ICs3Miw4IEBAIHB1
YmxpYzoKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUJhc2UoKSBjb25zdCB7IHJldHVybiBW
aXNpYmxlUG9zaXRpb24obV9iYXNlLCBpc1JhbmdlKCkgPyAoaXNCYXNlRmlyc3QoKSA/IFVQU1RS
RUFNIDogRE9XTlNUUkVBTSkgOiBhZmZpbml0eSgpKTsgfQogICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlRXh0ZW50KCkgY29uc3QgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBp
c1JhbmdlKCkgPyAoaXNCYXNlRmlyc3QoKSA/IERPV05TVFJFQU0gOiBVUFNUUkVBTSkgOiBhZmZp
bml0eSgpKTsgfQogCisgICAgb3BlcmF0b3IgVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdCB7
IHJldHVybiB7IHZpc2libGVTdGFydCgpLCB2aXNpYmxlRW5kKCkgfTsgfQorCiAgICAgYm9vbCBp
c05vbmUoKSBjb25zdCB7IHJldHVybiBzZWxlY3Rpb25UeXBlKCkgPT0gTm9TZWxlY3Rpb247IH0K
ICAgICBib29sIGlzQ2FyZXQoKSBjb25zdCB7IHJldHVybiBzZWxlY3Rpb25UeXBlKCkgPT0gQ2Fy
ZXRTZWxlY3Rpb247IH0KICAgICBib29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVybiBzZWxlY3Rp
b25UeXBlKCkgPT0gUmFuZ2VTZWxlY3Rpb247IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVVuaXRzLmNwcAppbmRleCAxMmQ0Y2FjMzZiODQ5MDQ5ZjZlMjQ0MmU3NjM2MTEzYjY1NGI1N2I3
Li45MjBkNmJkYzMyNzIzZTJkODI5YTRhOTU4MDQwMDZmZDI5Zjc2ZTFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCkBAIC0xOTA1LDkgKzE5MDUsNyBAQCBzdGQ6OnB0
cmRpZmZfdCBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBh
LCBjb25zdCBWaXNpYmxlUAogewogICAgIGlmIChhLmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhIDwgYgotICAgICAgICA/IC1jaGFyYWN0ZXJD
b3VudCh7ICptYWtlQm91bmRhcnlQb2ludChhKSwgKm1ha2VCb3VuZGFyeVBvaW50KGIpIH0pCi0g
ICAgICAgIDogY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoYiksICptYWtlQm91
bmRhcnlQb2ludChhKSB9KTsKKyAgICByZXR1cm4gYSA8IGIgPyAtY2hhcmFjdGVyQ291bnQoKm1h
a2VTaW1wbGVSYW5nZShhLCBiKSkgOiBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKGIs
IGEpKTsKIH0KIAogdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0ZXIsIFVDaGFyMzImIG9uZUJlZm9yZSwg
VUNoYXIzMiYgdHdvQmVmb3JlKQpAQCAtMTkzNCw3ICsxOTMyLDcgQEAgdm9pZCBjaGFyYWN0ZXJz
QXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYg
b25lQWZ0ZXIKICAgICB9CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbiAhPSBlbmRQb3NpdGlvbikg
ewotICAgICAgICBTdHJpbmcgY2hhcmFjdGVyU3RyaW5nID0gcGxhaW5UZXh0KHsgKm1ha2VCb3Vu
ZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24p
IH0pLnJlcGxhY2Uobm9CcmVha1NwYWNlLCAnICcpOworICAgICAgICBTdHJpbmcgY2hhcmFjdGVy
U3RyaW5nID0gcGxhaW5UZXh0KCptYWtlU2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24pKS5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKICAgICAgICAgZm9yIChpbnQgaSA9
IGNoYXJhY3RlclN0cmluZy5sZW5ndGgoKSAtIDEsIGluZGV4ID0gMDsgaSA+PSAwICYmIGluZGV4
IDwgbWF4Q2hhcmFjdGVyczsgLS1pKSB7CiAgICAgICAgICAgICBpZiAoIWluZGV4ICYmIG5leHRQ
b3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgICAgICBpbmRleCsrOwpAQCAtMTk0OCw3ICsx
OTQ2LDYgQEAgdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0ZXIKIAogUmVmUHRyPFJhbmdlPiB3b3JkUmFu
Z2VGcm9tUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICAv
LyBUaGUgc2VsZWN0aW9uIGNvdWxkIGJlIGluIGEgbm9uIHZpc2libGUgZWxlbWVudCBhbmQgd2Ug
ZG9uJ3QgaGF2ZSBhIFZpc2libGVQb3NpdGlvbi4KICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xOTY2LDcgKzE5NjMsNiBAQCBSZWZQdHI8
UmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0
aW9uKQogICAgIGRvIHsKICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRC
b3VuZGFyeU9mR3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6Oldv
cmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCk7CiAgICAgfSB3aGls
ZSAoY3VycmVudFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFhdEJvdW5kYXJ5T2ZHcmFudWxhcml0
eShjdXJyZW50UG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxl
Y3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSk7Ci0KICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmlz
TnVsbCgpKQogICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5
T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHks
IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7CiAKQEAgLTE5ODEsOCArMTk3Nyw2IEBAIFJl
ZlB0cjxSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
cG9zaXRpb24pCiBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9u
IHJlc3VsdDsKLQotICAgIC8vIG1vdmUgdGhlIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIHdv
cmQKICAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxh
cml0eTo6TGluZUdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKSB7CiAg
ICAgICAgIC8vIERvbid0IGNyb3NzIGxpbmUgYm91bmRhcmllcy4KICAgICAgICAgcmVzdWx0ID0g
cG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFE
ZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24u
bW0KaW5kZXggMjM2YTNhYjQ3YWE4NThjY2U2MTZjZDFiMzUxMWViZTRkMjk0ZTBkYS4uNmIwOGZk
MmRmMTk4YWFlZmNiYzk5MjIyMzU5OTViNTYyZTZkNzJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQpAQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMg
T3B0aW9uYWw8RGV0ZWN0ZWRJdGVtPiBkZXRlY3RJdGVtKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
cG9zaXRpb24sIGNvbnN0CiAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4geyB9OwogICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0U3RyaW5nID0gcGxhaW5UZXh0KGNvbnRl
eHRSYW5nZSk7Ci0gICAgQ0ZJbmRleCBoaXRMb2NhdGlvbiA9IGNoYXJhY3RlckNvdW50KHsgY29u
dGV4dFJhbmdlLnN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pIH0pOworICAgIENG
SW5kZXggaGl0TG9jYXRpb24gPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKGNvbnRl
eHRSYW5nZS5zdGFydCwgcG9zaXRpb24pKTsKIAogICAgIGF1dG8gc2Nhbm5lciA9IGFkb3B0Q0Yo
RERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwgbnVsbHB0cikpOwogICAg
IGF1dG8gc2NhblF1ZXJ5ID0gYWRvcHRDRihERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgZnVsbFBsYWluVGV4dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdl
dCgpLCBDRlJhbmdlTWFrZSgwLCBmdWxsUGxhaW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkpOwpAQCAt
MjcyLDE2ICsyNzIsMTQgQEAgc3RhdGljIHZvaWQgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5jaG9y
KEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgZWxlbWVudFBhcmVudC0+cmVtb3ZlQ2hpbGQoZWxlbWVu
dCk7CiB9CiAKLXN0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5r
cyhOb2RlJiBzdGFydE5vZGUsIE5vZGUmIGVuZE5vZGUsIGJvb2wmIGRpZE1vZGlmeURPTSkKK3N0
YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhOb2RlJiBzdGFy
dE5vZGUsIE5vZGUmIGVuZE5vZGUpCiB7Ci0gICAgZGlkTW9kaWZ5RE9NID0gZmFsc2U7CiAgICAg
Zm9yIChOb2RlKiBub2RlID0gJnN0YXJ0Tm9kZTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQoKm5vZGUpKSB7CiAgICAgICAgIGlmIChpczxIVE1MQW5jaG9yRWxlbWVudD4oKm5vZGUp
KSB7CiAgICAgICAgICAgICBhdXRvJiBhbmNob3IgPSBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVu
dD4oKm5vZGUpOwogICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGFuY2hv
ci5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHhfYXBwbGVfZGF0YV9kZXRlY3RvcnNB
dHRyKSwgInRydWUiKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihhbmNob3IpOwotICAgICAgICAgICAgZGlkTW9k
aWZ5RE9NID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUgPT0g
JmVuZE5vZGUpIHsKQEAgLTI5MSw3ICsyODksNiBAQCBzdGF0aWMgYm9vbCBzZWFyY2hGb3JMaW5r
UmVtb3ZpbmdFeGlzdGluZ0RETGlua3MoTm9kZSYgc3RhcnROb2RlLCBOb2RlJiBlbmROb2RlLAog
ICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhbmNob3IuYXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih4X2FwcGxlX2RhdGFfZGV0ZWN0b3JzQXR0ciksICJ0
cnVlIikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAg
IHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihhbmNob3IpOwotICAgICAgICAgICAgICAgIGRp
ZE1vZGlmeURPTSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTU1MywyOSArNTUwLDEyIEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rp
b246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0UmFuZ2Us
IERhCiAgICAgICAgIGlmIChyZXN1bHRSYW5nZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAotICAgICAgICAvLyBTdG9yZSB0aGUgcmFuZ2UgYm91bmRhcmllcyBh
cyBQb3NpdGlvbiwgYmVjYXVzZSB0aGUgRE9NIGNvdWxkIGNoYW5nZSBpZiB3ZSBmaW5kCi0gICAg
ICAgIC8vIG9sZCBkYXRhIGRldGVjdG9yIGxpbmsuCi0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8
UG9zaXRpb24sIFBvc2l0aW9uPj4gcmFuZ2VCb3VuZGFyaWVzOwotICAgICAgICByYW5nZUJvdW5k
YXJpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZXN1bHRSYW5nZXMuc2l6ZSgpKTsKLSAgICAg
ICAgZm9yIChhdXRvJiByYW5nZSA6IHJlc3VsdFJhbmdlcykKLSAgICAgICAgICAgIHJhbmdlQm91
bmRhcmllcy51bmNoZWNrZWRBcHBlbmQoeyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFu
Z2Uuc3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5kKSB9KTsKLQog
ICAgICAgICBOU1N0cmluZyAqaWRlbnRpZmllciA9IGRhdGFEZXRlY3RvclN0cmluZ0ZvclBhdGgo
aW5kZXhQYXRoc1tyZXN1bHRJbmRleF0uZ2V0KCkpOwogICAgICAgICBOU1N0cmluZyAqY29ycmVz
cG9uZGluZ1VSTCA9IGNvbnN0cnVjdFVSTFN0cmluZ0ZvclJlc3VsdChjb3JlUmVzdWx0LCBpZGVu
dGlmaWVyLCByZWZlcmVuY2VEYXRlLCAoTlNUaW1lWm9uZSAqKXR6LmdldCgpLCB0eXBlcyk7Ci0g
ICAgICAgIGJvb2wgZGlkTW9kaWZ5RE9NID0gZmFsc2U7CiAKLSAgICAgICAgaWYgKCFjb3JyZXNw
b25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhyZXN1bHRS
YW5nZXMuZmlyc3QoKS5zdGFydC5jb250YWluZXIsIHJlc3VsdFJhbmdlcy5sYXN0KCkuZW5kLmNv
bnRhaW5lciwgZGlkTW9kaWZ5RE9NKSkKKyAgICAgICAgaWYgKCFjb3JyZXNwb25kaW5nVVJMIHx8
IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhyZXN1bHRSYW5nZXMuZmlyc3Qo
KS5zdGFydC5jb250YWluZXIsIHJlc3VsdFJhbmdlcy5sYXN0KCkuZW5kLmNvbnRhaW5lcikpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkaWRNb2RpZnlET00p
IHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBET00gd2FzIG1vZGlmaWVkIGJlY2F1c2Ugc29tZSBv
bGQgbGlua3Mgd2VyZSByZW1vdmVkLAotICAgICAgICAgICAgLy8gd2UgbmVlZCB0byByZWNyZWF0
ZSB0aGUgcmFuZ2VzIGJlY2F1c2UgdGhleSBjb3VsZCBubyBsb25nZXIgYmUgdmFsaWQuCi0gICAg
ICAgICAgICBBU1NFUlQocmVzdWx0UmFuZ2VzLnNpemUoKSA9PSByYW5nZUJvdW5kYXJpZXMuc2l6
ZSgpKTsKLSAgICAgICAgICAgIHJlc3VsdFJhbmdlcy5zaHJpbmsoMCk7IC8vIEtlZXAgY2FwYWNp
dHkgYXMgd2UgYXJlIGdvaW5nIHRvIHJlcG9wdWxhdGUgdGhlIFZlY3RvciByaWdodCBhd2F5IHdp
dGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zLgotICAgICAgICAgICAgZm9yIChhdXRvJiByYW5n
ZUJvdW5kYXJ5IDogcmFuZ2VCb3VuZGFyaWVzKQotICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdl
cy51bmNoZWNrZWRBcHBlbmQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocmFuZ2VCb3VuZGFyeS5maXJz
dCksICptYWtlQm91bmRhcnlQb2ludChyYW5nZUJvdW5kYXJ5LnNlY29uZCkgfSk7Ci0gICAgICAg
IH0KLSAgICAgICAgCisKICAgICAgICAgbGFzdE1vZGlmaWVkUXVlcnlPZmZzZXQgPSBxdWVyeVJh
bmdlLmVuZDsKICAgICAgICAgQk9PTCBzaG91bGRVc2VMaWdodExpbmtzID0gc29mdExpbmtfRGF0
YURldGVjdG9yc0NvcmVfRERTaG91bGRVc2VMaWdodExpbmtzRm9yUmVzdWx0KGNvcmVSZXN1bHQs
IFtpbmRleFBhdGhzW3Jlc3VsdEluZGV4XSBsZW5ndGhdID4gMSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCBiY2NiMGYwMDgy
N2I5ZWE0NDc0OWY3MGQ5ZDQ1ZDg2YmQwOWE1MzZjLi4yZGQwNWUxNjViMGI2ZGQ0OGQ2YzZmNjAz
NzJlN2Q1Y2VmOGNhN2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0RpY3Rpb25hcnlMb29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
aWN0aW9uYXJ5TG9va3VwLm1tCkBAIC0yNzksOCArMjc5LDggQEAgT3B0aW9uYWw8c3RkOjp0dXBs
ZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZv
clNlbGUKICAgICBpZiAocGFyYWdyYXBoU3RhcnQuaXNOdWxsKCkgfHwgcGFyYWdyYXBoRW5kLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBsZW5ndGhU
b1NlbGVjdGlvblN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFy
YWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pOwotICAg
IGF1dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91
bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25F
bmQpIH0pOworICAgIGF1dG8gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IGNoYXJhY3RlckNvdW50
KCptYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KSk7CisgICAg
YXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxl
UmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpOwogICAgIE5TUmFuZ2UgcmFuZ2VU
b1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25DaGFy
YWN0ZXJDb3VudCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1h
a2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKQEAgLTMyOCwxNSArMzI4LDEz
IEBAIE9wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGlj
dGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlCiAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0g
c2VsZWN0aW9uLnZpc2libGVFbmQoKTsKIAogICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUg
Z29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBo
KHNlbGVjdGlvblN0YXJ0KSk7Ci0gICAgICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gbWFrZUJvdW5k
YXJ5UG9pbnQoZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKSk7Ci0gICAgICAgIGlmICghcGFy
YWdyYXBoU3RhcnQgfHwgIXBhcmFncmFwaEVuZCkKKyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdl
ID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpLCBlbmRP
ZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpKTsKKyAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFu
Z2UpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIGZ1bGxDaGFy
YWN0ZXJSYW5nZSA9IHsgeyAqcGFyYWdyYXBoU3RhcnQsICpwYXJhZ3JhcGhFbmQgfSB9OwotICAg
ICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgKnBhcmFn
cmFwaFN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pLAotICAgICAg
ICAgICAgY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQp
LCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9KSk7Ci0gICAgICAgIGhpdEluZGV4
ID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICptYWtlQm91bmRhcnlQb2ludChw
b3NpdGlvbikgfSk7CisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoY2hhcmFj
dGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCBzZWxl
Y3Rpb25TdGFydCkpLAorICAgICAgICAgICAgY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5n
ZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSkpOworICAgICAgICBoaXRJbmRleCA9IGNo
YXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydCwg
cG9zaXRpb24pKTsKICAgICB9IGVsc2UgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OwogICAgICAgICBzZWxlY3Rp
b25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51
bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHkpOwpAQCAtMzUwLDcgKzM0OCw3IEBAIE9wdGlvbmFsPHN0
ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6
cmFuZ2VBdEhpdFRlCiAgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHsgKmV4cGFuZGVkUmFu
Z2UgfTsKIAogICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQs
IDApOwotICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgZnVsbENoYXJhY3RlclJh
bmdlLT5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKKyAgICAgICAgaGl0
SW5kZXggPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5n
ZS0+c3RhcnQsIHBvc2l0aW9uKSk7CiAgICAgfQogCiAgICAgTlNSYW5nZSBzZWxlY3RlZFJhbmdl
ID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0SW5kZXggc2Vs
ZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25SYW5nZV1dIHNo
b3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQppbmRleCA1MWFlMjM0MGNlMzc5M2U3
MTFjYThmZDJkOTc1NDg0Mjg5MjI5MTM4Li4yODczM2VlZWEzNzZjZjhmZTA4MTc1NDQ3MGViMzMx
ODU0YWRlNDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNv
bnRlbnRSZWFkZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dl
YkNvbnRlbnRSZWFkZXJDb2NvYS5tbQpAQCAtNTMsNiArNTMsNyBAQAogI2ltcG9ydCAiUGFnZS5o
IgogI2ltcG9ydCAiUHVibGljVVJMTWFuYWdlci5oIgogI2ltcG9ydCAiUXVpcmtzLmgiCisjaW1w
b3J0ICJSYW5nZS5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgogI2ltcG9ydCAiU2VyaWFsaXplZEF0dGFjaG1lbnREYXRhLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9T
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3Bw
CmluZGV4IDFmODgxMDQxY2MxZGFjYWI2NWEyN2QxMmZlZDYxY2NlMTkxODVhNzUuLjkwNWVmYjQ2
MGUzN2YxZGUyMjk2NTM4ODlkYjQxNzgyMjhjNGM1MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCkBAIC0zMiw3ICszMiw2IEBA
CiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRl
ICJTbWFydFJlcGxhY2UuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJW
aXNpYmxlVW5pdHMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Rp
Y3Rpb25hcnlMb29rdXBMZWdhY3kubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4IDRmMjcyZWVlODEzODE0MGM5YjM2NWNhMjExNzNm
NmIzNDA5NGYyMWYuLjg3NjEyMGJiMDliMTJlMDllNGRlY2E1OGU1NTRkMzAyNzAxZWY0MzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdh
Y3kubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExl
Z2FjeS5tbQpAQCAtODYsMTYgKzg2LDE0IEBAIE9wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFu
Z2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlCiAgICAg
YXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwogCiAgICAgLy8gQXMg
Y29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBv
ZiB0ZXh0LgotICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFy
dE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7Ci0gICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBt
YWtlQm91bmRhcnlQb2ludChlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpKTsKLSAgICBpZiAo
IXBhcmFncmFwaFN0YXJ0IHx8ICFwYXJhZ3JhcGhFbmQpCisgICAgYXV0byBwYXJhZ3JhcGhSYW5n
ZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSwgZW5k
T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKSk7CisgICAgaWYgKCFwYXJhZ3JhcGhSYW5nZSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBT
aW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91
bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH07Ci0gICAgYXV0byBwYXJhZ3JhcGhSYW5nZSA9IFNp
bXBsZVJhbmdlIHsgKnBhcmFncmFwaFN0YXJ0LCAqcGFyYWdyYXBoRW5kIH07CisgICAgYXV0byBz
ZWxlY3Rpb25SYW5nZSA9ICptYWtlU2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlv
bkVuZCk7CiAKICAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7Ci0gICAgdG9rZW5SYW5n
ZShwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UpLCBjaGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGhSYW5n
ZSwgc2VsZWN0aW9uUmFuZ2UpLCAmb3B0aW9ucyk7CisgICAgdG9rZW5SYW5nZShwbGFpblRleHQo
KnBhcmFncmFwaFJhbmdlKSwgY2hhcmFjdGVyUmFuZ2UoKnBhcmFncmFwaFJhbmdlLCBzZWxlY3Rp
b25SYW5nZSksICZvcHRpb25zKTsKIAogICAgIHJldHVybiB7IHsgKnNlbGVjdGVkUmFuZ2UsIG9w
dGlvbnMgfSB9OwogfQpAQCAtMTMzLDEyICsxMzEsMTEgQEAgT3B0aW9uYWw8c3RkOjp0dXBsZTxT
aW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0
VGUKICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIGF1dG8gZnVsbENoYXJhY3RlclN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQo
ZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGF1dG8gcG9zaXRpb25C
b3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKLSAgICBpZiAoIWZ1bGxDaGFy
YWN0ZXJTdGFydCB8fCAhcG9zaXRpb25Cb3VuZGFyeSkKKyAgICBhdXRvIHJhbmdlVG9Qb3NpdGlv
biA9IG1ha2VTaW1wbGVSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCBwb3NpdGlvbik7
CisgICAgaWYgKCFyYW5nZVRvUG9zaXRpb24pCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291bnQo
eyAqZnVsbENoYXJhY3RlclN0YXJ0LCAqcG9zaXRpb25Cb3VuZGFyeSB9KSwgMCk7CisgICAgTlNS
YW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KCpyYW5nZVRvUG9z
aXRpb24pLCAwKTsKICAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CiAgICAgYXV0byBl
eHRyYWN0ZWRSYW5nZSA9IHRva2VuUmFuZ2UocGxhaW5UZXh0KCpmdWxsQ2hhcmFjdGVyUmFuZ2Up
LCByYW5nZVRvUGFzcywgJm9wdGlvbnMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0
b3JNYWMubW0KaW5kZXggYmEzMWMxODc3MzIzNGI5YWQ5MzlhZDBkMzMxOTMxOGM2MmQ4YjNiZC4u
ZTczMjVjNTI0YWZmYWI0YzZhN2FkMjBlYzQyYWNjNjAyZmU3ZjUxMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtNDUsNyArNDUsNiBAQAogI2ltcG9ydCAiUGFz
dGVib2FyZC5oIgogI2ltcG9ydCAiUGFzdGVib2FyZFN0cmF0ZWd5LmgiCiAjaW1wb3J0ICJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaCIKLSNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJCbG9j
ay5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4IGQ1NzRhNDk3N2E4N2E0
YjFkMjFlYmMyMjg1NDYxNGY1N2E4OTI3Y2QuLmJmZjEzMjBkMzY5ZjgyZWRkZTJlMTE1ZTA3YTg1
NGQxZDMzMWJiMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTQ1MSwxMiArNDUx
LDggQEAgU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpyZW5kZXJlZFRleHRSZXNwZWN0
aW5nUmFuZ2UoY29uc3QgVGV4dCYgdGV4dCkKICAgICAgICAgICAgIGJlaGF2aW9yID0gVGV4dEl0
ZXJhdG9yQmVoYXZlc0FzSWZOb2Rlc0ZvbGxvd2luZzsKICAgICB9CiAKLSAgICBhdXRvIHN0YXJ0
Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydCk7Ci0gICAgYXV0byBlbmRCb3VuZGFy
eSA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZCk7Ci0gICAgaWYgKCFzdGFydEJvdW5kYXJ5IHx8ICFl
bmRCb3VuZGFyeSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KLSAgICByZXR1cm4g
cGxhaW5UZXh0KHsgV1RGTW92ZSgqc3RhcnRCb3VuZGFyeSksIFdURk1vdmUoKmVuZEJvdW5kYXJ5
KSB9LCBiZWhhdmlvcik7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydCwg
ZW5kKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHQoKnJhbmdlLCBiZWhhdmlvcikgOiBl
bXB0eVN0cmluZygpOwogfQogCiBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRleHRD
b250ZW50UmVzcGVjdGluZ1JhbmdlKGNvbnN0IFRleHQmIHRleHQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy93aW4vRWRpdG9yV2luLmNwcAppbmRleCA5M2RkZWFmODg4OWI4ZTdmY2MyNjkzNDEyNDA4
NTgyODQ0NzZjOGQ3Li5kZmYxMmMzYjhiZGNiODlhMjU2MmE5YTc2MzQ4NWFkZDE2MGNhOTliIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5j
bHVkZSAiUGFzdGVib2FyZC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAid2luZG93
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNw
cAppbmRleCA2ZDgwMWE2MTVmMTE2YjRkNTk2MjdlMjg5YWE2M2VkMTZmNmNlYWVjLi41ODRlYzYz
ZmIxYmE3NDhlM2RmOWE5Yzc2NDNmYWVlN2Y3YmU0MTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L21hYy9JbWFnZUNvbnRyb2xzQnV0dG9uRWxl
bWVudE1hYy5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5o
IgogI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01T
ZWxlY3Rpb24uY3BwCmluZGV4IGRmMTM1YWY0MzlmZDdlNzY0MTc0N2JiNzM2N2M4NmI4ZGM1ZmY3
MmMuLjU5ZWE0ZmJmN2U5ZTU1MmQyOTc3MWJiMjVmMDY1ZGUxMDNjZGIxMzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIERPTVNlbGVj
dGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogCiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpIHsKLSAgICAgICAg
c2VsZWN0aW9uLm1vdmVUbygmcmFuZ2UpOworICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9u
KFNpbXBsZVJhbmdlIHsgcmFuZ2UgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1
Niw3ICszNTYsNyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQog
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2Uuc3RhcnRQb3NpdGlvbigpLCBu
b3JtYWxpemVkUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgbmV3IHJhbmdlIGNvbnRhaW5zIHRoZSBv
cmlnaW5hbCByYW5nZS4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKCZyYW5nZSk7
CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihTaW1wbGVSYW5nZSB7IHJh
bmdlIH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTM2Niw3
ICszNjYsNyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAg
ICAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRf
VE9fRU5ELCAqbm9ybWFsaXplZFJhbmdlKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4
Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewogICAgICAg
ICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCByYW5nZSBjb250YWlucyB0aGUgbmV3IHJhbmdlLgot
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8obm9ybWFsaXplZFJhbmdlLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFNpbXBsZVJhbmdlIHsgKm5v
cm1hbGl6ZWRSYW5nZSB9KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
Ly8gVGhlIHJhbmdlcyBpbnRlcnNlY3QuCiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVU
byhub3JtYWxpemVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRpb24oKSwg
RE9XTlNUUkVBTSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNWVkYTgz
MGVjZjQ2NWQwZGQwYjI0N2ZhZTAwMjBjNWUyNTJlYjhlMC4uOTY3NTU4MWY5M2Y4ZDIxZTg3MDQw
Nzg4ZTZkOWFmMDE0YjUzMzUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApA
QCAtNjc1LDExICs2NzUsMTAgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NF
dmVudFRyaXBsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFIKIAogc3RhdGljIHVp
bnQ2NF90IHRleHREaXN0YW5jZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQpCiB7Ci0gICAgYXV0byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3Rh
cnQpOwotICAgIGF1dG8gZW5kQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChlbmQpOwotICAg
IGlmICghc3RhcnRCb3VuZGFyeSB8fCAhZW5kQm91bmRhcnkpCisgICAgYXV0byByYW5nZSA9IG1h
a2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnRCb3VuZGFyeSwgKmVuZEJv
dW5kYXJ5IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9z
aXRpb25zKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoKnJhbmdlLCBUZXh0SXRlcmF0b3JF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiB9CiAKIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayhjb25zdCBNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMzU1
MWI0ZDYyYjg0NjBkYmM2MTc0YjdkZTVmMmI5ZjM4M2FmMDc1Yi4uNjQxMDU0OGQ0MjIyMzc3YzE0
MTM4NjFjYjVkOTAyNDI1M2RlZDczMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTgxOSwyNCAr
ODE5LDE5IEBAIERvY3VtZW50KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50
JiBwb2ludCkKIFJlZlB0cjxSYW5nZT4gRnJhbWU6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9p
bnQmIGZyYW1lUG9pbnQpCiB7CiAgICAgYXV0byBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZv
clBvaW50KGZyYW1lUG9pbnQpOwotICAgIGF1dG8gcG9zaXRpb25Cb3VuZGFyeSA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHBvc2l0aW9uKTsKLSAgICBpZiAoIXBvc2l0aW9uQm91bmRhcnkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBjb250YWluZXJUZXh0ID0gcG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5jb250YWluZXJUZXh0KCk7CiAgICAgaWYgKCFjb250YWluZXJUZXh0IHx8
ICFjb250YWluZXJUZXh0LT5yZW5kZXJlcigpIHx8IGNvbnRhaW5lclRleHQtPnJlbmRlcmVyKCkt
PnN0eWxlKCkudXNlclNlbGVjdCgpID09IFVzZXJTZWxlY3Q6Ok5vbmUpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgaWYgKGF1dG8gcHJldmlvdXMgPSBtYWtlQm91bmRhcnlQb2ludChw
b3NpdGlvbi5wcmV2aW91cygpKSkgewotICAgICAgICBhdXRvIHByZXZpb3VzQ2hhcmFjdGVyUmFu
Z2UgPSBTaW1wbGVSYW5nZSB7ICpwcmV2aW91cywgKnBvc2l0aW9uQm91bmRhcnkgfTsKLSAgICAg
ICAgaWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2Up
LmNvbnRhaW5zKGZyYW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5n
ZShwcmV2aW91c0NoYXJhY3RlclJhbmdlKTsKKyAgICBpZiAoYXV0byBwcmV2aW91c0NoYXJhY3Rl
clJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uLnByZXZpb3VzKCksIHBvc2l0aW9uKSkg
eworICAgICAgICBpZiAoZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoKnByZXZpb3VzQ2hhcmFj
dGVyUmFuZ2UpLmNvbnRhaW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUxpdmVSYW5nZSgqcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSk7CiAgICAgfQogCi0gICAgaWYgKGF1
dG8gbmV4dCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLm5leHQoKSkpIHsKLSAgICAgICAg
YXV0byBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpwb3NpdGlvbkJvdW5kYXJ5
LCAqbmV4dCB9OwotICAgICAgICBpZiAoZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UobmV4dENo
YXJhY3RlclJhbmdlKS5jb250YWlucyhmcmFtZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UobmV4dENoYXJhY3RlclJhbmdlKTsKKyAgICBpZiAoYXV0byBuZXh0Q2hh
cmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uLm5leHQoKSkp
IHsKKyAgICAgICAgaWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCpuZXh0Q2hhcmFjdGVy
UmFuZ2UpLmNvbnRhaW5zKGZyYW1lUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxp
dmVSYW5nZSgqbmV4dENoYXJhY3RlclJhbmdlKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IGRkOTQyZTkyNDhkNWQ3
MjM1MmQ0YjViMjU5MGM4YjZhZmQ1ODc4MjAuLjllNjIxMDk2ZGEyZTJmN2JmNWFlNzBlOGEzZWRm
YjRjNmQ4NTJhMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMjI0
LDcgKzIyNCw3IEBAIHN0YXRpYyBDb2xvciBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3JGb3JSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEZyCiAgICAgYXV0byBlc3RpbWF0ZWRC
YWNrZ3JvdW5kQ29sb3IgPSBmcmFtZS52aWV3KCkgPyBmcmFtZS52aWV3KCktPmRvY3VtZW50QmFj
a2dyb3VuZENvbG9yKCkgOiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIAogICAgIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyID0gbnVsbHB0cjsKLSAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFpbmVyLCByYW5nZS5lbmQuY29u
dGFpbmVyKTsKKyAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0
b3IocmFuZ2UpOwogICAgIHdoaWxlIChjb21tb25BbmNlc3RvcikgewogICAgICAgICBpZiAoaXM8
UmVuZGVyRWxlbWVudD4oY29tbW9uQW5jZXN0b3ItPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAg
ICByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yLT5yZW5k
ZXJlcigpKTsKQEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNh
dG9yKFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbQogCiAg
ICAgYm9vbCB1c2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2Vz
ID0gZGF0YS5vcHRpb25zLmNvbnRhaW5zKFRleHRJbmRpY2F0b3JPcHRpb246OlVzZUJvdW5kaW5n
UmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMpOwogICAgIGlmICh1c2VCb3Vu
ZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzICYmIGNvbnRhaW5zT25s
eVdoaXRlU3BhY2VUZXh0KHJhbmdlKSkgewotICAgICAgICBpZiAoYXV0byogY29udGFpbmVyUmVu
ZGVyZXIgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZS5zdGFydC5jb250YWluZXIsIHJh
bmdlLmVuZC5jb250YWluZXIpLT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBjb250
YWluZXJSZW5kZXJlciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlKS0+cmVuZGVyZXIo
KSkgewogICAgICAgICAgICAgZGF0YS5vcHRpb25zLmFkZChUZXh0SW5kaWNhdG9yT3B0aW9uOjpQ
YWludEFsbENvbnRlbnQpOwogICAgICAgICAgICAgdGV4dFJlY3RzLmFwcGVuZChjb250YWluZXJS
ZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZU5vZGVIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlTm9kZUhhbmRsZS5jcHAKaW5kZXggZmM3ZTAwYjI4ZWIzYTU2OGY2Zjg0
YzU2YTI2YWIxYmYwNzliNzRjMy4uNTM3M2YzYjk2MzliMjAzNGIyMjMyMTA2NTcwZWYwZjg3M2Y3
MGY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlTm9kZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTm9kZUhhbmRsZS5jcHAKQEAgLTI4LDcg
KzI4LDYgQEAKICNpbmNsdWRlICJXS0J1bmRsZU5vZGVIYW5kbGVQcml2YXRlLmgiCiAKICNpbmNs
dWRlICJJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuaCIKLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV0tCdW5k
bGVBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKQEAgLTkwLDcgKzg5LDggQEAgV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlEb2N1bWVudChXS0J1bmRs
ZU5vZGVIYW5kbGVSZWYgbm9kZUgKIAogV0tSZWN0IFdLQnVuZGxlTm9kZUhhbmRsZUdldFJlbmRl
clJlY3QoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGVIYW5kbGVSZWYsIGJvb2wqIGlzUmVwbGFj
ZWQpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwobm9kZUhhbmRs
ZVJlZiktPnJlbmRlclJlY3QoaXNSZXBsYWNlZCkpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiB7IH07CiB9CiAKIFdLSW1hZ2VSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29w
eVNuYXBzaG90V2l0aE9wdGlvbnMoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGVIYW5kbGVSZWYs
IFdLU25hcHNob3RPcHRpb25zIG9wdGlvbnMpCkBAIC05OSwxMCArOTksMTAgQEAgV0tJbWFnZVJl
ZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5U25hcHNob3RXaXRoT3B0aW9ucyhXS0J1bmRsZU5vZGVI
YW5kbGVSZWYgbm9kZUgKICAgICByZXR1cm4gdG9BUEkoaW1hZ2UubGVha1JlZigpKTsKIH0KIAot
V0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5VmlzaWJsZVJhbmdl
KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlSGFuZGxlUmVmKQorV0tCdW5kbGVSYW5nZUhhbmRs
ZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5VmlzaWJsZVJhbmdlKFdLQnVuZGxlTm9kZUhhbmRs
ZVJlZikKIHsKLSAgICBSZWZQdHI8V2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlPiBy
YW5nZUhhbmRsZSA9IFdlYktpdDo6dG9JbXBsKG5vZGVIYW5kbGVSZWYpLT52aXNpYmxlUmFuZ2Uo
KTsKLSAgICByZXR1cm4gdG9BUEkocmFuZ2VIYW5kbGUubGVha1JlZigpKTsKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogV0tSZWN0IFdLQnVuZGxl
Tm9kZUhhbmRsZUdldEVsZW1lbnRCb3VuZHMoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGVsZW1lbnRI
YW5kbGVSZWYpCkBAIC0xMTUsMTQgKzExNSwxNSBAQCB2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNl
dEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bQog
ICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5w
dXRFbGVtZW50VmFsdWVGb3JVc2VyKFdlYktpdDo6dG9XVEZTdHJpbmcodmFsdWVSZWYpKTsKIH0K
IAotdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50U3BlbGxjaGVja0Vu
YWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJv
b2wgZW5hYmxlZCkKK3ZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFNw
ZWxsY2hlY2tFbmFibGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgYm9vbCkKIHsKLSAgICBXZWJL
aXQ6OnRvSW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVu
dFNwZWxsY2hlY2tFbmFibGVkKGVuYWJsZWQpOworICAgIC8vIEZJWE1FOiBXb3VsZCBwdXQgQVNT
RVJUX05PVF9SRUFDSEVEKCkgaGVyZSBidXQgc29tZSBjb21waWxlcnMgYXJlIHdhcm5pbmcgdGhl
IGZ1bmN0aW9uIGlzICJub3JldHVybiIuCiB9CiAKLWJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0
SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1
dEVsZW1lbnRIYW5kbGVSZWYpCitib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVs
ZW1lbnRBdXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2Vi
S2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzSFRNTElucHV0RWxlbWVu
dEF1dG9GaWxsZWQoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9G
aWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJv
b2wgZmlsbGVkKQpAQCAtMTM1LDkgKzEzNiwxMCBAQCB2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNl
dEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkQW5kVmlld2FibGUoV0tCdW5kbGVOb2RlSGFuZAog
ICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5w
dXRFbGVtZW50QXV0b0ZpbGxlZEFuZFZpZXdhYmxlKGF1dG9GaWxsZWRBbmRWaWV3YWJsZSk7CiB9
CiAKLWJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0
dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJl
ZikKK2Jvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0
dG9uRW5hYmxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6
dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5pc0hUTUxJbnB1dEVsZW1lbnRBdXRv
RmlsbEJ1dHRvbkVuYWJsZWQoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIHZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVu
dEF1dG9GaWxsQnV0dG9uRW5hYmxlZFdpdGhCdXR0b25UeXBlKFdLQnVuZGxlTm9kZUhhbmRsZVJl
ZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBXS0F1dG9GaWxsQnV0dG9uVHlwZSBhdXRvRmls
bEJ1dHRvblR5cGUpCkBAIC0xNTUsOSArMTU3LDEwIEBAIFdLQXV0b0ZpbGxCdXR0b25UeXBlIFdL
QnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRMYXN0QXV0b0ZpbGxCdXR0b25UeXBl
CiAgICAgcmV0dXJuIHRvV0tBdXRvRmlsbEJ1dHRvblR5cGUoV2ViS2l0Ojp0b0ltcGwoaHRtbElu
cHV0RWxlbWVudEhhbmRsZVJlZiktPmh0bWxJbnB1dEVsZW1lbnRMYXN0QXV0b0ZpbGxCdXR0b25U
eXBlKCkpOwogfQogCi1ib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRB
dXRvRmlsbEF2YWlsYWJsZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhh
bmRsZVJlZikKK2Jvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9G
aWxsQXZhaWxhYmxlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0
Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPmlzQXV0b0ZpbGxBdmFpbGFibGUo
KTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZv
aWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQXZhaWxhYmxl
KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGF1
dG9GaWxsQXZhaWxhYmxlKQpAQCAtMTY1LDkgKzE2OCwxMCBAQCB2b2lkIFdLQnVuZGxlTm9kZUhh
bmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEF2YWlsYWJsZShXS0J1bmRsZU5vZGVIYW5k
bGVSZQogICAgIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRB
dXRvRmlsbEF2YWlsYWJsZShhdXRvRmlsbEF2YWlsYWJsZSk7CiB9CiAKLVdLUmVjdCBXS0J1bmRs
ZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25Cb3VuZHMoV0tCdW5k
bGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCitXS1JlY3QgV0tCdW5k
bGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uQm91bmRzKFdLQnVu
ZGxlTm9kZUhhbmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRv
SW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+aHRtbElucHV0RWxlbWVudEF1dG9GaWxs
QnV0dG9uQm91bmRzKCkpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7
IH07CiB9CiAKIGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudExhc3RD
aGFuZ2VXYXNVc2VyRWRpdChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhh
bmRsZVJlZikKQEAgLTE4MCwxMCArMTg0LDEwIEBAIGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0
SFRNTFRleHRBcmVhRWxlbWVudExhc3RDaGFuZ2VXYXNVc2VyRWRpdChXS0J1bmRsZU5vZGVICiAg
ICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxUZXh0QXJlYUVsZW1lbnRIYW5kbGVSZWYpLT5o
dG1sVGV4dEFyZWFFbGVtZW50TGFzdENoYW5nZVdhc1VzZXJFZGl0KCk7CiB9CiAKLVdLQnVuZGxl
Tm9kZUhhbmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTFRhYmxlQ2VsbEVsZW1lbnRD
ZWxsQWJvdmUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxUYWJsZUNlbGxFbGVtZW50SGFuZGxl
UmVmKQorV0tCdW5kbGVOb2RlSGFuZGxlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlIVE1MVGFi
bGVDZWxsRWxlbWVudENlbGxBYm92ZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYpCiB7Ci0gICAgUmVm
UHRyPFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlPiBub2RlSGFuZGxlID0gV2ViS2l0
Ojp0b0ltcGwoaHRtbFRhYmxlQ2VsbEVsZW1lbnRIYW5kbGVSZWYpLT5odG1sVGFibGVDZWxsRWxl
bWVudENlbGxBYm92ZSgpOwotICAgIHJldHVybiB0b0FQSShub2RlSGFuZGxlLmxlYWtSZWYoKSk7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFdL
QnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weURvY3VtZW50RnJhbWUoV0tCdW5k
bGVOb2RlSGFuZGxlUmVmIGRvY3VtZW50SGFuZGxlUmVmKQpAQCAtMTk0LDggKzE5OCw4IEBAIFdL
QnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weURvY3VtZW50RnJhbWUoV0tCdW5k
bGVOb2RlSGFuZGxlUmVmIGRvY3VtCiAKIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFu
ZGxlQ29weUhUTUxGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVm
IGh0bWxGcmFtZUVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViRnJh
bWU+IGZyYW1lID0gV2ViS2l0Ojp0b0ltcGwoaHRtbEZyYW1lRWxlbWVudEhhbmRsZVJlZiktPmh0
bWxGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUoKTsKLSAgICByZXR1cm4gdG9BUEkoZnJhbWUubGVh
a1JlZigpKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAogV0tCdW5kbGVGcmFtZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTElGcmFtZUVs
ZW1lbnRDb250ZW50RnJhbWUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJRnJhbWVFbGVtZW50
SGFuZGxlUmVmKQpAQCAtMjA0LDIyICsyMDgsMTggQEAgV0tCdW5kbGVGcmFtZVJlZiBXS0J1bmRs
ZU5vZGVIYW5kbGVDb3B5SFRNTElGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUoV0tCdW5kbGVOb2QK
ICAgICByZXR1cm4gdG9BUEkoZnJhbWUubGVha1JlZigpKTsKIH0KIAotLy8gRGVwcmVjYXRlZCAt
IHVzZSBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZChXS0J1
bmRsZU5vZGVIYW5kbGVSZWYpLgogYm9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRF
bGVtZW50QXV0b2ZpbGxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhh
bmRsZVJlZikKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhh
bmRsZVJlZiktPmlzSFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoKTsKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIERlcHJlY2F0ZWQgLSB1c2Ug
V0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5kbGVO
b2RlSGFuZGxlUmVmLCBib29sKS4KLXZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0
RWxlbWVudEF1dG9maWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRI
YW5kbGVSZWYsIGJvb2wgZmlsbGVkKQordm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5w
dXRFbGVtZW50QXV0b2ZpbGxlZChXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaGFuZGxlLCBib29sIGVu
YWJsZWQpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZikt
PnNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKGZpbGxlZCk7CisgICAgV0tCdW5kbGVOb2Rl
SGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoaGFuZGxlLCBlbmFibGVkKTsKIH0K
IAotLy8gRGVwcmVjYXRlZCAtIHVzZSBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVt
ZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkV2l0aEJ1dHRvblR5cGUoV0tCdW5kbGVOb2RlSGFuZGxl
UmVmLCBXS0F1dG9GaWxsQnV0dG9uVHlwZSkuCi12b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhU
TUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVm
IGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYsIGJvb2wgZW5hYmxlZCkKK3ZvaWQgV0tCdW5kbGVO
b2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5hYmxlZChXS0J1bmRs
ZU5vZGVIYW5kbGVSZWYsIGJvb2wpCiB7Ci0gICAgV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBl
IGF1dG9GaWxsQnV0dG9uVHlwZSA9IGVuYWJsZWQgPyBXZWJDb3JlOjpBdXRvRmlsbEJ1dHRvblR5
cGU6OkNyZWRlbnRpYWxzIDogV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlOjpOb25lOwotCi0g
ICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1
dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoYXV0b0ZpbGxCdXR0b25UeXBlKTsKKyAgICAv
LyBGSVhNRTogV291bGQgcHV0IEFTU0VSVF9OT1RfUkVBQ0hFRCgpIGhlcmUgYnV0IHNvbWUgY29t
cGlsZXJzIGFyZSB3YXJuaW5nIHRoZSBmdW5jdGlvbiBpcyAibm9yZXR1cm4iLgogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5n
Q29udHJvbGxlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29j
b2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCmluZGV4IDk1ZjE2M2MxZTExYjAxZDA3
MjAzZTQ2YWI1Y2NhYjAwYzllMmE3MDIuLjY2ZTNkOTk1N2VkYjlhZjMzNjQ5ODMxNDRlNzRhMTAz
YzI4ZWRlM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
Y29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KQEAg
LTE3NiwxNSArMTc2LDEzIEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZW1v
dmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBTdHJpCiAKIFdlYkNvcmU6OkF0
dHJpYnV0ZWRTdHJpbmcgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRTdWJz
dHJpbmdCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYgZW5kKQogewotICAgIGF1dG8gc3Rh
cnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsKLSAgICBhdXRvIGVuZEJvdW5k
YXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnkgfHwg
IWVuZEJvdW5kYXJ5KQorICAgIGF1dG8gZW50aXJlUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3Rh
cnQsIGVuZCk7CisgICAgaWYgKCFlbnRpcmVSYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICBhdXRvIGVudGlyZVJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqc3RhcnRCb3VuZGFyeSwgKmVuZEJv
dW5kYXJ5IH07CiAKICAgICBhdXRvIHN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1
dGVkU3RyaW5nIGFsbG9jXSBpbml0XSk7CiAKLSAgICBmb3IgKFRleHRJdGVyYXRvciBpdChlbnRp
cmVSYW5nZSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVy
YXRvciBpdCgqZW50aXJlUmFuZ2UpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CiAgICAg
ICAgIGlmICghaXQudGV4dCgpLmxlbmd0aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIFtzdHJpbmcgYXBwZW5kQXR0cmlidXRlZFN0cmluZzphZG9wdE5TKFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzppdC50ZXh0KCkuY3JlYXRlTlNTdHJpbmdXaXRo
b3V0Q29weWluZygpLmdldCgpXSkuZ2V0KCldOwpAQCAtMTkyLDcgKzE5MCw3IEBAIFdlYkNvcmU6
OkF0dHJpYnV0ZWRTdHJpbmcgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRT
dWJzdHJpbmdCZXR3ZWVuCiAgICAgICAgIGZvciAoYXV0byogbWFya2VyIDogcmFuZ2Uuc3RhcnQu
ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UocmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpQbGF0Zm9ybVRleHRDaGVja2luZykpIHsKICAgICAgICAgICAgIGF1dG8mIGRhdGEgPSBXVEY6
OmdldDxEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXItPmRh
dGEoKSk7CiAgICAgICAgICAgICBhdXRvIHN1YnJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdl
KHJhbmdlLCB7IG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbWFya2VyLT5lbmRPZmZzZXQoKSAtIG1h
cmtlci0+c3RhcnRPZmZzZXQoKSB9KTsKLSAgICAgICAgICAgIFtzdHJpbmcgYWRkQXR0cmlidXRl
OmRhdGEua2V5IHZhbHVlOmRhdGEudmFsdWUgcmFuZ2U6Y2hhcmFjdGVyUmFuZ2UoZW50aXJlUmFu
Z2UsIHN1YnJhbmdlKV07CisgICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZTpkYXRhLmtl
eSB2YWx1ZTpkYXRhLnZhbHVlIHJhbmdlOmNoYXJhY3RlclJhbmdlKCplbnRpcmVSYW5nZSwgc3Vi
cmFuZ2UpXTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAppbmRleCA0NjkyNTUzYTBhODA5
ZGQzZjcwMzk1M2UzNThkZjMzNDYyMmVjNTllLi44MTk4MjM1MGVlOTkzMDhjODFiNTUyYWI1NTg4
YTRkOGM4Zjc5Y2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9nbGliL1dlYlBhZ2VHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSW5wdXRFbGVtZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGV4dEFyZWFFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9WaXNpYmxlUG9zaXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Zpc2libGVV
bml0cy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQppbmRleCA2YjM1NWQxYTZkMTk3M2FiYmI5ODc0ZDBiNDdhYjhlNDI4NDEyMzk0
Li41ZmVhMmIxM2Y2NzU4NzJhNTY3ZDJhNGQ3NjM3Y2RlODhmNmRjYjdkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMTE0
LDYgKzExNCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9Qb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUXVpcmtzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1JlbmRlckJsb2NrLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckltYWdlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CkBAIC0xMzc0LDggKzEzNzUsNyBAQCB2b2lkIFdlYlBh
Z2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgR2VzdHVyZVR5cGUg
Z2VzdHVyZVR5cGUsCiAgICAgT3B0aW9uU2V0PFNlbGVjdGlvbkZsYWdzPiBmbGFnczsKICAgICBH
ZXN0dXJlUmVjb2duaXplclN0YXRlIHdrR2VzdHVyZVN0YXRlID0gc3RhdGljX2Nhc3Q8R2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKTsKICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0
PEdlc3R1cmVUeXBlPihnZXN0dXJlVHlwZSkpIHsKLSAgICBjYXNlIEdlc3R1cmVUeXBlOjpQaHJh
c2VCb3VuZGFyeToKLSAgICB7CisgICAgY2FzZSBHZXN0dXJlVHlwZTo6UGhyYXNlQm91bmRhcnk6
IHsKICAgICAgICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGF1dG8gbWFya2VkUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5j
b21wb3NpdGlvblJhbmdlKCk7CkBAIC00MjY1LDEyICs0MjY1LDExIEBAIHZvaWQgV2ViUGFnZTo6
cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVl
c3QgcmVxdWVzCiAgICAgfQogCiAgICAgYXV0byBtYWtlU3RyaW5nID0gW10gKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kKSAtPiBBdHRyaWJ1
dGVkU3RyaW5nIHsKLSAgICAgICAgYXV0byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9p
bnQoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIGF1dG8gZW5kQm91bmRhcnkgPSBt
YWtlQm91bmRhcnlQb2ludChlbmQuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIGlmICghc3Rh
cnRCb3VuZGFyeSB8fCAhZW5kQm91bmRhcnkgfHwgKnN0YXJ0Qm91bmRhcnkgPT0gKmVuZEJvdW5k
YXJ5KQorICAgICAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwor
ICAgICAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZXR1cm4gZWRpdGluZy1v
ZmZzZXQtY29tcGF0aWJsZSBhdHRyaWJ1dGVkIHN0cmluZ3MgaWYgdGhhdCBvcHRpb24gaXMgcmVx
dWVzdGVkLgotICAgICAgICByZXR1cm4geyBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFN0cmluZzpXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3Bh
Y2UoeyBXVEZNb3ZlKCpzdGFydEJvdW5kYXJ5KSwgV1RGTW92ZSgqZW5kQm91bmRhcnkpIH0pXSks
IG5pbCB9OworICAgICAgICByZXR1cm4geyBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFN0cmluZzpXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3Bh
Y2UoKnJhbmdlKV0pLCBuaWwgfTsKICAgICB9OwogCiAgICAgY29udGV4dC5jb250ZXh0QmVmb3Jl
ID0gbWFrZVN0cmluZyhjb250ZXh0QmVmb3JlU3RhcnQsIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJ
blNlbGVjdGlvbik7CkBAIC00MzA1LDggKzQzMDQsOCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RE
b2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVl
cwogICAgICAgICAgICAgY29udGV4dC50ZXh0UmVjdHMgPSBjaGFyYWN0ZXJSZWN0c0ZvclJhbmdl
KCpjb250ZXh0UmFuZ2UsIDApOwogICAgIH0gZWxzZSBpZiAod2FudHNNYXJrZWRUZXh0UmVjdHMg
JiYgY29tcG9zaXRpb25SYW5nZSkgewogICAgICAgICB1bnNpZ25lZCBjb21wb3NpdGlvblN0YXJ0
T2Zmc2V0ID0gMDsKLSAgICAgICAgaWYgKGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChj
b250ZXh0QmVmb3JlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkpCi0gICAgICAgICAgICBjb21wb3Np
dGlvblN0YXJ0T2Zmc2V0ID0gV2ViQ29yZTo6cGxhaW5UZXh0KHsgV1RGTW92ZSgqc3RhcnQpLCBj
b21wb3NpdGlvblJhbmdlLT5zdGFydCB9KS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGF1dG8gcmFu
Z2UgPSBtYWtlU2ltcGxlUmFuZ2UoY29udGV4dEJlZm9yZVN0YXJ0LCBjb21wb3NpdGlvblJhbmdl
LT5zdGFydCkpCisgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVy
Q291bnQoKnJhbmdlKTsKICAgICAgICAgY29udGV4dC50ZXh0UmVjdHMgPSBjaGFyYWN0ZXJSZWN0
c0ZvclJhbmdlKCpjb21wb3NpdGlvblJhbmdlLCBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0KTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KaW5kZXggYWRiOTkyM2Y1MTFkM2FkNmY1MjQ5ODJmOGZhNTJmMzAwYzhjM2JmYy4u
Y2ExYzk1ZTQ4NDdiNzQ1ZWY0YjJjZDkyNWQzZTA4NmEyNzNmOWM5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTMzOCw3
ICszMzgsNyBAQCB2b2lkIFdlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJS
YW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFt
ZSwgZWRpdGluZ1JhbmdlKTsKKyAgICBhdXRvIHJhbmdlID0gRWRpdGluZ1JhbmdlOjp0b1Jhbmdl
KGZyYW1lLCBlZGl0aW5nUmFuZ2UpOwogICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VD
YWxsYmFjayh7IH0sIEVkaXRpbmdSYW5nZSgpLCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQwMTQ0YjU5MWMxYjQxMDA4NWY2YjY2NWVkNTll
MDRlZmM0NzdkZDIuLmM3YzZjYzI0ZTY4MWFkY2RhNzYyYjJhNWU0Yjc1YjUyZDU1YjU5NmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRMZWdhY3kueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg4LDcgKzE4OCw2IEBACiAJCTVDN0U3ODc2MjJEOTVG
RTIwMDA2QTIzMCAvKiBVbmlmaWVkU291cmNlMTEtbW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzdFNzg2OTIyRDk1RkUyMDAwNkEyMzAgLyogVW5p
ZmllZFNvdXJjZTExLW1tLm1tICovOyB9OwogCQk1Qzk3RUY2MzIzNDJDNTM0MDA2MDIwRDQgLyog
VW5pZmllZFNvdXJjZTE5LW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUM5N0VGNjEyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRTb3VyY2UxOS1t
bS5tbSAqLzsgfTsKIAkJNUM5N0VGNjQyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRTb3VyY2Uy
MC1tbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
OTdFRjYyMjM0MkM1MzQwMDYwMjBENCAvKiBVbmlmaWVkU291cmNlMjAtbW0ubW0gKi87IH07Ci0J
CTVDOUE0RTUzMjJERTQ2MjcwMDdEQjM1MyAvKiBET01VSUtpdEV4dGVuc2lvbnMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Q0MzYzNzFENTdBQkVF
MDBBQjg1RUEgLyogRE9NVUlLaXRFeHRlbnNpb25zLm1tICovOyB9OwogCQk1QzlEOTI1QTIyRDdF
OEFEMDA4RTkyNjYgLyogU291cmNlcy50eHQgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUQ5MjU4MjJEN0U4QUQwMDhFOTI2NiAvKiBTb3VyY2VzLnR4
dCAqLzsgfTsKIAkJNUM5RDkyNUIyMkQ3RThBRDAwOEU5MjY2IC8qIFNvdXJjZXNDb2NvYS50eHQg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUQ5MjU5
MjJEN0U4QUQwMDhFOTI2NiAvKiBTb3VyY2VzQ29jb2EudHh0ICovOyB9OwogCQk1QzlFRjJGNTIx
RjA2MUJFMDAzQkRDNTYgLyogUGFnZVN0b3JhZ2VTZXNzaW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUVGMkY0MjFGMDYxQkUwMDNC
REM1NiAvKiBQYWdlU3RvcmFnZVNlc3Npb25Qcm92aWRlci5oICovOyB9OwpAQCAtMzQwMCw3ICsz
Mzk5LDYgQEAKIAkJCQkxQTkxMTlGNjFEQjA0NzBBMDA4N0QxRkQgLyogQmFja0ZvcndhcmRMaXN0
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2MDUxOTExNzUwMkE1RDAwQkM2MkY1IC8qIEJpbmFy
eVByb3BlcnR5TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCODI5NThENDEzMjcwN0QwMDAw
RDBFNzkgLyogQ29ycmVjdGlvblBhbmVsLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNUM5QTRFNTMy
MkRFNDYyNzAwN0RCMzUzIC8qIERPTVVJS2l0RXh0ZW5zaW9ucy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTFBNjA1MTkzMTc1MDJBNUQwMEJDNjJGNSAvKiBIaXN0b3J5UHJvcGVydHlMaXN0Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUE4REVENTEwRUU4OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5ldHNj
YXBlUGx1Z2luU3RyZWFtLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM2NDAwNkUyMzk5NkU4MTAw
MUUxODVFIC8qIEluUHJvY2Vzc0lEQlNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQppbmRleCA5OTM1MDA0MTRmZGExN2IyNmNjNzgyOTk4NWYyYThhNDkzNjE0OWU0Li4y
NWFkN2RlNzIxOTRlZmQ2MWM4N2E5N2ZhNzdiZDViOGRkNTJmZDBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lm1tCkBAIC0xMDI1LDExICsxMDI1LDEwIEBAIHN0YXRpYyBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiBjb3JlKE5TQXJyYXkgKmluY29taW5nUmVzdWx0cywgT3B0aW9uU2V0PFRleHRDCiBzdGF0
aWMgTlNVSW50ZWdlciBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0g
c2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRCb3VuZGFy
eSA9IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIHBhcmFncmFw
aFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFy
dCkpOwotICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAhcGFyYWdyYXBoU3RhcnQp
CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVj
dGlvblN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQpOworICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNl
bGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KCpyYW5n
ZSk7CiB9CiAKIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIE9wdGlvblNldDxUZXh0Q2hlY2tp
bmdUeXBlPiBjb3JlQ2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbikKQEAgLTExMTAsOCArMTEwOSw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpy
ZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
CiAgICAgbV9sYXN0U2VsZWN0aW9uRm9yUmVxdWVzdGVkQ2FuZGlkYXRlcyA9IHNlbGVjdGlvbjsK
IAogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0g
ICAgYXV0byBzZWxlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gY2hhcmFjdGVyQ291bnQo
eyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCkpLCAq
bWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pOwotICAgIGF1dG8gc2VsZWN0aW9u
TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3Rh
cnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgfSk7CisgICAg
YXV0byBzZWxlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gY2hhcmFjdGVyQ291bnQoKm1h
a2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9u
U3RhcnQpKTsKKyAgICBhdXRvIHNlbGVjdGlvbkxlbmd0aCA9IGNoYXJhY3RlckNvdW50KCptYWtl
U2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKICAg
ICBhdXRvIGNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QgPSBmcmFtZS0+ZWRpdG9yKCku
Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpOwogICAgIFN0cmluZyBjb250ZXh0Rm9y
Q2FuZGlkYXRlUmVxZXVlc3QgPSBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0ID8gcGxh
aW5UZXh0KCpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KSA6IFN0cmluZygpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBiMzIwOWRi
N2ViZTQ0MzliYjM2NmYwZmE1ODI2MTMwMTE1ZTkzZGZhLi4zNGU2OGYwYzNkNTcyYmE5ZTQzYWU1
MTlmOTNjNGI4YWNlMGNlODdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KQEAgLTgzNyw3ICs4MzcsNyBAQCAtIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5nZSByYW5nZUlzUmVsYXRpdmVUbzooVwog
ICAgIGlmICghcGFyYWdyYXBoU3RhcnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
YXV0byBzY29wZUVuZCA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhwYXJhZ3JhcGhT
dGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKS5lbmQ7CisgICAgYXV0byBz
Y29wZUVuZCA9IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMocGFyYWdyYXBoU3Rh
cnQtPmNvbnRhaW5lci0+dHJlZVNjb3BlKCkucm9vdE5vZGUoKSk7CiAgICAgcmV0dXJuIGNyZWF0
ZUxpdmVSYW5nZShXZWJDb3JlOjpyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoeyBXVEZNb3ZlKCpwYXJh
Z3JhcGhTdGFydCksIFdURk1vdmUoc2NvcGVFbmQpIH0sIHJhbmdlKSk7CiB9CiAKQEAgLTE1NDAs
MTIgKzE1NDAsMjAgQEAgLSAoTlNTdHJpbmcgKil3b3JkSW5SYW5nZTooRE9NUmFuZ2UgKilyYW5n
ZQogCiAtIChpbnQpd29yZE9mZnNldEluUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICBy
ZXR1cm4gY29yZShzZWxmKS0+c2VsZWN0aW9uKCkud29yZE9mZnNldEluUmFuZ2UoY29yZShyYW5n
ZSkpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGF1dG8gc2Vs
ZWN0aW9uID0gY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKCFz
ZWxlY3Rpb24uaXNDYXJldCgpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvLyBGSVhNRTog
VGhpcyB3aWxsIG9ubHkgd29yayBpbiBjYXNlcyB3aGVyZSB0aGUgc2VsZWN0aW9uIHJlbWFpbnMg
aW4gdGhlIHNhbWUgbm9kZSBhZnRlciBpdCBpcyBleHBhbmRlZC4KKyAgICByZXR1cm4gc3RkOjpt
YXg8aW50PigwLCBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0g
Y29yZShyYW5nZSktPnN0YXJ0T2Zmc2V0KCkpOwogfQogCiAtIChCT09MKXNwYWNlRm9sbG93c1dv
cmRJblJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgcmV0dXJuIGNvcmUoc2VsZiktPnNl
bGVjdGlvbigpLnNwYWNlRm9sbG93c1dvcmRJblJhbmdlKGNvcmUocmFuZ2UpKTsKKyAgICByZXR1
cm4gcmFuZ2UgJiYgaXNTcGFjZU9yTmV3bGluZShXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24oY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1ha2VTaW1wbGVSYW5nZShjb3JlKHJhbmdlKSktPmVu
ZCkpLmNoYXJhY3RlckFmdGVyKCkpOwogfQogCiAtIChOU0FycmF5ICopd29yZHNJbkN1cnJlbnRQ
YXJhZ3JhcGgK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405427</attachid>
            <date>2020-07-28 16:48:07 -0700</date>
            <delta_ts>2020-07-29 09:36:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214882-20200728164807.patch</filename>
            <type>text/plain</type>
            <size>111797</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MDIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWVjNzc5MDUwZmI0ODlm
MWE4MThkMDRiZDVlOWIzMGQyMDhiNmVjMS4uMDQ1ZDliNzhjMmMyMjk2MzhlNDdkOGMwNzgyZGRl
NDMzMGM4ZjRiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NiBAQAorMjAyMC0wNy0yOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSByYW5nZSBpZGlv
bXMgYW5kIG90aGVyIGNoYW5nZXMgdG8gcHJlcGFyZSB0aGUgd2F5IGZvciBtb3JlIHJlZHVjdGlv
biBpbiBsaXZlIHJhbmdlIHVzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE0ODgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dDo6QWNjZXNzaWJpbGl0eVJlcGxhY2Vk
VGV4dCk6IENhbGwgdGhlCisgICAgICAgIFZpc2libGVQb3NpdGlvbiB2ZXJzaW9ucyBvZiBzdGFy
dCBhbmQgZW5kIGluc3RlYWQgb2YgY29udmVydGluZyB0byBQb3NpdGlvbgorICAgICAgICBhbmQg
dGhlbiBiYWNrIHRvIFZpc2libGVQb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnJhbmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UpOiBTaW1wbGlmeSB3aXRoIG1ha2VTaW1w
bGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNl
dEZvclBvaW50KTogRGl0dG8uCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6dmlz
aWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGlvbnMgY29uc3QpOgorICAgICAgICBV
cGRhdGUgaWRpb20gZm9yIGNyZWF0aW5nIFZpc2libGVQb3NpdGlvblJhbmdlIHNpbmNlIGl0J3Mg
anVzdCBhIHN0cnVjdCBub3cKKyAgICAgICAgd2l0aG91dCBleHBsaWNpdCBjb25zdHJ1Y3RvcnMu
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpwb3NpdGlvbk9mTGVmdFdv
cmQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6
OnBvc2l0aW9uT2ZSaWdodFdvcmQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmxlZnRMaW5lVmlzaWJsZVBvc2l0aW9uUmFuZ2UgY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnJpZ2h0TGluZVZp
c2libGVQb3NpdGlvblJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzZW50ZW5jZUZvclBvc2l0aW9uIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJhZ3JhcGhGb3JQb3NpdGlvbiBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c3R5
bGVSYW5nZUZvclBvc2l0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlIGNvbnN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaW5lUmFuZ2VGb3JQ
b3NpdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Omxlbmd0aEZvclZpc2libGVQb3NpdGlvblJhbmdl
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpu
ZXh0U2VudGVuY2VFbmRQb3NpdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24gY29uc3Qp
OiBEaXR0by4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdElu
dGVyZmFjZS5oOiBNb3ZlZCBWaXNpYmxlUG9zaXRpb25SYW5nZQorICAgICAgICB0byBWaXNpYmxl
UG9zaXRpb24uaCBmb3Igd2lkZXIgdXNlLiBBbHNvIHJlbW92ZWQgY29uc3RydWN0b3JzLgorCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1l
bnQgY29uc3QpOiBTaW1wbGlmeSB3aXRoCisgICAgICAgIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmxpbmtDbGlja1BvaW50KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjbGlj
a1BvaW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZSBjb25zdCk6IFVwZGF0ZWQKKyAgICAgICAgZm9yIHJl
bW92YWwgb2YgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxp
bmUgY29uc3QpOgorICAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgZXhwbGljaXQgY29udmVyc2lv
biB0byBWaXNpYmxlUG9zaXRpb25SYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAodmlzaWJsZVBv
c2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UpOiBBZGRlZCwgcmVwbGFjaW5nIHNlcGFyYXRl
IGZ1bmN0aW9ucworICAgICAgICBmb3Igc3RhcnQgYW5kIGVuZC4KKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2Vy
UmFuZ2U6XSk6CisgICAgICAgIFNpbXBsaWZ5IHVzaW5nIHZpc2libGVQb3NpdGlvblJhbmdlRm9y
VGV4dE1hcmtlclJhbmdlLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDogQWRkZWQgaW5j
bHVkZSBvZiAiUmFuZ2UuaCIsIG1heSBub3QgYmUgbmVlZGVkIHJpZ2h0IG5vdywKKyAgICAgICAg
YnV0IGhpZ2hseSBsaWtlbHkgdG8gYmUgbmVlZGVkIGFmdGVyIGZ1dHVyZSBsaXZlIHJhbmdlIHdv
cmsuCisgICAgICAgICogZG9tL05vZGUuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgIlJhbmdlLmgi
LgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmg6IEFkZGVkIFBvc2l0aW9uUmFuZ2UuIFRoaXMg
d2lsbCBiZSBhIG1vcmUgZWZmaWNpZW50CisgICAgICAgIGFsdGVybmF0aXZlIHRvIFNpbXBsZVJh
bmdlIHRoYXQgY2FuIGF2b2lkIGNvbXB1dGluZyBub2RlIG9mZmV0cyBmb3IgcG9zaXRpb25zCisg
ICAgICAgIGJlZm9yZSBhbmQgYWZ0ZXIgYW5jaG9yIG5vZGVzIGluIHNvbWUgY2FzZXMuIE5vdCB1
c2VkIHlldC4KKworICAgICAgICAqIGRvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHA6IFJlbW92ZWQg
aW5jbHVkZSBvZiAiUmFuZ2UuaCIuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuaDogRXhwb3J0IG1h
a2VTaW1wbGVSYW5nZSBvdmVybG9hZCBub3cgdXNlZCBvdXRzaWRlIFdlYkNvcmUuCisKKyAgICAg
ICAgKiBkb20vU2ltcGxlUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZVJh
bmdlKTogQWRkZWQgb3ZlcmxvYWRzIGZvciByYW5nZXMgdGhhdCBjb25zaXN0IG9mIGp1c3QKKyAg
ICAgICAgYSBzaW5nbGUgYm91bmRhcnkgcG9pbnQsIHNvIHRoZSBhcmd1bWVudCBkb2VzIG5vdCBo
YXZlIHRvIGJlIHBhc3NlZCB0d2ljZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2
ZUFuY2VzdG9yKTogQWRkZWQgb3ZlcmxvYWQgc28gY2FsbGVyIGNhbiBqdXN0IHBhc3MKKyAgICAg
ICAgYSBzaW1wbGUgcmFuZ2UgcmF0aGVyIHRoYW4gcGFzc2luZyB0d28gYm91bmRhcnkgcG9pbnQg
Y29udGFpbmVyIG5vZGVzLgorCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6IEFkZGVkIG1h
a2VTaW1wbGVSYW5nZSBvdmVybG9hZHMgdGhhdCB0YWtlIG9uZSBvciBtb3JlCisgICAgICAgIGFy
Z3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byBtYWtlQm91bmRhcnlQb2ludCBvciBhY3R1YWwg
Ym91bmRhcnkgcG9pbnRzLgorCisgICAgICAgICogZG9tL1N0YXRpY1JhbmdlLmNwcDogUmVtb3Zl
ZCBpbmNsdWRlIG9mICJSYW5nZS5oIi4KKworICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFm
dGVyQ29tbWFuZCk6CisgICAgICAgIFNpbXBsaWZ5IHdpdGggbWFrZVNpbXBsZVJhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNP
blRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6CisgICAgICAgIERpdHRvLgorICAgICAgICAqIGVk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJpbmdGb3JWaXNp
YmxlUG9zaXRpb25JbmRleFJhbmdlKTogVXBkYXRlZCBmb3IgcmVtb3ZhbCBvZgorICAgICAgICBW
aXNpYmxlUG9zaXRpb25SYW5nZSBjb25zdHJ1Y3RvcjsgYWxzbyB1c2UgbW92ZSB0byByZWR1Y2Ug
cmVmZXJlbmNlIGNvdW50CisgICAgICAgIGNodXJuIGEgdGlueSBiaXQuCisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOiBTaW1wbGlmeSB3aXRo
IG1ha2VTaW1wbGVSYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHA6IEFkZGVkIGluY2x1ZGUgb2YgIlJhbmdlLmgiLCBtYXkgbm90IGJlIG5lZWRlZCBu
b3csCisgICAgICAgIGJ1dCBoaWdobHkgbGlrZWx5IHRvIGJlIG5lZWRlZCBhZnRlciBmdXR1cmUg
bGl2ZSByYW5nZSB3b3JrLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKTogU2ltcGxpZnkgdXNpbmcgbWFr
ZVNpbXBsZVJhbmdlIGFuZAorICAgICAgICBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250
ZW50cy4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2VsZWN0ZWRUZXh0IGNvbnN0KTogU2ltcGxpZnkgdXNpbmcgVmlzaWJsZVNlbGVj
dGlvbjo6Zmlyc3RSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFNlbGVjdGlvbik6IFNp
bXBsaWZ5IHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKTogU2ltcGxpZnkgd2l0aCB0
aGUgbmV3IG92ZXJsb2FkCisgICAgICAgIG9mIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yLgorCisg
ICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6d29yZE9mZnNldEluUmFuZ2UgY29uc3QpOiBEZWxldGVkLiBNb3ZlZCB0
aGUgY29kZQorICAgICAgICBpbnRvIHRoZSBpT1Mtc3BlY2lmaWMgcGFydCBvZiBXZWJLaXRMZWdh
Y3kgV2ViRnJhbWUuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c3BhY2VGb2xs
b3dzV29yZEluUmFuZ2UgY29uc3QpOiBEZWxldGVkLiBNb3ZlZCB0aGUKKyAgICAgICAgY29kZSBp
bnRvIHRoZSBpT1Mtc3BlY2lmaWMgcGFydCBvZiBXZWJLaXRMZWdhY3kgV2ViRnJhbWUuCisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0IGNv
bnN0KTogTWVyZ2VkIGluIHdpdGgKKyAgICAgICAgYWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0
YXJ0LgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmFjdHVhbFNlbGVjdGlvbkF0
U2VudGVuY2VTdGFydCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUgZGVsZXRpb24uCisKKyAgICAgICAgKiBl
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGg6Om9mZnNldFRvIGNvbnN0KTogU2ltcGxpZnkgd2l0aCBtYWtlU2ltcGxl
UmFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcjo6UGFyYWdyYXBo
Q29udGVudEl0ZXJhdG9yKTogU2ltcGxpZnkgd2l0aAorICAgICAgICBtYWtlU2ltcGxlUmFuZ2Uu
CisKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHlwaW5nQ29tbWFuZDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0
aW9uKTogUGFzcworICAgICAgICB2aXNpYmxlU3RhcnQvRW5kIGluc3RlYWQgb2YgY29udmVydGlu
ZyB0byBQb3NpdGlvbiBhbmQgYmFjayB0byBWaXNpYmxlUG9zaXRpb24uCisKKyAgICAgICAgKiBl
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxl
UmFuZ2UpOiBBZGRlZC4gQ29udmVydHMgYSBWaXNpYmxlUG9zaXRpb25SYW5nZSBpbnRvCisgICAg
ICAgIGEgU2ltcGxlUmFuZ2UuCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaDog
TW92ZWQgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgaGVyZS4KKworICAgICAgICAqIGVkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpm
aXJzdFJhbmdlIGNvbnN0KTogU2ltcGxpZnkgdXNpbmcgbWFrZVNpbXBsZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UgY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTZWFyY2hSYW5nZSk6IERlbGV0ZWQuIFRoaXMg
d2FzIGNvbmZ1c2luZ2x5IG5hbWVkIGdpdmVuIHRoYXQKKyAgICAgICAgaXQgd2FzIG9ubHkgdXNl
ZCBpbiBhcHBlbmRUcmFpbGluZ1doaXRlc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxl
U2VsZWN0aW9uOjphcHBlbmRUcmFpbGluZ1doaXRlc3BhY2UpOiBNZXJnZWQgbWFrZVNlYXJjaFJh
bmdlCisgICAgICAgIGluIGhlcmUgYW5kIHNpbXBsaWZpZWQgdXNpbmcgbWFrZVNpbXBsZVJhbmdl
LgorCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmg6IEFkZGVkIGNvbnZlcnNp
b24gdG8gVmlzaWJsZVBvc2l0aW9uUmFuZ2UuCisgICAgICAgIFByZXZpb3VzbHkgdGhpcyB3YXMg
aW1wbGVtZW50ZWQgYXMgYSBjb25zdHJ1Y3RvciBmb3IgVmlzaWJsZVBvc2l0aW9uUmFuZ2UsCisg
ICAgICAgIGJ1dCB0aGF0IHdhcyBhIGxheWVyaW5nIGludmVyc2lvbiBzaW5jZSB0aGlzIGlzIGJ1
aWx0IG9uIHRvcCBvZiBWaXNpYmxlUG9zaXRpb24uCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2li
bGVVbml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMp
OiBTaW1wbGlmaWVkIHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OmNo
YXJhY3RlcnNBcm91bmRQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6d29yZFJh
bmdlRnJvbVBvc2l0aW9uKTogUmVtb3ZlZCBhbiB1bmhlbHBmdWwgY29tbWVudC4KKyAgICAgICAg
KFdlYkNvcmU6OmNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbik6IERpdHRvLgorCisgICAg
ICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2ViQ29yZTo6
ZGV0ZWN0SXRlbSk6IFNpbXBsaWZ5IHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OnNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyk6IFJlbW92ZWQgb3V0
IGFyZ3VtZW50CisgICAgICAgIGFib3V0IG1vZGlmeWluZyB0aGUgRE9NLiBUaGlzIHdhcyB1c2Vk
IHRvIHdvcmsgYXJvdW5kIGEgcHJvYmxlbSBjYXVzZWQgYnkKKyAgICAgICAgdXNpbmcgbGl2ZSBy
YW5nZXMuIFRoZSBwcm9ibGVtIG5vIGxvbmdlciBleGlzdHMgYmVjYXVzZSB0aGUgY29kZSBkb2Vz
IG5vdAorICAgICAgICB1c2UgbGl2ZSByYW5nZXMgYW55IG1vcmUuCisgICAgICAgIChXZWJDb3Jl
OjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6IFJlbW92ZWQgdGhlIHdvcmth
cm91bmQuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbik6IFNp
bXBsaWZ5IHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rpb25h
cnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbTogQWRkZWQgaW5jbHVkZSBvZiAiUmFu
Z2UuaCIsIG1heQorICAgICAgICBub3QgYmUgbmVlZGVkIG5vdywgYnV0IGhpZ2hseSBsaWtlbHkg
dG8gYmUgbmVlZGVkIGFmdGVyIGZ1dHVyZSBsaXZlIHJhbmdlIHdvcmsuCisKKyAgICAgICAgKiBl
ZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mICJS
YW5nZS5oIi4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3ku
bW06CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlv
bik6IFNpbXBsaWZ5IHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRp
Y3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KTogRGl0dG8uCisKKyAgICAgICAg
KiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06IFJlbW92ZWQgaW5jbHVkZSBvZiAiUmFuZ2UuaCIu
CisKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6cmVuZGVyZWRUZXh0UmVzcGVjdGluZ1JhbmdlKTogU2ltcGxp
ZnkKKyAgICAgICAgdXNpbmcgbWFrZVNpbXBsZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy93
aW4vRWRpdG9yV2luLmNwcDogQWRkZWQgaW5jbHVkZSBvZiAiUmFuZ2UuaCIsIG1heSBub3QgYmUg
bmVlZGVkIG5vdywKKyAgICAgICAgYnV0IGhpZ2hseSBsaWtlbHkgdG8gYmUgbmVlZGVkIGFmdGVy
IGZ1dHVyZSBsaXZlIHJhbmdlIHdvcmsuCisKKyAgICAgICAgKiBodG1sL3NoYWRvdy9tYWMvSW1h
Z2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgIlJhbmdl
LmgiLgorCisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NU2VsZWN0aW9uOjphZGRSYW5nZSk6IENhbGwgc2V0U2VsZWN0aW9uIGluc3RlYWQgb2Yg
bW92ZVRvLgorICAgICAgICBObyBuZWVkIHRvIGhhdmUgdHdvIGZ1bmN0aW9ucyB0aGF0IGRvIHRo
ZSBzYW1lIHRoaW5nLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dGV4dERpc3RhbmNlKTogU2ltcGxpZnkgdXNpbmcgbWFrZVNpbXBsZVJhbmdl
LgorCisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
cmFuZ2VGb3JQb2ludCk6IFNpbXBsaWZ5IHVzaW5nIG1ha2VTaW1wbGVSYW5nZS4KKworICAgICAg
ICAqIHBhZ2UvVGV4dEluZGljYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjplc3RpbWF0ZWRC
YWNrZ3JvdW5kQ29sb3JGb3JSYW5nZSk6IFNpbXBsaWZ5IHVzaW5nIHRoZQorICAgICAgICBjb21t
b25JbmNsdXNpdmVBbmNlc3RvciBvdmVybG9hZCB0aGF0IHRha2VzIGEgcmFuZ2UuCisgICAgICAg
IChXZWJDb3JlOjppbml0aWFsaXplSW5kaWNhdG9yKTogRGl0dG8uCisKIDIwMjAtMDctMjggIE9y
aW9sIEJydWZhdSAgPG9icnVmYXVAaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWdyaWRdIEZp
eCAnYWxpZ24tY29udGVudCcgaW4gZ3JpZCBjb250YWluZXJzIHdpdGggc21hbGwgY29udGVudCBh
cmVhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGJkNDUxNTU2M2ZmY2ExNzYyMDA5MjMwMWI0MWI5ZGQwZDJlNTQ3YTYu
LjI5ZWIxZWEzNjlkZDNiMmMzY2MxMDhmOGM2YjA4YTg2MTYwYmJlYTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDIgQEAKKzIwMjAtMDctMjggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIEltcHJvdmUgcmFuZ2UgaWRpb21zIGFuZCBvdGhlciBjaGFuZ2VzIHRvIHByZXBh
cmUgdGhlIHdheSBmb3IgbW9yZSByZWR1Y3Rpb24gaW4gbGl2ZSByYW5nZSB1c2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDg4MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5vZGVIYW5kbGUuY3BwOgorICAgICAgICAoV0tCdW5k
bGVOb2RlSGFuZGxlR2V0UmVuZGVyUmVjdCk6IEVtcHRpZWQgb3V0IHRoaXMgdW51c2VkIGZ1bmN0
aW9uIGFuZCBhZGRlZAorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQuIExhdGVyLCB3ZSBjYW4g
ZGVsZXRlIHRoaXMgb25jZSB3ZSBkZWFsIHdpdGggYW55IGxpbmstdGltZQorICAgICAgICBkZXBl
bmRlbmNpZXMuIEkgYmVsaWV2ZSBTYWZhcmkgbWF5IGxpbmsgd2l0aCB0aGlzIGJ1dCBuZXZlciBj
YWxscyBpdC4KKyAgICAgICAgKFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlWaXNpYmxlUmFuZ2UpOiBE
aXR0by4KKyAgICAgICAgKFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRTcGVs
bGNoZWNrRW5hYmxlZCk6IERpdHRvLgorICAgICAgICAoV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRN
TElucHV0RWxlbWVudEF1dG9GaWxsZWQpOiBEaXR0by4KKyAgICAgICAgKFdLQnVuZGxlTm9kZUhh
bmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQpOiBEaXR0by4KKyAg
ICAgICAgKFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEF2YWls
YWJsZSk6IERpdHRvLgorICAgICAgICAoV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxl
bWVudEF1dG9GaWxsQnV0dG9uQm91bmRzKTogRGl0dG8uCisgICAgICAgIChXS0J1bmRsZU5vZGVI
YW5kbGVDb3B5SFRNTFRhYmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUpOiBEaXR0by4KKyAgICAgICAg
KFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlIVE1MRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKTogRGl0
dG8uCisgICAgICAgIChXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b2Zp
bGxlZCk6IERpdHRvLgorICAgICAgICAoV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxl
bWVudEF1dG9maWxsZWQpOiBEaXR0by4KKyAgICAgICAgKFdLQnVuZGxlTm9kZUhhbmRsZVNldEhU
TUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQpOiBEaXR0by4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW06
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVk
U3Vic3RyaW5nQmV0d2VlblBvc2l0aW9ucyk6CisgICAgICAgIFNpbXBsaWZ5IHdpdGggbWFrZVNp
bXBsZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdM
aWIuY3BwOiBBZGRlZCBpbmNsdWRlIG9mICJSYW5nZS5oIiwKKyAgICAgICAgbWF5IG5vdCBiZSBu
ZWVkZWQgcmlnaHQgbm93LCBidXQgaGlnaGx5IGxpa2VseSB0byBiZSBuZWVkZWQgYWZ0ZXIKKyAg
ICAgICAgZnV0dXJlIGxpdmUgcmFuZ2Ugd29yay4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW06IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpz
ZWxlY3RXaXRoR2VzdHVyZSk6IFNpbXBsaWZ5IHdpdGggbWFrZVNpbXBsZVJhbmdlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dCk6IERpdHRv
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFu
Z2VBc3luYyk6CisgICAgICAgIFVzZSBhdXRvIGZvciByYW5nZSB0byBwcmVwYXJlIGZvciBwb3Nz
aWJsZSBjaGFuZ2Ugb2YgdHlwZSBmcm9tIGxpdmUKKyAgICAgICAgcmFuZ2UgdG8gU2ltcGxlUmFu
Z2UuCisKIDIwMjAtMDctMjggIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5j
b20+CiAKICAgICAgICAgTWlncmF0ZSBBcHAtQm91bmQgRG9tYWlucyBjb2RlIGZyb20gV2ViS2l0
IEFkZGl0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwppbmRleCBlOWY5ZGQ4Njc0NTQ0ZjFlN2M4NDQ1
YzFlZjE0NjBhMzNlNzBjODJkLi5hZjc4YWY3N2JkYzlhNmY5NzdkYjIzZWI1ZjI1ZTBiNmUyODEw
ZDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA3LTI4ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBJbXByb3ZlIHJhbmdlIGlk
aW9tcyBhbmQgb3RoZXIgY2hhbmdlcyB0byBwcmVwYXJlIHRoZSB3YXkgZm9yIG1vcmUgcmVkdWN0
aW9uIGluIGxpdmUgcmFuZ2UgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTQ4ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBS
ZW1vdmVkIHNpbmdseS1idWlsZGluZworICAgICAgICBET01VSUtpdEV4dGVuc2lvbnMubW0sIHdo
aWNoIGFsc28gaXMgYnVpbHQgaW4gYSB1bmlmaWVkIHNvdXJjZSBmaWxlLgorICAgICAgICBXZSBk
b24ndCBuZWVkIHRvIGJ1aWxkIGl0IHR3aWNlLgorCiAyMDIwLTA3LTA1ICBDb21taXQgUXVldWUg
IDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRp
bmcgcjI2Mzk2MC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA3YmMzMzYzYWIyNjgy
ZGM4MTMxODc5YzY5ZWM4M2IwMmUwY2RhZTc1Li45MzQ0ZDMxMjJlZTgzZTZjMTc0NzM0MjZlNTAy
N2ZlMWQ2N2Q2NzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMjAtMDctMjggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IEltcHJvdmUgcmFuZ2UgaWRpb21zIGFuZCBvdGhlciBjaGFuZ2VzIHRvIHByZXBhcmUgdGhlIHdh
eSBmb3IgbW9yZSByZWR1Y3Rpb24gaW4gbGl2ZSByYW5nZSB1c2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDg4MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lm1tOgorICAgICAgICAoaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6
IFNpbXBsaWZ5IHdpdGggbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50
OjpyZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbik6IERpdHRvLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRUb0RPTVJhbmdl
OnJhbmdlSXNSZWxhdGl2ZVRvOl0pOiBHZXQgcmlkIG9mCisgICAgICAgIHVubmVjZXNzYXJ5IGNv
bnN0cnVjdGlvbiBvZiBhIHJhbmdlIGp1c3QgdG8gZ2V0IGFuIGVuZCBwb2ludC4KKyAgICAgICAg
KC1bV2ViRnJhbWUgd29yZE9mZnNldEluUmFuZ2U6XSk6IE1vdmVkIGxvZ2ljIGhlcmUgZnJvbSBW
aXNpYmxlU2VsZWN0aW9uLgorICAgICAgICAoLVtXZWJGcmFtZSBzcGFjZUZvbGxvd3NXb3JkSW5S
YW5nZTpdKTogRGl0dG8uCisKIDIwMjAtMDctMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gU3BlbGxDaGVja2VyLmgg
YW5kIFRleHRDaGVja2luZ0hlbHBlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAyMjQwNDI0MzA3NmRlNGFkMzA5ZWY5ZGQwNTNiOTcx
MzZhZDcxZGEyLi5iZWI3MjEyYzc1MzE3NjY4MDNhYWFlZWM2OWUyOTRiMjZiODAwMTAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTgz
LDYgKzgzLDcgQEAKICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCiAjaW5jbHVkZSAiTWF0
aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckF0dGFjaG1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIK
ICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCkBAIC0xNjYsMTAgKzE2NywxMCBAQCB2b2lkIEFY
Q29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6c2V0SWdub3JlZChBWElEIGlkLCBBY2Nlc3Np
YmlsaXR5T2JqZWN0SW5jbAogQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dDo6QWNjZXNzaWJpbGl0
eVJlcGxhY2VkVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAgICAg
aWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAgICAgbV9y
ZXBsYWNlZFJhbmdlLnN0YXJ0SW5kZXgudmFsdWUgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihz
ZWxlY3Rpb24uc3RhcnQoKSwgbV9yZXBsYWNlZFJhbmdlLnN0YXJ0SW5kZXguc2NvcGUpOworICAg
ICAgICBtX3JlcGxhY2VkUmFuZ2Uuc3RhcnRJbmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBv
c2l0aW9uKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgbV9yZXBsYWNlZFJhbmdlLnN0YXJ0SW5k
ZXguc2NvcGUpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICAg
ICAgbV9yZXBsYWNlZFRleHQgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxl
UG9zaXRpb25SYW5nZShzZWxlY3Rpb24pOwotICAgICAgICAgICAgbV9yZXBsYWNlZFJhbmdlLmVu
ZEluZGV4LnZhbHVlID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLmVuZCgpLCBt
X3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXguc2NvcGUpOworICAgICAgICAgICAgbV9yZXBsYWNlZFJh
bmdlLmVuZEluZGV4LnZhbHVlID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnZp
c2libGVFbmQoKSwgbV9yZXBsYWNlZFJhbmdlLmVuZEluZGV4LnNjb3BlKTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBtX3JlcGxhY2VkUmFuZ2UuZW5kSW5kZXggPSBtX3JlcGxhY2VkUmFu
Z2Uuc3RhcnRJbmRleDsKICAgICB9CkBAIC0xOTg1LDEyICsxOTg2LDEyIEBAIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBBWE9iamVjdENhY2hlOjpyYW5nZU1hdGNoZXNUZXh0TmVhclJhbmdlKGNvbnN0
IFNpbXBsZVJhbmdlCiAgICAgaWYgKGVuZFBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBlbmRQ
b3NpdGlvbiA9IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUob3JpZ2luYWxSYW5nZS5lbmQuY29u
dGFpbmVyLnB0cigpKTsKIAotICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpt
YWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0aW9uKSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZFBv
c2l0aW9uKSB9OwotICAgIGlmIChzZWFyY2hSYW5nZS5jb2xsYXBzZWQoKSkKKyAgICBhdXRvIHNl
YXJjaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsK
KyAgICBpZiAoIXNlYXJjaFJhbmdlIHx8IHNlYXJjaFJhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gdGFyZ2V0T2Zmc2V0ID0gY2hhcmFj
dGVyQ291bnQoeyBzZWFyY2hSYW5nZS5zdGFydCwgb3JpZ2luYWxSYW5nZS5zdGFydCB9LCBUZXh0
SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7Ci0gICAg
cmV0dXJuIGZpbmRDbG9zZXN0UGxhaW5UZXh0KHNlYXJjaFJhbmdlLCBtYXRjaFRleHQsIHsgfSwg
dGFyZ2V0T2Zmc2V0KTsKKyAgICBhdXRvIHRhcmdldE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsg
c2VhcmNoUmFuZ2UtPnN0YXJ0LCBvcmlnaW5hbFJhbmdlLnN0YXJ0IH0sIFRleHRJdGVyYXRvckVt
aXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICByZXR1cm4gZmlu
ZENsb3Nlc3RQbGFpblRleHQoKnNlYXJjaFJhbmdlLCBtYXRjaFRleHQsIHsgfSwgdGFyZ2V0T2Zm
c2V0KTsKIH0KIAogc3RhdGljIGJvb2wgaXNSZXBsYWNlZE5vZGVPckJSKE5vZGUqIG5vZGUpCkBA
IC0yODgwLDE4ICsyODgxLDE4IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFy
YWN0ZXJPZmZzZXRGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIEFYCiB7CiAgICAgaWYg
KCFvYmplY3QpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBib3VuZGFyeSA9IG1ha2VC
b3VuZGFyeVBvaW50KG9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocG9pbnQpKTsKLSAg
ICBpZiAoIWJvdW5kYXJ5KQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uob2JqZWN0
LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCkpOworICAgIGlmICghcmFuZ2UpCiAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JS
YW5nZSh7ICpib3VuZGFyeSwgKmJvdW5kYXJ5IH0sIHRydWUpOworICAgIHJldHVybiBzdGFydE9y
RW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoKnJhbmdlLCB0cnVlKTsKIH0KIAogQ2hhcmFjdGVy
T2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBvaW50KGNvbnN0IEludFBv
aW50JiBwb2ludCkKIHsKLSAgICBhdXRvIGJvdW5kYXJ5ID0gbV9kb2N1bWVudC5jYXJldFBvc2l0
aW9uRnJvbVBvaW50KHBvaW50KTsKLSAgICBpZiAoIWJvdW5kYXJ5KQorICAgIGF1dG8gcmFuZ2Ug
PSBtYWtlU2ltcGxlUmFuZ2UobV9kb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KHBvaW50
KSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gc3Rh
cnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHsgKmJvdW5kYXJ5LCAqYm91bmRhcnkgfSwg
dHJ1ZSk7CisgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSgqcmFu
Z2UsIHRydWUpOwogfQogCiBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVy
T2Zmc2V0Rm9yQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgZmlyc3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApp
bmRleCA5N2QzMDg4MzFiMzdhMmMzNTE1NzBjNTk1MTcwZDFiODkyZjJmM2VmLi4yNzQyMWExZWEw
ODgxMjkzOGM2ZTk3ZWU4ZWVkNjEwNzk4ZWI2Zjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTYzLDYgKzYzLDcg
QEAKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFn
ZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CkBAIC05ODAsMjEgKzk4MSwxOSBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclVub3JkZXJlZFBvc2l0aQogICAgICAgICBl
bmRQb3MgPSB2aXNpYmxlUG9zMTsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgcmV0dXJuIHsgc3RhcnRQb3MsIGVuZFBvcyB9
OwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpwb3NpdGlv
bk9mTGVmdFdvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdAogewot
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZldvcmQodmlzaWJsZVBv
cywgTGVmdFdvcmRJZk9uQm91bmRhcnkpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlv
biA9IGVuZE9mV29yZChzdGFydFBvc2l0aW9uKTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
UmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIGF1dG8gc3RhcnQgPSBzdGFy
dE9mV29yZCh2aXNpYmxlUG9zLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CisgICAgcmV0dXJuIHsg
c3RhcnQsIGVuZE9mV29yZChzdGFydCkgfTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6cG9zaXRpb25PZlJpZ2h0V29yZChjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3MpIGNvbnN0CiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRp
b24gPSBzdGFydE9mV29yZCh2aXNpYmxlUG9zLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwotICAg
IFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGVuZE9mV29yZChzdGFydFBvc2l0aW9uKTsK
LSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24pOworICAgIGF1dG8gc3RhcnQgPSBzdGFydE9mV29yZCh2aXNpYmxlUG9zLCBSaWdodFdvcmRJ
Zk9uQm91bmRhcnkpOworICAgIHJldHVybiB7IHN0YXJ0LCBlbmRPZldvcmQoc3RhcnQpIH07CiB9
CiAKIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdXBkYXRlQVhMaW5lU3RhcnRGb3JWaXNpYmxlUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCkBAIC0xMDQ0LDgg
KzEwNDMsNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsZWZ0
TGluZVZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpcwogICAgIH0gZWxzZQogICAgICAgICBz
dGFydFBvc2l0aW9uID0gdXBkYXRlQVhMaW5lU3RhcnRGb3JWaXNpYmxlUG9zaXRpb24oc3RhcnRQ
b3NpdGlvbik7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBlbmRPZkxpbmUo
cHJldlZpc2libGVQb3MpOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgcmV0dXJuIHsgc3RhcnRQb3NpdGlvbiwgZW5kT2ZM
aW5lKHByZXZWaXNpYmxlUG9zKSB9OwogfQogCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyaWdodExpbmVWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0CkBAIC0xMDc4LDIzICsxMDc2LDIxIEBAIFZpc2li
bGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJpZ2h0TGluZVZpc2libGVQb3Np
dGlvblJhbmdlKGNvbnN0IFZpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gZW5kT2ZMaW5lKG5leHRW
aXNpYmxlUG9zKTsKICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3Rh
cnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgIHJldHVybiB7IHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uIH07CiB9CiAKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnNlbnRlbmNlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBGTyAyIElNUExFTUVOVCAoY3VycmVudGx5IHJldHVy
bnMgaW5jb3JyZWN0IGFuc3dlcikKICAgICAvLyBSZWxhdGVkPyA8cmRhcjovL3Byb2JsZW0vMzky
NzczNj4gVGV4dCBzZWxlY3Rpb24gYnJva2VuIGluIDhBMzM2Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mU2VudGVuY2UodmlzaWJsZVBvcyk7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZW5kT2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKTsKLSAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24p
OworICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IHN0YXJ0T2ZTZW50ZW5jZSh2aXNpYmxlUG9zKTsK
KyAgICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCBlbmRPZlNlbnRlbmNlKHN0YXJ0UG9zaXRpb24p
IH07CiB9CiAKIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBhcmFn
cmFwaEZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QK
IHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHN0YXJ0T2ZQYXJhZ3JhcGgo
dmlzaWJsZVBvcyk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZW5kT2ZQYXJh
Z3JhcGgoc3RhcnRQb3NpdGlvbik7Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBzdGFy
dE9mUGFyYWdyYXBoKHZpc2libGVQb3MpOworICAgIHJldHVybiB7IHN0YXJ0UG9zaXRpb24sIGVu
ZE9mUGFyYWdyYXBoKHN0YXJ0UG9zaXRpb24pIH07CiB9CiAKIHN0YXRpYyBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZlN0eWxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQpA
QCAtMTE0Niw5ICsxMTQyLDkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRPZlN0eWxlUmFu
Z2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQogVmlzaWJsZVBvc2l0aW9uUmFu
Z2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3R5bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKICAgICBpZiAodmlzaWJsZVBvcy5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CisgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRPZlN0eWxl
UmFuZ2UodmlzaWJsZVBvcyksIGVuZE9mU3R5bGVSYW5nZSh2aXNpYmxlUG9zKSk7CisgICAgcmV0
dXJuIHsgc3RhcnRPZlN0eWxlUmFuZ2UodmlzaWJsZVBvcyksIGVuZE9mU3R5bGVSYW5nZSh2aXNp
YmxlUG9zKSB9OwogfQogCiAvLyBOT1RFOiBDb25zaWRlciBwcm92aWRpbmcgdGhpcyB1dGlsaXR5
IG1ldGhvZCBhcyBBWCBBUEkKQEAgLTExNTYsMTIgKzExNTIsMTEgQEAgVmlzaWJsZVBvc2l0aW9u
UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShj
b25zdCBQbGEKIHsKICAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gZ2V0TGVuZ3RoRm9yVGV4dFJh
bmdlKCk7CiAgICAgaWYgKHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoID4gdGV4dExlbmd0aCkK
LSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7CisgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlv
bkZvckluZGV4KHJhbmdlLnN0YXJ0KTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxl
UG9zaXRpb25Gb3JJbmRleChyYW5nZS5zdGFydCk7CiAgICAgc3RhcnRQb3NpdGlvbi5zZXRBZmZp
bml0eShET1dOU1RSRUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSB2aXNp
YmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCk7Ci0gICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAg
ICByZXR1cm4geyBzdGFydFBvc2l0aW9uLCB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5z
dGFydCArIHJhbmdlLmxlbmd0aCkgfTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vz
c2liaWxpdHlPYmplY3Q6OnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFu
Z2UmIHJhbmdlKSBjb25zdApAQCAtMTE4Myw5ICsxMTc4LDcgQEAgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxh
aW5UZXgKIAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6bGluZVJh
bmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pIGNv
bnN0CiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mTGluZSh2
aXNpYmxlUG9zaXRpb24pOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGVuZE9m
TGluZSh2aXNpYmxlUG9zaXRpb24pOwotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgcmV0dXJuIHsgc3RhcnRPZkxpbmUodmlz
aWJsZVBvc2l0aW9uKSwgZW5kT2ZMaW5lKHZpc2libGVQb3NpdGlvbikgfTsKIH0KIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3RlcihOb2RlKiByZXBs
YWNlZE5vZGUpCkBAIC0xMjcxLDE1ICsxMjY0LDEyIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpzdHJpbmdGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiAKIFN0
cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShj
b25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgdmlzaWJsZVBvc2l0aW9uUmFuZ2UpCiB7Ci0gICAg
YXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVQb3NpdGlvblJhbmdlLnN0YXJ0
KTsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAgICByZXR1cm4geyB9OwotICAgIGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uUmFuZ2UuZW5kKTsKLSAgICBpZiAoIWVu
ZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdl
KTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOwotICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHsgKnN0YXJ0LCAqZW5kIH0p
OyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQo
KnJhbmdlKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewogICAgICAgICAvLyBub24temVy
byBsZW5ndGggbWVhbnMgdGV4dHVhbCBub2RlLCB6ZXJvIGxlbmd0aCBtZWFucyByZXBsYWNlZCBu
b2RlIChBS0EgImF0dGFjaG1lbnRzIiBpbiBBWCkKICAgICAgICAgaWYgKGl0LnRleHQoKS5sZW5n
dGgoKSkgewogICAgICAgICAgICAgLy8gQWRkIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBmb3Ig
bGlzdCBtYXJrZXIgdGV4dC4KQEAgLTEyOTgsMTYgKzEyODgsMTMgQEAgaW50IEFjY2Vzc2liaWxp
dHlPYmplY3Q6Omxlbmd0aEZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3Np
dGlvblJhbmcKIHsKICAgICAvLyBGSVhNRTogTXVsdGktYnl0ZSBzdXBwb3J0CiAKLSAgICBhdXRv
IHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uUmFuZ2Uuc3RhcnQpOwot
ICAgIGlmICghc3RhcnQpCi0gICAgICAgIHJldHVybiAtMTsgLy8gRklYTUU6IFdoeSBub3QgcmV0
dXJuIDA/Ci0gICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlUG9zaXRpb25S
YW5nZS5lbmQpOwotICAgIGlmICghZW5kKQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFu
Z2UodmlzaWJsZVBvc2l0aW9uUmFuZ2UpOworICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVy
biAtMTsgLy8gRklYTUU6IFdoeSBub3QgcmV0dXJuIDA/CiAKICAgICAvLyBGSVhNRTogVXNlIGNo
YXJhY3RlckNvdW50IGluc3RlYWQgb2Ygd3JpdGluZyBvdXIgb3duIGxvb3A/CiAgICAgaW50IGxl
bmd0aCA9IDA7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoeyAqc3RhcnQsICplbmQgfSk7ICFp
dC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdCgqcmFu
Z2UpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CiAgICAgICAgIC8vIG5vbi16ZXJvIGxl
bmd0aCBtZWFucyB0ZXh0dWFsIG5vZGUsIHplcm8gbGVuZ3RoIG1lYW5zIHJlcGxhY2VkIG5vZGUg
KEFLQSAiYXR0YWNobWVudHMiIGluIEFYKQogICAgICAgICBpZiAoaXQudGV4dCgpLmxlbmd0aCgp
KQogICAgICAgICAgICAgbGVuZ3RoICs9IGl0LnRleHQoKS5sZW5ndGgoKTsKQEAgLTE0MzEsMTYg
KzE0MTgsMTMgQEAgVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmplY3Q6Om5leHRTZW50
ZW5jZUVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGkKIAogICAgIC8vIE1ha2Ugc3VyZSB3
ZSBtb3ZlIG9mZiBvZiBhIHNlbnRlbmNlIGVuZC4KICAgICBhdXRvIG5leHRQb3NpdGlvbiA9IHBv
c2l0aW9uLm5leHQoKTsKLSAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRP
ZkxpbmUobmV4dFBvc2l0aW9uKSk7Ci0gICAgaWYgKCFzdGFydCkKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZE9mTGluZShuZXh0UG9zaXRp
b24pKTsKLSAgICBpZiAoIWVuZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0
YXJ0T2ZMaW5lKG5leHRQb3NpdGlvbiksIGVuZE9mTGluZShuZXh0UG9zaXRpb24pKTsKKyAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gQW4gZW1wdHkgbGluZSBp
cyBjb25zaWRlcmVkIGEgc2VudGVuY2UuIElmIGl0J3Mgc2tpcHBlZCwgdGhlbiB0aGUgc2VudGVu
Y2UgcGFyc2VyIHdpbGwgbm90CiAgICAgLy8gc2VlIHRoaXMgZW1wdHkgbGluZS4gSW5zdGVhZCwg
cmV0dXJuIHRoZSBlbmQgcG9zaXRpb24gb2YgdGhlIGVtcHR5IGxpbmUuCi0gICAgcmV0dXJuIGhh
c0FueVBsYWluVGV4dCh7ICpzdGFydCwgKmVuZCB9KSA/IGVuZE9mU2VudGVuY2UobmV4dFBvc2l0
aW9uKSA6IG5leHRQb3NpdGlvbjsKKyAgICByZXR1cm4gaGFzQW55UGxhaW5UZXh0KCpyYW5nZSkg
PyBlbmRPZlNlbnRlbmNlKG5leHRQb3NpdGlvbikgOiBuZXh0UG9zaXRpb247CiB9CiAKIFZpc2li
bGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmV2aW91c1NlbnRlbmNlU3RhcnRQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdApAQCAtMTQ1MCwxNSAr
MTQzNCwxMiBAQCBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNT
ZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJsZQogCiAgICAgLy8gTWFrZSBzdXJlIHdl
IG1vdmUgb2ZmIG9mIGEgc2VudGVuY2Ugc3RhcnQuCiAgICAgYXV0byBwcmV2aW91c1Bvc2l0aW9u
ID0gcG9zaXRpb24ucHJldmlvdXMoKTsKLSAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9p
bnQoc3RhcnRPZkxpbmUocHJldmlvdXNQb3NpdGlvbikpOwotICAgIGlmICghc3RhcnQpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZkxp
bmUocHJldmlvdXNQb3NpdGlvbikpOwotICAgIGlmICghZW5kKQorICAgIGF1dG8gcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZkxpbmUocHJldmlvdXNQb3NpdGlvbiksIGVuZE9mTGluZShw
cmV2aW91c1Bvc2l0aW9uKSk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIC8vIFRyZWF0IGVtcHR5IGxpbmUgYXMgYSBzZXBhcmF0ZSBzZW50ZW5jZS4KLSAgICBy
ZXR1cm4gaGFzQW55UGxhaW5UZXh0KHsgKnN0YXJ0LCAqZW5kIH0pID8gc3RhcnRPZlNlbnRlbmNl
KHByZXZpb3VzUG9zaXRpb24pIDogcHJldmlvdXNQb3NpdGlvbjsKKyAgICByZXR1cm4gaGFzQW55
UGxhaW5UZXh0KCpyYW5nZSkgPyBzdGFydE9mU2VudGVuY2UocHJldmlvdXNQb3NpdGlvbikgOiBw
cmV2aW91c1Bvc2l0aW9uOwogfQogCiBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eU9iamVj
dDo6bmV4dFBhcmFncmFwaEVuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRp
b24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCmluZGV4IGRjNjU0ZmMyYjEyYTQ4NzM4ODRm
NjFiZDViNjcxOTVlYjkzOTczODAuLjQ1Y2Q4ZWE5NGZhZDJkZGI5ODg1N2RhMWY2NjE1NTcxMjBm
ZDUxNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCkBAIC00MzAsMjQgKzQzMCw2IEBAIGVudW0g
Y2xhc3MgQWNjZXNzaWJpbGl0eVZpc2libGVQb3NpdGlvbkZvckJvdW5kcyB7CiAgICAgTGFzdCwK
IH07CiAKLXN0cnVjdCBWaXNpYmxlUG9zaXRpb25SYW5nZSB7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0OwotICAgIFZpc2libGVQb3NpdGlvbiBlbmQ7Ci0KLSAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSgpID0gZGVmYXVsdDsKLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHMsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZSkKLSAgICAgICAgOiBzdGFydChz
KQotICAgICAgICAsIGVuZChlKQotICAgIHsgfQotCi0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQotICAgICAgICA6IHN0YXJ0KHNlbGVj
dGlvbi5zdGFydCgpKQotICAgICAgICAsIGVuZChzZWxlY3Rpb24uZW5kKCkpCi0gICAgeyB9Ci0K
LSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5p
c051bGwoKTsgfQotfTsKLQogZW51bSBjbGFzcyBBY2Nlc3NpYmlsaXR5TWF0aFNjcmlwdE9iamVj
dFR5cGUgeyBTdWJzY3JpcHQsIFN1cGVyc2NyaXB0IH07CiBlbnVtIGNsYXNzIEFjY2Vzc2liaWxp
dHlNYXRoTXVsdGlzY3JpcHRPYmplY3RUeXBlIHsgUHJlU3Vic2NyaXB0LCBQcmVTdXBlcnNjcmlw
dCwgUG9zdFN1YnNjcmlwdCwgUG9zdFN1cGVyc2NyaXB0IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CmluZGV4IGJiNGJhMGQ4NzgyM2NkMmY4MDIzODkwNzE3NWEyZDkxYTAxYWI4ZTcuLjQ0ODYyYWI2
YTJlYmJmMjdhOGVhZjVlYzQ2ZDcwNThkM2EzMWNhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApA
QCAtNjQ5LDEyICs2NDksOSBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dGV4
dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudAogICAgICAgICAgICAg
aWYgKGZpcnN0Q2hpbGRSZW5kZXJlciAmJiBmaXJzdENoaWxkUmVuZGVyZXItPm5vZGUoKSAmJiBs
YXN0Q2hpbGRSZW5kZXJlciAmJiBsYXN0Q2hpbGRSZW5kZXJlci0+bm9kZSgpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2UgZGVmaW5lIHRoZSBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyBmb3IgdGhl
IHJhbmdlIGFzIHRoZSBvbmVzIHJpZ2h0IGJlZm9yZSBhbmQgYWZ0ZXIKICAgICAgICAgICAgICAg
ICAvLyB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IG5vZGVzIGluIHRoZSBET00gdHJlZSB0aGF0IGlz
IHdyYXBwZWQgaW5zaWRlIHRoZSBhbm9ueW1vdXMgYmxvY2suCi0gICAgICAgICAgICAgICAgTm9k
ZSogZmlyc3ROb2RlSW5CbG9jayA9IGZpcnN0Q2hpbGRSZW5kZXJlci0+bm9kZSgpOwotICAgICAg
ICAgICAgICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbkluUGFyZW50QmVmb3Jl
Tm9kZShmaXJzdE5vZGVJbkJsb2NrKTsKLSAgICAgICAgICAgICAgICBQb3NpdGlvbiBlbmRQb3Np
dGlvbiA9IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUobGFzdENoaWxkUmVuZGVyZXItPm5vZGUo
KSk7Ci0KLSAgICAgICAgICAgICAgICBub2RlRG9jdW1lbnQgPSAmZmlyc3ROb2RlSW5CbG9jay0+
ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgICAgICB0ZXh0UmFuZ2UgPSB7IHsgKm1ha2VCb3VuZGFy
eVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH0g
fTsKKyAgICAgICAgICAgICAgICBhdXRvJiBmaXJzdE5vZGVJbkJsb2NrID0gKmZpcnN0Q2hpbGRS
ZW5kZXJlci0+bm9kZSgpOworICAgICAgICAgICAgICAgIG5vZGVEb2N1bWVudCA9ICZmaXJzdE5v
ZGVJbkJsb2NrLmRvY3VtZW50KCk7CisgICAgICAgICAgICAgICAgdGV4dFJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKCZmaXJzdE5vZGVJbkJsb2NrKSwg
cG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShsYXN0Q2hpbGRSZW5kZXJlci0+bm9kZSgpKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtOTE3LDcgKzkxNCw3IEBAIEludFBvaW50IEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmxpbmtDbGlja1BvaW50KCkKICAgICAgICAgYXV0byBz
dGFydCA9IFZpc2libGVQb3NpdGlvbiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5n
ZS0+c3RhcnQpIH07CiAgICAgICAgIGF1dG8gZW5kID0gbmV4dFZpc2libGVQb3NpdGlvbihzdGFy
dCk7CiAgICAgICAgIGlmICghZW5kLmlzTnVsbCgpICYmIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkt
PmNvbnRhaW5zKGVuZCkpCi0gICAgICAgICAgICByZXR1cm4geyBib3VuZHNGb3JSYW5nZSh7ICpt
YWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpIH0pLmNlbnRl
cigpIH07CisgICAgICAgICAgICByZXR1cm4geyBib3VuZHNGb3JSYW5nZSgqbWFrZVNpbXBsZVJh
bmdlKHN0YXJ0LCBlbmQpKS5jZW50ZXIoKSB9OwogICAgIH0KICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eU9iamVjdDo6Y2xpY2tQb2ludCgpOwogfQpAQCAtOTM1LDkgKzkzMiw3IEBAIEludFBvaW50
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNsaWNrUG9pbnQoKQogICAgIGlmICghaXNXZWJB
cmVhKCkgfHwgIWNhblNldFZhbHVlQXR0cmlidXRlKCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpjbGlja1BvaW50KCk7CiAgICAgCi0gICAgVmlzaWJsZVNlbGVjdGlvbiB2
aXNTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSByYW5n
ZSA9IFZpc2libGVQb3NpdGlvblJhbmdlKHZpc1NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgdmlz
U2VsZWN0aW9uLnZpc2libGVFbmQoKSk7Ci0gICAgcmV0dXJuIGJvdW5kc0ZvclZpc2libGVQb3Np
dGlvblJhbmdlKHJhbmdlKS5jZW50ZXIoKTsKKyAgICByZXR1cm4gYm91bmRzRm9yVmlzaWJsZVBv
c2l0aW9uUmFuZ2Uoc2VsZWN0aW9uKCkpLmNlbnRlcigpOwogfQogICAgIAogQWNjZXNzaWJpbGl0
eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW50ZXJuYWxMaW5rRWxlbWVudCgp
IGNvbnN0CkBAIC0xOTkwLDcgKzE5ODUsNiBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0CiAgICAgaWYg
KCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKICAg
ICAKLSAgICAvLyBjb25zdHJ1Y3QgVmlzaWJsZVBvc2l0aW9ucyBmb3Igc3RhcnQgYW5kIGVuZAog
ICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKQEAgLTIwMDgsNyArMjAwMiw3IEBA
IFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQ
b3NpdGlvblJhbmdlKCkgY29uc3QKICAgICAgICAgICAgIGVuZFBvcyA9IHN0YXJ0UG9zOwogICAg
IH0KIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBvcywgZW5kUG9zKTsK
KyAgICByZXR1cm4geyBXVEZNb3ZlKHN0YXJ0UG9zKSwgV1RGTW92ZShlbmRQb3MpIH07CiB9CiAK
IFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQ
b3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCBsaW5lQ291bnQpIGNvbnN0CkBAIC0yMDM4LDcg
KzIwMzIsNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaQogICAgIHNlbGVjdGlvbi5zZXRTZWxl
Y3Rpb24oVmlzaWJsZVNlbGVjdGlvbih2aXNpYmxlUG9zKSk7CiAgICAgc2VsZWN0aW9uLm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpS
aWdodCwgVGV4dEdyYW51bGFyaXR5OjpMaW5lQm91bmRhcnkpOwogICAgIAotICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZShzZWxlY3Rpb24uc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCks
IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpOworICAgIHJldHVybiBzZWxlY3Rp
b24uc2VsZWN0aW9uKCk7CiB9CiAgICAgCiBWaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCBlNDRjYjRiN2VhNjVkOTNl
NTEzOThkMjVlMjRjNTRkMWFhZDMxZGQwLi5jMzYxYzQwMTFmNzQ3ZTA5NDQ2NDg2NGYzZmNhNDE3
ODI3OGY1ZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAt
NjYsNiArNjYsNyBAQAogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUGx1Z2luRG9jdW1lbnQu
aCIKICNpbXBvcnQgIlBsdWdpblZpZXdCYXNlLmgiCisjaW1wb3J0ICJSYW5nZS5oIgogI2ltcG9y
dCAiUmVuZGVySW5saW5lLmgiCiAjaW1wb3J0ICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2ltcG9y
dCAiUmVuZGVyVmlldy5oIgpAQCAtOTIzLDI5ICs5MjQsMjUgQEAgLSAoaWQpdGV4dE1hcmtlckZv
ckZpcnN0UG9zaXRpb25JblRleHRDb250cm9sOihIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCAm
KXRleHQKIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cihBWE9iamVjdENhY2hlKiBjYWNoZSwgQ0ZUeXBlUmVmIHRleHRNYXJrZXIpCiB7CiAgICAgQVNT
RVJUKGNhY2hlKTsKLSAgICAKICAgICBpZiAoIXRleHRNYXJrZXIpCiAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsKICAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKICAg
ICBpZiAoIWdldEJ5dGVzRnJvbUFYVGV4dE1hcmtlcih0ZXh0TWFya2VyLCAmdGV4dE1hcmtlckRh
dGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKCk7Ci0gICAgCiAgICAgcmV0dXJuIGNhY2hlLT52aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFy
a2VyRGF0YSh0ZXh0TWFya2VyRGF0YSk7CiB9CiAKLS0gKFZpc2libGVQb3NpdGlvbil2aXNpYmxl
UG9zaXRpb25Gb3JUZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCitzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RD
YWNoZSogY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKIHsKLSAgICByZXR1cm4gdmlzaWJsZVBv
c2l0aW9uRm9yVGV4dE1hcmtlcihzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgp
LCAoX19icmlkZ2UgQ0ZUeXBlUmVmKXRleHRNYXJrZXIpOworICAgIHJldHVybiB7CisgICAgICAg
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIChfX2JyaWRnZSBDRlR5cGVSZWYp
QVhUZXh0TWFya2VyUmFuZ2VTdGFydCh0ZXh0TWFya2VyUmFuZ2UpKSwKKyAgICAgICAgdmlzaWJs
ZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNoZSwgKF9fYnJpZGdlIENGVHlwZVJlZilBWFRleHRN
YXJrZXJSYW5nZUVuZCh0ZXh0TWFya2VyUmFuZ2UpKQorICAgIH07CiB9CiAKLXN0YXRpYyBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yU3RhcnRPZlRleHRNYXJrZXJSYW5nZShBWE9i
amVjdENhY2hlKiBjYWNoZSwgaWQgdGV4dE1hcmtlclJhbmdlKQotewotICAgIHJldHVybiB2aXNp
YmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNhY2hlLCAoX19icmlkZ2UgQ0ZUeXBlUmVmKUFYVGV4
dE1hcmtlclJhbmdlU3RhcnQodGV4dE1hcmtlclJhbmdlKSk7Ci19Ci0KLXN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RD
YWNoZSogY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkKKy0gKFZpc2libGVQb3NpdGlvbil2aXNp
YmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCiB7Ci0gICAgcmV0dXJuIHZp
c2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIChfX2JyaWRnZSBDRlR5cGVSZWYpQVhU
ZXh0TWFya2VyUmFuZ2VFbmQodGV4dE1hcmtlclJhbmdlKSk7CisgICAgcmV0dXJuIHZpc2libGVQ
b3NpdGlvbkZvclRleHRNYXJrZXIoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUo
KSwgKF9fYnJpZGdlIENGVHlwZVJlZil0ZXh0TWFya2VyKTsKIH0KIAogLy8gV2hlbiBtb2RpZnlp
bmcgYXR0cmlidXRlZCBzdHJpbmdzLCB0aGUgcmFuZ2UgY2FuIGNvbWUgZnJvbSBhIHNvdXJjZSB3
aGljaCBtYXkgcHJvdmlkZSBmYXVsdHkgaW5mb3JtYXRpb24gKGUuZy4gdGhlIHNwZWxsIGNoZWNr
ZXIpLgpAQCAtMTg0NywxMCArMTg0NCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogCiAtIChWaXNpYmxlUG9zaXRpb25SYW5nZSl2aXNpYmxlUG9zaXRpb25SYW5nZUZv
clRleHRNYXJrZXJSYW5nZTooaWQpdGV4dE1hcmtlclJhbmdlCiB7Ci0gICAgaWYgKCF0ZXh0TWFy
a2VyUmFuZ2UpCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwotICAgIEFY
T2JqZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUo
KTsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uRm9yU3Rh
cnRPZlRleHRNYXJrZXJSYW5nZShjYWNoZSwgdGV4dE1hcmtlclJhbmdlKSwgdmlzaWJsZVBvc2l0
aW9uRm9yRW5kT2ZUZXh0TWFya2VyUmFuZ2UoY2FjaGUsIHRleHRNYXJrZXJSYW5nZSkpOworICAg
IHJldHVybiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZShzZWxmLmF4QmFj
a2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyUmFuZ2UpOwogfQogCiAtIChO
U0FycmF5KilyZW5kZXJXaWRnZXRDaGlsZHJlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXgg
M2Q3NDJlNzE5ZDg1MGM3MmU3OTkxZmY1NzRmMmYzOTg0M2I4M2ExZC4uYjY1ZmU5YzM5MDYzNDUz
MjQ5NWQ1NjAyY2ZkYzU2ZDJlZWI2MzExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0x
NjMsNiArMTYzLDcgQEAKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNs
dWRlICJQdWJsaWNTdWZmaXguaCIKICNpbmNsdWRlICJRdWlya3MuaCIKKyNpbmNsdWRlICJSYW5n
ZS5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKaW5kZXggNjllNWE5YmE2OTE0NjZiNjEwYWY5ZWRiYjM0MDI4YzM5MTQ0MTIxYy4uYzU2
NjBmY2JlYzFlNmVlYmJlODVmNTczYzQ0Zjg0MjQ3NzMzZGYwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApA
QCAtNTksNyArNTksNiBAQAogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUg
IlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIlByb2dyZXNzRXZlbnQuaCIKLSNp
bmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
LmgKaW5kZXggMmMyZDZhMjI2MTZmNGIyMmJhZDkyNjc5MTE2ZGNlYTU3OTY0YjBlZC4uYmI5OTMw
OGRmY2Y0NTZhNjk4ODM0ZDU3Y2UxNzMzMDFmYzM3OTMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgK
QEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFRleHQ7CiAKIHN0
cnVjdCBCb3VuZGFyeVBvaW50Oworc3RydWN0IFNpbXBsZVJhbmdlOwogCiBlbnVtIFBvc2l0aW9u
TW92ZVR5cGUgewogICAgIENvZGVQb2ludCwgICAgICAgLy8gTW92ZSBieSBhIHNpbmdsZSBjb2Rl
IHBvaW50LgpAQCAtMjQ5LDYgKzI1MCwxMyBAQCBSZWZQdHI8Tm9kZT4gY29tbW9uU2hhZG93SW5j
bHVkaW5nQW5jZXN0b3IoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOwogCiBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgUG9zaXRpb24m
KTsKIAorc3RydWN0IFBvc2l0aW9uUmFuZ2UgeworICAgIFBvc2l0aW9uIHN0YXJ0OworICAgIFBv
c2l0aW9uIGVuZDsKK307CisKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2Uo
Y29uc3QgUG9zaXRpb25SYW5nZSYpOworCiAvLyBpbmxpbmVzCiAKIGlubGluZSBQb3NpdGlvbiBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oTm9kZSogbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKaW5kZXggY2ZiNTVmMzk4ODhj
MTFjMmY4M2RjOTkxM2IwNWQwY2IxMDYxZDUwZS4uN2EyMGE1ZjM5MDY2NmUyMjYyZGMxYTQ1ODVj
OTg4ODc5NWE0NDNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9u
R3JvdXBzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3Bw
CkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiUmFkaW9CdXR0b25Hcm91cHMuaCIKIAogI2lu
Y2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUg
PHd0Zi9XZWFrSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmgKaW5kZXggMzczYjJjODdhNjNhNTg5Nzg0NTNlYjY4NTEyMGNiNDdkZTUzOTU1OS4uZDMxMjI1
NGRjZGJhMmY4NTI2MmZlMGYzNjE0NzBmM2EzNTFiNmNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAgLTE3
Niw3ICsxNzYsNyBAQCBXRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IHJhbmdlT2ZDb250ZW50cyhO
b2RlJik7CiBXRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwg
Y29uc3QgUmFuZ2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBS
YW5nZSosIGNvbnN0IFJhbmdlKik7CiAKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25z
dCBSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNv
bnN0IFJhbmdlJik7CiBTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdl
PiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5n
ZShjb25zdCBSYW5nZSopOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1h
a2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmNwcAppbmRleCBlNzU1NDkwZGIwZjdjZTgxYmJjMjE3MGUzODVmY2FjZGUwYzZhMjU5Li5k
YmI3ZDM0NDZhOWQ2ZjkwYmNjMzdiZjliNDZkY2FjZTdhOGFmMmE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW1wbGVSYW5nZS5jcHAKQEAgLTgyLDYgKzgyLDIxIEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIFNpbXBsZVJhbmdl
IHsgeyAqcGFyZW50LCBvZmZzZXQgfSwgeyAqcGFyZW50LCBvZmZzZXQgKyAxIH0gfTsKIH0KIAor
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBPcHRpb25hbDxCb3Vu
ZGFyeVBvaW50PiYgcG9pbnQpCit7CisgICAgaWYgKCFwb2ludCkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7ICpwb2ludCwgKnBvaW50IH0gfTsKK30KKworT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50
PiYmIHBvaW50KQoreworICAgIGlmICghcG9pbnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgYXV0byBlbmQgPSAqcG9pbnQ7CisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpwb2lu
dCksIFdURk1vdmUoZW5kKSB9IH07Cit9CisKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2lt
cGxlUmFuZ2UoY29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mIHN0YXJ0LCBjb25zdCBPcHRp
b25hbDxCb3VuZGFyeVBvaW50PiYgZW5kKQogewogICAgIGlmICghc3RhcnQgfHwgIWVuZCkKQEAg
LTE1MSw0ICsxNjYsOSBAQCB2b2lkIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6YWR2YW5jZVNr
aXBwaW5nQ2hpbGRyZW4oKQogICAgIH0KIH0KIAorUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2
ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFpbmVyLCByYW5nZS5lbmQuY29udGFp
bmVyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCAwY2UwYmExOGU0ZGM3
ZTQ4MmQyYTY1NTA1M2E1ZDc4NDQyN2IwYWE0Li5mYTZhZjU0NGIzNzEzMjU3ODYxYzgyNTJiMGFl
NWY4YmFjYmYxNGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtNTEsMTMgKzUxLDMz
IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgU2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdl
PiYpOwogfTsKIAorU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9p
bnQmKTsKK1NpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50JiYpOworU2lt
cGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3Vu
ZGFyeVBvaW50Jik7CitTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoQm91bmRhcnlQb2ludCYm
LCBCb3VuZGFyeVBvaW50JiYpOworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5n
ZShjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYm
KTsKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2Uo
Y29uc3QgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4mLCBjb25zdCBPcHRpb25hbDxCb3VuZGFyeVBv
aW50PiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVS
YW5nZShPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYmLCBPcHRpb25hbDxCb3VuZGFyeVBvaW50PiYm
KTsKIAoraW5saW5lIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoY29uc3Qg
Qm91bmRhcnlQb2ludCYgcG9pbnQpIHsgcmV0dXJuIHBvaW50OyB9CitpbmxpbmUgQm91bmRhcnlQ
b2ludCBtYWtlQm91bmRhcnlQb2ludEhlbHBlcihCb3VuZGFyeVBvaW50JiYgcG9pbnQpIHsgcmV0
dXJuIFdURk1vdmUocG9pbnQpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBhdXRvIG1ha2VCb3Vu
ZGFyeVBvaW50SGVscGVyKFQmJiBhcmd1bWVudCkgLT4gZGVjbHR5cGUobWFrZUJvdW5kYXJ5UG9p
bnQoc3RkOjpmb3J3YXJkPFQ+KGFyZ3VtZW50KSkpCit7CisgICAgcmV0dXJuIG1ha2VCb3VuZGFy
eVBvaW50KHN0ZDo6Zm9yd2FyZDxUPihhcmd1bWVudCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi5UPiBhdXRvIG1ha2VTaW1wbGVSYW5nZShUJiYgLi4uYXJndW1lbnRzKSAtPiBkZWNsdHlw
ZShtYWtlU2ltcGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRIZWxwZXIoc3RkOjpmb3J3YXJkPFQ+
KGFyZ3VtZW50cykpLi4uKSkKK3sKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3Vu
ZGFyeVBvaW50SGVscGVyKHN0ZDo6Zm9yd2FyZDxUPihhcmd1bWVudHMpKS4uLik7Cit9CisKIC8v
IEZJWE1FOiBXb3VsZCBsaWtlIHRoZXNlIHRvIGhhdmUgc2hvcnRlciBuYW1lczsgYW5vdGhlciBv
cHRpb24gaXMgdG8gY2hhbmdlIHByZWZpeCB0byBtYWtlU2ltcGxlUmFuZ2UuCiBXRUJDT1JFX0VY
UE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJik7
CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoTm9kZSYpOwogCitSZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3Qg
U2ltcGxlUmFuZ2UmKTsKKwogYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29u
c3QgU2ltcGxlUmFuZ2UmKTsKIAogY2xhc3MgSW50ZXJzZWN0aW5nTm9kZVJhbmdlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TdGF0aWNSYW5nZS5jcHAKaW5kZXggOGE0ODQzYjFkMjYyZmRjYmVlM2M3OTAyMjAxMGY2
YzliOTY5MzFiMC4uN2UwOTRhOWE3OThlNmJiODE1NjY1MjQ0YzcyY2NiMDM3YzZhZGQzOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAi
U3RhdGljUmFuZ2UuaCIKIAogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKLSNpbmNsdWRlICJS
YW5nZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAK
aW5kZXggMjljNDk3ZTEwOTY0ZGYwOTA1ODhiYTQ2YjlkYThlZDEwM2FjNTU0My4uMmIzM2ZlNWMw
YWE4ZGY4NWU3ZjcyZGMzYjAwYjZkNWExYjMxMWNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC00NzIsMTUgKzQ3
MiwxNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0
ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChlbmRPZlNlbGVjdGlvbiA9
PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBv
aW50KHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZE9m
U2VsZWN0aW9uKSB9OwotICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hh
cmFjdGVyUmFuZ2UpOworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsKKyAg
ICBpZiAoIXByZWNlZGluZ0NoYXJhY3RlclJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgU3Ry
aW5nIHN0cmluZyA9IHBsYWluVGV4dCgqcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UpOwogICAgIGlm
IChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShzdHJp
bmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNYXJr
IHRoaXMgd2hpdGVzcGFjZSB0byBpbmRpY2F0ZSB3ZSBoYXZlIGRlbGV0ZWQgYW4gYXV0b2NvcnJl
Y3Rpb24gZm9sbG93aW5nIHRoaXMKICAgICAvLyB3aGl0ZXNwYWNlLiBTbyBpZiB0aGUgdXNlciB0
eXBlcyB0aGUgc2FtZSBvcmlnaW5hbCB3b3JkIGFnYWluIGF0IHRoaXMgcG9zaXRpb24sIHdlCiAg
ICAgLy8gd29uJ3QgYXV0b2NvcnJlY3QgaXQgYWdhaW4uCi0gICAgYWRkTWFya2VyKHByZWNlZGlu
Z0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBt
X29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CisgICAgYWRkTWFy
a2VyKCpwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRv
Y29ycmVjdGlvbiwgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb24p
OwogfQogCiBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25U
ZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQs
IGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgY29uc3QgU3RyaW5nJiBz
dHJpbmdUb0JlUmVwbGFjZWQpCkBAIC00OTgsMTAgKzUwMCwxMSBAQCBib29sIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQo
Y29uc3QgVAogICAgIGlmIChtYXJrZXJzLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUs
IERvY3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGF1dG8gYmVmb3JlUHJlY2VkaW5nQ2hhcmFjdGVyID0gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0KS5wcmV2aW91cygpOwotICAg
IGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRh
cnlQb2ludChiZWZvcmVQcmVjZWRpbmdDaGFyYWN0ZXIpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5z
dGFydCB9OworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFu
Z2UoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0
KS5wcmV2aW91cygpLCByYW5nZVdpdGhBbHRlcm5hdGl2ZS5zdGFydCk7CisgICAgaWYgKCFwcmVj
ZWRpbmdDaGFyYWN0ZXJSYW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChh
dXRvJiBtYXJrZXIgOiBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKSkgeworICAgIGZvciAo
YXV0byYgbWFya2VyIDogbWFya2Vycy5tYXJrZXJzSW5SYW5nZSgqcHJlY2VkaW5nQ2hhcmFjdGVy
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pKSB7CiAgICAgICAg
IGlmIChtYXJrZXItPmRlc2NyaXB0aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggNGY0OTk2OTlhZGUxY2EyMjRlYzQ3NDNhOTk0YjA5NTRl
MDIxZTRlZC4uNWVkYzFlNzI0NzhiYzBhZDVkZmZmOTQ1MTdhMzEwODhjZjU3Njc5MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTI0MSwxOCAr
MjQxLDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5n
U3R5bGUmIHN0eWxlKQogICAgIC8vIFNhdmUgYW5kIHJlc3RvcmUgdGhlIHNlbGVjdGlvbiBlbmRw
b2ludHMgdXNpbmcgdGhlaXIgaW5kaWNlcyBpbiB0aGUgZWRpdGFibGUgcm9vdCwgc2luY2UKICAg
ICAvLyBhZGRCbG9ja1N0eWxlSWZOZWVkZWQgbWF5IG1vdmVQYXJhZ3JhcGhzLCB3aGljaCBjYW4g
cmVtb3ZlIHRoZXNlIGVuZHBvaW50cy4KICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgYW5kIGVuZCBp
bmRpY2VzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhleSdyZSBpbi4KLSAgICBh
dXRvIHNjb3BlID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFibGVSb290KHZpc2libGVTdGFydC5k
ZWVwRXF1aXZhbGVudCgpKSk7Ci0gICAgaWYgKCFzY29wZSkKKyAgICBhdXRvIHNjb3BlUm9vdCA9
IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxl
bnQoKSkpOworICAgIGlmICghc2NvcGVSb290KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IHNjb3BlU3RhcnQgPSBCb3VuZGFyeVBvaW50IHsgKnNjb3BlLCAwIH07Ci0gICAgYXV0byBzdGFy
dEJvdW5kYXJ5UG9pbnQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2
YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgYXV0byBlbmRCb3VuZGFy
eVBvaW50ID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnlQb2ludCB8
fCAhZW5kQm91bmRhcnlQb2ludCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBzdGFydElu
ZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBzY29wZVN0YXJ0LCAqc3RhcnRCb3VuZGFyeVBvaW50IH0s
IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsK
LSAgICBhdXRvIGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBzY29wZVN0YXJ0LCAqZW5kQm91
bmRhcnlQb2ludCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJs
ZVBvc2l0aW9ucyk7CisgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cygqc2NvcGVSb290KTsKKyAgICBhdXRvIHJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZSh2aXNp
YmxlU3RhcnQsIHZpc2libGVFbmQpOworICAgIGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3RlckNv
dW50KHsgc2NvcGUuc3RhcnQsIHJhbmdlLnN0YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFj
dGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICBhdXRvIGVuZEluZGV4ID0gY2hh
cmFjdGVyQ291bnQoeyBzY29wZS5zdGFydCwgcmFuZ2UuZW5kIH0sIFRleHRJdGVyYXRvckVtaXRz
Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIAogICAgIFZpc2libGVQb3Np
dGlvbiBwYXJhZ3JhcGhTdGFydChzdGFydE9mUGFyYWdyYXBoKHZpc2libGVTdGFydCkpOwogICAg
IFZpc2libGVQb3NpdGlvbiBuZXh0UGFyYWdyYXBoU3RhcnQoZW5kT2ZQYXJhZ3JhcGgocGFyYWdy
YXBoU3RhcnQpLm5leHQoKSk7CkBAIC0yODMsOCArMjc5LDggQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUpCiAgICAgICAgIG5leHRQ
YXJhZ3JhcGhTdGFydCA9IGVuZE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0YXJ0KS5uZXh0KCk7CiAg
ICAgfQogICAgIAotICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNv
bnRlbnRzKCpzY29wZSksIHN0YXJ0SW5kZXgsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0Jl
dHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKSk7Ci0gICAgYXV0byBlbmRQb3NpdGlvbiA9IGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpzY29wZSksIGVuZEluZGV4LCBUZXh0SXRlcmF0b3JFbWl0
c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucykpOworICAgIGF1dG8gc3RhcnRQ
b3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZXNvbHZlQ2hhcmFjdGVyTG9j
YXRpb24oc2NvcGUsIHN0YXJ0SW5kZXgsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdl
ZW5BbGxWaXNpYmxlUG9zaXRpb25zKSk7CisgICAgYXV0byBlbmRQb3NpdGlvbiA9IGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihyZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24oc2NvcGUsIGVuZElu
ZGV4LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9u
cykpOwogICAgIHVwZGF0ZVN0YXJ0RW5kKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApp
bmRleCA2ZmIxMmZkODNhOWVmY2ZkY2RmY2ZhYTQ2OGNhZTA4MDRkZTQ1MDdhLi4xYzdmZDE0MWVl
MTNiNzE3NmM1MzM2YTdkNWE3YWY4ZDI3OWQ4OGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRp
YyBTdHJpbmcgc3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uSW5kZXhSYW5nZShjb25zdCBWaXNpYmxl
UG9zaXRpb25JbmRleFJhbmdlCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnQgPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5zdGFydEluZGV4
LnZhbHVlLCByYW5nZS5zdGFydEluZGV4LnNjb3BlLmdldCgpKTsKICAgICBWaXNpYmxlUG9zaXRp
b24gZW5kID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2UuZW5kSW5kZXgudmFsdWUsIHJh
bmdlLmVuZEluZGV4LnNjb3BlLmdldCgpKTsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVj
dDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3Rh
cnQsIGVuZCkpOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdGb3JWaXNp
YmxlUG9zaXRpb25SYW5nZSh7IFdURk1vdmUoc3RhcnQpLCBXVEZNb3ZlKGVuZCkgfSk7CiB9CiAK
IFN0cmluZyBBY2Nlc3NpYmlsaXR5VW5kb1JlcGxhY2VkVGV4dDo6dGV4dERlbGV0ZWRCeVVuYXBw
bHkoKQpAQCAtMTQyMCwxOCArMTQyMCwxNCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBzdGFydEluZGV4ID0gMDsKICAgICAgICAgICAgIGlmIChz
dGFydEluUGFyYWdyYXBoKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9
IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQo
KS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWxl
Y3Rpb25TdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVu
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICAgICAgICAgICAgICBpZiAocGFy
YWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0
SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0
IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25z
KTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byByYW5nZVRvU2VsZWN0aW9uU3RhcnQgPSBtYWtl
U2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgdmlzaWJsZVN0YXJ0KSkKKyAgICAg
ICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KCpyYW5nZVRvU2VsZWN0
aW9uU3RhcnQsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9z
aXRpb25zKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZW5kSW5kZXggPSAwOwogICAg
ICAgICAgICAgaWYgKGVuZEluUGFyYWdyYXBoKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBwYXJh
Z3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICAg
ICAgYXV0byBzZWxlY3Rpb25FbmQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlRW5kLmRlZXBF
cXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgICAgICAgICAgICAg
IGlmIChwYXJhZ3JhcGhTdGFydCAmJiBzZWxlY3Rpb25FbmQpCi0gICAgICAgICAgICAgICAgICAg
IGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25F
bmQgfSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlv
bnMpOworICAgICAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtl
U2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgdmlzaWJsZUVuZCkpCisgICAgICAg
ICAgICAgICAgICAgIGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQoKnJhbmdlVG9TZWxlY3Rpb25F
bmQsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25z
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE1MDQsNyArMTUwMCw3IEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgaWYgKCFlZGl0YWJsZVJvb3QpCiAgICAgICAg
IGVkaXRhYmxlUm9vdCA9ICZkb2N1bWVudCgpOwogCi0gICAgYXV0byBkZXN0aW5hdGlvbkluZGV4
ID0gY2hhcmFjdGVyQ291bnQoeyB7ICplZGl0YWJsZVJvb3QsIDAgfSwgKm1ha2VCb3VuZGFyeVBv
aW50KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCkpIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uSW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7IHsgKmVk
aXRhYmxlUm9vdCwgMCB9LCAqbWFrZUJvdW5kYXJ5UG9pbnQoZGVzdGluYXRpb24pIH0sIFRleHRJ
dGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIAogICAg
IHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGRlc3RpbmF0aW9uLCBvcmlnaW5h
bElzRGlyZWN0aW9uYWwpKTsKICAgICBBU1NFUlQoZW5kaW5nU2VsZWN0aW9uKCkuaXNDYXJldE9y
UmFuZ2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25D
b21tYW5kLmNwcAppbmRleCA4NzBjNGRiYjY4ZDM4MGY5YTFiODFhMGMwZTVmMTNhYTMyNzRhNGZj
Li5mNjVkZjQ0OTY4N2QzZjUzMzI5NTdmZjg0ODE0ZmRjN2VmNzg2YjE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTM5LDYg
KzM5LDcgQEAKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRh
YmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlICJSYW5n
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQu
aCIKICNpbmNsdWRlICJSZW5kZXJlZERvY3VtZW50TWFya2VyLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nLmNwcAppbmRleCBhNzg3ZGZhYWYxYzUxMjg5NmY2ZTdiYjE3NjVlYTM0ODNkZDE1Mjg0
Li5iYTZjY2NmMDcxNjNjMzgzZDY1NDczYWFiZmQ5ZTEzOGE1NzVhYWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZy5jcHAKQEAgLTExMDQsMjcgKzExMDQsMTUgQEAgaW50IGluZGV4Rm9yVmlz
aWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBSZWZQ
dHI8Q29udGEKICAgICAgICAgICAgIHNjb3BlID0gJmRvY3VtZW50OwogICAgIH0KIAotICAgIGF1
dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChmaXJzdFBvc2l0aW9uSW5Ob2RlKHNjb3BlLmdl
dCgpKSk7Ci0gICAgaWYgKCFzdGFydCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byBlbmQg
PSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7
Ci0gICAgaWYgKCFlbmQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGNoYXJhY3Rl
ckNvdW50KHsgKnN0YXJ0LCAqZW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdl
ZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICBhdXRvIHJhbmdlID0gKm1ha2VTaW1wbGVSYW5n
ZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqc2NvcGUpLCBwb3NpdGlvbik7
CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJh
Y3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiB9CiAKIC8vIEZJWE1FOiBNZXJnZSB0
aGlzIGZ1bmN0aW9uIHdpdGggdGhlIG9uZSBhYm92ZS4KIGludCBpbmRleEZvclZpc2libGVQb3Np
dGlvbihOb2RlJiBub2RlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwg
Ym9vbCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24pCiB7Ci0gICAgYXV0byBzdGFydCA9IG1ha2VC
b3VuZGFyeVBvaW50KGZpcnN0UG9zaXRpb25Jbk5vZGUoJm5vZGUpKTsKLSAgICBpZiAoIXN0YXJ0
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZp
c2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KTsKLSAgICBpZiAoIWVuZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gY2hhcmFj
dGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSwgZm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uID8gVGV4
dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgOiBUZXh0
SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFu
Z2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMobm9kZSksIHZpc2libGVQb3Np
dGlvbik7CisgICAgcmV0dXJuIHJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnJhbmdlLCBmb3JTZWxl
Y3Rpb25QcmVzZXJ2YXRpb24gPyBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxs
VmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcikgOiAwOwogfQog
CiBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGludCBvZmZzZXQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKaW5kZXggZTg3Yjg5NGEzYjk2MzA1YmI1ZjY2ZTg1YWFhZjRmNzk1NjM2NTRi
MS4uNzdlZDY4MDkzN2IwZjg1ZDVhYTdkNTFhZTkyODgxMGE0YWU5ZTQ4OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcApAQCAtMzI1OSwxMiArMzI1OSw4IEBAIFN0cmluZyBFZGl0b3I6OnNl
bGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpIGNvbnN0CiBTdHJpbmcgRWRpdG9yOjpzZWxlY3Rl
ZFRleHQoVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgLy8gV2Ug
cmVtb3ZlICdcMCcgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkgYXJlIG5vdCB2aXNpYmx5IHJlbmRl
cmVkIHRvIHRoZSB1c2VyLgotICAgIGF1dG8mIHNlbGVjdGlvbiA9IG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgYXV0byBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpOwot
ICAgIGF1dG8gZW5kID0gc2VsZWN0aW9uLmVuZCgpOwotICAgIGlmIChzdGFydC5pc051bGwoKSB8
fCBzdGFydC5pc09ycGhhbigpIHx8IGVuZC5pc051bGwoKSB8fCBlbmQuaXNPcnBoYW4oKSkKLSAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgcmV0dXJuIHBsYWluVGV4dChTaW1wbGVS
YW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQp
IH0sIGJlaGF2aW9yKS5yZXBsYWNlV2l0aExpdGVyYWwoJ1wwJywgIiIpOworICAgIGF1dG8gcmFu
Z2UgPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAg
ICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHQoKnJhbmdlLCBiZWhhdmlvcikucmVwbGFjZVdpdGhM
aXRlcmFsKCdcMCcsICIiKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIFJlZlB0cjxUZXh0UGxhY2Vo
b2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXpl
JiBzaXplKQpAQCAtMzY4Miw3ICszNjc4LDcgQEAgc3RhdGljIFNpbXBsZVJhbmdlIGV4dGVuZFNl
bGVjdGlvbihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIHVuc2lnbmVkIGNoYXJhY3RlcnMKICAg
ICAgICAgc3RhcnQgPSBzdGFydC5wcmV2aW91cyhDaGFyYWN0ZXIpOwogICAgICAgICBlbmQgPSBl
bmQubmV4dChDaGFyYWN0ZXIpOwogICAgIH0KLSAgICByZXR1cm4geyAqbWFrZUJvdW5kYXJ5UG9p
bnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKX07CisgICAgcmV0dXJuICptYWtlU2lt
cGxlUmFuZ2Uoc3RhcnQsIGVuZCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9y
VGVsZXBob25lTnVtYmVycygpCkBAIC0zOTA5LDExICszOTA1LDcgQEAgU3RyaW5nIEVkaXRvcjo6
c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiBPcHRpb25hbDxTaW1wbGVSYW5nZT4g
RWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKICAgICBh
dXRvJiBzZWxlY3Rpb24gPSBtX2RvY3VtZW50LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAg
IGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKSkpOwotICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwotICAgIGlmICghc3RhcnQgfHwg
IWVuZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4geyB7ICpzdGFy
dCwgKmVuZCB9IH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBo
KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNp
YmxlRW5kKCkpKTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JU
ZXh0Q2hlY2tpbmdSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQpIGNvbnN0
CkBAIC00MjMxLDcgKzQyMjMsNyBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjphZGp1
c3RlZFNlbGVjdGlvblJhbmdlKCkKICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gYWRq
dXN0IHRoZSBzZWxlY3Rpb24gdG8gaW5jbHVkZSB0aGUgYW5jaG9yIHRhZyBpdCdzIGluPyBXaG9l
dmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0byBsZWF2ZSB1cyBhIGNvbW1l
bnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxlLgogICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3RlZFJh
bmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvIGVuY2xvc2luZ0FuY2hv
ciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3IocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UtPmVuZC5jb250YWlu
ZXIpLmdldCgpKSwgSFRNTE5hbWVzOjphVGFnKSkgeworICAgICAgICBpZiAoYXV0byBlbmNsb3Np
bmdBbmNob3IgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNv
bW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpyYW5nZSkuZ2V0KCkpLCBIVE1MTmFtZXM6OmFUYWcpKSB7
CiAgICAgICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyYW5nZS0+c3RhcnQpKSA+PSAwKQogICAgICAgICAgICAgICAgIHJhbmdlLT5zdGFy
dCA9IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbmNsb3NpbmdBbmNob3Ip
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmlu
ZGV4IDRhNjNhZDgwYzUxZTExNzZlNGI5ODQyMTU3NDJhNDkwMGFiNTdjNDcuLjBkMjhjY2RkYTA0
MWRhNWY2MDJhZmVmNDBmMTgyZjAzYzc0MWFhZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0yNjE4LDM0ICsyNjE4LDYgQEAgVUNoYXIgRnJhbWVTZWxl
Y3Rpb246OmNoYXJhY3RlckFmdGVyQ2FyZXRTZWxlY3Rpb24oKSBjb25zdAogICAgIHJldHVybiB2
aXNpYmxlUG9zaXRpb24uY2hhcmFjdGVyQWZ0ZXIoKTsKIH0KIAotaW50IEZyYW1lU2VsZWN0aW9u
Ojp3b3JkT2Zmc2V0SW5SYW5nZShjb25zdCBSYW5nZSAqcmFuZ2UpIGNvbnN0Ci17Ci0gICAgaWYg
KCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBtX3NlbGVjdGlvbjsKLSAgICBpZiAoIXNlbGVjdGlvbi5pc0NhcmV0KCkpCi0gICAg
ICAgIHJldHVybiAtMTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgb25seSB3b3JrIGluIGNh
c2VzIHdoZXJlIHRoZSBzZWxlY3Rpb24gcmVtYWlucyBpbgotICAgIC8vIHRoZSBzYW1lIG5vZGUg
YWZ0ZXIgaXQgaXMgZXhwYW5kZWQuIEltcHJvdmUgdG8gaGFuZGxlIG1vcmUgY29tcGxpY2F0ZWQK
LSAgICAvLyBjYXNlcy4KLSAgICBpbnQgcmVzdWx0ID0gc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSAtIHJhbmdlLT5zdGFydE9mZnNldCgpOwotICAgIGlmIChyZXN1
bHQgPCAwKQotICAgICAgICByZXN1bHQgPSAwOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJv
b2wgRnJhbWVTZWxlY3Rpb246OnNwYWNlRm9sbG93c1dvcmRJblJhbmdlKGNvbnN0IFJhbmdlICpy
YW5nZSkgY29uc3QKLXsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgTm9kZSYgbm9kZSA9IHJhbmdlLT5lbmRDb250YWluZXIoKTsKLSAgICBpbnQgZW5kT2Zmc2V0
ID0gcmFuZ2UtPmVuZE9mZnNldCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwb3MoY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKCZub2RlLCBlbmRPZmZzZXQpLCBWUF9ERUZBVUxUX0FGRklOSVRZ
KTsKLSAgICByZXR1cm4gaXNTcGFjZU9yTmV3bGluZShwb3MuY2hhcmFjdGVyQWZ0ZXIoKSk7Ci19
Ci0KIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0RG9jdW1lbnRTdGFydCgpIGNvbnN0
CiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKQEAgLTI2
NjAsMTUgKzI2MzIsNiBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25BdERvY3VtZW50
U3RhcnQoKSBjb25zdAogICAgIHJldHVybiBpc1N0YXJ0T2ZEb2N1bWVudChwb3MpOwogfQogCi1i
b29sIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdAotewot
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247Ci0gICAgaWYgKHNl
bGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGFj
dHVhbFNlbGVjdGlvbkF0U2VudGVuY2VTdGFydChzZWxlY3Rpb24pOwotfQotCiBib29sIEZyYW1l
U2VsZWN0aW9uOjpzZWxlY3Rpb25BdFdvcmRTdGFydCgpIGNvbnN0CiB7CiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKQEAgLTI4MzQsOSArMjc5NywxMiBAQCBW
aXNpYmxlU2VsZWN0aW9uIEZyYW1lU2VsZWN0aW9uOjp3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uKGNvbnN0IFZpcwogICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0
VmlzaWJsZVBvcywgZW5kVmlzaWJsZVBvcyk7ICAgIAogfQogCi1ib29sIEZyYW1lU2VsZWN0aW9u
OjphY3R1YWxTZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsKSBjb25zdAorYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0
KCkgY29uc3QKIHsKLSAgICBQb3NpdGlvbiBzdGFydFBvcyhzZWwuc3RhcnQoKSk7CisgICAgaWYg
KG1fc2VsZWN0aW9uLmlzTm9uZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQb3Np
dGlvbiBzdGFydFBvcyhtX3NlbGVjdGlvbi5zdGFydCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24g
cG9zKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgp
LCBzdGFydFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSwgVlBfREVGQVVMVF9BRkZJTklU
WSk7CiAgICAgaWYgKHBvcy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGRhNDJlMGZmYWNjZWUxZGU1ZGU3
ZmJhMjJlOWU5ZmQ4OTAzNDZhMmQuLjIxMWNhOGJiMzZkODAyNmQ0YjJhMGIwZWUxYjYzYWNmYjk2
N2JhZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTIzMiw4
ICsyMzIsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVySW5S
ZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgVUNoYXIgY2hhcmFjdGVyQmVmb3JlQ2FyZXRTZWxlY3Rpb24oKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uKCkgY29uc3Q7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgaW50IHdvcmRPZmZzZXRJblJhbmdlKGNvbnN0IFJhbmdlKikg
Y29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzcGFjZUZvbGxvd3NXb3JkSW5SYW5nZShj
b25zdCBSYW5nZSopIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXRE
b2N1bWVudFN0YXJ0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25B
dFNlbnRlbmNlU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGlv
bkF0V29yZFN0YXJ0KCkgY29uc3Q7CkBAIC0zMzMsNyArMzMxLDYgQEAgcHJpdmF0ZToKICAgICBi
b29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgYm9vbCBhY3R1YWxTZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpIGNvbnN0OwogICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUJ5QWx0ZXJpbmdD
dXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uLCBpbnQgYW1vdW50KSBjb25zdDsKICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXgg
NGIyZjU0NTgyYTM2ODEyOTQwNWRmMjA5YWM5ZmE4YzZiNjIwYzA2ZS4uOGZmZjRmNDE3MWIzNWQ5
ZjQ4ZjAyNGY2MmQyNDY1NzQ5NmZlYmZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkVkaXRv
ckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24u
aCIKKyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
VGV4dENoZWNrZXJDbGllbnQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKQEAgLTE2MCwx
MCArMTYxLDEwIEBAIFNpbXBsZVJhbmdlIFRleHRDaGVja2luZ1BhcmFncmFwaDo6c3VicmFuZ2Uo
Q2hhcmFjdGVyUmFuZ2UgcmFuZ2UpIGNvbnN0CiAKIEV4Y2VwdGlvbk9yPHVpbnQ2NF90PiBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGg6Om9mZnNldFRvKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikgY29u
c3QKIHsKLSAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKLSAgICBp
ZiAoIWVuZCkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBhcmFncmFwaFJhbmdl
KCkuc3RhcnQsIHBvc2l0aW9uKTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgVHlwZUVycm9yIH07Ci0gICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgcGFyYWdy
YXBoUmFuZ2UoKS5zdGFydCwgKmVuZCB9KTsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoKnJh
bmdlKTsKIH0KIAogYm9vbCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmlzRW1wdHkoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmNwcAppbmRleCA5NjlhN2MzOTNmMTMwYzU0ZmRkMjkxZWVlOGRmOWQwZTA3MTI5ZTk2Li40
MGM0NmE5OGVlZjdlZGM4YTYwMjhhNWU2YmRkNjk4MDcwN2YwMmE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcApAQCAt
NDAsNyArNDAsNiBAQAogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCi0jaW5jbHVkZSAiUmFu
Z2UuaCIKICNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNsdWRlICJUZXh0
LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCkBAIC0xNTQsNyArMTUzLDcgQEAgc3RhdGlj
IGJvb2wgaXNOb3RTcGFjZShVQ2hhciBjaGFyYWN0ZXIpCiBjbGFzcyBQYXJhZ3JhcGhDb250ZW50
SXRlcmF0b3IgewogcHVibGljOgogICAgIFBhcmFncmFwaENvbnRlbnRJdGVyYXRvcihjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCi0gICAgICAgIDogbV9pdGVyYXRv
cih7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpIH0s
IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkpCisgICAgICAgIDogbV9pdGVyYXRv
cigqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpLCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVW
aXNpYmlsaXR5KQogICAgICAgICAsIG1fbm9kZShzdGFydC5maXJzdE5vZGUoKSkKICAgICAgICAg
LCBtX3Bhc3RFbmROb2RlKGVuZC5maXJzdE5vZGUoKSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCBhZjVlYjFiN2U2YzQxZWQxMGQ0YTZjOGQwM2E1
YWVlNDNhMDczYmFiLi5kMDE1MTAyYTYwOWZmYWVkMjYxMmFmMmU3OWMzYjlmZWRkNWYxOWFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTMzMiw4ICszMzIs
OCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OnBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25G
b3JEZWxldGlvbihjb25zdCBWaXNpYmxlU2VsZQogICAgICAgICByZXR1cm47CiAgICAgcG9zdFRl
eHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihBWFRleHRFZGl0VHlwZURlbGV0ZSwgQWNjZXNzaWJp
bGl0eU9iamVjdDo6c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc2VsZWN0aW9uKSwgc2Vs
ZWN0aW9uLnN0YXJ0KCkpOwogICAgIFZpc2libGVQb3NpdGlvbkluZGV4UmFuZ2UgcmFuZ2U7Ci0g
ICAgcmFuZ2Uuc3RhcnRJbmRleC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVj
dGlvbi5zdGFydCgpLCByYW5nZS5zdGFydEluZGV4LnNjb3BlKTsKLSAgICByYW5nZS5lbmRJbmRl
eC52YWx1ZSA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5lbmQoKSwgcmFuZ2Uu
ZW5kSW5kZXguc2NvcGUpOworICAgIHJhbmdlLnN0YXJ0SW5kZXgudmFsdWUgPSBpbmRleEZvclZp
c2libGVQb3NpdGlvbihzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIHJhbmdlLnN0YXJ0SW5kZXgu
c2NvcGUpOworICAgIHJhbmdlLmVuZEluZGV4LnZhbHVlID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRp
b24oc2VsZWN0aW9uLnZpc2libGVFbmQoKSwgcmFuZ2UuZW5kSW5kZXguc2NvcGUpOwogICAgIGNv
bXBvc2l0aW9uKCktPnNldFJhbmdlRGVsZXRlZEJ5VW5hcHBseShyYW5nZSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAppbmRleCBkZjNlYWZkZDVlOTgw
ZTI0MjdlMmExYjc5OGFkNDBkZGU4Nzk5OWY0Li4wMTY4ZWI4MTgxNDJkM2Y0Njk5ZjU1ZWEwZmY4
YjIyYWFkYjYzNzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
Y3BwCkBAIC04NDksNiArODQ5LDExIEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgc3RyZWFtLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvCiAgICAgcmV0
dXJuIHN0cmVhbTsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShj
b25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIG1ha2VTaW1w
bGVSYW5nZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5oCmluZGV4IGY4NGJjZGZkNzJmNWJjNDU3NjMzZGE0ODMyNzIxZTUy
NzdhMjQ4NTEuLjkxZWQ0Y2MwZjM0NDgzNDc1MjJkNWQxMjZhZTQ5ZjNlMmMwMWUyZGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaApAQCAtMzIsNiArMzIsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJhbmdlOwogCitzdHJ1Y3QgU2ltcGxlUmFuZ2U7
CisKIC8vIFZpc2libGVQb3NpdGlvbiBkZWZhdWx0IGFmZmluaXR5IGlzIGRvd25zdHJlYW0gYmVj
YXVzZQogLy8gdGhlIGNhbGxlcnMgZG8gbm90IHJlYWxseSBjYXJlICh0aGV5IGp1c3Qgd2FudCB0
aGUKIC8vIGRlZXAgcG9zaXRpb24gd2l0aG91dCByZWdhcmQgdG8gbGluZSBwb3NpdGlvbiksIGFu
ZCB0aGlzCkBAIC0xNDAsNiArMTQyLDE1IEBAIGJvb2wgYXJlVmlzaWJsZVBvc2l0aW9uc0luU2Ft
ZVRyZWVTY29wZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zCiBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgRUFmZmluaXR5KTsKIFdF
QkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIAorc3RydWN0IFZpc2libGVQb3NpdGlvblJhbmdl
IHsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQ7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZDsK
KworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gc3RhcnQuaXNOdWxsKCkgfHwgZW5k
LmlzTnVsbCgpOyB9Cit9OworCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdl
KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJik7CisKIC8vIGlubGluZXMKIAogLy8gRklYTUU6
IFRoaXMgc2hvdWxkbid0IGlnbm9yZSBhZmZpbml0eS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDA0Zjg4NGI3MjA1ZTkzOTNhYTk5YzdkN2I0ZWJi
OTZiYzRmM2Y4ODAuLjU3MTE5ZGIyYWE2ZTc4NmRjNmI0MzJmNmMzODcxOWQ1Y2U4MTUxYTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMzAsNyAr
MzAsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmcuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yLmgiCkBAIC0xMzIsMTEgKzEzMSw4IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBWaXNpYmxl
U2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAoaXNOb25lT3JPcnBoYW5l
ZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIFBvc2l0aW9uIHN0YXJ0ID0g
bV9zdGFydC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBQb3NpdGlvbiBlbmQgPSBt
X2VuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBpZiAoc3RhcnQuaXNOdWxsKCkg
fHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgKm1h
a2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZCkgfTsKKyAgICAv
LyBGSVhNRTogU2VlbXMgbGlrZWx5IHdlIGRvbid0IG5lZWQgdG8gY2FsbCBwYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQgaGVyZS4KKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKG1fc3RhcnQucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1fZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFs
aXplZFJhbmdlKCkgY29uc3QKQEAgLTE3OSwxOCArMTc1LDEzIEBAIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAgICAgICAg
IGlmIChjb21wYXJlUG9zaXRpb25zKHMsIGUpID4gMCkgewogICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoZSBzdGFydCBpcyBiZWZvcmUgdGhlIGVuZC4KICAgICAgICAgICAgIC8vIFRoZSBlbmQg
Y2FuIHdpbmQgdXAgYmVmb3JlIHRoZSBzdGFydCBpZiBjb2xsYXBzZWQgd2hpdGVzcGFjZSBpcyB0
aGUgb25seSB0aGluZyBzZWxlY3RlZC4KLSAgICAgICAgICAgIFBvc2l0aW9uIHRtcCA9IHM7Ci0g
ICAgICAgICAgICBzID0gZTsKLSAgICAgICAgICAgIGUgPSB0bXA7CisgICAgICAgICAgICBzdGQ6
OnN3YXAocywgZSk7CiAgICAgICAgIH0KICAgICAgICAgcyA9IHMucGFyZW50QW5jaG9yZWRFcXVp
dmFsZW50KCk7CiAgICAgICAgIGUgPSBlLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAg
IH0KIAotICAgIGlmIChzLmlzTnVsbCgpIHx8IGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9p
bnQocyksICptYWtlQm91bmRhcnlQb2ludChlKSB9OworICAgIHJldHVybiBtYWtlU2ltcGxlUmFu
Z2UocywgZSk7CiB9CiAKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6ZXhwYW5kVXNpbmdHcmFudWxh
cml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCkBAIC0yMDIsMTggKzE5Myw2IEBAIGJv
b2wgVmlzaWJsZVNlbGVjdGlvbjo6ZXhwYW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gbWFrZVNlYXJjaFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKLXsK
LSAgICBhdXRvIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChub2RlKTsKLSAgICBpZiAo
IXNjb3BlKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRh
cnlQb2ludChwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYgKCFz
dGFydCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4geyB7IFdURk1vdmUoKnN0YXJ0
KSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqc2NvcGUpIH0gfTsKLX0KLQog
Ym9vbCBWaXNpYmxlU2VsZWN0aW9uOjppc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUg
cnVsZSkgY29uc3QKIHsKICAgICByZXR1cm4gIW5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2Rl
KCkgJiYgdmlzaWJsZVN0YXJ0KCkucHJldmlvdXMocnVsZSkuaXNOdWxsKCkgJiYgdmlzaWJsZUVu
ZCgpLm5leHQocnVsZSkuaXNOdWxsKCk7CkBAIC0yMjEsMTIgKzIwMCwxMSBAQCBib29sIFZpc2li
bGVTZWxlY3Rpb246OmlzQWxsKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25z
dAogCiB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFwcGVuZFRyYWlsaW5nV2hpdGVzcGFjZSgpCiB7
Ci0gICAgYXV0byBzZWFyY2hSYW5nZSA9IG1ha2VTZWFyY2hSYW5nZShtX2VuZCk7Ci0gICAgaWYg
KCFzZWFyY2hSYW5nZSkKKyAgICBhdXRvIHNjb3BlID0gZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2Nr
Rmxvd0VsZW1lbnQobV9lbmQuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgaWYgKCFzY29wZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KCpzZWFyY2hSYW5n
ZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMp
OwotCisgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KCptYWtlU2ltcGxlUmFuZ2UobV9lbmQs
IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKnNjb3BlKSksIFRleHRJdGVyYXRv
ckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICBmb3IgKDsg
IWNoYXJJdC5hdEVuZCgpICYmIGNoYXJJdC50ZXh0KCkubGVuZ3RoKCk7IGNoYXJJdC5hZHZhbmNl
KDEpKSB7CiAgICAgICAgIFVDaGFyIGMgPSBjaGFySXQudGV4dCgpWzBdOwogICAgICAgICBpZiAo
KCFpc1NwYWNlT3JOZXdsaW5lKGMpICYmIGMgIT0gbm9CcmVha1NwYWNlKSB8fCBjID09ICdcbicp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCmluZGV4IDNmODgyZTE5
ZDQxOWJmYThkNWVkZWFlNTkyODZmNmFhZGRlMjI3N2UuLjg3NmRlMTg2OTU0M2M1MjRlZGRjNDY1
Mzc4ODVmOTE0ZDc4M2VmNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVj
dGlvbi5oCkBAIC03Miw2ICs3Miw4IEBAIHB1YmxpYzoKICAgICBWaXNpYmxlUG9zaXRpb24gdmlz
aWJsZUJhc2UoKSBjb25zdCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24obV9iYXNlLCBpc1Jhbmdl
KCkgPyAoaXNCYXNlRmlyc3QoKSA/IFVQU1RSRUFNIDogRE9XTlNUUkVBTSkgOiBhZmZpbml0eSgp
KTsgfQogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRXh0ZW50KCkgY29uc3QgeyByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBpc1JhbmdlKCkgPyAoaXNCYXNlRmlyc3QoKSA/IERP
V05TVFJFQU0gOiBVUFNUUkVBTSkgOiBhZmZpbml0eSgpKTsgfQogCisgICAgb3BlcmF0b3IgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdCB7IHJldHVybiB7IHZpc2libGVTdGFydCgpLCB2aXNp
YmxlRW5kKCkgfTsgfQorCiAgICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVybiBzZWxlY3Rp
b25UeXBlKCkgPT0gTm9TZWxlY3Rpb247IH0KICAgICBib29sIGlzQ2FyZXQoKSBjb25zdCB7IHJl
dHVybiBzZWxlY3Rpb25UeXBlKCkgPT0gQ2FyZXRTZWxlY3Rpb247IH0KICAgICBib29sIGlzUmFu
Z2UoKSBjb25zdCB7IHJldHVybiBzZWxlY3Rpb25UeXBlKCkgPT0gUmFuZ2VTZWxlY3Rpb247IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCAxMmQ0Y2FjMzZiODQ5
MDQ5ZjZlMjQ0MmU3NjM2MTEzYjY1NGI1N2I3Li45MjBkNmJkYzMyNzIzZTJkODI5YTRhOTU4MDQw
MDZmZDI5Zjc2ZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVV
bml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCkBA
IC0xOTA1LDkgKzE5MDUsNyBAQCBzdGQ6OnB0cmRpZmZfdCBkaXN0YW5jZUJldHdlZW5Qb3NpdGlv
bnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUAogewogICAgIGlmIChh
LmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBh
IDwgYgotICAgICAgICA/IC1jaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChhKSwg
Km1ha2VCb3VuZGFyeVBvaW50KGIpIH0pCi0gICAgICAgIDogY2hhcmFjdGVyQ291bnQoeyAqbWFr
ZUJvdW5kYXJ5UG9pbnQoYiksICptYWtlQm91bmRhcnlQb2ludChhKSB9KTsKKyAgICByZXR1cm4g
YSA8IGIgPyAtY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShhLCBiKSkgOiBjaGFyYWN0
ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKGIsIGEpKTsKIH0KIAogdm9pZCBjaGFyYWN0ZXJzQXJv
dW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25l
QWZ0ZXIsIFVDaGFyMzImIG9uZUJlZm9yZSwgVUNoYXIzMiYgdHdvQmVmb3JlKQpAQCAtMTkzNCw3
ICsxOTMyLDcgQEAgdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0ZXIKICAgICB9CiAKICAgICBpZiAoc3Rh
cnRQb3NpdGlvbiAhPSBlbmRQb3NpdGlvbikgewotICAgICAgICBTdHJpbmcgY2hhcmFjdGVyU3Ry
aW5nID0gcGxhaW5UZXh0KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH0pLnJlcGxhY2Uobm9CcmVha1NwYWNlLCAnICcp
OworICAgICAgICBTdHJpbmcgY2hhcmFjdGVyU3RyaW5nID0gcGxhaW5UZXh0KCptYWtlU2ltcGxl
UmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKS5yZXBsYWNlKG5vQnJlYWtTcGFjZSwg
JyAnKTsKICAgICAgICAgZm9yIChpbnQgaSA9IGNoYXJhY3RlclN0cmluZy5sZW5ndGgoKSAtIDEs
IGluZGV4ID0gMDsgaSA+PSAwICYmIGluZGV4IDwgbWF4Q2hhcmFjdGVyczsgLS1pKSB7CiAgICAg
ICAgICAgICBpZiAoIWluZGV4ICYmIG5leHRQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgICAg
ICAgICBpbmRleCsrOwpAQCAtMTk0OCw3ICsxOTQ2LDYgQEAgdm9pZCBjaGFyYWN0ZXJzQXJvdW5k
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0
ZXIKIAogUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGNvdWxkIGJlIGluIGEg
bm9uIHZpc2libGUgZWxlbWVudCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIFZpc2libGVQb3NpdGlvbi4K
ICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBA
IC0xOTY2LDcgKzE5NjMsNiBAQCBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIGRvIHsKICAgICAgICAgY3VycmVu
dFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY3VycmVudFBv
c2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpCYWNrd2FyZCk7CiAgICAgfSB3aGlsZSAoY3VycmVudFBvc2l0aW9uLmlzTm90TnVsbCgp
ICYmICFhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjdXJyZW50UG9zaXRpb24sIFRleHRHcmFudWxh
cml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSk7Ci0K
ICAgICBpZiAoY3VycmVudFBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBjdXJyZW50UG9zaXRp
b24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgVGV4dEdy
YW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7
CiAKQEAgLTE5ODEsOCArMTk3Nyw2IEBAIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiBWaXNpYmxlUG9zaXRpb24gY2xv
c2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRp
b24pCiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHJlc3VsdDsKLQotICAgIC8vIG1vdmUgdGhlIHBv
c2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIHdvcmQKICAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVs
YXJpdHkocG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6TGluZUdyYW51bGFyaXR5LCBTZWxlY3Rp
b25EaXJlY3Rpb246OkZvcndhcmQpKSB7CiAgICAgICAgIC8vIERvbid0IGNyb3NzIGxpbmUgYm91
bmRhcmllcy4KICAgICAgICAgcmVzdWx0ID0gcG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KaW5kZXggMjM2YTNhYjQ3YWE4NThjY2U2MTZj
ZDFiMzUxMWViZTRkMjk0ZTBkYS4uNmIwOGZkMmRmMTk4YWFlZmNiYzk5MjIyMzU5OTViNTYyZTZk
NzJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQpAQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgT3B0aW9uYWw8RGV0ZWN0ZWRJdGVtPiBkZXRlY3RJ
dGVtKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0CiAgICAgaWYgKHBvc2l0
aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIFN0cmluZyBmdWxsUGxhaW5U
ZXh0U3RyaW5nID0gcGxhaW5UZXh0KGNvbnRleHRSYW5nZSk7Ci0gICAgQ0ZJbmRleCBoaXRMb2Nh
dGlvbiA9IGNoYXJhY3RlckNvdW50KHsgY29udGV4dFJhbmdlLnN0YXJ0LCAqbWFrZUJvdW5kYXJ5
UG9pbnQocG9zaXRpb24pIH0pOworICAgIENGSW5kZXggaGl0TG9jYXRpb24gPSBjaGFyYWN0ZXJD
b3VudCgqbWFrZVNpbXBsZVJhbmdlKGNvbnRleHRSYW5nZS5zdGFydCwgcG9zaXRpb24pKTsKIAog
ICAgIGF1dG8gc2Nhbm5lciA9IGFkb3B0Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVT
dGFuZGFyZCwgMCwgbnVsbHB0cikpOwogICAgIGF1dG8gc2NhblF1ZXJ5ID0gYWRvcHRDRihERFNj
YW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnVsbFBsYWluVGV4
dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBmdWxsUGxhaW5U
ZXh0U3RyaW5nLmxlbmd0aCgpKSkpOwpAQCAtMjcyLDE2ICsyNzIsMTQgQEAgc3RhdGljIHZvaWQg
cmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5jaG9yKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgZWxlbWVu
dFBhcmVudC0+cmVtb3ZlQ2hpbGQoZWxlbWVudCk7CiB9CiAKLXN0YXRpYyBib29sIHNlYXJjaEZv
ckxpbmtSZW1vdmluZ0V4aXN0aW5nRERMaW5rcyhOb2RlJiBzdGFydE5vZGUsIE5vZGUmIGVuZE5v
ZGUsIGJvb2wmIGRpZE1vZGlmeURPTSkKK3N0YXRpYyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmlu
Z0V4aXN0aW5nRERMaW5rcyhOb2RlJiBzdGFydE5vZGUsIE5vZGUmIGVuZE5vZGUpCiB7Ci0gICAg
ZGlkTW9kaWZ5RE9NID0gZmFsc2U7CiAgICAgZm9yIChOb2RlKiBub2RlID0gJnN0YXJ0Tm9kZTsg
bm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAgICAgIGlmIChp
czxIVE1MQW5jaG9yRWxlbWVudD4oKm5vZGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBhbmNob3Ig
PSBkb3duY2FzdDxIVE1MQW5jaG9yRWxlbWVudD4oKm5vZGUpOwogICAgICAgICAgICAgaWYgKCFl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKGFuY2hvci5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHhfYXBwbGVfZGF0YV9kZXRlY3RvcnNBdHRyKSwgInRydWUiKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihh
bmNob3IpOwotICAgICAgICAgICAgZGlkTW9kaWZ5RE9NID0gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKG5vZGUgPT0gJmVuZE5vZGUpIHsKQEAgLTI5MSw3ICsyODksNiBA
QCBzdGF0aWMgYm9vbCBzZWFyY2hGb3JMaW5rUmVtb3ZpbmdFeGlzdGluZ0RETGlua3MoTm9kZSYg
c3RhcnROb2RlLCBOb2RlJiBlbmROb2RlLAogICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShhbmNob3IuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih4X2Fw
cGxlX2RhdGFfZGV0ZWN0b3JzQXR0ciksICJ0cnVlIikpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIHJlbW92ZVJlc3VsdExpbmtzRnJvbUFuY2hvcihh
bmNob3IpOwotICAgICAgICAgICAgICAgIGRpZE1vZGlmeURPTSA9IHRydWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTU1MywyOSArNTUw
LDEyIEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0
IFNpbXBsZVJhbmdlJiBjb250ZXh0UmFuZ2UsIERhCiAgICAgICAgIGlmIChyZXN1bHRSYW5nZXMu
aXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICAvLyBT
dG9yZSB0aGUgcmFuZ2UgYm91bmRhcmllcyBhcyBQb3NpdGlvbiwgYmVjYXVzZSB0aGUgRE9NIGNv
dWxkIGNoYW5nZSBpZiB3ZSBmaW5kCi0gICAgICAgIC8vIG9sZCBkYXRhIGRldGVjdG9yIGxpbmsu
Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8UG9zaXRpb24sIFBvc2l0aW9uPj4gcmFuZ2VCb3Vu
ZGFyaWVzOwotICAgICAgICByYW5nZUJvdW5kYXJpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShy
ZXN1bHRSYW5nZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJlc3VsdFJh
bmdlcykKLSAgICAgICAgICAgIHJhbmdlQm91bmRhcmllcy51bmNoZWNrZWRBcHBlbmQoeyBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24ocmFuZ2UuZW5kKSB9KTsKLQogICAgICAgICBOU1N0cmluZyAqaWRlbnRpZmllciA9
IGRhdGFEZXRlY3RvclN0cmluZ0ZvclBhdGgoaW5kZXhQYXRoc1tyZXN1bHRJbmRleF0uZ2V0KCkp
OwogICAgICAgICBOU1N0cmluZyAqY29ycmVzcG9uZGluZ1VSTCA9IGNvbnN0cnVjdFVSTFN0cmlu
Z0ZvclJlc3VsdChjb3JlUmVzdWx0LCBpZGVudGlmaWVyLCByZWZlcmVuY2VEYXRlLCAoTlNUaW1l
Wm9uZSAqKXR6LmdldCgpLCB0eXBlcyk7Ci0gICAgICAgIGJvb2wgZGlkTW9kaWZ5RE9NID0gZmFs
c2U7CiAKLSAgICAgICAgaWYgKCFjb3JyZXNwb25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1v
dmluZ0V4aXN0aW5nRERMaW5rcyhyZXN1bHRSYW5nZXMuZmlyc3QoKS5zdGFydC5jb250YWluZXIs
IHJlc3VsdFJhbmdlcy5sYXN0KCkuZW5kLmNvbnRhaW5lciwgZGlkTW9kaWZ5RE9NKSkKKyAgICAg
ICAgaWYgKCFjb3JyZXNwb25kaW5nVVJMIHx8IHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW5n
RERMaW5rcyhyZXN1bHRSYW5nZXMuZmlyc3QoKS5zdGFydC5jb250YWluZXIsIHJlc3VsdFJhbmdl
cy5sYXN0KCkuZW5kLmNvbnRhaW5lcikpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChkaWRNb2RpZnlET00pIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBET00g
d2FzIG1vZGlmaWVkIGJlY2F1c2Ugc29tZSBvbGQgbGlua3Mgd2VyZSByZW1vdmVkLAotICAgICAg
ICAgICAgLy8gd2UgbmVlZCB0byByZWNyZWF0ZSB0aGUgcmFuZ2VzIGJlY2F1c2UgdGhleSBjb3Vs
ZCBubyBsb25nZXIgYmUgdmFsaWQuCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0UmFuZ2VzLnNp
emUoKSA9PSByYW5nZUJvdW5kYXJpZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIHJlc3VsdFJhbmdl
cy5zaHJpbmsoMCk7IC8vIEtlZXAgY2FwYWNpdHkgYXMgd2UgYXJlIGdvaW5nIHRvIHJlcG9wdWxh
dGUgdGhlIFZlY3RvciByaWdodCBhd2F5IHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zLgot
ICAgICAgICAgICAgZm9yIChhdXRvJiByYW5nZUJvdW5kYXJ5IDogcmFuZ2VCb3VuZGFyaWVzKQot
ICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlcy51bmNoZWNrZWRBcHBlbmQoeyAqbWFrZUJvdW5k
YXJ5UG9pbnQocmFuZ2VCb3VuZGFyeS5maXJzdCksICptYWtlQm91bmRhcnlQb2ludChyYW5nZUJv
dW5kYXJ5LnNlY29uZCkgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbGFzdE1v
ZGlmaWVkUXVlcnlPZmZzZXQgPSBxdWVyeVJhbmdlLmVuZDsKICAgICAgICAgQk9PTCBzaG91bGRV
c2VMaWdodExpbmtzID0gc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERTaG91bGRVc2VMaWdo
dExpbmtzRm9yUmVzdWx0KGNvcmVSZXN1bHQsIFtpbmRleFBhdGhzW3Jlc3VsdEluZGV4XSBsZW5n
dGhdID4gMSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGlj
dGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFy
eUxvb2t1cC5tbQppbmRleCBiY2NiMGYwMDgyN2I5ZWE0NDc0OWY3MGQ5ZDQ1ZDg2YmQwOWE1MzZj
Li4yZGQwNWUxNjViMGI2ZGQ0OGQ2YzZmNjAzNzJlN2Q1Y2VmOGNhN2QyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC0yNzksOCAr
Mjc5LDggQEAgT3B0aW9uYWw8c3RkOjp0dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+
PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGUKICAgICBpZiAocGFyYWdyYXBoU3RhcnQu
aXNOdWxsKCkgfHwgcGFyYWdyYXBoRW5kLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgYXV0byBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gY2hhcmFjdGVyQ291
bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9p
bnQoc2VsZWN0aW9uU3RhcnQpIH0pOwotICAgIGF1dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQg
PSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICpt
YWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH0pOworICAgIGF1dG8gbGVuZ3RoVG9TZWxl
Y3Rpb25TdGFydCA9IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2UocGFyYWdyYXBoU3Rh
cnQsIHNlbGVjdGlvblN0YXJ0KSk7CisgICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9
IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlv
bkVuZCkpOwogICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1Nl
bGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCk7CiAKICAgICBSZWZQdHI8UmFu
Z2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdy
YXBoRW5kKTsKQEAgLTMyOCwxNSArMzI4LDEzIEBAIE9wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxl
UmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlCiAg
ICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKIAogICAg
ICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBw
YXJhZ3JhcGhzIG9mIHRleHQuCi0gICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91
bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7Ci0gICAgICAgIGF1
dG8gcGFyYWdyYXBoRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0
aW9uRW5kKSk7Ci0gICAgICAgIGlmICghcGFyYWdyYXBoU3RhcnQgfHwgIXBhcmFncmFwaEVuZCkK
KyAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJh
Z3JhcGgoc2VsZWN0aW9uU3RhcnQpLCBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpKTsKKyAg
ICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHsgeyAqcGFyYWdyYXBoU3Rh
cnQsICpwYXJhZ3JhcGhFbmQgfSB9OwotICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJh
bmdlKGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQo
c2VsZWN0aW9uU3RhcnQpIH0pLAotICAgICAgICAgICAgY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJv
dW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9u
RW5kKSB9KSk7Ci0gICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBo
U3RhcnQsICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikgfSk7CisgICAgICAgIHNlbGVjdGlv
blJhbmdlID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShmdWxs
Q2hhcmFjdGVyUmFuZ2UtPnN0YXJ0LCBzZWxlY3Rpb25TdGFydCkpLAorICAgICAgICAgICAgY2hh
cmFjdGVyQ291bnQoKm1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5k
KSkpOworICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2Uo
ZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydCwgcG9zaXRpb24pKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMgeyBw
b3NpdGlvbiB9OwogICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLmV4cGFu
ZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHkpOwpAQCAt
MzUwLDcgKzM0OCw3IEBAIE9wdGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlv
bmFyeSAqPj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlCiAgICAgICAgIGZ1bGxDaGFy
YWN0ZXJSYW5nZSA9IHsgKmV4cGFuZGVkUmFuZ2UgfTsKIAogICAgICAgICBzZWxlY3Rpb25SYW5n
ZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgICAgICBoaXRJbmRleCA9IGNoYXJh
Y3RlckNvdW50KHsgZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50
KHBvc2l0aW9uKSB9KTsKKyAgICAgICAgaGl0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNp
bXBsZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnQsIHBvc2l0aW9uKSk7CiAgICAgfQog
CiAgICAgTlNSYW5nZSBzZWxlY3RlZFJhbmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZl
YWxSYW5nZUF0SW5kZXg6aGl0SW5kZXggc2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdp
dGhSYW5nZTpzZWxlY3Rpb25SYW5nZV1dIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29j
b2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2Nv
YS5tbQppbmRleCA1MWFlMjM0MGNlMzc5M2U3MTFjYThmZDJkOTc1NDg0Mjg5MjI5MTM4Li4yODcz
M2VlZWEzNzZjZjhmZTA4MTc1NDQ3MGViMzMxODU0YWRlNDMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQpAQCAtNTMs
NiArNTMsNyBAQAogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUHVibGljVVJMTWFuYWdlci5o
IgogI2ltcG9ydCAiUXVpcmtzLmgiCisjaW1wb3J0ICJSYW5nZS5oIgogI2ltcG9ydCAiUmVuZGVy
Vmlldy5oIgogI2ltcG9ydCAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2ltcG9ydCAiU2Vy
aWFsaXplZEF0dGFjaG1lbnREYXRhLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
aW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCmluZGV4IDFmODgxMDQxY2MxZGFjYWI2NWEyN2Qx
MmZlZDYxY2NlMTkxODVhNzUuLjkwNWVmYjQ2MGUzN2YxZGUyMjk2NTM4ODlkYjQxNzgyMjhjNGM1
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1h
bmRJT1MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1h
bmRJT1MuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCi0j
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJTbWFydFJlcGxhY2UuaCIKICNpbmNsdWRlICJU
ZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4IDRm
MjcyZWVlODEzODE0MGM5YjM2NWNhMjExNzNmNmIzNDA5NGYyMWYuLjdmYTM1NmI5ZjBhYTk2YjBl
YTk1NDZhZGVjZmNlNWJkYzhhMWIxM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQpAQCAtODYsMTYgKzg2LDE0IEBAIE9w
dGlvbmFsPHN0ZDo6dHVwbGU8U2ltcGxlUmFuZ2UsIE5TRGljdGlvbmFyeSAqPj4gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VGb3JTZWxlCiAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24u
dmlzaWJsZUVuZCgpOwogCiAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0
aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgotICAgIGF1dG8gcGFyYWdyYXBoU3Rh
cnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7
Ci0gICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBtYWtlQm91bmRhcnlQb2ludChlbmRPZlBhcmFncmFw
aChzZWxlY3Rpb25FbmQpKTsKLSAgICBpZiAoIXBhcmFncmFwaFN0YXJ0IHx8ICFwYXJhZ3JhcGhF
bmQpCisgICAgYXV0byBwYXJhZ3JhcGhSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvblN0YXJ0KSwgZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKSk7Cisg
ICAgaWYgKCFwYXJhZ3JhcGhSYW5nZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2lu
dChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH07Ci0g
ICAgYXV0byBwYXJhZ3JhcGhSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKnBhcmFncmFwaFN0YXJ0LCAq
cGFyYWdyYXBoRW5kIH07CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9ICptYWtlU2ltcGxlUmFu
Z2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7CiAKICAgICBOU0RpY3Rpb25hcnkgKm9w
dGlvbnMgPSBuaWw7Ci0gICAgdG9rZW5SYW5nZShwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UpLCBj
aGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGhSYW5nZSwgc2VsZWN0aW9uUmFuZ2UpLCAmb3B0aW9ucyk7
CisgICAgdG9rZW5SYW5nZShwbGFpblRleHQoKnBhcmFncmFwaFJhbmdlKSwgY2hhcmFjdGVyUmFu
Z2UoKnBhcmFncmFwaFJhbmdlLCBzZWxlY3Rpb25SYW5nZSksICZvcHRpb25zKTsKIAogICAgIHJl
dHVybiB7IHsgKnNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMgfSB9OwogfQpAQCAtMTMzLDEyICsxMzEs
MTEgQEAgT3B0aW9uYWw8c3RkOjp0dXBsZTxTaW1wbGVSYW5nZSwgTlNEaWN0aW9uYXJ5ICo+PiBE
aWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGUKICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5n
ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gZnVsbENoYXJhY3Rl
clN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpOwotICAgIGF1dG8gcG9zaXRpb25Cb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHBv
c2l0aW9uKTsKLSAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJTdGFydCB8fCAhcG9zaXRpb25Cb3VuZGFy
eSkKKyAgICBhdXRvIHJhbmdlVG9Qb3NpdGlvbiA9IG1ha2VTaW1wbGVSYW5nZShmdWxsQ2hhcmFj
dGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pOworICAgIGlmICghcmFuZ2VUb1Bv
c2l0aW9uKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgTlNSYW5nZSByYW5n
ZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgKmZ1bGxDaGFyYWN0ZXJTdGFy
dCwgKnBvc2l0aW9uQm91bmRhcnkgfSksIDApOworICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBO
U01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCgqcmFuZ2VUb1Bvc2l0aW9uKSwgMCk7CiAgICAgTlNE
aWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwogICAgIGF1dG8gZXh0cmFjdGVkUmFuZ2UgPSB0b2tl
blJhbmdlKHBsYWluVGV4dCgqZnVsbENoYXJhY3RlclJhbmdlKSwgcmFuZ2VUb1Bhc3MsICZvcHRp
b25zKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IGJhMzFj
MTg3NzMyMzRiOWFkOTM5YWQwZDMzMTkzMThjNjJkOGIzYmQuLmU3MzI1YzUyNGFmZmFiNGM2YTdh
ZDIwZWM0MmFjYzYwMmZlN2Y1MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0VkaXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JN
YWMubW0KQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKICNpbXBvcnQg
IlBhc3RlYm9hcmRTdHJhdGVneS5oIgogI2ltcG9ydCAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0j
aW1wb3J0ICJSYW5nZS5oIgogI2ltcG9ydCAiUmVuZGVyQmxvY2suaCIKICNpbXBvcnQgIlJlbmRl
ckltYWdlLmgiCiAjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcAppbmRleCBkNTc0YTQ5NzdhODdhNGIxZDIxZWJjMjI4NTQ2MTRmNTdh
ODkyN2NkLi5iZmYxMzIwZDM2OWY4MmVkZGUyZTExNWUwN2E4NTRkMWQzMzFiYjE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC00NTEsMTIgKzQ1MSw4IEBAIFN0cmluZyBTdHlsZWRN
YXJrdXBBY2N1bXVsYXRvcjo6cmVuZGVyZWRUZXh0UmVzcGVjdGluZ1JhbmdlKGNvbnN0IFRleHQm
IHRleHQpCiAgICAgICAgICAgICBiZWhhdmlvciA9IFRleHRJdGVyYXRvckJlaGF2ZXNBc0lmTm9k
ZXNGb2xsb3dpbmc7CiAgICAgfQogCi0gICAgYXV0byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5k
YXJ5UG9pbnQoc3RhcnQpOwotICAgIGF1dG8gZW5kQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2lu
dChlbmQpOwotICAgIGlmICghc3RhcnRCb3VuZGFyeSB8fCAhZW5kQm91bmRhcnkpCi0gICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOwotCi0gICAgcmV0dXJuIHBsYWluVGV4dCh7IFdURk1vdmUo
KnN0YXJ0Qm91bmRhcnkpLCBXVEZNb3ZlKCplbmRCb3VuZGFyeSkgfSwgYmVoYXZpb3IpOworICAg
IGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuIHJh
bmdlID8gcGxhaW5UZXh0KCpyYW5nZSwgYmVoYXZpb3IpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAog
U3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0ZXh0Q29udGVudFJlc3BlY3RpbmdSYW5n
ZShjb25zdCBUZXh0JiB0ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93
aW4vRWRpdG9yV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5j
cHAKaW5kZXggOTNkZGVhZjg4ODliOGU3ZmNjMjY5MzQxMjQwODU4Mjg0NDc2YzhkNy4uZGZmMTJj
M2I4YmRjYjg5YTI1NjJhOWE3NjM0ODVhZGQxNjBjYTk5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL3dpbi9FZGl0b3JXaW4uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIK
KyNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIndpbmRvd3MuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFjL0ltYWdl
Q29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L21hYy9JbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5jcHAKaW5kZXggNmQ4MDFhNjE1ZjEx
NmI0ZDU5NjI3ZTI4OWFhNjNlZDE2ZjZjZWFlYy4uNTg0ZWM2M2ZiMWJhNzQ4ZTNkZjlhOWM3NjQz
ZmFlZTdmN2JlNDE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvbWFj
L0ltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9tYWMvSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuY3BwCkBAIC0zNSw3
ICszNSw2IEBACiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRGl2
RWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1
ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2Vs
ZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCBk
ZjEzNWFmNDM5ZmQ3ZTc2NDE3NDdiYjczNjdjODZiOGRjNWZmNzJjLi41OWVhNGZiZjdlOWU1NTJk
Mjk3NzFiYjI1ZjA2NWRlMTAzY2RiMTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24u
Y3BwCkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdl
JiByYW5nZSkKIAogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKICAg
ICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKSB7Ci0gICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8oJnJh
bmdlKTsKKyAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihTaW1wbGVSYW5nZSB7IHJhbmdl
IH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNTYsNyArMzU2LDcgQEAgdm9pZCBE
T01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgICAgICAgICBzZWxl
Y3Rpb24ubW92ZVRvKHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgbm9ybWFsaXplZFJhbmdlLT5lbmRQ
b3NpdGlvbigpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgLy8gVGhlIG5ldyByYW5nZSBjb250YWlucyB0aGUgb3JpZ2luYWwgcmFuZ2UuCi0gICAg
ICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbygmcmFuZ2UpOworICAgICAgICAgICAgICAgIHNl
bGVjdGlvbi5zZXRTZWxlY3Rpb24oU2ltcGxlUmFuZ2UgeyByYW5nZSB9KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0zNjYsNyArMzY2LDcgQEAgdm9pZCBET01T
ZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgICAgIHJlc3VsdCA9IHJh
bmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKm5vcm1hbGl6ZWRS
YW5nZSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQu
cmVsZWFzZVJldHVyblZhbHVlKCkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgb3Jp
Z2luYWwgcmFuZ2UgY29udGFpbnMgdGhlIG5ldyByYW5nZS4KLSAgICAgICAgICAgICAgICBzZWxl
Y3Rpb24ubW92ZVRvKG5vcm1hbGl6ZWRSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uLnNldFNlbGVjdGlvbihTaW1wbGVSYW5nZSB7ICpub3JtYWxpemVkUmFuZ2UgfSk7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoZSByYW5nZXMgaW50ZXJz
ZWN0LgogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8obm9ybWFsaXplZFJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIHJhbmdlLmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDVlZGE4MzBlY2Y0NjVkMGRkMGIyNDdmYWUw
MDIwYzVlMjUyZWI4ZTAuLjk2NzU1ODFmOTNmOGQyMWU4NzA0MDc4OGU2ZDlhZjAxNGI1MzM1MDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTY3NSwxMSArNjc1LDEwIEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRUcmlwbGVDbGljayhjb25z
dCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSCiAKIHN0YXRpYyB1aW50NjRfdCB0ZXh0RGlzdGFuY2Uo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIGF1dG8g
c3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsKLSAgICBhdXRvIGVuZEJv
dW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKTsKLSAgICBpZiAoIXN0YXJ0Qm91bmRhcnkg
fHwgIWVuZEJvdW5kYXJ5KQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQs
IGVuZCk7CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNo
YXJhY3RlckNvdW50KHsgKnN0YXJ0Qm91bmRhcnksICplbmRCb3VuZGFyeSB9LCBUZXh0SXRlcmF0
b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgcmV0dXJu
IGNoYXJhY3RlckNvdW50KCpyYW5nZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2Vl
bkFsbFZpc2libGVQb3NpdGlvbnMpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VQcmVzc0V2ZW50U2luZ2xlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cyYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDM1NTFiNGQ2MmI4NDYwZGJjNjE3NGI3
ZGU1ZjJiOWYzODNhZjA3NWIuLjY0MTA1NDhkNDIyMjM3N2MxNDEzODYxY2I1ZDkwMjQyNTNkZWQ3
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC04MTksMjQgKzgxOSwxOSBAQCBEb2N1bWVudCog
RnJhbWU6OmRvY3VtZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiBSZWZQdHI8UmFu
Z2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50KQogewog
ICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsK
LSAgICBhdXRvIHBvc2l0aW9uQm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7
Ci0gICAgaWYgKCFwb3NpdGlvbkJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIGF1dG8gY29udGFpbmVyVGV4dCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuY29udGFp
bmVyVGV4dCgpOwogICAgIGlmICghY29udGFpbmVyVGV4dCB8fCAhY29udGFpbmVyVGV4dC0+cmVu
ZGVyZXIoKSB8fCBjb250YWluZXJUZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpLnVzZXJTZWxlY3Qo
KSA9PSBVc2VyU2VsZWN0OjpOb25lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlm
IChhdXRvIHByZXZpb3VzID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24ucHJldmlvdXMoKSkp
IHsKLSAgICAgICAgYXV0byBwcmV2aW91c0NoYXJhY3RlclJhbmdlID0gU2ltcGxlUmFuZ2UgeyAq
cHJldmlvdXMsICpwb3NpdGlvbkJvdW5kYXJ5IH07Ci0gICAgICAgIGlmIChlZGl0b3IoKS5maXJz
dFJlY3RGb3JSYW5nZShwcmV2aW91c0NoYXJhY3RlclJhbmdlKS5jb250YWlucyhmcmFtZVBvaW50
KSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocHJldmlvdXNDaGFyYWN0ZXJS
YW5nZSk7CisgICAgaWYgKGF1dG8gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IG1ha2VTaW1wbGVS
YW5nZShwb3NpdGlvbi5wcmV2aW91cygpLCBwb3NpdGlvbikpIHsKKyAgICAgICAgaWYgKGVkaXRv
cigpLmZpcnN0UmVjdEZvclJhbmdlKCpwcmV2aW91c0NoYXJhY3RlclJhbmdlKS5jb250YWlucyhm
cmFtZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKnByZXZpb3Vz
Q2hhcmFjdGVyUmFuZ2UpOwogICAgIH0KIAotICAgIGlmIChhdXRvIG5leHQgPSBtYWtlQm91bmRh
cnlQb2ludChwb3NpdGlvbi5uZXh0KCkpKSB7Ci0gICAgICAgIGF1dG8gbmV4dENoYXJhY3RlclJh
bmdlID0gU2ltcGxlUmFuZ2UgeyAqcG9zaXRpb25Cb3VuZGFyeSwgKm5leHQgfTsKLSAgICAgICAg
aWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKG5leHRDaGFyYWN0ZXJSYW5nZSkuY29udGFp
bnMoZnJhbWVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG5leHRD
aGFyYWN0ZXJSYW5nZSk7CisgICAgaWYgKGF1dG8gbmV4dENoYXJhY3RlclJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbi5uZXh0KCkpKSB7CisgICAgICAgIGlmIChlZGl0
b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqbmV4dENoYXJhY3RlclJhbmdlKS5jb250YWlucyhmcmFt
ZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKm5leHRDaGFyYWN0
ZXJSYW5nZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9U
ZXh0SW5kaWNhdG9yLmNwcAppbmRleCBkZDk0MmU5MjQ4ZDVkNzIzNTJkNGI1YjI1OTBjOGI2YWZk
NTg3ODIwLi45ZTYyMTA5NmRhMmUyZjdiZjVhZTcwZThhM2VkZmI0YzZkODUyYTBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMg
Q29sb3IgZXN0aW1hdGVkQmFja2dyb3VuZENvbG9yRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBjb25zdCBGcgogICAgIGF1dG8gZXN0aW1hdGVkQmFja2dyb3VuZENvbG9yID0gZnJh
bWUudmlldygpID8gZnJhbWUudmlldygpLT5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpIDogQ29s
b3I6OnRyYW5zcGFyZW50QmxhY2s7CiAKICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IG51
bGxwdHI7Ci0gICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
KHJhbmdlLnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UuZW5kLmNvbnRhaW5lcik7CisgICAgYXV0byBj
b21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlKTsKICAgICB3aGls
ZSAoY29tbW9uQW5jZXN0b3IpIHsKICAgICAgICAgaWYgKGlzPFJlbmRlckVsZW1lbnQ+KGNvbW1v
bkFuY2VzdG9yLT5yZW5kZXJlcigpKSkgewogICAgICAgICAgICAgcmVuZGVyZXIgPSBkb3duY2Fz
dDxSZW5kZXJFbGVtZW50Pihjb21tb25BbmNlc3Rvci0+cmVuZGVyZXIoKSk7CkBAIC0zMDksNyAr
MzA5LDcgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5kaWNhdG9yRGF0
YSYgZGF0YSwgRnJhbWUmIGZyYW1lLCBjb25zdCBTaW0KIAogICAgIGJvb2wgdXNlQm91bmRpbmdS
ZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcyA9IGRhdGEub3B0aW9ucy5jb250
YWlucyhUZXh0SW5kaWNhdG9yT3B0aW9uOjpVc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRl
bnRGb3JDb21wbGV4UmFuZ2VzKTsKICAgICBpZiAodXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxD
b250ZW50Rm9yQ29tcGxleFJhbmdlcyAmJiBjb250YWluc09ubHlXaGl0ZVNwYWNlVGV4dChyYW5n
ZSkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGNvbnRhaW5lclJlbmRlcmVyID0gY29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFpbmVyLCByYW5nZS5lbmQuY29udGFpbmVyKS0+
cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAoYXV0byogY29udGFpbmVyUmVuZGVyZXIgPSBjb21t
b25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZSktPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIGRh
dGEub3B0aW9ucy5hZGQoVGV4dEluZGljYXRvck9wdGlvbjo6UGFpbnRBbGxDb250ZW50KTsKICAg
ICAgICAgICAgIHRleHRSZWN0cy5hcHBlbmQoY29udGFpbmVyUmVuZGVyZXItPmFic29sdXRlQm91
bmRpbmdCb3hSZWN0KCkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlSGFuZGxlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5vZGVI
YW5kbGUuY3BwCmluZGV4IGZjN2UwMGIyOGViM2E1NjhmNmY4NGM1NmEyNmFiMWJmMDc5Yjc0YzMu
LjUzNzNmM2I5NjM5YjIwMzRiMjIzMjEwNjU3MGVmMGY4NzNmNzBmNDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5vZGVI
YW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZU5vZGVIYW5kbGUuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAi
V0tCdW5kbGVOb2RlSGFuZGxlUHJpdmF0ZS5oIgogCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5oIgogI2lu
Y2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgogI2luY2x1
ZGUgIldlYkZyYW1lLmgiCkBAIC05MCw3ICs4OSw4IEBAIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBX
S0J1bmRsZU5vZGVIYW5kbGVDb3B5RG9jdW1lbnQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGVI
CiAKIFdLUmVjdCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRSZW5kZXJSZWN0KFdLQnVuZGxlTm9kZUhh
bmRsZVJlZiBub2RlSGFuZGxlUmVmLCBib29sKiBpc1JlcGxhY2VkKQogewotICAgIHJldHVybiBX
ZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKG5vZGVIYW5kbGVSZWYpLT5yZW5kZXJSZWN0KGlz
UmVwbGFjZWQpKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9Owog
fQogCiBXS0ltYWdlUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlTbmFwc2hvdFdpdGhPcHRpb25z
KFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlSGFuZGxlUmVmLCBXS1NuYXBzaG90T3B0aW9ucyBv
cHRpb25zKQpAQCAtOTksMTAgKzk5LDEwIEBAIFdLSW1hZ2VSZWYgV0tCdW5kbGVOb2RlSGFuZGxl
Q29weVNuYXBzaG90V2l0aE9wdGlvbnMoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGVICiAgICAg
cmV0dXJuIHRvQVBJKGltYWdlLmxlYWtSZWYoKSk7CiB9CiAKLVdLQnVuZGxlUmFuZ2VIYW5kbGVS
ZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weVZpc2libGVSYW5nZShXS0J1bmRsZU5vZGVIYW5kbGVS
ZWYgbm9kZUhhbmRsZVJlZikKK1dLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgV0tCdW5kbGVOb2RlSGFu
ZGxlQ29weVZpc2libGVSYW5nZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYpCiB7Ci0gICAgUmVmUHRy
PFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZT4gcmFuZ2VIYW5kbGUgPSBXZWJLaXQ6
OnRvSW1wbChub2RlSGFuZGxlUmVmKS0+dmlzaWJsZVJhbmdlKCk7Ci0gICAgcmV0dXJuIHRvQVBJ
KHJhbmdlSGFuZGxlLmxlYWtSZWYoKSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKIFdLUmVjdCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRFbGVtZW50
Qm91bmRzKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBlbGVtZW50SGFuZGxlUmVmKQpAQCAtMTE1LDE0
ICsxMTUsMTUgQEAgdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50VmFs
dWVGb3JVc2VyKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG0KICAgICBXZWJLaXQ6OnRvSW1wbCho
dG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVudFZhbHVlRm9yVXNl
cihXZWJLaXQ6OnRvV1RGU3RyaW5nKHZhbHVlUmVmKSk7CiB9CiAKLXZvaWQgV0tCdW5kbGVOb2Rl
SGFuZGxlU2V0SFRNTElucHV0RWxlbWVudFNwZWxsY2hlY2tFbmFibGVkKFdLQnVuZGxlTm9kZUhh
bmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGVuYWJsZWQpCit2b2lkIFdL
QnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRTcGVsbGNoZWNrRW5hYmxlZChXS0J1
bmRsZU5vZGVIYW5kbGVSZWYsIGJvb2wpCiB7Ci0gICAgV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0
RWxlbWVudEhhbmRsZVJlZiktPnNldEhUTUxJbnB1dEVsZW1lbnRTcGVsbGNoZWNrRW5hYmxlZChl
bmFibGVkKTsKKyAgICAvLyBGSVhNRTogV291bGQgcHV0IEFTU0VSVF9OT1RfUkVBQ0hFRCgpIGhl
cmUgYnV0IHNvbWUgY29tcGlsZXJzIGFyZSB3YXJuaW5nIHRoZSBmdW5jdGlvbiBpcyAibm9yZXR1
cm4iLgogfQogCi1ib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRv
RmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKQor
Ym9vbCBXS0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxlZChXS0J1
bmRsZU5vZGVIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1
dEVsZW1lbnRIYW5kbGVSZWYpLT5pc0hUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKCk7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFdLQnVu
ZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhh
bmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGZpbGxlZCkKQEAgLTEzNSw5
ICsxMzYsMTAgQEAgdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0
b0ZpbGxlZEFuZFZpZXdhYmxlKFdLQnVuZGxlTm9kZUhhbmQKICAgICBXZWJLaXQ6OnRvSW1wbCho
dG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWRB
bmRWaWV3YWJsZShhdXRvRmlsbGVkQW5kVmlld2FibGUpOwogfQogCi1ib29sIFdLQnVuZGxlTm9k
ZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoV0tCdW5kbGVO
b2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCitib29sIFdLQnVuZGxlTm9k
ZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoV0tCdW5kbGVO
b2RlSGFuZGxlUmVmKQogewotICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChodG1sSW5wdXRFbGVt
ZW50SGFuZGxlUmVmKS0+aXNIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0b25FbmFibGVkKCk7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lk
IFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJs
ZWRXaXRoQnV0dG9uVHlwZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhh
bmRsZVJlZiwgV0tBdXRvRmlsbEJ1dHRvblR5cGUgYXV0b0ZpbGxCdXR0b25UeXBlKQpAQCAtMTU1
LDkgKzE1NywxMCBAQCBXS0F1dG9GaWxsQnV0dG9uVHlwZSBXS0J1bmRsZU5vZGVIYW5kbGVHZXRI
VE1MSW5wdXRFbGVtZW50TGFzdEF1dG9GaWxsQnV0dG9uVHlwZQogICAgIHJldHVybiB0b1dLQXV0
b0ZpbGxCdXR0b25UeXBlKFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYp
LT5odG1sSW5wdXRFbGVtZW50TGFzdEF1dG9GaWxsQnV0dG9uVHlwZSgpKTsKIH0KIAotYm9vbCBX
S0J1bmRsZU5vZGVIYW5kbGVHZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxBdmFpbGFibGUoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCitib29sIFdLQnVu
ZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEF2YWlsYWJsZShXS0J1bmRs
ZU5vZGVIYW5kbGVSZWYpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVs
ZW1lbnRIYW5kbGVSZWYpLT5pc0F1dG9GaWxsQXZhaWxhYmxlKCk7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFdLQnVuZGxlTm9kZUhhbmRs
ZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbEF2YWlsYWJsZShXS0J1bmRsZU5vZGVIYW5kbGVS
ZWYgaHRtbElucHV0RWxlbWVudEhhbmRsZVJlZiwgYm9vbCBhdXRvRmlsbEF2YWlsYWJsZSkKQEAg
LTE2NSw5ICsxNjgsMTAgQEAgdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVt
ZW50QXV0b0ZpbGxBdmFpbGFibGUoV0tCdW5kbGVOb2RlSGFuZGxlUmUKICAgICBXZWJLaXQ6OnRv
SW1wbChodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmKS0+c2V0QXV0b0ZpbGxBdmFpbGFibGUoYXV0
b0ZpbGxBdmFpbGFibGUpOwogfQogCi1XS1JlY3QgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElu
cHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uQm91bmRzKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1s
SW5wdXRFbGVtZW50SGFuZGxlUmVmKQorV0tSZWN0IFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxJ
bnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkJvdW5kcyhXS0J1bmRsZU5vZGVIYW5kbGVSZWYpCiB7
Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwoaHRtbElucHV0RWxlbWVu
dEhhbmRsZVJlZiktPmh0bWxJbnB1dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkJvdW5kcygpKTsKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIFdLQnVu
ZGxlTm9kZUhhbmRsZUdldEhUTUxJbnB1dEVsZW1lbnRMYXN0Q2hhbmdlV2FzVXNlckVkaXQoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCkBAIC0xODAsMTAg
KzE4NCwxMCBAQCBib29sIFdLQnVuZGxlTm9kZUhhbmRsZUdldEhUTUxUZXh0QXJlYUVsZW1lbnRM
YXN0Q2hhbmdlV2FzVXNlckVkaXQoV0tCdW5kbGVOb2RlSAogICAgIHJldHVybiBXZWJLaXQ6OnRv
SW1wbChodG1sVGV4dEFyZWFFbGVtZW50SGFuZGxlUmVmKS0+aHRtbFRleHRBcmVhRWxlbWVudExh
c3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogfQogCi1XS0J1bmRsZU5vZGVIYW5kbGVSZWYgV0tCdW5k
bGVOb2RlSGFuZGxlQ29weUhUTUxUYWJsZUNlbGxFbGVtZW50Q2VsbEFib3ZlKFdLQnVuZGxlTm9k
ZUhhbmRsZVJlZiBodG1sVGFibGVDZWxsRWxlbWVudEhhbmRsZVJlZikKK1dLQnVuZGxlTm9kZUhh
bmRsZVJlZiBXS0J1bmRsZU5vZGVIYW5kbGVDb3B5SFRNTFRhYmxlQ2VsbEVsZW1lbnRDZWxsQWJv
dmUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmKQogewotICAgIFJlZlB0cjxXZWJLaXQ6OkluamVjdGVk
QnVuZGxlTm9kZUhhbmRsZT4gbm9kZUhhbmRsZSA9IFdlYktpdDo6dG9JbXBsKGh0bWxUYWJsZUNl
bGxFbGVtZW50SGFuZGxlUmVmKS0+aHRtbFRhYmxlQ2VsbEVsZW1lbnRDZWxsQWJvdmUoKTsKLSAg
ICByZXR1cm4gdG9BUEkobm9kZUhhbmRsZS5sZWFrUmVmKCkpOworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBXS0J1bmRsZUZyYW1lUmVmIFdLQnVu
ZGxlTm9kZUhhbmRsZUNvcHlEb2N1bWVudEZyYW1lKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBkb2N1
bWVudEhhbmRsZVJlZikKQEAgLTE5NCw4ICsxOTgsOCBAQCBXS0J1bmRsZUZyYW1lUmVmIFdLQnVu
ZGxlTm9kZUhhbmRsZUNvcHlEb2N1bWVudEZyYW1lKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBkb2N1
bQogCiBXS0J1bmRsZUZyYW1lUmVmIFdLQnVuZGxlTm9kZUhhbmRsZUNvcHlIVE1MRnJhbWVFbGVt
ZW50Q29udGVudEZyYW1lKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sRnJhbWVFbGVtZW50SGFu
ZGxlUmVmKQogewotICAgIFJlZlB0cjxXZWJLaXQ6OldlYkZyYW1lPiBmcmFtZSA9IFdlYktpdDo6
dG9JbXBsKGh0bWxGcmFtZUVsZW1lbnRIYW5kbGVSZWYpLT5odG1sRnJhbWVFbGVtZW50Q29udGVu
dEZyYW1lKCk7Ci0gICAgcmV0dXJuIHRvQVBJKGZyYW1lLmxlYWtSZWYoKSk7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFdLQnVuZGxlRnJhbWVS
ZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weUhUTUxJRnJhbWVFbGVtZW50Q29udGVudEZyYW1lKFdL
QnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSUZyYW1lRWxlbWVudEhhbmRsZVJlZikKQEAgLTIwNCwy
MiArMjA4LDE4IEBAIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVOb2RlSGFuZGxlQ29weUhUTUxJ
RnJhbWVFbGVtZW50Q29udGVudEZyYW1lKFdLQnVuZGxlTm9kCiAgICAgcmV0dXJuIHRvQVBJKGZy
YW1lLmxlYWtSZWYoKSk7CiB9CiAKLS8vIERlcHJlY2F0ZWQgLSB1c2UgV0tCdW5kbGVOb2RlSGFu
ZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmKS4K
IGJvb2wgV0tCdW5kbGVOb2RlSGFuZGxlR2V0SFRNTElucHV0RWxlbWVudEF1dG9maWxsZWQoV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpCiB7Ci0gICAgcmV0
dXJuIFdlYktpdDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5pc0hUTUxJbnB1
dEVsZW1lbnRBdXRvRmlsbGVkKCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOwogfQogCi0vLyBEZXByZWNhdGVkIC0gdXNlIFdLQnVuZGxlTm9kZUhhbmRsZVNl
dEhUTUxJbnB1dEVsZW1lbnRBdXRvRmlsbGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgYm9vbCku
Ci12b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVsZW1lbnRBdXRvZmlsbGVkKFdL
QnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFuZGxlUmVmLCBib29sIGZpbGxl
ZCkKK3ZvaWQgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9maWxsZWQo
V0tCdW5kbGVOb2RlSGFuZGxlUmVmIGhhbmRsZSwgYm9vbCBlbmFibGVkKQogewotICAgIFdlYktp
dDo6dG9JbXBsKGh0bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50
QXV0b0ZpbGxlZChmaWxsZWQpOworICAgIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1dEVs
ZW1lbnRBdXRvRmlsbGVkKGhhbmRsZSwgZW5hYmxlZCk7CiB9CiAKLS8vIERlcHJlY2F0ZWQgLSB1
c2UgV0tCdW5kbGVOb2RlSGFuZGxlU2V0SFRNTElucHV0RWxlbWVudEF1dG9GaWxsQnV0dG9uRW5h
YmxlZFdpdGhCdXR0b25UeXBlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgV0tBdXRvRmlsbEJ1dHRv
blR5cGUpLgotdm9pZCBXS0J1bmRsZU5vZGVIYW5kbGVTZXRIVE1MSW5wdXRFbGVtZW50QXV0b0Zp
bGxCdXR0b25FbmFibGVkKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sSW5wdXRFbGVtZW50SGFu
ZGxlUmVmLCBib29sIGVuYWJsZWQpCit2b2lkIFdLQnVuZGxlTm9kZUhhbmRsZVNldEhUTUxJbnB1
dEVsZW1lbnRBdXRvRmlsbEJ1dHRvbkVuYWJsZWQoV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBib29s
KQogewotICAgIFdlYkNvcmU6OkF1dG9GaWxsQnV0dG9uVHlwZSBhdXRvRmlsbEJ1dHRvblR5cGUg
PSBlbmFibGVkID8gV2ViQ29yZTo6QXV0b0ZpbGxCdXR0b25UeXBlOjpDcmVkZW50aWFscyA6IFdl
YkNvcmU6OkF1dG9GaWxsQnV0dG9uVHlwZTo6Tm9uZTsKLQotICAgIFdlYktpdDo6dG9JbXBsKGh0
bWxJbnB1dEVsZW1lbnRIYW5kbGVSZWYpLT5zZXRIVE1MSW5wdXRFbGVtZW50QXV0b0ZpbGxCdXR0
b25FbmFibGVkKGF1dG9GaWxsQnV0dG9uVHlwZSk7CisgICAgLy8gRklYTUU6IFdvdWxkIHB1dCBB
U1NFUlRfTk9UX1JFQUNIRUQoKSBoZXJlIGJ1dCBzb21lIGNvbXBpbGVycyBhcmUgd2FybmluZyB0
aGUgZnVuY3Rpb24gaXMgIm5vcmV0dXJuIi4KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRy
b2xsZXJQcm94eS5tbQppbmRleCA5NWYxNjNjMWUxMWIwMWQwNzIwM2U0NmFiNWNjYWIwMGM5ZTJh
NzAyLi42NmUzZDk5NTdlZGI5YWYzMzY0OTgzMTQ0ZTc0YTEwM2MyOGVkZTNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250
cm9sbGVyUHJveHkubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29j
b2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCkBAIC0xNzYsMTUgKzE3NiwxMyBAQCB2
b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZl
VG9TZWxlY3Rpb24oY29uc3QgU3RyaQogCiBXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nIFRleHRD
aGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBvc2l0aW9u
cyhjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBXZWJDb3JlOjpW
aXNpYmxlUG9zaXRpb24mIGVuZCkKIHsKLSAgICBhdXRvIHN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91
bmRhcnlQb2ludChzdGFydCk7Ci0gICAgYXV0byBlbmRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBv
aW50KGVuZCk7Ci0gICAgaWYgKCFzdGFydEJvdW5kYXJ5IHx8ICFlbmRCb3VuZGFyeSkKKyAgICBh
dXRvIGVudGlyZVJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOworICAgIGlmICgh
ZW50aXJlUmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgYXV0byBlbnRpcmVSYW5nZSA9
IFNpbXBsZVJhbmdlIHsgKnN0YXJ0Qm91bmRhcnksICplbmRCb3VuZGFyeSB9OwogCiAgICAgYXV0
byBzdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dF0pOwogCi0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoZW50aXJlUmFuZ2UpOyAhaXQuYXRFbmQo
KTsgaXQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKmVudGlyZVJhbmdl
KTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewogICAgICAgICBpZiAoIWl0LnRleHQoKS5s
ZW5ndGgoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBbc3RyaW5nIGFwcGVuZEF0
dHJpYnV0ZWRTdHJpbmc6YWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdp
dGhTdHJpbmc6aXQudGV4dCgpLmNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKV0p
LmdldCgpXTsKQEAgLTE5Miw3ICsxOTAsNyBAQCBXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nIFRl
eHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlbgogICAg
ICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2Vycygp
Lm1hcmtlcnNJblJhbmdlKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tp
bmcpKSB7CiAgICAgICAgICAgICBhdXRvJiBkYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6
OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpOwogICAgICAgICAgICAg
YXV0byBzdWJyYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwgeyBtYXJrZXItPnN0
YXJ0T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkg
fSk7Ci0gICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZTpkYXRhLmtleSB2YWx1ZTpkYXRh
LnZhbHVlIHJhbmdlOmNoYXJhY3RlclJhbmdlKGVudGlyZVJhbmdlLCBzdWJyYW5nZSldOworICAg
ICAgICAgICAgW3N0cmluZyBhZGRBdHRyaWJ1dGU6ZGF0YS5rZXkgdmFsdWU6ZGF0YS52YWx1ZSBy
YW5nZTpjaGFyYWN0ZXJSYW5nZSgqZW50aXJlUmFuZ2UsIHN1YnJhbmdlKV07CiAgICAgICAgIH0K
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2ds
aWIvV2ViUGFnZUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xp
Yi9XZWJQYWdlR0xpYi5jcHAKaW5kZXggNDY5MjU1M2EwYTgwOWRkM2Y3MDM5NTNlMzU4ZGYzMzQ2
MjJlYzU5ZS4uODE5ODIzNTBlZTk5MzA4YzgxYjU1MmFiNTU4OGE0ZDhjOGY3OWNjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xp
Yi5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTElucHV0RWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SFRNTFRleHRBcmVhRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVmlzaWJsZVBv
c2l0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlVW5pdHMuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggNmIz
NTVkMWE2ZDE5NzNhYmJiOTg3NGQwYjQ3YWI4ZTQyODQxMjM5NC4uNWZlYTJiMTNmNjc1ODcyYTU2
N2QyYTRkNzYzN2NkZTg4ZjZkY2I3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTExNCw2ICsxMTQsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUG9pbnRl
ckNhcHR1cmVDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1F1aXJrcy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCbG9jay5oPgogI2lt
cG9ydCA8V2ViQ29yZS9SZW5kZXJJbWFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXll
ci5oPgpAQCAtMTM3NCw4ICsxMzc1LDcgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVy
ZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIEdlc3R1cmVUeXBlIGdlc3R1cmVUeXBlLAogICAgIE9w
dGlvblNldDxTZWxlY3Rpb25GbGFncz4gZmxhZ3M7CiAgICAgR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZSB3a0dlc3R1cmVTdGF0ZSA9IHN0YXRpY19jYXN0PEdlc3R1cmVSZWNvZ25pemVyU3RhdGU+KGdl
c3R1cmVTdGF0ZSk7CiAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxHZXN0dXJlVHlwZT4oZ2VzdHVy
ZVR5cGUpKSB7Ci0gICAgY2FzZSBHZXN0dXJlVHlwZTo6UGhyYXNlQm91bmRhcnk6Ci0gICAgewor
ICAgIGNhc2UgR2VzdHVyZVR5cGU6OlBocmFzZUJvdW5kYXJ5OiB7CiAgICAgICAgIGlmICghZnJh
bWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBhdXRvIG1hcmtlZFJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwpA
QCAtNDI2NSwxMiArNDI2NSwxMSBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRp
bmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgIH0KIAog
ICAgIGF1dG8gbWFrZVN0cmluZyA9IFtdIChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZCkgLT4gQXR0cmlidXRlZFN0cmluZyB7Ci0gICAgICAg
IGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0LmRlZXBFcXVpdmFs
ZW50KCkpOwotICAgICAgICBhdXRvIGVuZEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
LmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBpZiAoIXN0YXJ0Qm91bmRhcnkgfHwgIWVuZEJv
dW5kYXJ5IHx8ICpzdGFydEJvdW5kYXJ5ID09ICplbmRCb3VuZGFyeSkKKyAgICAgICAgYXV0byBy
YW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKTsKKyAgICAgICAgaWYgKCFyYW5nZSB8
fCByYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgcmV0dXJuIGVkaXRpbmctb2Zmc2V0LWNvbXBhdGlibGUgYXR0
cmlidXRlZCBzdHJpbmdzIGlmIHRoYXQgb3B0aW9uIGlzIHJlcXVlc3RlZC4KLSAgICAgICAgcmV0
dXJuIHsgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
V2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHsgV1RGTW92ZSgqc3RhcnRC
b3VuZGFyeSksIFdURk1vdmUoKmVuZEJvdW5kYXJ5KSB9KV0pLCBuaWwgfTsKKyAgICAgICAgcmV0
dXJuIHsgYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
V2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKCpyYW5nZSldKSwgbmlsIH07
CiAgICAgfTsKIAogICAgIGNvbnRleHQuY29udGV4dEJlZm9yZSA9IG1ha2VTdHJpbmcoY29udGV4
dEJlZm9yZVN0YXJ0LCBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24pOwpAQCAtNDMw
NSw4ICs0MzA0LDggQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4
dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAgICAgIGNvbnRl
eHQudGV4dFJlY3RzID0gY2hhcmFjdGVyUmVjdHNGb3JSYW5nZSgqY29udGV4dFJhbmdlLCAwKTsK
ICAgICB9IGVsc2UgaWYgKHdhbnRzTWFya2VkVGV4dFJlY3RzICYmIGNvbXBvc2l0aW9uUmFuZ2Up
IHsKICAgICAgICAgdW5zaWduZWQgY29tcG9zaXRpb25TdGFydE9mZnNldCA9IDA7Ci0gICAgICAg
IGlmIChhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoY29udGV4dEJlZm9yZVN0YXJ0LmRl
ZXBFcXVpdmFsZW50KCkpKQotICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydE9mZnNldCA9IFdl
YkNvcmU6OnBsYWluVGV4dCh7IFdURk1vdmUoKnN0YXJ0KSwgY29tcG9zaXRpb25SYW5nZS0+c3Rh
cnQgfSkubGVuZ3RoKCk7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KGNvbnRleHRCZWZvcmVTdGFydCwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpKQorICAgICAgICAg
ICAgY29tcG9zaXRpb25TdGFydE9mZnNldCA9IGNoYXJhY3RlckNvdW50KCpyYW5nZSk7CiAgICAg
ICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFjdGVyUmVjdHNGb3JSYW5nZSgqY29tcG9zaXRp
b25SYW5nZSwgY29tcG9zaXRpb25TdGFydE9mZnNldCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGFkYjk5
MjNmNTExZDNhZDZmNTI0OTgyZjhmYTUyZjMwMGM4YzNiZmMuLmNhMWM5NWU0ODQ3Yjc0NWVmNGIy
Y2Q5MjVkM2UwODZhMjczZjljOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0zMzgsNyArMzM4LDcgQEAgdm9pZCBXZWJQ
YWdlOjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0
aW5nUmFuZ2UmIGVkaXQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoZnJhbWUsIGVkaXRpbmdSYW5nZSk7Cisg
ICAgYXV0byByYW5nZSA9IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShmcmFtZSwgZWRpdGluZ1Jhbmdl
KTsKICAgICBpZiAoIXJhbmdlKSB7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soeyB9LCBFZGl0aW5n
UmFuZ2UoKSwgY2FsbGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA0MDE0NGI1OTFjMWI0MTAwODVmNmI2NjVlZDU5ZTA0ZWZjNDc3ZGQyLi5jN2M2Y2My
NGU2ODFhZGNkYTc2MmIyYTVlNGI3NWI1MmQ1NWI1OTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L1dlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTE4OCw3ICsxODgsNiBAQAogCQk1QzdFNzg3NjIyRDk1RkUyMDAwNkEyMzAgLyogVW5pZmll
ZFNvdXJjZTExLW1tLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUM3RTc4NjkyMkQ5NUZFMjAwMDZBMjMwIC8qIFVuaWZpZWRTb3VyY2UxMS1tbS5tbSAq
LzsgfTsKIAkJNUM5N0VGNjMyMzQyQzUzNDAwNjAyMEQ0IC8qIFVuaWZpZWRTb3VyY2UxOS1tbS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOTdFRjYx
MjM0MkM1MzQwMDYwMjBENCAvKiBVbmlmaWVkU291cmNlMTktbW0ubW0gKi87IH07CiAJCTVDOTdF
RjY0MjM0MkM1MzQwMDYwMjBENCAvKiBVbmlmaWVkU291cmNlMjAtbW0ubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qzk3RUY2MjIzNDJDNTM0MDA2MDIw
RDQgLyogVW5pZmllZFNvdXJjZTIwLW1tLm1tICovOyB9OwotCQk1QzlBNEU1MzIyREU0NjI3MDA3
REIzNTMgLyogRE9NVUlLaXRFeHRlbnNpb25zLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNENDM2MzcxRDU3QUJFRTAwQUI4NUVBIC8qIERPTVVJS2l0
RXh0ZW5zaW9ucy5tbSAqLzsgfTsKIAkJNUM5RDkyNUEyMkQ3RThBRDAwOEU5MjY2IC8qIFNvdXJj
ZXMudHh0IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
QzlEOTI1ODIyRDdFOEFEMDA4RTkyNjYgLyogU291cmNlcy50eHQgKi87IH07CiAJCTVDOUQ5MjVC
MjJEN0U4QUQwMDhFOTI2NiAvKiBTb3VyY2VzQ29jb2EudHh0IGluIFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlEOTI1OTIyRDdFOEFEMDA4RTkyNjYgLyog
U291cmNlc0NvY29hLnR4dCAqLzsgfTsKIAkJNUM5RUYyRjUyMUYwNjFCRTAwM0JEQzU2IC8qIFBh
Z2VTdG9yYWdlU2Vzc2lvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QzlFRjJGNDIxRjA2MUJFMDAzQkRDNTYgLyogUGFnZVN0b3JhZ2VT
ZXNzaW9uUHJvdmlkZXIuaCAqLzsgfTsKQEAgLTM0MDAsNyArMzM5OSw2IEBACiAJCQkJMUE5MTE5
RjYxREIwNDcwQTAwODdEMUZEIC8qIEJhY2tGb3J3YXJkTGlzdC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTFBNjA1MTkxMTc1MDJBNUQwMEJDNjJGNSAvKiBCaW5hcnlQcm9wZXJ0eUxpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjgyOTU4RDQxMzI3MDdEMDAwMEQwRTc5IC8qIENvcnJlY3Rpb25Q
YW5lbC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTVDOUE0RTUzMjJERTQ2MjcwMDdEQjM1MyAvKiBE
T01VSUtpdEV4dGVuc2lvbnMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTYwNTE5MzE3NTAyQTVE
MDBCQzYyRjUgLyogSGlzdG9yeVByb3BlcnR5TGlzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFB
OERFRDUxMEVFODhCOEEwMEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTkzNjQwMDZFMjM5OTZFODEwMDFFMTg1RSAvKiBJblByb2Nlc3NJ
REJTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggOTkzNTAw
NDE0ZmRhMTdiMjZjYzc4Mjk5ODVmMmE4YTQ5MzYxNDllNC4uMjVhZDdkZTcyMTk0ZWZkNjFjODdh
OTdmYTc3YmQ1YjhkZDUyZmQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQpAQCAtMTAyNSwxMSArMTAy
NSwxMCBAQCBzdGF0aWMgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShOU0FycmF5ICpp
bmNvbWluZ1Jlc3VsdHMsIE9wdGlvblNldDxUZXh0Qwogc3RhdGljIE5TVUludGVnZXIgaW5zZXJ0
aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24pCiB7CiAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKTsKLSAgICBhdXRvIHNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2lu
dChzZWxlY3Rpb25TdGFydCk7Ci0gICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFy
eVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKLSAgICBpZiAoIXNlbGVj
dGlvblN0YXJ0Qm91bmRhcnkgfHwgIXBhcmFncmFwaFN0YXJ0KQorICAgIGF1dG8gcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCksIHNlbGVjdGlv
blN0YXJ0KTsKKyAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
Y2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25TdGFydEJvdW5kYXJ5
IH0pOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UpOwogfQogCiBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0
cmluZ1ZpZXcgc3RyaW5nLCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY29yZUNoZWNraW5n
VHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCkBAIC0xMTEw
LDggKzExMDksOCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZQogICAgIG1fbGFzdFNlbGVjdGlv
bkZvclJlcXVlc3RlZENhbmRpZGF0ZXMgPSBzZWxlY3Rpb247CiAKICAgICBhdXRvIHNlbGVjdGlv
blN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc2VsZWN0aW9uU3Rh
cnRPZmZzZXRJblBhcmFncmFwaCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50
KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHNl
bGVjdGlvblN0YXJ0KSB9KTsKLSAgICBhdXRvIHNlbGVjdGlvbkxlbmd0aCA9IGNoYXJhY3RlckNv
dW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBv
aW50KHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpIH0pOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRP
ZmZzZXRJblBhcmFncmFwaCA9IGNoYXJhY3RlckNvdW50KCptYWtlU2ltcGxlUmFuZ2Uoc3RhcnRP
ZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCksIHNlbGVjdGlvblN0YXJ0KSk7CisgICAgYXV0byBz
ZWxlY3Rpb25MZW5ndGggPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNpbXBsZVJhbmdlKHNlbGVjdGlv
blN0YXJ0LCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSk7CiAgICAgYXV0byBjb250ZXh0UmFuZ2VG
b3JDYW5kaWRhdGVSZXF1ZXN0ID0gZnJhbWUtPmVkaXRvcigpLmNvbnRleHRSYW5nZUZvckNhbmRp
ZGF0ZVJlcXVlc3QoKTsKICAgICBTdHJpbmcgY29udGV4dEZvckNhbmRpZGF0ZVJlcWV1ZXN0ID0g
Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCA/IHBsYWluVGV4dCgqY29udGV4dFJhbmdl
Rm9yQ2FuZGlkYXRlUmVxdWVzdCkgOiBTdHJpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggYjMyMDlkYjdlYmU0NDM5YmIzNjZmMGZhNTgy
NjEzMDExNWU5M2RmYS4uMzRlNjhmMGMzZDU3MmJhOWU0M2FlNTE5ZjkzYzRiOGFjZTBjZTg3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC04Mzcs
NyArODM3LDcgQEAgLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6
KE5TUmFuZ2UpcmFuZ2UgcmFuZ2VJc1JlbGF0aXZlVG86KFcKICAgICBpZiAoIXBhcmFncmFwaFN0
YXJ0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gc2NvcGVFbmQgPSBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMocGFyYWdyYXBoU3RhcnQtPmNvbnRhaW5lci0+dHJl
ZVNjb3BlKCkucm9vdE5vZGUoKSkuZW5kOworICAgIGF1dG8gc2NvcGVFbmQgPSBtYWtlQm91bmRh
cnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVT
Y29wZSgpLnJvb3ROb2RlKCkpOwogICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6
cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgV1RGTW92ZSgqcGFyYWdyYXBoU3RhcnQpLCBXVEZNb3Zl
KHNjb3BlRW5kKSB9LCByYW5nZSkpOwogfQogCkBAIC0xNTQwLDEyICsxNTQwLDIwIEBAIC0gKE5T
U3RyaW5nICopd29yZEluUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIAogLSAoaW50KXdvcmRPZmZz
ZXRJblJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgcmV0dXJuIGNvcmUoc2VsZiktPnNl
bGVjdGlvbigpLndvcmRPZmZzZXRJblJhbmdlKGNvcmUocmFuZ2UpKTsKKyAgICBpZiAoIXJhbmdl
KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBhdXRvIHNlbGVjdGlvbiA9IGNvcmUoc2VsZikt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkK
KyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBvbmx5IHdvcmsg
aW4gY2FzZXMgd2hlcmUgdGhlIHNlbGVjdGlvbiByZW1haW5zIGluIHRoZSBzYW1lIG5vZGUgYWZ0
ZXIgaXQgaXMgZXhwYW5kZWQuCisgICAgcmV0dXJuIHN0ZDo6bWF4PGludD4oMCwgc2VsZWN0aW9u
LnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAtIGNvcmUocmFuZ2UpLT5zdGFydE9m
ZnNldCgpKTsKIH0KIAogLSAoQk9PTClzcGFjZUZvbGxvd3NXb3JkSW5SYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQogewotICAgIHJldHVybiBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5zcGFjZUZvbGxv
d3NXb3JkSW5SYW5nZShjb3JlKHJhbmdlKSk7CisgICAgcmV0dXJuIHJhbmdlICYmIGlzU3BhY2VP
ck5ld2xpbmUoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihtYWtlU2ltcGxlUmFuZ2UoY29yZShyYW5nZSkpLT5lbmQpKS5jaGFyYWN0ZXJBZnRlcigp
KTsKIH0KIAogLSAoTlNBcnJheSAqKXdvcmRzSW5DdXJyZW50UGFyYWdyYXBoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNwcAppbmRleCA5Zjg0NTY4MmMy
ZmY4YzUxYjkxYmI4NGFkZjBkZGFlODkwZTBmZmM5Li4zZGRkMDBmN2FiNzI2ZTBlZTQyOTRhOTUw
MjYzY2FiNWMzZmNhNGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nl
c3NpYmxlVGV4dEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2li
bGVUZXh0SW1wbC5jcHAKQEAgLTk4LDcgKzk4LDEwIEBAIEhSRVNVTFQgQWNjZXNzaWJsZVRleHQ6
OmdldF9jaGFyYWN0ZXJFeHRlbnRzKGxvbmcgb2Zmc2V0LCBlbnVtIElBMkNvb3JkaW5hdGVUeXBl
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgSW50UmVj
dCBib3VuZGluZ1JlY3QgPSBtX29iamVjdC0+Ym91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9mZnNl
dCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikpLCBWaXNpYmxlUG9zaXRpb24o
UG9zaXRpb24obm9kZSwgb2Zmc2V0KzEsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpKSkpOworICAgIEludFJlY3QgYm91bmRpbmdSZWN0ID0gbV9vYmplY3QtPmJvdW5kc0ZvclZp
c2libGVQb3NpdGlvblJhbmdlKHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5v
ZGUsIG9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikpLAorICAgICAg
ICBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0ICsgMSwgUG9zaXRpb246OlBv
c2l0aW9uSXNPZmZzZXRJbkFuY2hvcikpCisgICAgfSk7CiAgICAgKndpZHRoID0gYm91bmRpbmdS
ZWN0LndpZHRoKCk7CiAgICAgKmhlaWdodCA9IGJvdW5kaW5nUmVjdC5oZWlnaHQoKTsKICAgICBz
d2l0Y2ggKGNvb3JkVHlwZSkgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>