<?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>213522</bug_id>
          
          <creation_ts>2020-06-23 10:19:27 -0700</creation_ts>
          <short_desc>Drop AudioContextBase class</short_desc>
          <delta_ts>2020-06-23 12:00:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>212611</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>clark_wang</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1665432</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-06-23 10:19:27 -0700</bug_when>
    <thetext>Drop AudioContextBase class and have WebKitAudioContext subclass the new BaseAudioContext class instead.
We recently introduced BaseAudioContext to match the specification and keeping AudioContextBase is now confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665444</commentid>
    <comment_count>1</comment_count>
      <attachid>402568</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-06-23 10:48:43 -0700</bug_when>
    <thetext>Created attachment 402568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665446</commentid>
    <comment_count>2</comment_count>
      <attachid>402568</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-06-23 10:56:41 -0700</bug_when>
    <thetext>Comment on attachment 402568
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665484</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-23 11:59:53 -0700</bug_when>
    <thetext>Committed r263410: &lt;https://trac.webkit.org/changeset/263410&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 402568.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665487</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-23 12:00:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/64655624&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402568</attachid>
            <date>2020-06-23 10:48:43 -0700</date>
            <delta_ts>2020-06-23 11:59:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213522-20200623104843.patch</filename>
            <type>text/plain</type>
            <size>147675</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzMzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDliNzYwYTg5MWM1ODIx
MjM0ZDQ4ZWIxYjRmZGUzOGU2YmUyMGRhZi4uNWY3YThkOTc0YzQ5NTU5NjU1ZWY4MGJlMzdjM2Mz
MmRhMTg1ZmVjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAyMC0wNi0yMyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIERyb3AgQXVkaW9Db250ZXh0
QmFzZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEzNTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRHJvcCBBdWRpb0NvbnRleHRCYXNlIGNsYXNzIGFuZCBoYXZlIFdlYktpdEF1ZGlvQ29udGV4
dCBzdWJjbGFzcyB0aGUgbmV3IEJhc2VBdWRpb0NvbnRleHQgY2xhc3MgaW5zdGVhZC4KKyAgICAg
ICAgV2UgcmVjZW50bHkgaW50cm9kdWNlZCBCYXNlQXVkaW9Db250ZXh0IHRvIG1hdGNoIHRoZSBz
cGVjaWZpY2F0aW9uIGFuZCBrZWVwaW5nIEF1ZGlvQ29udGV4dEJhc2UgaXMgbm93IGNvbmZ1c2lu
Zy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHRoaXMgc2ltcGxpZmllcyBvdXIgY29kZSBidXQg
dGhlcmUgaXMgbm8gV2ViLWZhY2luZyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL0FuYWx5c2VyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmFseXNl
ck5vZGU6OkFuYWx5c2VyTm9kZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BbmFseXNl
ck5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpBdWRp
b0Jhc2ljSW5zcGVjdG9yTm9kZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jh
c2ljSW5zcGVjdG9yTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNp
Y1Byb2Nlc3Nvck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CYXNpY1Byb2Nlc3Nv
ck5vZGU6OkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZm
ZXJTb3VyY2VOb2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdWZmZXJTb3Vy
Y2VOb2RlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9C
dWZmZXJTb3VyY2VOb2RlOjpzZXRCdWZmZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
QXVkaW9CdWZmZXJTb3VyY2VOb2RlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NvbnRleHQuY3BwOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlv
bk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGU6OkF1ZGlv
RGVzdGluYXRpb25Ob2RlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGlu
YXRpb25Ob2RlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjpBdWRpb05vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Ob2RlOjpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZGlz
Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OnNldENoYW5uZWxDb3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OnNldENoYW5uZWxDb3VudE1vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjpzZXRDaGFubmVsSW50ZXJwcmV0YXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjplbmFibGVPdXRwdXRzSWZOZWNlc3NhcnkpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb05vZGU6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjpjb250ZXh0
IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGw6CisgICAg
ICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvTm9kZU91dHB1dDo6Y29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9BdWRpb1BhcmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW06OkF1ZGlvUGFy
YW0pOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5oOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVGb3JDb250ZXh0VGltZSk6CisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuaDoKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6OkF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU3VtbWluZ0p1bmN0aW9uOjpBdWRpb1N1bW1pbmdKdW5jdGlvbik6
CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb1N1bW1pbmdKdW5jdGlvbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9TdW1taW5nSnVuY3Rpb246OmNvbnRleHQpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCYXNlQXVkaW9Db250ZXh0OjpCYXNlQXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJhc2VBdWRpb0NvbnRleHQ6OmRvY3VtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VBdWRpb0NvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUF1ZGlvQ29udGV4dDo6aXNPZmZsaW5lQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpCYXNlQXVkaW9Db250ZXh0Ojppc1dlYktpdEF1ZGlvQ29udGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpjdXJyZW50U2FtcGxlRnJhbWUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6Y3VycmVudFRpbWUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6c2FtcGxlUmF0ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjppbmNyZW1lbnRDb25uZWN0aW9u
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6c2V0QXVkaW9UaHJl
YWQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aXNBdWRpb1RocmVhZEZp
bmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmJlaGF2aW9yUmVz
dHJpY3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmFk
ZEJlaGF2aW9yUmVzdHJpY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4
dDo6cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjpuZXh0QXVkaW9Ob2RlTG9nSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3Jl
OjpCYXNlQXVkaW9Db250ZXh0OjpuZXh0QXVkaW9QYXJhbWV0ZXJMb2dJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmlzU3RvcHBlZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyOjpBdXRvTG9ja2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXI6On5BdXRvTG9j
a2VyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QmlxdWFkRmlsdGVyTm9kZTo6QmlxdWFkRmlsdGVyTm9kZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmg6CisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QmlxdWFkUHJvY2Vzc29yOjpCaXF1YWRQcm9jZXNzb3IpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQmlxdWFkUHJvY2Vzc29yLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9DaGFu
bmVsTWVyZ2VyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGFubmVsTWVyZ2VyTm9kZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYW5uZWxNZXJnZXJOb2RlOjpDaGFubmVsTWVy
Z2VyTm9kZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsTWVyZ2VyTm9kZS5o
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQ2hhbm5lbFNwbGl0dGVyTm9kZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDaGFubmVsU3BsaXR0ZXJOb2RlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hhbm5lbFNwbGl0dGVyTm9kZTo6Q2hhbm5lbFNwbGl0dGVyTm9kZSk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsU3BsaXR0ZXJOb2RlLmg6CisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnZvbHZlck5vZGU6OkNvbnZvbHZlck5vZGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8v
Q29udm9sdmVyTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlv
RGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRBdWRpb0Rlc3Rp
bmF0aW9uTm9kZTo6RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGF5Tm9k
ZTo6RGVsYXlOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGF5Tm9kZTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsYXlQcm9j
ZXNzb3I6OkRlbGF5UHJvY2Vzc29yKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0RlbGF5
UHJvY2Vzc29yLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNz
b3JOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OkR5
bmFtaWNzQ29tcHJlc3Nvck5vZGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vRHluYW1p
Y3NDb21wcmVzc29yTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vR2Fpbk5vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R2Fpbk5vZGU6OkdhaW5Ob2RlKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0dhaW5Ob2RlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9N
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpzZXRGb3JtYXQpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmg6
CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5v
ZGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRp
b25Ob2RlOjpNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU6Ok1lZGlhU3RyZWFtQXVkaW9T
b3VyY2VOb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9T
b3VyY2VOb2RlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRp
b25Ob2RlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmg6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPc2NpbGxh
dG9yTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9zY2lsbGF0b3JOb2RlOjpPc2Np
bGxhdG9yTm9kZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5o
OgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYW5uZXJOb2RlQmFzZTo6UGFubmVyTm9kZUJhc2UpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vU2Ny
aXB0UHJvY2Vzc29yTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRQcm9jZXNzb3JO
b2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UHJvY2Vzc29yTm9kZTo6U2Ny
aXB0UHJvY2Vzc29yTm9kZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9j
ZXNzb3JOb2RlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXYXZlU2hhcGVyTm9kZTo6V2F2ZVNoYXBlck5vZGUpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaDoKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJLaXRBdWRpb0NvbnRleHQ6OldlYktpdEF1ZGlvQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJLaXRBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJLaXRBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhU3RyZWFtU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFTdHJl
YW1EZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRBdWRpb0NvbnRleHQ6OmNy
ZWF0ZVdlYktpdFBhbm5lcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRBdWRpb0NvbnRleHQ6
OmNsb3NlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1ZGlvQ29udGV4dC5o
OgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1
ZGlvQ29udGV4dC5pZGw6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbjoKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5h
bHM6OnNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyk6CisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMjAtMDYtMTgg
IFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVH
UkVTU0lPTiAocjI2MjEyNCk6IFR3aXR0ZXIgdmlkZW9zIGdvIGJsYW5rIGFmdGVyIGV4aXRpbmcg
ZnVsbHNjcmVlbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
bmFseXNlck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BbmFseXNl
ck5vZGUuY3BwCmluZGV4IDIxNWRlMzIxZTlhMTZjMzI0NmNhNDk0NzRkOWVhZTI1MjI1MzgyMDEu
LjVhZDVhZjgzMjgxMDIzNjJkM2M2N2RjZGJkMTZhYmFhZGFhMjNkMTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQW5hbHlzZXJOb2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FuYWx5c2VyTm9kZS5jcHAKQEAgLTM2LDcgKzM2
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
QW5hbHlzZXJOb2RlKTsKIAotQW5hbHlzZXJOb2RlOjpBbmFseXNlck5vZGUoQXVkaW9Db250ZXh0
QmFzZSYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKK0FuYWx5c2VyTm9kZTo6QW5hbHlzZXJO
b2RlKEJhc2VBdWRpb0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgOiBB
dWRpb0Jhc2ljSW5zcGVjdG9yTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlLCAyKQogewogICAgIHNl
dE5vZGVUeXBlKE5vZGVUeXBlQW5hbHlzZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BbmFseXNlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQW5hbHlzZXJOb2RlLmgKaW5kZXggZTFlZDFlZDA5OGRjODEwOTEwMTRhMGFmNjk4
YjczZWE5MGZmNTFhOS4uMjUxNjljNDkzMzFhNWI2OGNjMTdlYzcwNTlkOGM3MDAwMTcyMzAzNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BbmFseXNlck5vZGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0FuYWx5c2VyTm9kZS5oCkBA
IC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFuYWx5c2VyTm9kZSBm
aW5hbCA6IHB1YmxpYyBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSB7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChBbmFseXNlck5vZGUpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QW5hbHlz
ZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0
ZSkKKyAgICBzdGF0aWMgUmVmPEFuYWx5c2VyTm9kZT4gY3JlYXRlKEJhc2VBdWRpb0NvbnRleHQm
IGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBBbmFseXNlck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwogICAgIH0KQEAgLTU5
LDcgKzU5LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0Qnl0ZVRpbWVEb21haW5EYXRhKGNvbnN0
IFJlZjxKU0M6OlVpbnQ4QXJyYXk+JiBhcnJheSkgeyBtX2FuYWx5c2VyLmdldEJ5dGVUaW1lRG9t
YWluRGF0YShhcnJheS5nZXQoKSk7IH0KIAogcHJpdmF0ZToKLSAgICBBbmFseXNlck5vZGUoQXVk
aW9Db250ZXh0QmFzZSYsIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIEFuYWx5c2VyTm9kZShCYXNl
QXVkaW9Db250ZXh0JiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICB2b2lkIHByb2Nlc3Moc2l6
ZV90IGZyYW1lc1RvUHJvY2VzcykgZmluYWw7CiAgICAgdm9pZCByZXNldCgpIGZpbmFsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVj
dG9yTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlLmNwcAppbmRleCAxNDUzZGFjYWZkYTFkMzhhMzRjZmQxYjZiOTNjYjc4MzMy
MzVkOTg4Li5mYTY4ZWU5YzQwYmIxN2VkZDMzMTVlNjRhZjczZDU0Y2YxMDM0YmFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlLmNwcApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZSk7CiAK
LUF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlOjpBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZShBdWRpb0Nv
bnRleHRCYXNlJiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBvdXRwdXRDaGFu
bmVsQ291bnQpCitBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZTo6QXVkaW9CYXNpY0luc3BlY3Rvck5v
ZGUoQmFzZUF1ZGlvQ29udGV4dCYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQg
b3V0cHV0Q2hhbm5lbENvdW50KQogICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUp
CiB7CiAgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVCYXNpY0luc3BlY3Rvcik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JOb2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQmFzaWNJbnNwZWN0b3JO
b2RlLmgKaW5kZXggZTc2OWU0NmFlMjFmNDczNDFjMjczYzg4NDVjYmUwMjllODEyOGQ2Ni4uYmMy
MDBhNThiMmZiYmVkMGM3N2MwNzE5YzgzN2I2M2QzNWI4NzI3YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUu
aApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdWRpb0Jhc2lj
SW5zcGVjdG9yTm9kZSA6IHB1YmxpYyBBdWRpb05vZGUgewogICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoQXVkaW9CYXNpY0luc3BlY3Rvck5vZGUpOwogcHVibGljOgotICAgIEF1ZGlvQmFzaWNJ
bnNwZWN0b3JOb2RlKEF1ZGlvQ29udGV4dEJhc2UmLCBmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25l
ZCBvdXRwdXRDaGFubmVsQ291bnQpOworICAgIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlKEJhc2VB
dWRpb0NvbnRleHQmLCBmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBvdXRwdXRDaGFubmVsQ291
bnQpOwogCiBwcml2YXRlOgogICAgIHZvaWQgcHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9j
ZXNzKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAKaW5kZXggZjdiNzk2YmU1NTU0NTM2
YTZhNTQyYzc1ZTM2MDU1MjVmOTQ2OGEyOS4uZTMxY2JhYTI0Y2Y5NzRlODVhZjc0NTk2YmQ1ZDg0
MTc3OTQ0MjdhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQXVkaW9CYXNp
Y1Byb2Nlc3Nvck5vZGUpOwogCi1BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZTo6QXVkaW9CYXNpY1By
b2Nlc3Nvck5vZGUoQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkK
K0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShCYXNlQXVk
aW9Db250ZXh0JiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9Ob2RlKGNv
bnRleHQsIHNhbXBsZVJhdGUpCiB7CiAgICAgYWRkSW5wdXQobWFrZVVuaXF1ZTxBdWRpb05vZGVJ
bnB1dD4odGhpcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oCmluZGV4IGUxNjM3M2JmMDI5NzZhNDVhZDgy
NWUyZTYzYTgzN2FmZjRmOTIxOWEuLjFmZjQ2MmU4YjRiYzZiZTU3NzA1OWFkNzI0NmM3MWEyMmI2
OTc1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9C
YXNpY1Byb2Nlc3Nvck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgQXVkaW9Q
cm9jZXNzb3I7CiBjbGFzcyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSA6IHB1YmxpYyBBdWRpb05v
ZGUgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUp
OwogcHVibGljOgotICAgIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlKEF1ZGlvQ29udGV4dEJhc2Um
LCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShCYXNlQXVk
aW9Db250ZXh0JiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICAvLyBBdWRpb05vZGUKICAgICB2
b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcykgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9k
ZS5jcHAKaW5kZXggMGMxYmE0ZTk0YTk4Y2JmN2QxOWJkYzNiMjNhNjJmYTk0NmYwOTUzMS4uZWYz
NDU1MGFlNzc4MWUyMTJlYWRlMTczN2RjNDk4ZjI2NjFiZmExNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNw
cApAQCAtNDksMTIgKzQ5LDEyIEBAIGNvbnN0IGRvdWJsZSBEZWZhdWx0R3JhaW5EdXJhdGlvbiA9
IDAuMDIwOyAvLyAyMG1zCiAvLyB0byBtaW5pbWl6ZSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBhbGlh
c2luZy4KIGNvbnN0IGRvdWJsZSBNYXhSYXRlID0gMTAyNDsKIAotUmVmPEF1ZGlvQnVmZmVyU291
cmNlTm9kZT4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUoQXVkaW9Db250ZXh0QmFzZSYg
Y29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKK1JlZjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IEF1
ZGlvQnVmZmVyU291cmNlTm9kZTo6Y3JlYXRlKEJhc2VBdWRpb0NvbnRleHQmIGNvbnRleHQsIGZs
b2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9CdWZmZXJT
b3VyY2VOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKIH0KIAotQXVkaW9CdWZmZXJTb3VyY2VO
b2RlOjpBdWRpb0J1ZmZlclNvdXJjZU5vZGUoQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCwgZmxv
YXQgc2FtcGxlUmF0ZSkKK0F1ZGlvQnVmZmVyU291cmNlTm9kZTo6QXVkaW9CdWZmZXJTb3VyY2VO
b2RlKEJhc2VBdWRpb0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgOiBB
dWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKICAgICAsIG1fYnVm
ZmVyKG51bGxwdHIpCiAgICAgLCBtX2lzTG9vcGluZyhmYWxzZSkKQEAgLTQxMyw3ICs0MTMsNyBA
QCB2b2lkIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6c2V0QnVmZmVyKFJlZlB0cjxBdWRpb0J1ZmZl
cj4mJiBidWZmZXIpCiAgICAgREVCVUdfTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgLy8gVGhl
IGNvbnRleHQgbXVzdCBiZSBsb2NrZWQgc2luY2UgY2hhbmdpbmcgdGhlIGJ1ZmZlciBjYW4gcmUt
Y29uZmlndXJlIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdGhhdCBhcmUgb3V0cHV0LgotICAgIEF1
ZGlvQ29udGV4dEJhc2U6OkF1dG9Mb2NrZXIgY29udGV4dExvY2tlcihjb250ZXh0KCkpOworICAg
IEJhc2VBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgY29udGV4dExvY2tlcihjb250ZXh0KCkpOwog
ICAgIAogICAgIC8vIFRoaXMgc3luY2hyb25pemVzIHdpdGggcHJvY2VzcygpLgogICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9wcm9jZXNzTXV0ZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmgKaW5kZXggNjAx
MTMxMTk5YTRmYTkyZDczMGM1MGQ1YWEyNjAwMzhmNmZkOTZlYS4uOWM3ZTFiOWE2NzZhMDllNDll
OWVlY2U4ZjNjOWFmZGIwMTA4NDE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0J1ZmZlclNvdXJjZU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyU291cmNlTm9kZS5oCkBAIC0zOSw3ICszOSw3IEBA
IGNsYXNzIFBhbm5lck5vZGVCYXNlOwogY2xhc3MgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGZpbmFs
IDogcHVibGljIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZSB7CiAgICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRChBdWRpb0J1ZmZlclNvdXJjZU5vZGUpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0QmFzZSYsIGZsb2F0IHNh
bXBsZVJhdGUpOworICAgIHN0YXRpYyBSZWY8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPiBjcmVhdGUo
QmFzZUF1ZGlvQ29udGV4dCYsIGZsb2F0IHNhbXBsZVJhdGUpOwogCiAgICAgdmlydHVhbCB+QXVk
aW9CdWZmZXJTb3VyY2VOb2RlKCk7CiAKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIGNv
bnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAi
QXVkaW9CdWZmZXJTb3VyY2VOb2RlIjsgfQogCiBwcml2YXRlOgotICAgIEF1ZGlvQnVmZmVyU291
cmNlTm9kZShBdWRpb0NvbnRleHRCYXNlJiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisgICAgQXVkaW9C
dWZmZXJTb3VyY2VOb2RlKEJhc2VBdWRpb0NvbnRleHQmLCBmbG9hdCBzYW1wbGVSYXRlKTsKIAog
ICAgIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0KICAgICBkb3Vi
bGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggMzgzZTFmZGI2
OGZiNjkyNTUwZmIyY2VmNGFmMDMwMzk2ZjUwMTYyMy4uMjdlMzRlNmNhYzUzYjYwZGViMWIxODk1
NzQ0YzQzYWE3NTgyODNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQXVkaW9D
b250ZXh0LmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbmNs
dWRlICJNZWRpYVN0cmVhbS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCA2Nzc2MTdlY2IzMzhkYTg5
MWE3MTNhZTg4YTNmNWY2NGY2ZmQ4NDlhLi4xMDBjNDZmOGUxNzA4NzdhNzU1NTI0MzIxMTE0ZDFh
MDZiYTA5MGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQXVkaW9EZXN0aW5h
dGlvbk5vZGUpOwogCi1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGUo
QXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKK0F1ZGlvRGVzdGlu
YXRpb25Ob2RlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0
LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUp
CiAgICAgLCBtX2N1cnJlbnRTYW1wbGVGcmFtZSgwKQogICAgICwgbV9pc1NpbGVudCh0cnVlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oCmluZGV4IDM3NmY0NjI3MTJkN2YxYzJhZThkNTIwMTFmYTJhMTVmNmUxOGFlYzcu
LjI1YjQ1MTVjZTQ1MjU4ZTkxZWQzMWEyYmFiYWI1ZWVkODdlNjc5MGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgK
QEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgQXVkaW9Db250ZXh0OwogY2xhc3MgQXVkaW9EZXN0aW5h
dGlvbk5vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlLCBwdWJsaWMgQXVkaW9JT0NhbGxiYWNrIHsKICAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEF1ZGlvRGVzdGluYXRpb25Ob2RlKTsKIHB1YmxpYzoK
LSAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHRCYXNlJiwgZmxvYXQgc2FtcGxl
UmF0ZSk7CisgICAgQXVkaW9EZXN0aW5hdGlvbk5vZGUoQmFzZUF1ZGlvQ29udGV4dCYsIGZsb2F0
IHNhbXBsZVJhdGUpOwogICAgIHZpcnR1YWwgfkF1ZGlvRGVzdGluYXRpb25Ob2RlKCk7CiAgICAg
CiAgICAgLy8gQXVkaW9Ob2RlICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvTm9kZS5jcHAKaW5kZXggMjJlMDU0NjgyOTRjNjc1NGU2MGVmMjg0MTI3NDExOGQwMTEw
ODFhYy4uN2E3NjIxOWYyMThmYTUxNWYxZTY4YzI1NTAxODI4ODA4ZTYxM2Y2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcApAQCAtOTYsNyArOTYs
NyBAQCBTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoQXVkaW9Ob2RlOjpOb2RlVHlw
ZSBlbnVtZXJhdGlvblZhbHVlKQogICAgIHJldHVybiB2YWx1ZXNbc3RhdGljX2Nhc3Q8c2l6ZV90
PihlbnVtZXJhdGlvblZhbHVlKV07CiB9CiAKLUF1ZGlvTm9kZTo6QXVkaW9Ob2RlKEF1ZGlvQ29u
dGV4dEJhc2UmIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCitBdWRpb05vZGU6OkF1ZGlvTm9k
ZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogbV9p
c0luaXRpYWxpemVkKGZhbHNlKQogICAgICwgbV9ub2RlVHlwZShOb2RlVHlwZVVua25vd24pCiAg
ICAgLCBtX2NvbnRleHQoY29udGV4dCkKQEAgLTE5NSw3ICsxOTUsNyBAQCBBdWRpb05vZGVPdXRw
dXQqIEF1ZGlvTm9kZTo6b3V0cHV0KHVuc2lnbmVkIGkpCiBFeGNlcHRpb25Pcjx2b2lkPiBBdWRp
b05vZGU6OmNvbm5lY3QoQXVkaW9Ob2RlJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgb3V0cHV0SW5k
ZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBBdWRpb0NvbnRleHRCYXNlOjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOworICAg
IEJhc2VBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRleHQoKSk7CiAKICAgICBB
TFdBWVNfTE9HKExPR0lERU5USUZJRVIsIGRlc3RpbmF0aW9uLm5vZGVUeXBlKCksICIsIG91dHB1
dCA9ICIsIG91dHB1dEluZGV4LCAiLCBpbnB1dCA9ICIsIGlucHV0SW5kZXgpOwogICAgIApAQCAt
MjIxLDcgKzIyMSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEF1ZGlvTm9kZTo6Y29ubmVjdChBdWRp
b05vZGUmIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBvdXRwdXRJbmRlCiAKIEV4Y2VwdGlvbk9yPHZv
aWQ+IEF1ZGlvTm9kZTo6Y29ubmVjdChBdWRpb1BhcmFtJiBwYXJhbSwgdW5zaWduZWQgb3V0cHV0
SW5kZXgpCiB7Ci0gICAgQXVkaW9Db250ZXh0QmFzZTo6QXV0b0xvY2tlciBsb2NrZXIoY29udGV4
dCgpKTsKKyAgICBCYXNlQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkp
OwogCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtMjQyLDcgKzI0Miw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IEF1ZGlvTm9kZTo6Y29ubmVjdChBdWRpb1BhcmFtJiBwYXJhbSwgdW5z
aWduZWQgb3V0cHV0SW5kZXgpCiBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb05vZGU6OmRpc2Nvbm5l
Y3QodW5zaWduZWQgb3V0cHV0SW5kZXgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBBdWRpb0NvbnRleHRCYXNlOjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOworICAg
IEJhc2VBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRleHQoKSk7CiAKICAgICAv
LyBTYW5pdHkgY2hlY2sgaW5wdXQgYW5kIG91dHB1dCBpbmRpY2VzLgogICAgIGlmIChvdXRwdXRJ
bmRleCA+PSBudW1iZXJPZk91dHB1dHMoKSkKQEAgLTI2NCw3ICsyNjQsNyBAQCB1bnNpZ25lZCBB
dWRpb05vZGU6OmNoYW5uZWxDb3VudCgpCiBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb05vZGU6OnNl
dENoYW5uZWxDb3VudCh1bnNpZ25lZCBjaGFubmVsQ291bnQpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBBdWRpb0NvbnRleHRCYXNlOjpBdXRvTG9ja2VyIGxvY2tlcihjb250
ZXh0KCkpOworICAgIEJhc2VBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRleHQo
KSk7CiAKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsIGNoYW5uZWxDb3VudCk7CiAgICAg
CkBAIC0yOTcsNyArMjk3LDcgQEAgU3RyaW5nIEF1ZGlvTm9kZTo6Y2hhbm5lbENvdW50TW9kZSgp
CiBFeGNlcHRpb25Pcjx2b2lkPiBBdWRpb05vZGU6OnNldENoYW5uZWxDb3VudE1vZGUoY29uc3Qg
U3RyaW5nJiBtb2RlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQXVkaW9D
b250ZXh0QmFzZTo6QXV0b0xvY2tlciBsb2NrZXIoY29udGV4dCgpKTsKKyAgICBCYXNlQXVkaW9D
b250ZXh0OjpBdXRvTG9ja2VyIGxvY2tlcihjb250ZXh0KCkpOwogCiAgICAgQUxXQVlTX0xPRyhM
T0dJREVOVElGSUVSLCBtb2RlKTsKICAgICAKQEAgLTMzMyw3ICszMzMsNyBAQCBTdHJpbmcgQXVk
aW9Ob2RlOjpjaGFubmVsSW50ZXJwcmV0YXRpb24oKQogRXhjZXB0aW9uT3I8dm9pZD4gQXVkaW9O
b2RlOjpzZXRDaGFubmVsSW50ZXJwcmV0YXRpb24oY29uc3QgU3RyaW5nJiBpbnRlcnByZXRhdGlv
bikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEF1ZGlvQ29udGV4dEJhc2U6
OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRleHQoKSk7CisgICAgQmFzZUF1ZGlvQ29udGV4dDo6QXV0
b0xvY2tlciBsb2NrZXIoY29udGV4dCgpKTsKIAogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
UiwgaW50ZXJwcmV0YXRpb24pOwogICAgIApAQCAtNDM4LDcgKzQzOCw3IEBAIHZvaWQgQXVkaW9O
b2RlOjplbmFibGVPdXRwdXRzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX2lzRGlzYWJsZWQg
JiYgbV9jb25uZWN0aW9uUmVmQ291bnQgPiAwKSB7CiAgICAgICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgICAgIEF1ZGlvQ29udGV4dEJhc2U6OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRl
eHQoKSk7CisgICAgICAgIEJhc2VBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKGNvbnRl
eHQoKSk7CiAKICAgICAgICAgbV9pc0Rpc2FibGVkID0gZmFsc2U7CiAgICAgICAgIGZvciAoYXV0
byYgb3V0cHV0IDogbV9vdXRwdXRzKQpAQCAtNTM1LDcgKzUzNSw3IEBAIFZhcmlhbnQ8UmVmUHRy
PEJhc2VBdWRpb0NvbnRleHQ+LCBSZWZQdHI8V2ViS2l0QXVkaW9Db250ZXh0Pj4gQXVkaW9Ob2Rl
Ojpjb250ZXh0CiB7CiAgICAgaWYgKG1fY29udGV4dC0+aXNXZWJLaXRBdWRpb0NvbnRleHQoKSkK
ICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8V2ViS2l0QXVkaW9Db250ZXh0
Jj4obV9jb250ZXh0LmdldCgpKSk7Ci0gICAgcmV0dXJuIG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8
QmFzZUF1ZGlvQ29udGV4dCY+KG1fY29udGV4dC5nZXQoKSkpOworICAgIHJldHVybiBtYWtlUmVm
UHRyKG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlOjpmaW5pc2hEZXJlZihS
ZWZUeXBlIHJlZlR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05v
ZGUuaAppbmRleCBiZmQ5MTdiNDNmN2FmODQ4MmFjMmY0NmVhN2I5YTdjZjg3MzMzY2I0Li4zMjhm
ZDE4NmU2MmIxZmFlZjNkODcyNjgxNjVhNTNhNGZkNGFhMDBlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBBdWRpb0NvbnRleHRCYXNlOworY2xhc3MgQmFzZUF1ZGlv
Q29udGV4dDsKIGNsYXNzIEF1ZGlvTm9kZUlucHV0OwogY2xhc3MgQXVkaW9Ob2RlT3V0cHV0Owog
Y2xhc3MgQXVkaW9QYXJhbTsKQEAgLTU5LDExICs1OSwxMSBAQCBjbGFzcyBBdWRpb05vZGUKIHB1
YmxpYzoKICAgICBlbnVtIHsgUHJvY2Vzc2luZ1NpemVJbkZyYW1lcyA9IDEyOCB9OwogCi0gICAg
QXVkaW9Ob2RlKEF1ZGlvQ29udGV4dEJhc2UmLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICBBdWRp
b05vZGUoQmFzZUF1ZGlvQ29udGV4dCYsIGZsb2F0IHNhbXBsZVJhdGUpOwogICAgIHZpcnR1YWwg
fkF1ZGlvTm9kZSgpOwogCi0gICAgQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCgpIHsgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsgfQotICAgIGNvbnN0IEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBCYXNlQXVkaW9Db250ZXh0
JiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgY29uc3QgQmFzZUF1
ZGlvQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQog
CiAgICAgVmFyaWFudDxSZWZQdHI8QmFzZUF1ZGlvQ29udGV4dD4sIFJlZlB0cjxXZWJLaXRBdWRp
b0NvbnRleHQ+PiBjb250ZXh0Rm9yQmluZGluZ3MoKSBjb25zdDsKIApAQCAtMjE0LDcgKzIxNCw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2xhdGlsZSBib29sIG1faXNJbml0aWFsaXplZDsKICAgICBO
b2RlVHlwZSBtX25vZGVUeXBlOwotICAgIFJlZjxBdWRpb0NvbnRleHRCYXNlPiBtX2NvbnRleHQ7
CisgICAgUmVmPEJhc2VBdWRpb0NvbnRleHQ+IG1fY29udGV4dDsKICAgICBmbG9hdCBtX3NhbXBs
ZVJhdGU7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBdWRpb05vZGVJbnB1dD4+IG1faW5w
dXRzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9Ob2RlT3V0cHV0Pj4gbV9vdXRw
dXRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05v
ZGVPdXRwdXQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0
cHV0LmgKaW5kZXggZjA4OTgzNjM1ZjNjNTU5Yzc5ODFmMGJhNGE1YzEyMmIxNTljMmNiNS4uMmM3
YzBjYjVjMTRiYjJhODE5NTFjODVhZGI1NWMxZGVlZDJjZDk0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oCkBAIC00Nyw3ICs0Nyw3
IEBAIHB1YmxpYzoKIAogICAgIC8vIENhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgogICAg
IEF1ZGlvTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQotICAgIEF1ZGlvQ29u
dGV4dEJhc2UmIGNvbnRleHQoKSB7IHJldHVybiBtX25vZGUtPmNvbnRleHQoKTsgfQorICAgIEJh
c2VBdWRpb0NvbnRleHQmIGNvbnRleHQoKSB7IHJldHVybiBtX25vZGUtPmNvbnRleHQoKTsgfQog
ICAgIAogICAgIC8vIENhdXNlcyBvdXIgQXVkaW9Ob2RlIHRvIHByb2Nlc3MgaWYgaXQgaGFzbid0
IGFscmVhZHkgZm9yIHRoaXMgcmVuZGVyIHF1YW50dW0uCiAgICAgLy8gSXQgcmV0dXJucyB0aGUg
YnVzIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3NlZCBhdWRpbyBmb3IgdGhpcyBvdXRwdXQsIHJldHVy
bmluZyBpblBsYWNlQnVzIGlmIGluLXBsYWNlIHByb2Nlc3Npbmcgd2FzIHBvc3NpYmxlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAKaW5kZXggZDQ3
MGJmNzQ2ZWZiNWFiMjNjYTM1MmQ3YmQ5NTMzOGMzODE0ZmU3Yy4uYTUxNjU1ZTUwYzJjNTcxNGVh
MDQyZDY3NjgwM2RmZmZlMWQyZWFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvUGFyYW0uY3BwCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNvbnN0IGRvdWJsZSBBdWRpb1BhcmFtOjpEZWZhdWx0U21vb3RoaW5nQ29uc3RhbnQgPSAw
LjA1OwogY29uc3QgZG91YmxlIEF1ZGlvUGFyYW06OlNuYXBUaHJlc2hvbGQgPSAwLjAwMTsKIAot
QXVkaW9QYXJhbTo6QXVkaW9QYXJhbShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUsIGRvdWJsZSBtaW5WYWx1ZSwgZG91Ymxl
IG1heFZhbHVlLCB1bnNpZ25lZCB1bml0cykKK0F1ZGlvUGFyYW06OkF1ZGlvUGFyYW0oQmFzZUF1
ZGlvQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgZGVmYXVsdFZh
bHVlLCBkb3VibGUgbWluVmFsdWUsIGRvdWJsZSBtYXhWYWx1ZSwgdW5zaWduZWQgdW5pdHMpCiAg
ICAgOiBBdWRpb1N1bW1pbmdKdW5jdGlvbihjb250ZXh0KQogICAgICwgbV9uYW1lKG5hbWUpCiAg
ICAgLCBtX3ZhbHVlKGRlZmF1bHRWYWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb1BhcmFtLmgKaW5kZXggMTZhMjEwOTUwNDRmNjAxZWQyN2I4OTAxYTA3NjhmMmZh
OWViMTZlNi4uZTNhMzNkYjg5MDk2MWU5NzRjOWE2MGNjNzA2M2Y4MWUzZTY0ZTRlMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmgKQEAgLTUzLDcgKzUz
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgRGVmYXVsdFNtb290aGluZ0Nv
bnN0YW50OwogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgU25hcFRocmVzaG9sZDsKIAotICAgIHN0
YXRpYyBSZWY8QXVkaW9QYXJhbT4gY3JlYXRlKEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIGRlZmF1bHRWYWx1ZSwgZG91YmxlIG1pblZhbHVlLCBk
b3VibGUgbWF4VmFsdWUsIHVuc2lnbmVkIHVuaXRzID0gMCkKKyAgICBzdGF0aWMgUmVmPEF1ZGlv
UGFyYW0+IGNyZWF0ZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGRvdWJsZSBkZWZhdWx0VmFsdWUsIGRvdWJsZSBtaW5WYWx1ZSwgZG91YmxlIG1heFZhbHVl
LCB1bnNpZ25lZCB1bml0cyA9IDApCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBBdWRpb1BhcmFtKGNvbnRleHQsIG5hbWUsIGRlZmF1bHRWYWx1ZSwgbWluVmFsdWUsIG1heFZh
bHVlLCB1bml0cykpOwogICAgIH0KQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkaXNjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCopOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQXVkaW9Q
YXJhbShBdWRpb0NvbnRleHRCYXNlJiwgY29uc3QgU3RyaW5nJiwgZG91YmxlIGRlZmF1bHRWYWx1
ZSwgZG91YmxlIG1pblZhbHVlLCBkb3VibGUgbWF4VmFsdWUsIHVuc2lnbmVkIHVuaXRzID0gMCk7
CisgICAgQXVkaW9QYXJhbShCYXNlQXVkaW9Db250ZXh0JiwgY29uc3QgU3RyaW5nJiwgZG91Ymxl
IGRlZmF1bHRWYWx1ZSwgZG91YmxlIG1pblZhbHVlLCBkb3VibGUgbWF4VmFsdWUsIHVuc2lnbmVk
IHVuaXRzID0gMCk7CiAKIHByaXZhdGU6CiAgICAgLy8gc2FtcGxlQWNjdXJhdGUgY29ycmVzcG9u
ZHMgdG8gYS1yYXRlIChhdWRpbyByYXRlKSB2cy4gay1yYXRlIGluIHRoZSBXZWIgQXVkaW8gc3Bl
Y2lmaWNhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9QYXJhbVRpbWVsaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9QYXJhbVRpbWVsaW5lLmNwcAppbmRleCA2YzQxMzAxZDhhZDVhN2FiYmU4ZGIwZGJhMTdj
Zjg0NGJmZWZmYjYwLi4zMGFkYTJkOTJhNzQ0OGYxMjMxYzk3NDgzMjQxNDM3ZGIwOWFlZDkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1l
bGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFt
VGltZWxpbmUuY3BwCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBBdWRpb1BhcmFtVGltZWxpbmU6
OmNhbmNlbFNjaGVkdWxlZFZhbHVlcyhmbG9hdCBzdGFydFRpbWUpCiAgICAgfQogfQogCi1mbG9h
dCBBdWRpb1BhcmFtVGltZWxpbmU6OnZhbHVlRm9yQ29udGV4dFRpbWUoQXVkaW9Db250ZXh0QmFz
ZSYgY29udGV4dCwgZmxvYXQgZGVmYXVsdFZhbHVlLCBib29sJiBoYXNWYWx1ZSkKK2Zsb2F0IEF1
ZGlvUGFyYW1UaW1lbGluZTo6dmFsdWVGb3JDb250ZXh0VGltZShCYXNlQXVkaW9Db250ZXh0JiBj
b250ZXh0LCBmbG9hdCBkZWZhdWx0VmFsdWUsIGJvb2wmIGhhc1ZhbHVlKQogewogICAgIHsKICAg
ICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fZXZlbnRzTXV0ZXgsIHN0ZDo6dHJ5
X3RvX2xvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1BhcmFtVGltZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9QYXJhbVRpbWVsaW5lLmgKaW5kZXggYTU4NjhiZGVlMTgzZmRlMmE3MDhkNDY0Y2U2MzViMjQw
MGU3NjFhMi4uOGI4ZjBiNTQwMDNhZjRmOTc5YTQ0M2JmYjJmOWEzOGEwZmIxYmNkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGlu
ZS5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgIC8vIGhhc1ZhbHVlIGlzIHNldCB0
byB0cnVlIGlmIGEgdmFsaWQgdGltZWxpbmUgdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgLy8gb3Ro
ZXJ3aXNlIGRlZmF1bHRWYWx1ZSBpcyByZXR1cm5lZC4KLSAgICBmbG9hdCB2YWx1ZUZvckNvbnRl
eHRUaW1lKEF1ZGlvQ29udGV4dEJhc2UmLCBmbG9hdCBkZWZhdWx0VmFsdWUsIGJvb2wmIGhhc1Zh
bHVlKTsKKyAgICBmbG9hdCB2YWx1ZUZvckNvbnRleHRUaW1lKEJhc2VBdWRpb0NvbnRleHQmLCBm
bG9hdCBkZWZhdWx0VmFsdWUsIGJvb2wmIGhhc1ZhbHVlKTsKIAogICAgIC8vIEdpdmVuIHRoZSB0
aW1lIHJhbmdlLCBjYWxjdWxhdGVzIHBhcmFtZXRlciB2YWx1ZXMgaW50byB0aGUgdmFsdWVzIGJ1
ZmZlcgogICAgIC8vIGFuZCByZXR1cm5zIHRoZSBsYXN0IHBhcmFtZXRlciB2YWx1ZSBjYWxjdWxh
dGVkIGZvciAidmFsdWVzIiBvciB0aGUgZGVmYXVsdFZhbHVlIGlmIG5vbmUgd2VyZSBjYWxjdWxh
dGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Nj
aGVkdWxlZFNvdXJjZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuY3BwCmluZGV4IDdjMjgyMzdhMGJkMDM1ZTRjM2FiN2Jh
NTEzNzUzM2JkOTE1YTdlNjEuLjc2Yzk2OTM5YzcyZTZlZjgwNWMyNzAzNzFhZjA5ODI5YTcwZDZl
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TY2hl
ZHVsZWRTb3VyY2VOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZSk7CiAKIGNvbnN0IGRv
dWJsZSBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6OlVua25vd25UaW1lID0gLTE7CiAKLUF1ZGlv
U2NoZWR1bGVkU291cmNlTm9kZTo6QXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlKEF1ZGlvQ29udGV4
dEJhc2UmIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCitBdWRpb1NjaGVkdWxlZFNvdXJjZU5v
ZGU6OkF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0LCBm
bG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCiAg
ICAgLCBBY3RpdmVET01PYmplY3QoY29udGV4dC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAg
ICAgLCBtX2VuZFRpbWUoVW5rbm93blRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuaAppbmRleCBiNGQ5
NTg4MGMxZGYzNjZmODIxZTFhYmZjZmNhNzdkNzYxMTBlYTNmLi42MGIzODc4NTMxYjQxYTc0ZjE1
ZTc3OWQyMTc5MzlhOTRkNTk2YWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLmgKQEAgLTUzLDcgKzUz
LDcgQEAgcHVibGljOgogICAgICAgICBGSU5JU0hFRF9TVEFURSA9IDMKICAgICB9OwogICAgIAot
ICAgIEF1ZGlvU2NoZWR1bGVkU291cmNlTm9kZShBdWRpb0NvbnRleHRCYXNlJiwgZmxvYXQgc2Ft
cGxlUmF0ZSk7CisgICAgQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlKEJhc2VBdWRpb0NvbnRleHQm
LCBmbG9hdCBzYW1wbGVSYXRlKTsKIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHN0YXJ0TGF0ZXIo
ZG91YmxlIHdoZW4pOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHN0b3BMYXRlcihkb3VibGUgd2hl
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3Vt
bWluZ0p1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9T
dW1taW5nSnVuY3Rpb24uY3BwCmluZGV4IGRkNjRmZDNlYTgxMzExZjAwZTA4YzNjYTQxZDc0Mjhm
MWYxZjM4NzkuLjczNmNlNmIxMzRlZDk3MmY3YmRmMTJhYTliNDI4NDlkMjM0YTg3YzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5n
SnVuY3Rpb24uY3BwCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
QXVkaW9TdW1taW5nSnVuY3Rpb246OkF1ZGlvU3VtbWluZ0p1bmN0aW9uKEF1ZGlvQ29udGV4dEJh
c2UmIGNvbnRleHQpCitBdWRpb1N1bW1pbmdKdW5jdGlvbjo6QXVkaW9TdW1taW5nSnVuY3Rpb24o
QmFzZUF1ZGlvQ29udGV4dCYgY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAg
ICwgbV9yZW5kZXJpbmdTdGF0ZU5lZWRVcGRhdGluZyhmYWxzZSkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uaAppbmRl
eCA0Y2JmOGFlOWZiOTUxYjc4MjA3NmIwY2I1MjYxMTZjMTlkNGFlYzliLi41NjcxZjcwNzc5YWVk
MzIzMGExZjMwMjNjMzc3YTBkMjVjMDBlODIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1N1bW1pbmdKdW5jdGlvbi5oCkBAIC0zMCwxOCArMzAs
MTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBdWRpb0NvbnRleHRCYXNlOwor
Y2xhc3MgQmFzZUF1ZGlvQ29udGV4dDsKIGNsYXNzIEF1ZGlvTm9kZU91dHB1dDsKIAogLy8gQW4g
QXVkaW9TdW1taW5nSnVuY3Rpb24gcmVwcmVzZW50cyBhIHBvaW50IHdoZXJlIHplcm8sIG9uZSwg
b3IgbW9yZSBBdWRpb05vZGVPdXRwdXRzIGNvbm5lY3QuCiAKIGNsYXNzIEF1ZGlvU3VtbWluZ0p1
bmN0aW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBBdWRpb1N1bW1pbmdKdW5jdGlvbihBdWRp
b0NvbnRleHRCYXNlJik7CisgICAgZXhwbGljaXQgQXVkaW9TdW1taW5nSnVuY3Rpb24oQmFzZUF1
ZGlvQ29udGV4dCYpOwogICAgIHZpcnR1YWwgfkF1ZGlvU3VtbWluZ0p1bmN0aW9uKCk7CiAKICAg
ICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KLSAgICBBdWRpb0NvbnRleHRCYXNl
JiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgQmFzZUF1ZGlvQ29udGV4dCYg
Y29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogCiAgICAgLy8gVGhpcyBtdXN0IGJlIGNh
bGxlZCB3aGVuZXZlciB3ZSBtb2RpZnkgbV9vdXRwdXRzLgogICAgIHZvaWQgY2hhbmdlZE91dHB1
dHMoKTsKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRh
dGUoKSA9IDA7CiAKIHByb3RlY3RlZDoKLSAgICBSZWY8QXVkaW9Db250ZXh0QmFzZT4gbV9jb250
ZXh0OworICAgIFJlZjxCYXNlQXVkaW9Db250ZXh0PiBtX2NvbnRleHQ7CiAKICAgICAvLyBtX291
dHB1dHMgY29udGFpbnMgdGhlIEF1ZGlvTm9kZU91dHB1dHMgcmVwcmVzZW50aW5nIGN1cnJlbnQg
Y29ubmVjdGlvbnMgd2hpY2ggYXJlIG5vdCBkaXNhYmxlZC4KICAgICAvLyBUaGUgcmVuZGVyaW5n
IGNvZGUgc2hvdWxkIG5ldmVyIHVzZSB0aGlzIGRpcmVjdGx5LCBidXQgaW5zdGVhZCB1c2VzIG1f
cmVuZGVyaW5nT3V0cHV0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0Jhc2VBdWRpb0NvbnRleHQuY3BwCmluZGV4IGM4MWZlOWE4YTQ0NjQ4ODEwNTdlZDc1Yzhl
ZDUxZGIxZmRkMzdjNjIuLmNiZWM2ZTFiOGFiNTM0NzhjZTc0YjQ3YWZkOTQ2ZmYxZTlkNmY5MGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CYXNlQXVkaW9D
b250ZXh0LmNwcApAQCAtOTUsNyArOTUsNiBAQCBjb25zdCB1bnNpZ25lZCBNYXhQZXJpb2RpY1dh
dmVMZW5ndGggPSA0MDk2OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChBdWRpb0NvbnRleHRCYXNlKTsKIFdURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChCYXNlQXVkaW9Db250ZXh0KTsKIAogI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VE
KGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPnBhZ2Uo
KSAmJiBkb2N1bWVudCgpLT5wYWdlKCktPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBNZWRp
YSwgIiVwIC0gQmFzZUF1ZGlvQ29udGV4dDo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCkBA
IC0xMDksMTQgKzEwOCw5IEBAIGJvb2wgQmFzZUF1ZGlvQ29udGV4dDo6aXNTYW1wbGVSYXRlUmFu
Z2VHb29kKGZsb2F0IHNhbXBsZVJhdGUpCiAKIHVuc2lnbmVkIEJhc2VBdWRpb0NvbnRleHQ6OnNf
aGFyZHdhcmVDb250ZXh0Q291bnQgPSAwOwogCi1BdWRpb0NvbnRleHRCYXNlOjpBdWRpb0NvbnRl
eHRCYXNlKERvY3VtZW50JiBkb2N1bWVudCkKLSAgICA6IEFjdGl2ZURPTU9iamVjdChkb2N1bWVu
dCkKLXsKLX0KLQogLy8gQ29uc3RydWN0b3IgZm9yIHJlbmRlcmluZyB0byB0aGUgYXVkaW8gaGFy
ZHdhcmUuCiBCYXNlQXVkaW9Db250ZXh0OjpCYXNlQXVkaW9Db250ZXh0KERvY3VtZW50JiBkb2N1
bWVudCkKLSAgICA6IEF1ZGlvQ29udGV4dEJhc2UoZG9jdW1lbnQpCisgICAgOiBBY3RpdmVET01P
YmplY3QoZG9jdW1lbnQpCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgLCBtX2xvZ2dl
cihkb2N1bWVudC5sb2dnZXIoKSkKICAgICAsIG1fbG9nSWRlbnRpZmllcih1bmlxdWVMb2dJZGVu
dGlmaWVyKCkpCkBAIC0xNDEsNyArMTM1LDcgQEAgQmFzZUF1ZGlvQ29udGV4dDo6QmFzZUF1ZGlv
Q29udGV4dChEb2N1bWVudCYgZG9jdW1lbnQpCiAKIC8vIENvbnN0cnVjdG9yIGZvciBvZmZsaW5l
IChub24tcmVhbHRpbWUpIHJlbmRlcmluZy4KIEJhc2VBdWRpb0NvbnRleHQ6OkJhc2VBdWRpb0Nv
bnRleHQoRG9jdW1lbnQmIGRvY3VtZW50LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQotICAg
IDogQXVkaW9Db250ZXh0QmFzZShkb2N1bWVudCkKKyAgICA6IEFjdGl2ZURPTU9iamVjdChkb2N1
bWVudCkKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICAsIG1fbG9nZ2VyKGRvY3VtZW50
LmxvZ2dlcigpKQogICAgICwgbV9sb2dJZGVudGlmaWVyKHVuaXF1ZUxvZ0lkZW50aWZpZXIoKSkK
QEAgLTM0Myw3ICszMzcsNyBAQCBjb25zdCBjaGFyKiBCYXNlQXVkaW9Db250ZXh0OjphY3RpdmVE
T01PYmplY3ROYW1lKCkgY29uc3QKICAgICByZXR1cm4gIkF1ZGlvQ29udGV4dCI7CiB9CiAKLURv
Y3VtZW50KiBBdWRpb0NvbnRleHRCYXNlOjpkb2N1bWVudCgpIGNvbnN0CitEb2N1bWVudCogQmFz
ZUF1ZGlvQ29udGV4dDo6ZG9jdW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiBkb3duY2FzdDxE
b2N1bWVudD4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIH0KQEAgLTk4MSw3ICs5NzUsNyBA
QCB2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnByb2Nlc3NBdXRvbWF0aWNQdWxsTm9kZXMoc2l6ZV90
IGZyYW1lc1RvUHJvY2VzcykKICAgICAgICAgbm9kZS0+cHJvY2Vzc0lmTmVjZXNzYXJ5KGZyYW1l
c1RvUHJvY2Vzcyk7CiB9CiAKLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEF1ZGlvQ29udGV4dEJh
c2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAorU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogQmFzZUF1ZGlvQ29udGV4dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CYXNlQXVkaW9Db250
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQu
aAppbmRleCA3MGQ0NzUyM2Y5MDhiMzhjZWQxODg2MzMzOThiNjVhNTFmNTU5MTFiLi41MGFhMDcw
MzNmMzkyN2Y4ZWQ3ZWJmNWYyNjIxOWVmOTk5NzQ2ZDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaApAQCAtODAsMTQ3ICs4MCw0
NSBAQCBjbGFzcyBXYXZlU2hhcGVyTm9kZTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4g
Y2xhc3MgRE9NUHJvbWlzZURlZmVycmVkOwogCi0vLyBGSVhNRTogV2UgbmVlZCB0byByZW5hbWUg
dGhpcyBub3cgdGhhdCB0aGVyZSBpcyBhbHNvIEJhc2VBdWRpb0NvbnRleHQuCi1jbGFzcyBBdWRp
b0NvbnRleHRCYXNlCisvLyBBdWRpb0NvbnRleHQgaXMgdGhlIGNvcm5lcnN0b25lIG9mIHRoZSB3
ZWIgYXVkaW8gQVBJIGFuZCBhbGwgQXVkaW9Ob2RlcyBhcmUgY3JlYXRlZCBmcm9tIGl0LgorLy8g
Rm9yIHRocmVhZCBzYWZldHkgYmV0d2VlbiB0aGUgYXVkaW8gdGhyZWFkIGFuZCB0aGUgbWFpbiB0
aHJlYWQsIGl0IGhhcyBhIHJlbmRlcmluZyBncmFwaCBsb2NraW5nIG1lY2hhbmlzbS4gCisKK2Ns
YXNzIEJhc2VBdWRpb0NvbnRleHQKICAgICA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QKLSAgICAs
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBdWRpb0NvbnRleHRCYXNlPgorICAgICwgcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEJhc2VBdWRpb0NvbnRleHQ+CiAgICAgLCBwdWJsaWMg
RXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YQogICAgICwgcHVibGljIE1lZGlhQ2FuU3RhcnRMaXN0
ZW5lcgogICAgICwgcHVibGljIE1lZGlhUHJvZHVjZXIKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKICAgICAsIHB1YmxpYyBMb2dnZXJIZWxwZXIKICNlbmRpZgorICAgICwgcHJpdmF0ZSBQbGF0
Zm9ybU1lZGlhU2Vzc2lvbkNsaWVudAorICAgICwgcHJpdmF0ZSBWaXNpYmlsaXR5Q2hhbmdlQ2xp
ZW50CiB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChBdWRpb0NvbnRleHRCYXNlKTsKKyAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEJhc2VBdWRpb0NvbnRleHQpOwogcHVibGljOgotICAg
IHZpcnR1YWwgfkF1ZGlvQ29udGV4dEJhc2UoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+QmFz
ZUF1ZGlvQ29udGV4dCgpOwogCiAgICAgLy8gUmVjb25jaWxlIHJlZi9kZXJlZiB3aGljaCBhcmUg
ZGVmaW5lZCBib3RoIGluIFRocmVhZFNhZmVSZWZDb3VudGVkIGFuZCBFdmVudFRhcmdldC4KICAg
ICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDo6cmVmOwogICAgIHVzaW5nIFRocmVhZFNhZmVS
ZWZDb3VudGVkOjpkZXJlZjsKIAogICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OwotCi0g
ICAgdmlydHVhbCBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBmbG9h
dCBzYW1wbGVSYXRlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgZG91YmxlIGN1cnJlbnRUaW1l
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0dyYXBoT3duZXIoKSBjb25zdCA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXVkaW9UaHJlYWQoVGhyZWFkJikgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBpc0F1ZGlvVGhyZWFkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBp
c0F1ZGlvVGhyZWFkRmluaXNoZWQoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaXNQbGF5aW5n
QXVkaW9EaWRDaGFuZ2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG5vZGVXaWxsQmVnaW5QbGF5
YmFjaygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFzayhXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4mJikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1N0b3BwZWQoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIG1hcmtG
b3JEZWxldGlvbihBdWRpb05vZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU1hcmtl
ZE5vZGVzKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZVByZVJlbmRlclRhc2tzKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVQb3N0UmVuZGVyVGFza3MoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHByb2Nlc3NBdXRvbWF0aWNQdWxsTm9kZXMoc2l6ZV90IGZyYW1lc1RvUHJv
Y2VzcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGREZWZlcnJlZEZpbmlzaERlcmVmKEF1ZGlv
Tm9kZSopID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVNYXJrZWRTdW1taW5nSnVuY3Rp
b24oQXVkaW9TdW1taW5nSnVuY3Rpb24qKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1hcmtTdW1t
aW5nSnVuY3Rpb25EaXJ0eShBdWRpb1N1bW1pbmdKdW5jdGlvbiopID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbWFya0F1ZGlvTm9kZU91dHB1dERpcnR5KEF1ZGlvTm9kZU91dHB1dCopID0gMDsKLQot
ICAgIGVudW0gQmVoYXZpb3JSZXN0cmljdGlvbkZsYWdzIHsKLSAgICAgICAgTm9SZXN0cmljdGlv
bnMgPSAwLAotICAgICAgICBSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rp
b24gPSAxIDw8IDAsCi0gICAgICAgIFJlcXVpcmVQYWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0
cmljdGlvbiA9IDEgPDwgMSwKLSAgICB9OwotICAgIHR5cGVkZWYgdW5zaWduZWQgQmVoYXZpb3JS
ZXN0cmljdGlvbnM7Ci0gICAgdmlydHVhbCBCZWhhdmlvclJlc3RyaWN0aW9ucyBiZWhhdmlvclJl
c3RyaWN0aW9ucygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQmVoYXZpb3JSZXN0
cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9ucykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zKSA9IDA7Ci0KLSNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIG5leHRBdWRpb05v
ZGVMb2dJZGVudGlmaWVyKCkgPSAwOwotICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogbmV4dEF1ZGlv
UGFyYW1ldGVyTG9nSWRlbnRpZmllcigpID0gMDsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lk
IGFkZEF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJikgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIG5vdGlmeU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcoQXVkaW9Ob2RlKikgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIGZpbmlzaGVkUmVuZGVyaW5nKGJvb2wgZGlkUmVuZGVyaW5nKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgaW5jcmVtZW50Q29ubmVjdGlvbkNvdW50KCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBpbmNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNPZmZsaW5lQ29udGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNCYXNl
QXVkaW9Db250ZXh0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1dlYktpdEF1ZGlv
Q29udGV4dCgpIGNvbnN0ID0gMDsKLQotICAgIC8vIG11c3RSZWxlYXNlTG9jayBpcyBzZXQgdG8g
dHJ1ZSBpZiB3ZSBhY3F1aXJlZCB0aGUgbG9jayBpbiB0aGlzIG1ldGhvZCBjYWxsIGFuZCBjYWxs
ZXIgbXVzdCB1bmxvY2soKSwgZmFsc2UgaWYgaXQgd2FzIHByZXZpb3VzbHkgYWNxdWlyZWQuCi0g
ICAgdmlydHVhbCB2b2lkIGxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIHRyeUxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHVubG9jaygpID0gMDsKLQotICAgIGNsYXNzIEF1dG9Mb2NrZXIgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgZXhwbGljaXQgQXV0b0xvY2tlcihBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0
KQotICAgICAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbV9jb250ZXh0LmxvY2sobV9tdXN0UmVsZWFzZUxvY2spOwotICAgICAgICB9Ci0KLSAgICAg
ICAgfkF1dG9Mb2NrZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9tdXN0UmVsZWFz
ZUxvY2spCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LnVubG9jaygpOwotICAgICAgICB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBBdWRpb0NvbnRleHRCYXNlJiBtX2NvbnRleHQ7Ci0gICAg
ICAgIGJvb2wgbV9tdXN0UmVsZWFzZUxvY2s7Ci0gICAgfTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0
Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0IGZpbmFsOwotICAgIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSB7IHJlZigpOyB9
Ci0gICAgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyBkZXJlZigpOyB9Ci0KLXBy
b3RlY3RlZDoKLSAgICBleHBsaWNpdCBBdWRpb0NvbnRleHRCYXNlKERvY3VtZW50Jik7Ci19Owot
Ci0vLyBBdWRpb0NvbnRleHQgaXMgdGhlIGNvcm5lcnN0b25lIG9mIHRoZSB3ZWIgYXVkaW8gQVBJ
IGFuZCBhbGwgQXVkaW9Ob2RlcyBhcmUgY3JlYXRlZCBmcm9tIGl0LgotLy8gRm9yIHRocmVhZCBz
YWZldHkgYmV0d2VlbiB0aGUgYXVkaW8gdGhyZWFkIGFuZCB0aGUgbWFpbiB0aHJlYWQsIGl0IGhh
cyBhIHJlbmRlcmluZyBncmFwaCBsb2NraW5nIG1lY2hhbmlzbS4gCi0KLWNsYXNzIEJhc2VBdWRp
b0NvbnRleHQKLSAgICA6IHB1YmxpYyBBdWRpb0NvbnRleHRCYXNlCi0gICAgLCBwcml2YXRlIFBs
YXRmb3JtTWVkaWFTZXNzaW9uQ2xpZW50Ci0gICAgLCBwcml2YXRlIFZpc2liaWxpdHlDaGFuZ2VD
bGllbnQKLXsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEJhc2VBdWRpb0NvbnRleHQpOwot
cHVibGljOgotICAgIHZpcnR1YWwgfkJhc2VBdWRpb0NvbnRleHQoKTsKLQotICAgIGJvb2wgaXNJ
bml0aWFsaXplZCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0
OwogICAgIAotICAgIGJvb2wgaXNPZmZsaW5lQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1faXNPZmZsaW5lQ29udGV4dDsgfQorICAgIGJvb2wgaXNPZmZsaW5lQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNPZmZsaW5lQ29udGV4dDsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1dlYktp
dEF1ZGlvQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBEb2N1bWVudElk
ZW50aWZpZXIgaG9zdGluZ0RvY3VtZW50SWRlbnRpZmllcigpIGNvbnN0IGZpbmFsOwogCiAgICAg
QXVkaW9EZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlv
bk5vZGUuZ2V0KCk7IH0KLSAgICBzaXplX3QgY3VycmVudFNhbXBsZUZyYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUgPyBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVu
dFNhbXBsZUZyYW1lKCkgOiAwOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUgPyBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVu
dFRpbWUoKSA6IDAuOyB9Ci0gICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fZGVzdGluYXRpb25Ob2RlID8gbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSA6
IDAuZjsgfQorICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSBjb25zdCB7IHJldHVybiBt
X2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50U2FtcGxlRnJhbWUo
KSA6IDA7IH0KKyAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50VGltZSgpIDogMC47IH0KKyAg
ICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUgPyBt
X2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpIDogMC5mOyB9CiAgICAgdW5zaWduZWQgbG9u
ZyBhY3RpdmVTb3VyY2VDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KG1fYWN0aXZlU291cmNlQ291bnQpOyB9CiAKLSAgICB2b2lkIGluY3JlbWVudEFjdGl2
ZVNvdXJjZUNvdW50KCkgZmluYWw7Ci0gICAgdm9pZCBkZWNyZW1lbnRBY3RpdmVTb3VyY2VDb3Vu
dCgpIGZpbmFsOworICAgIHZvaWQgaW5jcmVtZW50QWN0aXZlU291cmNlQ291bnQoKTsKKyAgICB2
b2lkIGRlY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCk7CiAgICAgCiAgICAgRXhjZXB0aW9uT3I8
UmVmPEF1ZGlvQnVmZmVyPj4gY3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMs
IHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSk7CiAgICAgRXhjZXB0aW9u
T3I8UmVmPEF1ZGlvQnVmZmVyPj4gY3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyJiwgYm9vbCBtaXhU
b01vbm8pOwpAQCAtMjU2LDMxICsxNTQsMzEgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPFJl
ZjxQZXJpb2RpY1dhdmU+PiBjcmVhdGVQZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5JiByZWFsLCBG
bG9hdDMyQXJyYXkmIGltYWdpbmFyeSk7CiAKICAgICAvLyBXaGVuIGEgc291cmNlIG5vZGUgaGFz
IG5vIG1vcmUgcHJvY2Vzc2luZyB0byBkbyAoaGFzIGZpbmlzaGVkIHBsYXlpbmcpLCB0aGVuIGl0
IHRlbGxzIHRoZSBjb250ZXh0IHRvIGRlcmVmZXJlbmNlIGl0LgotICAgIHZvaWQgbm90aWZ5Tm9k
ZUZpbmlzaGVkUHJvY2Vzc2luZyhBdWRpb05vZGUqKSBmaW5hbDsKKyAgICB2b2lkIG5vdGlmeU5v
ZGVGaW5pc2hlZFByb2Nlc3NpbmcoQXVkaW9Ob2RlKik7CiAKICAgICAvLyBDYWxsZWQgYXQgdGhl
IHN0YXJ0IG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCi0gICAgdm9pZCBoYW5kbGVQcmVSZW5kZXJU
YXNrcygpIGZpbmFsOworICAgIHZvaWQgaGFuZGxlUHJlUmVuZGVyVGFza3MoKTsKIAogICAgIC8v
IENhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCi0gICAgdm9pZCBoYW5k
bGVQb3N0UmVuZGVyVGFza3MoKSBmaW5hbDsKKyAgICB2b2lkIGhhbmRsZVBvc3RSZW5kZXJUYXNr
cygpOwogCiAgICAgLy8gQ2FsbGVkIHBlcmlvZGljYWxseSBhdCB0aGUgZW5kIG9mIGVhY2ggcmVu
ZGVyIHF1YW50dW0gdG8gZGVyZWZlcmVuY2UgZmluaXNoZWQgc291cmNlIG5vZGVzLgogICAgIHZv
aWQgZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVzKCk7CiAKICAgICAvLyBXZSBzY2hlZHVsZSBkZWxl
dGlvbiBvZiBhbGwgbWFya2VkIG5vZGVzIGF0IHRoZSBlbmQgb2YgZWFjaCByZWFsdGltZSByZW5k
ZXIgcXVhbnR1bS4KLSAgICB2b2lkIG1hcmtGb3JEZWxldGlvbihBdWRpb05vZGUmKSBmaW5hbDsK
LSAgICB2b2lkIGRlbGV0ZU1hcmtlZE5vZGVzKCkgZmluYWw7CisgICAgdm9pZCBtYXJrRm9yRGVs
ZXRpb24oQXVkaW9Ob2RlJik7CisgICAgdm9pZCBkZWxldGVNYXJrZWROb2RlcygpOwogCiAgICAg
Ly8gQXVkaW9Db250ZXh0IGNhbiBwdWxsIG5vZGUocykgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRl
ciBxdWFudHVtIGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVjdGVkIHRvIGFueSBkb3duc3Ry
ZWFtIG5vZGVzLgogICAgIC8vIFRoZXNlIHR3byBtZXRob2RzIGFyZSBjYWxsZWQgYnkgdGhlIG5v
ZGVzIHdobyB3YW50IHRvIGFkZC9yZW1vdmUgdGhlbXNlbHZlcyBpbnRvL2Zyb20gdGhlIGF1dG9t
YXRpYyBwdWxsIGxpc3RzLgotICAgIHZvaWQgYWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2Rl
JikgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmKSBm
aW5hbDsKKyAgICB2b2lkIGFkZEF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSYpOworICAgIHZv
aWQgcmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJik7CiAKICAgICAvLyBDYWxsZWQg
cmlnaHQgYmVmb3JlIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygpIHRvIGhhbmRsZSBub2RlcyB3aGlj
aCBuZWVkIHRvIGJlIHB1bGxlZCBldmVuIHdoZW4gdGhleSBhcmUgbm90IGNvbm5lY3RlZCB0byBh
bnl0aGluZy4KLSAgICB2b2lkIHByb2Nlc3NBdXRvbWF0aWNQdWxsTm9kZXMoc2l6ZV90IGZyYW1l
c1RvUHJvY2VzcykgZmluYWw7CisgICAgdm9pZCBwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNp
emVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogCiAgICAgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIG51bWJl
ciBvZiBjb25uZWN0aW9ucyBtYWRlLgotICAgIHZvaWQgaW5jcmVtZW50Q29ubmVjdGlvbkNvdW50
KCkgZmluYWwKKyAgICB2b2lkIGluY3JlbWVudENvbm5lY3Rpb25Db3VudCgpCiAgICAgewogICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgICAgICBtX2Nvbm5lY3Rpb25Db3VudCsr
OwpAQCAtMjkyLDcwICsxOTAsOTggQEAgcHVibGljOgogICAgIC8vIFRocmVhZCBTYWZldHkgYW5k
IEdyYXBoIExvY2tpbmc6CiAgICAgLy8KICAgICAKLSAgICB2b2lkIHNldEF1ZGlvVGhyZWFkKFRo
cmVhZCYgdGhyZWFkKSBmaW5hbCB7IG1fYXVkaW9UaHJlYWQgPSAmdGhyZWFkOyB9IC8vIEZJWE1F
OiBjaGVjayBlaXRoZXIgbm90IGluaXRpYWxpemVkIG9yIHRoZSBzYW1lCisgICAgdm9pZCBzZXRB
dWRpb1RocmVhZChUaHJlYWQmIHRocmVhZCkgeyBtX2F1ZGlvVGhyZWFkID0gJnRocmVhZDsgfSAv
LyBGSVhNRTogY2hlY2sgZWl0aGVyIG5vdCBpbml0aWFsaXplZCBvciB0aGUgc2FtZQogICAgIFRo
cmVhZCogYXVkaW9UaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX2F1ZGlvVGhyZWFkOyB9Ci0gICAg
Ym9vbCBpc0F1ZGlvVGhyZWFkKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc0F1ZGlvVGhyZWFk
KCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgb25seSBhZnRlciB0aGUgYXVkaW8gdGhy
ZWFkIGhhcyBiZWVuIHN0YXJ0ZWQgYW5kIHRoZW4gc2h1dGRvd24uCi0gICAgYm9vbCBpc0F1ZGlv
VGhyZWFkRmluaXNoZWQoKSBmaW5hbCB7IHJldHVybiBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZDsg
fQorICAgIGJvb2wgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkgeyByZXR1cm4gbV9pc0F1ZGlvVGhy
ZWFkRmluaXNoZWQ7IH0KICAgICAKICAgICAvLyBtdXN0UmVsZWFzZUxvY2sgaXMgc2V0IHRvIHRy
dWUgaWYgd2UgYWNxdWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRob2QgY2FsbCBhbmQgY2FsbGVy
IG11c3QgdW5sb2NrKCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjcXVpcmVkLgotICAg
IHZvaWQgbG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spIGZpbmFsOworICAgIHZvaWQgbG9jayhi
b29sJiBtdXN0UmVsZWFzZUxvY2spOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIG93biB0
aGUgbG9jay4KICAgICAvLyBtdXN0UmVsZWFzZUxvY2sgaXMgc2V0IHRvIHRydWUgaWYgd2UgYWNx
dWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRob2QgY2FsbCBhbmQgY2FsbGVyIG11c3QgdW5sb2Nr
KCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjcXVpcmVkLgotICAgIGJvb2wgdHJ5TG9j
ayhib29sJiBtdXN0UmVsZWFzZUxvY2spIGZpbmFsOworICAgIGJvb2wgdHJ5TG9jayhib29sJiBt
dXN0UmVsZWFzZUxvY2spOwogCi0gICAgdm9pZCB1bmxvY2soKSBmaW5hbDsKKyAgICB2b2lkIHVu
bG9jaygpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgdGhyZWFkIG93bnMgdGhlIGNv
bnRleHQncyBsb2NrLgotICAgIGJvb2wgaXNHcmFwaE93bmVyKCkgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBpc0dyYXBoT3duZXIoKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdGhlIG1heGltdW0g
bnVtYmVyIG9mIGNoYW5uZWxzIHdlIGNhbiBzdXBwb3J0LgogICAgIHN0YXRpYyB1bnNpZ25lZCBt
YXhOdW1iZXJPZkNoYW5uZWxzKCkgeyByZXR1cm4gTWF4TnVtYmVyT2ZDaGFubmVsczsgfQogICAg
IAogICAgIC8vIEluIEF1ZGlvTm9kZTo6ZGVyZWYoKSBhIHRyeUxvY2soKSBpcyB1c2VkIGZvciBj
YWxsaW5nIGZpbmlzaERlcmVmKCksIGJ1dCBpZiBpdCBmYWlscyBrZWVwIHRyYWNrIGhlcmUuCi0g
ICAgdm9pZCBhZGREZWZlcnJlZEZpbmlzaERlcmVmKEF1ZGlvTm9kZSopIGZpbmFsOworICAgIHZv
aWQgYWRkRGVmZXJyZWRGaW5pc2hEZXJlZihBdWRpb05vZGUqKTsKIAogICAgIC8vIEluIHRoZSBh
dWRpbyB0aHJlYWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggcmVuZGVyIGN5Y2xlLCB3ZSdsbCBjYWxs
IGhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCkuCiAgICAgdm9pZCBoYW5kbGVEZWZlcnJlZEZp
bmlzaERlcmVmcygpOwogCiAgICAgLy8gT25seSBhY2Nlc3NlZCB3aGVuIHRoZSBncmFwaCBsb2Nr
IGlzIGhlbGQuCi0gICAgdm9pZCBtYXJrU3VtbWluZ0p1bmN0aW9uRGlydHkoQXVkaW9TdW1taW5n
SnVuY3Rpb24qKSBmaW5hbDsKLSAgICB2b2lkIG1hcmtBdWRpb05vZGVPdXRwdXREaXJ0eShBdWRp
b05vZGVPdXRwdXQqKSBmaW5hbDsKKyAgICB2b2lkIG1hcmtTdW1taW5nSnVuY3Rpb25EaXJ0eShB
dWRpb1N1bW1pbmdKdW5jdGlvbiopOworICAgIHZvaWQgbWFya0F1ZGlvTm9kZU91dHB1dERpcnR5
KEF1ZGlvTm9kZU91dHB1dCopOwogCiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgb24gbWFpbiB0aHJl
YWQuCi0gICAgdm9pZCByZW1vdmVNYXJrZWRTdW1taW5nSnVuY3Rpb24oQXVkaW9TdW1taW5nSnVu
Y3Rpb24qKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZU1hcmtlZFN1bW1pbmdKdW5jdGlvbihBdWRp
b1N1bW1pbmdKdW5jdGlvbiopOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICBFdmVudFRhcmdl
dEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IGZpbmFsOworICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbDsK
KyAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQorICAgIHZvaWQg
ZGVyZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQogCiAgICAgdm9pZCBzdGFy
dFJlbmRlcmluZygpOwotICAgIHZvaWQgZmluaXNoZWRSZW5kZXJpbmcoYm9vbCBkaWRSZW5kZXJp
bmcpIGZpbmFsOworICAgIHZvaWQgZmluaXNoZWRSZW5kZXJpbmcoYm9vbCBkaWRSZW5kZXJpbmcp
OwogCiAgICAgc3RhdGljIHVuc2lnbmVkIHNfaGFyZHdhcmVDb250ZXh0Q291bnQ7CiAKICAgICAv
LyBSZXN0cmljdGlvbnMgdG8gY2hhbmdlIGRlZmF1bHQgYmVoYXZpb3JzLgotICAgIEJlaGF2aW9y
UmVzdHJpY3Rpb25zIGJlaGF2aW9yUmVzdHJpY3Rpb25zKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9yZXN0cmljdGlvbnM7IH0KLSAgICB2b2lkIGFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZp
b3JSZXN0cmljdGlvbnMgcmVzdHJpY3Rpb24pIGZpbmFsIHsgbV9yZXN0cmljdGlvbnMgfD0gcmVz
dHJpY3Rpb247IH0KLSAgICB2b2lkIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JS
ZXN0cmljdGlvbnMgcmVzdHJpY3Rpb24pIGZpbmFsIHsgbV9yZXN0cmljdGlvbnMgJj0gfnJlc3Ry
aWN0aW9uOyB9CisgICAgZW51bSBCZWhhdmlvclJlc3RyaWN0aW9uRmxhZ3MgeworICAgICAgICBO
b1Jlc3RyaWN0aW9ucyA9IDAsCisgICAgICAgIFJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3Rh
cnRSZXN0cmljdGlvbiA9IDEgPDwgMCwKKyAgICAgICAgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVk
aW9TdGFydFJlc3RyaWN0aW9uID0gMSA8PCAxLAorICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25l
ZCBCZWhhdmlvclJlc3RyaWN0aW9uczsKKyAgICBCZWhhdmlvclJlc3RyaWN0aW9ucyBiZWhhdmlv
clJlc3RyaWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3Rpb25zOyB9CisgICAgdm9p
ZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9u
KSB7IG1fcmVzdHJpY3Rpb25zIHw9IHJlc3RyaWN0aW9uOyB9CisgICAgdm9pZCByZW1vdmVCZWhh
dmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKSB7IG1fcmVz
dHJpY3Rpb25zICY9IH5yZXN0cmljdGlvbjsgfQogCi0gICAgdm9pZCBpc1BsYXlpbmdBdWRpb0Rp
ZENoYW5nZSgpIGZpbmFsOworICAgIHZvaWQgaXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKTsKIAot
ICAgIHZvaWQgbm9kZVdpbGxCZWdpblBsYXliYWNrKCkgZmluYWw7CisgICAgdm9pZCBub2RlV2ls
bEJlZ2luUGxheWJhY2soKTsKIAogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIGNvbnN0
IExvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0K
ICAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9s
b2dJZGVudGlmaWVyOyB9CiAgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZp
bmFsOwotICAgIGNvbnN0IHZvaWQqIG5leHRBdWRpb05vZGVMb2dJZGVudGlmaWVyKCkgZmluYWwg
eyByZXR1cm4gY2hpbGRMb2dJZGVudGlmaWVyKG1fbG9nSWRlbnRpZmllciwgKyttX25leHRBdWRp
b05vZGVJZGVudGlmaWVyKTsgfQotICAgIGNvbnN0IHZvaWQqIG5leHRBdWRpb1BhcmFtZXRlckxv
Z0lkZW50aWZpZXIoKSBmaW5hbCB7IHJldHVybiBjaGlsZExvZ0lkZW50aWZpZXIobV9sb2dJZGVu
dGlmaWVyLCArK21fbmV4dEF1ZGlvUGFyYW1ldGVySWRlbnRpZmllcik7IH0KKyAgICBjb25zdCB2
b2lkKiBuZXh0QXVkaW9Ob2RlTG9nSWRlbnRpZmllcigpIHsgcmV0dXJuIGNoaWxkTG9nSWRlbnRp
ZmllcihtX2xvZ0lkZW50aWZpZXIsICsrbV9uZXh0QXVkaW9Ob2RlSWRlbnRpZmllcik7IH0KKyAg
ICBjb25zdCB2b2lkKiBuZXh0QXVkaW9QYXJhbWV0ZXJMb2dJZGVudGlmaWVyKCkgeyByZXR1cm4g
Y2hpbGRMb2dJZGVudGlmaWVyKG1fbG9nSWRlbnRpZmllciwgKyttX25leHRBdWRpb1BhcmFtZXRl
cklkZW50aWZpZXIpOyB9CiAjZW5kaWYKIAotICAgIHZvaWQgcG9zdFRhc2soV1RGOjpGdW5jdGlv
bjx2b2lkKCk+JiYpIGZpbmFsOwotICAgIGJvb2wgaXNTdG9wcGVkKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9pc1N0b3BTY2hlZHVsZWQ7IH0KLSAgICBjb25zdCBTZWN1cml0eU9yaWdpbiogb3Jp
Z2luKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9p
ZCBwb3N0VGFzayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7CisgICAgYm9vbCBpc1N0b3BwZWQo
KSBjb25zdCB7IHJldHVybiBtX2lzU3RvcFNjaGVkdWxlZDsgfQorICAgIGNvbnN0IFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4oKSBjb25zdDsKKyAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworICAgIGNs
YXNzIEF1dG9Mb2NrZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgQXV0b0xvY2tl
cihCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0KQorICAgICAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9jb250ZXh0LmxvY2sobV9tdXN0UmVsZWFz
ZUxvY2spOworICAgICAgICB9CisKKyAgICAgICAgfkF1dG9Mb2NrZXIoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobV9tdXN0UmVsZWFzZUxvY2spCisgICAgICAgICAgICAgICAgbV9jb250
ZXh0LnVubG9jaygpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBCYXNlQXVk
aW9Db250ZXh0JiBtX2NvbnRleHQ7CisgICAgICAgIGJvb2wgbV9tdXN0UmVsZWFzZUxvY2s7Cisg
ICAgfTsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEJhc2VBdWRpb0NvbnRleHQoRG9jdW1l
bnQmKTsKQEAgLTQzMCw5ICszNTYsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB2aXNpYmlsaXR5
U3RhdGVDaGFuZ2VkKCkgZmluYWw7CiAKLSAgICBib29sIGlzQmFzZUF1ZGlvQ29udGV4dCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGlzV2ViS2l0QXVkaW9Db250ZXh0
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLQogICAgIHZvaWQgaGFuZGxlRGlydHlB
dWRpb1N1bW1pbmdKdW5jdGlvbnMoKTsKICAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0
cHV0cygpOwogCkBAIC01MTMsNyArNDM2LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gV2ViQ29y
ZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRl
eHQpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkF1ZGlvQ29udGV4dEJh
c2UmIGNvbnRleHQpIHsgcmV0dXJuIGNvbnRleHQuaXNCYXNlQXVkaW9Db250ZXh0KCk7IH0KLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwCmluZGV4IGRkZTA3NzNkNDczZDI3MjJh
NWI1M2RjODY5MDZkMzkzNzBjYmZmNDIuLmJmNTQ4OGQ1OWEzMjhmOTBmNzNlMDk5YjZmZTk5NjA0
OTFkOTcxYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlx
dWFkRmlsdGVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9C
aXF1YWRGaWx0ZXJOb2RlLmNwcApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChCaXF1YWRGaWx0ZXJOb2RlKTsKIAotQmlx
dWFkRmlsdGVyTm9kZTo6QmlxdWFkRmlsdGVyTm9kZShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0
LCBmbG9hdCBzYW1wbGVSYXRlKQorQmlxdWFkRmlsdGVyTm9kZTo6QmlxdWFkRmlsdGVyTm9kZShC
YXNlQXVkaW9Db250ZXh0JiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9C
YXNpY1Byb2Nlc3Nvck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkKIHsKICAgICBzZXROb2RlVHlw
ZShOb2RlVHlwZUJpcXVhZEZpbHRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oCmluZGV4IGFjOGQ5NDdhMTBmN2FlNmEzM2YwM2Ey
ZDA5ODQwYzhlNmMxZTU0Y2IuLjhkNzg5YTM2MjRkZDg4MjQwZmExNGQxOGViYTdlZjA5OTRhOWYx
ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmls
dGVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmls
dGVyTm9kZS5oCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIEF1ZGlvUGFyYW07CiBjbGFzcyBCaXF1
YWRGaWx0ZXJOb2RlIGZpbmFsIDogcHVibGljIEF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlIHsKICAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEJpcXVhZEZpbHRlck5vZGUpOwogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8QmlxdWFkRmlsdGVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dEJhc2UmIGNv
bnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgc3RhdGljIFJlZjxCaXF1YWRGaWx0ZXJOb2Rl
PiBjcmVhdGUoQmFzZUF1ZGlvQ29udGV4dCYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJpcXVhZEZpbHRlck5vZGUoY29udGV4
dCwgc2FtcGxlUmF0ZSkpOwogICAgIH0KQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZv
aWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoY29uc3QgUmVmUHRyPEZsb2F0MzJBcnJheT4mIGZyZXF1
ZW5jeUh6LCBjb25zdCBSZWZQdHI8RmxvYXQzMkFycmF5PiYgbWFnUmVzcG9uc2UsIGNvbnN0IFJl
ZlB0cjxGbG9hdDMyQXJyYXk+JiBwaGFzZVJlc3BvbnNlKTsKIAogcHJpdmF0ZToKLSAgICBCaXF1
YWRGaWx0ZXJOb2RlKEF1ZGlvQ29udGV4dEJhc2UmLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICBC
aXF1YWRGaWx0ZXJOb2RlKEJhc2VBdWRpb0NvbnRleHQmLCBmbG9hdCBzYW1wbGVSYXRlKTsKIAog
ICAgIEJpcXVhZFByb2Nlc3NvciogYmlxdWFkUHJvY2Vzc29yKCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8QmlxdWFkUHJvY2Vzc29yKj4ocHJvY2Vzc29yKCkpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCmluZGV4IDJmNjA2
N2E3MmRjZWMzM2MzZjBkMGRlOWQ5N2U0YjY5NzY5NjI2YTguLmQ5Y2ViYThhMTk4ZmY0OTM0MDg1
OTEzYTU2MTBhYmUyNDBhNDg1NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIAotQmlxdWFkUHJvY2Vzc29yOjpCaXF1YWRQcm9jZXNzb3IoQXVk
aW9Db250ZXh0QmFzZSYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSwgc2l6ZV90IG51bWJlck9m
Q2hhbm5lbHMsIGJvb2wgYXV0b0luaXRpYWxpemUpCitCaXF1YWRQcm9jZXNzb3I6OkJpcXVhZFBy
b2Nlc3NvcihCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCBzaXpl
X3QgbnVtYmVyT2ZDaGFubmVscywgYm9vbCBhdXRvSW5pdGlhbGl6ZSkKICAgICA6IEF1ZGlvRFNQ
S2VybmVsUHJvY2Vzc29yKHNhbXBsZVJhdGUsIG51bWJlck9mQ2hhbm5lbHMpCiAgICAgLCBtX3R5
cGUoQmlxdWFkRmlsdGVyVHlwZTo6TG93cGFzcykKICAgICAsIG1fcGFyYW1ldGVyMSgwKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgKaW5k
ZXggZGMzMDZhYjUxN2IzMjRiYjFjYzU2YTI4OGQwZTQ5ZjFhOGU0ZTkwNi4uY2IxNTI4ODRiZDg0
MjVlOTkyYTFkNGM4YWM5ZDYyYWNjMzU0Y2ZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oCkBAIC01MCw3ICs1MCw3IEBAIGVudW0g
Y2xhc3MgQmlxdWFkRmlsdGVyVHlwZSB7CiBjbGFzcyBCaXF1YWRQcm9jZXNzb3IgZmluYWwgOiBw
dWJsaWMgQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIEJpcXVhZFByb2Nlc3NvcihBdWRpb0NvbnRleHRCYXNlJiwgZmxv
YXQgc2FtcGxlUmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgYXV0b0luaXRpYWxp
emUpOworICAgIEJpcXVhZFByb2Nlc3NvcihCYXNlQXVkaW9Db250ZXh0JiwgZmxvYXQgc2FtcGxl
UmF0ZSwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGJvb2wgYXV0b0luaXRpYWxpemUpOwogCiAg
ICAgdmlydHVhbCB+QmlxdWFkUHJvY2Vzc29yKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NoYW5uZWxNZXJnZXJOb2RlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ2hhbm5lbE1lcmdlck5vZGUuY3BwCmluZGV4IGRlMjhh
ZWE3ZDJjNDM0Mjg5NmIxMDRiYTg5NDFmZGViNzk4YWRjM2YuLjU3Nzk0MTVlYjAyM2EzMWYzMjE1
YmVhZjk1OWQyNmJmMGU1YTgyMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQ2hhbm5lbE1lcmdlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQ2hhbm5lbE1lcmdlck5vZGUuY3BwCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKENoYW5uZWxNZXJn
ZXJOb2RlKTsKIAotUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBDaGFubmVsTWVyZ2VyTm9kZTo6
Y3JlYXRlKEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUsIHVuc2ln
bmVkIG51bWJlck9mSW5wdXRzKQorUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBDaGFubmVsTWVy
Z2VyTm9kZTo6Y3JlYXRlKEJhc2VBdWRpb0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJh
dGUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRzKQogewogICAgIGlmICghbnVtYmVyT2ZJbnB1dHMg
fHwgbnVtYmVyT2ZJbnB1dHMgPiBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01MSw3ICs1MSw3IEBAIFJlZlB0cjxDaGFubmVs
TWVyZ2VyTm9kZT4gQ2hhbm5lbE1lcmdlck5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHRCYXNlJiBj
b250ZXh0LCBmCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2hhbm5lbE1lcmdlck5vZGUoY29u
dGV4dCwgc2FtcGxlUmF0ZSwgbnVtYmVyT2ZJbnB1dHMpKTsgICAgICAKIH0KIAotQ2hhbm5lbE1l
cmdlck5vZGU6OkNoYW5uZWxNZXJnZXJOb2RlKEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQsIGZs
b2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRzKQorQ2hhbm5lbE1lcmdlck5v
ZGU6OkNoYW5uZWxNZXJnZXJOb2RlKEJhc2VBdWRpb0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNh
bXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRzKQogICAgIDogQXVkaW9Ob2RlKGNvbnRl
eHQsIHNhbXBsZVJhdGUpCiAgICAgLCBtX2Rlc2lyZWROdW1iZXJPZk91dHB1dENoYW5uZWxzKERl
ZmF1bHROdW1iZXJPZk91dHB1dENoYW5uZWxzKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsTWVyZ2VyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9DaGFubmVsTWVyZ2VyTm9kZS5oCmluZGV4IDYyOTc2ZTA1MDczNDFm
ZjkyNjYwYTZhZjBkYjU4YWViYTU1NzY4MWEuLjVhZmMzMjk3YTgyM2U4NmUwOWY1ZTY0OGQ0OTNi
ZmQ3ZjRmYzkzYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
Q2hhbm5lbE1lcmdlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0NoYW5uZWxNZXJnZXJOb2RlLmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgQXVkaW9Db250ZXh0
OwogY2xhc3MgQ2hhbm5lbE1lcmdlck5vZGUgZmluYWwgOiBwdWJsaWMgQXVkaW9Ob2RlIHsKICAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKENoYW5uZWxNZXJnZXJOb2RlKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0QmFz
ZSYsIGZsb2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRzKTsKKyAgICBzdGF0
aWMgUmVmUHRyPENoYW5uZWxNZXJnZXJOb2RlPiBjcmVhdGUoQmFzZUF1ZGlvQ29udGV4dCYsIGZs
b2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRzKTsKIAogICAgIC8vIEF1ZGlv
Tm9kZQogICAgIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSBvdmVycmlkZTsK
QEAgLTUyLDcgKzUyLDcgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAwOyB9CiAgICAgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gMDsgfQogCi0gICAgQ2hhbm5lbE1lcmdlck5vZGUoQXVkaW9Db250ZXh0
QmFzZSYsIGZsb2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRzKTsKKyAgICBD
aGFubmVsTWVyZ2VyTm9kZShCYXNlQXVkaW9Db250ZXh0JiwgZmxvYXQgc2FtcGxlUmF0ZSwgdW5z
aWduZWQgbnVtYmVyT2ZJbnB1dHMpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsU3BsaXR0ZXJO
b2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ2hhbm5lbFNwbGl0dGVy
Tm9kZS5jcHAKaW5kZXggZjU1NTNkMGM4MzVhMzkyZDNjZWVkZTkyZWU1ZjhiOGM5MjhmOWRiMC4u
Mzc5ZjFmZjRmZGEzYzM2NTg0OTZkZTc0Y2JiYmJjNTc4YWJkZmY5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsU3BsaXR0ZXJOb2RlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NoYW5uZWxTcGxpdHRlck5vZGUuY3Bw
CkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKENoYW5uZWxTcGxpdHRlck5vZGUpOwogICAgIAotUmVmUHRyPENoYW5uZWxT
cGxpdHRlck5vZGU+IENoYW5uZWxTcGxpdHRlck5vZGU6OmNyZWF0ZShBdWRpb0NvbnRleHRCYXNl
JiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dHMpCitS
ZWZQdHI8Q2hhbm5lbFNwbGl0dGVyTm9kZT4gQ2hhbm5lbFNwbGl0dGVyTm9kZTo6Y3JlYXRlKEJh
c2VBdWRpb0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJl
ck9mT3V0cHV0cykKIHsKICAgICBpZiAoIW51bWJlck9mT3V0cHV0cyB8fCBudW1iZXJPZk91dHB1
dHMgPiBBdWRpb0NvbnRleHQ6Om1heE51bWJlck9mQ2hhbm5lbHMoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC00NSw3ICs0NSw3IEBAIFJlZlB0cjxDaGFubmVsU3BsaXR0ZXJOb2RlPiBD
aGFubmVsU3BsaXR0ZXJOb2RlOjpjcmVhdGUoQXVkaW9Db250ZXh0QmFzZSYgY29udGV4CiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2hhbm5lbFNwbGl0dGVyTm9kZShjb250ZXh0LCBzYW1wbGVS
YXRlLCBudW1iZXJPZk91dHB1dHMpKTsgICAgICAKIH0KIAotQ2hhbm5lbFNwbGl0dGVyTm9kZTo6
Q2hhbm5lbFNwbGl0dGVyTm9kZShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0LCBmbG9hdCBzYW1w
bGVSYXRlLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dHMpCitDaGFubmVsU3BsaXR0ZXJOb2RlOjpD
aGFubmVsU3BsaXR0ZXJOb2RlKEJhc2VBdWRpb0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNhbXBs
ZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0cykKICAgICA6IEF1ZGlvTm9kZShjb250ZXh0
LCBzYW1wbGVSYXRlKQogewogICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlQ2hhbm5lbFNwbGl0dGVy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ2hhbm5lbFNw
bGl0dGVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsU3Bs
aXR0ZXJOb2RlLmgKaW5kZXggMTNkOGQ5ODBkYWE3NzMzMDRmMTY5MDVlOTU0OGE0MjBhZTNlZTQ1
YS4uNDQyODQ0ZGIyYTMxZmNkZjBjZDE1ZDM5N2IxOWNjZjcwZmFmMDgzNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsU3BsaXR0ZXJOb2RlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsU3BsaXR0ZXJOb2RlLmgK
QEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgQXVkaW9Db250ZXh0OwogY2xhc3MgQ2hhbm5lbFNwbGl0
dGVyTm9kZSBmaW5hbCA6IHB1YmxpYyBBdWRpb05vZGUgewogICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoQ2hhbm5lbFNwbGl0dGVyTm9kZSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxD
aGFubmVsU3BsaXR0ZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0QmFzZSYsIGZsb2F0IHNhbXBs
ZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0cyk7CisgICAgc3RhdGljIFJlZlB0cjxDaGFu
bmVsU3BsaXR0ZXJOb2RlPiBjcmVhdGUoQmFzZUF1ZGlvQ29udGV4dCYsIGZsb2F0IHNhbXBsZVJh
dGUsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0cyk7CiAKICAgICAvLyBBdWRpb05vZGUKICAgICB2
b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcykgb3ZlcnJpZGU7CkBAIC00Myw3ICs0
Myw3IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIHRhaWxUaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gMDsgfQogICAgIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIDA7IH0KIAotICAgIENoYW5uZWxTcGxpdHRlck5vZGUoQXVkaW9Db250ZXh0QmFzZSYsIGZs
b2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0cyk7CisgICAgQ2hhbm5lbFNw
bGl0dGVyTm9kZShCYXNlQXVkaW9Db250ZXh0JiwgZmxvYXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQg
bnVtYmVyT2ZPdXRwdXRzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCmluZGV4IGUx
ZjVlYjgxNTYwZWMyZTkyYjgzNTgzNmM4NGIxODE5NDMzYWZhNGYuLjdlMTM4ZDRkMzEzNmI3MTk3
ZDNiN2ViYmZhMDAyMWM4NGY3MzJiOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9Db252b2x2ZXJOb2RlLmNwcApAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChDb252b2x2ZXJOb2RlKTsK
IAotQ29udm9sdmVyTm9kZTo6Q29udm9sdmVyTm9kZShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0
LCBmbG9hdCBzYW1wbGVSYXRlKQorQ29udm9sdmVyTm9kZTo6Q29udm9sdmVyTm9kZShCYXNlQXVk
aW9Db250ZXh0JiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9Ob2RlKGNv
bnRleHQsIHNhbXBsZVJhdGUpCiB7CiAgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVDb252b2x2ZXIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Db252b2x2ZXJO
b2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaApp
bmRleCAzMWNlYzFlY2M3ZjBlMDA0NWVmYTc0ZmJlZjM2MDY4ZGRiYjFmZGZjLi5mYTg3ZDJmM2E0
YzVlMDg3ZmY0MGNiMGQ5NDFkMzYxYWQzYjk3YzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaApAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBS
ZXZlcmI7CiBjbGFzcyBDb252b2x2ZXJOb2RlIGZpbmFsIDogcHVibGljIEF1ZGlvTm9kZSB7CiAg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChDb252b2x2ZXJOb2RlKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPENvbnZvbHZlck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0
LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIHN0YXRpYyBSZWY8Q29udm9sdmVyTm9kZT4gY3JlYXRl
KEJhc2VBdWRpb0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgewogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb252b2x2ZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJh
dGUpKTsKICAgICB9CkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5vcm1h
bGl6ZShib29sIG5vcm1hbGl6ZSkgeyBtX25vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsgfQogCiBwcml2
YXRlOgotICAgIENvbnZvbHZlck5vZGUoQXVkaW9Db250ZXh0QmFzZSYsIGZsb2F0IHNhbXBsZVJh
dGUpOworICAgIENvbnZvbHZlck5vZGUoQmFzZUF1ZGlvQ29udGV4dCYsIGZsb2F0IHNhbXBsZVJh
dGUpOwogCiAgICAgZG91YmxlIHRhaWxUaW1lKCkgY29uc3QgZmluYWw7CiAgICAgZG91YmxlIGxh
dGVuY3lUaW1lKCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKaW5k
ZXggMDdlYjlhNDFiNWNjOGU4MzkwOWFlNGI2ZTYzNGUzY2E5YmY1MzdlYS4uNGRkOTljMTkyYjZh
MzM1YTYwMWZmZDUxNTUxYjAxYjBkOTZjYjYwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcApAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUpOwogICAgIAotRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVk
aW9Db250ZXh0QmFzZSYgY29udGV4dCkKK0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6RGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKEJhc2VBdWRpb0NvbnRleHQmIGNvbnRleHQpCiAgICAg
OiBBdWRpb0Rlc3RpbmF0aW9uTm9kZShjb250ZXh0LCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2Fy
ZVNhbXBsZVJhdGUoKSkKIHsKICAgICAvLyBOb2RlLXNwZWNpZmljIGRlZmF1bHQgbWl4aW5nIHJ1
bGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0
QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgKaW5kZXggOTZjODM3Yzk5MzRlYjAzYmYwNGI0
ZGUzOWJjNDJlZmZkZmRlZThlMS4uMzI1Mzk3MTNmMmYwMTczMmVmNjZmMjMwYmM2ZTA3NDlmYWM4
YjljZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0
QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCkBAIC0zMyw3ICszMyw3IEBAIGNsYXNz
IEF1ZGlvRGVzdGluYXRpb247CiBjbGFzcyBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUgZmlu
YWwgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbk5vZGUgewogICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dEJhc2Um
IGNvbnRleHQpCisgICAgc3RhdGljIFJlZjxEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU+IGNy
ZWF0ZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQpKTsgICAgIAog
ICAgIH0KQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkRlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZSgpOwogICAgIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBEZWZhdWx0
QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0QmFzZSYpOworICAgIGV4cGxpY2l0IERl
ZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZShCYXNlQXVkaW9Db250ZXh0Jik7CiAgICAgdm9pZCBj
cmVhdGVEZXN0aW5hdGlvbigpOwogCiAgICAgdm9pZCBpbml0aWFsaXplKCkgZmluYWw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5jcHAKaW5kZXggNDA1Mjdj
ODFmOWY1YmM1NmJjZjRlNzBjNTE2Y2JjMTllNWJlMWU4YS4uM2YyOWFiM2Y3ZGQyNjZhYmUxN2Y4
OTEzNmI4MDA0NDE3YmFlNWYwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9EZWxheU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vRGVsYXlOb2RlLmNwcApAQCAtMzcsMTQgKzM3LDE0IEBAIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChEZWxheU5vZGUpOwogCiBjb25zdCBkb3VibGUgbWF4aW11bUFsbG93ZWREZWxheVRp
bWUgPSAxODA7CiAKLWlubGluZSBEZWxheU5vZGU6OkRlbGF5Tm9kZShBdWRpb0NvbnRleHRCYXNl
JiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCBkb3VibGUgbWF4RGVsYXlUaW1lKQoraW5saW5l
IERlbGF5Tm9kZTo6RGVsYXlOb2RlKEJhc2VBdWRpb0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNh
bXBsZVJhdGUsIGRvdWJsZSBtYXhEZWxheVRpbWUpCiAgICAgOiBBdWRpb0Jhc2ljUHJvY2Vzc29y
Tm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQogewogICAgIHNldE5vZGVUeXBlKE5vZGVUeXBlRGVs
YXkpOwogICAgIG1fcHJvY2Vzc29yID0gbWFrZVVuaXF1ZTxEZWxheVByb2Nlc3Nvcj4oY29udGV4
dCwgc2FtcGxlUmF0ZSwgMSwgbWF4RGVsYXlUaW1lKTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPERl
bGF5Tm9kZT4+IERlbGF5Tm9kZTo6Y3JlYXRlKEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQsIGZs
b2F0IHNhbXBsZVJhdGUsIGRvdWJsZSBtYXhEZWxheVRpbWUpCitFeGNlcHRpb25PcjxSZWY8RGVs
YXlOb2RlPj4gRGVsYXlOb2RlOjpjcmVhdGUoQmFzZUF1ZGlvQ29udGV4dCYgY29udGV4dCwgZmxv
YXQgc2FtcGxlUmF0ZSwgZG91YmxlIG1heERlbGF5VGltZSkKIHsKICAgICBpZiAobWF4RGVsYXlU
aW1lIDw9IDAgfHwgbWF4RGVsYXlUaW1lID49IG1heGltdW1BbGxvd2VkRGVsYXlUaW1lKQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlOb2RlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5Tm9kZS5oCmluZGV4IGI2YWZkZDBmOTMwNzE4YjQy
MzIzMWYyZjZjZjkwMDU5OTE5OTcwMWIuLmZiNDY5MTc1M2Q1MWViMDJhYTMxOTZkNWJjYzJmYTcw
ODVkZTRkOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVs
YXlOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWxheU5vZGUu
aApAQCAtMzEsMTIgKzMxLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERlbGF5Tm9k
ZSBmaW5hbCA6IHB1YmxpYyBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZSB7CiAgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChEZWxheU5vZGUpOwogcHVibGljOgotICAgIHN0YXRpYyBFeGNlcHRpb25P
cjxSZWY8RGVsYXlOb2RlPj4gY3JlYXRlKEF1ZGlvQ29udGV4dEJhc2UmLCBmbG9hdCBzYW1wbGVS
YXRlLCBkb3VibGUgbWF4RGVsYXlUaW1lKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPERl
bGF5Tm9kZT4+IGNyZWF0ZShCYXNlQXVkaW9Db250ZXh0JiwgZmxvYXQgc2FtcGxlUmF0ZSwgZG91
YmxlIG1heERlbGF5VGltZSk7CiAKICAgICBBdWRpb1BhcmFtKiBkZWxheVRpbWUoKTsKIAogcHJp
dmF0ZToKLSAgICBEZWxheU5vZGUoQXVkaW9Db250ZXh0QmFzZSYsIGZsb2F0IHNhbXBsZVJhdGUs
IGRvdWJsZSBtYXhEZWxheVRpbWUpOworICAgIERlbGF5Tm9kZShCYXNlQXVkaW9Db250ZXh0Jiwg
ZmxvYXQgc2FtcGxlUmF0ZSwgZG91YmxlIG1heERlbGF5VGltZSk7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0RlbGF5UHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVs
YXlQcm9jZXNzb3IuY3BwCmluZGV4IGNiYmZkOWZhMmZhYTRjZjdlYWUwMWIzMjZjNDZkY2Y1ODdi
ZmUzYzUuLmVmNzQ1ZDhkOGUyOWQ1YTAyNzE0YzBiZjgyYTkwZWNjZTY1ZmQ4MTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuY3BwCkBA
IC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGVsYXlQcm9jZXNzb3I6
OkRlbGF5UHJvY2Vzc29yKEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJh
dGUsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIGRvdWJsZSBtYXhEZWxheVRpbWUpCitEZWxh
eVByb2Nlc3Nvcjo6RGVsYXlQcm9jZXNzb3IoQmFzZUF1ZGlvQ29udGV4dCYgY29udGV4dCwgZmxv
YXQgc2FtcGxlUmF0ZSwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgZG91YmxlIG1heERlbGF5
VGltZSkKICAgICA6IEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yKHNhbXBsZVJhdGUsIG51bWJlck9m
Q2hhbm5lbHMpCiAgICAgLCBtX21heERlbGF5VGltZShtYXhEZWxheVRpbWUpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmgKaW5kZXggY2Jh
Yzc5ZWNmMGZlMzM5Y2YxMmY5M2Q0ZGIyNWFmMDUxNTJmY2VmZC4uMGU3MjNlZWYwN2FkOTA0OWVl
NGQ0NmZmNWM0N2MxYzRiYjc3ZGM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9EZWxheVByb2Nlc3Nvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vRGVsYXlQcm9jZXNzb3IuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBBdWRpb0RT
UEtlcm5lbDsKIGNsYXNzIERlbGF5UHJvY2Vzc29yIGZpbmFsIDogcHVibGljIEF1ZGlvRFNQS2Vy
bmVsUHJvY2Vzc29yIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBEZWxheVByb2Nlc3NvcihBdWRpb0NvbnRleHRCYXNlJiwgZmxvYXQgc2FtcGxlUmF0ZSwgdW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscywgZG91YmxlIG1heERlbGF5VGltZSk7CisgICAgRGVsYXlQ
cm9jZXNzb3IoQmFzZUF1ZGlvQ29udGV4dCYsIGZsb2F0IHNhbXBsZVJhdGUsIHVuc2lnbmVkIG51
bWJlck9mQ2hhbm5lbHMsIGRvdWJsZSBtYXhEZWxheVRpbWUpOwogICAgIHZpcnR1YWwgfkRlbGF5
UHJvY2Vzc29yKCk7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRFNQS2VybmVsPiBj
cmVhdGVLZXJuZWwoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwCmluZGV4IGMzM2QxZGU3
MmRjOTFmZThkNzRlNzU0N2EyMzU5OWNhMDFmYzQ4NWIuLmZkYTdhY2ZiMGI3MTAxM2E1ODhlMjY5
NTE3MDBlZDU3YjQyYTExYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcApAQCAtNDEsNyArNDEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChEeW5h
bWljc0NvbXByZXNzb3JOb2RlKTsKIAotRHluYW1pY3NDb21wcmVzc29yTm9kZTo6RHluYW1pY3ND
b21wcmVzc29yTm9kZShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRl
KQorRHluYW1pY3NDb21wcmVzc29yTm9kZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZShCYXNlQXVk
aW9Db250ZXh0JiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9Ob2RlKGNv
bnRleHQsIHNhbXBsZVJhdGUpCiB7CiAgICAgc2V0Tm9kZVR5cGUoTm9kZVR5cGVEeW5hbWljc0Nv
bXByZXNzb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9E
eW5hbWljc0NvbXByZXNzb3JOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaAppbmRleCBiNzA1M2IyMjE3M2MwMmNhMGQyNmVjZTYx
YTE4Yzc3ZWUwNzUyZGZlLi5jNmQ3NTU2NjljYjFmZTIxMmU5MGZhZjBlYWY3ZTNiNDAyYjMxZGIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0R5bmFtaWNzQ29t
cHJlc3Nvck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0R5bmFt
aWNzQ29tcHJlc3Nvck5vZGUuaApAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBEeW5hbWljc0NvbXBy
ZXNzb3I7CiBjbGFzcyBEeW5hbWljc0NvbXByZXNzb3JOb2RlIGZpbmFsIDogcHVibGljIEF1ZGlv
Tm9kZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChEeW5hbWljc0NvbXByZXNzb3JOb2Rl
KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+IGNyZWF0
ZShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIHN0YXRp
YyBSZWY8RHluYW1pY3NDb21wcmVzc29yTm9kZT4gY3JlYXRlKEJhc2VBdWRpb0NvbnRleHQmIGNv
bnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEeW5hbWljc0NvbXByZXNzb3JOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKICAgICB9
CkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIHRhaWxUaW1lKCkgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICBEeW5hbWljc0NvbXByZXNzb3JOb2RlKEF1ZGlvQ29udGV4dEJhc2UmLCBmbG9hdCBzYW1wbGVS
YXRlKTsKKyAgICBEeW5hbWljc0NvbXByZXNzb3JOb2RlKEJhc2VBdWRpb0NvbnRleHQmLCBmbG9h
dCBzYW1wbGVSYXRlKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEeW5hbWljc0NvbXByZXNzb3I+
IG1fZHluYW1pY3NDb21wcmVzc29yOwogICAgIFJlZlB0cjxBdWRpb1BhcmFtPiBtX3RocmVzaG9s
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vR2Fpbk5vZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9HYWluTm9kZS5jcHAKaW5kZXgg
OTg0ZDExOTRiZGQ1NTJmMzg0YjBkNmQ5YmNlYmY3ZGE0MmZkODY5Yy4uNTU3ZTcwMWQ3OWNlYWMw
ZDQ5MzAzOTc0NTVlMzk4MmUyN2JjYjc2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9HYWluTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9HYWluTm9kZS5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoR2Fpbk5vZGUpOwogCi1HYWluTm9kZTo6
R2Fpbk5vZGUoQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKK0dh
aW5Ob2RlOjpHYWluTm9kZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0LCBmbG9hdCBzYW1wbGVS
YXRlKQogICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpCiAgICAgLCBtX2xhc3RH
YWluKDEuMCkKICAgICAsIG1fc2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzKEF1ZGlvTm9kZTo6UHJv
Y2Vzc2luZ1NpemVJbkZyYW1lcykgLy8gRklYTUU6IGNhbiBwcm9iYWJseSBzaGFyZSB0ZW1wIGJ1
ZmZlciBpbiBjb250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0dhaW5Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0dhaW5Ob2Rl
LmgKaW5kZXggZGNmODU1YTkxYzk1N2E5MDAwYmFmOGI5OTQzNmFlNzczNzlmYmI1MC4uNDgzNzFi
NzRmNWMwZDBmYWZmMGIyZWEyNDEwOGM1NzNjNzdhMTg2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9HYWluTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vR2Fpbk5vZGUuaApAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBBdWRpb0Nv
bnRleHQ7CiBjbGFzcyBHYWluTm9kZSBmaW5hbCA6IHB1YmxpYyBBdWRpb05vZGUgewogICAgIFdU
Rl9NQUtFX0lTT19BTExPQ0FURUQoR2Fpbk5vZGUpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
R2Fpbk5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0LCBmbG9hdCBzYW1wbGVS
YXRlKQorICAgIHN0YXRpYyBSZWY8R2Fpbk5vZGU+IGNyZWF0ZShCYXNlQXVkaW9Db250ZXh0JiBj
b250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgR2Fpbk5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwogICAgIH0KQEAgLTU3LDcgKzU3
LDcgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAwOyB9CiAgICAgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gMDsgfQogCi0gICAgR2Fpbk5vZGUoQXVkaW9Db250ZXh0QmFzZSYsIGZsb2F0IHNhbXBsZVJh
dGUpOworICAgIEdhaW5Ob2RlKEJhc2VBdWRpb0NvbnRleHQmLCBmbG9hdCBzYW1wbGVSYXRlKTsK
IAogICAgIGZsb2F0IG1fbGFzdEdhaW47IC8vIGZvciBkZS16aXBwZXJpbmcKICAgICBSZWZQdHI8
QXVkaW9QYXJhbT4gbV9nYWluOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCmluZGV4IGM2
NzVkN2RlNzE2ODM5MmU4N2RmOWY0M2RmYTY1OTk3YjU0ZmY4ZjQuLmIxNzMyNTk4OWJkNzg2MmE4
ZmJiZjQyMDQ4MzQ0M2IyNDZhNTYzOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAK
QEAgLTQzLDEyICs0MywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUpOwogCi1SZWY8TWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmNyZWF0
ZShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0LCBIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1l
bnQpCitSZWY8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGU6OmNyZWF0ZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0LCBIVE1MTWVkaWFFbGVt
ZW50JiBtZWRpYUVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlKGNvbnRleHQsIG1lZGlhRWxlbWVudCkpOwogfQogCi1NZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZShBdWRpb0Nv
bnRleHRCYXNlJiBjb250ZXh0LCBIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCitNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZShCYXNl
QXVkaW9Db250ZXh0JiBjb250ZXh0LCBIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQpCiAg
ICAgOiBBdWRpb05vZGUoY29udGV4dCwgY29udGV4dC5zYW1wbGVSYXRlKCkpCiAgICAgLCBtX21l
ZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpCiAgICAgLCBtX3NvdXJjZU51bWJlck9mQ2hhbm5lbHMo
MCkKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OnNl
dEZvcm1hdChzaXplX3QgbnVtYmVyT2ZDaGFubmVscywgZmxvYXQgc291cmMKIAogICAgICAgICB7
CiAgICAgICAgICAgICAvLyBUaGUgY29udGV4dCBtdXN0IGJlIGxvY2tlZCB3aGVuIGNoYW5naW5n
IHRoZSBudW1iZXIgb2Ygb3V0cHV0IGNoYW5uZWxzLgotICAgICAgICAgICAgQXVkaW9Db250ZXh0
QmFzZTo6QXV0b0xvY2tlciBjb250ZXh0TG9ja2VyKGNvbnRleHQoKSk7CisgICAgICAgICAgICBC
YXNlQXVkaW9Db250ZXh0OjpBdXRvTG9ja2VyIGNvbnRleHRMb2NrZXIoY29udGV4dCgpKTsKIAog
ICAgICAgICAgICAgLy8gRG8gYW55IG5lY2Vzc3NhcnkgcmUtY29uZmlndXJhdGlvbiB0byB0aGUg
b3V0cHV0J3MgbnVtYmVyIG9mIGNoYW5uZWxzLgogICAgICAgICAgICAgb3V0cHV0KDApLT5zZXRO
dW1iZXJPZkNoYW5uZWxzKG51bWJlck9mQ2hhbm5lbHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmgKaW5kZXggNzFkMGVkMTM4YTVmOWZkMzczMDUwMjA1NDFlZDVkNDdjM2FlYzBjYy4uNzJlMWEw
Mzk1YWU2MWJiYjYwYTY4MDhlMGNjMjI3MjY2YzhhNTIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZS5oCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIEF1ZGlvQ29udGV4dDsKIGNsYXNzIE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZSBmaW5hbCA6IHB1YmxpYyBBdWRpb05vZGUsIHB1YmxpYyBB
dWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHRCYXNlJiwgSFRNTE1l
ZGlhRWxlbWVudCYpOworICAgIHN0YXRpYyBSZWY8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
PiBjcmVhdGUoQmFzZUF1ZGlvQ29udGV4dCYsIEhUTUxNZWRpYUVsZW1lbnQmKTsKIAogICAgIHZp
cnR1YWwgfk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSgpOwogCkBAIC01Nyw3ICs1Nyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHVubG9jaygpOwogCiBwcml2YXRlOgotICAgIE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZShBdWRpb0NvbnRleHRCYXNlJiwgSFRNTE1lZGlhRWxlbWVudCYpOwor
ICAgIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZShCYXNlQXVkaW9Db250ZXh0JiwgSFRNTE1l
ZGlhRWxlbWVudCYpOwogCiAgICAgZG91YmxlIHRhaWxUaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gMDsgfQogICAgIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIDA7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVk
aWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCmluZGV4IDMwZjFh
MjIyYmUyMzAwZTEyZGFlNzY2YmRlZTQyYjBiYjFjZjFlODkuLjA4MmU1MjZhOTI0ZGYyZWE5ZTNk
ZjRhNTBjMTYzMGNhZjhmMGUyNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcApAQCAtMzksMTIgKzM5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUpOwogCi1S
ZWY8TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4gTWVkaWFTdHJlYW1BdWRpb0Rlc3Rp
bmF0aW9uTm9kZTo6Y3JlYXRlKEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQsIHNpemVfdCBudW1i
ZXJPZkNoYW5uZWxzKQorUmVmPE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+IE1lZGlh
U3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0ZShCYXNlQXVkaW9Db250ZXh0JiBjb250
ZXh0LCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscykKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQsIG51bWJlck9mQ2hhbm5l
bHMpKTsKIH0KIAotTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZTo6TWVkaWFTdHJlYW1B
dWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0LCBzaXplX3QgbnVt
YmVyT2ZDaGFubmVscykKK01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok1lZGlhU3Ry
ZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUoQmFzZUF1ZGlvQ29udGV4dCYgY29udGV4dCwgc2l6ZV90
IG51bWJlck9mQ2hhbm5lbHMpCiAgICAgOiBBdWRpb0Jhc2ljSW5zcGVjdG9yTm9kZShjb250ZXh0
LCBjb250ZXh0LnNhbXBsZVJhdGUoKSwgbnVtYmVyT2ZDaGFubmVscykKICAgICAsIG1fc291cmNl
KE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2U6OmNyZWF0ZShjb250ZXh0LnNhbXBsZVJhdGUoKSkpCiAg
ICAgLCBtX3N0cmVhbShNZWRpYVN0cmVhbTo6Y3JlYXRlKCpjb250ZXh0LmRvY3VtZW50KCksIE1l
ZGlhU3RyZWFtUHJpdmF0ZTo6Y3JlYXRlKGNvbnRleHQuZG9jdW1lbnQoKS0+bG9nZ2VyKCksIG1f
c291cmNlLmNvcHlSZWYoKSkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAppbmRl
eCBkYmFkOTI4ZDc5NmEyZDhmNDEwZjQzNmZiZTMzZWY3MmFhODQxNzNjLi43NTk2ZjZmZjUzOTE5
Nzg1NGU0ZjIzODQ4MjY1ZDJlODc5N2ExNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlv
bk5vZGUuaApAQCAtMzIsMTMgKzMyLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgQXVkaW9Db250ZXh0QmFzZTsKK2NsYXNzIEJhc2VBdWRpb0NvbnRleHQ7CiBjbGFzcyBNZWRp
YVN0cmVhbUF1ZGlvU291cmNlOwogCiBjbGFzcyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25O
b2RlIGZpbmFsIDogcHVibGljIEF1ZGlvQmFzaWNJbnNwZWN0b3JOb2RlIHsKICAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUpOwogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRl
KEF1ZGlvQ29udGV4dEJhc2UmLCBzaXplX3QgbnVtYmVyT2ZDaGFubmVscyk7CisgICAgc3RhdGlj
IFJlZjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGUoQmFzZUF1ZGlvQ29u
dGV4dCYsIHNpemVfdCBudW1iZXJPZkNoYW5uZWxzKTsKIAogICAgIHZpcnR1YWwgfk1lZGlhU3Ry
ZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUoKTsKIApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCByZXNldCgpIGZpbmFsOwogICAgIAogcHJpdmF0ZToKLSAgICBNZWRpYVN0cmVhbUF1
ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dEJhc2UmLCBzaXplX3QgbnVtYmVyT2ZDaGFu
bmVscyk7CisgICAgTWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZShCYXNlQXVkaW9Db250
ZXh0Jiwgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMpOwogCiAgICAgZG91YmxlIHRhaWxUaW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gMDsgfQogICAgIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAKaW5kZXggMzVl
NTVhOTIwMmMzZjMwNTViZjE4N2JhYTZmNjZmYjZiZDUxZjY5MC4uMTAyNWRkM2NjNWExZDA1M2Zk
NWJiMWU2ZGU1ZGVjZjgzMmNlZDE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5jcHAKQEAg
LTM4LDEyICszOCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZSk7CiAKLVJlZjxNZWRpYVN0cmVh
bUF1ZGlvU291cmNlTm9kZT4gTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU6OmNyZWF0ZShBdWRp
b0NvbnRleHRCYXNlJiBjb250ZXh0LCBNZWRpYVN0cmVhbSYgbWVkaWFTdHJlYW0sIE1lZGlhU3Ry
ZWFtVHJhY2smIGF1ZGlvVHJhY2spCitSZWY8TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU+IE1l
ZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlOjpjcmVhdGUoQmFzZUF1ZGlvQ29udGV4dCYgY29udGV4
dCwgTWVkaWFTdHJlYW0mIG1lZGlhU3RyZWFtLCBNZWRpYVN0cmVhbVRyYWNrJiBhdWRpb1RyYWNr
KQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2Rl
KGNvbnRleHQsIG1lZGlhU3RyZWFtLCBhdWRpb1RyYWNrKSk7CiB9CiAKLU1lZGlhU3RyZWFtQXVk
aW9Tb3VyY2VOb2RlOjpNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZShBdWRpb0NvbnRleHRCYXNl
JiBjb250ZXh0LCBNZWRpYVN0cmVhbSYgbWVkaWFTdHJlYW0sIE1lZGlhU3RyZWFtVHJhY2smIGF1
ZGlvVHJhY2spCitNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZTo6TWVkaWFTdHJlYW1BdWRpb1Nv
dXJjZU5vZGUoQmFzZUF1ZGlvQ29udGV4dCYgY29udGV4dCwgTWVkaWFTdHJlYW0mIG1lZGlhU3Ry
ZWFtLCBNZWRpYVN0cmVhbVRyYWNrJiBhdWRpb1RyYWNrKQogICAgIDogQXVkaW9Ob2RlKGNvbnRl
eHQsIGNvbnRleHQuc2FtcGxlUmF0ZSgpKQogICAgICwgbV9tZWRpYVN0cmVhbShtZWRpYVN0cmVh
bSkKICAgICAsIG1fYXVkaW9UcmFjayhhdWRpb1RyYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZS5o
CmluZGV4IGM3MmQzMTIyMzNkNTA2ZGQ1NGNlMjcwZmM5MjI3YjU0NTc1ZWUyZTMuLjQ3YzgzODUx
MjYwZWZhOWU1ZWE1YTZhYzMwYmExZTIxYWZkMWU0MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2Rl
LmgKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgTXVsdGlDaGFubmVsUmVzYW1wbGVyOwogY2xhc3Mg
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGUgZmluYWwgOiBwdWJsaWMgQXVkaW9Ob2RlLCBwdWJs
aWMgQXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxN
ZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dEJhc2UmLCBNZWRp
YVN0cmVhbSYsIE1lZGlhU3RyZWFtVHJhY2smKTsKKyAgICBzdGF0aWMgUmVmPE1lZGlhU3RyZWFt
QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGUoQmFzZUF1ZGlvQ29udGV4dCYsIE1lZGlhU3RyZWFtJiwg
TWVkaWFTdHJlYW1UcmFjayYpOwogCiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1BdWRpb1NvdXJj
ZU5vZGUoKTsKIApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGb3JtYXQo
c2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpIG92ZXJyaWRlOwogCiBw
cml2YXRlOgotICAgIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29udGV4dEJhc2Um
LCBNZWRpYVN0cmVhbSYsIE1lZGlhU3RyZWFtVHJhY2smKTsKKyAgICBNZWRpYVN0cmVhbUF1ZGlv
U291cmNlTm9kZShCYXNlQXVkaW9Db250ZXh0JiwgTWVkaWFTdHJlYW0mLCBNZWRpYVN0cmVhbVRy
YWNrJik7CiAKICAgICBkb3VibGUgdGFpbFRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAw
OyB9CiAgICAgZG91YmxlIGxhdGVuY3lUaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9P
ZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCmluZGV4IGZlYzUwOGNiZmYxYzcxZDMzYmM0
YjEzZWE5ODJmOTJmYzBhZmI5OWIuLjhlYmIxMTVmODFkMzQ0OWQyM2NiNjAyZjI1N2Y0OGM1YzY1
ZWRiYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSk7
CiAgICAgCiBjb25zdCBzaXplX3QgcmVuZGVyUXVhbnR1bVNpemUgPSAxMjg7ICAgIAogCi1PZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRp
b0NvbnRleHRCYXNlJiBjb250ZXh0LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQorT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoQmFzZUF1
ZGlvQ29udGV4dCYgY29udGV4dCwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCkKICAgICA6IEF1
ZGlvRGVzdGluYXRpb25Ob2RlKGNvbnRleHQsIHJlbmRlclRhcmdldC0+c2FtcGxlUmF0ZSgpKQog
ICAgICwgbV9yZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQogICAgICwgbV9zdGFydGVkUmVuZGVy
aW5nKGZhbHNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9P
ZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgKaW5kZXggZjg3MTBmZGUxMGRmZmZl
NDkwMjM0ZjE5MzZiZDU4YmFhM2NiMmU5OS4uNmFjYjhkZWIxMjk1YTYyM2ZlMzBmZWE2NDcyODcy
YTRkYjVhNmRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9P
ZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCkBAIC0zNyw3ICszNyw3IEBA
IGNsYXNzIEF1ZGlvQ29udGV4dDsKIGNsYXNzIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSBm
aW5hbCA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CiAgICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRChPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUpOwogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0QmFz
ZSYgY29udGV4dCwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCkKKyAgICBzdGF0aWMgUmVmPE9m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlKEJhc2VBdWRpb0NvbnRleHQmIGNvbnRl
eHQsIEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCwgcmVuZGVyVGFy
Z2V0KSk7CiAgICAgfQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2FtcGxl
UmF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0LT5zYW1wbGVSYXRl
KCk7IH0KIAogcHJpdmF0ZToKLSAgICBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9D
b250ZXh0QmFzZSYsIEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpOworICAgIE9mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZShCYXNlQXVkaW9Db250ZXh0JiwgQXVkaW9CdWZmZXIqIHJlbmRlclRh
cmdldCk7CiAKICAgICAvLyBUaGlzIEF1ZGlvTm9kZSByZW5kZXJzIGludG8gdGhpcyBBdWRpb0J1
ZmZlci4KICAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyVGFyZ2V0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcAppbmRleCBl
OGYzMWM3MjIwZTUwNjU2OGUzYWNmMDU4ZjZjYWI0NzNiMDkxZWQ3Li44MTYxYmZiZDBmOGNkMzI0
NjM1YjgxNzE4NDYwODAwM2JkYTZhNDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmNwcApAQCAtNDUsMTIgKzQ1LDEyIEBAIFBlcmlv
ZGljV2F2ZSogT3NjaWxsYXRvck5vZGU6OnNfcGVyaW9kaWNXYXZlU3F1YXJlID0gbnVsbHB0cjsK
IFBlcmlvZGljV2F2ZSogT3NjaWxsYXRvck5vZGU6OnNfcGVyaW9kaWNXYXZlU2F3dG9vdGggPSBu
dWxscHRyOwogUGVyaW9kaWNXYXZlKiBPc2NpbGxhdG9yTm9kZTo6c19wZXJpb2RpY1dhdmVUcmlh
bmdsZSA9IG51bGxwdHI7CiAKLVJlZjxPc2NpbGxhdG9yTm9kZT4gT3NjaWxsYXRvck5vZGU6OmNy
ZWF0ZShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQorUmVmPE9z
Y2lsbGF0b3JOb2RlPiBPc2NpbGxhdG9yTm9kZTo6Y3JlYXRlKEJhc2VBdWRpb0NvbnRleHQmIGNv
bnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3Nj
aWxsYXRvck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwogfQogCi1Pc2NpbGxhdG9yTm9kZTo6
T3NjaWxsYXRvck5vZGUoQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0
ZSkKK09zY2lsbGF0b3JOb2RlOjpPc2NpbGxhdG9yTm9kZShCYXNlQXVkaW9Db250ZXh0JiBjb250
ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlKGNv
bnRleHQsIHNhbXBsZVJhdGUpCiAgICAgLCBtX2ZpcnN0UmVuZGVyKHRydWUpCiAgICAgLCBtX3Zp
cnR1YWxSZWFkSW5kZXgoMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vT3NjaWxsYXRvck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
T3NjaWxsYXRvck5vZGUuaAppbmRleCAwODk1YmNlM2RkZGY1OWQ2OWM1YzZhZjljZmQyYjljZmJl
OWViNGE5Li40NjMyNzY2Yjk5YzY5ZWMxOTQ5M2VlZDUwMzQ5NWU2OWRhYmZkNGE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3JOb2RlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yTm9kZS5oCkBAIC00
NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgQ3VzdG9tCiAgICAgfTsKIAotICAgIHN0YXRp
YyBSZWY8T3NjaWxsYXRvck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHRCYXNlJiwgZmxvYXQgc2Ft
cGxlUmF0ZSk7CisgICAgc3RhdGljIFJlZjxPc2NpbGxhdG9yTm9kZT4gY3JlYXRlKEJhc2VBdWRp
b0NvbnRleHQmLCBmbG9hdCBzYW1wbGVSYXRlKTsKIAogICAgIHZpcnR1YWwgfk9zY2lsbGF0b3JO
b2RlKCk7CiAKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGVyaW9kaWNX
YXZlKFBlcmlvZGljV2F2ZSopOwogCiBwcml2YXRlOgotICAgIE9zY2lsbGF0b3JOb2RlKEF1ZGlv
Q29udGV4dEJhc2UmLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICBPc2NpbGxhdG9yTm9kZShCYXNl
QXVkaW9Db250ZXh0JiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICB2b2lkIHByb2Nlc3Moc2l6
ZV90IGZyYW1lc1RvUHJvY2VzcykgZmluYWw7CiAgICAgdm9pZCByZXNldCgpIGZpbmFsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5jcHAKaW5kZXggOTll
YmM1Y2RhY2I5NGJjMjMyMmFjMmE0OThlYzZlYjk3Mjc5ZDEyYi4uZjgxZDY4OTMzMWJmOWJhNDkx
ZmE5ZTI5ZWNmMmQ5NjNmMWFkN2Q3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9QYW5uZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1Bhbm5lck5vZGUuY3BwCkBAIC00OCw3ICs0OCw3IEBAIHN0YXRpYyB2b2lkIGZpeE5B
TnMoZG91YmxlICZ4KQogICAgICAgICB4ID0gMC4wOwogfQogCi1QYW5uZXJOb2RlQmFzZTo6UGFu
bmVyTm9kZUJhc2UoQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkK
K1Bhbm5lck5vZGVCYXNlOjpQYW5uZXJOb2RlQmFzZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0
LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUp
CiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Bhbm5l
ck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oCmlu
ZGV4IDQwN2NhNDFmMTg3YTNiYzAxY2MyNTkyMDQ1ZjRkYzI3ZTc1YWE1ZmMuLmYyNTE0Y2IwOTRk
NWQyYTRiNzUxYTg3NmRlN2EwZTA4NjgxMzQ1OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGZsb2F0IGRvcHBsZXJSYXRlKCkgPSAwOwogCiBwcm90ZWN0ZWQ6Ci0gICAgUGFubmVy
Tm9kZUJhc2UoQXVkaW9Db250ZXh0QmFzZSYsIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIFBhbm5l
ck5vZGVCYXNlKEJhc2VBdWRpb0NvbnRleHQmLCBmbG9hdCBzYW1wbGVSYXRlKTsKIH07CiAKIC8v
IFBhbm5lck5vZGUgaXMgYW4gQXVkaW9Ob2RlIHdpdGggb25lIGlucHV0IGFuZCBvbmUgb3V0cHV0
LgpAQCAtNjksOSArNjksNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5QYW5uZXJOb2RlKCk7
CiAKLSAgICBCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0KCkgeyByZXR1cm4gZG93bmNhc3Q8QmFz
ZUF1ZGlvQ29udGV4dD4oQXVkaW9Ob2RlOjpjb250ZXh0KCkpOyB9Ci0gICAgY29uc3QgQmFzZUF1
ZGlvQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJhc2VBdWRpb0Nv
bnRleHQ+KEF1ZGlvTm9kZTo6Y29udGV4dCgpKTsgfQotCiAgICAgLy8gQXVkaW9Ob2RlCiAgICAg
dm9pZCBwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpIG92ZXJyaWRlOwogICAgIHZvaWQg
cHVsbElucHV0cyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFByb2Nlc3Nvck5vZGUuY3Bw
CmluZGV4IDc2MTBiMTUwMjQ4NzhiNjA2ZTVjZGQ4YzRmNWFiMGZiMTFkYzAzNDYuLjIyNzI4YjBh
NWNlMGE3ZDA1NTU2MWU2NTVmZjk4NzlkNjJmOTJhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmNwcApAQCAtNDQs
MTIgKzQ0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKFNjcmlwdFByb2Nlc3Nvck5vZGUpOwogCi1SZWY8U2NyaXB0UHJvY2Vzc29yTm9kZT4g
U2NyaXB0UHJvY2Vzc29yTm9kZTo6Y3JlYXRlKEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQsIGZs
b2F0IHNhbXBsZVJhdGUsIHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBudW1iZXJPZklucHV0
Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMpCitSZWY8U2NyaXB0UHJv
Y2Vzc29yTm9kZT4gU2NyaXB0UHJvY2Vzc29yTm9kZTo6Y3JlYXRlKEJhc2VBdWRpb0NvbnRleHQm
IGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUsIHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBu
dW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMpCiB7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NyaXB0UHJvY2Vzc29yTm9kZShjb250ZXh0LCBz
YW1wbGVSYXRlLCBidWZmZXJTaXplLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJlck9mT3V0
cHV0Q2hhbm5lbHMpKTsKIH0KIAotU2NyaXB0UHJvY2Vzc29yTm9kZTo6U2NyaXB0UHJvY2Vzc29y
Tm9kZShBdWRpb0NvbnRleHRCYXNlJiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3Qg
YnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCB1bnNpZ25lZCBudW1i
ZXJPZk91dHB1dENoYW5uZWxzKQorU2NyaXB0UHJvY2Vzc29yTm9kZTo6U2NyaXB0UHJvY2Vzc29y
Tm9kZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3Qg
YnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCB1bnNpZ25lZCBudW1i
ZXJPZk91dHB1dENoYW5uZWxzKQogICAgIDogQXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJhdGUp
CiAgICAgLCBBY3RpdmVET01PYmplY3QoY29udGV4dC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
CiAgICAgLCBtX2RvdWJsZUJ1ZmZlckluZGV4KDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFByb2Nlc3Nvck5vZGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5oCmluZGV4IDRjMTRhMDc1N2Rm
NWM1ZTYyZGZlOTZhODhlYjQyYjQ3ZjE1ZTcyNTkuLjU3YmZjN2Q0NDNiOWJlZTZjZTcyNGE0MTE0
MjNiNjk2YWVjNmM2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAg
ICAvLyBUaGlzIHZhbHVlIGNvbnRyb2xzIGhvdyBmcmVxdWVudGx5IHRoZSBvbmF1ZGlvcHJvY2Vz
cyBldmVudCBoYW5kbGVyIGlzIGNhbGxlZCBhbmQgaG93IG1hbnkgc2FtcGxlLWZyYW1lcyBuZWVk
IHRvIGJlIHByb2Nlc3NlZCBlYWNoIGNhbGwuCiAgICAgLy8gTG93ZXIgbnVtYmVycyBmb3IgYnVm
ZmVyU2l6ZSB3aWxsIHJlc3VsdCBpbiBhIGxvd2VyIChiZXR0ZXIpIGxhdGVuY3kuIEhpZ2hlciBu
dW1iZXJzIHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGF2b2lkIGF1ZGlvIGJyZWFrdXAgYW5kIGdsaXRj
aGVzLgogICAgIC8vIFRoZSB2YWx1ZSBjaG9zZW4gbXVzdCBjYXJlZnVsbHkgYmFsYW5jZSBiZXR3
ZWVuIGxhdGVuY3kgYW5kIGF1ZGlvIHF1YWxpdHkuCi0gICAgc3RhdGljIFJlZjxTY3JpcHRQcm9j
ZXNzb3JOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0QmFzZSYsIGZsb2F0IHNhbXBsZVJhdGUsIHNp
emVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVk
IG51bWJlck9mT3V0cHV0Q2hhbm5lbHMpOworICAgIHN0YXRpYyBSZWY8U2NyaXB0UHJvY2Vzc29y
Tm9kZT4gY3JlYXRlKEJhc2VBdWRpb0NvbnRleHQmLCBmbG9hdCBzYW1wbGVSYXRlLCBzaXplX3Qg
YnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCB1bnNpZ25lZCBudW1i
ZXJPZk91dHB1dENoYW5uZWxzKTsKIAogICAgIHZpcnR1YWwgflNjcmlwdFByb2Nlc3Nvck5vZGUo
KTsKIApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIGRvdWJsZSB0YWlsVGltZSgpIGNv
bnN0IG92ZXJyaWRlOwogICAgIGRvdWJsZSBsYXRlbmN5VGltZSgpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgU2NyaXB0UHJvY2Vzc29yTm9kZShBdWRpb0NvbnRleHRCYXNlJiwgZmxvYXQgc2FtcGxl
UmF0ZSwgc2l6ZV90IGJ1ZmZlclNpemUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscywg
dW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscyk7CisgICAgU2NyaXB0UHJvY2Vzc29yTm9k
ZShCYXNlQXVkaW9Db250ZXh0JiwgZmxvYXQgc2FtcGxlUmF0ZSwgc2l6ZV90IGJ1ZmZlclNpemUs
IHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRD
aGFubmVscyk7CiAKICAgICB2b2lkIGZpcmVQcm9jZXNzRXZlbnQoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcAppbmRleCBhZTRh
ZjlmMjMyZjc1MTM2YzA4MWFmZTE0YmQ3YTc5NTZjMDUyOTZlLi5jNDQxMTcwOWY0ZmIzMGRlZjNl
YmI4MDM4YmNhOWUzYzIwMTk3ODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChXYXZlU2hhcGVyTm9kZSk7
CiAKLVdhdmVTaGFwZXJOb2RlOjpXYXZlU2hhcGVyTm9kZShBdWRpb0NvbnRleHRCYXNlJiBjb250
ZXh0KQorV2F2ZVNoYXBlck5vZGU6OldhdmVTaGFwZXJOb2RlKEJhc2VBdWRpb0NvbnRleHQmIGNv
bnRleHQpCiAgICAgOiBBdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZShjb250ZXh0LCBjb250ZXh0LnNh
bXBsZVJhdGUoKSkKIHsKICAgICBzZXROb2RlVHlwZShOb2RlVHlwZVdhdmVTaGFwZXIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5oCmluZGV4
IDVmNDkzMjhiMjJkMGViZTVkNmVmNmQwM2M2YWU2ZDZmZmMxYTExMGUuLmY1YTI4ZDhjMjlkODE2
OTQ1ZjQ2NjBlZWU2NzM3MWYxMWNmM2YyYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmgKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgV2F2ZVNoYXBlck5vZGUgZmluYWwgOiBwdWJsaWMgQXVkaW9CYXNp
Y1Byb2Nlc3Nvck5vZGUgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoV2F2ZVNoYXBlck5v
ZGUpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2F2ZVNoYXBlck5vZGU+IGNyZWF0ZShBdWRp
b0NvbnRleHRCYXNlJiBjb250ZXh0KQorICAgIHN0YXRpYyBSZWY8V2F2ZVNoYXBlck5vZGU+IGNy
ZWF0ZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2F2ZVNoYXBlck5vZGUoY29udGV4dCkpOwogICAgIH0KQEAgLTQ5LDcgKzQ5
LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSBsYXRlbmN5KCkgY29uc3QgeyByZXR1cm4gbGF0ZW5j
eVRpbWUoKTsgfQogCiBwcml2YXRlOiAgICAKLSAgICBleHBsaWNpdCBXYXZlU2hhcGVyTm9kZShB
dWRpb0NvbnRleHRCYXNlJik7CisgICAgZXhwbGljaXQgV2F2ZVNoYXBlck5vZGUoQmFzZUF1ZGlv
Q29udGV4dCYpOwogCiAgICAgV2F2ZVNoYXBlclByb2Nlc3Nvciogd2F2ZVNoYXBlclByb2Nlc3Nv
cigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFdhdmVTaGFwZXJQcm9jZXNzb3IqPihwcm9jZXNzb3Io
KSk7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dl
YktpdEF1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dl
YktpdEF1ZGlvQ29udGV4dC5jcHAKaW5kZXggZjQwMjA4MTlhODkzN2ZjNjNkNTNkNTVmM2VhN2Q3
OWI5NDkyMTEwMi4uMGUzZTY1YTljZWQzYTI3NTM5YjNhODUxNzEwZDE0ZmM2YjZmMDAzNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XZWJLaXRBdWRpb0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2ViS2l0QXVkaW9D
b250ZXh0LmNwcApAQCAtMjksNDUgKzI5LDkgQEAKIAogI2luY2x1ZGUgIldlYktpdEF1ZGlvQ29u
dGV4dC5oIgogCi0jaW5jbHVkZSAiQW5hbHlzZXJOb2RlLmgiCi0jaW5jbHVkZSAiQXN5bmNBdWRp
b0RlY29kZXIuaCIKLSNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkF1ZGlvQnVm
ZmVyQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJBdWRpb0J1ZmZlclNvdXJjZU5vZGUuaCIKLSNpbmNs
dWRlICJBdWRpb0xpc3RlbmVyLmgiCi0jaW5jbHVkZSAiQXVkaW9Ob2RlSW5wdXQuaCIKLSNpbmNs
dWRlICJBdWRpb05vZGVPdXRwdXQuaCIKLSNpbmNsdWRlICJBdWRpb1Nlc3Npb24uaCIKLSNpbmNs
dWRlICJCaXF1YWRGaWx0ZXJOb2RlLmgiCi0jaW5jbHVkZSAiQ2hhbm5lbE1lcmdlck5vZGUuaCIK
LSNpbmNsdWRlICJDaGFubmVsU3BsaXR0ZXJOb2RlLmgiCi0jaW5jbHVkZSAiQ29udm9sdmVyTm9k
ZS5oIgotI2luY2x1ZGUgIkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgotI2luY2x1ZGUg
IkRlbGF5Tm9kZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRHluYW1pY3ND
b21wcmVzc29yTm9kZS5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGRlRG
cmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNp
bmNsdWRlICJHYWluTm9kZS5oIgotI2luY2x1ZGUgIkdlbmVyaWNFdmVudFF1ZXVlLmgiCi0jaW5j
bHVkZSAiSFJURkRhdGFiYXNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiSFJURlBhbm5lci5oIgogI2lu
Y2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2lu
Y2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCi0j
aW5jbHVkZSAiT3NjaWxsYXRvck5vZGUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAi
UGVyaW9kaWNXYXZlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmgi
Ci0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNjcmlwdFByb2Nlc3Nv
ck5vZGUuaCIKLSNpbmNsdWRlICJXYXZlU2hhcGVyTm9kZS5oIgogI2luY2x1ZGUgIldlYktpdEF1
ZGlvUGFubmVyTm9kZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NjcmlwdENhbGxTdGFj
ay5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKICNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQogI2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCkBAIC04MSw0OCArNDUsMTYgQEAK
ICNpbmNsdWRlICJNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCIKICNlbmRpZgogCi0jaWYg
REVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLSNpbmNsdWRlIDxzdGRpby5oPgotI2VuZGlmCi0K
LSNpZiBVU0UoR1NUUkVBTUVSKQotI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9BcnJheUJ1ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9TY29wZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1jb25zdCB1
bnNpZ25lZCBNYXhQZXJpb2RpY1dhdmVMZW5ndGggPSA0MDk2OwotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChXZWJLaXRBdWRpb0NvbnRleHQpOwog
CiAjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lG
KGRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+
aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE1lZGlhLCAiJXAgLSBXZWJLaXRBdWRpb0NvbnRl
eHQ6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQogCi1ib29sIFdlYktpdEF1ZGlvQ29udGV4
dDo6aXNTYW1wbGVSYXRlUmFuZ2VHb29kKGZsb2F0IHNhbXBsZVJhdGUpCi17Ci0gICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhlIG1pbmltdW0gc2FtcGxlLXJhdGUgY291bGQgYmUg
bGVzcyB0aGFuIDQ0LjFLSHosCi0gICAgLy8gYnV0IHRoYXQgd2lsbCByZXF1aXJlIHNvbWUgZml4
ZXMgaW4gSFJURlBhbm5lcjo6ZmZ0U2l6ZUZvclNhbXBsZVJhdGUoKSwgYW5kIHNvbWUgdGVzdGlu
ZyB0aGVyZS4KLSAgICByZXR1cm4gc2FtcGxlUmF0ZSA+PSA0NDEwMCAmJiBzYW1wbGVSYXRlIDw9
IDk2MDAwOwotfQotCiAjaWYgT1MoV0lORE9XUykKIC8vIERvbid0IGFsbG93IG1vcmUgdGhhbiB0
aGlzIG51bWJlciBvZiBzaW11bHRhbmVvdXMgQXVkaW9Db250ZXh0cyB0YWxraW5nIHRvIGhhcmR3
YXJlLgogY29uc3RleHByIHVuc2lnbmVkIG1heEhhcmR3YXJlQ29udGV4dHMgPSA0OwogI2VuZGlm
Ci11bnNpZ25lZCBXZWJLaXRBdWRpb0NvbnRleHQ6OnNfaGFyZHdhcmVDb250ZXh0Q291bnQgPSAw
OwogCiBFeGNlcHRpb25PcjxSZWY8V2ViS2l0QXVkaW9Db250ZXh0Pj4gV2ViS2l0QXVkaW9Db250
ZXh0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50KQogewpAQCAtMTM5LDIyNiArNzEsMTQgQEAg
RXhjZXB0aW9uT3I8UmVmPFdlYktpdEF1ZGlvQ29udGV4dD4+IFdlYktpdEF1ZGlvQ29udGV4dDo6
Y3JlYXRlKERvY3VtZW50JiBkb2N1bWUKIAogLy8gQ29uc3RydWN0b3IgZm9yIHJlbmRlcmluZyB0
byB0aGUgYXVkaW8gaGFyZHdhcmUuCiBXZWJLaXRBdWRpb0NvbnRleHQ6OldlYktpdEF1ZGlvQ29u
dGV4dChEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBBdWRpb0NvbnRleHRCYXNlKGRvY3VtZW50
KQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICwgbV9sb2dnZXIoZG9jdW1lbnQubG9n
Z2VyKCkpCi0gICAgLCBtX2xvZ0lkZW50aWZpZXIodW5pcXVlTG9nSWRlbnRpZmllcigpKQotI2Vu
ZGlmCi0gICAgLCBtX21lZGlhU2Vzc2lvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBs
YXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLCAqdGhpcykpCi0gICAg
LCBtX2V2ZW50UXVldWUoTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMp
KQorICAgIDogQmFzZUF1ZGlvQ29udGV4dChkb2N1bWVudCkKIHsKLSAgICAvLyBBY2NvcmRpbmcg
dG8gc3BlYyBBdWRpb0NvbnRleHQgbXVzdCBkaWUgb25seSBhZnRlciBwYWdlIG5hdmlnYXRlLgot
ICAgIC8vIExldHMgbWFyayBpdCBhcyBBY3RpdmVET01PYmplY3Qgd2l0aCBwZW5kaW5nIGFjdGl2
aXR5IGFuZCB1bm1hcmsgaXQgaW4gY2xlYXIgbWV0aG9kLgotICAgIG1ha2VQZW5kaW5nQWN0aXZp
dHkoKTsKLQotICAgIGNvbnN0cnVjdENvbW1vbigpOwotCi0gICAgbV9kZXN0aW5hdGlvbk5vZGUg
PSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0ZSgqdGhpcyk7Ci0KLSAgICAvLyBJ
bml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiBub2RlJ3MgbXV0ZWQgc3RhdGUgdG8gbWF0Y2ggdGhl
IHBhZ2UncyBjdXJyZW50IG11dGVkIHN0YXRlLgotICAgIHBhZ2VNdXRlZFN0YXRlRGlkQ2hhbmdl
KCk7Ci0KLSAgICBkb2N1bWVudC5hZGRBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKLSAgICBkb2N1bWVu
dC5yZWdpc3RlckZvclZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwogfQog
CiAvLyBDb25zdHJ1Y3RvciBmb3Igb2ZmbGluZSAobm9uLXJlYWx0aW1lKSByZW5kZXJpbmcuCiBX
ZWJLaXRBdWRpb0NvbnRleHQ6OldlYktpdEF1ZGlvQ29udGV4dChEb2N1bWVudCYgZG9jdW1lbnQs
IEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpCi0gICAgOiBBdWRpb0NvbnRleHRCYXNlKGRvY3Vt
ZW50KQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICwgbV9sb2dnZXIoZG9jdW1lbnQu
bG9nZ2VyKCkpCi0gICAgLCBtX2xvZ0lkZW50aWZpZXIodW5pcXVlTG9nSWRlbnRpZmllcigpKQot
I2VuZGlmCi0gICAgLCBtX2lzT2ZmbGluZUNvbnRleHQodHJ1ZSkKLSAgICAsIG1fbWVkaWFTZXNz
aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpjcmVhdGUoUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5h
Z2VyOjpzaGFyZWRNYW5hZ2VyKCksICp0aGlzKSkKLSAgICAsIG1fZXZlbnRRdWV1ZShNYWluVGhy
ZWFkR2VuZXJpY0V2ZW50UXVldWU6OmNyZWF0ZSgqdGhpcykpCi0gICAgLCBtX3JlbmRlclRhcmdl
dChyZW5kZXJUYXJnZXQpCi17Ci0gICAgY29uc3RydWN0Q29tbW9uKCk7Ci0KLSAgICAvLyBDcmVh
dGUgYSBuZXcgZGVzdGluYXRpb24gZm9yIG9mZmxpbmUgcmVuZGVyaW5nLgotICAgIG1fZGVzdGlu
YXRpb25Ob2RlID0gT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpjcmVhdGUoKnRoaXMsIG1f
cmVuZGVyVGFyZ2V0LmdldCgpKTsKLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6OmNvbnN0
cnVjdENvbW1vbigpCi17Ci0gICAgRkZURnJhbWU6OmluaXRpYWxpemUoKTsKLQotICAgIG1fbGlz
dGVuZXIgPSBBdWRpb0xpc3RlbmVyOjpjcmVhdGUoKTsKLQotICAgIEFTU0VSVChkb2N1bWVudCgp
KTsKLSAgICBpZiAoZG9jdW1lbnQoKS0+YXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUo
KSkKLSAgICAgICAgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlVXNlckdlc3R1cmVGb3JB
dWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwotICAgIGVsc2UKLSAgICAgICAgbV9yZXN0cmljdGlvbnMg
PSBOb1Jlc3RyaWN0aW9uczsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGFkZEJlaGF2aW9y
UmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsK
LSNlbmRpZgotfQotCi1XZWJLaXRBdWRpb0NvbnRleHQ6On5XZWJLaXRBdWRpb0NvbnRleHQoKQot
ewotI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVOQ0VTCi0gICAgZnByaW50ZihzdGRlcnIsICIl
cDogV2ViS2l0QXVkaW9Db250ZXh0Ojp+V2ViS2l0QXVkaW9Db250ZXh0KClcbiIsIHRoaXMpOwot
I2VuZGlmCi0gICAgQVNTRVJUKCFtX2lzSW5pdGlhbGl6ZWQpOwotICAgIEFTU0VSVChtX2lzU3Rv
cFNjaGVkdWxlZCk7Ci0gICAgQVNTRVJUKG1fbm9kZXNUb0RlbGV0ZS5pc0VtcHR5KCkpOwotICAg
IEFTU0VSVChtX3JlZmVyZW5jZWROb2Rlcy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX2Zpbmlz
aGVkTm9kZXMuaXNFbXB0eSgpKTsgLy8gRklYTUUgKGJ1ZyAxMDU4NzApOiBUaGlzIGFzc2VydGlv
biBmYWlscyBvbiB0ZXN0cyBzb21ldGltZXMuCi0gICAgQVNTRVJUKG1fYXV0b21hdGljUHVsbE5v
ZGVzLmlzRW1wdHkoKSk7Ci0gICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5n
KQotICAgICAgICBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy5yZXNpemUobV9hdXRvbWF0
aWNQdWxsTm9kZXMuc2l6ZSgpKTsKLSAgICBBU1NFUlQobV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxs
Tm9kZXMuaXNFbXB0eSgpKTsKLSAgICAvLyBGSVhNRTogQ2FuIHdlIGFzc2VydCB0aGF0IG1fZGVm
ZXJyZWRGaW5pc2hEZXJlZkxpc3QgaXMgZW1wdHk/Ci0KLSAgICBpZiAoIWlzT2ZmbGluZUNvbnRl
eHQoKSAmJiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+
cmVtb3ZlQXVkaW9Qcm9kdWNlcigqdGhpcyk7Ci0gICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0
ZXJGb3JWaXNpYmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViS2l0QXVkaW9Db250ZXh0OjpsYXp5SW5pdGlhbGl6ZSgpCi17Ci0gICAgQVNTRVJU
KCFtX2lzU3RvcFNjaGVkdWxlZCk7Ci0KLSAgICBpZiAobV9pc0luaXRpYWxpemVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBEb24ndCBhbGxvdyB0aGUgY29udGV4dCB0byBpbml0aWFsaXpl
IGEgc2Vjb25kIHRpbWUgYWZ0ZXIgaXQncyBhbHJlYWR5IGJlZW4gZXhwbGljaXRseSB1bmluaXRp
YWxpemVkLgotICAgIEFTU0VSVCghbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQpOwotICAgIGlmICht
X2lzQXVkaW9UaHJlYWRGaW5pc2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGVz
dGluYXRpb25Ob2RlKSB7Ci0gICAgICAgIG1fZGVzdGluYXRpb25Ob2RlLT5pbml0aWFsaXplKCk7
Ci0KLSAgICAgICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIC8vIFRo
aXMgc3RhcnRzIHRoZSBhdWRpbyB0aHJlYWQuIFRoZSBkZXN0aW5hdGlvbiBub2RlJ3MgcHJvdmlk
ZUlucHV0KCkgbWV0aG9kIHdpbGwgbm93IGJlIGNhbGxlZCByZXBlYXRlZGx5IHRvIHJlbmRlciBh
dWRpby4KLSAgICAgICAgICAgIC8vIEVhY2ggdGltZSBwcm92aWRlSW5wdXQoKSBpcyBjYWxsZWQs
IGEgcG9ydGlvbiBvZiB0aGUgYXVkaW8gc3RyZWFtIGlzIHJlbmRlcmVkLiBMZXQncyBjYWxsIHRo
aXMgdGltZSBwZXJpb2QgYSAicmVuZGVyIHF1YW50dW0iLgotICAgICAgICAgICAgLy8gTk9URTog
Zm9yIG5vdyBkZWZhdWx0IEF1ZGlvQ29udGV4dCBkb2VzIG5vdCBuZWVkIGFuIGV4cGxpY2l0IHN0
YXJ0UmVuZGVyaW5nKCkgY2FsbCBmcm9tIEphdmFTY3JpcHQuCi0gICAgICAgICAgICAvLyBXZSBt
YXkgd2FudCB0byBjb25zaWRlciByZXF1aXJpbmcgaXQgZm9yIHN5bW1ldHJ5IHdpdGggT2ZmbGlu
ZUF1ZGlvQ29udGV4dC4KLSAgICAgICAgICAgIHN0YXJ0UmVuZGVyaW5nKCk7Ci0gICAgICAgICAg
ICArK3NfaGFyZHdhcmVDb250ZXh0Q291bnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9pc0lu
aXRpYWxpemVkID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6OmNsZWFyKCkK
LXsKLSAgICBSZWY8V2ViS2l0QXVkaW9Db250ZXh0PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLQot
ICAgIC8vIFdlIGhhdmUgdG8gcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoZSBkZXN0aW5hdGlv
biBub2RlIGJlZm9yZSB0aGUgY29udGV4dCB3aWxsIGV2ZXIgYmUgZGVsZXRlZCBzaW5jZSB0aGUg
ZGVzdGluYXRpb24gbm9kZSBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgY29udGV4dC4KLSAgICBp
ZiAobV9kZXN0aW5hdGlvbk5vZGUpCi0gICAgICAgIG1fZGVzdGluYXRpb25Ob2RlID0gbnVsbHB0
cjsKLQotICAgIC8vIEF1ZGlvIHRocmVhZCBpcyBkZWFkLiBOb2JvZHkgd2lsbCBzY2hlZHVsZSBu
b2RlIGRlbGV0aW9uIGFjdGlvbi4gTGV0J3MgZG8gaXQgb3Vyc2VsdmVzLgotICAgIGRvIHsKLSAg
ICAgICAgZGVsZXRlTWFya2VkTm9kZXMoKTsKLSAgICAgICAgbV9ub2Rlc1RvRGVsZXRlLmFwcGVu
ZFZlY3RvcihtX25vZGVzTWFya2VkRm9yRGVsZXRpb24pOwotICAgICAgICBtX25vZGVzTWFya2Vk
Rm9yRGVsZXRpb24uY2xlYXIoKTsKLSAgICB9IHdoaWxlIChtX25vZGVzVG9EZWxldGUuc2l6ZSgp
KTsKLQotICAgIGNsZWFyUGVuZGluZ0FjdGl2aXR5KCk7Ci19Ci0KLXZvaWQgV2ViS2l0QXVkaW9D
b250ZXh0Ojp1bmluaXRpYWxpemUoKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7
Ci0KLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFtX2lzSW5pdGlhbGl6
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoaXMgc3RvcHMgdGhlIGF1ZGlvIHRocmVh
ZCBhbmQgYWxsIGF1ZGlvIHJlbmRlcmluZy4KLSAgICBpZiAobV9kZXN0aW5hdGlvbk5vZGUpCi0g
ICAgICAgIG1fZGVzdGluYXRpb25Ob2RlLT51bmluaXRpYWxpemUoKTsKLQotICAgIC8vIERvbid0
IGFsbG93IHRoZSBjb250ZXh0IHRvIGluaXRpYWxpemUgYSBzZWNvbmQgdGltZSBhZnRlciBpdCdz
IGFscmVhZHkgYmVlbiBleHBsaWNpdGx5IHVuaW5pdGlhbGl6ZWQuCi0gICAgbV9pc0F1ZGlvVGhy
ZWFkRmluaXNoZWQgPSB0cnVlOwotCi0gICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkpIHsKLSAg
ICAgICAgQVNTRVJUKHNfaGFyZHdhcmVDb250ZXh0Q291bnQpOwotICAgICAgICAtLXNfaGFyZHdh
cmVDb250ZXh0Q291bnQ7Ci0KLSAgICAgICAgLy8gT2ZmbGluZSBjb250ZXh0cyBtb3ZlIHRvICdD
bG9zZWQnIHN0YXRlIHdoZW4gZGlzcGF0Y2hpbmcgdGhlIGNvbXBsZXRpb24gZXZlbnQuCi0gICAg
ICAgIHNldFN0YXRlKFN0YXRlOjpDbG9zZWQpOwotICAgIH0KLQotICAgIC8vIEdldCByaWQgb2Yg
dGhlIHNvdXJjZXMgd2hpY2ggbWF5IHN0aWxsIGJlIHBsYXlpbmcuCi0gICAgZGVyZWZVbmZpbmlz
aGVkU291cmNlTm9kZXMoKTsKLQotICAgIG1faXNJbml0aWFsaXplZCA9IGZhbHNlOwotfQotCi1i
b29sIFdlYktpdEF1ZGlvQ29udGV4dDo6aXNJbml0aWFsaXplZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1faXNJbml0aWFsaXplZDsKLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6OmFkZFJl
YWN0aW9uKFN0YXRlIHN0YXRlLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQot
ewotICAgIHNpemVfdCBzdGF0ZUluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlSW5kZXggPj0gbV9zdGF0ZVJlYWN0aW9ucy5zaXplKCkpCi0gICAgICAgIG1f
c3RhdGVSZWFjdGlvbnMuZ3JvdyhzdGF0ZUluZGV4ICsgMSk7Ci0KLSAgICBtX3N0YXRlUmVhY3Rp
b25zW3N0YXRlSW5kZXhdLmFwcGVuZChXVEZNb3ZlKHByb21pc2UpKTsKLX0KLQotdm9pZCBXZWJL
aXRBdWRpb0NvbnRleHQ6OnNldFN0YXRlKFN0YXRlIHN0YXRlKQotewotICAgIGlmIChtX3N0YXRl
ID09IHN0YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXRlID0gc3RhdGU7Ci0gICAg
bV9ldmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3Rh
dGVjaGFuZ2VFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6WWVzLCBFdmVudDo6SXNDYW5jZWxhYmxl
OjpObykpOwotCi0gICAgc2l6ZV90IHN0YXRlSW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0
YXRlKTsKLSAgICBpZiAoc3RhdGVJbmRleCA+PSBtX3N0YXRlUmVhY3Rpb25zLnNpemUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPERPTVByb21pc2VEZWZlcnJlZDx2b2lkPj4gcmVh
Y3Rpb25zOwotICAgIG1fc3RhdGVSZWFjdGlvbnNbc3RhdGVJbmRleF0uc3dhcChyZWFjdGlvbnMp
OwotCi0gICAgZm9yIChhdXRvJiBwcm9taXNlIDogcmVhY3Rpb25zKQotICAgICAgICBwcm9taXNl
LnJlc29sdmUoKTsKLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6OnN0b3AoKQotewotICAg
IEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0KLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgLy8gVXN1YWxseSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IGNhbGxzIHN0b3AgdHdp
Y2UuCi0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9p
c1N0b3BTY2hlZHVsZWQgPSB0cnVlOwotCi0gICAgQVNTRVJUKGRvY3VtZW50KCkpOwotICAgIGRv
Y3VtZW50KCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7Ci0KLSAgICB1bmluaXRpYWxpemUoKTsK
LSAgICBjbGVhcigpOwotfQotCi12b2lkIFdlYktpdEF1ZGlvQ29udGV4dDo6c3VzcGVuZChSZWFz
b25Gb3JTdXNwZW5zaW9uKQorICAgIDogQmFzZUF1ZGlvQ29udGV4dChkb2N1bWVudCwgcmVuZGVy
VGFyZ2V0KQogewotICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpSdW5uaW5nKSB7Ci0gICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5iZWdpbkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6
UGxheWJhY2tTdXNwZW5kZWQpOwotICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVJc1BsYXlpbmdN
ZWRpYSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6OnJlc3VtZSgpCi17
Ci0gICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkludGVycnVwdGVkKSB7Ci0gICAgICAgIG1fbWVk
aWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1heVJlc3Vt
ZVBsYXlpbmcpOwotICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwot
ICAgIH0KIH0KIAogY29uc3QgY2hhciogV2ViS2l0QXVkaW9Db250ZXh0OjphY3RpdmVET01PYmpl
Y3ROYW1lKCkgY29uc3QKQEAgLTM2Niw4OSArODYsNiBAQCBjb25zdCBjaGFyKiBXZWJLaXRBdWRp
b0NvbnRleHQ6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAogICAgIHJldHVybiAiV2ViS2l0
QXVkaW9Db250ZXh0IjsKIH0KIAotRG9jdW1lbnRJZGVudGlmaWVyIFdlYktpdEF1ZGlvQ29udGV4
dDo6aG9zdGluZ0RvY3VtZW50SWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAgYXV0byogZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICBy
ZXR1cm4gZG9jdW1lbnQgPyBkb2N1bWVudC0+aWRlbnRpZmllcigpIDogRG9jdW1lbnRJZGVudGlm
aWVyIHsgfTsKLX0KLQotYm9vbCBXZWJLaXRBdWRpb0NvbnRleHQ6OmlzU3VzcGVuZGVkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gIWRvY3VtZW50KCkgfHwgZG9jdW1lbnQoKS0+YWN0aXZlRE9NT2Jq
ZWN0c0FyZVN1c3BlbmRlZCgpIHx8IGRvY3VtZW50KCktPmFjdGl2ZURPTU9iamVjdHNBcmVTdG9w
cGVkKCk7Ci19Ci0KLXZvaWQgV2ViS2l0QXVkaW9Db250ZXh0Ojp2aXNpYmlsaXR5U3RhdGVDaGFu
Z2VkKCkKLXsKLSAgICAvLyBEbyBub3Qgc3VzcGVuZCBpZiBhdWRpbyBpcyBhdWRpYmxlLgotICAg
IGlmICghZG9jdW1lbnQoKSB8fCBtZWRpYVN0YXRlKCkgPT0gTWVkaWFQcm9kdWNlcjo6SXNQbGF5
aW5nQXVkaW8gfHwgbV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChkb2N1bWVudCgpLT5oaWRkZW4oKSkgewotICAgICAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6
UnVubmluZykgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidmlzaWJpbGl0
eVN0YXRlQ2hhbmdlZCgpIFN1c3BlbmRpbmcgcGxheWJhY2sgYWZ0ZXIgZ29pbmcgdG8gdGhlIGJh
Y2tncm91bmQiKTsKLSAgICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5iZWdpbkludGVycnVwdGlv
bihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6RW50ZXJpbmdCYWNrZ3JvdW5kKTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpID09IFN0YXRlOjpJbnRlcnJ1cHRlZCkg
ewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgidmlzaWJpbGl0eVN0YXRlQ2hh
bmdlZCgpIFJlc3VtaW5nIHBsYXliYWNrIGFmdGVyIGVudGVyaW5nIGZvcmVncm91bmQiKTsKLSAg
ICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNl
c3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFdl
YktpdEF1ZGlvQ29udGV4dDo6d291bGRUYWludE9yaWdpbihjb25zdCBVUkwmIHVybCkgY29uc3QK
LXsKLSAgICBpZiAodXJsLnByb3RvY29sSXNEYXRhKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpCi0gICAgICAgIHJl
dHVybiAhZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkuY2FuUmVxdWVzdCh1cmwpOwotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1FeGNlcHRpb25PcjxSZWY8QXVkaW9CdWZmZXI+PiBXZWJLaXRB
dWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXpl
X3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUpCi17Ci0gICAgYXV0byBhdWRpb0J1
ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFt
ZXMsIHNhbXBsZVJhdGUpOwotICAgIGlmICghYXVkaW9CdWZmZXIpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OwotICAgIHJldHVybiBhdWRpb0J1ZmZlci5y
ZWxlYXNlTm9uTnVsbCgpOwotfQotCi1FeGNlcHRpb25PcjxSZWY8QXVkaW9CdWZmZXI+PiBXZWJL
aXRBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciYgYXJyYXlCdWZmZXIsIGJv
b2wgbWl4VG9Nb25vKQotewotICAgIGF1dG8gYXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3Jl
YXRlRnJvbUF1ZGlvRmlsZURhdGEoYXJyYXlCdWZmZXIuZGF0YSgpLCBhcnJheUJ1ZmZlci5ieXRl
TGVuZ3RoKCksIG1peFRvTW9ubywgc2FtcGxlUmF0ZSgpKTsKLSAgICBpZiAoIWF1ZGlvQnVmZmVy
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKLSAgICByZXR1cm4g
YXVkaW9CdWZmZXIucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRl
eHQ6OmRlY29kZUF1ZGlvRGF0YShSZWY8QXJyYXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBSZWZQdHI8
QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ssIFJlZlB0cjxBdWRpb0J1ZmZl
ckNhbGxiYWNrPiYmIGVycm9yQ2FsbGJhY2spCi17Ci0gICAgaWYgKCFtX2F1ZGlvRGVjb2RlcikK
LSAgICAgICAgbV9hdWRpb0RlY29kZXIgPSBtYWtlVW5pcXVlPEFzeW5jQXVkaW9EZWNvZGVyPigp
OwotICAgIG1fYXVkaW9EZWNvZGVyLT5kZWNvZGVBc3luYyhXVEZNb3ZlKGF1ZGlvRGF0YSksIHNh
bXBsZVJhdGUoKSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGVycm9yQ2FsbGJh
Y2spKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4+IFdlYktp
dEF1ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyU291cmNlKCkKLXsKLSAgICBBTFdBWVNfTE9HKExP
R0lERU5USUZJRVIpOwotCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICht
X2lzU3RvcFNjaGVkdWxlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yIH07Ci0KLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIFJlZjxBdWRpb0J1ZmZlclNv
dXJjZU5vZGU+IG5vZGUgPSBBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OmNyZWF0ZSgqdGhpcywgc2Ft
cGxlUmF0ZSgpKTsKLQotICAgIC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBBdWRpb1NjaGVkdWxlZFNv
dXJjZU5vZGUsIHRoZSBjb250ZXh0IGtlZXBzIGEgcmVmZXJlbmNlIHVudGlsIGl0IGhhcyBmaW5p
c2hlZCBwbGF5aW5nLgotICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBBdWRpb1NjaGVkdWxlZFNv
dXJjZU5vZGU6OmZpbmlzaCgpIGNhbGxzIFdlYktpdEF1ZGlvQ29udGV4dDo6bm90aWZ5Tm9kZUZp
bmlzaGVkUHJvY2Vzc2luZygpLgotICAgIHJlZk5vZGUobm9kZSk7Ci0KLSAgICByZXR1cm4gbm9k
ZTsKLX0KLQogI2lmIEVOQUJMRShWSURFTykKIAogRXhjZXB0aW9uT3I8UmVmPE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZT4+IFdlYktpdEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50
U291cmNlKEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhRWxlbWVudCkKQEAgLTQ1Nyw3ICs5NCw3IEBA
IEV4Y2VwdGlvbk9yPFJlZjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+PiBXZWJLaXRBdWRp
b0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxlCiAKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
Ci0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkIHx8IG1lZGlhRWxlbWVudC5hdWRpb1NvdXJjZU5v
ZGUoKSkKKyAgICBpZiAoaXNTdG9wcGVkKCkgfHwgbWVkaWFFbGVtZW50LmF1ZGlvU291cmNlTm9k
ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAog
ICAgIGxhenlJbml0aWFsaXplKCk7CkBAIC00ODAsNyArMTE3LDcgQEAgRXhjZXB0aW9uT3I8UmVm
PE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlPj4gV2ViS2l0QXVkaW9Db250ZXh0OjpjcmVhdGVN
ZWRpYVN0cmUKIAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBpZiAobV9pc1N0
b3BTY2hlZHVsZWQpCisgICAgaWYgKGlzU3RvcHBlZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGF1dG8gYXVkaW9UcmFja3MgPSBtZWRp
YVN0cmVhbS5nZXRBdWRpb1RyYWNrcygpOwpAQCAtNTA4LDcgKzE0NSw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4+IFdlYktpdEF1ZGlvQ29udGV4dDo6Y3Jl
YXRlTWVkaWFTdHJlCiAKIEV4Y2VwdGlvbk9yPFJlZjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRp
b25Ob2RlPj4gV2ViS2l0QXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9u
KCkKIHsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisgICAgaWYgKGlzU3RvcHBlZCgpKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgYW4gb3B0aW9uYWwgYXJndW1lbnQgd2hpY2ggc3BlY2lm
aWVzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMuCkBAIC01MTgsODg1ICsxNTUsNDAgQEAgRXhjZXB0
aW9uT3I8UmVmPE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+PiBXZWJLaXRBdWRpb0Nv
bnRleHQ6OmNyZWF0ZU1lZGkKIAogI2VuZGlmCiAKLUV4Y2VwdGlvbk9yPFJlZjxTY3JpcHRQcm9j
ZXNzb3JOb2RlPj4gV2ViS2l0QXVkaW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6
ZV90IGJ1ZmZlclNpemUsIHNpemVfdCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHNpemVfdCBudW1i
ZXJPZk91dHB1dENoYW5uZWxzKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0K
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVk
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKLQotICAg
IGxhenlJbml0aWFsaXplKCk7Ci0KLSAgICAvLyBXM0MgRWRpdG9yJ3MgRHJhZnQgMDYgSnVuZSAy
MDE3Ci0gICAgLy8gIGh0dHBzOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3dp
ZGwtQmFzZUF1ZGlvQ29udGV4dC1jcmVhdGVTY3JpcHRQcm9jZXNzb3ItU2NyaXB0UHJvY2Vzc29y
Tm9kZS11bnNpZ25lZC1sb25nLWJ1ZmZlclNpemUtdW5zaWduZWQtbG9uZy1udW1iZXJPZklucHV0
Q2hhbm5lbHMtdW5zaWduZWQtbG9uZy1udW1iZXJPZk91dHB1dENoYW5uZWxzCi0KLSAgICAvLyBU
aGUgYnVmZmVyU2l6ZSBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgYnVmZmVyIHNpemUgaW4gdW5p
dHMgb2Ygc2FtcGxlLWZyYW1lcy4gSWYgaXQncyBub3QgcGFzc2VkIGluLAotICAgIC8vIG9yIGlm
IHRoZSB2YWx1ZSBpcyAwLCB0aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGNob29zZSB0aGUg
YmVzdCBidWZmZXIgc2l6ZSBmb3IgdGhlIGdpdmVuIGVudmlyb25tZW50LAotICAgIC8vIHdoaWNo
IHdpbGwgYmUgY29uc3RhbnQgcG93ZXIgb2YgMiB0aHJvdWdob3V0IHRoZSBsaWZldGltZSBvZiB0
aGUgbm9kZS4gLi4uIElmIHRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlcgotICAgIC8vIGlzIG5v
dCBvbmUgb2YgdGhlIGFsbG93ZWQgcG93ZXItb2YtMiB2YWx1ZXMgbGlzdGVkIGFib3ZlLCBhbiBJ
bmRleFNpemVFcnJvciBtdXN0IGJlIHRocm93bi4KLSAgICBzd2l0Y2ggKGJ1ZmZlclNpemUpIHsK
LSAgICBjYXNlIDA6Ci0jaWYgVVNFKEFVRElPX1NFU1NJT04pCi0gICAgICAgIC8vIFBpY2sgYSB2
YWx1ZSBiZXR3ZWVuIDI1NiAoMl44KSBhbmQgMTYzODQgKDJeMTQpLCBiYXNlZCBvbiB0aGUgYnVm
ZmVyIHNpemUgb2YgdGhlIGN1cnJlbnQgQXVkaW9TZXNzaW9uOgotICAgICAgICBidWZmZXJTaXpl
ID0gMSA8PCBzdGQ6Om1heDxzaXplX3Q+KDgsIHN0ZDo6bWluPHNpemVfdD4oMTQsIHN0ZDo6bG9n
MihBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5idWZmZXJTaXplKCkpKSk7Ci0jZWxzZQot
ICAgICAgICBidWZmZXJTaXplID0gMjA0ODsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIDI1NjoKLSAgICBjYXNlIDUxMjoKLSAgICBjYXNlIDEwMjQ6Ci0gICAgY2FzZSAyMDQ4Ogot
ICAgIGNhc2UgNDA5NjoKLSAgICBjYXNlIDgxOTI6Ci0gICAgY2FzZSAxNjM4NDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6
ZUVycm9yIH07Ci0gICAgfQotCi0gICAgLy8gQW4gSW5kZXhTaXplRXJyb3IgZXhjZXB0aW9uIG11
c3QgYmUgdGhyb3duIGlmIGJ1ZmZlclNpemUgb3IgbnVtYmVyT2ZJbnB1dENoYW5uZWxzIG9yIG51
bWJlck9mT3V0cHV0Q2hhbm5lbHMKLSAgICAvLyBhcmUgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2Uu
IEl0IGlzIGludmFsaWQgZm9yIGJvdGggbnVtYmVyT2ZJbnB1dENoYW5uZWxzIGFuZCBudW1iZXJP
Zk91dHB1dENoYW5uZWxzIHRvIGJlIHplcm8uCi0gICAgLy8gSW4gdGhpcyBjYXNlIGFuIEluZGV4
U2l6ZUVycm9yIG11c3QgYmUgdGhyb3duLgotCi0gICAgaWYgKCFudW1iZXJPZklucHV0Q2hhbm5l
bHMgJiYgIW51bWJlck9mT3V0cHV0Q2hhbm5lbHMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOb3RTdXBwb3J0ZWRFcnJvciB9OwotCi0gICAgLy8gVGhpcyBwYXJhbWV0ZXIgW251bWJlck9m
SW5wdXRDaGFubmVsc10gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0aGlz
IG5vZGUncyBpbnB1dC4gVmFsdWVzIG9mCi0gICAgLy8gdXAgdG8gMzIgbXVzdCBiZSBzdXBwb3J0
ZWQuIEEgTm90U3VwcG9ydGVkRXJyb3IgbXVzdCBiZSB0aHJvd24gaWYgdGhlIG51bWJlciBvZiBj
aGFubmVscyBpcyBub3Qgc3VwcG9ydGVkLgotCi0gICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVs
cyA+IG1heE51bWJlck9mQ2hhbm5lbHMoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5v
dFN1cHBvcnRlZEVycm9yIH07Ci0KLSAgICAvLyBUaGlzIHBhcmFtZXRlciBbbnVtYmVyT2ZPdXRw
dXRDaGFubmVsc10gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0aGlzIG5v
ZGUncyBvdXRwdXQuIFZhbHVlcyBvZgotICAgIC8vIHVwIHRvIDMyIG11c3QgYmUgc3VwcG9ydGVk
LiBBIE5vdFN1cHBvcnRlZEVycm9yIG11c3QgYmUgdGhyb3duIGlmIHRoZSBudW1iZXIgb2YgY2hh
bm5lbHMgaXMgbm90IHN1cHBvcnRlZC4KLQotICAgIGlmIChudW1iZXJPZk91dHB1dENoYW5uZWxz
ID4gbWF4TnVtYmVyT2ZDaGFubmVscygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90
U3VwcG9ydGVkRXJyb3IgfTsKLQotICAgIGF1dG8gbm9kZSA9IFNjcmlwdFByb2Nlc3Nvck5vZGU6
OmNyZWF0ZSgqdGhpcywgc2FtcGxlUmF0ZSgpLCBidWZmZXJTaXplLCBudW1iZXJPZklucHV0Q2hh
bm5lbHMsIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMpOwotCi0gICAgcmVmTm9kZShub2RlKTsgLy8g
Y29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgd2Ugc3RvcCBtYWtpbmcgamF2YXNjcmlwdCBy
ZW5kZXJpbmcgY2FsbGJhY2tzCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLUV4Y2VwdGlvbk9yPFJl
ZjxCaXF1YWRGaWx0ZXJOb2RlPj4gV2ViS2l0QXVkaW9Db250ZXh0OjpjcmVhdGVCaXF1YWRGaWx0
ZXIoKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0KLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKLSAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07Ci0KLSAgICBsYXp5SW5pdGlhbGl6ZSgp
OwotCi0gICAgcmV0dXJuIEJpcXVhZEZpbHRlck5vZGU6OmNyZWF0ZSgqdGhpcywgc2FtcGxlUmF0
ZSgpKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmPFdhdmVTaGFwZXJOb2RlPj4gV2ViS2l0QXVkaW9D
b250ZXh0OjpjcmVhdGVXYXZlU2hhcGVyKCkKLXsKLSAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJ
RVIpOwotCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1N0b3BTY2hl
ZHVsZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9Owot
Ci0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gV2F2ZVNoYXBlck5vZGU6OmNyZWF0
ZSgqdGhpcyk7Ci19Ci0KLUV4Y2VwdGlvbk9yPFJlZjxXZWJLaXRBdWRpb1Bhbm5lck5vZGU+PiBX
ZWJLaXRBdWRpb0NvbnRleHQ6OmNyZWF0ZVBhbm5lcigpCitFeGNlcHRpb25PcjxSZWY8V2ViS2l0
QXVkaW9QYW5uZXJOb2RlPj4gV2ViS2l0QXVkaW9Db250ZXh0OjpjcmVhdGVXZWJLaXRQYW5uZXIo
KQogewogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKKyAgICBpZiAoaXNTdG9wcGVk
KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCiAg
ICAgbGF6eUluaXRpYWxpemUoKTsKICAgICByZXR1cm4gV2ViS2l0QXVkaW9QYW5uZXJOb2RlOjpj
cmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxDb252b2x2
ZXJOb2RlPj4gV2ViS2l0QXVkaW9Db250ZXh0OjpjcmVhdGVDb252b2x2ZXIoKQotewotICAgIEFM
V0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0KLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRTdGF0ZUVycm9yIH07Ci0KLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBD
b252b2x2ZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7Ci19Ci0KLUV4Y2VwdGlv
bk9yPFJlZjxEeW5hbWljc0NvbXByZXNzb3JOb2RlPj4gV2ViS2l0QXVkaW9Db250ZXh0OjpjcmVh
dGVEeW5hbWljc0NvbXByZXNzb3IoKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7
Ci0KLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNjaGVkdWxl
ZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07Ci0KLSAg
ICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIHJldHVybiBEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpj
cmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7Ci19Ci0KLUV4Y2VwdGlvbk9yPFJlZjxBbmFseXNl
ck5vZGU+PiBXZWJLaXRBdWRpb0NvbnRleHQ6OmNyZWF0ZUFuYWx5c2VyKCkKLXsKLSAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIpOwotCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkU3RhdGVFcnJvciB9OwotCi0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gQW5h
bHlzZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7Ci19Ci0KLUV4Y2VwdGlvbk9y
PFJlZjxHYWluTm9kZT4+IFdlYktpdEF1ZGlvQ29udGV4dDo6Y3JlYXRlR2FpbigpCi17Ci0gICAg
QUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKLQotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJu
IEdhaW5Ob2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7Ci19Ci0KLUV4Y2VwdGlvbk9y
PFJlZjxEZWxheU5vZGU+PiBXZWJLaXRBdWRpb0NvbnRleHQ6OmNyZWF0ZURlbGF5KGRvdWJsZSBt
YXhEZWxheVRpbWUpCit2b2lkIFdlYktpdEF1ZGlvQ29udGV4dDo6Y2xvc2UoRE9NUHJvbWlzZURl
ZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKIHsKLSAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIp
OwotCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVs
ZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotCi0g
ICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gRGVsYXlOb2RlOjpjcmVhdGUoKnRoaXMs
IHNhbXBsZVJhdGUoKSwgbWF4RGVsYXlUaW1lKTsKLX0KKyAgICBpZiAoaXNPZmZsaW5lQ29udGV4
dCgpIHx8IGlzU3RvcHBlZCgpKSB7CisgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0
ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotRXhjZXB0aW9uT3I8UmVmPENoYW5u
ZWxTcGxpdHRlck5vZGU+PiBXZWJLaXRBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxTcGxpdHRl
cihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
Uik7CisgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkNsb3NlZCB8fCAhZGVzdGluYXRpb25Ob2Rl
KCkpIHsKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNjaGVkdWxl
ZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CisgICAg
YWRkUmVhY3Rpb24oU3RhdGU6OkNsb3NlZCwgV1RGTW92ZShwcm9taXNlKSk7CiAKICAgICBsYXp5
SW5pdGlhbGl6ZSgpOwotICAgIGF1dG8gbm9kZSA9IENoYW5uZWxTcGxpdHRlck5vZGU6OmNyZWF0
ZSgqdGhpcywgc2FtcGxlUmF0ZSgpLCBudW1iZXJPZk91dHB1dHMpOwotICAgIGlmICghbm9kZSkK
LSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07Ci0gICAgcmV0dXJu
IG5vZGUucmVsZWFzZU5vbk51bGwoKTsKLX0KIAotRXhjZXB0aW9uT3I8UmVmPENoYW5uZWxNZXJn
ZXJOb2RlPj4gV2ViS2l0QXVkaW9Db250ZXh0OjpjcmVhdGVDaGFubmVsTWVyZ2VyKHNpemVfdCBu
dW1iZXJPZklucHV0cykKLXsKLSAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwotCi0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotCi0gICAgbGF6eUlu
aXRpYWxpemUoKTsKLSAgICBhdXRvIG5vZGUgPSBDaGFubmVsTWVyZ2VyTm9kZTo6Y3JlYXRlKCp0
aGlzLCBzYW1wbGVSYXRlKCksIG51bWJlck9mSW5wdXRzKTsKLSAgICBpZiAoIW5vZGUpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIHJldHVybiBub2Rl
LnJlbGVhc2VOb25OdWxsKCk7CisgICAgZGVzdGluYXRpb25Ob2RlKCktPmNsb3NlKFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgc2V0U3RhdGUoU3RhdGU6
OkNsb3NlZCk7CisgICAgICAgIHVuaW5pdGlhbGl6ZSgpOworICAgIH0pOwogfQogCi1FeGNlcHRp
b25PcjxSZWY8T3NjaWxsYXRvck5vZGU+PiBXZWJLaXRBdWRpb0NvbnRleHQ6OmNyZWF0ZU9zY2ls
bGF0b3IoKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0KLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07Ci0KLSAgICBsYXp5SW5pdGlhbGl6
ZSgpOwotCi0gICAgUmVmPE9zY2lsbGF0b3JOb2RlPiBub2RlID0gT3NjaWxsYXRvck5vZGU6OmNy
ZWF0ZSgqdGhpcywgc2FtcGxlUmF0ZSgpKTsKLQotICAgIC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBB
dWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUsIHRoZSBjb250ZXh0IGtlZXBzIGEgcmVmZXJlbmNlIHVu
dGlsIGl0IGhhcyBmaW5pc2hlZCBwbGF5aW5nLgotICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBB
dWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6OmZpbmlzaCgpIGNhbGxzIFdlYktpdEF1ZGlvQ29udGV4
dDo6bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZygpLgotICAgIHJlZk5vZGUobm9kZSk7Ci0K
LSAgICByZXR1cm4gbm9kZTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmPFBlcmlvZGljV2F2ZT4+IFdl
YktpdEF1ZGlvQ29udGV4dDo6Y3JlYXRlUGVyaW9kaWNXYXZlKEZsb2F0MzJBcnJheSYgcmVhbCwg
RmxvYXQzMkFycmF5JiBpbWFnaW5hcnkpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVS
KTsKLQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1faXNTdG9wU2NoZWR1
bGVkKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKLQot
ICAgIGlmIChyZWFsLmxlbmd0aCgpICE9IGltYWdpbmFyeS5sZW5ndGgoKSB8fCAocmVhbC5sZW5n
dGgoKSA+IE1heFBlcmlvZGljV2F2ZUxlbmd0aCkgfHwgIXJlYWwubGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIGxhenlJbml0aWFsaXpl
KCk7Ci0gICAgcmV0dXJuIFBlcmlvZGljV2F2ZTo6Y3JlYXRlKHNhbXBsZVJhdGUoKSwgcmVhbCwg
aW1hZ2luYXJ5KTsKLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6Om5vdGlmeU5vZGVGaW5p
c2hlZFByb2Nlc3NpbmcoQXVkaW9Ob2RlKiBub2RlKQotewotICAgIEFTU0VSVChpc0F1ZGlvVGhy
ZWFkKCkpOwotICAgIG1fZmluaXNoZWROb2Rlcy5hcHBlbmQobm9kZSk7Ci19Ci0KLXZvaWQgV2Vi
S2l0QXVkaW9Db250ZXh0OjpkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKQotewotICAgIEFTU0VS
VChpc0dyYXBoT3duZXIoKSk7Ci0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSB8fCBpc0F1ZGlv
VGhyZWFkRmluaXNoZWQoKSk7Ci0gICAgZm9yIChhdXRvJiBub2RlIDogbV9maW5pc2hlZE5vZGVz
KQotICAgICAgICBkZXJlZk5vZGUoKm5vZGUpOwotCi0gICAgbV9maW5pc2hlZE5vZGVzLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgV2ViS2l0QXVkaW9Db250ZXh0OjpyZWZOb2RlKEF1ZGlvTm9kZSYgbm9k
ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEF1dG9Mb2NrZXIgbG9ja2Vy
KCp0aGlzKTsKLQotICAgIG5vZGUucmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwot
ICAgIG1fcmVmZXJlbmNlZE5vZGVzLmFwcGVuZCgmbm9kZSk7Ci19Ci0KLXZvaWQgV2ViS2l0QXVk
aW9Db250ZXh0OjpkZXJlZk5vZGUoQXVkaW9Ob2RlJiBub2RlKQotewotICAgIEFTU0VSVChpc0dy
YXBoT3duZXIoKSk7Ci0KLSAgICBub2RlLmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rp
b24pOwotCi0gICAgQVNTRVJUKG1fcmVmZXJlbmNlZE5vZGVzLmNvbnRhaW5zKCZub2RlKSk7Ci0g
ICAgbV9yZWZlcmVuY2VkTm9kZXMucmVtb3ZlRmlyc3QoJm5vZGUpOwotfQotCi12b2lkIFdlYktp
dEF1ZGlvQ29udGV4dDo6ZGVyZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSAmJiBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7Ci0gICAgZm9yIChh
dXRvJiBub2RlIDogbV9yZWZlcmVuY2VkTm9kZXMpCi0gICAgICAgIG5vZGUtPmRlcmVmKEF1ZGlv
Tm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwotCi0gICAgbV9yZWZlcmVuY2VkTm9kZXMuY2xlYXIo
KTsKLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6OmxvY2soYm9vbCYgbXVzdFJlbGVhc2VM
b2NrKQotewotICAgIC8vIERvbid0IGFsbG93IHJlZ3VsYXIgbG9jayBpbiByZWFsLXRpbWUgYXVk
aW8gdGhyZWFkLgotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBUaHJlYWQmIHRo
aXNUaHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKLQotICAgIGlmICgmdGhpc1RocmVhZCA9PSBt
X2dyYXBoT3duZXJUaHJlYWQpIHsKLSAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIHRoZSBsb2Nr
LgotICAgICAgICBtdXN0UmVsZWFzZUxvY2sgPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBBY3F1aXJlIHRoZSBsb2NrLgotICAgICAgICBtX2NvbnRleHRHcmFwaE11dGV4LmxvY2so
KTsKLSAgICAgICAgbV9ncmFwaE93bmVyVGhyZWFkID0gJnRoaXNUaHJlYWQ7Ci0gICAgICAgIG11
c3RSZWxlYXNlTG9jayA9IHRydWU7Ci0gICAgfQotfQotCi1ib29sIFdlYktpdEF1ZGlvQ29udGV4
dDo6dHJ5TG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spCi17Ci0gICAgVGhyZWFkJiB0aGlzVGhy
ZWFkID0gVGhyZWFkOjpjdXJyZW50KCk7Ci0gICAgYm9vbCBpc0F1ZGlvVGhyZWFkID0gJnRoaXNU
aHJlYWQgPT0gYXVkaW9UaHJlYWQoKTsKLQotICAgIC8vIFRyeSB0byBjYXRjaCBjYXNlcyBvZiB1
c2luZyB0cnkgbG9jayBvbiBtYWluIHRocmVhZCAtIGl0IHNob3VsZCB1c2UgcmVndWxhciBsb2Nr
LgotICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkIHx8IGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpKTsK
LQotICAgIGlmICghaXNBdWRpb1RocmVhZCkgewotICAgICAgICAvLyBJbiByZWxlYXNlIGJ1aWxk
IHRyZWF0IHRyeUxvY2soKSBhcyBsb2NrKCkgKHNpbmNlIGFib3ZlIEFTU0VSVChpc0F1ZGlvVGhy
ZWFkKSBuZXZlciBmaXJlcykgLSB0aGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkby4KLSAgICAgICAg
bG9jayhtdXN0UmVsZWFzZUxvY2spOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBib29sIGhhc0xvY2s7Ci0KLSAgICBpZiAoJnRoaXNUaHJlYWQgPT0gbV9ncmFwaE93bmVyVGhy
ZWFkKSB7Ci0gICAgICAgIC8vIFRocmVhZCBhbHJlYWR5IGhhcyB0aGUgbG9jay4KLSAgICAgICAg
aGFzTG9jayA9IHRydWU7Ci0gICAgICAgIG11c3RSZWxlYXNlTG9jayA9IGZhbHNlOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIERvbid0IGFscmVhZHkgaGF2ZSB0aGUgbG9jayAtIHRyeSB0byBh
Y3F1aXJlIGl0LgotICAgICAgICBoYXNMb2NrID0gbV9jb250ZXh0R3JhcGhNdXRleC50cnlMb2Nr
KCk7Ci0KLSAgICAgICAgaWYgKGhhc0xvY2spCi0gICAgICAgICAgICBtX2dyYXBoT3duZXJUaHJl
YWQgPSAmdGhpc1RocmVhZDsKLQotICAgICAgICBtdXN0UmVsZWFzZUxvY2sgPSBoYXNMb2NrOwot
ICAgIH0KLQotICAgIHJldHVybiBoYXNMb2NrOwotfQotCi12b2lkIFdlYktpdEF1ZGlvQ29udGV4
dDo6dW5sb2NrKCkKLXsKLSAgICBBU1NFUlQobV9ncmFwaE93bmVyVGhyZWFkID09ICZUaHJlYWQ6
OmN1cnJlbnQoKSk7Ci0KLSAgICBtX2dyYXBoT3duZXJUaHJlYWQgPSBudWxscHRyOwotICAgIG1f
Y29udGV4dEdyYXBoTXV0ZXgudW5sb2NrKCk7Ci19Ci0KLWJvb2wgV2ViS2l0QXVkaW9Db250ZXh0
Ojppc0F1ZGlvVGhyZWFkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hdWRpb1RocmVhZCA9PSAm
VGhyZWFkOjpjdXJyZW50KCk7Ci19Ci0KLWJvb2wgV2ViS2l0QXVkaW9Db250ZXh0Ojppc0dyYXBo
T3duZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2dyYXBoT3duZXJUaHJlYWQgPT0gJlRocmVh
ZDo6Y3VycmVudCgpOwotfQotCi12b2lkIFdlYktpdEF1ZGlvQ29udGV4dDo6YWRkRGVmZXJyZWRG
aW5pc2hEZXJlZihBdWRpb05vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQo
KSk7Ci0gICAgbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdC5hcHBlbmQobm9kZSk7Ci19Ci0KLXZv
aWQgV2ViS2l0QXVkaW9Db250ZXh0OjpoYW5kbGVQcmVSZW5kZXJUYXNrcygpCi17Ci0gICAgQVNT
RVJUKGlzQXVkaW9UaHJlYWQoKSk7Ci0KLSAgICAvLyBBdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5
IHJlbmRlciBxdWFudHVtLCB0cnkgdG8gdXBkYXRlIHRoZSBpbnRlcm5hbCByZW5kZXJpbmcgZ3Jh
cGggc3RhdGUgKGZyb20gbWFpbiB0aHJlYWQgY2hhbmdlcykuCi0gICAgLy8gSXQncyBPSyBpZiB0
aGUgdHJ5TG9jaygpIGZhaWxzLCB3ZSdsbCBqdXN0IHRha2Ugc2xpZ2h0bHkgbG9uZ2VyIHRvIHBp
Y2sgdXAgdGhlIGNoYW5nZXMuCi0gICAgYm9vbCBtdXN0UmVsZWFzZUxvY2s7Ci0gICAgaWYgKHRy
eUxvY2sobXVzdFJlbGVhc2VMb2NrKSkgewotICAgICAgICAvLyBGaXh1cCB0aGUgc3RhdGUgb2Yg
YW55IGRpcnR5IEF1ZGlvU3VtbWluZ0p1bmN0aW9ucyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4KLSAg
ICAgICAgaGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMoKTsKLSAgICAgICAgaGFuZGxl
RGlydHlBdWRpb05vZGVPdXRwdXRzKCk7Ci0KLSAgICAgICAgdXBkYXRlQXV0b21hdGljUHVsbE5v
ZGVzKCk7Ci0KLSAgICAgICAgaWYgKG11c3RSZWxlYXNlTG9jaykKLSAgICAgICAgICAgIHVubG9j
aygpOwotICAgIH0KLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6OmhhbmRsZVBvc3RSZW5k
ZXJUYXNrcygpCi17Ci0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7Ci0KLSAgICAvLyBNdXN0
IHVzZSBhIHRyeUxvY2soKSBoZXJlIHRvby4gRG9uJ3Qgd29ycnksIHRoZSBsb2NrIHdpbGwgdmVy
eSByYXJlbHkgYmUgY29udGVuZGVkIGFuZCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJlcXVlbnRs
eS4KLSAgICAvLyBUaGUgd29yc3QgdGhhdCBjYW4gaGFwcGVuIGlzIHRoYXQgdGhlcmUgd2lsbCBi
ZSBzb21lIG5vZGVzIHdoaWNoIHdpbGwgdGFrZSBzbGlnaHRseSBsb25nZXIgdGhhbiB1c3VhbCB0
byBiZSBkZWxldGVkIG9yIHJlbW92ZWQKLSAgICAvLyBmcm9tIHRoZSByZW5kZXIgZ3JhcGggKGlu
IHdoaWNoIGNhc2UgdGhleSdsbCByZW5kZXIgc2lsZW5jZSkuCi0gICAgYm9vbCBtdXN0UmVsZWFz
ZUxvY2s7Ci0gICAgaWYgKHRyeUxvY2sobXVzdFJlbGVhc2VMb2NrKSkgewotICAgICAgICAvLyBU
YWtlIGNhcmUgb2YgZmluaXNoaW5nIGFueSBkZXJlZnMgd2hlcmUgdGhlIHRyeUxvY2soKSBmYWls
ZWQgcHJldmlvdXNseS4KLSAgICAgICAgaGFuZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKTsKLQot
ICAgICAgICAvLyBEeW5hbWljYWxseSBjbGVhbiB1cCBub2RlcyB3aGljaCBhcmUgbm8gbG9uZ2Vy
IG5lZWRlZC4KLSAgICAgICAgZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVzKCk7Ci0KLSAgICAgICAg
Ly8gRG9uJ3QgZGVsZXRlIGluIHRoZSByZWFsLXRpbWUgdGhyZWFkLiBMZXQgdGhlIG1haW4gdGhy
ZWFkIGRvIGl0LgotICAgICAgICAvLyBSZWYtY291bnRlZCBvYmplY3RzIGhlbGQgYnkgY2VydGFp
biBBdWRpb05vZGVzIG1heSBub3QgYmUgdGhyZWFkLXNhZmUuCi0gICAgICAgIHNjaGVkdWxlTm9k
ZURlbGV0aW9uKCk7Ci0KLSAgICAgICAgLy8gRml4dXAgdGhlIHN0YXRlIG9mIGFueSBkaXJ0eSBB
dWRpb1N1bW1pbmdKdW5jdGlvbnMgYW5kIEF1ZGlvTm9kZU91dHB1dHMuCi0gICAgICAgIGhhbmRs
ZURpcnR5QXVkaW9TdW1taW5nSnVuY3Rpb25zKCk7Ci0gICAgICAgIGhhbmRsZURpcnR5QXVkaW9O
b2RlT3V0cHV0cygpOwotCi0gICAgICAgIHVwZGF0ZUF1dG9tYXRpY1B1bGxOb2RlcygpOwotCi0g
ICAgICAgIGlmIChtdXN0UmVsZWFzZUxvY2spCi0gICAgICAgICAgICB1bmxvY2soKTsKLSAgICB9
Ci19Ci0KLXZvaWQgV2ViS2l0QXVkaW9Db250ZXh0OjpoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVm
cygpCi17Ci0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSAmJiBpc0dyYXBoT3duZXIoKSk7Ci0g
ICAgZm9yIChhdXRvJiBub2RlIDogbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdCkKLSAgICAgICAg
bm9kZS0+ZmluaXNoRGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0KLSAgICBt
X2RlZmVycmVkRmluaXNoRGVyZWZMaXN0LmNsZWFyKCk7Ci19Ci0KLXZvaWQgV2ViS2l0QXVkaW9D
b250ZXh0OjptYXJrRm9yRGVsZXRpb24oQXVkaW9Ob2RlJiBub2RlKQotewotICAgIEFTU0VSVChp
c0dyYXBoT3duZXIoKSk7Ci0KLSAgICBpZiAoaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpCi0gICAg
ICAgIG1fbm9kZXNUb0RlbGV0ZS5hcHBlbmQoJm5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgbV9u
b2Rlc01hcmtlZEZvckRlbGV0aW9uLmFwcGVuZCgmbm9kZSk7Ci0KLSAgICAvLyBUaGlzIGlzIHBy
b2JhYmx5IHRoZSBiZXN0IHRpbWUgZm9yIHVzIHRvIHJlbW92ZSB0aGUgbm9kZSBmcm9tIGF1dG9t
YXRpYyBwdWxsIGxpc3QsCi0gICAgLy8gc2luY2UgYWxsIGNvbm5lY3Rpb25zIGFyZSBnb25lIGFu
ZCB3ZSBob2xkIHRoZSBncmFwaCBsb2NrLiBUaGVuIHdoZW4gaGFuZGxlUG9zdFJlbmRlclRhc2tz
KCkKLSAgICAvLyBnZXRzIGEgY2hhbmNlIHRvIHNjaGVkdWxlIHRoZSBkZWxldGlvbiB3b3JrLCB1
cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKSBhbHNvIGdldHMgYSBjaGFuY2UgdG8KLSAgICAvLyBt
b2RpZnkgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuCi0gICAgcmVtb3ZlQXV0b21hdGlj
UHVsbE5vZGUobm9kZSk7Ci19Ci0KLXZvaWQgV2ViS2l0QXVkaW9Db250ZXh0OjpzY2hlZHVsZU5v
ZGVEZWxldGlvbigpCi17Ci0gICAgYm9vbCBpc0dvb2QgPSBtX2lzSW5pdGlhbGl6ZWQgJiYgaXNH
cmFwaE93bmVyKCk7Ci0gICAgQVNTRVJUKGlzR29vZCk7Ci0gICAgaWYgKCFpc0dvb2QpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIE1ha2Ugc3VyZSB0byBjYWxsIGRlbGV0ZU1hcmtlZE5vZGVz
KCkgb24gbWFpbiB0aHJlYWQuCi0gICAgaWYgKG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5zaXpl
KCkgJiYgIW1faXNEZWxldGlvblNjaGVkdWxlZCkgewotICAgICAgICBtX25vZGVzVG9EZWxldGUu
YXBwZW5kVmVjdG9yKG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbik7Ci0gICAgICAgIG1fbm9kZXNN
YXJrZWRGb3JEZWxldGlvbi5jbGVhcigpOwotCi0gICAgICAgIG1faXNEZWxldGlvblNjaGVkdWxl
ZCA9IHRydWU7Ci0KLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXSgpIG11dGFibGUgewotICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGVs
ZXRlTWFya2VkTm9kZXMoKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCi12b2lkIFdlYktpdEF1
ZGlvQ29udGV4dDo6ZGVsZXRlTWFya2VkTm9kZXMoKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICAvLyBQcm90ZWN0IHRoaXMgb2JqZWN0IGZyb20gYmVpbmcgZGVsZXRlZCBi
ZWZvcmUgd2UgcmVsZWFzZSB0aGUgbXV0ZXggbG9ja2VkIGJ5IEF1dG9Mb2NrZXIuCi0gICAgUmVm
PFdlYktpdEF1ZGlvQ29udGV4dD4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0gICAgewotICAgICAg
ICBBdXRvTG9ja2VyIGxvY2tlcigqdGhpcyk7Ci0KLSAgICAgICAgd2hpbGUgKG1fbm9kZXNUb0Rl
bGV0ZS5zaXplKCkpIHsKLSAgICAgICAgICAgIEF1ZGlvTm9kZSogbm9kZSA9IG1fbm9kZXNUb0Rl
bGV0ZS50YWtlTGFzdCgpOwotCi0gICAgICAgICAgICAvLyBCZWZvcmUgZGVsZXRpbmcgdGhlIG5v
ZGUsIGNsZWFyIG91dCBhbnkgQXVkaW9Ob2RlSW5wdXRzIGZyb20gbV9kaXJ0eVN1bW1pbmdKdW5j
dGlvbnMuCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0cyA9IG5vZGUtPm51bWJl
ck9mSW5wdXRzKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVy
T2ZJbnB1dHM7ICsraSkKLSAgICAgICAgICAgICAgICBtX2RpcnR5U3VtbWluZ0p1bmN0aW9ucy5y
ZW1vdmUobm9kZS0+aW5wdXQoaSkpOwotCi0gICAgICAgICAgICAvLyBCZWZvcmUgZGVsZXRpbmcg
dGhlIG5vZGUsIGNsZWFyIG91dCBhbnkgQXVkaW9Ob2RlT3V0cHV0cyBmcm9tIG1fZGlydHlBdWRp
b05vZGVPdXRwdXRzLgotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzID0gbm9k
ZS0+bnVtYmVyT2ZPdXRwdXRzKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZPdXRwdXRzOyArK2kpCi0gICAgICAgICAgICAgICAgbV9kaXJ0eUF1ZGlvTm9k
ZU91dHB1dHMucmVtb3ZlKG5vZGUtPm91dHB1dChpKSk7Ci0KLSAgICAgICAgICAgIC8vIEZpbmFs
bHksIGRlbGV0ZSBpdC4KLSAgICAgICAgICAgIGRlbGV0ZSBub2RlOwotICAgICAgICB9Ci0gICAg
ICAgIG1faXNEZWxldGlvblNjaGVkdWxlZCA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBXZWJL
aXRBdWRpb0NvbnRleHQ6Om1hcmtTdW1taW5nSnVuY3Rpb25EaXJ0eShBdWRpb1N1bW1pbmdKdW5j
dGlvbiogc3VtbWluZ0p1bmN0aW9uKQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7Ci0g
ICAgbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMuYWRkKHN1bW1pbmdKdW5jdGlvbik7Ci19Ci0KLXZv
aWQgV2ViS2l0QXVkaW9Db250ZXh0OjpyZW1vdmVNYXJrZWRTdW1taW5nSnVuY3Rpb24oQXVkaW9T
dW1taW5nSnVuY3Rpb24qIHN1bW1pbmdKdW5jdGlvbikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIEF1dG9Mb2NrZXIgbG9ja2VyKCp0aGlzKTsKLSAgICBtX2RpcnR5U3VtbWlu
Z0p1bmN0aW9ucy5yZW1vdmUoc3VtbWluZ0p1bmN0aW9uKTsKLX0KLQotRXZlbnRUYXJnZXRJbnRl
cmZhY2UgV2ViS2l0QXVkaW9Db250ZXh0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIFdlYktpdEF1ZGlvQ29udGV4dEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsK
LX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6Om1hcmtBdWRpb05vZGVPdXRwdXREaXJ0eShB
dWRpb05vZGVPdXRwdXQqIG91dHB1dCkKLXsKLSAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwot
ICAgIG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmFkZChvdXRwdXQpOwotfQotCi12b2lkIFdlYktp
dEF1ZGlvQ29udGV4dDo6aGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMoKQotewotICAg
IEFTU0VSVChpc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGp1bmN0aW9uIDogbV9k
aXJ0eVN1bW1pbmdKdW5jdGlvbnMpCi0gICAgICAgIGp1bmN0aW9uLT51cGRhdGVSZW5kZXJpbmdT
dGF0ZSgpOwotCi0gICAgbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMuY2xlYXIoKTsKLX0KLQotdm9p
ZCBXZWJLaXRBdWRpb0NvbnRleHQ6OmhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpCi17Ci0g
ICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKLQotICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9k
aXJ0eUF1ZGlvTm9kZU91dHB1dHMpCi0gICAgICAgIG91dHB1dC0+dXBkYXRlUmVuZGVyaW5nU3Rh
dGUoKTsKLQotICAgIG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmNsZWFyKCk7Ci19Ci0KLXZvaWQg
V2ViS2l0QXVkaW9Db250ZXh0OjphZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmIG5vZGUp
Ci17Ci0gICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKLQotICAgIGlmIChtX2F1dG9tYXRpY1B1
bGxOb2Rlcy5hZGQoJm5vZGUpLmlzTmV3RW50cnkpCi0gICAgICAgIG1fYXV0b21hdGljUHVsbE5v
ZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6OnJl
bW92ZUF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9kZSYgbm9kZSkKLXsKLSAgICBBU1NFUlQoaXNH
cmFwaE93bmVyKCkpOwotCi0gICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzLnJlbW92ZSgmbm9k
ZSkpCi0gICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKLX0K
LQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6OnVwZGF0ZUF1dG9tYXRpY1B1bGxOb2RlcygpCi17
Ci0gICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKLQotICAgIGlmIChtX2F1dG9tYXRpY1B1bGxO
b2Rlc05lZWRVcGRhdGluZykgewotICAgICAgICAvLyBDb3B5IGZyb20gbV9hdXRvbWF0aWNQdWxs
Tm9kZXMgdG8gbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuCi0gICAgICAgIG1fcmVuZGVy
aW5nQXV0b21hdGljUHVsbE5vZGVzLnJlc2l6ZShtX2F1dG9tYXRpY1B1bGxOb2Rlcy5zaXplKCkp
OwotCi0gICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6
IG1fYXV0b21hdGljUHVsbE5vZGVzKQotICAgICAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQ
dWxsTm9kZXNbaSsrXSA9IG91dHB1dDsKLQotICAgICAgICBtX2F1dG9tYXRpY1B1bGxOb2Rlc05l
ZWRVcGRhdGluZyA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6
OnByb2Nlc3NBdXRvbWF0aWNQdWxsTm9kZXMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAg
ICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKLQotICAgIGZvciAoYXV0byYgbm9kZSA6IG1fcmVu
ZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzKQotICAgICAgICBub2RlLT5wcm9jZXNzSWZOZWNlc3Nh
cnkoZnJhbWVzVG9Qcm9jZXNzKTsKLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6Om5vZGVX
aWxsQmVnaW5QbGF5YmFjaygpCi17Ci0gICAgLy8gQ2FsbGVkIGJ5IHNjaGVkdWxlZCBBdWRpb05v
ZGVzIHdoZW4gY2xpZW50cyBzY2hlZHVsZSB0aGVpciBzdGFydCB0aW1lcy4KLSAgICAvLyBQcmlv
ciB0byB0aGUgaW50cm9kdWN0aW9uIG9mIHN1c3BlbmQoKSwgcmVzdW1lKCksIGFuZCBzdG9wKCks
IHN0YXJ0aW5nCi0gICAgLy8gYSBzY2hlZHVsZWQgQXVkaW9Ob2RlIHdvdWxkIHJlbW92ZSB0aGUg
dXNlci1nZXN0dXJlIHJlc3RyaWN0aW9uLCBpZiBwcmVzZW50LAotICAgIC8vIGFuZCB3b3VsZCB0
aHVzIHVubXV0ZSB0aGUgY29udGV4dC4gTm93IHRoYXQgQXVkaW9Db250ZXh0IHN0YXlzIGluIHRo
ZQotICAgIC8vICJzdXNwZW5kZWQiIHN0YXRlIGlmIGEgdXNlci1nZXN0dXJlIHJlc3RyaWN0aW9u
IGlzIHByZXNlbnQsIHN0YXJ0aW5nIGEKLSAgICAvLyBzY2hlZHVsZSBBdWRpb05vZGUgc2hvdWxk
IHNldCB0aGUgc3RhdGUgdG8gInJ1bm5pbmciLCBidXQgb25seSBpZiB0aGUKLSAgICAvLyB1c2Vy
LWdlc3R1cmUgcmVzdHJpY3Rpb24gaXMgc2V0LgotICAgIGlmICh1c2VyR2VzdHVyZVJlcXVpcmVk
Rm9yQXVkaW9TdGFydCgpKQotICAgICAgICBzdGFydFJlbmRlcmluZygpOwotfQotCi1zdGF0aWMg
Ym9vbCBzaG91bGREb2N1bWVudEFsbG93V2ViQXVkaW9Ub0F1dG9QbGF5KGNvbnN0IERvY3VtZW50
JiBkb2N1bWVudCkKLXsKLSAgICBpZiAoZG9jdW1lbnQucHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9y
TWVkaWEoKSB8fCBkb2N1bWVudC5pc0NhcHR1cmluZygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzKCkuc2hvdWxkQXV0b3BsYXlXZWJBdWRpb0ZvckFy
Yml0cmFyeVVzZXJHZXN0dXJlKCkgJiYgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS5oYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oKTsKLX0KLQotYm9vbCBXZWJLaXRBdWRpb0NvbnRleHQ6OndpbGxCZWdpblBs
YXliYWNrKCkKLXsKLSAgICBhdXRvKiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7Ci0gICAg
aWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHVzZXJHZXN0
dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKLSAgICAgICAgaWYgKCFzaG91bGREb2N1bWVu
dEFsbG93V2ViQXVkaW9Ub0F1dG9QbGF5KCpkb2N1bWVudCkpIHsKLSAgICAgICAgICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBmYWxzZSwgbm90IHByb2Nlc3NpbmcgdXNl
ciBnZXN0dXJlIG9yIGNhcHR1cmluZyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oV2ViS2l0QXVkaW9Db250
ZXh0OjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwotICAgIH0K
LQotICAgIGlmIChwYWdlQ29uc2VudFJlcXVpcmVkRm9yQXVkaW9TdGFydCgpKSB7Ci0gICAgICAg
IGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOwotICAgICAgICBpZiAocGFnZSAmJiAhcGFn
ZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5T
dGFydExpc3RlbmVyKCp0aGlzKTsKLSAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
UiwgInJldHVybmluZyBmYWxzZSwgcGFnZSBkb2Vzbid0IGFsbG93IG1lZGlhIHRvIHN0YXJ0Iik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlQmVo
YXZpb3JSZXN0cmljdGlvbihXZWJLaXRBdWRpb0NvbnRleHQ6OlJlcXVpcmVQYWdlQ29uc2VudEZv
ckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7Ci0gICAgfQotCi0gICAgYXV0byB3aWxsQmVnaW4gPSBt
X21lZGlhU2Vzc2lvbi0+Y2xpZW50V2lsbEJlZ2luUGxheWJhY2soKTsKLSAgICBBTFdBWVNfTE9H
KExPR0lERU5USUZJRVIsICJyZXR1cm5pbmcgIiwgd2lsbEJlZ2luKTsKLQotICAgIHJldHVybiB3
aWxsQmVnaW47Ci19Ci0KLWJvb2wgV2ViS2l0QXVkaW9Db250ZXh0Ojp3aWxsUGF1c2VQbGF5YmFj
aygpCi17Ci0gICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwotICAgIGlmICgh
ZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh1c2VyR2VzdHVyZVJl
cXVpcmVkRm9yQXVkaW9TdGFydCgpKSB7Ci0gICAgICAgIGlmICghZG9jdW1lbnQtPnByb2Nlc3Np
bmdVc2VyR2VzdHVyZUZvck1lZGlhKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oV2ViS2l0QXVkaW9Db250ZXh0OjpSZXF1aXJl
VXNlckdlc3R1cmVGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChw
YWdlQ29uc2VudFJlcXVpcmVkRm9yQXVkaW9TdGFydCgpKSB7Ci0gICAgICAgIGF1dG8qIHBhZ2Ug
PSBkb2N1bWVudC0+cGFnZSgpOwotICAgICAgICBpZiAocGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRN
ZWRpYSgpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVy
KCp0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBy
ZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKFdlYktpdEF1ZGlvQ29udGV4dDo6UmVxdWlyZVBhZ2VD
b25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9t
ZWRpYVNlc3Npb24tPmNsaWVudFdpbGxQYXVzZVBsYXliYWNrKCk7Ci19Ci0KLXZvaWQgV2ViS2l0
QXVkaW9Db250ZXh0OjpzdGFydFJlbmRlcmluZygpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVO
VElGSUVSKTsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQgfHwgIXdpbGxCZWdpblBsYXliYWNr
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1ha2VQZW5kaW5nQWN0aXZpdHkoKTsKLQotICAg
IGRlc3RpbmF0aW9uKCktPnN0YXJ0UmVuZGVyaW5nKCk7Ci0gICAgc2V0U3RhdGUoU3RhdGU6OlJ1
bm5pbmcpOwotfQotCi12b2lkIFdlYktpdEF1ZGlvQ29udGV4dDo6bWVkaWFDYW5TdGFydChEb2N1
bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChkb2N1bWVudCwgJmRvY3VtZW50
ID09IHRoaXMtPmRvY3VtZW50KCkpOwotICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oV2Vi
S2l0QXVkaW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rp
b24pOwotICAgIG1heVJlc3VtZVBsYXliYWNrKHRydWUpOwotfQotCi1NZWRpYVByb2R1Y2VyOjpN
ZWRpYVN0YXRlRmxhZ3MgV2ViS2l0QXVkaW9Db250ZXh0OjptZWRpYVN0YXRlKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1faXNTdG9wU2NoZWR1bGVkICYmIG1fZGVzdGluYXRpb25Ob2RlICYmIG1fZGVz
dGluYXRpb25Ob2RlLT5pc1BsYXlpbmdBdWRpbygpKQotICAgICAgICByZXR1cm4gTWVkaWFQcm9k
dWNlcjo6SXNQbGF5aW5nQXVkaW87Ci0KLSAgICByZXR1cm4gTWVkaWFQcm9kdWNlcjo6SXNOb3RQ
bGF5aW5nOwotfQotCi12b2lkIFdlYktpdEF1ZGlvQ29udGV4dDo6cGFnZU11dGVkU3RhdGVEaWRD
aGFuZ2UoKQotewotICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZSAmJiBkb2N1bWVudCgpICYmIGRv
Y3VtZW50KCktPnBhZ2UoKSkKLSAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPnNldE11dGVkKGRv
Y3VtZW50KCktPnBhZ2UoKS0+aXNBdWRpb011dGVkKCkpOwotfQotCi12b2lkIFdlYktpdEF1ZGlv
Q29udGV4dDo6aXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKQotewotICAgIC8vIE1ha2Ugc3VyZSB0
byBjYWxsIERvY3VtZW50Ojp1cGRhdGVJc1BsYXlpbmdNZWRpYSgpIG9uIHRoZSBtYWluIHRocmVh
ZCwgc2luY2UKLSAgICAvLyB3ZSBjb3VsZCBiZSBvbiB0aGUgYXVkaW8gSS9PIHRocmVhZCBoZXJl
IGFuZCB0aGUgY2FsbCBpbnRvIFdlYkNvcmUgY291bGQgYmxvY2suCi0gICAgY2FsbE9uTWFpblRo
cmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgIGlmIChwcm90
ZWN0ZWRUaGlzLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZG9jdW1l
bnQoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJLaXRB
dWRpb0NvbnRleHQ6OmZpbmlzaGVkUmVuZGVyaW5nKGJvb2wgZGlkUmVuZGVyaW5nKQotewotICAg
IEFTU0VSVChpc09mZmxpbmVDb250ZXh0KCkpOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgaWYgKCFpc01haW5UaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBj
bGVhclBlbmRpbmdBY3Rpdml0eUlmRXhpdEVhcmx5ID0gV1RGOjptYWtlU2NvcGVFeGl0KFt0aGlz
XSB7Ci0gICAgICAgIGNsZWFyUGVuZGluZ0FjdGl2aXR5KCk7Ci0gICAgfSk7Ci0KLQotICAgIEFM
V0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0KLSAgICBpZiAoIWRpZFJlbmRlcmluZykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQXVkaW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyID0gbV9yZW5kZXJU
YXJnZXQuZ2V0KCk7Ci0gICAgc2V0U3RhdGUoU3RhdGU6OkNsb3NlZCk7Ci0KLSAgICBBU1NFUlQo
cmVuZGVyZWRCdWZmZXIpOwotICAgIGlmICghcmVuZGVyZWRCdWZmZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIEF2b2lkIGZpcmluZyB0aGUgZXZlbnQgaWYgdGhlIGRvY3VtZW50IGhhcyBh
bHJlYWR5IGdvbmUgYXdheS4KLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGNsZWFyUGVuZGluZ0FjdGl2aXR5SWZFeGl0RWFybHkucmVsZWFzZSgpOwot
ICAgIG1fZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dDo6Y3JlYXRlKHJlbmRlcmVkQnVmZmVyKSk7Ci19Ci0KLXZvaWQgV2ViS2l0QXVkaW9Db250ZXh0
OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKLXsKLSAgICBFdmVudFRhcmdldDo6ZGlzcGF0
Y2hFdmVudChldmVudCk7Ci0gICAgaWYgKGV2ZW50LmV2ZW50SW50ZXJmYWNlKCkgPT0gT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50SW50ZXJmYWNlVHlwZSkKLSAgICAgICAgY2xlYXJQZW5kaW5n
QWN0aXZpdHkoKTsKLX0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6OmluY3JlbWVudEFjdGl2
ZVNvdXJjZUNvdW50KCkKLXsKLSAgICArK21fYWN0aXZlU291cmNlQ291bnQ7Ci19Ci0KLXZvaWQg
V2ViS2l0QXVkaW9Db250ZXh0OjpkZWNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpCi17Ci0gICAg
LS1tX2FjdGl2ZVNvdXJjZUNvdW50OwotfQotCi12b2lkIFdlYktpdEF1ZGlvQ29udGV4dDo6c3Vz
cGVuZFJlbmRlcmluZyhET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQotewotICAg
IGlmIChpc09mZmxpbmVDb250ZXh0KCkgfHwgbV9pc1N0b3BTY2hlZHVsZWQpIHsKLSAgICAgICAg
cHJvbWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlN1c3BlbmRlZCkgewotICAgICAgICBwcm9t
aXNlLnJlc29sdmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpDbG9zZWQgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6SW50ZXJydXB0ZWQgfHwgIW1f
ZGVzdGluYXRpb25Ob2RlKSB7Ci0gICAgICAgIHByb21pc2UucmVqZWN0KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhZGRSZWFjdGlvbihTdGF0ZTo6U3VzcGVuZGVkLCBXVEZNb3Zl
KHByb21pc2UpKTsKLQotICAgIGlmICghd2lsbFBhdXNlUGxheWJhY2soKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbGF6eUluaXRpYWxpemUoKTsKLQotICAgIG1fZGVzdGluYXRpb25Ob2RlLT5z
dXNwZW5kKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAg
c2V0U3RhdGUoU3RhdGU6OlN1c3BlbmRlZCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViS2l0QXVk
aW9Db250ZXh0OjpyZXN1bWVSZW5kZXJpbmcoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJv
bWlzZSkKLXsKLSAgICBpZiAoaXNPZmZsaW5lQ29udGV4dCgpIHx8IG1faXNTdG9wU2NoZWR1bGVk
KSB7Ci0gICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpSdW5uaW5nKSB7Ci0g
ICAgICAgIHByb21pc2UucmVzb2x2ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCB8fCAhbV9kZXN0aW5hdGlvbk5vZGUpIHsKLSAg
ICAgICAgcHJvbWlzZS5yZWplY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGFk
ZFJlYWN0aW9uKFN0YXRlOjpSdW5uaW5nLCBXVEZNb3ZlKHByb21pc2UpKTsKLQotICAgIGlmICgh
d2lsbEJlZ2luUGxheWJhY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF6eUluaXRpYWxp
emUoKTsKLQotICAgIG1fZGVzdGluYXRpb25Ob2RlLT5yZXN1bWUoW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6UnVubmluZyk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViS2l0QXVkaW9Db250ZXh0OjpjbG9zZShET01Qcm9taXNl
RGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQotewotICAgIGlmIChpc09mZmxpbmVDb250ZXh0KCkg
fHwgbV9pc1N0b3BTY2hlZHVsZWQpIHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52YWxpZFN0
YXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc3RhdGUgPT0g
U3RhdGU6OkNsb3NlZCB8fCAhbV9kZXN0aW5hdGlvbk5vZGUpIHsKLSAgICAgICAgcHJvbWlzZS5y
ZXNvbHZlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRSZWFjdGlvbihTdGF0
ZTo6Q2xvc2VkLCBXVEZNb3ZlKHByb21pc2UpKTsKLQotICAgIGxhenlJbml0aWFsaXplKCk7Ci0K
LSAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+Y2xvc2UoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKV0gewotICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6Q2xvc2VkKTsKLSAgICAgICAg
dW5pbml0aWFsaXplKCk7Ci0gICAgfSk7Ci19Ci0KLQotdm9pZCBXZWJLaXRBdWRpb0NvbnRleHQ6
OnN1c3BlbmRQbGF5YmFjaygpCi17Ci0gICAgaWYgKCFtX2Rlc3RpbmF0aW9uTm9kZSB8fCBtX3N0
YXRlID09IFN0YXRlOjpDbG9zZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKLSAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5zdGF0
ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZCkKLSAgICAgICAgICAgIHNl
dFN0YXRlKFN0YXRlOjpJbnRlcnJ1cHRlZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBsYXp5SW5pdGlhbGl6ZSgpOwotCi0gICAgbV9kZXN0aW5hdGlvbk5vZGUtPnN1c3BlbmQoW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICBib29sIGludGVy
cnVwdGVkID0gbV9tZWRpYVNlc3Npb24tPnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246
OkludGVycnVwdGVkOwotICAgICAgICBzZXRTdGF0ZShpbnRlcnJ1cHRlZCA/IFN0YXRlOjpJbnRl
cnJ1cHRlZCA6IFN0YXRlOjpTdXNwZW5kZWQpOwotICAgIH0pOwotfQotCi12b2lkIFdlYktpdEF1
ZGlvQ29udGV4dDo6bWF5UmVzdW1lUGxheWJhY2soYm9vbCBzaG91bGRSZXN1bWUpCi17Ci0gICAg
aWYgKCFtX2Rlc3RpbmF0aW9uTm9kZSB8fCBtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQgfHwgbV9z
dGF0ZSA9PSBTdGF0ZTo6UnVubmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzaG91
bGRSZXN1bWUpIHsKLSAgICAgICAgc2V0U3RhdGUoU3RhdGU6OlN1c3BlbmRlZCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXdpbGxCZWdpblBsYXliYWNrKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGxhenlJbml0aWFsaXplKCk7Ci0KLSAgICBtX2Rlc3RpbmF0aW9uTm9k
ZS0+cmVzdW1lKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAg
ICAgc2V0U3RhdGUoU3RhdGU6OlJ1bm5pbmcpOwotICAgIH0pOwotfQotCi12b2lkIFdlYktpdEF1
ZGlvQ29udGV4dDo6cG9zdFRhc2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgdGFzaykKLXsKLSAg
ICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soV1RGTW92ZSh0YXNrKSk7Ci19Ci0KLWNvbnN0IFNl
Y3VyaXR5T3JpZ2luKiBXZWJLaXRBdWRpb0NvbnRleHQ6Om9yaWdpbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA/IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKSA6IG51bGxwdHI7Ci19Ci0KLXZvaWQgV2ViS2l0QXVkaW9Db250
ZXh0OjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVs
IGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCkKLSAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xl
TWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJLaXRBdWRpb0Nv
bnRleHQ6OmNsZWFyUGVuZGluZ0FjdGl2aXR5KCkKLXsKLSAgICBpZiAoIW1fcGVuZGluZ0FjdGl2
aXR5KQotICAgICAgICByZXR1cm47Ci0gICAgbV9wZW5kaW5nQWN0aXZpdHkgPSBudWxscHRyOwot
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBzcGVjaWZpYyBkZXJlZigpIGFuZCByZWYoKSBjYWxs
IGluIG1ha2VQZW5kaW5nQWN0aXZpdHkoKS4KLSAgICBkZXJlZigpOwotfQotCi12b2lkIFdlYktp
dEF1ZGlvQ29udGV4dDo6bWFrZVBlbmRpbmdBY3Rpdml0eSgpCi17Ci0gICAgaWYgKG1fcGVuZGlu
Z0FjdGl2aXR5KQotICAgICAgICByZXR1cm47Ci0gICAgbV9wZW5kaW5nQWN0aXZpdHkgPSBBY3Rp
dmVET01PYmplY3Q6Om1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwotICAgIHJlZigpOwotfQot
Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi1XVEZMb2dDaGFubmVsJiBXZWJLaXRBdWRpb0Nv
bnRleHQ6OmxvZ0NoYW5uZWwoKSBjb25zdAotewotICAgIHJldHVybiBMb2dNZWRpYTsKLX0KLSNl
bmRpZgotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XZWJLaXRB
dWRpb0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2ViS2l0QXVk
aW9Db250ZXh0LmgKaW5kZXggZTlhYmI3OTg5YjI3NzNhZTBjMWMxNjk4YjQyMDc1MmY3NmY0NWFk
NS4uZDNkNTY5NmU2ZGFmNWQ0MzA4NmEzZjRmMzllMjZlNDFjOGQyOGFhNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XZWJLaXRBdWRpb0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1ZGlvQ29udGV4dC5oCkBA
IC0yNSwxMTIgKzI1LDMzIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWN0aXZlRE9N
T2JqZWN0LmgiCi0jaW5jbHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKLSNpbmNsdWRlICJBdWRp
b0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgotI2luY2x1ZGUgIkF1ZGlvQ29udGV4
dFN0YXRlLmgiCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKLSNpbmNsdWRlICJF
dmVudFRhcmdldC5oIgotI2luY2x1ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgotI2luY2x1
ZGUgIk1lZGlhUHJvZHVjZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbi5oIgot
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJWaXNpYmlsaXR5
Q2hhbmdlQ2xpZW50LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29uc29sZVR5cGVzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8YXRv
bWljPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0xvZ2dlckhlbHBl
ci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSAi
QmFzZUF1ZGlvQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEFuYWx5
c2VyTm9kZTsKIGNsYXNzIEF1ZGlvQnVmZmVyOwotY2xhc3MgQXVkaW9CdWZmZXJDYWxsYmFjazsK
LWNsYXNzIEF1ZGlvQnVmZmVyU291cmNlTm9kZTsKLWNsYXNzIEF1ZGlvTGlzdGVuZXI7Ci1jbGFz
cyBBdWRpb1N1bW1pbmdKdW5jdGlvbjsKLWNsYXNzIEJpcXVhZEZpbHRlck5vZGU7Ci1jbGFzcyBD
aGFubmVsTWVyZ2VyTm9kZTsKLWNsYXNzIENoYW5uZWxTcGxpdHRlck5vZGU7Ci1jbGFzcyBDb252
b2x2ZXJOb2RlOwotY2xhc3MgRGVsYXlOb2RlOwogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBEeW5h
bWljc0NvbXByZXNzb3JOb2RlOwotY2xhc3MgR2Fpbk5vZGU7CiBjbGFzcyBIVE1MTWVkaWFFbGVt
ZW50OwotY2xhc3MgTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOwogY2xhc3MgTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlOwogY2xhc3MgTWVkaWFTdHJlYW07CiBjbGFzcyBNZWRpYVN0cmVh
bUF1ZGlvRGVzdGluYXRpb25Ob2RlOwogY2xhc3MgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU7
Ci1jbGFzcyBPc2NpbGxhdG9yTm9kZTsKLWNsYXNzIFBlcmlvZGljV2F2ZTsKLWNsYXNzIFNjcmlw
dFByb2Nlc3Nvck5vZGU7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFdhdmVTaGFwZXJO
b2RlOwogY2xhc3MgV2ViS2l0QXVkaW9QYW5uZXJOb2RlOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPiBjbGFzcyBET01Qcm9taXNlRGVmZXJyZWQ7Ci0KIC8vIEF1ZGlvQ29udGV4dCBpcyB0
aGUgY29ybmVyc3RvbmUgb2YgdGhlIHdlYiBhdWRpbyBBUEkgYW5kIGFsbCBBdWRpb05vZGVzIGFy
ZSBjcmVhdGVkIGZyb20gaXQuCiAvLyBGb3IgdGhyZWFkIHNhZmV0eSBiZXR3ZWVuIHRoZSBhdWRp
byB0aHJlYWQgYW5kIHRoZSBtYWluIHRocmVhZCwgaXQgaGFzIGEgcmVuZGVyaW5nIGdyYXBoIGxv
Y2tpbmcgbWVjaGFuaXNtLgogCiBjbGFzcyBXZWJLaXRBdWRpb0NvbnRleHQKLSAgICA6IHB1Ymxp
YyBBdWRpb0NvbnRleHRCYXNlCi0gICAgLCBwcml2YXRlIFBsYXRmb3JtTWVkaWFTZXNzaW9uQ2xp
ZW50Ci0gICAgLCBwcml2YXRlIFZpc2liaWxpdHlDaGFuZ2VDbGllbnQKKyAgICA6IHB1YmxpYyBC
YXNlQXVkaW9Db250ZXh0CiB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChXZWJLaXRBdWRp
b0NvbnRleHQpOwogcHVibGljOgogICAgIC8vIENyZWF0ZSBhbiBXZWJLaXRBdWRpb0NvbnRleHQg
Zm9yIHJlbmRlcmluZyB0byB0aGUgYXVkaW8gaGFyZHdhcmUuCiAgICAgc3RhdGljIEV4Y2VwdGlv
bk9yPFJlZjxXZWJLaXRBdWRpb0NvbnRleHQ+PiBjcmVhdGUoRG9jdW1lbnQmKTsKIAotICAgIHZp
cnR1YWwgfldlYktpdEF1ZGlvQ29udGV4dCgpOwotCi0gICAgYm9vbCBpc0luaXRpYWxpemVkKCkg
Y29uc3QgZmluYWw7Ci0KLSAgICBib29sIGlzT2ZmbGluZUNvbnRleHQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2lzT2ZmbGluZUNvbnRleHQ7IH0KLQotICAgIERvY3VtZW50SWRlbnRpZmllciBo
b3N0aW5nRG9jdW1lbnRJZGVudGlmaWVyKCkgY29uc3QgZmluYWw7Ci0KLSAgICBBdWRpb0Rlc3Rp
bmF0aW9uTm9kZSogZGVzdGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS5nZXQo
KTsgfQotICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50U2FtcGxlRnJh
bWUoKSA6IDA7IH0KLSAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50VGltZSgpIDog
MC47IH0KLSAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kZXN0
aW5hdGlvbk5vZGUgPyBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpIDogMC5mOyB9Ci0g
ICAgdW5zaWduZWQgbG9uZyBhY3RpdmVTb3VyY2VDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fYWN0aXZlU291cmNlQ291bnQpOyB9Ci0KLSAgICB2b2lk
IGluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkgZmluYWw7Ci0gICAgdm9pZCBkZWNyZW1lbnRB
Y3RpdmVTb3VyY2VDb3VudCgpIGZpbmFsOwotCi0gICAgRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVm
ZmVyPj4gY3JlYXRlQnVmZmVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1i
ZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPEF1ZGlv
QnVmZmVyPj4gY3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyJiwgYm9vbCBtaXhUb01vbm8pOwotCi0g
ICAgLy8gQXN5bmNocm9ub3VzIGF1ZGlvIGZpbGUgZGF0YSBkZWNvZGluZy4KLSAgICB2b2lkIGRl
Y29kZUF1ZGlvRGF0YShSZWY8QXJyYXlCdWZmZXI+JiYsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxi
YWNrPiYmLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJik7Ci0KLSAgICBBdWRpb0xpc3Rl
bmVyKiBsaXN0ZW5lcigpIHsgcmV0dXJuIG1fbGlzdGVuZXIuZ2V0KCk7IH0KLQotICAgIHZvaWQg
c3VzcGVuZFJlbmRlcmluZyhET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJik7Ci0gICAgdm9pZCBy
ZXN1bWVSZW5kZXJpbmcoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpOwogICAgIHZvaWQgY2xv
c2UoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpOwogCi0gICAgdXNpbmcgU3RhdGUgPSBBdWRp
b0NvbnRleHRTdGF0ZTsKLSAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNDbG9z
ZWQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQ7IH0KLQotICAgIGJv
b2wgd291bGRUYWludE9yaWdpbihjb25zdCBVUkwmKSBjb25zdDsKLQogICAgIC8vIFRoZSBBdWRp
b05vZGUgY3JlYXRlIG1ldGhvZHMgYXJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgKGZyb20g
SmF2YVNjcmlwdCkuCi0gICAgRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4+
IGNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwogI2lmIEVOQUJMRShWSURFTykKICAgICBFeGNlcHRpb25P
cjxSZWY8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPj4gY3JlYXRlTWVkaWFFbGVtZW50U291
cmNlKEhUTUxNZWRpYUVsZW1lbnQmKTsKICNlbmRpZgpAQCAtMTM4LDI4MCArNTksMjEgQEAgcHVi
bGljOgogICAgIEV4Y2VwdGlvbk9yPFJlZjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4+IGNy
ZWF0ZU1lZGlhU3RyZWFtU291cmNlKE1lZGlhU3RyZWFtJik7CiAgICAgRXhjZXB0aW9uT3I8UmVm
PE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGU+PiBjcmVhdGVNZWRpYVN0cmVhbURlc3Rp
bmF0aW9uKCk7CiAjZW5kaWYKLSAgICBFeGNlcHRpb25PcjxSZWY8R2Fpbk5vZGU+PiBjcmVhdGVH
YWluKCk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPEJpcXVhZEZpbHRlck5vZGU+PiBjcmVhdGVCaXF1
YWRGaWx0ZXIoKTsKLSAgICBFeGNlcHRpb25PcjxSZWY8V2F2ZVNoYXBlck5vZGU+PiBjcmVhdGVX
YXZlU2hhcGVyKCk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPERlbGF5Tm9kZT4+IGNyZWF0ZURlbGF5
KGRvdWJsZSBtYXhEZWxheVRpbWUpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxXZWJLaXRBdWRpb1Bh
bm5lck5vZGU+PiBjcmVhdGVQYW5uZXIoKTsKLSAgICBFeGNlcHRpb25PcjxSZWY8Q29udm9sdmVy
Tm9kZT4+IGNyZWF0ZUNvbnZvbHZlcigpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxEeW5hbWljc0Nv
bXByZXNzb3JOb2RlPj4gY3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCk7Ci0gICAgRXhjZXB0aW9u
T3I8UmVmPEFuYWx5c2VyTm9kZT4+IGNyZWF0ZUFuYWx5c2VyKCk7Ci0gICAgRXhjZXB0aW9uT3I8
UmVmPFNjcmlwdFByb2Nlc3Nvck5vZGU+PiBjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1
ZmZlclNpemUsIHNpemVfdCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZk91
dHB1dENoYW5uZWxzKTsKLSAgICBFeGNlcHRpb25PcjxSZWY8Q2hhbm5lbFNwbGl0dGVyTm9kZT4+
IGNyZWF0ZUNoYW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzKTsKLSAgICBFeGNl
cHRpb25PcjxSZWY8Q2hhbm5lbE1lcmdlck5vZGU+PiBjcmVhdGVDaGFubmVsTWVyZ2VyKHNpemVf
dCBudW1iZXJPZklucHV0cyk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPE9zY2lsbGF0b3JOb2RlPj4g
Y3JlYXRlT3NjaWxsYXRvcigpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxQZXJpb2RpY1dhdmU+PiBj
cmVhdGVQZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5JiByZWFsLCBGbG9hdDMyQXJyYXkmIGltYWdp
bmFyeSk7Ci0KLSAgICAvLyBXaGVuIGEgc291cmNlIG5vZGUgaGFzIG5vIG1vcmUgcHJvY2Vzc2lu
ZyB0byBkbyAoaGFzIGZpbmlzaGVkIHBsYXlpbmcpLCB0aGVuIGl0IHRlbGxzIHRoZSBjb250ZXh0
IHRvIGRlcmVmZXJlbmNlIGl0LgotICAgIHZvaWQgbm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2lu
ZyhBdWRpb05vZGUqKSBmaW5hbDsKLQotICAgIC8vIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFj
aCByZW5kZXIgcXVhbnR1bS4KLSAgICB2b2lkIGhhbmRsZVByZVJlbmRlclRhc2tzKCkgZmluYWw7
Ci0KLSAgICAvLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtLgotICAg
IHZvaWQgaGFuZGxlUG9zdFJlbmRlclRhc2tzKCkgZmluYWw7Ci0KLSAgICAvLyBDYWxsZWQgcGVy
aW9kaWNhbGx5IGF0IHRoZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bSB0byBkZXJlZmVyZW5j
ZSBmaW5pc2hlZCBzb3VyY2Ugbm9kZXMuCi0gICAgdm9pZCBkZXJlZkZpbmlzaGVkU291cmNlTm9k
ZXMoKTsKLQotICAgIC8vIFdlIHNjaGVkdWxlIGRlbGV0aW9uIG9mIGFsbCBtYXJrZWQgbm9kZXMg
YXQgdGhlIGVuZCBvZiBlYWNoIHJlYWx0aW1lIHJlbmRlciBxdWFudHVtLgotICAgIHZvaWQgbWFy
a0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgZGVsZXRlTWFya2VkTm9k
ZXMoKSBmaW5hbDsKLQotICAgIC8vIEF1ZGlvQ29udGV4dCBjYW4gcHVsbCBub2RlKHMpIGF0IHRo
ZSBlbmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bSBldmVuIHdoZW4gdGhleSBhcmUgbm90IGNvbm5l
Y3RlZCB0byBhbnkgZG93bnN0cmVhbSBub2Rlcy4KLSAgICAvLyBUaGVzZSB0d28gbWV0aG9kcyBh
cmUgY2FsbGVkIGJ5IHRoZSBub2RlcyB3aG8gd2FudCB0byBhZGQvcmVtb3ZlIHRoZW1zZWx2ZXMg
aW50by9mcm9tIHRoZSBhdXRvbWF0aWMgcHVsbCBsaXN0cy4KLSAgICB2b2lkIGFkZEF1dG9tYXRp
Y1B1bGxOb2RlKEF1ZGlvTm9kZSYpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQXV0b21hdGljUHVs
bE5vZGUoQXVkaW9Ob2RlJikgZmluYWw7Ci0KLSAgICAvLyBDYWxsZWQgcmlnaHQgYmVmb3JlIGhh
bmRsZVBvc3RSZW5kZXJUYXNrcygpIHRvIGhhbmRsZSBub2RlcyB3aGljaCBuZWVkIHRvIGJlIHB1
bGxlZCBldmVuIHdoZW4gdGhleSBhcmUgbm90IGNvbm5lY3RlZCB0byBhbnl0aGluZy4KLSAgICB2
b2lkIHByb2Nlc3NBdXRvbWF0aWNQdWxsTm9kZXMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykgZmlu
YWw7Ci0KLSAgICAvLyBLZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIG1h
ZGUuCi0gICAgdm9pZCBpbmNyZW1lbnRDb25uZWN0aW9uQ291bnQoKSBmaW5hbAotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgbV9jb25uZWN0aW9uQ291bnQr
KzsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjb25uZWN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX2Nvbm5lY3Rpb25Db3VudDsgfQotCi0gICAgLy8KLSAgICAvLyBUaHJlYWQgU2FmZXR5IGFu
ZCBHcmFwaCBMb2NraW5nOgotICAgIC8vCi0KLSAgICB2b2lkIHNldEF1ZGlvVGhyZWFkKFRocmVh
ZCYgdGhyZWFkKSBmaW5hbCB7IG1fYXVkaW9UaHJlYWQgPSAmdGhyZWFkOyB9IC8vIEZJWE1FOiBj
aGVjayBlaXRoZXIgbm90IGluaXRpYWxpemVkIG9yIHRoZSBzYW1lCi0gICAgVGhyZWFkKiBhdWRp
b1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9UaHJlYWQ7IH0KLSAgICBib29sIGlzQXVk
aW9UaHJlYWQoKSBjb25zdCBmaW5hbDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5IGFmdGVy
IHRoZSBhdWRpbyB0aHJlYWQgaGFzIGJlZW4gc3RhcnRlZCBhbmQgdGhlbiBzaHV0ZG93bi4KLSAg
ICBib29sIGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpIGZpbmFsIHsgcmV0dXJuIG1faXNBdWRpb1Ro
cmVhZEZpbmlzaGVkOyB9Ci0KLSAgICAvLyBtdXN0UmVsZWFzZUxvY2sgaXMgc2V0IHRvIHRydWUg
aWYgd2UgYWNxdWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRob2QgY2FsbCBhbmQgY2FsbGVyIG11
c3QgdW5sb2NrKCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjcXVpcmVkLgotICAgIHZv
aWQgbG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spIGZpbmFsOwotCi0gICAgLy8gUmV0dXJucyB0
cnVlIGlmIHdlIG93biB0aGUgbG9jay4KLSAgICAvLyBtdXN0UmVsZWFzZUxvY2sgaXMgc2V0IHRv
IHRydWUgaWYgd2UgYWNxdWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRob2QgY2FsbCBhbmQgY2Fs
bGVyIG11c3QgdW5sb2NrKCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjcXVpcmVkLgot
ICAgIGJvb2wgdHJ5TG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spIGZpbmFsOwotCi0gICAgdm9p
ZCB1bmxvY2soKSBmaW5hbDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHRocmVhZCBv
d25zIHRoZSBjb250ZXh0J3MgbG9jay4KLSAgICBib29sIGlzR3JhcGhPd25lcigpIGNvbnN0IGZp
bmFsOwotCi0gICAgLy8gUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhbm5lbHMgd2Ug
Y2FuIHN1cHBvcnQuCi0gICAgc3RhdGljIHVuc2lnbmVkIG1heE51bWJlck9mQ2hhbm5lbHMoKSB7
IHJldHVybiBNYXhOdW1iZXJPZkNoYW5uZWxzOyB9Ci0KLSAgICAvLyBJbiBBdWRpb05vZGU6OmRl
cmVmKCkgYSB0cnlMb2NrKCkgaXMgdXNlZCBmb3IgY2FsbGluZyBmaW5pc2hEZXJlZigpLCBidXQg
aWYgaXQgZmFpbHMga2VlcCB0cmFjayBoZXJlLgotICAgIHZvaWQgYWRkRGVmZXJyZWRGaW5pc2hE
ZXJlZihBdWRpb05vZGUqKSBmaW5hbDsKLQotICAgIC8vIEluIHRoZSBhdWRpbyB0aHJlYWQgYXQg
dGhlIHN0YXJ0IG9mIGVhY2ggcmVuZGVyIGN5Y2xlLCB3ZSdsbCBjYWxsIGhhbmRsZURlZmVycmVk
RmluaXNoRGVyZWZzKCkuCi0gICAgdm9pZCBoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVmcygpOwot
Ci0gICAgLy8gT25seSBhY2Nlc3NlZCB3aGVuIHRoZSBncmFwaCBsb2NrIGlzIGhlbGQuCi0gICAg
dm9pZCBtYXJrU3VtbWluZ0p1bmN0aW9uRGlydHkoQXVkaW9TdW1taW5nSnVuY3Rpb24qKSBmaW5h
bDsKLSAgICB2b2lkIG1hcmtBdWRpb05vZGVPdXRwdXREaXJ0eShBdWRpb05vZGVPdXRwdXQqKSBm
aW5hbDsKLQotICAgIC8vIE11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFkLgotICAgIHZvaWQg
cmVtb3ZlTWFya2VkU3VtbWluZ0p1bmN0aW9uKEF1ZGlvU3VtbWluZ0p1bmN0aW9uKikgZmluYWw7
Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHN0YXJ0UmVuZGVyaW5nKCk7
Ci0gICAgdm9pZCBmaW5pc2hlZFJlbmRlcmluZyhib29sIGRpZFJlbmRlcmluZykgZmluYWw7Ci0K
LSAgICBzdGF0aWMgdW5zaWduZWQgc19oYXJkd2FyZUNvbnRleHRDb3VudDsKLQotICAgIC8vIFJl
c3RyaWN0aW9ucyB0byBjaGFuZ2UgZGVmYXVsdCBiZWhhdmlvcnMuCi0gICAgQmVoYXZpb3JSZXN0
cmljdGlvbnMgYmVoYXZpb3JSZXN0cmljdGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Jl
c3RyaWN0aW9uczsgfQotICAgIHZvaWQgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJl
c3RyaWN0aW9ucyByZXN0cmljdGlvbikgZmluYWwgeyBtX3Jlc3RyaWN0aW9ucyB8PSByZXN0cmlj
dGlvbjsgfQotICAgIHZvaWQgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3Ry
aWN0aW9ucyByZXN0cmljdGlvbikgZmluYWwgeyBtX3Jlc3RyaWN0aW9ucyAmPSB+cmVzdHJpY3Rp
b247IH0KLQotICAgIHZvaWQgaXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKSBmaW5hbDsKLQotICAg
IHZvaWQgbm9kZVdpbGxCZWdpblBsYXliYWNrKCkgZmluYWw7Ci0KLSNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKLSAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fbG9nZ2VyLmdldCgpOyB9Ci0gICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQotICAgIFdURkxvZ0NoYW5uZWwmIGxv
Z0NoYW5uZWwoKSBjb25zdCBmaW5hbDsKLSAgICBjb25zdCB2b2lkKiBuZXh0QXVkaW9Ob2RlTG9n
SWRlbnRpZmllcigpIGZpbmFsIHsgcmV0dXJuIGNoaWxkTG9nSWRlbnRpZmllcihtX2xvZ0lkZW50
aWZpZXIsICsrbV9uZXh0QXVkaW9Ob2RlSWRlbnRpZmllcik7IH0KLSAgICBjb25zdCB2b2lkKiBu
ZXh0QXVkaW9QYXJhbWV0ZXJMb2dJZGVudGlmaWVyKCkgZmluYWwgeyByZXR1cm4gY2hpbGRMb2dJ
ZGVudGlmaWVyKG1fbG9nSWRlbnRpZmllciwgKyttX25leHRBdWRpb1BhcmFtZXRlcklkZW50aWZp
ZXIpOyB9Ci0jZW5kaWYKLQotICAgIHZvaWQgcG9zdFRhc2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+
JiYpIGZpbmFsOwotICAgIGJvb2wgaXNTdG9wcGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9p
c1N0b3BTY2hlZHVsZWQ7IH0KLSAgICBjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKCkgY29u
c3QgZmluYWw7Ci0gICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7CisgICAgRXhjZXB0aW9uT3I8
UmVmPFdlYktpdEF1ZGlvUGFubmVyTm9kZT4+IGNyZWF0ZVdlYktpdFBhbm5lcigpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgZXhwbGljaXQgV2ViS2l0QXVkaW9Db250ZXh0KERvY3VtZW50Jik7CiAgICAg
V2ViS2l0QXVkaW9Db250ZXh0KERvY3VtZW50JiwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCk7
CiAKLSAgICBzdGF0aWMgYm9vbCBpc1NhbXBsZVJhdGVSYW5nZUdvb2QoZmxvYXQgc2FtcGxlUmF0
ZSk7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdBY3Rpdml0eSgpOwotICAgIHZvaWQgbWFrZVBlbmRp
bmdBY3Rpdml0eSgpOwotCiBwcml2YXRlOgotICAgIHZvaWQgY29uc3RydWN0Q29tbW9uKCk7Ci0K
LSAgICB2b2lkIGxhenlJbml0aWFsaXplKCk7Ci0gICAgdm9pZCB1bmluaXRpYWxpemUoKTsKLQot
ICAgIGJvb2wgd2lsbEJlZ2luUGxheWJhY2soKTsKLSAgICBib29sIHdpbGxQYXVzZVBsYXliYWNr
KCk7Ci0KLSAgICBib29sIHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gIWlzT2ZmbGluZUNvbnRleHQoKSAmJiBtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVV
c2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsgfQotICAgIGJvb2wgcGFnZUNvbnNl
bnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSBjb25zdCB7IHJldHVybiAhaXNPZmZsaW5lQ29udGV4
dCgpICYmIG1fcmVzdHJpY3Rpb25zICYgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJl
c3RyaWN0aW9uOyB9Ci0KLSAgICB2b2lkIHNldFN0YXRlKFN0YXRlKTsKLQotICAgIHZvaWQgY2xl
YXIoKTsKLQotICAgIHZvaWQgc2NoZWR1bGVOb2RlRGVsZXRpb24oKTsKLQotICAgIHZvaWQgbWVk
aWFDYW5TdGFydChEb2N1bWVudCYpIG92ZXJyaWRlOwotCi0gICAgLy8gRXZlbnRUYXJnZXQKLSAg
ICB2b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBmaW5hbDsKLQotICAgIC8vIE1lZGlhUHJvZHVj
ZXIKLSAgICBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbWVkaWFTdGF0ZSgpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZvaWQgcGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UoKSBvdmVycmlkZTsK
LQotICAgIC8vIFRoZSBjb250ZXh0IGl0c2VsZiBrZWVwcyBhIHJlZmVyZW5jZSB0byBhbGwgc291
cmNlIG5vZGVzLiAgVGhlIHNvdXJjZSBub2RlcywgdGhlbiByZWZlcmVuY2UgYWxsIG5vZGVzIHRo
ZXkncmUgY29ubmVjdGVkIHRvLgotICAgIC8vIEluIHR1cm4sIHRoZXNlIG5vZGVzIHJlZmVyZW5j
ZSBhbGwgbm9kZXMgdGhleSdyZSBjb25uZWN0ZWQgdG8uICBBbGwgbm9kZXMgYXJlIHVsdGltYXRl
bHkgY29ubmVjdGVkIHRvIHRoZSBBdWRpb0Rlc3RpbmF0aW9uTm9kZS4KLSAgICAvLyBXaGVuIHRo
ZSBjb250ZXh0IGRlcmVmZXJlbmNlcyBhIHNvdXJjZSBub2RlLCBpdCB3aWxsIGJlIGRlYWN0aXZh
dGVkIGZyb20gdGhlIHJlbmRlcmluZyBncmFwaCBhbG9uZyB3aXRoIGFsbCBvdGhlciBub2RlcyBp
dCBpcwotICAgIC8vIHVuaXF1ZWx5IGNvbm5lY3RlZCB0by4gIFNlZSB0aGUgQXVkaW9Ob2RlOjpy
ZWYoKSBhbmQgQXVkaW9Ob2RlOjpkZXJlZigpIG1ldGhvZHMgZm9yIG1vcmUgZGV0YWlscy4KLSAg
ICB2b2lkIHJlZk5vZGUoQXVkaW9Ob2RlJik7Ci0gICAgdm9pZCBkZXJlZk5vZGUoQXVkaW9Ob2Rl
Jik7Ci0KICAgICAvLyBBY3RpdmVET01PYmplY3QgQVBJLgotICAgIHZvaWQgc3VzcGVuZChSZWFz
b25Gb3JTdXNwZW5zaW9uKSBmaW5hbDsKLSAgICB2b2lkIHJlc3VtZSgpIGZpbmFsOwotICAgIHZv
aWQgc3RvcCgpIG92ZXJyaWRlOwogICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUo
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIC8vIFdoZW4gdGhlIGNvbnRleHQgZ29lcyBhd2F5LCB0
aGVyZSBtaWdodCBzdGlsbCBiZSBzb21lIHNvdXJjZXMgd2hpY2ggaGF2ZW4ndCBmaW5pc2hlZCBw
bGF5aW5nLgotICAgIC8vIE1ha2Ugc3VyZSB0byBkZXJlZmVyZW5jZSB0aGVtIGhlcmUuCi0gICAg
dm9pZCBkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpOwotCi0gICAgLy8gUGxhdGZvcm1NZWRp
YVNlc3Npb25DbGllbnQKLSAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIG1lZGlh
VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRp
YVR5cGU6OldlYkF1ZGlvOyB9Ci0gICAgUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZSBw
cmVzZW50YXRpb25UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1NZWRpYVNl
c3Npb246Ok1lZGlhVHlwZTo6V2ViQXVkaW87IH0KLSAgICB2b2lkIG1heVJlc3VtZVBsYXliYWNr
KGJvb2wgc2hvdWxkUmVzdW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIHN1c3BlbmRQbGF5YmFjaygp
IG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUmVjZWl2ZVJlbW90ZUNvbnRyb2xDb21tYW5kcygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVtb3Rl
Q29udHJvbENvbW1hbmQoUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNvbnRyb2xDb21tYW5k
VHlwZSwgY29uc3QgUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNvbW1hbmRBcmd1bWVudCop
IG92ZXJyaWRlIHsgfQotICAgIGJvb2wgc3VwcG9ydHNTZWVraW5nKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZE92ZXJyaWRlQmFja2dyb3VuZFBsYXli
YWNrUmVzdHJpY3Rpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBjYW5Qcm9kdWNlQXVkaW8o
KSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNv
bnN0IGZpbmFsOwotCi0gICAgdm9pZCB2aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCkgZmluYWw7Ci0K
LSAgICBib29sIGlzQmFzZUF1ZGlvQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgYm9vbCBpc1dlYktpdEF1ZGlvQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KLQotICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMoKTsK
LSAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOwotCi0gICAgdm9pZCBhZGRS
ZWFjdGlvbihTdGF0ZSwgRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpOwotICAgIHZvaWQgdXBk
YXRlQXV0b21hdGljUHVsbE5vZGVzKCk7Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAg
ICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiV2ViS2l0
QXVkaW9Db250ZXh0IjsgfQotCi0gICAgUmVmPExvZ2dlcj4gbV9sb2dnZXI7Ci0gICAgY29uc3Qg
dm9pZCogbV9sb2dJZGVudGlmaWVyOwotICAgIHVpbnQ2NF90IG1fbmV4dEF1ZGlvTm9kZUlkZW50
aWZpZXIgeyAwIH07Ci0gICAgdWludDY0X3QgbV9uZXh0QXVkaW9QYXJhbWV0ZXJJZGVudGlmaWVy
IHsgMCB9OwotI2VuZGlmCi0KLSAgICAvLyBPbmx5IGFjY2Vzc2VkIGluIHRoZSBhdWRpbyB0aHJl
YWQuCi0gICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1fZmluaXNoZWROb2RlczsKLQotICAgIC8vIFdl
IGRvbid0IHVzZSBSZWZQdHI8QXVkaW9Ob2RlPiBoZXJlIGJlY2F1c2UgQXVkaW9Ob2RlIGhhcyBh
IG1vcmUgY29tcGxleCByZWYoKSAvIGRlcmVmKCkgaW1wbGVtZW50YXRpb24KLSAgICAvLyB3aXRo
IGFuIG9wdGlvbmFsIGFyZ3VtZW50IGZvciByZWZUeXBlLiAgV2UgbmVlZCB0byB1c2UgdGhlIHNw
ZWNpYWwgcmVmVHlwZTogUmVmVHlwZUNvbm5lY3Rpb24KLSAgICAvLyBFaXRoZXIgYWNjZXNzZWQg
d2hlbiB0aGUgZ3JhcGggbG9jayBpcyBoZWxkLCBvciBvbiB0aGUgbWFpbiB0aHJlYWQgd2hlbiB0
aGUgYXVkaW8gdGhyZWFkIGhhcyBmaW5pc2hlZC4KLSAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9y
ZWZlcmVuY2VkTm9kZXM7Ci0KLSAgICAvLyBBY2N1bXVsYXRlIG5vZGVzIHdoaWNoIG5lZWQgdG8g
YmUgZGVsZXRlZCBoZXJlLgotICAgIC8vIFRoaXMgaXMgY29waWVkIHRvIG1fbm9kZXNUb0RlbGV0
ZSBhdCB0aGUgZW5kIG9mIGEgcmVuZGVyIGN5Y2xlIGluIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygp
LCB3aGVyZSB3ZSdyZSBhc3N1cmVkIG9mIGEgc3RhYmxlIGdyYXBoCi0gICAgLy8gc3RhdGUgd2hp
Y2ggd2lsbCBoYXZlIG5vIHJlZmVyZW5jZXMgdG8gYW55IG9mIHRoZSBub2RlcyBpbiBtX25vZGVz
VG9EZWxldGUgb25jZSB0aGUgY29udGV4dCBsb2NrIGlzIHJlbGVhc2VkCi0gICAgLy8gKHdoZW4g
aGFuZGxlUG9zdFJlbmRlclRhc2tzKCkgaGFzIGNvbXBsZXRlZCkuCi0gICAgVmVjdG9yPEF1ZGlv
Tm9kZSo+IG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbjsKLQotICAgIC8vIFRoZXkgd2lsbCBiZSBz
Y2hlZHVsZWQgZm9yIGRlbGV0aW9uIChvbiB0aGUgbWFpbiB0aHJlYWQpIGF0IHRoZSBlbmQgb2Yg
YSByZW5kZXIgY3ljbGUgKGluIHJlYWx0aW1lIHRocmVhZCkuCi0gICAgVmVjdG9yPEF1ZGlvTm9k
ZSo+IG1fbm9kZXNUb0RlbGV0ZTsKLQotICAgIGJvb2wgbV9pc0RlbGV0aW9uU2NoZWR1bGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1faXNTdG9wU2NoZWR1bGVkIHsgZmFsc2UgfTsKLSAgICBib29s
IG1faXNJbml0aWFsaXplZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzQXVkaW9UaHJlYWRGaW5p
c2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGlu
ZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzT2ZmbGluZUNvbnRleHQgeyBmYWxzZSB9OwotCi0g
ICAgLy8gT25seSBhY2Nlc3NlZCB3aGVuIHRoZSBncmFwaCBsb2NrIGlzIGhlbGQuCi0gICAgSGFz
aFNldDxBdWRpb1N1bW1pbmdKdW5jdGlvbio+IG1fZGlydHlTdW1taW5nSnVuY3Rpb25zOwotICAg
IEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj4gbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHM7Ci0KLSAg
ICAvLyBGb3IgdGhlIHNha2Ugb2YgdGhyZWFkIHNhZmV0eSwgd2UgbWFpbnRhaW4gYSBzZXBlcmF0
ZSBWZWN0b3Igb2YgYXV0b21hdGljIHB1bGwgbm9kZXMgZm9yIHJlbmRlcmluZyBpbiBtX3JlbmRl
cmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy4KLSAgICAvLyBJdCB3aWxsIGJlIGNvcGllZCBmcm9tIG1f
YXV0b21hdGljUHVsbE5vZGVzIGJ5IHVwZGF0ZUF1dG9tYXRpY1B1bGxOb2RlcygpIGF0IHRoZSB2
ZXJ5IHN0YXJ0IG9yIGVuZCBvZiB0aGUgcmVuZGVyaW5nIHF1YW50dW0uCi0gICAgSGFzaFNldDxB
dWRpb05vZGUqPiBtX2F1dG9tYXRpY1B1bGxOb2RlczsKLSAgICBWZWN0b3I8QXVkaW9Ob2RlKj4g
bV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXM7Ci0gICAgLy8gT25seSBhY2Nlc3NlZCBpbiB0
aGUgYXVkaW8gdGhyZWFkLgotICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX2RlZmVycmVkRmluaXNo
RGVyZWZMaXN0OwotICAgIFZlY3RvcjxWZWN0b3I8RE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+Pj4g
bV9zdGF0ZVJlYWN0aW9uczsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybU1lZGlhU2Vz
c2lvbj4gbV9tZWRpYVNlc3Npb247Ci0gICAgVW5pcXVlUmVmPE1haW5UaHJlYWRHZW5lcmljRXZl
bnRRdWV1ZT4gbV9ldmVudFF1ZXVlOwotCi0gICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX3JlbmRl
clRhcmdldDsKLSAgICBSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbk5vZGU+IG1fZGVzdGluYXRpb25O
b2RlOwotICAgIFJlZlB0cjxBdWRpb0xpc3RlbmVyPiBtX2xpc3RlbmVyOwotCi0gICAgdW5zaWdu
ZWQgbV9jb25uZWN0aW9uQ291bnQgeyAwIH07Ci0KLSAgICAvLyBHcmFwaCBsb2NraW5nLgotICAg
IExvY2sgbV9jb250ZXh0R3JhcGhNdXRleDsKLSAgICAvLyBGSVhNRTogVXNpbmcgdm9sYXRpbGUg
c2VlbXMgaW5jb3JyZWN0LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODAzMzIKLSAgICBUaHJlYWQqIHZvbGF0aWxlIG1fYXVkaW9UaHJlYWQgeyBudWxs
cHRyIH07Ci0gICAgVGhyZWFkKiB2b2xhdGlsZSBtX2dyYXBoT3duZXJUaHJlYWQgeyBudWxscHRy
IH07IC8vIGlmIHRoZSBsb2NrIGlzIGhlbGQgdGhlbiB0aGlzIGlzIHRoZSB0aHJlYWQgd2hpY2gg
b3ducyBpdCwgb3RoZXJ3aXNlID09IG51bGxwdHIuCi0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QXN5
bmNBdWRpb0RlY29kZXI+IG1fYXVkaW9EZWNvZGVyOwotCi0gICAgLy8gVGhpcyBpcyBjb25zaWRl
cmluZyAzMiBpcyBsYXJnZSBlbm91Z2ggZm9yIG11bHRpcGxlIGNoYW5uZWxzIGF1ZGlvLgotICAg
IC8vIEl0IGlzIHNvbWV3aGF0IGFyYml0cmFyeSBhbmQgY291bGQgYmUgaW5jcmVhc2VkIGlmIG5l
Y2Vzc2FyeS4KLSAgICBlbnVtIHsgTWF4TnVtYmVyT2ZDaGFubmVscyA9IDMyIH07Ci0KLSAgICAv
LyBOdW1iZXIgb2YgQXVkaW9CdWZmZXJTb3VyY2VOb2RlcyB0aGF0IGFyZSBhY3RpdmUgKHBsYXlp
bmcpLgotICAgIHN0ZDo6YXRvbWljPGludD4gbV9hY3RpdmVTb3VyY2VDb3VudCB7IDAgfTsKLQot
ICAgIEJlaGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zIHsgTm9SZXN0cmljdGlvbnMg
fTsKLQotICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07Ci0gICAgUmVmUHRy
PFBlbmRpbmdBY3Rpdml0eTxXZWJLaXRBdWRpb0NvbnRleHQ+PiBtX3BlbmRpbmdBY3Rpdml0eTsK
IH07CiAKLWlubGluZSBBdWRpb0NvbnRleHRTdGF0ZSBXZWJLaXRBdWRpb0NvbnRleHQ6OnN0YXRl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0ZTsKLX0KLQogfSAvLyBXZWJDb3JlCiAKIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V2ViS2l0QXVkaW9Db250ZXh0KQot
ICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpBdWRpb0NvbnRleHRCYXNlJiBj
b250ZXh0KSB7IHJldHVybiBjb250ZXh0LmlzV2ViS2l0QXVkaW9Db250ZXh0KCk7IH0KKyAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dCYgY29udGV4
dCkgeyByZXR1cm4gY29udGV4dC5pc1dlYktpdEF1ZGlvQ29udGV4dCgpOyB9CiBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1dlYktpdEF1ZGlvQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1dlYktpdEF1ZGlvQ29udGV4dC5pZGwKaW5kZXggOWI1YTZmZjUyMzM1NjUwNWRjMjJm
ZWRmYWFjZTY0ZDQ2MDg1M2U5NC4uZjZlZWE2YzY3NmY0ZjI4YzhiNzJkMWNkNTJhMTM5OTVhZGJm
NGUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XZWJLaXRB
dWRpb0NvbnRleHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2Vi
S2l0QXVkaW9Db250ZXh0LmlkbApAQCAtNzQsNyArNzQsNyBAQAogICAgIFtNYXlUaHJvd0V4Y2Vw
dGlvbl0gRGVsYXlOb2RlIGNyZWF0ZURlbGF5KG9wdGlvbmFsIHVucmVzdHJpY3RlZCBkb3VibGUg
bWF4RGVsYXlUaW1lID0gMSk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSBCaXF1YWRGaWx0ZXJO
b2RlIGNyZWF0ZUJpcXVhZEZpbHRlcigpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gV2F2ZVNo
YXBlck5vZGUgY3JlYXRlV2F2ZVNoYXBlcigpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gV2Vi
S2l0QXVkaW9QYW5uZXJOb2RlIGNyZWF0ZVBhbm5lcigpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlv
biwgSW1wbGVtZW50ZWRBcz1jcmVhdGVXZWJLaXRQYW5uZXJdIFdlYktpdEF1ZGlvUGFubmVyTm9k
ZSBjcmVhdGVQYW5uZXIoKTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIENvbnZvbHZlck5vZGUg
Y3JlYXRlQ29udm9sdmVyKCk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSBEeW5hbWljc0NvbXBy
ZXNzb3JOb2RlIGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpOwogICAgIFtNYXlUaHJvd0V4Y2Vw
dGlvbl0gQW5hbHlzZXJOb2RlIGNyZWF0ZUFuYWx5c2VyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0RmFjdG9yeS5pbgppbmRleCBlNWI0YWVkZTEzMTU4NDhkYmFlOGE4NDg4ZjAyN2Jk
MzU2NmZiNWZlLi5mMTUzYmI1OGExZTMxYThhZjViOGM4ODc1YTQ5NGYzNmY3NGZiN2U4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldEZhY3RvcnkuaW4KQEAgLTUzLDcgKzUzLDYgQEAg
VmlkZW9UcmFja0xpc3QgY29uZGl0aW9uYWw9VklERU8KIFZpc3VhbFZpZXdwb3J0CiBXZWJBbmlt
YXRpb24KIFdlYkdQVURldmljZSBjb25kaXRpb25hbD1XRUJHUFUKLVdlYktpdEF1ZGlvQ29udGV4
dCBjb25kaXRpb25hbD1XRUJfQVVESU8KIFdlYktpdE1lZGlhS2V5U2Vzc2lvbiBjb25kaXRpb25h
bD1MRUdBQ1lfRU5DUllQVEVEX01FRElBCiBXZWJTb2NrZXQKIFdvcmtlcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDY3MjE4NzIwYTZhYWMzZDJiZmQzYjUzMjEyMDFhMmE1
N2QxNjJhNzQuLmQ1MmQzOGY1ZWYzOTZkYjIyNWM3Yjc3ZjgwOGM0NGE5ZDQ0ZWNjOGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQzMDEsNyArNDMwMSw3IEBAIHZvaWQg
SW50ZXJuYWxzOjpzZW5kTWVkaWFDb250cm9sRXZlbnQoTWVkaWFDb250cm9sRXZlbnQgZXZlbnQp
CiAjaWYgRU5BQkxFKFdFQl9BVURJTykKIHZvaWQgSW50ZXJuYWxzOjpzZXRBdWRpb0NvbnRleHRS
ZXN0cmljdGlvbnMoY29uc3QgVmFyaWFudDxSZWZQdHI8QmFzZUF1ZGlvQ29udGV4dD4sIFJlZlB0
cjxXZWJLaXRBdWRpb0NvbnRleHQ+PiYgY29udGV4dFZhcmlhbnQsIFN0cmluZ1ZpZXcgcmVzdHJp
Y3Rpb25zU3RyaW5nKQogewotICAgIFJlZlB0cjxBdWRpb0NvbnRleHRCYXNlPiBjb250ZXh0Owor
ICAgIFJlZlB0cjxCYXNlQXVkaW9Db250ZXh0PiBjb250ZXh0OwogICAgIHN3aXRjaE9uKGNvbnRl
eHRWYXJpYW50LCBbJl0oUmVmUHRyPEJhc2VBdWRpb0NvbnRleHQ+IGVudHJ5KSB7CiAgICAgICAg
IGNvbnRleHQgPSBlbnRyeTsKICAgICB9LCBbJl0oUmVmUHRyPFdlYktpdEF1ZGlvQ29udGV4dD4g
ZW50cnkpIHsKQEAgLTQzMTEsMTUgKzQzMTEsMTUgQEAgdm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlv
Q29udGV4dFJlc3RyaWN0aW9ucyhjb25zdCBWYXJpYW50PFJlZlB0cjxCYXNlQXVkaW9Db250ZXgK
ICAgICBhdXRvIHJlc3RyaWN0aW9ucyA9IGNvbnRleHQtPmJlaGF2aW9yUmVzdHJpY3Rpb25zKCk7
CiAgICAgY29udGV4dC0+cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihyZXN0cmljdGlvbnMpOwog
Ci0gICAgcmVzdHJpY3Rpb25zID0gQXVkaW9Db250ZXh0QmFzZTo6Tm9SZXN0cmljdGlvbnM7Cisg
ICAgcmVzdHJpY3Rpb25zID0gQmFzZUF1ZGlvQ29udGV4dDo6Tm9SZXN0cmljdGlvbnM7CiAKICAg
ICBmb3IgKFN0cmluZ1ZpZXcgcmVzdHJpY3Rpb25TdHJpbmcgOiByZXN0cmljdGlvbnNTdHJpbmcu
c3BsaXQoJywnKSkgewogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
cmVzdHJpY3Rpb25TdHJpbmcsICJub3Jlc3RyaWN0aW9ucyIpKQotICAgICAgICAgICAgcmVzdHJp
Y3Rpb25zIHw9IEF1ZGlvQ29udGV4dEJhc2U6Ok5vUmVzdHJpY3Rpb25zOworICAgICAgICAgICAg
cmVzdHJpY3Rpb25zIHw9IEJhc2VBdWRpb0NvbnRleHQ6Ok5vUmVzdHJpY3Rpb25zOwogICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocmVzdHJpY3Rpb25TdHJpbmcsICJy
ZXF1aXJldXNlcmdlc3R1cmVmb3JhdWRpb3N0YXJ0IikpCi0gICAgICAgICAgICByZXN0cmljdGlv
bnMgfD0gQXVkaW9Db250ZXh0QmFzZTo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9TdGFydFJl
c3RyaWN0aW9uOworICAgICAgICAgICAgcmVzdHJpY3Rpb25zIHw9IEJhc2VBdWRpb0NvbnRleHQ6
OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsKICAgICAgICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHJlc3RyaWN0aW9uU3RyaW5nLCAicmVxdWly
ZXBhZ2Vjb25zZW50Zm9yYXVkaW9zdGFydCIpKQotICAgICAgICAgICAgcmVzdHJpY3Rpb25zIHw9
IEF1ZGlvQ29udGV4dEJhc2U6OlJlcXVpcmVQYWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmlj
dGlvbjsKKyAgICAgICAgICAgIHJlc3RyaWN0aW9ucyB8PSBCYXNlQXVkaW9Db250ZXh0OjpSZXF1
aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb247CiAgICAgfQogICAgIGNvbnRl
eHQtPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>