<?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>109610</bug_id>
          
          <creation_ts>2013-02-12 13:40:52 -0800</creation_ts>
          <short_desc>Move ElementAttributeData into Element.cpp/h</short_desc>
          <delta_ts>2013-02-12 17:45:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>109505</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>peter+ews</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>831211</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-12 13:40:52 -0800</bug_when>
    <thetext>ElementAttributeData is really just a slightly-less-than-dumb container that holds data for Element.
I envision a future where Element is the only client of this class. As a first step, let&apos;s move the class into Element.h/cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831218</commentid>
    <comment_count>1</comment_count>
      <attachid>187925</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-12 13:46:19 -0800</bug_when>
    <thetext>Created attachment 187925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831262</commentid>
    <comment_count>2</comment_count>
      <attachid>187925</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 14:29:44 -0800</bug_when>
    <thetext>Comment on attachment 187925
Patch

Attachment 187925 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16513403</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831286</commentid>
    <comment_count>3</comment_count>
      <attachid>187925</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 14:50:06 -0800</bug_when>
    <thetext>Comment on attachment 187925
Patch

Attachment 187925 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16444492</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831313</commentid>
    <comment_count>4</comment_count>
      <attachid>187925</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-02-12 15:10:56 -0800</bug_when>
    <thetext>Comment on attachment 187925
Patch

Attachment 187925 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/16440447</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831371</commentid>
    <comment_count>5</comment_count>
      <attachid>187953</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-12 15:53:50 -0800</bug_when>
    <thetext>Created attachment 187953
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831389</commentid>
    <comment_count>6</comment_count>
      <attachid>187958</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-12 16:18:34 -0800</bug_when>
    <thetext>Created attachment 187958
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831479</commentid>
    <comment_count>7</comment_count>
      <attachid>187958</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 17:45:33 -0800</bug_when>
    <thetext>Comment on attachment 187958
Patch for landing

Clearing flags on attachment: 187958

Committed r142698: &lt;http://trac.webkit.org/changeset/142698&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831480</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 17:45:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187925</attachid>
            <date>2013-02-12 13:46:19 -0800</date>
            <delta_ts>2013-02-12 15:53:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109610.diff</filename>
            <type>text/plain</type>
            <size>45991</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMDYwOTMzMS4uYzU4ZDE1YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExNjEsNyArMTE2MSw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20v
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKICAgICBkb20vRG9jdW1lbnRUeXBlLmNw
cAogICAgIGRvbS9FbGVtZW50LmNwcAotICAgIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAK
ICAgICBkb20vRWxlbWVudFJhcmVEYXRhLmNwcAogICAgIGRvbS9FbGVtZW50U2hhZG93LmNwcAog
ICAgIGRvbS9FbnRpdHlSZWZlcmVuY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWI3NzdhMC4uOWE4OWRm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEzLTAyLTEyICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
IGludG8gRWxlbWVudC5jcHAvaAorICAgICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMDk2MTA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3Zl
ZCBFbGVtZW50QXR0cmlidXRlRGF0YS5jcHAvaCBhbmQgbW92ZWQgdGhlIGNsYXNzIGl0c2VsZiBp
bnRvIEVsZW1lbnQgaGVhZHF1YXJ0ZXJzLgorICAgICAgICBJbiB0aGUgbmVhciBmdXR1cmUsIEVs
ZW1lbnQgc2hvdWxkIGJlIHRoZSBvbmx5IGNsaWVudCBvZiB0aGlzIGNsYXNzLCBhbmQgdGh1cyBp
dCB3b24ndAorICAgICAgICBiZSBuZWNlc3NhcnkgZm9yIG90aGVyIGNsYXNzZXMgdG8ga25vdyBh
bnl0aGluZyBhYm91dCBpdC4KKworICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmg6IFJlbW92
ZWQuCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9t
L0RPTUFsbEluT25lLmNwcDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29s
LmNwcDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgICogZG9tL0VsZW1lbnQu
aDoKKwogMjAxMy0wMi0xMiAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgV2luZG93cyBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQppbmRleCBjNWVkYTViLi43MDdhYjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTI4MzgsOCArMjgzOCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvZG9tL0RPTVRpbWVTdGFtcC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggXAotCVNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50QXR0cmlidXRlRGF0YS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRh
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggOTQzNTY4OC4u
ZmNmY2E5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTgsNyArMzk4LDYgQEAgU09VUkNFUyArPSBcCiAg
ICAgZG9tL0RPTVN0cmluZ01hcC5jcHAgXAogICAgIGRvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNw
cCBcCiAgICAgZG9tL0VsZW1lbnQuY3BwIFwKLSAgICBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEu
Y3BwIFwKICAgICBkb20vRWxlbWVudFJhcmVEYXRhLmNwcCBcCiAgICAgZG9tL0VsZW1lbnRTaGFk
b3cuY3BwIFwKICAgICBkb20vRW50aXR5UmVmZXJlbmNlLmNwcCBcCkBAIC0xNjI0LDcgKzE2MjMs
NiBAQCBIRUFERVJTICs9IFwKICAgICBkb20vRGF0YXNldERPTVN0cmluZ01hcC5oIFwKICAgICBk
b20vRWxlbWVudC5oIFwKICAgICBkb20vRWxlbWVudFNoYWRvdy5oIFwKLSAgICBkb20vRWxlbWVu
dEF0dHJpYnV0ZURhdGEuaCBcCiAgICAgZG9tL0VudGl0eS5oIFwKICAgICBkb20vRW50aXR5UmVm
ZXJlbmNlLmggXAogICAgIGRvbS9FdmVudC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwNjA1NDNj
Li44OTkzZDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yODA4LDcgKzI4MDgsNiBAQAogICAgICAg
ICAgICAgJ2RvbS9Eb2N1bWVudFR5cGUuY3BwJywKICAgICAgICAgICAgICdkb20vRWxlbWVudFNo
YWRvdy5jcHAnLAogICAgICAgICAgICAgJ2RvbS9FbGVtZW50LmNwcCcsCi0gICAgICAgICAgICAn
ZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0VsZW1lbnRS
YXJlRGF0YS5jcHAnLAogICAgICAgICAgICAgJ2RvbS9FbGVtZW50UmFyZURhdGEuaCcsCiAgICAg
ICAgICAgICAnZG9tL0VudGl0eS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmMTU4MTY2Li4yODhmNWE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03ODYs
OCArNzg2LDYgQEAKIAkJMkIzNjVDODQxNTI1MTE5RTAwOTFEMjdCIC8qIFJlbmRlclNWR0VsbGlw
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCNDIz
NUEwMTUyNTBGNjAwMERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNlLmggKi87IH07CiAJCTJCRThF
MkM3MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM2MTJBNTg5RUMwMEZB
RDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCAqLzsgfTsKIAkJMkJFOEUyQzkxMkE1OEEw
MTAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyog
SFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCAqLzsgfTsKLQkJMkNGNjg3ODgxNEQzMkVCNTAwMzQw
RjM5IC8qIEVsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDRjY4Nzg3MTREMzJFQjUwMDM0MEYzOSAvKiBFbGVtZW50
QXR0cmlidXRlRGF0YS5jcHAgKi87IH07Ci0JCTJDRjY4NzhBMTREMzJFRkYwMDM0MEYzOSAvKiBF
bGVtZW50QXR0cmlidXRlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkNGNjg3ODkxNEQzMkVGRjAwMzQwRjM5IC8qIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MkQzQTBFMzYxM0E3RDc2MTAwRTg1QUYwIC8qIFNWR1BhcnNpbmdFcnJvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQzQTBFMzUxM0E3RDc2MTAwRTg1
QUYwIC8qIFNWR1BhcnNpbmdFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTJENDgxRjAwMTQ2QjVDNEMwMEFBNzgzNCAvKiBDcm9zc2ZhZGVH
ZW5lcmF0ZWRJbWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDJGQzA1NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1h
Z2UuY3BwICovOyB9OwogCQkyRDQ4MUYwMjE0NkI1QzU1MDBBQTc4MzQgLyogQ3Jvc3NmYWRlR2Vu
ZXJhdGVkSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5o
ICovOyB9OwpAQCAtODEyMCw4ICs4MTE4LDYgQEAKIAkJMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4
IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJD
NjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBwYXRoID0gcGFy
c2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEhUTUxNZXRhQ2hhcnNldFBhcnNl
ci5jcHA7IHBhdGggPSBwYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNGNjg3ODcxNEQzMkVCNTAwMzQwRjM5IC8qIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkNG
Njg3ODkxNEQzMkVGRjAwMzQwRjM5IC8qIEVsZW1lbnRBdHRyaWJ1dGVEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRBdHRyaWJ1dGVEYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEMkZDMDU0MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2Zh
ZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDJGQzA1NjE0NjBDRDZGMDAyNjM2
MzMgLyogR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjI0ODIsOCArMjI0NzgsNiBAQAogCQkJCUE4QzRBN0Y2MDlENTYz
MjcwMDAzQUM4RCAvKiBFbGVtZW50LmNwcCAqLywKIAkJCQlBOEM0QTdGNTA5RDU2MzI3MDAwM0FD
OEQgLyogRWxlbWVudC5oICovLAogCQkJCTkzRUVDMUVBMDlDMjg3NzcwMEM1MTVEMSAvKiBFbGVt
ZW50LmlkbCAqLywKLQkJCQkyQ0Y2ODc4NzE0RDMyRUI1MDAzNDBGMzkgLyogRWxlbWVudEF0dHJp
YnV0ZURhdGEuY3BwICovLAotCQkJCTJDRjY4Nzg5MTREMzJFRkYwMDM0MEYzOSAvKiBFbGVtZW50
QXR0cmlidXRlRGF0YS5oICovLAogCQkJCTRGQUI0ODY0MTY0M0E2NkQwMEY3MEMwNyAvKiBFbGVt
ZW50UmFyZURhdGEuY3BwICovLAogCQkJCTYzN0I3QURFMEU4NzY3QjgwMEUzMjE5NCAvKiBFbGVt
ZW50UmFyZURhdGEuaCAqLywKIAkJCQk1N0NGNEM4NDE0Rjc1OTdBMDBFQ0ZGMTQgLyogRWxlbWVu
dFNoYWRvdy5jcHAgKi8sCkBAIC0yNDIwNSw3ICsyNDE5OSw2IEBACiAJCQkJNEJBRTk1QjEwQjJG
QTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNGREFGQ0EwQjExMzA3NDAwRTI3NDZGIC8qIEVkaXRvckluc2VydEFjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThDNEE4MDcwOUQ1NjMyNzAwMDNBQzhEIC8qIEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTJDRjY4NzhBMTREMzJFRkYwMDM0MEYzOSAvKiBFbGVtZW50QXR0cmlidXRl
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjNGNUQ0RjcwRThDNEI3MTAwQzBCRDA0IC8qIEVs
ZW1lbnRSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTdDRjRDODcxNEY3NTk3QTAwRUNG
RjE0IC8qIEVsZW1lbnRTaGFkb3cuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MTVGMTg0MEQ5QTFB
ODMwMDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaCBpbiBIZWFkZXJzICovLApAQCAtMjc1
NDYsNyArMjc1MzksNiBAQAogCQkJCTkzQTM4QjRCMEQwRTU4MDgwMDY4NzJDMiAvKiBFZGl0b3JD
b21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUVENTAxREM2MEIyNDlGMjkwMEFFMThEOSAv
KiBFZGl0b3JNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBOEM0QTgwODA5RDU2MzI3MDAwM0FD
OEQgLyogRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyQ0Y2ODc4ODE0RDMyRUI1MDAz
NDBGMzkgLyogRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZG
QzAyMkQxNjQzQjcyNjAwNEUxNjM4IC8qIEVsZW1lbnRSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1N0NGNEM4NjE0Rjc1OTdBMDBFQ0ZGMTQgLyogRWxlbWVudFNoYWRvdy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBOENGRjZDQjBBMTU2MUNEMDAwQTQyMzQgLyogRWxsaXBzaXNCb3gu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxs
SW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcAppbmRleCBiZDU5
OGEwMi4uYTU0YTA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCkBAIC03MCw3ICs3
MCw2IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcCIKICNpbmNsdWRl
ICJEb2N1bWVudFR5cGUuY3BwIgogI2luY2x1ZGUgIkVsZW1lbnQuY3BwIgotI2luY2x1ZGUgIkVs
ZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcCIKICNpbmNsdWRlICJFbGVtZW50U2hhZG93LmNwcCIKICNp
bmNsdWRlICJFbnRpdHlSZWZlcmVuY2UuY3BwIgogI2luY2x1ZGUgIkVycm9yRXZlbnQuY3BwIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcAppbmRl
eCBiODVlZmY4Li5iMTY5NDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRTaGFyZWRPYmplY3RQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRT
aGFyZWRPYmplY3RQb29sLmNwcApAQCAtMjcsOCArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkRvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oIgogCi0jaW5jbHVkZSAiQXR0
cmlidXRlLmgiCi0jaW5jbHVkZSAiRWxlbWVudEF0dHJpYnV0ZURhdGEuaCIKKyNpbmNsdWRlICJF
bGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmlu
ZGV4IGEyZGY2ZTYuLjBhNWJkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTQsNyArNCw3
IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAq
ICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0ZmlzaC5tYW5AZ21haWwuY29tKQotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDcgRXJpYyBTZWlk
ZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC04MSw2ICs4MSw3IEBACiAjaW5j
bHVkZSAiWE1MTmFtZXMuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPHd0
Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKFNWRykKQEAg
LTI4MjMsNCArMjgyNCwyMTEgQEAgdm9pZCBFbGVtZW50OjpjbGVhckhhc1BlbmRpbmdSZXNvdXJj
ZXMoKQogfQogI2VuZGlmCiAKK3ZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmRlcmVmKCkKK3sK
KyAgICBpZiAoIWRlcmVmQmFzZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc011
dGFibGUpCisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxNdXRhYmxlRWxlbWVudEF0dHJpYnV0
ZURhdGEqPih0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxJbW11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMpOworfQorCitFbGVtZW50QXR0cmlidXRl
RGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEoKQorICAgIDogbV9pc011dGFibGUodHJ1ZSkKKyAg
ICAsIG1fYXJyYXlTaXplKDApCisgICAgLCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNE
aXJ0eShmYWxzZSkKKyAgICAsIG1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5KGZhbHNlKQorI2lmIEVO
QUJMRShTVkcpCisgICAgLCBtX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5KGZhbHNlKQor
I2VuZGlmCit7Cit9CisKK0VsZW1lbnRBdHRyaWJ1dGVEYXRhOjpFbGVtZW50QXR0cmlidXRlRGF0
YSh1bnNpZ25lZCBhcnJheVNpemUpCisgICAgOiBtX2lzTXV0YWJsZShmYWxzZSkKKyAgICAsIG1f
YXJyYXlTaXplKGFycmF5U2l6ZSkKKyAgICAsIG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJ
c0RpcnR5KGZhbHNlKQorICAgICwgbV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkoZmFsc2UpCisjaWYg
RU5BQkxFKFNWRykKKyAgICAsIG1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkoZmFsc2Up
CisjZW5kaWYKK3sKK30KKworc3RydWN0IFNhbWVTaXplQXNFbGVtZW50QXR0cmlidXRlRGF0YSA6
IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNFbGVtZW50QXR0cmlidXRlRGF0YT4geworICAg
IHVuc2lnbmVkIGJpdGZpZWxkOworICAgIHZvaWQqIHJlZlB0cnNbM107Cit9OworCitDT01QSUxF
X0FTU0VSVChzaXplb2YoRWxlbWVudEF0dHJpYnV0ZURhdGEpID09IHNpemVvZihTYW1lU2l6ZUFz
RWxlbWVudEF0dHJpYnV0ZURhdGEpLCBlbGVtZW50X2F0dHJpYnV0ZV9kYXRhX3Nob3VsZF9zdGF5
X3NtYWxsKTsKKworc3RhdGljIHNpemVfdCBzaXplRm9ySW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0
ZURhdGFXaXRoQXR0cmlidXRlQ291bnQodW5zaWduZWQgY291bnQpCit7CisgICAgcmV0dXJuIHNp
emVvZihJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSkgLSBzaXplb2Yodm9pZCopICsgc2l6
ZW9mKEF0dHJpYnV0ZSkgKiBjb3VudDsKK30KKworUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRl
RGF0YT4gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZUltbXV0YWJsZShjb25zdCBWZWN0b3I8
QXR0cmlidXRlPiYgYXR0cmlidXRlcykKK3sKKyAgICB2b2lkKiBzbG90ID0gV1RGOjpmYXN0TWFs
bG9jKHNpemVGb3JJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YVdpdGhBdHRyaWJ1dGVDb3Vu
dChhdHRyaWJ1dGVzLnNpemUoKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHNsb3QpIElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGF0dHJpYnV0ZXMpKTsKK30KKworUGFzc1JlZlB0
cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZSgpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEpOwor
fQorCitJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCisgICAgOiBFbGVt
ZW50QXR0cmlidXRlRGF0YShhdHRyaWJ1dGVzLnNpemUoKSkKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9hcnJheVNpemU7ICsraSkKKyAgICAgICAgbmV3ICgmcmVpbnRlcnByZXRf
Y2FzdDxBdHRyaWJ1dGUqPigmbV9hdHRyaWJ1dGVBcnJheSlbaV0pIEF0dHJpYnV0ZShhdHRyaWJ1
dGVzW2ldKTsKK30KKworSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6On5JbW11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YSgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
YXJyYXlTaXplOyArK2kpCisgICAgICAgIChyZWludGVycHJldF9jYXN0PEF0dHJpYnV0ZSo+KCZt
X2F0dHJpYnV0ZUFycmF5KVtpXSkufkF0dHJpYnV0ZSgpOworfQorCitJbW11dGFibGVFbGVtZW50
QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJs
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlcikKKyAgICA6IEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KG90aGVyLCBmYWxzZSkKK3sKKyAgICBBU1NFUlQoIW90aGVyLm1fcHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUpOworCisgICAgaWYgKG90aGVyLm1faW5saW5lU3R5bGUpIHsKKyAgICAgICAgQVNT
RVJUKCFvdGhlci5tX2lubGluZVN0eWxlLT5oYXNDU1NPTVdyYXBwZXIoKSk7CisgICAgICAgIG1f
aW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0eWxlLT5pbW11dGFibGVDb3B5SWZOZWVkZWQo
KTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcnJheVNpemU7ICsr
aSkKKyAgICAgICAgbmV3ICgmcmVpbnRlcnByZXRfY2FzdDxBdHRyaWJ1dGUqPigmbV9hdHRyaWJ1
dGVBcnJheSlbaV0pIEF0dHJpYnV0ZSgqb3RoZXIuYXR0cmlidXRlSXRlbShpKSk7Cit9CisKK0Vs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjpFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBFbGVtZW50QXR0
cmlidXRlRGF0YSYgb3RoZXIsIGJvb2wgaXNNdXRhYmxlKQorICAgIDogbV9pc011dGFibGUoaXNN
dXRhYmxlKQorICAgICwgbV9hcnJheVNpemUoaXNNdXRhYmxlID8gMCA6IG90aGVyLmxlbmd0aCgp
KQorICAgICwgbV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkob3RoZXIubV9wcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkpCisgICAgLCBtX3N0eWxlQXR0cmlidXRlSXNE
aXJ0eShvdGhlci5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSkKKyNpZiBFTkFCTEUoU1ZHKQorICAg
ICwgbV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eShvdGhlci5tX2FuaW1hdGVkU1ZHQXR0
cmlidXRlc0FyZURpcnR5KQorI2VuZGlmCisgICAgLCBtX2NsYXNzTmFtZXMob3RoZXIubV9jbGFz
c05hbWVzKQorICAgICwgbV9pZEZvclN0eWxlUmVzb2x1dGlvbihvdGhlci5tX2lkRm9yU3R5bGVS
ZXNvbHV0aW9uKQoreworICAgIC8vIE5PVEU6IFRoZSBpbmxpbmUgc3R5bGUgaXMgY29waWVkIGJ5
IHRoZSBzdWJjbGFzcyBjb3B5IGNvbnN0cnVjdG9yIHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCB0
byBkbyB3aXRoIGl0IGhlcmUuCit9CisKK011dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6TXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkKK3sKK30KKworTXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjpNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhJiBvdGhlcikKKyAgICA6IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKG90aGVyLCB0
cnVlKQorICAgICwgbV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShvdGhlci5tX3ByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKQorICAgICwgbV9hdHRyaWJ1dGVWZWN0b3Iob3RoZXIubV9hdHRy
aWJ1dGVWZWN0b3IpCit7CisgICAgbV9pbmxpbmVTdHlsZSA9IG90aGVyLm1faW5saW5lU3R5bGUg
PyBvdGhlci5tX2lubGluZVN0eWxlLT5jb3B5KCkgOiAwOworfQorCitNdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGE6Ok11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBJbW11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YSYgb3RoZXIpCisgICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShv
dGhlciwgdHJ1ZSkKK3sKKyAgICAvLyBBbiBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSBz
aG91bGQgbmV2ZXIgaGF2ZSBhIG11dGFibGUgaW5saW5lIFN0eWxlUHJvcGVydHlTZXQgYXR0YWNo
ZWQuCisgICAgQVNTRVJUKCFvdGhlci5tX2lubGluZVN0eWxlIHx8ICFvdGhlci5tX2lubGluZVN0
eWxlLT5pc011dGFibGUoKSk7CisgICAgbV9pbmxpbmVTdHlsZSA9IG90aGVyLm1faW5saW5lU3R5
bGU7CisKKyAgICBtX2F0dHJpYnV0ZVZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkob3RoZXIubGVuZ3Ro
KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdGhlci5sZW5ndGgoKTsgKytpKQor
ICAgICAgICBtX2F0dHJpYnV0ZVZlY3Rvci51bmNoZWNrZWRBcHBlbmQob3RoZXIuaW1tdXRhYmxl
QXR0cmlidXRlQXJyYXkoKVtpXSk7Cit9CisKK1Bhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURh
dGE+IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjptYWtlTXV0YWJsZUNvcHkoKSBjb25zdAoreworICAg
IGlmIChpc011dGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNdXRhYmxlRWxl
bWVudEF0dHJpYnV0ZURhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhJj4oKnRoaXMpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0
ZURhdGEmPigqdGhpcykpKTsKK30KKworUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4g
RWxlbWVudEF0dHJpYnV0ZURhdGE6Om1ha2VJbW11dGFibGVDb3B5KCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoaXNNdXRhYmxlKCkpOworICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6
ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KG11dGFi
bGVBdHRyaWJ1dGVWZWN0b3IoKS5zaXplKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IChz
bG90KSBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShzdGF0aWNfY2FzdDxjb25zdCBNdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmPigqdGhpcykpKTsKK30KKwordm9pZCBFbGVtZW50QXR0
cmlidXRlRGF0YTo6c2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoUGFzc1JlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBzdHlsZSkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pc011dGFibGUpOwor
ICAgIHN0YXRpY19jYXN0PGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMp
LT5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlID0gc3R5bGU7Cit9CisKK3ZvaWQgRWxlbWVu
dEF0dHJpYnV0ZURhdGE6OmFkZEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkK
K3sKKyAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOworICAgIG11dGFibGVBdHRyaWJ1dGVWZWN0b3Io
KS5hcHBlbmQoYXR0cmlidXRlKTsKK30KKwordm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVt
b3ZlQXR0cmlidXRlKHNpemVfdCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOwor
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKCkpOwor
ICAgIG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5yZW1vdmUoaW5kZXgpOworfQorCitib29sIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjppc0VxdWl2YWxlbnQoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURh
dGEqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXIpCisgICAgICAgIHJldHVybiBpc0Vt
cHR5KCk7CisKKyAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKKyAgICBpZiAobGVuICE9IG90
aGVyLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmli
dXRlID0gYXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgY29uc3QgQXR0cmlidXRlKiBvdGhlckF0
dHIgPSBvdGhlci0+Z2V0QXR0cmlidXRlSXRlbShhdHRyaWJ1dGUtPm5hbWUoKSk7CisgICAgICAg
IGlmICghb3RoZXJBdHRyIHx8IGF0dHJpYnV0ZS0+dmFsdWUoKSAhPSBvdGhlckF0dHItPnZhbHVl
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9y
eU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit7CisgICAgc2l6ZV90IGFjdHVh
bFNpemUgPSBtX2lzTXV0YWJsZSA/IHNpemVvZihFbGVtZW50QXR0cmlidXRlRGF0YSkgOiBzaXpl
Rm9ySW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFXaXRoQXR0cmlidXRlQ291bnQobV9hcnJh
eVNpemUpOworICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMs
IFdlYkNvcmVNZW1vcnlUeXBlczo6RE9NLCBhY3R1YWxTaXplKTsKKyAgICBpbmZvLmFkZE1lbWJl
cihtX2lubGluZVN0eWxlLCAiaW5saW5lU3R5bGUiKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX2Ns
YXNzTmFtZXMsICJjbGFzc05hbWVzIik7CisgICAgaW5mby5hZGRNZW1iZXIobV9pZEZvclN0eWxl
UmVzb2x1dGlvbiwgImlkRm9yU3R5bGVSZXNvbHV0aW9uIik7CisgICAgaWYgKG1faXNNdXRhYmxl
KSB7CisgICAgICAgIGluZm8uYWRkTWVtYmVyKHByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCks
ICJwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpIik7CisgICAgICAgIGluZm8uYWRkTWVtYmVy
KG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKSwgIm11dGFibGVBdHRyaWJ1dGVWZWN0b3IiKTsKKyAg
ICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVuID0gbGVuZ3RoKCk7IGkgPCBsZW47IGkr
KykKKyAgICAgICAgaW5mby5hZGRNZW1iZXIoKmF0dHJpYnV0ZUl0ZW0oaSksICIqYXR0cmlidXRl
SXRlbSIpOworfQorCitzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0
ZW1JbmRleFNsb3dDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKSBjb25zdAoreworICAgIC8vIENvbnRpbnVlIHRvIGNoZWNraW5nIGNh
c2UtaW5zZW5zaXRpdmVseSBhbmQvb3IgZnVsbCBuYW1lc3BhY2VkIG5hbWVzIGlmIG5lY2Vzc2Fy
eToKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAg
IGlmICghYXR0cmlidXRlLT5uYW1lKCkuaGFzUHJlZml4KCkpIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlICYmIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsIGF0dHJp
YnV0ZS0+bG9jYWxOYW1lKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGZhc3RlciB0byBkbyB0aGlz
IGNvbXBhcmlzb24gd2l0aG91dCBjYWxsaW5nIHRvU3RyaW5nLCB3aGljaAorICAgICAgICAgICAg
Ly8gZ2VuZXJhdGVzIGEgdGVtcG9yYXJ5IHN0cmluZyBieSBjb25jYXRlbmF0aW9uLiBCdXQgdGhp
cyBicmFuY2ggaXMgb25seSByZWFjaGVkCisgICAgICAgICAgICAvLyBpZiB0aGUgYXR0cmlidXRl
IG5hbWUgaGFzIGEgcHJlZml4LCB3aGljaCBpcyByYXJlIGluIEhUTUwuCisgICAgICAgICAgICBp
ZiAoZXF1YWxQb3NzaWJseUlnbm9yaW5nQ2FzZShuYW1lLCBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0
cmluZygpLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbm90Rm91bmQ7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IGRmMTYzM2QuLmE3NTU2MTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
MSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDI4ICsyNSwxMzQgQEAKICNpZm5k
ZWYgRWxlbWVudF9oCiAjZGVmaW5lIEVsZW1lbnRfaAogCisjaW5jbHVkZSAiQXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAiQ29sbGVjdGlvblR5cGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkVsZW1lbnRBdHRyaWJ1dGVEYXRhLmgiCiAjaW5jbHVkZSAiRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
VHlwZXMuaCIKKyNpbmNsdWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQXR0cjsKLWNsYXNzIEF0dHJpYnV0ZTsKIGNsYXNzIENsaWVudFJlY3Q7
CiBjbGFzcyBDbGllbnRSZWN0TGlzdDsKIGNsYXNzIERPTVN0cmluZ01hcDsKIGNsYXNzIERPTVRv
a2VuTGlzdDsKK2NsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFbGVtZW50UmFyZURhdGE7CiBjbGFzcyBF
bGVtZW50U2hhZG93OworY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE7CiBjbGFz
cyBJbnRTaXplOwogY2xhc3MgTG9jYWxlOworY2xhc3MgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhOwogY2xhc3MgUHNldWRvRWxlbWVudDsKIGNsYXNzIFJlbmRlclJlZ2lvbjsKIGNsYXNzIFNo
YWRvd1Jvb3Q7CitjbGFzcyBTdHlsZVByb3BlcnR5U2V0OworCitjbGFzcyBFbGVtZW50QXR0cmli
dXRlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
RWxlbWVudEF0dHJpYnV0ZURhdGE+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhPiBjcmVhdGVJbW11dGFibGUoY29uc3QgVmVjdG9yPEF0dHJpYnV0
ZT4mKTsKKworICAgIC8vIE92ZXJyaWRlIFJlZkNvdW50ZWQncyBkZXJlZigpIHRvIGVuc3VyZSBv
cGVyYXRvciBkZWxldGUgaXMgY2FsbGVkIG9uCisgICAgLy8gdGhlIGFwcHJvcHJpYXRlIHN1YmNs
YXNzIHR5cGUuCisgICAgdm9pZCBkZXJlZigpOworCisgICAgdm9pZCBjbGVhckNsYXNzKCkgY29u
c3QgeyBtX2NsYXNzTmFtZXMuY2xlYXIoKTsgfQorICAgIHZvaWQgc2V0Q2xhc3MoY29uc3QgQXRv
bWljU3RyaW5nJiBjbGFzc05hbWUsIGJvb2wgc2hvdWxkRm9sZENhc2UpIGNvbnN0IHsgbV9jbGFz
c05hbWVzLnNldChjbGFzc05hbWUsIHNob3VsZEZvbGRDYXNlKTsgfQorICAgIGNvbnN0IFNwYWNl
U3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzTmFtZXM7IH0K
KworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRGb3JTdHlsZVJlc29sdXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2lkRm9yU3R5bGVSZXNvbHV0aW9uOyB9CisgICAgdm9pZCBzZXRJZEZvclN0eWxl
UmVzb2x1dGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKSBjb25zdCB7IG1faWRGb3JTdHls
ZVJlc29sdXRpb24gPSBuZXdJZDsgfQorCisgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogaW5s
aW5lU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZVN0eWxlLmdldCgpOyB9CisKKyAgICBj
b25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpIGNvbnN0
OworICAgIHZvaWQgc2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoUGFzc1JlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PikgY29uc3Q7CisKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7CisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgpOyB9CisKKyAgICBjb25zdCBB
dHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIGNvbnN0
IEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7
CisgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KTsKKyAgICBBdHRy
aWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIHNpemVf
dCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAg
IHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBi
b29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0OworCisgICAgLy8gVGhlc2UgZnVu
Y3Rpb25zIGRvIG5vIGVycm9yIGNoZWNraW5nLgorICAgIHZvaWQgYWRkQXR0cmlidXRlKGNvbnN0
IEF0dHJpYnV0ZSYpOworICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKHNpemVfdCBpbmRleCk7CisK
KyAgICBib29sIGhhc0lEKCkgY29uc3QgeyByZXR1cm4gIW1faWRGb3JTdHlsZVJlc29sdXRpb24u
aXNOdWxsKCk7IH0KKyAgICBib29sIGhhc0NsYXNzKCkgY29uc3QgeyByZXR1cm4gIW1fY2xhc3NO
YW1lcy5pc051bGwoKTsgfQorCisgICAgYm9vbCBpc0VxdWl2YWxlbnQoY29uc3QgRWxlbWVudEF0
dHJpYnV0ZURhdGEqIG90aGVyKSBjb25zdDsKKworICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2Uo
TWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OworCisgICAgYm9vbCBpc011dGFibGUoKSBjb25zdCB7
IHJldHVybiBtX2lzTXV0YWJsZTsgfQorICAgIGNvbnN0IEF0dHJpYnV0ZSogaW1tdXRhYmxlQXR0
cmlidXRlQXJyYXkoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhKCk7CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEodW5zaWduZWQgYXJyYXlTaXplKTsKKyAg
ICBFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSYsIGJvb2wg
aXNNdXRhYmxlKTsKKworICAgIHVuc2lnbmVkIG1faXNNdXRhYmxlIDogMTsKKyAgICB1bnNpZ25l
ZCBtX2FycmF5U2l6ZSA6IDI4OworICAgIG11dGFibGUgdW5zaWduZWQgbV9wcmVzZW50YXRpb25B
dHRyaWJ1dGVTdHlsZUlzRGlydHkgOiAxOworICAgIG11dGFibGUgdW5zaWduZWQgbV9zdHlsZUF0
dHJpYnV0ZUlzRGlydHkgOiAxOworI2lmIEVOQUJMRShTVkcpCisgICAgbXV0YWJsZSB1bnNpZ25l
ZCBtX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5IDogMTsKKyNlbmRpZgorCisgICAgbXV0
YWJsZSBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9pbmxpbmVTdHlsZTsKKyAgICBtdXRhYmxl
IFNwYWNlU3BsaXRTdHJpbmcgbV9jbGFzc05hbWVzOworICAgIG11dGFibGUgQXRvbWljU3RyaW5n
IG1faWRGb3JTdHlsZVJlc29sdXRpb247CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEVs
ZW1lbnQ7CisgICAgZnJpZW5kIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CisgICAgZnJpZW5kIGNsYXNz
IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOworICAgIGZyaWVuZCBjbGFzcyBNdXRhYmxl
RWxlbWVudEF0dHJpYnV0ZURhdGE7CisjaWYgRU5BQkxFKFNWRykKKyAgICBmcmllbmQgY2xhc3Mg
U1ZHRWxlbWVudDsKKyNlbmRpZgorCisgICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsK
KyAgICBjb25zdCBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0OworICAgIHNpemVf
dCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXhTbG93Q2FzZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7CisKKyAgICBQYXNzUmVmUHRy
PEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBtYWtlTXV0YWJsZUNvcHkoKSBjb25zdDsKKyAgICBQYXNz
UmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBtYWtlSW1tdXRhYmxlQ29weSgpIGNvbnN0Owor
CisgICAgVmVjdG9yPEF0dHJpYnV0ZSwgND4mIG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKTsKKyAg
ICBjb25zdCBWZWN0b3I8QXR0cmlidXRlLCA0PiYgbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpIGNv
bnN0OworfTsKKworY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEgOiBwdWJsaWMg
RWxlbWVudEF0dHJpYnV0ZURhdGEgeworcHVibGljOgorICAgIEltbXV0YWJsZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7CisgICAgSW1tdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJik7CisgICAg
fkltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCk7CisKKyAgICB2b2lkKiBtX2F0dHJpYnV0
ZUFycmF5OworfTsKKworY2xhc3MgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVibGlj
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhIHsKK3B1YmxpYzoKKyAgICBNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEoKTsKKyAgICBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgSW1tdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmKTsKKyAgICBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGEoY29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJik7CisKKyAgICBtdXRhYmxlIFJl
ZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlOworICAg
IFZlY3RvcjxBdHRyaWJ1dGUsIDQ+IG1fYXR0cmlidXRlVmVjdG9yOworfTsKIAogZW51bSBBZmZl
Y3RlZFNlbGVjdG9yVHlwZSB7CiAgICAgQWZmZWN0ZWRTZWxlY3RvckNoZWNrZWQgPSAxLApAQCAt
ODc3LDYgKzk4MywxMTYgQEAgaW5saW5lIGJvb2wgaXNTaGFkb3dIb3N0KGNvbnN0IE5vZGUqIG5v
ZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxl
bWVudChub2RlKS0+c2hhZG93KCk7CiB9CitpbmxpbmUgVmVjdG9yPEF0dHJpYnV0ZSwgND4mIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjptdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkKK3sKKyAgICBBU1NF
UlQobV9pc011dGFibGUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7Cit9CisKK2lubGluZSBjb25z
dCBWZWN0b3I8QXR0cmlidXRlLCA0PiYgRWxlbWVudEF0dHJpYnV0ZURhdGE6Om11dGFibGVBdHRy
aWJ1dGVWZWN0b3IoKSBjb25zdAoreworICAgIEFTU0VSVChtX2lzTXV0YWJsZSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMp
LT5tX2F0dHJpYnV0ZVZlY3RvcjsKK30KKworaW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVu
dEF0dHJpYnV0ZURhdGE6OmltbXV0YWJsZUF0dHJpYnV0ZUFycmF5KCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIW1faXNNdXRhYmxlKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBB
dHRyaWJ1dGUqPigmc3RhdGljX2Nhc3Q8Y29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVBcnJheSk7Cit9CisKK2lubGluZSBzaXplX3QgRWxlbWVu
dEF0dHJpYnV0ZURhdGE6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKGlzTXV0YWJsZSgpKQor
ICAgICAgICByZXR1cm4gbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpLnNpemUoKTsKKyAgICByZXR1
cm4gbV9hcnJheVNpemU7Cit9CisKK2lubGluZSBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBFbGVt
ZW50QXR0cmlidXRlRGF0YTo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSBjb25zdAorewor
ICAgIGlmICghbV9pc011dGFibGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9wcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZS5nZXQoKTsKK30KKworaW5saW5lIEF0dHJpYnV0ZSogRWxl
bWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpCit7CisgICAgc2l6ZV90IGluZGV4
ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Up
OworICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZUl0
ZW0oaW5kZXgpOworICAgIHJldHVybiAwOworfQorCitpbmxpbmUgY29uc3QgQXR0cmlidXRlKiBF
bGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKK3sKKyAgICBzaXpl
X3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSwgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSk7CisgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gYXR0
cmlidXRlSXRlbShpbmRleCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2lubGluZSBzaXplX3QgRWxl
bWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVJdGVtKGkpLT5uYW1lKCkubWF0Y2hlcyhu
YW1lKSkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gbm90Rm91bmQ7
Cit9CisKKy8vIFdlIHVzZSBhIGJvb2xlYW4gcGFyYW1ldGVyIGluc3RlYWQgb2YgY2FsbGluZyBz
aG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlIHNvIHRoYXQgdGhlIGNhbGxlcgorLy8gY2FuIHR1bmUg
dGhlIGJlaGF2aW9yIChoYXNBdHRyaWJ1dGUgaXMgY2FzZSBzZW5zaXRpdmUgd2hlcmVhcyBnZXRB
dHRyaWJ1dGUgaXMgbm90KS4KK2lubGluZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6Omdl
dEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgo
KTsKKyAgICBib29sIGRvU2xvd0NoZWNrID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZTsKKwor
ICAgIC8vIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgYXR0cmlidXRlIGV4aXN0cyBh
bmQgaXRzIG5hbWUgZXhhY3RseSBtYXRjaGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW47ICsraSkgeworICAgICAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJp
YnV0ZUl0ZW0oaSk7CisgICAgICAgIGlmICghYXR0cmlidXRlLT5uYW1lKCkuaGFzUHJlZml4KCkp
IHsKKyAgICAgICAgICAgIGlmIChuYW1lID09IGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZG9TbG93
Q2hlY2sgPSB0cnVlOworICAgIH0KKworICAgIGlmIChkb1Nsb3dDaGVjaykKKyAgICAgICAgcmV0
dXJuIGdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKG5hbWUsIHNob3VsZElnbm9yZUF0dHJp
YnV0ZUNhc2UpOworICAgIHJldHVybiBub3RGb3VuZDsKK30KKworaW5saW5lIGNvbnN0IEF0dHJp
YnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoKCk7ICsraSkgeworICAgICAgICBpZiAoYXR0cmlidXRlSXRlbShpKS0+bmFtZSgpLm1hdGNo
ZXMobmFtZSkpCisgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlSXRlbShpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIDA7Cit9CisKK2lubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
OjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGF0dHJp
YnV0ZUl0ZW0oaSktPm5hbWUoKS5tYXRjaGVzKG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIGF0
dHJpYnV0ZUl0ZW0oaSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbmxpbmUgY29uc3Qg
QXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6YXR0cmlidXRlSXRlbSh1bnNpZ25lZCBp
bmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRl
eCA8IGxlbmd0aCgpKTsKKyAgICBpZiAobV9pc011dGFibGUpCisgICAgICAgIHJldHVybiAmbXV0
YWJsZUF0dHJpYnV0ZVZlY3RvcigpLmF0KGluZGV4KTsKKyAgICByZXR1cm4gJmltbXV0YWJsZUF0
dHJpYnV0ZUFycmF5KClbaW5kZXhdOworfQorCitpbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50QXR0
cmlidXRlRGF0YTo6YXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGxlbmd0aCgpKTsKKyAgICByZXR1cm4g
Jm11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5hdChpbmRleCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjk3MWI3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQotICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQotICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTAsIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJFbGVtZW50QXR0cmlidXRlRGF0YS5oIgotCi0jaW5jbHVkZSAi
V2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0
cnVtZW50YXRpb25WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgU2Ft
ZVNpemVBc0VsZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVB
c0VsZW1lbnRBdHRyaWJ1dGVEYXRhPiB7Ci0gICAgdW5zaWduZWQgYml0ZmllbGQ7Ci0gICAgdm9p
ZCogcmVmUHRyc1szXTsKLX07Ci0KLUNPTVBJTEVfQVNTRVJUKHNpemVvZihFbGVtZW50QXR0cmli
dXRlRGF0YSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNFbGVtZW50QXR0cmlidXRlRGF0YSksIGVsZW1l
bnRfYXR0cmlidXRlX2RhdGFfc2hvdWxkX3N0YXlfc21hbGwpOwotCi1zdGF0aWMgc2l6ZV90IHNp
emVGb3JJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YVdpdGhBdHRyaWJ1dGVDb3VudCh1bnNp
Z25lZCBjb3VudCkKLXsKLSAgICByZXR1cm4gc2l6ZW9mKEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhKSAtIHNpemVvZih2b2lkKikgKyBzaXplb2YoQXR0cmlidXRlKSAqIGNvdW50OwotfQot
Ci1QYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6
Y3JlYXRlSW1tdXRhYmxlKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQotewot
ICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KGF0dHJpYnV0ZXMuc2l6ZSgpKSk7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyAoc2xvdCkgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEo
YXR0cmlidXRlcykpOwotfQotCi1QYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVt
ZW50QXR0cmlidXRlRGF0YTo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSk7Ci19Ci0KLUltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjpJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBWZWN0b3I8QXR0cmli
dXRlPiYgYXR0cmlidXRlcykKLSAgICA6IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKGF0dHJpYnV0ZXMu
c2l6ZSgpKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FycmF5U2l6ZTsgKytp
KQotICAgICAgICBuZXcgKCZyZWludGVycHJldF9jYXN0PEF0dHJpYnV0ZSo+KCZtX2F0dHJpYnV0
ZUFycmF5KVtpXSkgQXR0cmlidXRlKGF0dHJpYnV0ZXNbaV0pOwotfQotCi1JbW11dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YTo6fkltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcnJheVNpemU7ICsraSkKLSAgICAgICAgKHJl
aW50ZXJwcmV0X2Nhc3Q8QXR0cmlidXRlKj4oJm1fYXR0cmlidXRlQXJyYXkpW2ldKS5+QXR0cmli
dXRlKCk7Ci19Ci0KLUltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpJbW11dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YShjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmIG90aGVy
KQotICAgIDogRWxlbWVudEF0dHJpYnV0ZURhdGEob3RoZXIsIGZhbHNlKQotewotICAgIEFTU0VS
VCghb3RoZXIubV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSk7Ci0KLSAgICBpZiAob3RoZXIu
bV9pbmxpbmVTdHlsZSkgewotICAgICAgICBBU1NFUlQoIW90aGVyLm1faW5saW5lU3R5bGUtPmhh
c0NTU09NV3JhcHBlcigpKTsKLSAgICAgICAgbV9pbmxpbmVTdHlsZSA9IG90aGVyLm1faW5saW5l
U3R5bGUtPmltbXV0YWJsZUNvcHlJZk5lZWRlZCgpOwotICAgIH0KLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2FycmF5U2l6ZTsgKytpKQotICAgICAgICBuZXcgKCZyZWludGVycHJl
dF9jYXN0PEF0dHJpYnV0ZSo+KCZtX2F0dHJpYnV0ZUFycmF5KVtpXSkgQXR0cmlidXRlKCpvdGhl
ci5hdHRyaWJ1dGVJdGVtKGkpKTsKLX0KLQotRWxlbWVudEF0dHJpYnV0ZURhdGE6OkVsZW1lbnRB
dHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlciwgYm9vbCBpc011
dGFibGUpCi0gICAgOiBtX2lzTXV0YWJsZShpc011dGFibGUpCi0gICAgLCBtX2FycmF5U2l6ZShp
c011dGFibGUgPyAwIDogb3RoZXIubGVuZ3RoKCkpCi0gICAgLCBtX3ByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlSXNEaXJ0eShvdGhlci5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0
eSkKLSAgICAsIG1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5KG90aGVyLm1fc3R5bGVBdHRyaWJ1dGVJ
c0RpcnR5KQotI2lmIEVOQUJMRShTVkcpCi0gICAgLCBtX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0Fy
ZURpcnR5KG90aGVyLm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkpCi0jZW5kaWYKLSAg
ICAsIG1fY2xhc3NOYW1lcyhvdGhlci5tX2NsYXNzTmFtZXMpCi0gICAgLCBtX2lkRm9yU3R5bGVS
ZXNvbHV0aW9uKG90aGVyLm1faWRGb3JTdHlsZVJlc29sdXRpb24pCi17Ci0gICAgLy8gTk9URTog
VGhlIGlubGluZSBzdHlsZSBpcyBjb3BpZWQgYnkgdGhlIHN1YmNsYXNzIGNvcHkgY29uc3RydWN0
b3Igc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggaXQgaGVyZS4KLX0KLQotTXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29u
c3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlcikKLSAgICA6IEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKG90aGVyLCB0cnVlKQotICAgICwgbV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHls
ZShvdGhlci5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKQotICAgICwgbV9hdHRyaWJ1dGVW
ZWN0b3Iob3RoZXIubV9hdHRyaWJ1dGVWZWN0b3IpCi17Ci0gICAgbV9pbmxpbmVTdHlsZSA9IG90
aGVyLm1faW5saW5lU3R5bGUgPyBvdGhlci5tX2lubGluZVN0eWxlLT5jb3B5KCkgOiAwOwotfQot
Ci1NdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6Ok11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0
YShjb25zdCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYgb3RoZXIpCi0gICAgOiBFbGVt
ZW50QXR0cmlidXRlRGF0YShvdGhlciwgdHJ1ZSkKLXsKLSAgICAvLyBBbiBJbW11dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YSBzaG91bGQgbmV2ZXIgaGF2ZSBhIG11dGFibGUgaW5saW5lIFN0eWxl
UHJvcGVydHlTZXQgYXR0YWNoZWQuCi0gICAgQVNTRVJUKCFvdGhlci5tX2lubGluZVN0eWxlIHx8
ICFvdGhlci5tX2lubGluZVN0eWxlLT5pc011dGFibGUoKSk7Ci0gICAgbV9pbmxpbmVTdHlsZSA9
IG90aGVyLm1faW5saW5lU3R5bGU7Ci0KLSAgICBtX2F0dHJpYnV0ZVZlY3Rvci5yZXNlcnZlQ2Fw
YWNpdHkob3RoZXIubGVuZ3RoKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdGhl
ci5sZW5ndGgoKTsgKytpKQotICAgICAgICBtX2F0dHJpYnV0ZVZlY3Rvci51bmNoZWNrZWRBcHBl
bmQob3RoZXIuaW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKVtpXSk7Ci19Ci0KLVBhc3NSZWZQdHI8
RWxlbWVudEF0dHJpYnV0ZURhdGE+IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjptYWtlTXV0YWJsZUNv
cHkoKSBjb25zdAotewotICAgIGlmIChpc011dGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgTXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJj4oKnRoaXMpKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgSW1tdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmPigqdGhpcykpKTsKLX0KLQotUGFzc1JlZlB0cjxFbGVt
ZW50QXR0cmlidXRlRGF0YT4gRWxlbWVudEF0dHJpYnV0ZURhdGE6Om1ha2VJbW11dGFibGVDb3B5
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOwotICAgIHZvaWQqIHNsb3QgPSBX
VEY6OmZhc3RNYWxsb2Moc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhV2l0aEF0
dHJpYnV0ZUNvdW50KG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5zaXplKCkpKTsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IChzbG90KSBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShzdGF0
aWNfY2FzdDxjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmPigqdGhpcykpKTsKLX0K
LQotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6YWRkQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0
ZSYgYXR0cmlidXRlKQotewotICAgIEFTU0VSVChpc011dGFibGUoKSk7Ci0gICAgbXV0YWJsZUF0
dHJpYnV0ZVZlY3RvcigpLmFwcGVuZChhdHRyaWJ1dGUpOwotfQotCi12b2lkIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjpyZW1vdmVBdHRyaWJ1dGUoc2l6ZV90IGluZGV4KQotewotICAgIEFTU0VSVChp
c011dGFibGUoKSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXgg
PCBsZW5ndGgoKSk7Ci0gICAgbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpLnJlbW92ZShpbmRleCk7
Ci19Ci0KLWJvb2wgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmlzRXF1aXZhbGVudChjb25zdCBFbGVt
ZW50QXR0cmlidXRlRGF0YSogb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKCFvdGhlcikKLSAgICAg
ICAgcmV0dXJuIGlzRW1wdHkoKTsKLQotICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwotICAg
IGlmIChsZW4gIT0gb3RoZXItPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgY29uc3QgQXR0
cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVJdGVtKGkpOwotICAgICAgICBjb25zdCBBdHRy
aWJ1dGUqIG90aGVyQXR0ciA9IG90aGVyLT5nZXRBdHRyaWJ1dGVJdGVtKGF0dHJpYnV0ZS0+bmFt
ZSgpKTsKLSAgICAgICAgaWYgKCFvdGhlckF0dHIgfHwgYXR0cmlidXRlLT52YWx1ZSgpICE9IG90
aGVyQXR0ci0+dmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVwb3J0TWVt
b3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKLXsKLSAg
ICBzaXplX3QgYWN0dWFsU2l6ZSA9IG1faXNNdXRhYmxlID8gc2l6ZW9mKEVsZW1lbnRBdHRyaWJ1
dGVEYXRhKSA6IHNpemVGb3JJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YVdpdGhBdHRyaWJ1
dGVDb3VudChtX2FycmF5U2l6ZSk7Ci0gICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2Jq
ZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpET00sIGFjdHVhbFNpemUpOwotICAg
IGluZm8uYWRkTWVtYmVyKG1faW5saW5lU3R5bGUsICJpbmxpbmVTdHlsZSIpOwotICAgIGluZm8u
YWRkTWVtYmVyKG1fY2xhc3NOYW1lcywgImNsYXNzTmFtZXMiKTsKLSAgICBpbmZvLmFkZE1lbWJl
cihtX2lkRm9yU3R5bGVSZXNvbHV0aW9uLCAiaWRGb3JTdHlsZVJlc29sdXRpb24iKTsKLSAgICBp
ZiAobV9pc011dGFibGUpIHsKLSAgICAgICAgaW5mby5hZGRNZW1iZXIocHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoKSwgInByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkiKTsKLSAgICAgICAg
aW5mby5hZGRNZW1iZXIobXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpLCAibXV0YWJsZUF0dHJpYnV0
ZVZlY3RvciIpOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW4gPSBsZW5ndGgo
KTsgaSA8IGxlbjsgaSsrKQotICAgICAgICBpbmZvLmFkZE1lbWJlcigqYXR0cmlidXRlSXRlbShp
KSwgIiphdHRyaWJ1dGVJdGVtIik7Ci19Ci0KLXNpemVfdCBFbGVtZW50QXR0cmlidXRlRGF0YTo6
Z2V0QXR0cmlidXRlSXRlbUluZGV4U2xvd0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBi
b29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0Ci17Ci0gICAgLy8gQ29udGludWUg
dG8gY2hlY2tpbmcgY2FzZS1pbnNlbnNpdGl2ZWx5IGFuZC9vciBmdWxsIG5hbWVzcGFjZWQgbmFt
ZXMgaWYgbmVjZXNzYXJ5OgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKTsg
KytpKSB7Ci0gICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlSXRl
bShpKTsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGUtPm5hbWUoKS5oYXNQcmVmaXgoKSkgewotICAg
ICAgICAgICAgaWYgKHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UgJiYgZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgYXR0cmlidXRlLT5sb2NhbE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV291bGQgYmUgZmFz
dGVyIHRvIGRvIHRoaXMgY29tcGFyaXNvbiB3aXRob3V0IGNhbGxpbmcgdG9TdHJpbmcsIHdoaWNo
Ci0gICAgICAgICAgICAvLyBnZW5lcmF0ZXMgYSB0ZW1wb3Jhcnkgc3RyaW5nIGJ5IGNvbmNhdGVu
YXRpb24uIEJ1dCB0aGlzIGJyYW5jaCBpcyBvbmx5IHJlYWNoZWQKLSAgICAgICAgICAgIC8vIGlm
IHRoZSBhdHRyaWJ1dGUgbmFtZSBoYXMgYSBwcmVmaXgsIHdoaWNoIGlzIHJhcmUgaW4gSFRNTC4K
LSAgICAgICAgICAgIGlmIChlcXVhbFBvc3NpYmx5SWdub3JpbmdDYXNlKG5hbWUsIGF0dHJpYnV0
ZS0+bmFtZSgpLnRvU3RyaW5nKCksIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBub3RGb3Vu
ZDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1
dGVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhmMDZiYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
LSAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBF
bGVtZW50QXR0cmlidXRlRGF0YV9oCi0jZGVmaW5lIEVsZW1lbnRBdHRyaWJ1dGVEYXRhX2gKLQot
I2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIlNwYWNlU3BsaXRTdHJpbmcuaCIKLSNp
bmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCi0jaW5jbHVkZSA8d3RmL05vdEZvdW5kLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEltbXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOwotY2xhc3MgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOwot
Ci1jbGFzcyBFbGVtZW50QXR0cmlidXRlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEVsZW1lbnRB
dHRyaWJ1dGVEYXRhPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGNyZWF0ZSgpOwotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBjcmVhdGVJbW11dGFibGUo
Y29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mKTsKLQotICAgIC8vIE92ZXJyaWRlIFJlZkNvdW50ZWQn
cyBkZXJlZigpIHRvIGVuc3VyZSBvcGVyYXRvciBkZWxldGUgaXMgY2FsbGVkIG9uCi0gICAgLy8g
dGhlIGFwcHJvcHJpYXRlIHN1YmNsYXNzIHR5cGUuCi0gICAgdm9pZCBkZXJlZigpOwotCi0gICAg
dm9pZCBjbGVhckNsYXNzKCkgY29uc3QgeyBtX2NsYXNzTmFtZXMuY2xlYXIoKTsgfQotICAgIHZv
aWQgc2V0Q2xhc3MoY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUsIGJvb2wgc2hvdWxkRm9s
ZENhc2UpIGNvbnN0IHsgbV9jbGFzc05hbWVzLnNldChjbGFzc05hbWUsIHNob3VsZEZvbGRDYXNl
KTsgfQotICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMoKSBjb25zdCB7IHJl
dHVybiBtX2NsYXNzTmFtZXM7IH0KLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRGb3JTdHls
ZVJlc29sdXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lkRm9yU3R5bGVSZXNvbHV0aW9uOyB9Ci0g
ICAgdm9pZCBzZXRJZEZvclN0eWxlUmVzb2x1dGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lk
KSBjb25zdCB7IG1faWRGb3JTdHlsZVJlc29sdXRpb24gPSBuZXdJZDsgfQotCi0gICAgY29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZVN0
eWxlLmdldCgpOyB9Ci0KLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcmVzZW50YXRpb25B
dHRyaWJ1dGVTdHlsZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0UHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PikgY29uc3Q7Ci0KLSAgICBzaXplX3Qg
bGVuZ3RoKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0
aCgpOyB9Ci0KLSAgICAvLyBJbnRlcm5hbCBpbnRlcmZhY2UuCi0gICAgY29uc3QgQXR0cmlidXRl
KiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLSAgICBjb25zdCBBdHRyaWJ1
dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwotICAgIEF0
dHJpYnV0ZSogYXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCk7Ci0gICAgQXR0cmlidXRlKiBn
ZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLSAgICBzaXplX3QgZ2V0QXR0
cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKLSAgICBzaXplX3Qg
Z2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91
bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKLQotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBk
byBubyBlcnJvciBjaGVja2luZy4KLSAgICB2b2lkIGFkZEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1
dGUmKTsKLSAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgpOwotCi0gICAgYm9v
bCBoYXNJRCgpIGNvbnN0IHsgcmV0dXJuICFtX2lkRm9yU3R5bGVSZXNvbHV0aW9uLmlzTnVsbCgp
OyB9Ci0gICAgYm9vbCBoYXNDbGFzcygpIGNvbnN0IHsgcmV0dXJuICFtX2NsYXNzTmFtZXMuaXNO
dWxsKCk7IH0KLQotICAgIGJvb2wgaXNFcXVpdmFsZW50KGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVE
YXRhKiBvdGhlcikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qKSBjb25zdDsKLQotICAgIGJvb2wgaXNNdXRhYmxlKCkgY29uc3QgeyByZXR1cm4g
bV9pc011dGFibGU7IH0KLSAgICBjb25zdCBBdHRyaWJ1dGUqIGltbXV0YWJsZUF0dHJpYnV0ZUFy
cmF5KCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBFbGVtZW50QXR0cmlidXRlRGF0YSgpCi0g
ICAgICAgIDogbV9pc011dGFibGUodHJ1ZSkKLSAgICAgICAgLCBtX2FycmF5U2l6ZSgwKQotICAg
ICAgICAsIG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KGZhbHNlKQotICAgICAg
ICAsIG1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5KGZhbHNlKQotI2lmIEVOQUJMRShTVkcpCi0gICAg
ICAgICwgbV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eShmYWxzZSkKLSNlbmRpZgotICAg
IHsgfQotCi0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEodW5zaWduZWQgYXJyYXlTaXplKQotICAg
ICAgICA6IG1faXNNdXRhYmxlKGZhbHNlKQotICAgICAgICAsIG1fYXJyYXlTaXplKGFycmF5U2l6
ZSkKLSAgICAgICAgLCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eShmYWxzZSkK
LSAgICAgICAgLCBtX3N0eWxlQXR0cmlidXRlSXNEaXJ0eShmYWxzZSkKLSNpZiBFTkFCTEUoU1ZH
KQotICAgICAgICAsIG1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkoZmFsc2UpCi0jZW5k
aWYKLSAgICB7IH0KLQotICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRy
aWJ1dGVEYXRhJiwgYm9vbCBpc011dGFibGUpOwotCi0gICAgdW5zaWduZWQgbV9pc011dGFibGUg
OiAxOwotICAgIHVuc2lnbmVkIG1fYXJyYXlTaXplIDogMjg7Ci0gICAgbXV0YWJsZSB1bnNpZ25l
ZCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSA6IDE7Ci0gICAgbXV0YWJsZSB1
bnNpZ25lZCBtX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSA6IDE7Ci0jaWYgRU5BQkxFKFNWRykKLSAg
ICBtdXRhYmxlIHVuc2lnbmVkIG1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkgOiAxOwot
I2VuZGlmCi0KLSAgICBtdXRhYmxlIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtX2lubGluZVN0
eWxlOwotICAgIG11dGFibGUgU3BhY2VTcGxpdFN0cmluZyBtX2NsYXNzTmFtZXM7Ci0gICAgbXV0
YWJsZSBBdG9taWNTdHJpbmcgbV9pZEZvclN0eWxlUmVzb2x1dGlvbjsKLQotcHJpdmF0ZToKLSAg
ICBmcmllbmQgY2xhc3MgRWxlbWVudDsKLSAgICBmcmllbmQgY2xhc3MgU3R5bGVkRWxlbWVudDsK
LSAgICBmcmllbmQgY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE7Ci0gICAgZnJp
ZW5kIGNsYXNzIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTsKLSNpZiBFTkFCTEUoU1ZHKQot
ICAgIGZyaWVuZCBjbGFzcyBTVkdFbGVtZW50OwotI2VuZGlmCi0KLSAgICBBdHRyaWJ1dGUqIGdl
dEF0dHJpYnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2UpOwotICAgIGNvbnN0IEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkg
Y29uc3Q7Ci0gICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsK
LQotICAgIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IG1ha2VNdXRhYmxlQ29weSgp
IGNvbnN0OwotICAgIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IG1ha2VJbW11dGFi
bGVDb3B5KCkgY29uc3Q7Ci0KLSAgICBWZWN0b3I8QXR0cmlidXRlLCA0PiYgbXV0YWJsZUF0dHJp
YnV0ZVZlY3RvcigpOwotICAgIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBtdXRhYmxlQXR0
cmlidXRlVmVjdG9yKCkgY29uc3Q7Ci19OwotCi1jbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YSA6IHB1YmxpYyBFbGVtZW50QXR0cmlidXRlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgSW1t
dXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mKTsKLSAg
ICBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEmKTsKLSAgICB+SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoKTsKLQotICAg
IHZvaWQqIG1fYXR0cmlidXRlQXJyYXk7Ci19OwotCi1jbGFzcyBNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEgOiBwdWJsaWMgRWxlbWVudEF0dHJpYnV0ZURhdGEgewotcHVibGljOgotICAgIE11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSgpIHsgfQotICAgIE11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YShjb25zdCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYpOwotICAgIE11dGFi
bGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEm
KTsKLQotICAgIG11dGFibGUgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1fcHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGU7Ci0gICAgVmVjdG9yPEF0dHJpYnV0ZSwgND4gbV9hdHRyaWJ1dGVWZWN0
b3I7Ci19OwotCi1pbmxpbmUgVmVjdG9yPEF0dHJpYnV0ZSwgND4mIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjptdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkKLXsKLSAgICBBU1NFUlQobV9pc011dGFibGUp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0
aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7Ci19Ci0KLWlubGluZSBjb25zdCBWZWN0b3I8QXR0cmli
dXRlLCA0PiYgRWxlbWVudEF0dHJpYnV0ZURhdGE6Om11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKSBj
b25zdAotewotICAgIEFTU0VSVChtX2lzTXV0YWJsZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMpLT5tX2F0dHJpYnV0ZVZl
Y3RvcjsKLX0KLQotaW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6
OmltbXV0YWJsZUF0dHJpYnV0ZUFycmF5KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1faXNNdXRh
YmxlKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdHRyaWJ1dGUqPigmc3Rh
dGljX2Nhc3Q8Y29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9h
dHRyaWJ1dGVBcnJheSk7Ci19Ci0KLWlubGluZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6
Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTXV0YWJsZSgpKQotICAgICAgICByZXR1cm4g
bXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpLnNpemUoKTsKLSAgICByZXR1cm4gbV9hcnJheVNpemU7
Ci19Ci0KLWlubGluZSBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBFbGVtZW50QXR0cmlidXRlRGF0
YTo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSBjb25zdAotewotICAgIGlmICghbV9pc011
dGFibGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBN
dXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZS5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnNl
dFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
c3R5bGUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKLSAgICBzdGF0aWNfY2Fz
dDxjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9wcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSA9IHN0eWxlOwotfQotCi1pbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50
QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkKLXsKLSAgICBzaXplX3QgaW5kZXggPSBn
ZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSk7Ci0g
ICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gYXR0cmlidXRlSXRlbShp
bmRleCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAotewotICAgIHNpemVfdCBp
bmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVD
YXNlKTsKLSAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiBhdHRyaWJ1
dGVJdGVtKGluZGV4KTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW5saW5lIHNpemVfdCBFbGVtZW50
QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZUl0ZW0oaSktPm5hbWUoKS5tYXRjaGVzKG5hbWUp
KQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiBub3RGb3VuZDsKLX0K
LQotLy8gV2UgdXNlIGEgYm9vbGVhbiBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBjYWxsaW5nIHNob3Vs
ZElnbm9yZUF0dHJpYnV0ZUNhc2Ugc28gdGhhdCB0aGUgY2FsbGVyCi0vLyBjYW4gdHVuZSB0aGUg
YmVoYXZpb3IgKGhhc0F0dHJpYnV0ZSBpcyBjYXNlIHNlbnNpdGl2ZSB3aGVyZWFzIGdldEF0dHJp
YnV0ZSBpcyBub3QpLgotaW5saW5lIHNpemVfdCBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0
cmlidXRlSXRlbUluZGV4KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKSBjb25zdAotewotICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwot
ICAgIGJvb2wgZG9TbG93Q2hlY2sgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlOwotCi0gICAg
Ly8gT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBhdHRyaWJ1dGUgZXhpc3RzIGFuZCBp
dHMgbmFtZSBleGFjdGx5IG1hdGNoZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bjsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRl
SXRlbShpKTsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGUtPm5hbWUoKS5oYXNQcmVmaXgoKSkgewot
ICAgICAgICAgICAgaWYgKG5hbWUgPT0gYXR0cmlidXRlLT5sb2NhbE5hbWUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkb1Nsb3dDaGVj
ayA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGRvU2xvd0NoZWNrKQotICAgICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlSXRlbUluZGV4U2xvd0Nhc2UobmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRl
Q2FzZSk7Ci0gICAgcmV0dXJuIG5vdEZvdW5kOwotfQotCi1pbmxpbmUgY29uc3QgQXR0cmlidXRl
KiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVJdGVtKGkpLT5uYW1lKCkubWF0Y2hlcyhu
YW1lKSkKLSAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVJdGVtKGkpOwotICAgIH0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6Omdl
dEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoYXR0cmlidXRl
SXRlbShpKS0+bmFtZSgpLm1hdGNoZXMobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gYXR0cmli
dXRlSXRlbShpKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlubGluZSBjb25zdCBBdHRy
aWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwg
bGVuZ3RoKCkpOwotICAgIGlmIChtX2lzTXV0YWJsZSkKLSAgICAgICAgcmV0dXJuICZtdXRhYmxl
QXR0cmlidXRlVmVjdG9yKCkuYXQoaW5kZXgpOwotICAgIHJldHVybiAmaW1tdXRhYmxlQXR0cmli
dXRlQXJyYXkoKVtpbmRleF07Ci19Ci0KLWlubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KQotewotICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKCkpOwotICAgIHJldHVybiAmbXV0
YWJsZUF0dHJpYnV0ZVZlY3RvcigpLmF0KGluZGV4KTsKLX0KLQotaW5saW5lIHZvaWQgRWxlbWVu
dEF0dHJpYnV0ZURhdGE6OmRlcmVmKCkKLXsKLSAgICBpZiAoIWRlcmVmQmFzZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pc011dGFibGUpCi0gICAgICAgIGRlbGV0ZSBzdGF0aWNf
Y2FzdDxNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKTsKLSAgICBlbHNlCi0gICAg
ICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRo
aXMpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFbGVtZW50QXR0cmlidXRlRGF0YV9oCg==
</data>
<flag name="review"
          id="207895"
          type_id="1"
          status="+"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="207903"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187953</attachid>
            <date>2013-02-12 15:53:50 -0800</date>
            <delta_ts>2013-02-12 16:18:34 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>land-109610.diff</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64"></data>
<flag name="commit-queue"
          id="207933"
          type_id="3"
          status="+"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187958</attachid>
            <date>2013-02-12 16:18:34 -0800</date>
            <delta_ts>2013-02-12 17:45:33 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>land-109610-2.diff</filename>
            <type>text/plain</type>
            <size>47034</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMDYwOTMzMS4uYzU4ZDE1YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExNjEsNyArMTE2MSw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20v
RG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKICAgICBkb20vRG9jdW1lbnRUeXBlLmNw
cAogICAgIGRvbS9FbGVtZW50LmNwcAotICAgIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAK
ICAgICBkb20vRWxlbWVudFJhcmVEYXRhLmNwcAogICAgIGRvbS9FbGVtZW50U2hhZG93LmNwcAog
ICAgIGRvbS9FbnRpdHlSZWZlcmVuY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWI3NzdhMC4uNTczNWVi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTAyLTEyICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
IGludG8gRWxlbWVudC5jcHAvaAorICAgICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMDk2MTA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAgIFJlbW92
ZWQgRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwL2ggYW5kIG1vdmVkIHRoZSBjbGFzcyBpdHNlbGYg
aW50byBFbGVtZW50IGhlYWRxdWFydGVycy4KKyAgICAgICAgSW4gdGhlIG5lYXIgZnV0dXJlLCBF
bGVtZW50IHNob3VsZCBiZSB0aGUgb25seSBjbGllbnQgb2YgdGhpcyBjbGFzcywgYW5kIHRodXMg
aXQgd29uJ3QKKyAgICAgICAgYmUgbmVjZXNzYXJ5IGZvciBvdGhlciBjbGFzc2VzIHRvIGtub3cg
YW55dGhpbmcgYWJvdXQgaXQuCisKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oOiBSZW1v
dmVkLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxp
c3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRv
bS9ET01BbGxJbk9uZS5jcHA6CisgICAgICAgICogZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9v
bC5jcHA6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAqIGRvbS9FbGVtZW50
Lmg6CisgICAgICAgICogd29ya2Vycy9TaGFyZWRXb3JrZXIuY3BwOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcDogQWRkIEV4Y2VwdGlvbkNvZGUuaCBz
aW5jZSBFbGVtZW50LmggZG9lc24ndCBwdWxsIGl0IGluIGFueW1vcmUuCisKIDIwMTMtMDItMTIg
IFJvZ2VyIEZvbmcgIDxyb2dlcl9mb25nQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
IFdpbmRvd3MgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYzVl
ZGE1Yi4uNzA3YWI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yODM4LDgg
KzI4MzgsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9ET01U
aW1lU3RhbXAuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJp
YnV0ZURhdGEuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEu
aCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnRTaGFkb3cuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcAppbmRleCBjYzhlMjM5Li4yOWE3MzVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFn
ZXIuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VDb250ZXh0LmgiCiAj
aW5jbHVkZSAiRGF0YWJhc2VTeW5jLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlSW5zdHJ1
bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRy
b2xsZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDk0MzU2ODguLmZjZmNhOWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpA
QCAtMzk4LDcgKzM5OCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIGRvbS9ET01TdHJpbmdNYXAuY3Bw
IFwKICAgICBkb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAgXAogICAgIGRvbS9FbGVtZW50LmNw
cCBcCi0gICAgZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcCBcCiAgICAgZG9tL0VsZW1lbnRS
YXJlRGF0YS5jcHAgXAogICAgIGRvbS9FbGVtZW50U2hhZG93LmNwcCBcCiAgICAgZG9tL0VudGl0
eVJlZmVyZW5jZS5jcHAgXApAQCAtMTYyNCw3ICsxNjIzLDYgQEAgSEVBREVSUyArPSBcCiAgICAg
ZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuaCBcCiAgICAgZG9tL0VsZW1lbnQuaCBcCiAgICAgZG9t
L0VsZW1lbnRTaGFkb3cuaCBcCi0gICAgZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmggXAogICAg
IGRvbS9FbnRpdHkuaCBcCiAgICAgZG9tL0VudGl0eVJlZmVyZW5jZS5oIFwKICAgICBkb20vRXZl
bnQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDYwNTQzYy4uODk5M2QxNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMjgwOCw3ICsyODA4LDYgQEAKICAgICAgICAgICAgICdkb20vRG9jdW1lbnRUeXBl
LmNwcCcsCiAgICAgICAgICAgICAnZG9tL0VsZW1lbnRTaGFkb3cuY3BwJywKICAgICAgICAgICAg
ICdkb20vRWxlbWVudC5jcHAnLAotICAgICAgICAgICAgJ2RvbS9FbGVtZW50QXR0cmlidXRlRGF0
YS5jcHAnLAogICAgICAgICAgICAgJ2RvbS9FbGVtZW50UmFyZURhdGEuY3BwJywKICAgICAgICAg
ICAgICdkb20vRWxlbWVudFJhcmVEYXRhLmgnLAogICAgICAgICAgICAgJ2RvbS9FbnRpdHkuaCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggZjE1ODE2Ni4uMjg4ZjVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzg2LDggKzc4Niw2IEBACiAJCTJCMzY1Qzg0
MTUyNTExOUUwMDkxRDI3QiAvKiBSZW5kZXJTVkdFbGxpcHNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQjQyMzVBMDE1MjUwRjYwMDBEQkJDRDggLyog
UmVuZGVyU1ZHRWxsaXBzZS5oICovOyB9OwogCQkyQkU4RTJDNzEyQTU4OUVDMDBGQUQ1NTAgLyog
SFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0
UGFyc2VyLmggKi87IH07CiAJCTJCRThFMkM5MTJBNThBMDEwMEZBRDU1MCAvKiBIVE1MTWV0YUNo
YXJzZXRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkJFOEUyQzgxMkE1OEEwMTAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5j
cHAgKi87IH07Ci0JCTJDRjY4Nzg4MTREMzJFQjUwMDM0MEYzOSAvKiBFbGVtZW50QXR0cmlidXRl
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
Q0Y2ODc4NzE0RDMyRUI1MDAzNDBGMzkgLyogRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwICovOyB9
OwotCQkyQ0Y2ODc4QTE0RDMyRUZGMDAzNDBGMzkgLyogRWxlbWVudEF0dHJpYnV0ZURhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDRjY4Nzg5MTRE
MzJFRkYwMDM0MEYzOSAvKiBFbGVtZW50QXR0cmlidXRlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJEM0EwRTM2MTNBN0Q3NjEwMEU4NUFG
MCAvKiBTVkdQYXJzaW5nRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEM0EwRTM1MTNBN0Q3NjEwMEU4NUFGMCAvKiBTVkdQYXJzaW5nRXJyb3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDQ4
MUYwMDE0NkI1QzRDMDBBQTc4MzQgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQyRkMwNTQxNDYwQ0Q2
RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcCAqLzsgfTsKIAkJMkQ0ODFG
MDIxNDZCNUM1NTAwQUE3ODM0IC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDJGQzA1NTE0NjBDRDZGMDAy
NjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCAqLzsgfTsKQEAgLTgxMjAsOCArODEx
OCw2IEBACiAJCTJCNDIzNUEwMTUyNTBGNjAwMERCQkNEOCAvKiBSZW5kZXJTVkdFbGxpcHNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0VsbGlwc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkJFOEUyQzYxMkE1ODlFQzAwRkFENTUwIC8qIEhU
TUxNZXRhQ2hhcnNldFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBI
VE1MTWV0YUNoYXJzZXRQYXJzZXIuaDsgcGF0aCA9IHBhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkJFOEUyQzgxMkE1OEEwMTAwRkFE
NTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwOyBwYXRoID0gcGFyc2VyL0hU
TUxNZXRhQ2hhcnNldFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJD
RjY4Nzg3MTREMzJFQjUwMDM0MEYzOSAvKiBFbGVtZW50QXR0cmlidXRlRGF0YS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFbGVtZW50QXR0cmlidXRlRGF0YS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJDRjY4Nzg5MTREMzJFRkYwMDM0MEYzOSAv
KiBFbGVtZW50QXR0cmlidXRlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFbGVtZW50QXR0cmlidXRlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RDJGQzA1NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3Jvc3NmYWRlR2VuZXJhdGVkSW1h
Z2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDJGQzA1NTE0NjBDRDZGMDAy
NjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkQyRkMwNTYxNDYwQ0Q2RjAwMjYzNjMzIC8qIEdlbmVyYXRvckdlbmVyYXRl
ZEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdlbmVyYXRv
ckdlbmVyYXRlZEltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNDgy
LDggKzIyNDc4LDYgQEAKIAkJCQlBOEM0QTdGNjA5RDU2MzI3MDAwM0FDOEQgLyogRWxlbWVudC5j
cHAgKi8sCiAJCQkJQThDNEE3RjUwOUQ1NjMyNzAwMDNBQzhEIC8qIEVsZW1lbnQuaCAqLywKIAkJ
CQk5M0VFQzFFQTA5QzI4Nzc3MDBDNTE1RDEgLyogRWxlbWVudC5pZGwgKi8sCi0JCQkJMkNGNjg3
ODcxNEQzMkVCNTAwMzQwRjM5IC8qIEVsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcCAqLywKLQkJCQky
Q0Y2ODc4OTE0RDMyRUZGMDAzNDBGMzkgLyogRWxlbWVudEF0dHJpYnV0ZURhdGEuaCAqLywKIAkJ
CQk0RkFCNDg2NDE2NDNBNjZEMDBGNzBDMDcgLyogRWxlbWVudFJhcmVEYXRhLmNwcCAqLywKIAkJ
CQk2MzdCN0FERTBFODc2N0I4MDBFMzIxOTQgLyogRWxlbWVudFJhcmVEYXRhLmggKi8sCiAJCQkJ
NTdDRjRDODQxNEY3NTk3QTAwRUNGRjE0IC8qIEVsZW1lbnRTaGFkb3cuY3BwICovLApAQCAtMjQy
MDUsNyArMjQxOTksNiBAQAogCQkJCTRCQUU5NUIxMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0b3JE
ZWxldGVBY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRkRBRkNBMEIxMTMwNzQwMEUyNzQ2
RiAvKiBFZGl0b3JJbnNlcnRBY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QzRBODA3MDlE
NTYzMjcwMDAzQUM4RCAvKiBFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkyQ0Y2ODc4QTE0
RDMyRUZGMDAzNDBGMzkgLyogRWxlbWVudEF0dHJpYnV0ZURhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTYzRjVENEY3MEU4QzRCNzEwMEMwQkQwNCAvKiBFbGVtZW50UmFyZURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU3Q0Y0Qzg3MTRGNzU5N0EwMEVDRkYxNCAvKiBFbGVtZW50U2hhZG93Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDE1RjE4NDBEOUExQTgzMDAzM0NFOTcgLyogRWxlbWVudFRp
bWVDb250cm9sLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NTQ2LDcgKzI3NTM5LDYgQEAKIAkJCQk5
M0EzOEI0QjBEMEU1ODA4MDA2ODcyQzIgLyogRWRpdG9yQ29tbWFuZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlFRDUwMURDNjBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThDNEE4MDgwOUQ1NjMyNzAwMDNBQzhEIC8qIEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJMkNGNjg3ODgxNEQzMkVCNTAwMzQwRjM5IC8qIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGRkMwMjJEMTY0M0I3MjYwMDRFMTYzOCAv
KiBFbGVtZW50UmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTdDRjRDODYxNEY3NTk3
QTAwRUNGRjE0IC8qIEVsZW1lbnRTaGFkb3cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkY2
Q0IwQTE1NjFDRDAwMEE0MjM0IC8qIEVsbGlwc2lzQm94LmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKaW5kZXggYmQ1OThhMDIuLmE1NGEwNjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RPTUFsbEluT25lLmNwcApAQCAtNzAsNyArNzAsNiBAQAogI2luY2x1ZGUgIkRvY3Vt
ZW50U2hhcmVkT2JqZWN0UG9vbC5jcHAiCiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmNwcCIKICNp
bmNsdWRlICJFbGVtZW50LmNwcCIKLSNpbmNsdWRlICJFbGVtZW50QXR0cmlidXRlRGF0YS5jcHAi
CiAjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5jcHAiCiAjaW5jbHVkZSAiRW50aXR5UmVmZXJlbmNl
LmNwcCIKICNpbmNsdWRlICJFcnJvckV2ZW50LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5jcHAKaW5kZXggYjg1ZWZmOC4uYjE2OTQxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5jcHAKQEAg
LTI3LDggKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEb2N1bWVudFNo
YXJlZE9iamVjdFBvb2wuaCIKIAotI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkVs
ZW1lbnRBdHRyaWJ1dGVEYXRhLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBhMmRmNmU2Li4wYTViZGRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC00LDcgKzQsNyBAQAogICogICAgICAgICAgIChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDcgRGF2aWQg
U21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogICAgICAgICAgIChDKSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtODEsNiArODEsNyBAQAogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvblZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShTVkcpCkBAIC0yODIzLDQgKzI4MjQsMjExIEBAIHZv
aWQgRWxlbWVudDo6Y2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzKCkKIH0KICNlbmRpZgogCit2b2lk
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpkZXJlZigpCit7CisgICAgaWYgKCFkZXJlZkJhc2UoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faXNNdXRhYmxlKQorICAgICAgICBkZWxldGUg
c3RhdGljX2Nhc3Q8TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyk7CisgICAgZWxz
ZQorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGEqPih0aGlzKTsKK30KKworRWxlbWVudEF0dHJpYnV0ZURhdGE6OkVsZW1lbnRBdHRyaWJ1dGVE
YXRhKCkKKyAgICA6IG1faXNNdXRhYmxlKHRydWUpCisgICAgLCBtX2FycmF5U2l6ZSgwKQorICAg
ICwgbV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkoZmFsc2UpCisgICAgLCBtX3N0
eWxlQXR0cmlidXRlSXNEaXJ0eShmYWxzZSkKKyNpZiBFTkFCTEUoU1ZHKQorICAgICwgbV9hbmlt
YXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eShmYWxzZSkKKyNlbmRpZgoreworfQorCitFbGVtZW50
QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEodW5zaWduZWQgYXJyYXlTaXplKQor
ICAgIDogbV9pc011dGFibGUoZmFsc2UpCisgICAgLCBtX2FycmF5U2l6ZShhcnJheVNpemUpCisg
ICAgLCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eShmYWxzZSkKKyAgICAsIG1f
c3R5bGVBdHRyaWJ1dGVJc0RpcnR5KGZhbHNlKQorI2lmIEVOQUJMRShTVkcpCisgICAgLCBtX2Fu
aW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5KGZhbHNlKQorI2VuZGlmCit7Cit9CisKK3N0cnVj
dCBTYW1lU2l6ZUFzRWxlbWVudEF0dHJpYnV0ZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxTYW1l
U2l6ZUFzRWxlbWVudEF0dHJpYnV0ZURhdGE+IHsKKyAgICB1bnNpZ25lZCBiaXRmaWVsZDsKKyAg
ICB2b2lkKiByZWZQdHJzWzNdOworfTsKKworQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVsZW1lbnRB
dHRyaWJ1dGVEYXRhKSA9PSBzaXplb2YoU2FtZVNpemVBc0VsZW1lbnRBdHRyaWJ1dGVEYXRhKSwg
ZWxlbWVudF9hdHRyaWJ1dGVfZGF0YV9zaG91bGRfc3RheV9zbWFsbCk7CisKK3N0YXRpYyBzaXpl
X3Qgc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50
KHVuc2lnbmVkIGNvdW50KQoreworICAgIHJldHVybiBzaXplb2YoSW1tdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGEpIC0gc2l6ZW9mKHZvaWQqKSArIHNpemVvZihBdHRyaWJ1dGUpICogY291bnQ7
Cit9CisKK1Bhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjpjcmVhdGVJbW11dGFibGUoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMp
Cit7CisgICAgdm9pZCogc2xvdCA9IFdURjo6ZmFzdE1hbGxvYyhzaXplRm9ySW1tdXRhYmxlRWxl
bWVudEF0dHJpYnV0ZURhdGFXaXRoQXR0cmlidXRlQ291bnQoYXR0cmlidXRlcy5zaXplKCkpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IChzbG90KSBJbW11dGFibGVFbGVtZW50QXR0cmlidXRl
RGF0YShhdHRyaWJ1dGVzKSk7Cit9CisKK1Bhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKTsKK30KKworSW1tdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGE6OkltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IFZlY3RvcjxB
dHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQorICAgIDogRWxlbWVudEF0dHJpYnV0ZURhdGEoYXR0cmli
dXRlcy5zaXplKCkpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJyYXlTaXpl
OyArK2kpCisgICAgICAgIG5ldyAoJnJlaW50ZXJwcmV0X2Nhc3Q8QXR0cmlidXRlKj4oJm1fYXR0
cmlidXRlQXJyYXkpW2ldKSBBdHRyaWJ1dGUoYXR0cmlidXRlc1tpXSk7Cit9CisKK0ltbXV0YWJs
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjp+SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FycmF5U2l6ZTsgKytpKQorICAgICAg
ICAocmVpbnRlcnByZXRfY2FzdDxBdHRyaWJ1dGUqPigmbV9hdHRyaWJ1dGVBcnJheSlbaV0pLn5B
dHRyaWJ1dGUoKTsKK30KKworSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6OkltbXV0YWJs
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYg
b3RoZXIpCisgICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShvdGhlciwgZmFsc2UpCit7CisgICAg
QVNTRVJUKCFvdGhlci5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKTsKKworICAgIGlmIChv
dGhlci5tX2lubGluZVN0eWxlKSB7CisgICAgICAgIEFTU0VSVCghb3RoZXIubV9pbmxpbmVTdHls
ZS0+aGFzQ1NTT01XcmFwcGVyKCkpOworICAgICAgICBtX2lubGluZVN0eWxlID0gb3RoZXIubV9p
bmxpbmVTdHlsZS0+aW1tdXRhYmxlQ29weUlmTmVlZGVkKCk7CisgICAgfQorCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJyYXlTaXplOyArK2kpCisgICAgICAgIG5ldyAoJnJlaW50
ZXJwcmV0X2Nhc3Q8QXR0cmlidXRlKj4oJm1fYXR0cmlidXRlQXJyYXkpW2ldKSBBdHRyaWJ1dGUo
Km90aGVyLmF0dHJpYnV0ZUl0ZW0oaSkpOworfQorCitFbGVtZW50QXR0cmlidXRlRGF0YTo6RWxl
bWVudEF0dHJpYnV0ZURhdGEoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEmIG90aGVyLCBib29s
IGlzTXV0YWJsZSkKKyAgICA6IG1faXNNdXRhYmxlKGlzTXV0YWJsZSkKKyAgICAsIG1fYXJyYXlT
aXplKGlzTXV0YWJsZSA/IDAgOiBvdGhlci5sZW5ndGgoKSkKKyAgICAsIG1fcHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGVJc0RpcnR5KG90aGVyLm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJ
c0RpcnR5KQorICAgICwgbV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkob3RoZXIubV9zdHlsZUF0dHJp
YnV0ZUlzRGlydHkpCisjaWYgRU5BQkxFKFNWRykKKyAgICAsIG1fYW5pbWF0ZWRTVkdBdHRyaWJ1
dGVzQXJlRGlydHkob3RoZXIubV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkKKyNlbmRp
ZgorICAgICwgbV9jbGFzc05hbWVzKG90aGVyLm1fY2xhc3NOYW1lcykKKyAgICAsIG1faWRGb3JT
dHlsZVJlc29sdXRpb24ob3RoZXIubV9pZEZvclN0eWxlUmVzb2x1dGlvbikKK3sKKyAgICAvLyBO
T1RFOiBUaGUgaW5saW5lIHN0eWxlIGlzIGNvcGllZCBieSB0aGUgc3ViY2xhc3MgY29weSBjb25z
dHJ1Y3RvciBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdCBoZXJlLgorfQor
CitNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6Ok11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0
YSgpCit7Cit9CisKK011dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6TXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYgb3RoZXIpCisg
ICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShvdGhlciwgdHJ1ZSkKKyAgICAsIG1fcHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUob3RoZXIubV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSkKKyAg
ICAsIG1fYXR0cmlidXRlVmVjdG9yKG90aGVyLm1fYXR0cmlidXRlVmVjdG9yKQoreworICAgIG1f
aW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0eWxlID8gb3RoZXIubV9pbmxpbmVTdHlsZS0+
Y29weSgpIDogMDsKK30KKworTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpNdXRhYmxlRWxl
bWVudEF0dHJpYnV0ZURhdGEoY29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmIG90
aGVyKQorICAgIDogRWxlbWVudEF0dHJpYnV0ZURhdGEob3RoZXIsIHRydWUpCit7CisgICAgLy8g
QW4gSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEgc2hvdWxkIG5ldmVyIGhhdmUgYSBtdXRh
YmxlIGlubGluZSBTdHlsZVByb3BlcnR5U2V0IGF0dGFjaGVkLgorICAgIEFTU0VSVCghb3RoZXIu
bV9pbmxpbmVTdHlsZSB8fCAhb3RoZXIubV9pbmxpbmVTdHlsZS0+aXNNdXRhYmxlKCkpOworICAg
IG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0eWxlOworCisgICAgbV9hdHRyaWJ1dGVW
ZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KG90aGVyLmxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgb3RoZXIubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgbV9hdHRyaWJ1dGVWZWN0
b3IudW5jaGVja2VkQXBwZW5kKG90aGVyLmltbXV0YWJsZUF0dHJpYnV0ZUFycmF5KClbaV0pOwor
fQorCitQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmlidXRlRGF0
YTo6bWFrZU11dGFibGVDb3B5KCkgY29uc3QKK3sKKyAgICBpZiAoaXNNdXRhYmxlKCkpCisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKHN0YXRp
Y19jYXN0PGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSY+KCp0aGlzKSkpOworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKHN0YXRpY19j
YXN0PGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJj4oKnRoaXMpKSk7Cit9CisK
K1Bhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpt
YWtlSW1tdXRhYmxlQ29weSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKKyAg
ICB2b2lkKiBzbG90ID0gV1RGOjpmYXN0TWFsbG9jKHNpemVGb3JJbW11dGFibGVFbGVtZW50QXR0
cmlidXRlRGF0YVdpdGhBdHRyaWJ1dGVDb3VudChtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkuc2l6
ZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoc2xvdCkgSW1tdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
Jj4oKnRoaXMpKSk7Cit9CisKK3ZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnNldFByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKKyAgICBzdGF0aWNfY2FzdDxjb25zdCBN
dXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSA9IHN0eWxlOworfQorCit2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphZGRBdHRy
aWJ1dGUoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUpCit7CisgICAgQVNTRVJUKGlzTXV0YWJs
ZSgpKTsKKyAgICBtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkuYXBwZW5kKGF0dHJpYnV0ZSk7Cit9
CisKK3ZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5k
ZXgpCit7CisgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihpbmRleCA8IGxlbmd0aCgpKTsKKyAgICBtdXRhYmxlQXR0cmlidXRlVmVj
dG9yKCkucmVtb3ZlKGluZGV4KTsKK30KKworYm9vbCBFbGVtZW50QXR0cmlidXRlRGF0YTo6aXNF
cXVpdmFsZW50KGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAoIW90aGVyKQorICAgICAgICByZXR1cm4gaXNFbXB0eSgpOworCisgICAgdW5zaWduZWQg
bGVuID0gbGVuZ3RoKCk7CisgICAgaWYgKGxlbiAhPSBvdGhlci0+bGVuZ3RoKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykg
eworICAgICAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUl0ZW0oaSk7
CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogb3RoZXJBdHRyID0gb3RoZXItPmdldEF0dHJpYnV0
ZUl0ZW0oYXR0cmlidXRlLT5uYW1lKCkpOworICAgICAgICBpZiAoIW90aGVyQXR0ciB8fCBhdHRy
aWJ1dGUtPnZhbHVlKCkgIT0gb3RoZXJBdHRyLT52YWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdAoreworICAgIHNpemVfdCBhY3R1YWxTaXplID0gbV9pc011dGFibGUgPyBz
aXplb2YoRWxlbWVudEF0dHJpYnV0ZURhdGEpIDogc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KG1fYXJyYXlTaXplKTsKKyAgICBNZW1vcnlDbGFz
c0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRP
TSwgYWN0dWFsU2l6ZSk7CisgICAgaW5mby5hZGRNZW1iZXIobV9pbmxpbmVTdHlsZSwgImlubGlu
ZVN0eWxlIik7CisgICAgaW5mby5hZGRNZW1iZXIobV9jbGFzc05hbWVzLCAiY2xhc3NOYW1lcyIp
OworICAgIGluZm8uYWRkTWVtYmVyKG1faWRGb3JTdHlsZVJlc29sdXRpb24sICJpZEZvclN0eWxl
UmVzb2x1dGlvbiIpOworICAgIGlmIChtX2lzTXV0YWJsZSkgeworICAgICAgICBpbmZvLmFkZE1l
bWJlcihwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpLCAicHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoKSIpOworICAgICAgICBpbmZvLmFkZE1lbWJlcihtdXRhYmxlQXR0cmlidXRlVmVjdG9y
KCksICJtdXRhYmxlQXR0cmlidXRlVmVjdG9yIik7CisgICAgfQorICAgIGZvciAodW5zaWduZWQg
aSA9IDAsIGxlbiA9IGxlbmd0aCgpOyBpIDwgbGVuOyBpKyspCisgICAgICAgIGluZm8uYWRkTWVt
YmVyKCphdHRyaWJ1dGVJdGVtKGkpLCAiKmF0dHJpYnV0ZUl0ZW0iKTsKK30KKworc2l6ZV90IEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXhTbG93Q2FzZShjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QK
K3sKKyAgICAvLyBDb250aW51ZSB0byBjaGVja2luZyBjYXNlLWluc2Vuc2l0aXZlbHkgYW5kL29y
IGZ1bGwgbmFtZXNwYWNlZCBuYW1lcyBpZiBuZWNlc3Nhcnk6CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgQXR0cmlidXRlKiBhdHRy
aWJ1dGUgPSBhdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICBpZiAoIWF0dHJpYnV0ZS0+bmFtZSgp
Lmhhc1ByZWZpeCgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlQXR0cmlidXRlQ2Fz
ZSAmJiBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCBhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBXb3VsZCBiZSBmYXN0ZXIgdG8gZG8gdGhpcyBjb21wYXJpc29uIHdpdGhvdXQgY2Fs
bGluZyB0b1N0cmluZywgd2hpY2gKKyAgICAgICAgICAgIC8vIGdlbmVyYXRlcyBhIHRlbXBvcmFy
eSBzdHJpbmcgYnkgY29uY2F0ZW5hdGlvbi4gQnV0IHRoaXMgYnJhbmNoIGlzIG9ubHkgcmVhY2hl
ZAorICAgICAgICAgICAgLy8gaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGhhcyBhIHByZWZpeCwgd2hp
Y2ggaXMgcmFyZSBpbiBIVE1MLgorICAgICAgICAgICAgaWYgKGVxdWFsUG9zc2libHlJZ25vcmlu
Z0Nhc2UobmFtZSwgYXR0cmlidXRlLT5uYW1lKCkudG9TdHJpbmcoKSwgc2hvdWxkSWdub3JlQXR0
cmlidXRlQ2FzZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIG5vdEZvdW5kOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuaAppbmRleCBkZjE2MzNkLi5hNzU1NjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAg
LTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9y
ZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNSwyOCArMjUsMTM0IEBACiAjaWZuZGVmIEVsZW1lbnRfaAogI2RlZmluZSBF
bGVtZW50X2gKIAorI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25U
eXBlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50QXR0cmlidXRl
RGF0YS5oIgogI2luY2x1ZGUgIkZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSAiU3Bh
Y2VTcGxpdFN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF0dHI7Ci1j
bGFzcyBBdHRyaWJ1dGU7CiBjbGFzcyBDbGllbnRSZWN0OwogY2xhc3MgQ2xpZW50UmVjdExpc3Q7
CiBjbGFzcyBET01TdHJpbmdNYXA7CiBjbGFzcyBET01Ub2tlbkxpc3Q7CitjbGFzcyBFbGVtZW50
OwogY2xhc3MgRWxlbWVudFJhcmVEYXRhOwogY2xhc3MgRWxlbWVudFNoYWRvdzsKK2NsYXNzIElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIExvY2Fs
ZTsKK2NsYXNzIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTsKIGNsYXNzIFBzZXVkb0VsZW1l
bnQ7CiBjbGFzcyBSZW5kZXJSZWdpb247CiBjbGFzcyBTaGFkb3dSb290OworY2xhc3MgU3R5bGVQ
cm9wZXJ0eVNldDsKKworY2xhc3MgRWxlbWVudEF0dHJpYnV0ZURhdGEgOiBwdWJsaWMgUmVmQ291
bnRlZDxFbGVtZW50QXR0cmlidXRlRGF0YT4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBj
cmVhdGUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gY3Jl
YXRlSW1tdXRhYmxlKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7CisKKyAgICAvLyBPdmVycmlk
ZSBSZWZDb3VudGVkJ3MgZGVyZWYoKSB0byBlbnN1cmUgb3BlcmF0b3IgZGVsZXRlIGlzIGNhbGxl
ZCBvbgorICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBzdWJjbGFzcyB0eXBlLgorICAgIHZvaWQgZGVy
ZWYoKTsKKworICAgIHZvaWQgY2xlYXJDbGFzcygpIGNvbnN0IHsgbV9jbGFzc05hbWVzLmNsZWFy
KCk7IH0KKyAgICB2b2lkIHNldENsYXNzKGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lLCBi
b29sIHNob3VsZEZvbGRDYXNlKSBjb25zdCB7IG1fY2xhc3NOYW1lcy5zZXQoY2xhc3NOYW1lLCBz
aG91bGRGb2xkQ2FzZSk7IH0KKyAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVz
KCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc05hbWVzOyB9CisKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pZEZvclN0eWxlUmVz
b2x1dGlvbjsgfQorICAgIHZvaWQgc2V0SWRGb3JTdHlsZVJlc29sdXRpb24oY29uc3QgQXRvbWlj
U3RyaW5nJiBuZXdJZCkgY29uc3QgeyBtX2lkRm9yU3R5bGVSZXNvbHV0aW9uID0gbmV3SWQ7IH0K
KworICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVTdHlsZS5nZXQoKTsgfQorCisgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCog
cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4pIGNvbnN0Owor
CisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuICFsZW5ndGgoKTsgfQorCisgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVt
KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBjb25zdCBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0
ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIEF0dHJpYnV0ZSogYXR0cmli
dXRlSXRlbSh1bnNpZ25lZCBpbmRleCk7CisgICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVt
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4
KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRl
bUluZGV4KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1
dGVDYXNlKSBjb25zdDsKKworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBkbyBubyBlcnJvciBjaGVj
a2luZy4KKyAgICB2b2lkIGFkZEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmKTsKKyAgICB2b2lk
IHJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgpOworCisgICAgYm9vbCBoYXNJRCgpIGNvbnN0
IHsgcmV0dXJuICFtX2lkRm9yU3R5bGVSZXNvbHV0aW9uLmlzTnVsbCgpOyB9CisgICAgYm9vbCBo
YXNDbGFzcygpIGNvbnN0IHsgcmV0dXJuICFtX2NsYXNzTmFtZXMuaXNOdWxsKCk7IH0KKworICAg
IGJvb2wgaXNFcXVpdmFsZW50KGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhlcikgY29u
c3Q7CisKKyAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25z
dDsKKworICAgIGJvb2wgaXNNdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc011dGFibGU7IH0K
KyAgICBjb25zdCBBdHRyaWJ1dGUqIGltbXV0YWJsZUF0dHJpYnV0ZUFycmF5KCkgY29uc3Q7CisK
K3Byb3RlY3RlZDoKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSgpOworICAgIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKHVuc2lnbmVkIGFycmF5U2l6ZSk7CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEo
Y29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEmLCBib29sIGlzTXV0YWJsZSk7CisKKyAgICB1bnNp
Z25lZCBtX2lzTXV0YWJsZSA6IDE7CisgICAgdW5zaWduZWQgbV9hcnJheVNpemUgOiAyODsKKyAg
ICBtdXRhYmxlIHVuc2lnbmVkIG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5IDog
MTsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5IDogMTsKKyNp
ZiBFTkFCTEUoU1ZHKQorICAgIG11dGFibGUgdW5zaWduZWQgbV9hbmltYXRlZFNWR0F0dHJpYnV0
ZXNBcmVEaXJ0eSA6IDE7CisjZW5kaWYKKworICAgIG11dGFibGUgUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IG1faW5saW5lU3R5bGU7CisgICAgbXV0YWJsZSBTcGFjZVNwbGl0U3RyaW5nIG1fY2xh
c3NOYW1lczsKKyAgICBtdXRhYmxlIEF0b21pY1N0cmluZyBtX2lkRm9yU3R5bGVSZXNvbHV0aW9u
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFbGVtZW50OworICAgIGZyaWVuZCBjbGFz
cyBTdHlsZWRFbGVtZW50OworICAgIGZyaWVuZCBjbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YTsKKyAgICBmcmllbmQgY2xhc3MgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOwor
I2lmIEVOQUJMRShTVkcpCisgICAgZnJpZW5kIGNsYXNzIFNWR0VsZW1lbnQ7CisjZW5kaWYKKwor
ICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSk7CisgICAgY29uc3QgQXR0cmlidXRlKiBn
ZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKKyAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4
U2xvd0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJp
YnV0ZUNhc2UpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4g
bWFrZU11dGFibGVDb3B5KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRl
RGF0YT4gbWFrZUltbXV0YWJsZUNvcHkoKSBjb25zdDsKKworICAgIFZlY3RvcjxBdHRyaWJ1dGUs
IDQ+JiBtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCk7CisgICAgY29uc3QgVmVjdG9yPEF0dHJpYnV0
ZSwgND4mIG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKSBjb25zdDsKK307CisKK2NsYXNzIEltbXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIHsK
K3B1YmxpYzoKKyAgICBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBWZWN0b3I8
QXR0cmlidXRlPiYpOworICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYpOworICAgIH5JbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YSgpOworCisgICAgdm9pZCogbV9hdHRyaWJ1dGVBcnJheTsKK307CisKK2NsYXNzIE11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSA6IHB1YmxpYyBFbGVtZW50QXR0cmlidXRlRGF0YSB7
CitwdWJsaWM6CisgICAgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCk7CisgICAgTXV0YWJs
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
Jik7CisgICAgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50
QXR0cmlidXRlRGF0YSYpOworCisgICAgbXV0YWJsZSBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZTsKKyAgICBWZWN0b3I8QXR0cmlidXRlLCA0PiBt
X2F0dHJpYnV0ZVZlY3RvcjsKK307CiAKIGVudW0gQWZmZWN0ZWRTZWxlY3RvclR5cGUgewogICAg
IEFmZmVjdGVkU2VsZWN0b3JDaGVja2VkID0gMSwKQEAgLTg3Nyw2ICs5ODMsMTE2IEBAIGlubGlu
ZSBib29sIGlzU2hhZG93SG9zdChjb25zdCBOb2RlKiBub2RlKQogewogICAgIHJldHVybiBub2Rl
ICYmIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygpOwog
fQoraW5saW5lIFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBFbGVtZW50QXR0cmlidXRlRGF0YTo6bXV0
YWJsZUF0dHJpYnV0ZVZlY3RvcigpCit7CisgICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1f
YXR0cmlidXRlVmVjdG9yOworfQorCitpbmxpbmUgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZSwgND4m
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjptdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9pc011dGFibGUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBN
dXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7Cit9
CisKK2lubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjppbW11dGFi
bGVBdHRyaWJ1dGVBcnJheSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX2lzTXV0YWJsZSk7Cisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXR0cmlidXRlKj4oJnN0YXRpY19jYXN0
PGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRl
QXJyYXkpOworfQorCitpbmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpsZW5ndGgo
KSBjb25zdAoreworICAgIGlmIChpc011dGFibGUoKSkKKyAgICAgICAgcmV0dXJuIG11dGFibGVB
dHRyaWJ1dGVWZWN0b3IoKS5zaXplKCk7CisgICAgcmV0dXJuIG1fYXJyYXlTaXplOworfQorCitp
bmxpbmUgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURhdGE6OnByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faXNNdXRhYmxlKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUu
Z2V0KCk7Cit9CisKK2lubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRB
dHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVB
dHRyaWJ1dGVDYXNlKQoreworICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKKyAgICBpZiAoaW5kZXggIT0gbm90
Rm91bmQpCisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVJdGVtKGluZGV4KTsKKyAgICByZXR1cm4g
MDsKK30KKworaW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6Omdl
dEF0dHJpYnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2UpIGNvbnN0Cit7CisgICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRl
SXRlbUluZGV4KG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOworICAgIGlmIChpbmRl
eCAhPSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZUl0ZW0oaW5kZXgpOworICAg
IHJldHVybiAwOworfQorCitpbmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRB
dHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAo
YXR0cmlidXRlSXRlbShpKS0+bmFtZSgpLm1hdGNoZXMobmFtZSkpCisgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIG5vdEZvdW5kOworfQorCisvLyBXZSB1c2UgYSBib29s
ZWFuIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNhbGxpbmcgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2Fz
ZSBzbyB0aGF0IHRoZSBjYWxsZXIKKy8vIGNhbiB0dW5lIHRoZSBiZWhhdmlvciAoaGFzQXR0cmli
dXRlIGlzIGNhc2Ugc2Vuc2l0aXZlIHdoZXJlYXMgZ2V0QXR0cmlidXRlIGlzIG5vdCkuCitpbmxp
bmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNv
bnN0Cit7CisgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CisgICAgYm9vbCBkb1Nsb3dDaGVj
ayA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2U7CisKKyAgICAvLyBPcHRpbWl6ZSBmb3IgdGhl
IGNhc2Ugd2hlcmUgdGhlIGF0dHJpYnV0ZSBleGlzdHMgYW5kIGl0cyBuYW1lIGV4YWN0bHkgbWF0
Y2hlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICBp
ZiAoIWF0dHJpYnV0ZS0+bmFtZSgpLmhhc1ByZWZpeCgpKSB7CisgICAgICAgICAgICBpZiAobmFt
ZSA9PSBhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGRvU2xvd0NoZWNrID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAoZG9TbG93Q2hlY2spCisgICAgICAgIHJldHVybiBnZXRBdHRyaWJ1dGVJdGVtSW5k
ZXhTbG93Q2FzZShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKKyAgICByZXR1cm4g
bm90Rm91bmQ7Cit9CisKK2lubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Cit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
aWYgKGF0dHJpYnV0ZUl0ZW0oaSktPm5hbWUoKS5tYXRjaGVzKG5hbWUpKQorICAgICAgICAgICAg
cmV0dXJuIGF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbmxp
bmUgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVJdGVtKGkpLT5uYW1lKCkubWF0
Y2hlcyhuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVJdGVtKGkpOworICAgIH0K
KyAgICByZXR1cm4gMDsKK30KKworaW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudEF0dHJp
YnV0ZURhdGE6OmF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgoKSk7CisgICAgaWYg
KG1faXNNdXRhYmxlKQorICAgICAgICByZXR1cm4gJm11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5h
dChpbmRleCk7CisgICAgcmV0dXJuICZpbW11dGFibGVBdHRyaWJ1dGVBcnJheSgpW2luZGV4XTsK
K30KKworaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmF0dHJpYnV0ZUl0
ZW0odW5zaWduZWQgaW5kZXgpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaW5kZXggPCBsZW5ndGgoKSk7CisgICAgcmV0dXJuICZtdXRhYmxlQXR0cmlidXRlVmVjdG9y
KCkuYXQoaW5kZXgpOworfQogCiB9IC8vIG5hbWVzcGFjZQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZTY5NzFiNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0
ZURhdGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogICAgICAgICAgIChDKSAyMDAxIERp
cmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRWxl
bWVudEF0dHJpYnV0ZURhdGEuaCIKLQotI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50
YXRpb24uaCIKLSNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IFNhbWVTaXplQXNFbGVtZW50QXR0cmlidXRl
RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNFbGVtZW50QXR0cmlidXRlRGF0YT4g
ewotICAgIHVuc2lnbmVkIGJpdGZpZWxkOwotICAgIHZvaWQqIHJlZlB0cnNbM107Ci19OwotCi1D
T01QSUxFX0FTU0VSVChzaXplb2YoRWxlbWVudEF0dHJpYnV0ZURhdGEpID09IHNpemVvZihTYW1l
U2l6ZUFzRWxlbWVudEF0dHJpYnV0ZURhdGEpLCBlbGVtZW50X2F0dHJpYnV0ZV9kYXRhX3Nob3Vs
ZF9zdGF5X3NtYWxsKTsKLQotc3RhdGljIHNpemVfdCBzaXplRm9ySW1tdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGFXaXRoQXR0cmlidXRlQ291bnQodW5zaWduZWQgY291bnQpCi17Ci0gICAgcmV0
dXJuIHNpemVvZihJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSkgLSBzaXplb2Yodm9pZCop
ICsgc2l6ZW9mKEF0dHJpYnV0ZSkgKiBjb3VudDsKLX0KLQotUGFzc1JlZlB0cjxFbGVtZW50QXR0
cmlidXRlRGF0YT4gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZUltbXV0YWJsZShjb25zdCBW
ZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcykKLXsKLSAgICB2b2lkKiBzbG90ID0gV1RGOjpm
YXN0TWFsbG9jKHNpemVGb3JJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YVdpdGhBdHRyaWJ1
dGVDb3VudChhdHRyaWJ1dGVzLnNpemUoKSkpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHNs
b3QpIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGF0dHJpYnV0ZXMpKTsKLX0KLQotUGFz
c1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0
ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGEpOwotfQotCi1JbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCi0gICAg
OiBFbGVtZW50QXR0cmlidXRlRGF0YShhdHRyaWJ1dGVzLnNpemUoKSkKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9hcnJheVNpemU7ICsraSkKLSAgICAgICAgbmV3ICgmcmVpbnRl
cnByZXRfY2FzdDxBdHRyaWJ1dGUqPigmbV9hdHRyaWJ1dGVBcnJheSlbaV0pIEF0dHJpYnV0ZShh
dHRyaWJ1dGVzW2ldKTsKLX0KLQotSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6On5JbW11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYXJyYXlTaXplOyArK2kpCi0gICAgICAgIChyZWludGVycHJldF9jYXN0PEF0dHJpYnV0
ZSo+KCZtX2F0dHJpYnV0ZUFycmF5KVtpXSkufkF0dHJpYnV0ZSgpOwotfQotCi1JbW11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3Qg
TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlcikKLSAgICA6IEVsZW1lbnRBdHRyaWJ1
dGVEYXRhKG90aGVyLCBmYWxzZSkKLXsKLSAgICBBU1NFUlQoIW90aGVyLm1fcHJlc2VudGF0aW9u
QXR0cmlidXRlU3R5bGUpOwotCi0gICAgaWYgKG90aGVyLm1faW5saW5lU3R5bGUpIHsKLSAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2lubGluZVN0eWxlLT5oYXNDU1NPTVdyYXBwZXIoKSk7Ci0gICAg
ICAgIG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0eWxlLT5pbW11dGFibGVDb3B5SWZO
ZWVkZWQoKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcnJheVNp
emU7ICsraSkKLSAgICAgICAgbmV3ICgmcmVpbnRlcnByZXRfY2FzdDxBdHRyaWJ1dGUqPigmbV9h
dHRyaWJ1dGVBcnJheSlbaV0pIEF0dHJpYnV0ZSgqb3RoZXIuYXR0cmlidXRlSXRlbShpKSk7Ci19
Ci0KLUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBFbGVt
ZW50QXR0cmlidXRlRGF0YSYgb3RoZXIsIGJvb2wgaXNNdXRhYmxlKQotICAgIDogbV9pc011dGFi
bGUoaXNNdXRhYmxlKQotICAgICwgbV9hcnJheVNpemUoaXNNdXRhYmxlID8gMCA6IG90aGVyLmxl
bmd0aCgpKQotICAgICwgbV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkob3RoZXIu
bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkpCi0gICAgLCBtX3N0eWxlQXR0cmli
dXRlSXNEaXJ0eShvdGhlci5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSkKLSNpZiBFTkFCTEUoU1ZH
KQotICAgICwgbV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eShvdGhlci5tX2FuaW1hdGVk
U1ZHQXR0cmlidXRlc0FyZURpcnR5KQotI2VuZGlmCi0gICAgLCBtX2NsYXNzTmFtZXMob3RoZXIu
bV9jbGFzc05hbWVzKQotICAgICwgbV9pZEZvclN0eWxlUmVzb2x1dGlvbihvdGhlci5tX2lkRm9y
U3R5bGVSZXNvbHV0aW9uKQotewotICAgIC8vIE5PVEU6IFRoZSBpbmxpbmUgc3R5bGUgaXMgY29w
aWVkIGJ5IHRoZSBzdWJjbGFzcyBjb3B5IGNvbnN0cnVjdG9yIHNpbmNlIHdlIGRvbid0IGtub3cg
d2hhdCB0byBkbyB3aXRoIGl0IGhlcmUuCi19Ci0KLU11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0
YTo6TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YSYgb3RoZXIpCi0gICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShvdGhlciwgdHJ1ZSkK
LSAgICAsIG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUob3RoZXIubV9wcmVzZW50YXRpb25B
dHRyaWJ1dGVTdHlsZSkKLSAgICAsIG1fYXR0cmlidXRlVmVjdG9yKG90aGVyLm1fYXR0cmlidXRl
VmVjdG9yKQotewotICAgIG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0eWxlID8gb3Ro
ZXIubV9pbmxpbmVTdHlsZS0+Y29weSgpIDogMDsKLX0KLQotTXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjpNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgSW1tdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGEmIG90aGVyKQotICAgIDogRWxlbWVudEF0dHJpYnV0ZURhdGEob3RoZXIs
IHRydWUpCi17Ci0gICAgLy8gQW4gSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEgc2hvdWxk
IG5ldmVyIGhhdmUgYSBtdXRhYmxlIGlubGluZSBTdHlsZVByb3BlcnR5U2V0IGF0dGFjaGVkLgot
ICAgIEFTU0VSVCghb3RoZXIubV9pbmxpbmVTdHlsZSB8fCAhb3RoZXIubV9pbmxpbmVTdHlsZS0+
aXNNdXRhYmxlKCkpOwotICAgIG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0eWxlOwot
Ci0gICAgbV9hdHRyaWJ1dGVWZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KG90aGVyLmxlbmd0aCgpKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3RoZXIubGVuZ3RoKCk7ICsraSkKLSAgICAg
ICAgbV9hdHRyaWJ1dGVWZWN0b3IudW5jaGVja2VkQXBwZW5kKG90aGVyLmltbXV0YWJsZUF0dHJp
YnV0ZUFycmF5KClbaV0pOwotfQotCi1QYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBF
bGVtZW50QXR0cmlidXRlRGF0YTo6bWFrZU11dGFibGVDb3B5KCkgY29uc3QKLXsKLSAgICBpZiAo
aXNNdXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0
YSY+KCp0aGlzKSkpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTXV0YWJsZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
Jj4oKnRoaXMpKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IEVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjptYWtlSW1tdXRhYmxlQ29weSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KGlzTXV0YWJsZSgpKTsKLSAgICB2b2lkKiBzbG90ID0gV1RGOjpmYXN0TWFsbG9jKHNpemVGb3JJ
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YVdpdGhBdHRyaWJ1dGVDb3VudChtdXRhYmxlQXR0
cmlidXRlVmVjdG9yKCkuc2l6ZSgpKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoc2xvdCkg
SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhJj4oKnRoaXMpKSk7Ci19Ci0KLXZvaWQgRWxlbWVudEF0dHJpYnV0
ZURhdGE6OmFkZEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkKLXsKLSAgICBB
U1NFUlQoaXNNdXRhYmxlKCkpOwotICAgIG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5hcHBlbmQo
YXR0cmlidXRlKTsKLX0KLQotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlQXR0cmli
dXRlKHNpemVfdCBpbmRleCkKLXsKLSAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOwotICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKCkpOwotICAgIG11dGFi
bGVBdHRyaWJ1dGVWZWN0b3IoKS5yZW1vdmUoaW5kZXgpOwotfQotCi1ib29sIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjppc0VxdWl2YWxlbnQoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIG90aGVy
KSBjb25zdAotewotICAgIGlmICghb3RoZXIpCi0gICAgICAgIHJldHVybiBpc0VtcHR5KCk7Ci0K
LSAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKLSAgICBpZiAobGVuICE9IG90aGVyLT5sZW5n
dGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0
cmlidXRlSXRlbShpKTsKLSAgICAgICAgY29uc3QgQXR0cmlidXRlKiBvdGhlckF0dHIgPSBvdGhl
ci0+Z2V0QXR0cmlidXRlSXRlbShhdHRyaWJ1dGUtPm5hbWUoKSk7Ci0gICAgICAgIGlmICghb3Ro
ZXJBdHRyIHx8IGF0dHJpYnV0ZS0+dmFsdWUoKSAhPSBvdGhlckF0dHItPnZhbHVlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdElu
Zm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Ci17Ci0gICAgc2l6ZV90IGFjdHVhbFNpemUgPSBt
X2lzTXV0YWJsZSA/IHNpemVvZihFbGVtZW50QXR0cmlidXRlRGF0YSkgOiBzaXplRm9ySW1tdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGFXaXRoQXR0cmlidXRlQ291bnQobV9hcnJheVNpemUpOwot
ICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVN
ZW1vcnlUeXBlczo6RE9NLCBhY3R1YWxTaXplKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2lubGlu
ZVN0eWxlLCAiaW5saW5lU3R5bGUiKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2NsYXNzTmFtZXMs
ICJjbGFzc05hbWVzIik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9pZEZvclN0eWxlUmVzb2x1dGlv
biwgImlkRm9yU3R5bGVSZXNvbHV0aW9uIik7Ci0gICAgaWYgKG1faXNNdXRhYmxlKSB7Ci0gICAg
ICAgIGluZm8uYWRkTWVtYmVyKHByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCksICJwcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpIik7Ci0gICAgICAgIGluZm8uYWRkTWVtYmVyKG11dGFibGVB
dHRyaWJ1dGVWZWN0b3IoKSwgIm11dGFibGVBdHRyaWJ1dGVWZWN0b3IiKTsKLSAgICB9Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMCwgbGVuID0gbGVuZ3RoKCk7IGkgPCBsZW47IGkrKykKLSAgICAg
ICAgaW5mby5hZGRNZW1iZXIoKmF0dHJpYnV0ZUl0ZW0oaSksICIqYXR0cmlidXRlSXRlbSIpOwot
fQotCi1zaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleFNs
b3dDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1
dGVDYXNlKSBjb25zdAotewotICAgIC8vIENvbnRpbnVlIHRvIGNoZWNraW5nIGNhc2UtaW5zZW5z
aXRpdmVseSBhbmQvb3IgZnVsbCBuYW1lc3BhY2VkIG5hbWVzIGlmIG5lY2Vzc2FyeToKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewotICAgICAgICBjb25zdCBB
dHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgIGlmICghYXR0
cmlidXRlLT5uYW1lKCkuaGFzUHJlZml4KCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlICYmIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsIGF0dHJpYnV0ZS0+bG9j
YWxOYW1lKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGZhc3RlciB0byBkbyB0aGlzIGNvbXBhcmlz
b24gd2l0aG91dCBjYWxsaW5nIHRvU3RyaW5nLCB3aGljaAotICAgICAgICAgICAgLy8gZ2VuZXJh
dGVzIGEgdGVtcG9yYXJ5IHN0cmluZyBieSBjb25jYXRlbmF0aW9uLiBCdXQgdGhpcyBicmFuY2gg
aXMgb25seSByZWFjaGVkCi0gICAgICAgICAgICAvLyBpZiB0aGUgYXR0cmlidXRlIG5hbWUgaGFz
IGEgcHJlZml4LCB3aGljaCBpcyByYXJlIGluIEhUTUwuCi0gICAgICAgICAgICBpZiAoZXF1YWxQ
b3NzaWJseUlnbm9yaW5nQ2FzZShuYW1lLCBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0cmluZygpLCBz
aG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbm90Rm91bmQ7Ci19Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDY4ZjA2YmEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRy
aWJ1dGVEYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgICAgICAgICAgKEMpIDIwMDEg
RGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgRWxlbWVudEF0dHJpYnV0ZURhdGFfaAot
I2RlZmluZSBFbGVtZW50QXR0cmlidXRlRGF0YV9oCi0KLSNpbmNsdWRlICJBdHRyaWJ1dGUuaCIK
LSNpbmNsdWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNl
dC5oIgotI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTsKLWNs
YXNzIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTsKLQotY2xhc3MgRWxlbWVudEF0dHJpYnV0
ZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxFbGVtZW50QXR0cmlidXRlRGF0YT4gewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhPiBjcmVhdGUoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxFbGVt
ZW50QXR0cmlidXRlRGF0YT4gY3JlYXRlSW1tdXRhYmxlKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+
Jik7Ci0KLSAgICAvLyBPdmVycmlkZSBSZWZDb3VudGVkJ3MgZGVyZWYoKSB0byBlbnN1cmUgb3Bl
cmF0b3IgZGVsZXRlIGlzIGNhbGxlZCBvbgotICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBzdWJjbGFz
cyB0eXBlLgotICAgIHZvaWQgZGVyZWYoKTsKLQotICAgIHZvaWQgY2xlYXJDbGFzcygpIGNvbnN0
IHsgbV9jbGFzc05hbWVzLmNsZWFyKCk7IH0KLSAgICB2b2lkIHNldENsYXNzKGNvbnN0IEF0b21p
Y1N0cmluZyYgY2xhc3NOYW1lLCBib29sIHNob3VsZEZvbGRDYXNlKSBjb25zdCB7IG1fY2xhc3NO
YW1lcy5zZXQoY2xhc3NOYW1lLCBzaG91bGRGb2xkQ2FzZSk7IH0KLSAgICBjb25zdCBTcGFjZVNw
bGl0U3RyaW5nJiBjbGFzc05hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc05hbWVzOyB9Ci0K
LSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZEZvclN0eWxlUmVzb2x1dGlvbjsgfQotICAgIHZvaWQgc2V0SWRGb3JTdHlsZVJl
c29sdXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCkgY29uc3QgeyBtX2lkRm9yU3R5bGVS
ZXNvbHV0aW9uID0gbmV3SWQ7IH0KLQotICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGlu
ZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVTdHlsZS5nZXQoKTsgfQotCi0gICAgY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCogcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSBjb25zdDsK
LSAgICB2b2lkIHNldFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4pIGNvbnN0OwotCi0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OwotICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQotCi0gICAgLy8gSW50ZXJu
YWwgaW50ZXJmYWNlLgotICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7Ci0gICAgY29uc3QgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKLSAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0o
dW5zaWduZWQgaW5kZXgpOwotICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBR
dWFsaWZpZWROYW1lJik7Ci0gICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBR
dWFsaWZpZWROYW1lJikgY29uc3Q7Ci0gICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkg
Y29uc3Q7Ci0KLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgZG8gbm8gZXJyb3IgY2hlY2tpbmcuCi0g
ICAgdm9pZCBhZGRBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJik7Ci0gICAgdm9pZCByZW1vdmVB
dHRyaWJ1dGUoc2l6ZV90IGluZGV4KTsKLQotICAgIGJvb2wgaGFzSUQoKSBjb25zdCB7IHJldHVy
biAhbV9pZEZvclN0eWxlUmVzb2x1dGlvbi5pc051bGwoKTsgfQotICAgIGJvb2wgaGFzQ2xhc3Mo
KSBjb25zdCB7IHJldHVybiAhbV9jbGFzc05hbWVzLmlzTnVsbCgpOyB9Ci0KLSAgICBib29sIGlz
RXF1aXZhbGVudChjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogb3RoZXIpIGNvbnN0OwotCi0g
ICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7Ci0KLSAg
ICBib29sIGlzTXV0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNdXRhYmxlOyB9Ci0gICAgY29u
c3QgQXR0cmlidXRlKiBpbW11dGFibGVBdHRyaWJ1dGVBcnJheSgpIGNvbnN0OwotCi1wcm90ZWN0
ZWQ6Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEoKQotICAgICAgICA6IG1faXNNdXRhYmxlKHRy
dWUpCi0gICAgICAgICwgbV9hcnJheVNpemUoMCkKLSAgICAgICAgLCBtX3ByZXNlbnRhdGlvbkF0
dHJpYnV0ZVN0eWxlSXNEaXJ0eShmYWxzZSkKLSAgICAgICAgLCBtX3N0eWxlQXR0cmlidXRlSXNE
aXJ0eShmYWxzZSkKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICAsIG1fYW5pbWF0ZWRTVkdBdHRy
aWJ1dGVzQXJlRGlydHkoZmFsc2UpCi0jZW5kaWYKLSAgICB7IH0KLQotICAgIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKHVuc2lnbmVkIGFycmF5U2l6ZSkKLSAgICAgICAgOiBtX2lzTXV0YWJsZShmYWxz
ZSkKLSAgICAgICAgLCBtX2FycmF5U2l6ZShhcnJheVNpemUpCi0gICAgICAgICwgbV9wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkoZmFsc2UpCi0gICAgICAgICwgbV9zdHlsZUF0dHJp
YnV0ZUlzRGlydHkoZmFsc2UpCi0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgLCBtX2FuaW1hdGVk
U1ZHQXR0cmlidXRlc0FyZURpcnR5KGZhbHNlKQotI2VuZGlmCi0gICAgeyB9Ci0KLSAgICBFbGVt
ZW50QXR0cmlidXRlRGF0YShjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSYsIGJvb2wgaXNNdXRh
YmxlKTsKLQotICAgIHVuc2lnbmVkIG1faXNNdXRhYmxlIDogMTsKLSAgICB1bnNpZ25lZCBtX2Fy
cmF5U2l6ZSA6IDI4OwotICAgIG11dGFibGUgdW5zaWduZWQgbV9wcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZUlzRGlydHkgOiAxOwotICAgIG11dGFibGUgdW5zaWduZWQgbV9zdHlsZUF0dHJpYnV0
ZUlzRGlydHkgOiAxOwotI2lmIEVOQUJMRShTVkcpCi0gICAgbXV0YWJsZSB1bnNpZ25lZCBtX2Fu
aW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5IDogMTsKLSNlbmRpZgotCi0gICAgbXV0YWJsZSBS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9pbmxpbmVTdHlsZTsKLSAgICBtdXRhYmxlIFNwYWNl
U3BsaXRTdHJpbmcgbV9jbGFzc05hbWVzOwotICAgIG11dGFibGUgQXRvbWljU3RyaW5nIG1faWRG
b3JTdHlsZVJlc29sdXRpb247Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEVsZW1lbnQ7
Ci0gICAgZnJpZW5kIGNsYXNzIFN0eWxlZEVsZW1lbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIEltbXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOwotICAgIGZyaWVuZCBjbGFzcyBNdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGE7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBmcmllbmQgY2xhc3MgU1ZHRWxl
bWVudDsKLSNlbmRpZgotCi0gICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKLSAgICBj
b25zdCBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0OwotICAgIHNpemVfdCBnZXRB
dHRyaWJ1dGVJdGVtSW5kZXhTbG93Q2FzZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wg
c2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7Ci0KLSAgICBQYXNzUmVmUHRyPEVsZW1l
bnRBdHRyaWJ1dGVEYXRhPiBtYWtlTXV0YWJsZUNvcHkoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRy
PEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBtYWtlSW1tdXRhYmxlQ29weSgpIGNvbnN0OwotCi0gICAg
VmVjdG9yPEF0dHJpYnV0ZSwgND4mIG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKTsKLSAgICBjb25z
dCBWZWN0b3I8QXR0cmlidXRlLCA0PiYgbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpIGNvbnN0Owot
fTsKLQotY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEgOiBwdWJsaWMgRWxlbWVu
dEF0dHJpYnV0ZURhdGEgewotcHVibGljOgotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7Ci0gICAgSW1tdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJik7Ci0gICAgfkltbXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCk7Ci0KLSAgICB2b2lkKiBtX2F0dHJpYnV0ZUFycmF5
OwotfTsKLQotY2xhc3MgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhIHsKLXB1YmxpYzoKLSAgICBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGEoKSB7IH0KLSAgICBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgSW1tdXRhYmxl
RWxlbWVudEF0dHJpYnV0ZURhdGEmKTsKLSAgICBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEo
Y29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJik7Ci0KLSAgICBtdXRhYmxlIFJlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlOwotICAgIFZl
Y3RvcjxBdHRyaWJ1dGUsIDQ+IG1fYXR0cmlidXRlVmVjdG9yOwotfTsKLQotaW5saW5lIFZlY3Rv
cjxBdHRyaWJ1dGUsIDQ+JiBFbGVtZW50QXR0cmlidXRlRGF0YTo6bXV0YWJsZUF0dHJpYnV0ZVZl
Y3RvcigpCi17Ci0gICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRlVmVjdG9y
OwotfQotCi1pbmxpbmUgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZSwgND4mIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjptdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9p
c011dGFibGUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7Ci19Ci0KLWlubGluZSBjb25z
dCBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjppbW11dGFibGVBdHRyaWJ1dGVBcnJh
eSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lzTXV0YWJsZSk7Ci0gICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgQXR0cmlidXRlKj4oJnN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJs
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRlQXJyYXkpOwotfQotCi1p
bmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpsZW5ndGgoKSBjb25zdAotewotICAg
IGlmIChpc011dGFibGUoKSkKLSAgICAgICAgcmV0dXJuIG11dGFibGVBdHRyaWJ1dGVWZWN0b3Io
KS5zaXplKCk7Ci0gICAgcmV0dXJuIG1fYXJyYXlTaXplOwotfQotCi1pbmxpbmUgY29uc3QgU3R5
bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURhdGE6OnByZXNlbnRhdGlvbkF0dHJpYnV0
ZVN0eWxlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1faXNNdXRhYmxlKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhKj4odGhpcyktPm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUuZ2V0KCk7Ci19Ci0KLWlu
bGluZSB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpzZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVT
dHlsZShQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHN0eWxlKSBjb25zdAotewotICAgIEFT
U0VSVChtX2lzTXV0YWJsZSk7Ci0gICAgc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUgPSBzdHls
ZTsKLX0KLQotaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJp
YnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJp
YnV0ZUNhc2UpCi17Ci0gICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5h
bWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOwotICAgIGlmIChpbmRleCAhPSBub3RGb3Vu
ZCkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZUl0ZW0oaW5kZXgpOwotICAgIHJldHVybiAwOwot
fQotCi1pbmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0
cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0
cmlidXRlQ2FzZSkgY29uc3QKLXsKLSAgICBzaXplX3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVt
SW5kZXgobmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSk7Ci0gICAgaWYgKGluZGV4ICE9
IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gYXR0cmlidXRlSXRlbShpbmRleCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLWlubGluZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJp
YnV0ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmIChhdHRy
aWJ1dGVJdGVtKGkpLT5uYW1lKCkubWF0Y2hlcyhuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBp
OwotICAgIH0KLSAgICByZXR1cm4gbm90Rm91bmQ7Ci19Ci0KLS8vIFdlIHVzZSBhIGJvb2xlYW4g
cGFyYW1ldGVyIGluc3RlYWQgb2YgY2FsbGluZyBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlIHNv
IHRoYXQgdGhlIGNhbGxlcgotLy8gY2FuIHR1bmUgdGhlIGJlaGF2aW9yIChoYXNBdHRyaWJ1dGUg
aXMgY2FzZSBzZW5zaXRpdmUgd2hlcmVhcyBnZXRBdHRyaWJ1dGUgaXMgbm90KS4KLWlubGluZSBz
aXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QK
LXsKLSAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKLSAgICBib29sIGRvU2xvd0NoZWNrID0g
c2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZTsKLQotICAgIC8vIE9wdGltaXplIGZvciB0aGUgY2Fz
ZSB3aGVyZSB0aGUgYXR0cmlidXRlIGV4aXN0cyBhbmQgaXRzIG5hbWUgZXhhY3RseSBtYXRjaGVz
LgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICBjb25z
dCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgIGlmICgh
YXR0cmlidXRlLT5uYW1lKCkuaGFzUHJlZml4KCkpIHsKLSAgICAgICAgICAgIGlmIChuYW1lID09
IGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgZG9TbG93Q2hlY2sgPSB0cnVlOwotICAgIH0KLQotICAg
IGlmIChkb1Nsb3dDaGVjaykKLSAgICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZUl0ZW1JbmRleFNs
b3dDYXNlKG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOwotICAgIHJldHVybiBub3RG
b3VuZDsKLX0KLQotaW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6
OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAo
YXR0cmlidXRlSXRlbShpKS0+bmFtZSgpLm1hdGNoZXMobmFtZSkpCi0gICAgICAgICAgICByZXR1
cm4gYXR0cmlidXRlSXRlbShpKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlubGluZSBB
dHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZUl0ZW0oaSktPm5hbWUoKS5tYXRjaGVz
KG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgfQotICAg
IHJldHVybiAwOwotfQotCi1pbmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRl
RGF0YTo6YXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGxlbmd0aCgpKTsKLSAgICBpZiAobV9p
c011dGFibGUpCi0gICAgICAgIHJldHVybiAmbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpLmF0KGlu
ZGV4KTsKLSAgICByZXR1cm4gJmltbXV0YWJsZUF0dHJpYnV0ZUFycmF5KClbaW5kZXhdOwotfQot
Ci1pbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6YXR0cmlidXRlSXRlbSh1
bnNpZ25lZCBpbmRleCkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihp
bmRleCA8IGxlbmd0aCgpKTsKLSAgICByZXR1cm4gJm11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5h
dChpbmRleCk7Ci19Ci0KLWlubGluZSB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpkZXJlZigp
Ci17Ci0gICAgaWYgKCFkZXJlZkJhc2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aXNNdXRhYmxlKQotICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8TXV0YWJsZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhKj4odGhpcyk7Ci0gICAgZWxzZQotICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8
SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKTsKLX0KLQotfQotCi0jZW5kaWYg
Ly8gRWxlbWVudEF0dHJpYnV0ZURhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9TaGFyZWRXb3JrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3Jr
ZXIuY3BwCmluZGV4IDljMWJjN2YuLjEwOGE4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvU2hhcmVkV29ya2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1No
YXJlZFdvcmtlci5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgIlNoYXJlZFdvcmtl
ci5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZlYXR1cmVPYnNl
cnZlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUg
IktVUkwuaCIK
</data>

          </attachment>
      

    </bug>

</bugzilla>