<?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>226493</bug_id>
          
          <creation_ts>2021-06-01 04:46:31 -0700</creation_ts>
          <short_desc>Update usrsctp to M92</short_desc>
          <delta_ts>2021-06-08 02:28:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1765563</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-01 04:46:31 -0700</bug_when>
    <thetext>Update usrsctp to M92</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765582</commentid>
    <comment_count>1</comment_count>
      <attachid>430256</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-01 05:25:44 -0700</bug_when>
    <thetext>Created attachment 430256
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765954</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-02 06:06:14 -0700</bug_when>
    <thetext>commit-queue failed to commit attachment 430256 to WebKit repository. To retry, please set cq+ flag again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765985</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-02 08:01:01 -0700</bug_when>
    <thetext>commit-queue failed to commit attachment 430256 to WebKit repository. To retry, please set cq+ flag again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765987</commentid>
    <comment_count>4</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-06-02 08:02:30 -0700</bug_when>
    <thetext>From https://ews-build.webkit.org/#/builders/28/builds/12622:
ERROR from SVN:
A repository hook failed: Commit blocked by pre-commit hook (exit code 1) with output:
    The following files contain tab characters:
        trunk/Source/ThirdParty/libwebrtc/Source/third_party/usrsctp/usrsctplib/programs/chargen_server_upcall.c
        trunk/Source/ThirdParty/libwebrtc/Source/third_party/usrsctp/usrsctplib/programs/client.c
        trunk/Source/ThirdParty/libwebrtc/Source/third_party/usrsctp/usrsctplib/programs/client_upcall.c
        trunk/Source/ThirdParty/libwebrtc/Source/third_party/usrsctp/usrsctplib/programs/daytime_server.c
...
    Please use spaces instead to indent.
    If you must commit a file with tabs, use svn propset to set the &quot;allow-tabs&quot; property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765996</commentid>
    <comment_count>5</comment_count>
      <attachid>430357</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-02 08:17:32 -0700</bug_when>
    <thetext>Created attachment 430357
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766032</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-02 09:32:37 -0700</bug_when>
    <thetext>commit-queue failed to commit attachment 430357 to WebKit repository. To retry, please set cq+ flag again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767710</commentid>
    <comment_count>7</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-08 02:27:26 -0700</bug_when>
    <thetext>Committed r278599 (238588@main): &lt;https://commits.webkit.org/238588@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767711</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-08 02:28:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/78993640&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430256</attachid>
            <date>2021-06-01 05:25:44 -0700</date>
            <delta_ts>2021-06-02 08:17:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226493-20210601142541.patch</filename>
            <type>text/plain</type>
            <size>405357</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCA4ZTVkZWM5NWUwZDM0YWZmZTE3M2I4MDUzMjZjMDY0NzdjMmQwYzNiLi5kMTU2
NmFlMzJiNDM5NGM0ZDJkN2JhM2NlZmUxMzU2YWFjYWUyNGE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0wNi0wMSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIHVzcnNjdHAgdG8gTTky
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY0OTMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwOiBSZXN5bmNlZC4KKwogMjAyMS0wNi0wMSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHRvIHJubm9pc2UgdG8g
TTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvQlVJTEQuZ24gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvQlVJTEQuZ24KaW5kZXggYjg2OTg1MjAwYjhmNDFmMWNm
NDc3Y2EzMzRhYTljZmE3YTJmM2I5Yi4uOTA2MTk0ZWVjMGFhZjcwNDY3NzNkODU1ODRkM2MwMTY4
MGE5YTM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL0JVSUxELmduCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9CVUlMRC5nbgpAQCAtMyw4ICszLDkgQEAK
ICMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAogaW1wb3J0KCIvL2J1aWxkL3Rvb2xjaGFp
bi90b29sY2hhaW4uZ25pIikKK2ltcG9ydCgiLy90ZXN0aW5nL2xpYmZ1enplci9mdXp6ZXJfdGVz
dC5nbmkiKQogCi1jb25maWcoInVzcnNjdHBfY29uZmlnIikgeworY29uZmlnKCJ1c3JzY3RwX3B1
YmxpY19jb25maWciKSB7CiAgIGluY2x1ZGVfZGlycyA9IFsKICAgICAidXNyc2N0cGxpYi91c3Jz
Y3RwbGliIiwKICAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQiLApAQCAtMTcsNiAr
MTgsMTYgQEAgY29uZmlnKCJ1c3JzY3RwX2NvbmZpZyIpIHsKICAgfQogfQogCisjIFVzZWQgYnkg
Ym90aCB1c3JzY3RwIHN0YXRpYyBsaWJyYXJ5IGFuZCBmdXp6ZXJzLgorY29uZmlnKCJ1c3JzY3Rw
X2ludGVybmFsX2NvbmZpZyIpIHsKKyAgZGVmaW5lcyA9IFtdCisgIGlmIChpc19saW51eCB8fCBp
c19jaHJvbWVvcyB8fCBpc19hbmRyb2lkKSB7CisgICAgZGVmaW5lcyArPSBbICJfR05VX1NPVVJD
RSIgXQorICB9IGVsc2UgaWYgKGlzX2FwcGxlKSB7CisgICAgZGVmaW5lcyArPSBbICJfX0FQUExF
X1VTRV9SRkNfMjI5MiIgXQorICB9Cit9CisKIGNvbmZpZygidXNyc2N0cF93YXJuaW5ncyIpIHsK
ICAgaWYgKGlzX2NsYW5nKSB7CiAgICAgY2ZsYWdzID0gWwpAQCAtMTA1LDYgKzExNiw3IEBAIHN0
YXRpY19saWJyYXJ5KCJ1c3JzY3RwIikgewogICAgICJTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1Mi
LAogICAgICJTQ1RQX1NJTVBMRV9BTExPQ0FUT1IiLAogICAgICJTQ1RQX1VTRV9PUEVOU1NMX1NI
QTEiLAorICAgICJTQ1RQX1VTRV9PUEVOU1NMX1JBTkQiLAogICAgICJfX1VzZXJzcGFjZV9fIiwK
IAogICAgICMgIlNDVFBfREVCVUciLCAjIFVuY29tbWVudCBmb3IgU0NUUCBkZWJ1Z2dpbmcuCkBA
IC0xMTgsMzYgKzEzMCw2MCBAQCBzdGF0aWNfbGlicmFyeSgidXNyc2N0cCIpIHsKICAgICAjIGNv
cnJlY3RseS4KICAgICAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6bm9faW5jb21wYXRpYmxlX3Bv
aW50ZXJfd2FybmluZ3MiLAogICAgICI6dXNyc2N0cF93YXJuaW5ncyIsCisgICAgIjp1c3JzY3Rw
X2ludGVybmFsX2NvbmZpZyIsCiAgIF0KIAotICBwdWJsaWNfY29uZmlncyA9IFsgIjp1c3JzY3Rw
X2NvbmZpZyIgXQorICBwdWJsaWNfY29uZmlncyA9IFsgIjp1c3JzY3RwX3B1YmxpY19jb25maWci
IF0KIAogICBjZmxhZ3MgPSBbCiAgICAgIi1VSU5FVCIsCiAgICAgIi1VSU5FVDYiLAogICBdCiAK
LSAgaWYgKGlzX2xpbnV4IHx8IGlzX2Nocm9tZW9zIHx8IGlzX2FuZHJvaWQpIHsKLSAgICBkZWZp
bmVzICs9IFsKLSAgICAgICJfX1VzZXJzcGFjZV9vc19MaW51eCIsCi0gICAgICAiX0dOVV9TT1VS
Q0UiLAotICAgIF0KLSAgfSBlbHNlIGlmIChpc19hcHBsZSkgewotICAgIGRlZmluZXMgKz0gWwot
ICAgICAgIkhBVkVfU0FfTEVOIiwKLSAgICAgICJfX0FQUExFX1VTRV9SRkNfMjI5MiIsCi0gICAg
ICAiX19Vc2Vyc3BhY2Vfb3NfRGFyd2luIiwKLSAgICBdCisgIGlmICh1c2VfZnV6emluZ19lbmdp
bmUpIHsKKyAgICBkZWZpbmVzICs9IFsgIklOVkFSSUFOVFMiIF0KICAgfQorICBkZXBzID0gWyAi
Ly90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wiIF0KK30KIAotICBpZiAoaXNfd2luKSB7Ci0gICAgZGVm
aW5lcyArPSBbICJfX1VzZXJzcGFjZV9vc19XaW5kb3dzIiBdCi0gIH0gZWxzZSB7Ci0gICAgZGVm
aW5lcyArPSBbICJOT05fV0lORE9XU19ERUZJTkUiIF0KLSAgfQorZnV6emVyX3Rlc3QoInVzcnNj
dHBfZnV6emVyX2xpc3RlbiIpIHsKKyAgc291cmNlcyA9IFsKKyAgICAidXNyc2N0cGxpYi9mdXp6
ZXIvZnV6emVyX2xpc3Rlbi5jIiwKKyAgICAidXNyc2N0cGxpYi9wcm9ncmFtcy9wcm9ncmFtc19o
ZWxwZXIuYyIsCisgIF0KKyAgYWRkaXRpb25hbF9jb25maWdzID0gWyAiOnVzcnNjdHBfaW50ZXJu
YWxfY29uZmlnIiBdCisgIGRlcHMgPSBbICI6dXNyc2N0cCIgXQorICBzZWVkX2NvcnB1cyA9ICJ1
c3JzY3RwbGliL2Z1enplci9DT1JQVVNfTElTVEVOIgorICBsaWJmdXp6ZXJfb3B0aW9ucyA9IFsg
Im1heF9sZW49NDA4NiIgXQorfQogCi0gIGlmIChpc19mdWNoc2lhKSB7Ci0gICAgZGVmaW5lcyAr
PSBbICJfX1VzZXJzcGFjZV9vc19GdWNoc2lhIiBdCi0gIH0KLSAgZGVwcyA9IFsgIi8vdGhpcmRf
cGFydHkvYm9yaW5nc3NsIiBdCitmdXp6ZXJfdGVzdCgidXNyc2N0cF9mdXp6ZXJfZnJhZ21lbnQi
KSB7CisgIHNvdXJjZXMgPSBbCisgICAgInVzcnNjdHBsaWIvZnV6emVyL2Z1enplcl9mcmFnbWVu
dC5jIiwKKyAgICAidXNyc2N0cGxpYi9wcm9ncmFtcy9wcm9ncmFtc19oZWxwZXIuYyIsCisgIF0K
KyAgYWRkaXRpb25hbF9jb25maWdzID0gWyAiOnVzcnNjdHBfaW50ZXJuYWxfY29uZmlnIiBdCisg
IGRlcHMgPSBbICI6dXNyc2N0cCIgXQorICBzZWVkX2NvcnB1cyA9ICJ1c3JzY3RwbGliL2Z1enpl
ci9DT1JQVVNfRlJBR01FTlQiCisgIGxpYmZ1enplcl9vcHRpb25zID0gWyAibWF4X2xlbj00MDg2
IiBdCit9CisKK2Z1enplcl90ZXN0KCJ1c3JzY3RwX2Z1enplcl9jb25uZWN0X211bHRpIikgewor
ICBzb3VyY2VzID0gWworICAgICJ1c3JzY3RwbGliL2Z1enplci9mdXp6ZXJfY29ubmVjdC5jIiwK
KyAgICAidXNyc2N0cGxpYi9wcm9ncmFtcy9wcm9ncmFtc19oZWxwZXIuYyIsCisgIF0KKworICBh
ZGRpdGlvbmFsX2NvbmZpZ3MgPSBbICI6dXNyc2N0cF9pbnRlcm5hbF9jb25maWciIF0KKworICAj
IFNlZSB1c3JzY3RwbGliL2Z1enplci9DTWFrZUxpc3RzLnR4dC4KKyAgIyBTdGFnZSAwIGlzICJt
dWx0aSIsIHdoaWNoIGNhbiBzdGFydCBmdXp6aW5nIGF0IGRpZmZlcmVudCBwb2ludHMgZHVyaW5n
IHRoZQorICAjIGhhbmRzaGFrZSBiYXNlZCBvbiB0aGUgZmlyc3QgZnV6emVkIGJ5dGUuIFRoZXJl
IHdlcmUgcGxhbnMgdG8gaGF2ZSBkZWRpY2F0ZWQKKyAgIyBmdXp6ZXJzIGZvciB2YXJpb3VzIHN0
YWdlcywgYnV0IHRoaXMgaWRlYSB3YXMgYWJhbmRvbmVkIHdoYXQgd2FzIGZvdW5kIHRoYXQKKyAg
IyB0aGUgIm11bHRpIiBmdXp6ZXIgcGVyZm9ybWVkIGp1c3QgYXMgd2VsbC4KKyAgZGVmaW5lcyA9
IFsgIkZVWlpJTkdfU1RBR0U9MCIgXQorCisgIGRlcHMgPSBbICI6dXNyc2N0cCIgXQorICBzZWVk
X2NvcnB1cyA9ICJ1c3JzY3RwbGliL2Z1enplci9DT1JQVVNfQ09OTkVDVCIKKyAgbGliZnV6emVy
X29wdGlvbnMgPSBbICJtYXhfbGVuPTMyMDAwIiBdCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvRElSX01FVEFEQVRB
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L0RJUl9NRVRBREFUQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZjBhMmQwMTgxMTY0ZTc4ODBjNDMyODY1N2VmZWEw
YjAwMDQ4MmUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL0RJUl9NRVRBREFUQQpAQCAtMCwwICsxLDMgQEAK
K21vbm9yYWlsOiB7CisgIGNvbXBvbmVudDogIkJsaW5rPldlYlJUQz5OZXR3b3JrIgorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL09XTkVSUyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC9PV05FUlMKaW5kZXggYWFlNTM4YjBiODZhYzhkZDczYmI5YmY2MDlmY2Iz
NjY0ZTlmZmJiYi4uMGUzNDk3MDg5OWZmY2Y4NjdlMTAwYmJkOGNmOTM2ODNmNjE4ZmM3YSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL09XTkVSUworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvT1dORVJTCkBAIC0xLDQgKzEsMiBAQAogaHRhQGNocm9taXVtLm9y
Zwogb3JwaGlzQGNocm9taXVtLm9yZwotCi0jIENPTVBPTkVOVDogQmxpbms+V2ViUlRDPk5ldHdv
cmsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC9SRUFETUUuY2hyb21pdW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvUkVBRE1FLmNocm9taXVtCmluZGV4IGU3NDA1
YWM5NTQ5OGY0NjIwMDRmNGU3MmM3ODEyZjBhYTRjNTI0MmYuLmI0Y2E0M2MwOTJhNWI3NDQ0ZDJm
YjJiM2ZhMmNkOGEyZjQzNzZiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9SRUFETUUuY2hyb21pdW0KKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL1JFQURN
RS5jaHJvbWl1bQpAQCAtMiw4ICsyLDggQEAgTmFtZTogdXNyc2N0cAogVVJMOiBodHRwOi8vZ2l0
aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAKIFZlcnNpb246IDAKIENQRVByZWZpeDogY3BlOi9hOnVz
cnNjdHBfcHJvamVjdDp1c3JzY3RwOjIwMTktMTItMjAKLURhdGU6IEF1ZyAyOCwgMjAyMAotUmV2
aXNpb246IDk5NWMwYjg0NDE0NDY2ZDc3ZDUyMDExZTViNTcyY2JlMjEzYjc3MGEKK0RhdGU6IE1h
eSAxMCwgMjAyMQorUmV2aXNpb246IGFjZmNlNDZlNDI4Y2MwODRiNGJkMDE2NGUxYjAxOTI2MWE4
ZGJlZGEKIExpY2Vuc2U6IE5ldyBCU0QKIExpY2Vuc2UgRmlsZTogTElDRU5TRQogU2VjdXJpdHkg
Q3JpdGljYWw6IHllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvLmdpdGh1Yi93b3JrZmxvd3MvYnVp
bGQtd2l0aC1jbWFrZS55bWwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC13aXRo
LWNtYWtlLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YmE5ZDY5YzMxZmQ4ZmUyODJmMDFlMGEwYTZhMDA5ZTAw
YWU1ZjVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvLmdpdGh1Yi93b3JrZmxvd3MvYnVp
bGQtd2l0aC1jbWFrZS55bWwKQEAgLTAsMCArMSw1NyBAQAorbmFtZTogQnVpbGQgd2l0aCBDTWFr
ZQorCitvbjoKKyAgcHVzaDoKKyAgICBicmFuY2hlczogWyBtYXN0ZXIsIGdpdGh1Yi1hY3Rpb25z
IF0KKyAgcHVsbF9yZXF1ZXN0OgorICAgIGJyYW5jaGVzOiBbIG1hc3RlciBdCisKK2pvYnM6Cisg
IGJ1aWxkOgorCisgICAgc3RyYXRlZ3k6CisgICAgICBtYXRyaXg6CisgICAgICAgIHBsYXRmb3Jt
OiBbdWJ1bnR1LWxhdGVzdCwgbWFjb3MtbGF0ZXN0LCB3aW5kb3dzLWxhdGVzdF0KKyAgICAgICAg
Y21ha2VfYnVpbGRfdHlwZTogW0RlYnVnLCBSZWxXaXRoRGViSW5mb10KKyAgICAgICAgc2N0cF9p
bnZhcmlhbnRzOiBbT04sIE9GRl0KKyAgICAgICAgc2N0cF9pbmV0NjogW09OLCBPRkZdCisgICAg
ICAgIHNjdHBfaW5ldDogW09OLCBPRkZdCisgICAgICAgIHNjdHBfZGVidWc6IFtPTiwgT0ZGXQor
CisgICAgcnVucy1vbjogJHt7IG1hdHJpeC5wbGF0Zm9ybSB9fQorCisgICAgc3RlcHM6CisgICAg
LSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHYyCisgICAgICB3aXRoOgorICAgICAgICBwYXRoOiAn
dXNyc2N0cF9zb3VyY2UnCisKKyAgICAtIG5hbWU6IFByZXBhcmUgZGlycworICAgICAgc2hlbGw6
IGJhc2gKKyAgICAgIHJ1bjogfAorICAgICAgICBta2RpciAtcCBjbWFrZV9idWlsZAorICAgICAg
ICBta2RpciAtcCBjbWFrZV9pbnN0YWxsCisgICAgICAgIAorICAgIC0gbmFtZTogR2VuZXJhdGUg
Q01ha2UgcHJvamVjdAorICAgICAgc2hlbGw6IGJhc2gKKyAgICAgIHJ1bjogfAorICAgICAgICBj
ZCBjbWFrZV9idWlsZAorICAgICAgICBjbWFrZSAtRENNQUtFX0JVSUxEX1RZUEU9JHt7IG1hdHJp
eC5jbWFrZV9idWlsZF90eXBlIH19IFwKKyAgICAgICAgICAgICAgLURDTUFLRV9QT1NJVElPTl9J
TkRFUEVOREVOVF9DT0RFPU9OIFwKKyAgICAgICAgICAgICAgLURDTUFLRV9WRVJCT1NFX01BS0VG
SUxFOkJPT0w9T04gXAorICAgICAgICAgICAgICAtRHNjdHBfZGVidWc9JHt7IG1hdHJpeC5zY3Rw
X2RlYnVnIH19IFwKKyAgICAgICAgICAgICAgLURzY3RwX2ludmFyaWFudHM9JHt7IG1hdHJpeC5z
Y3RwX2ludmFyaWFudHMgfX0gXAorICAgICAgICAgICAgICAtRHNjdHBfaW5ldDY9JHt7IG1hdHJp
eC5zY3RwX2luZXQ2IH19IFwKKyAgICAgICAgICAgICAgLURzY3RwX2luZXQ9JHt7IG1hdHJpeC5z
Y3RwX2luZXQgfX0gXAorICAgICAgICAgICAgICAtRHNjdHBfYnVpbGRfcHJvZ3JhbXM9T04gXAor
ICAgICAgICAgICAgICAtRHNjdHBfYnVpbGRfZnV6emVyPU9GRiBcCisgICAgICAgICAgICAgIC1E
Q01BS0VfSU5TVEFMTF9QUkVGSVg9JHtHSVRIVUJfV09SS1NQQUNFfS9jbWFrZV9pbnN0YWxsIFwK
KyAgICAgICAgICAgICAgJHtHSVRIVUJfV09SS1NQQUNFfS91c3JzY3RwX3NvdXJjZQorICAgICAg
ICAKKyAgICAtIG5hbWU6IEJ1aWxkIGFuZCBpbnN0YWxsIHByb2plY3QKKyAgICAgIHNoZWxsOiBi
YXNoCisgICAgICBydW46IHwKKyAgICAgICAgY21ha2UgLS1idWlsZCBjbWFrZV9idWlsZCBcCisg
ICAgICAgICAgICAgIC0tcGFyYWxsZWwgMiBcCisgICAgICAgICAgICAgIC0tY29uZmlnICR7eyBt
YXRyaXguY21ha2VfYnVpbGRfdHlwZSB9fSBcCisgICAgICAgICAgICAgIC0tdGFyZ2V0IGluc3Rh
bGwgXAorICAgICAgICAgICAgICAtLWNsZWFuLWZpcnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL0NNYWtlTGlzdHMudHh0CmluZGV4IGJhOTM1ZjU3NTBi
ZTZhNWFlOTUwNTA5YWM5Njg5NDc2YzAxY2ZlOWEuLjVlMzMxOTU0MjUxMjA1NmM3ZWUxYThhNmQ4
ODJkYzQ1YTBlZGYwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL0NNYWtlTGlzdHMudHh0CkBAIC0zOCw2ICszOCw4IEBAIGlmIChOT1QgQ01BS0Vf
QlVJTERfVFlQRSkKIAlzZXQoQ01BS0VfQlVJTERfVFlQRSAiREVCVUciKQogZW5kaWYgKCkKIAor
bGlzdChBUFBFTkQgQ01BS0VfTU9EVUxFX1BBVEggJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9
L2NtYWtlKQorCiBpbmNsdWRlKENoZWNrU3RydWN0SGFzTWVtYmVyKQogaW5jbHVkZShDaGVja0lu
Y2x1ZGVGaWxlKQogaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL01hbnVhbC5tZCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL01hbnVhbC5tZAppbmRleCBiMTdjNzU0MTQyZGYxNjBm
OTgxNGM0Yzg5YWIxOTY2N2QyY2UzODdiLi41ZWZjNzg1OTU3ODhmMzAwZmI2MzVmYTZmYjU5Y2U5
ZDYwOWU1OWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9NYW51YWwubWQKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
TWFudWFsLm1kCkBAIC0zNjQsNyArMzY0LDcgQEAgU0NUUF9SRUNWUkNWSU5GTyB8IGludCB8IHIv
dwogU0NUUF9SRUNWTlhUSU5GTyB8IGludCB8IHIvdwogU0NUUF9ERUZBVUxUX1NORElORk8gfCBz
dHJ1Y3Qgc2N0cF9zbmRpbmZvIHwgci93CiBTQ1RQX0RFRkFVTFRfUFJJTkZPIHwgc3RydWN0IHNj
dHBfZGVmYXVsdF9wcmluZm8gfCByL3cKLVNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCB8IGlu
dCB8IHIvdworU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUIHwgc3RydWN0IHNjdHBfdWRwZW5j
YXBzIHwgci93CiBTQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQgfCBzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSB8IHIvdwogU0NUUF9TVEFUVVMgfCBzdHJ1Y3Qgc2N0cF9zdGF0dXMgfCByCiBTQ1RQX0dF
VF9QRUVSX0FERFJfSU5GTyB8IHN0cnVjdCBzY3RwX3BhZGRyaW5mbyB8IHIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL2NtYWtlL0ZpbmRNYmVkVExTLmNtYWtlIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvY21ha2UvRmluZE1i
ZWRUTFMuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjNlZDA0NmI2OWUwNzkwNTc1ODVlNTU4YzNiMjgzOWZm
ZTg3MmMxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL2NtYWtlL0ZpbmRNYmVkVExTLmNt
YWtlCkBAIC0wLDAgKzEsMzggQEAKK2ZpbmRfcGF0aChNQkVEVExTX0lOQ0xVREVfRElSUyBtYmVk
dGxzL3NzbC5oKQorCitmaW5kX2xpYnJhcnkoTUJFRFRMU19MSUJSQVJZIG1iZWR0bHMpCitmaW5k
X2xpYnJhcnkoTUJFRFg1MDlfTElCUkFSWSBtYmVkeDUwOSkKK2ZpbmRfbGlicmFyeShNQkVEQ1JZ
UFRPX0xJQlJBUlkgbWJlZGNyeXB0bykKKworc2V0KE1CRURUTFNfTElCUkFSSUVTICIke01CRURU
TFNfTElCUkFSWX0iICIke01CRURYNTA5X0xJQlJBUll9IiAiJHtNQkVEQ1JZUFRPX0xJQlJBUll9
IikKKworaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKK2ZpbmRfcGFja2Fn
ZV9oYW5kbGVfc3RhbmRhcmRfYXJncyhNYmVkVExTIERFRkFVTFRfTVNHCisgICAgTUJFRFRMU19M
SUJSQVJZIE1CRURUTFNfSU5DTFVERV9ESVJTIE1CRURYNTA5X0xJQlJBUlkgTUJFRENSWVBUT19M
SUJSQVJZKQorCittYXJrX2FzX2FkdmFuY2VkKE1CRURUTFNfSU5DTFVERV9ESVJTIE1CRURUTFNf
TElCUkFSWSBNQkVEWDUwOV9MSUJSQVJZIE1CRURDUllQVE9fTElCUkFSWSkKKworaWYoTk9UIFRB
UkdFVCBNYmVkVExTKQorCW1lc3NhZ2UoImluIG1iZWR0bHMgJHtNQkVEVExTX0xJQlJBUll9IikK
KyAgICBhZGRfbGlicmFyeShNYmVkVExTIFVOS05PV04gSU1QT1JURUQpCisgICAgc2V0X3Rhcmdl
dF9wcm9wZXJ0aWVzKE1iZWRUTFMgUFJPUEVSVElFUworICAgICAgICAgICAgICAgICAgICAgICAg
ICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtNQkVEVExTX0lOQ0xVREVfRElSU30i
CisgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xJTktfSU5URVJGQUNFX0xBTkdV
QUdFUyAiQyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7
TUJFRFRMU19MSUJSQVJZfSIpCitlbmRpZigpCisKK2lmKE5PVCBUQVJHRVQgTWJlZENyeXB0bykK
KyAgICBhZGRfbGlicmFyeShNYmVkQ3J5cHRvIFVOS05PV04gSU1QT1JURUQpCisgICAgc2V0X3Rh
cmdldF9wcm9wZXJ0aWVzKE1iZWRDcnlwdG8gUFJPUEVSVElFUworICAgICAgICAgICAgICAgICAg
ICAgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtNQkVEVExTX0lOQ0xVREVf
RElSU30iCisgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xJTktfSU5URVJGQUNF
X0xBTkdVQUdFUyAiQyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QT1JURURfTE9DQVRJ
T04gIiR7TUJFRENSWVBUT19MSUJSQVJZfSIpCitlbmRpZigpCisKK2lmKE5PVCBUQVJHRVQgTWJl
ZFg1MDkpCisgICAgYWRkX2xpYnJhcnkoTWJlZFg1MDkgVU5LTk9XTiBJTVBPUlRFRCkKKyAgICBz
ZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTWJlZFg1MDkgUFJPUEVSVElFUworICAgICAgICAgICAgICAg
ICAgICAgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtNQkVEVExTX0lOQ0xV
REVfRElSU30iCisgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xJTktfSU5URVJG
QUNFX0xBTkdVQUdFUyAiQyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QT1JURURfTE9D
QVRJT04gIiR7TUJFRFg1MDlfTElCUkFSWX0iKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvY29uZmlndXJlLmFjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvY29uZmlndXJlLmFjCmluZGV4IDE3NmQ1ZmE3ZTM5
YzVjNzY0MTU3MzY5ZTY3OTQwYmQyMWMyNTgwZWUuLjIwNGU3ZWJkZTc1ZmRiMjcyMWY1NTg2MDY2
MjNiMGM3NTIwYmJlNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL2NvbmZpZ3VyZS5hYworKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9jb25maWd1cmUuYWMKQEAgLTI4LDcgKzI4LDcgQEAgZG5sIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK
IGRubCBTVUNIIERBTUFHRS4KIGRubAogCi1BQ19JTklUKFtsaWJ1c3JzY3RwXSwgWzAuOS4zLjBd
KQorQUNfSU5JVChbbGlidXNyc2N0cF0sIFswLjkuNS4wXSkKIEFNX0lOSVRfQVVUT01BS0UoW2Zv
cmVpZ25dKQogCiBBQ19QUk9HX0NDCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9tZXNvbi5idWlsZCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL21lc29uLmJ1aWxkCmluZGV4IDI5ZjA2NDc3ZGFiYzI5NTA5NGM4ODUxYWZhODQ3
OWFiYzg5NWYzNTAuLmRhYWM5MjViZGEwNTc1N2ZlYzY1OGQyNTc0ZjMzYmMyNGNiYjQ1MTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL21lc29uLmJ1aWxkCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL21lc29uLmJ1aWxk
CkBAIC0xLDkgKzEsMTQgQEAKICMgUHJvamVjdCBkZWZpbml0aW9uCiBwcm9qZWN0KCd1c3JzY3Rw
bGliJywgJ2MnLAotICAgIHZlcnNpb246ICcxLjAuMCcsCisgICAgdmVyc2lvbjogJzAuOS41LjAn
LAogICAgIGRlZmF1bHRfb3B0aW9uczogWydjX3N0ZD1jOTknXSwKICAgICBtZXNvbl92ZXJzaW9u
OiAnPj0wLjQ5LjAnKQogCisjIFNoYXJlZCBsaWJyYXJ5IEFQSSBhbmQgQUJJIHZlcnNpb25zCisj
IE5vdGljZTogc2hhcmVkIGxpYnJhcnkgdmVyc2lvbiBtdXN0IGJlIGluIFguWS5aIGZvcm1hdCBv
bmx5Citzb3ZlcnNpb25fZnVsbCA9ICcyLjAuMCcKK3NvdmVyc2lvbl9zaG9ydCA9ICcyJworCiAj
IFNldCBjb21waWxlciB3YXJuaW5nIGZsYWdzCiBjb21waWxlciA9IG1lc29uLmdldF9jb21waWxl
cignYycpCiBpZiBjb21waWxlci5nZXRfYXJndW1lbnRfc3ludGF4KCkgPT0gJ21zdmMnCkBAIC0x
ODYsNyArMTkxLDggQEAgZWxzZQogICAgICAgICBkZXBlbmRlbmNpZXM6IGRlcGVuZGVuY2llcywK
ICAgICAgICAgaW5jbHVkZV9kaXJlY3RvcmllczogaW5jbHVkZV9kaXJzLAogICAgICAgICBpbnN0
YWxsOiB0cnVlLAotICAgICAgICB2ZXJzaW9uOiBtZXNvbi5wcm9qZWN0X3ZlcnNpb24oKSkKKyAg
ICAgICAgdmVyc2lvbjogc292ZXJzaW9uX2Z1bGwsCisgICAgICAgIHNvdmVyc2lvbjogc292ZXJz
aW9uX3Nob3J0KQogZW5kaWYKIAogIyBEZWNsYXJlIGRlcGVuZGVuY3kKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3Byb2dyYW1zL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvQ01ha2VM
aXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Y5MDdiYjJmMTU2NjJkNDdkODQ0ZjY2MDBhYzYxZTNjNWFj
YWM1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL0NNYWtlTGlzdHMudHh0
CkBAIC0wLDAgKzEsMTIyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxNS0yMDE1IE9sZWcgQWxl
eGVlbmtvdgorIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBGZWxpeCBXZWlucmFuaworIworIyBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworIyAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMg
ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisjIFNVQ0ggREFNQUdFLgorIworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSU5DTFVERSBNT0RVTEVTCisjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luY2x1ZGUoQ2hlY2tJbmNs
dWRlRmlsZSkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisjIENIRUNLIElOQ0xVREVTCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCisKK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFLRV9TT1VSQ0Vf
RElSfS91c3JzY3RwbGliKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKKyMgT1MgREVQRU5ERU5UCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2lmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVT
ICJMaW51eCIpCisJYWRkX2RlZmluaXRpb25zKC1EX0dOVV9TT1VSQ0UpCitlbmRpZiAoKQorCitp
ZiAoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiRGFyd2luIikKKwlhZGRfZGVmaW5pdGlvbnMo
LURfX0FQUExFX1VTRV9SRkNfMjI5MikKK2VuZGlmICgpCisKK2lmIChNU1lTIE9SIE1JTkdXKQor
CW1lc3NhZ2UoU1RBVFVTICJNU1lTIC8gTUlOR1ciKQorCWFkZF9kZWZpbml0aW9ucygtRF9fVVNF
X01JTkdXX0FOU0lfU1RESU8pCisJIyAweDA2MDEgPSBXaW5kb3dzIDcgQVBJCisJYWRkX2RlZmlu
aXRpb25zKC1EV0lOVkVSPTB4MDYwMSkKKwlhZGRfZGVmaW5pdGlvbnMoLURfV0lOMzJfV0lOTlQ9
MHgwNjAxKQorCisJaWYgKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiR05VIikKKwkJbWVz
c2FnZShTVEFUVVMgIk1TWVMgLyBNSU5HVyArIEdDQyIpCisJCXNldChDTUFLRV9DX0ZMQUdTICIk
e0NNQUtFX0NfRkxBR1N9IC1Xbm8tZm9ybWF0IikKKwllbmRpZiAoKQorZW5kaWYgKCkKKworCisj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1JU0MK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZmlu
ZF9wYWNrYWdlKFRocmVhZHMpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIworIyBQUk9HUkFNUworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitsaXN0KEFQUEVORCBjaGVja19wcm9ncmFtcworCWNo
YXJnZW5fc2VydmVyX3VwY2FsbC5jCisJY2xpZW50LmMKKwljbGllbnRfdXBjYWxsLmMKKwlkYXl0
aW1lX3NlcnZlci5jCisJZGF5dGltZV9zZXJ2ZXJfdXBjYWxsLmMKKwlkaXNjYXJkX3NlcnZlci5j
CisJZGlzY2FyZF9zZXJ2ZXJfdXBjYWxsLmMKKwllY2hvX3NlcnZlci5jCisJZWNob19zZXJ2ZXJf
dXBjYWxsLmMKKwlla3JfY2xpZW50LmMKKwlla3JfbG9vcC5jCisJZWtyX2xvb3BfdXBjYWxsLmMK
Kwlla3JfcGVlci5jCisJZWtyX3NlcnZlci5jCisJaHR0cF9jbGllbnQuYworCWh0dHBfY2xpZW50
X3VwY2FsbC5jCisJcnRjd2ViLmMKKwlzdF9jbGllbnQuYworCXRlc3RfbGlibWdtdC5jCisJdGVz
dF90aW1lci5jCisJdHNjdHAuYworCXRzY3RwX3VwY2FsbC5jCispCisKK2ZvcmVhY2ggKHNvdXJj
ZV9maWxlICR7Y2hlY2tfcHJvZ3JhbXN9KQorCWdldF9maWxlbmFtZV9jb21wb25lbnQoc291cmNl
X2ZpbGVfd2UgJHtzb3VyY2VfZmlsZX0gTkFNRV9XRSkKKwlhZGRfZXhlY3V0YWJsZSgKKwkJJHtz
b3VyY2VfZmlsZV93ZX0KKwkJJHtzb3VyY2VfZmlsZX0KKwkJcHJvZ3JhbXNfaGVscGVyLmMKKwkp
CisKKwl0YXJnZXRfbGlua19saWJyYXJpZXMoCisJCSR7c291cmNlX2ZpbGVfd2V9CisJCSJ1c3Jz
Y3RwIgorCQkke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9CisJKQorZW5kZm9yZWFjaCAoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvTWFrZWZpbGUuYW0gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFt
cy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTUwMWI1ZmQ4OTk3MThmMWEzMDIzNzM4NzYzMDYx
OTIxMTM4N2UyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvTWFrZWZpbGUu
YW0KQEAgLTAsMCArMSwxMjIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTWljaGFl
bCBUdWV4ZW4KKyMKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFt
ZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyMgICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KKyMKKworQU1fQ1BQRkxBR1Mg
PSAtSSQoc3JjZGlyKS8uLi91c3JzY3RwbGliCitFWFRSQV9ESVNUID0gXAorICAgIE1ha2VmaWxl
Lm5tYWtlIFwKKyAgICB0ZXN0X2xpYm1nbXQuYyBcCisgICAgdGVzdF90aW1lci5jIFwKKyAgICB0
c2N0cC5jIFwKKyAgICBjaGFyZ2VuX3NlcnZlcl91cGNhbGwuYyBcCisgICAgZGF5dGltZV9zZXJ2
ZXIuYyBcCisgICAgZGF5dGltZV9zZXJ2ZXJfdXBjYWxsLmMgXAorICAgIGRpc2NhcmRfc2VydmVy
LmMgXAorICAgIGRpc2NhcmRfc2VydmVyX3VwY2FsbC5jIFwKKyAgICBlY2hvX3NlcnZlci5jIFwK
KyAgICBlY2hvX3NlcnZlcl91cGNhbGwuYyBcCisgICAgY2xpZW50LmMgXAorICAgIGNsaWVudF91
cGNhbGwuYyBcCisgICAgcnRjd2ViLmMgXAorICAgIGVrcl9jbGllbnQuYyBcCisgICAgZWtyX3Nl
cnZlci5jIFwKKyAgICBla3JfbG9vcC5jIFwKKyAgICBla3JfbG9vcF91cGNhbGwuYyBcCisgICAg
ZWtyX3BlZXIuYyBcCisgICAgdGVzdF9saWJtZ210LmMgXAorICAgIGh0dHBfY2xpZW50LmMgXAor
ICAgIGh0dHBfY2xpZW50X3VwY2FsbC5jIFwKKyAgICBzdF9jbGllbnQuYworCitub2luc3RfUFJP
R1JBTVMgPSBcCisgICAgdGVzdF9saWJtZ210IFwKKyAgICB0ZXN0X3RpbWVyIFwKKyAgICB0c2N0
cCBcCisgICAgY2hhcmdlbl9zZXJ2ZXJfdXBjYWxsIFwKKyAgICBkYXl0aW1lX3NlcnZlciBcCisg
ICAgZGF5dGltZV9zZXJ2ZXJfdXBjYWxsIFwKKyAgICBkaXNjYXJkX3NlcnZlciBcCisgICAgZGlz
Y2FyZF9zZXJ2ZXJfdXBjYWxsIFwKKyAgICBlY2hvX3NlcnZlciBcCisgICAgZWNob19zZXJ2ZXJf
dXBjYWxsIFwKKyAgICBjbGllbnQgXAorICAgIGNsaWVudF91cGNhbGwgXAorICAgIHJ0Y3dlYiBc
CisgICAgZWtyX2NsaWVudCBcCisgICAgZWtyX3NlcnZlciBcCisgICAgZWtyX2xvb3AgXAorICAg
IGVrcl9sb29wX3VwY2FsbCBcCisgICAgZWtyX3BlZXIgXAorICAgIHRlc3RfbGlibWdtdCBcCisg
ICAgaHR0cF9jbGllbnQgXAorICAgIGh0dHBfY2xpZW50X3VwY2FsbCBcCisgICAgc3RfY2xpZW50
CisKK3Rlc3RfbGlibWdtdF9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgdGVzdF9saWJtZ210
LmMKK3Rlc3RfbGlibWdtdF9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQordGVz
dF90aW1lcl9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgdGVzdF90aW1lci5jCit0ZXN0X3Rp
bWVyX0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCit0c2N0cF9TT1VSQ0VTID0g
cHJvZ3JhbXNfaGVscGVyLmMgdHNjdHAuYwordHNjdHBfTERBREQgPSAuLi91c3JzY3RwbGliL2xp
YnVzcnNjdHAubGEKK2NoYXJnZW5fc2VydmVyX3VwY2FsbF9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVs
cGVyLmMgY2hhcmdlbl9zZXJ2ZXJfdXBjYWxsLmMKK2NoYXJnZW5fc2VydmVyX3VwY2FsbF9MREFE
RCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQorZGF5dGltZV9zZXJ2ZXJfU09VUkNFUyA9
IHByb2dyYW1zX2hlbHBlci5jIGRheXRpbWVfc2VydmVyLmMKK2RheXRpbWVfc2VydmVyX0xEQURE
ID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCitkYXl0aW1lX3NlcnZlcl91cGNhbGxfU09V
UkNFUyA9IHByb2dyYW1zX2hlbHBlci5jIGRheXRpbWVfc2VydmVyX3VwY2FsbC5jCitkYXl0aW1l
X3NlcnZlcl91cGNhbGxfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK2Rpc2Nh
cmRfc2VydmVyX1NPVVJDRVMgPSBwcm9ncmFtc19oZWxwZXIuYyBkaXNjYXJkX3NlcnZlci5jCitk
aXNjYXJkX3NlcnZlcl9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQorZGlzY2Fy
ZF9zZXJ2ZXJfdXBjYWxsX1NPVVJDRVMgPSBwcm9ncmFtc19oZWxwZXIuYyBkaXNjYXJkX3NlcnZl
cl91cGNhbGwuYworZGlzY2FyZF9zZXJ2ZXJfdXBjYWxsX0xEQUREID0gLi4vdXNyc2N0cGxpYi9s
aWJ1c3JzY3RwLmxhCitlY2hvX3NlcnZlcl9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgZWNo
b19zZXJ2ZXIuYworZWNob19zZXJ2ZXJfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAu
bGEKK2VjaG9fc2VydmVyX3VwY2FsbF9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgZWNob19z
ZXJ2ZXJfdXBjYWxsLmMKK2VjaG9fc2VydmVyX3VwY2FsbF9MREFERCA9IC4uL3VzcnNjdHBsaWIv
bGlidXNyc2N0cC5sYQorY2xpZW50X1NPVVJDRVMgPSBwcm9ncmFtc19oZWxwZXIuYyBjbGllbnQu
YworY2xpZW50X0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCitjbGllbnRfdXBj
YWxsX1NPVVJDRVMgPSBwcm9ncmFtc19oZWxwZXIuYyBjbGllbnRfdXBjYWxsLmMKK2NsaWVudF91
cGNhbGxfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK3J0Y3dlYl9TT1VSQ0VT
ID0gcHJvZ3JhbXNfaGVscGVyLmMgcnRjd2ViLmMKK3J0Y3dlYl9MREFERCA9IC4uL3VzcnNjdHBs
aWIvbGlidXNyc2N0cC5sYQorZWtyX3NlcnZlcl9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMg
ZWtyX3NlcnZlci5jCitla3Jfc2VydmVyX0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3Rw
LmxhCitla3JfY2xpZW50X1NPVVJDRVMgPSBwcm9ncmFtc19oZWxwZXIuYyBla3JfY2xpZW50LmMK
K2Vrcl9jbGllbnRfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK2Vrcl9wZWVy
X1NPVVJDRVMgPSBwcm9ncmFtc19oZWxwZXIuYyBla3JfcGVlci5jCitla3JfcGVlcl9MREFERCA9
IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQorZWtyX2xvb3BfU09VUkNFUyA9IHByb2dyYW1z
X2hlbHBlci5jIGVrcl9sb29wLmMKK2Vrcl9sb29wX0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1
c3JzY3RwLmxhCitla3JfbG9vcF91cGNhbGxfU09VUkNFUyA9IHByb2dyYW1zX2hlbHBlci5jIGVr
cl9sb29wX3VwY2FsbC5jCitla3JfbG9vcF91cGNhbGxfTERBREQgPSAuLi91c3JzY3RwbGliL2xp
YnVzcnNjdHAubGEKK2h0dHBfY2xpZW50X1NPVVJDRVMgPSBwcm9ncmFtc19oZWxwZXIuYyBodHRw
X2NsaWVudC5jCitodHRwX2NsaWVudF9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5s
YQoraHR0cF9jbGllbnRfdXBjYWxsX1NPVVJDRVMgPSBwcm9ncmFtc19oZWxwZXIuYyBodHRwX2Ns
aWVudF91cGNhbGwuYworaHR0cF9jbGllbnRfdXBjYWxsX0xEQUREID0gLi4vdXNyc2N0cGxpYi9s
aWJ1c3JzY3RwLmxhCitzdF9jbGllbnRfU09VUkNFUyA9IHByb2dyYW1zX2hlbHBlci5jIHN0X2Ns
aWVudC5jCitzdF9jbGllbnRfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL01ha2VmaWxlLm5tYWtlIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJv
Z3JhbXMvTWFrZWZpbGUubm1ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWFjZmM3NGU1ZmM5MzBjZWQ0ZGI2NzQ5
ZDViYWFiY2RiMmIyMWRkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL01h
a2VmaWxlLm5tYWtlCkBAIC0wLDAgKzEsMTc5IEBACisjDQorIyBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxMiBNaWNoYWVsIFR1ZXhlbg0KKyMNCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorIw0KKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0DQorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCisjIGFyZSBtZXQ6DQorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLg0KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQNCisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
DQorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycw0KKyMgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQorIyAgICB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisjDQorIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORA0KKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFDQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyMgQVJFIERJU0NMQUlNRUQuCUlO
IE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisj
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMDQorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUw0KKyMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQor
IyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVA0KKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQ0KKyMgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
Rg0KKyMgU1VDSCBEQU1BR0UuDQorIw0KKw0KK0NGTEFHUz0vVzMgL1dYIC9JLi5cdXNyc2N0cGxp
Yg0KKw0KK0NWQVJTRExMPS1ESU5FVCAtRElORVQ2DQorDQorTElOS0ZMQUdTPS9MSUJQQVRIOi4u
XHVzcnNjdHBsaWIgdXNyc2N0cC5saWINCisNCisuYy5vYmo6Og0KKwkkKENDKSAkKENWQVJTRExM
KSAkKENGTEFHUykgLUZkLlwgLWMgJDwNCisNCithbGw6IFwNCisJcHJvZ3JhbXNfaGVscGVyLm9i
aiBcDQorCWNsaWVudCBcDQorCWNsaWVudF91cGNhbGwgXA0KKwlkYXl0aW1lX3NlcnZlciBcDQor
CWRheXRpbWVfc2VydmVyX3VwY2FsbCBcDQorCWRpc2NhcmRfc2VydmVyIFwNCisJZGlzY2FyZF9z
ZXJ2ZXJfdXBjYWxsIFwNCisJZWNob19zZXJ2ZXIgXA0KKwllY2hvX3NlcnZlcl91cGNhbGwgXA0K
Kwl0c2N0cCBcDQorCXJ0Y3dlYiBcDQorCWVrcl9jbGllbnQgXA0KKwlla3Jfc2VydmVyIFwNCisJ
ZWtyX3BlZXIgXA0KKwlla3JfbG9vcCBcDQorCWVrcl9sb29wX3VwY2FsbCBcDQorCXRlc3RfbGli
bWdtdCBcDQorCWh0dHBfY2xpZW50IFwNCisJaHR0cF9jbGllbnRfdXBjYWxsIFwNCisJc3RfY2xp
ZW50DQorCQ0KK3Byb2dyYW1zX2hlbHBlci5vYmogOiBwcm9ncmFtc19oZWxwZXIuYyBwcm9ncmFt
c19oZWxwZXIuaA0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgcHJvZ3JhbXNfaGVscGVy
LmMNCisNCitjbGllbnQ6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBjbGllbnQu
Yw0KKwlsaW5rIC1vdXQ6Y2xpZW50LmV4ZSBjbGllbnQub2JqIHByb2dyYW1zX2hlbHBlci5vYmog
JChMSU5LRkxBR1MpDQorDQorY2xpZW50X3VwY2FsbDoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZB
UlNETEwpIC1jIGNsaWVudF91cGNhbGwuYw0KKwlsaW5rIC1vdXQ6Y2xpZW50X3VwY2FsbC5leGUg
Y2xpZW50X3VwY2FsbC5vYmogcHJvZ3JhbXNfaGVscGVyLm9iaiAkKExJTktGTEFHUykNCisNCitk
YXl0aW1lX3NlcnZlcjoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGRheXRpbWVf
c2VydmVyLmMNCisJbGluayAtb3V0OmRheXRpbWVfc2VydmVyLmV4ZSBkYXl0aW1lX3NlcnZlci5v
YmogcHJvZ3JhbXNfaGVscGVyLm9iaiAkKExJTktGTEFHUykNCisNCitkYXl0aW1lX3NlcnZlcl91
cGNhbGw6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBkYXl0aW1lX3NlcnZlcl91
cGNhbGwuYw0KKwlsaW5rIC1vdXQ6ZGF5dGltZV9zZXJ2ZXJfdXBjYWxsLmV4ZSBkYXl0aW1lX3Nl
cnZlcl91cGNhbGwub2JqIHByb2dyYW1zX2hlbHBlci5vYmogJChMSU5LRkxBR1MpDQorDQorZGlz
Y2FyZF9zZXJ2ZXI6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBkaXNjYXJkX3Nl
cnZlci5jDQorCWxpbmsgLW91dDpkaXNjYXJkX3NlcnZlci5leGUgZGlzY2FyZF9zZXJ2ZXIub2Jq
IHByb2dyYW1zX2hlbHBlci5vYmogJChMSU5LRkxBR1MpDQorDQorZGlzY2FyZF9zZXJ2ZXJfdXBj
YWxsOg0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZGlzY2FyZF9zZXJ2ZXJfdXBj
YWxsLmMNCisJbGluayAtb3V0OmRpc2NhcmRfc2VydmVyX3VwY2FsbC5leGUgZGlzY2FyZF9zZXJ2
ZXJfdXBjYWxsLm9iaiBwcm9ncmFtc19oZWxwZXIub2JqICQoTElOS0ZMQUdTKQ0KKw0KK2VjaG9f
c2VydmVyOg0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZWNob19zZXJ2ZXIuYw0K
KwlsaW5rIC1vdXQ6ZWNob19zZXJ2ZXIuZXhlIGVjaG9fc2VydmVyLm9iaiBwcm9ncmFtc19oZWxw
ZXIub2JqICQoTElOS0ZMQUdTKQ0KKw0KK2VjaG9fc2VydmVyX3VwY2FsbDoNCisJJChDQykgJChD
RkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVjaG9fc2VydmVyX3VwY2FsbC5jDQorCWxpbmsgLW91dDpl
Y2hvX3NlcnZlcl91cGNhbGwuZXhlIGVjaG9fc2VydmVyX3VwY2FsbC5vYmogcHJvZ3JhbXNfaGVs
cGVyLm9iaiAkKExJTktGTEFHUykNCisNCit0c2N0cDoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZB
UlNETEwpIC1jIHRzY3RwLmMNCisJbGluayAtb3V0OnRzY3RwLmV4ZSB0c2N0cC5vYmogcHJvZ3Jh
bXNfaGVscGVyLm9iaiAkKExJTktGTEFHUykNCisNCitydGN3ZWI6DQorCSQoQ0MpICQoQ0ZMQUdT
KSAkKENWQVJTRExMKSAtYyBydGN3ZWIuYw0KKwlsaW5rIC1vdXQ6cnRjd2ViLmV4ZSBydGN3ZWIu
b2JqIHByb2dyYW1zX2hlbHBlci5vYmogJChMSU5LRkxBR1MpDQorDQorZWtyX2NsaWVudDoNCisJ
JChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVrcl9jbGllbnQuYw0KKwlsaW5rIC1vdXQ6
ZWtyX2NsaWVudC5leGUgZWtyX2NsaWVudC5vYmogcHJvZ3JhbXNfaGVscGVyLm9iaiAkKExJTktG
TEFHUykNCisNCitla3Jfc2VydmVyOg0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMg
ZWtyX3NlcnZlci5jDQorCWxpbmsgLW91dDpla3Jfc2VydmVyLmV4ZSBla3Jfc2VydmVyLm9iaiBw
cm9ncmFtc19oZWxwZXIub2JqICQoTElOS0ZMQUdTKQ0KKw0KK2Vrcl9wZWVyOg0KKwkkKENDKSAk
KENGTEFHUykgJChDVkFSU0RMTCkgLWMgZWtyX3BlZXIuYw0KKwlsaW5rIC1vdXQ6ZWtyX3BlZXIu
ZXhlIGVrcl9wZWVyLm9iaiBwcm9ncmFtc19oZWxwZXIub2JqICQoTElOS0ZMQUdTKQ0KKw0KK2Vr
cl9sb29wOg0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZWtyX2xvb3AuYw0KKwls
aW5rIC1vdXQ6ZWtyX2xvb3AuZXhlIGVrcl9sb29wLm9iaiBwcm9ncmFtc19oZWxwZXIub2JqICQo
TElOS0ZMQUdTKQ0KKw0KK2Vrcl9sb29wX3VwY2FsbDoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZB
UlNETEwpIC1jIGVrcl9sb29wX3VwY2FsbC5jDQorCWxpbmsgLW91dDpla3JfbG9vcF91cGNhbGwu
ZXhlIGVrcl9sb29wX3VwY2FsbC5vYmogcHJvZ3JhbXNfaGVscGVyLm9iaiAkKExJTktGTEFHUykN
CisNCit0ZXN0X2xpYm1nbXQ6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyB0ZXN0
X2xpYm1nbXQuYw0KKwlsaW5rIC1vdXQ6dGVzdF9saWJtZ210LmV4ZSB0ZXN0X2xpYm1nbXQub2Jq
IHByb2dyYW1zX2hlbHBlci5vYmogJChMSU5LRkxBR1MpDQorDQoraHR0cF9jbGllbnQ6DQorCSQo
Q0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBodHRwX2NsaWVudC5jDQorCWxpbmsgLW91dDpo
dHRwX2NsaWVudC5leGUgaHR0cF9jbGllbnQub2JqIHByb2dyYW1zX2hlbHBlci5vYmogJChMSU5L
RkxBR1MpDQorDQoraHR0cF9jbGllbnRfdXBjYWxsOg0KKwkkKENDKSAkKENGTEFHUykgJChDVkFS
U0RMTCkgLWMgaHR0cF9jbGllbnRfdXBjYWxsLmMNCisJbGluayAtb3V0Omh0dHBfY2xpZW50X3Vw
Y2FsbC5leGUgaHR0cF9jbGllbnRfdXBjYWxsLm9iaiBwcm9ncmFtc19oZWxwZXIub2JqICQoTElO
S0ZMQUdTKQ0KKw0KK3N0X2NsaWVudDoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1j
IHN0X2NsaWVudC5jDQorCWxpbmsgLW91dDpzdF9jbGllbnQuZXhlIHN0X2NsaWVudC5vYmogcHJv
Z3JhbXNfaGVscGVyLm9iaiAkKExJTktGTEFHUykNCisNCitjbGVhbjoNCisJZGVsIC9GIGNsaWVu
dC5leGUNCisJZGVsIC9GIGNsaWVudC5vYmoNCisJZGVsIC9GIGNsaWVudF91cGNhbGwuZXhlDQor
CWRlbCAvRiBjbGllbnRfdXBjYWxsLm9iag0KKwlkZWwgL0YgZGF5dGltZV9zZXJ2ZXIuZXhlDQor
CWRlbCAvRiBkYXl0aW1lX3NlcnZlci5vYmoNCisJZGVsIC9GIGRheXRpbWVfc2VydmVyX3VwY2Fs
bC5leGUNCisJZGVsIC9GIGRheXRpbWVfc2VydmVyX3VwY2FsbC5vYmoNCisJZGVsIC9GIGRpc2Nh
cmRfc2VydmVyLmV4ZQ0KKwlkZWwgL0YgZGlzY2FyZF9zZXJ2ZXIub2JqDQorCWRlbCAvRiBkaXNj
YXJkX3NlcnZlcl91cGNhbGwuZXhlDQorCWRlbCAvRiBkaXNjYXJkX3NlcnZlcl91cGNhbGwub2Jq
DQorCWRlbCAvRiBlY2hvX3NlcnZlci5leGUNCisJZGVsIC9GIGVjaG9fc2VydmVyLm9iag0KKwlk
ZWwgL0YgZWNob19zZXJ2ZXJfdXBjYWxsLmV4ZQ0KKwlkZWwgL0YgZWNob19zZXJ2ZXJfdXBjYWxs
Lm9iag0KKwlkZWwgL0YgdHNjdHAuZXhlDQorCWRlbCAvRiB0c2N0cC5vYmoNCisJZGVsIC9GIHJ0
Y3dlYi5leGUNCisJZGVsIC9GIHJ0Y3dlYi5vYmoNCisJZGVsIC9GIGVrcl9jbGllbnQuZXhlDQor
CWRlbCAvRiBla3JfY2xpZW50Lm9iag0KKwlkZWwgL0YgZWtyX3NlcnZlci5leGUNCisJZGVsIC9G
IGVrcl9zZXJ2ZXIub2JqDQorCWRlbCAvRiBla3JfcGVlci5leGUNCisJZGVsIC9GIGVrcl9wZWVy
Lm9iag0KKwlkZWwgL0YgZWtyX2xvb3AuZXhlDQorCWRlbCAvRiBla3JfbG9vcC5vYmoNCisJZGVs
IC9GIGVrcl9sb29wX3VwY2FsbC5leGUNCisJZGVsIC9GIGVrcl9sb29wX3VwY2FsbC5vYmoNCisJ
ZGVsIC9GIHRlc3RfbGlibWdtdC5leGUNCisJZGVsIC9GIHRlc3RfbGlibWdtdC5vYmoNCisJZGVs
IC9GIGh0dHBfY2xpZW50LmV4ZQ0KKwlkZWwgL0YgaHR0cF9jbGllbnQub2JqDQorCWRlbCAvRiBo
dHRwX2NsaWVudF91cGNhbGwuZXhlDQorCWRlbCAvRiBodHRwX2NsaWVudF91cGNhbGwub2JqDQor
CWRlbCAvRiBzdF9jbGllbnQuZXhlDQorCWRlbCAvRiBzdF9jbGllbnQub2JqDQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvcHJvZ3JhbXMvY2hhcmdlbl9zZXJ2ZXJfdXBjYWxsLmMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9w
cm9ncmFtcy9jaGFyZ2VuX3NlcnZlcl91cGNhbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTJkNDA1OTE0NjQz
NDAzYjdjOWVkYWUzZDNiZmVlZWFhMjcwODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
cHJvZ3JhbXMvY2hhcmdlbl9zZXJ2ZXJfdXBjYWxsLmMKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9q
ZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
CisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFVz
YWdlOiBjaGFyZ2VuX3NlcnZlcl91cGNhbGwgW2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2Vu
Y2Fwc19wb3J0XQorICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9f
V0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lz
L3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNp
bmNsdWRlIDx1c3JzY3RwLmg+CisjaW5jbHVkZSAicHJvZ3JhbXNfaGVscGVyLmgiCisKKyNkZWZp
bmUgQlVGRkVSU0laRSAxMDI0MAorI2RlZmluZSBQT1JUIDE5CisKK2NoYXIgYnVmZmVyWzk1XTsK
K2ludCBkb25lID0gMDsKK2ludCBzZW5kX2RvbmUgPSAwOworCitzdGF0aWMgdm9pZAoraW5pdEJ1
ZmZlcih2b2lkKSB7CisJaW50IGksIGo7CisJZm9yIChpID0gMzIsIGogPSAwOyBpIDwgMTI2OyBp
KyssIGorKykgeworCQlidWZmZXJbal0gPSBpOworCX0KK30KKwordW5zaWduZWQgaW50IHNpZ25D
b3VudGVyID0gMDsKK3N0YXRpYyB2b2lkCitoYW5kbGVfdXBjYWxsKHN0cnVjdCBzb2NrZXQgKnVw
Y2FsbF9zb2NrZXQsIHZvaWQgKnVwY2FsbF9kYXRhLCBpbnQgdXBjYWxsX2ZsYWdzKTsKKworc3Rh
dGljIHZvaWQKK2hhbmRsZV9hY2NlcHQoc3RydWN0IHNvY2tldCAqdXBjYWxsX3NvY2tldCwgdm9p
ZCAqdXBjYWxsX2RhdGEsIGludCB1cGNhbGxfZmxhZ3MpCit7CisJc3RydWN0IHNvY2tldCAqY29u
bl9zb2NrOworCisJaWYgKCgoY29ubl9zb2NrID0gdXNyc2N0cF9hY2NlcHQodXBjYWxsX3NvY2tl
dCwgTlVMTCwgTlVMTCkpID09IE5VTEwpCisJICAgICYmIChlcnJubyAhPSBFSU5QUk9HUkVTUykp
IHsKKwkJcGVycm9yKCJ1c3JzY3RwX2FjY2VwdCIpOworCQlyZXR1cm47CisJfQorCWRvbmUgPSAw
OworCXByaW50ZigiY29ubmVjdGlvbiBhY2NlcHRlZCBmcm9tIHNvY2tldCAlcFxuIiwgKHZvaWQg
Kiljb25uX3NvY2spOworCXVzcnNjdHBfc2V0X3VwY2FsbChjb25uX3NvY2ssIGhhbmRsZV91cGNh
bGwsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3VwY2FsbChzdHJ1Y3Qgc29ja2V0
ICp1cGNhbGxfc29ja2V0LCB2b2lkICp1cGNhbGxfZGF0YSwgaW50IHVwY2FsbF9mbGFncykKK3sK
KwlpbnQgZXZlbnRzID0gdXNyc2N0cF9nZXRfZXZlbnRzKHVwY2FsbF9zb2NrZXQpOworCisJaWYg
KGV2ZW50cyAmIFNDVFBfRVZFTlRfUkVBRCAmJiAhc2VuZF9kb25lKSB7CisJCWNoYXIgKmJ1ZjsK
KwkJc3RydWN0IHNjdHBfcmVjdnZfcm4gcm47CisJCXNzaXplX3QgbjsKKwkJc3RydWN0IHNvY2th
ZGRyX3N0b3JhZ2UgYWRkcjsKKwkJYnVmID0gbWFsbG9jKEJVRkZFUlNJWkUpOworCQlpbnQgcmVj
dl9mbGFncyA9IDA7CisJCXNvY2tsZW5fdCBsZW4gPSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfc3RvcmFnZSk7CisJCXVuc2lnbmVkIGludCBpbmZvdHlwZSA9IDA7CisJCXNvY2ts
ZW5fdCBpbmZvbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3JuKTsKKwkJbWVtc2V0KCZy
biwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3JuKSk7CisKKwkJbiA9IHVzcnNjdHBfcmVj
dnYodXBjYWxsX3NvY2tldCwgYnVmLCBCVUZGRVJTSVpFLCAoc3RydWN0IHNvY2thZGRyICopICZh
ZGRyLCAmbGVuLCAodm9pZCAqKSZybiwKKwkJCQkgJmluZm9sZW4sICZpbmZvdHlwZSwgJnJlY3Zf
ZmxhZ3MpOworCQlpZiAobiA8IDApIHsKKwkJCXBlcnJvcigidXNyc2N0cF9yZWN2diIpOworCQkJ
ZG9uZSA9IDE7CisJCQl1c3JzY3RwX2Nsb3NlKHVwY2FsbF9zb2NrZXQpOworCQkJcHJpbnRmKCJj
bGllbnQgc29ja2V0ICVwIGNsb3NlZFxuIiwgKHZvaWQgKil1cGNhbGxfc29ja2V0KTsKKwkJCXVw
Y2FsbF9zb2NrZXQgPSBOVUxMOworCQkJcmV0dXJuOworCQl9CisJCWlmIChuID09IDApIHsKKwkJ
CWRvbmUgPSAxOworCQkJdXNyc2N0cF9jbG9zZSh1cGNhbGxfc29ja2V0KTsKKwkJCXByaW50Zigi
Y2xpZW50IHNvY2tldCAlcCBjbG9zZWRcbiIsICh2b2lkICopdXBjYWxsX3NvY2tldCk7CisJCQl1
cGNhbGxfc29ja2V0ID0gTlVMTDsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAobiA+IDApIHsKKwkJ
CWlmIChyZWN2X2ZsYWdzICYgTVNHX05PVElGSUNBVElPTikgeworCQkJCXByaW50ZigiTm90aWZp
Y2F0aW9uIG9mIGxlbmd0aCAlZCByZWNlaXZlZC5cbiIsIChpbnQpbik7CisJCQl9IGVsc2Ugewor
CQkJCXByaW50ZigiZGF0YSBvZiBzaXplICVkIHJlY2VpdmVkXG4iLCAoaW50KW4pOworCQkJfQor
CQl9CisJCWZyZWUoYnVmKTsKKwl9CisKKwlpZiAoKGV2ZW50cyAmIFNDVFBfRVZFTlRfV1JJVEUp
ICYmICFkb25lKSB7CisJCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kX2luZm87CisJCXNuZF9pbmZv
LnNuZF9zaWQgPSAwOworCQlzbmRfaW5mby5zbmRfZmxhZ3MgPSAwOworCQlzbmRfaW5mby5zbmRf
cHBpZCA9IDA7CisJCXNuZF9pbmZvLnNuZF9jb250ZXh0ID0gMDsKKwkJc25kX2luZm8uc25kX2Fz
c29jX2lkID0gMDsKKwkJaWYgKHVzcnNjdHBfc2VuZHYodXBjYWxsX3NvY2tldCwgYnVmZmVyLCBz
dHJsZW4oYnVmZmVyKSwgTlVMTCwgMCwgJnNuZF9pbmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1
Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZPLCAwKSA8IDApIHsKKwkJCWlmIChl
cnJubyAhPSBFQUdBSU4gJiYgZXJybm8gIT0gRVdPVUxEQkxPQ0spIHsKKwkJCQlzZW5kX2RvbmUg
PSAxOworCQkJCXVzcnNjdHBfY2xvc2UodXBjYWxsX3NvY2tldCk7CisJCQkJcHJpbnRmKCJjbGll
bnQgc29ja2V0ICVwIGNsb3NlZFxuIiwgKHZvaWQgKil1cGNhbGxfc29ja2V0KTsKKwkJCQlyZXR1
cm47CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywg
Y2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrZXQgKmxpc3RlbmluZ19zb2NrZXQ7CisJc3Ry
dWN0IHNvY2thZGRyX2luNiBhZGRyOworCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyBlbmNhcHM7CisJ
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgYXY7CisJY29uc3QgaW50IG9uID0gMTsKKworCWlmIChh
cmdjID4gMSkgeworCQl1c3JzY3RwX2luaXQoYXRvaShhcmd2WzFdKSwgTlVMTCwgZGVidWdfcHJp
bnRmX3N0YWNrKTsKKwl9IGVsc2UgeworCQl1c3JzY3RwX2luaXQoOTg5OSwgTlVMTCwgZGVidWdf
cHJpbnRmX3N0YWNrKTsKKwl9CisjaWZkZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3Nl
dF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9ORSk7CisjZW5kaWYKKwl1c3JzY3RwX3N5c2N0
bF9zZXRfc2N0cF9ibGFja2hvbGUoMik7CisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbm9fY3N1
bV9vbl9sb29wYmFjaygwKTsKKworCWlmICgobGlzdGVuaW5nX3NvY2tldCA9IHVzcnNjdHBfc29j
a2V0KEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBOVUxMLCBOVUxMLCAwLCBO
VUxMKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJfQorCXVzcnNj
dHBfc2V0X25vbl9ibG9ja2luZyhsaXN0ZW5pbmdfc29ja2V0LCAxKTsKKwlpZiAodXNyc2N0cF9z
ZXRzb2Nrb3B0KGxpc3RlbmluZ19zb2NrZXQsIElQUFJPVE9fU0NUUCwgU0NUUF9JX1dBTlRfTUFQ
UEVEX1Y0X0FERFIsIChjb25zdCB2b2lkKikmb24sIChzb2NrbGVuX3Qpc2l6ZW9mKGludCkpIDwg
MCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRf
QUREUiIpOworCX0KKwltZW1zZXQoJmF2LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUpKTsKKwlhdi5hc3NvY19pZCA9IFNDVFBfQUxMX0FTU09DOworCWF2LmFzc29jX3ZhbHVlID0g
NDc7CisKKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KGxpc3RlbmluZ19zb2NrZXQsIElQUFJPVE9f
U0NUUCwgU0NUUF9DT05URVhULCAoY29uc3Qgdm9pZCopJmF2LCAoc29ja2xlbl90KXNpemVvZihz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29j
a29wdCBTQ1RQX0NPTlRFWFQiKTsKKwl9CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChsaXN0ZW5p
bmdfc29ja2V0LCBJUFBST1RPX1NDVFAsIFNDVFBfUkVDVlJDVklORk8sICZvbiwgc2l6ZW9mKGlu
dCkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX1JFQ1ZSQ1ZJTkZP
Iik7CisJfQorCWlmIChhcmdjID4gMikgeworCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3VkcGVuY2FwcykpOworCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0g
QUZfSU5FVDY7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCQlp
ZiAodXNyc2N0cF9zZXRzb2Nrb3B0KGxpc3RlbmluZ19zb2NrZXQsIElQUFJPVE9fU0NUUCwgU0NU
UF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCopJmVuY2FwcywgKHNvY2tsZW5f
dClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNj
dHBfc2V0c29ja29wdCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQiKTsKKwkJfQorCX0KKwor
CWluaXRCdWZmZXIoKTsKKworCW1lbXNldCgodm9pZCAqKSZhZGRyLCAwLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlhZGRyLnNpbjZfbGVuID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJYWRkci5zaW42X2ZhbWlseSA9
IEFGX0lORVQ2OworCWFkZHIuc2luNl9wb3J0ID0gaHRvbnMoUE9SVCk7CisJYWRkci5zaW42X2Fk
ZHIgPSBpbjZhZGRyX2FueTsKKwlpZiAodXNyc2N0cF9iaW5kKGxpc3RlbmluZ19zb2NrZXQsIChz
dHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDAp
IHsKKwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwl9CisJaWYgKHVzcnNjdHBfbGlzdGVuKGxp
c3RlbmluZ19zb2NrZXQsIDEpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJ
fQorCXVzcnNjdHBfc2V0X3VwY2FsbChsaXN0ZW5pbmdfc29ja2V0LCBoYW5kbGVfYWNjZXB0LCBO
VUxMKTsKKworCXdoaWxlICgxKSB7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEqMTAwMCk7Cisj
ZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvcHJvZ3JhbXMvY2xpZW50LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9jbGllbnQu
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44YTE1YTdiZTgyZDNmNDE4NzU1ZWM1N2E0NTU0N2IwMzQ2YjUyZTFiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvY2xpZW50LmMKQEAgLTAsMCArMSwy
OTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9K
RUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8K
KworLyoKKyAqIFVzYWdlOiBjbGllbnQgcmVtb3RlX2FkZHIgcmVtb3RlX3BvcnQgW2xvY2FsX3Bv
cnRdIFtsb2NhbF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9lbmNhcHNfcG9ydF0KKyAqLworCisjaWZk
ZWYgX1dJTjMyCisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisjZW5kaWYKKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor
I2luY2x1ZGUgPHN0ZGFyZy5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDx1bmlzdGQuaD4K
KyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRl
IDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEv
aW5ldC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxpby5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0
cC5oPgorI2luY2x1ZGUgInByb2dyYW1zX2hlbHBlci5oIgorCitpbnQgZG9uZSA9IDA7CisKKyNp
ZmRlZiBfV0lOMzIKK3R5cGVkZWYgY2hhciogY2FkZHJfdDsKKyNlbmRpZgorCisKKworc3RhdGlj
IGludAorcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9y
ZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNj
dHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7CisJaWYgKGRhdGEg
PT0gTlVMTCkgeworCQlkb25lID0gMTsKKwkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwl9IGVsc2Ug
eworCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7CisJCQloYW5kbGVfbm90aWZpY2F0
aW9uKCh1bmlvbiBzY3RwX25vdGlmaWNhdGlvbiAqKWRhdGEsIGRhdGFsZW4pOworCQl9IGVsc2Ug
eworI2lmZGVmIF9XSU4zMgorCQkJX3dyaXRlKF9maWxlbm8oc3Rkb3V0KSwgZGF0YSwgKHVuc2ln
bmVkIGludClkYXRhbGVuKTsKKyNlbHNlCisJCQlpZiAod3JpdGUoZmlsZW5vKHN0ZG91dCksIGRh
dGEsIGRhdGFsZW4pIDwgMCkgeworCQkJCXBlcnJvcigid3JpdGUiKTsKKwkJCX0KKyNlbmRpZgor
CQl9CisJCWZyZWUoZGF0YSk7CisJfQorCXJldHVybiAoMSk7Cit9CisKK2ludAorbWFpbihpbnQg
YXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IHNv
Y2thZGRyICphZGRyLCAqYWRkcnM7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI0OworCXN0cnVj
dCBzb2NrYWRkcl9pbjYgYWRkcjY7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlz
dHJ1Y3Qgc2N0cHN0YXQgc3RhdDsKKwlzdHJ1Y3Qgc2N0cF9ldmVudCBldmVudDsKKwl1aW50MTZf
dCBldmVudF90eXBlc1tdID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgU0NUUF9QRUVSX0FERFJfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVH07CisJY2hhciBidWZmZXJbODBdOworCXVuc2lnbmVk
IGludCBpOworCWludCBuOworCisJaWYgKGFyZ2MgPCAzKSB7CisJCXByaW50ZigiJXMiLCAiVXNh
Z2U6IGNsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBsb2NhbF9wb3J0IGxvY2FsX2VuY2Fw
c19wb3J0IHJlbW90ZV9lbmNhcHNfcG9ydFxuIik7CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAo
YXJnYyA+IDQpIHsKKwkJdXNyc2N0cF9pbml0KGF0b2koYXJndls0XSksIE5VTEwsIGRlYnVnX3By
aW50Zl9zdGFjayk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9pbml0KDk4OTksIE5VTEwsIGRlYnVn
X3ByaW50Zl9zdGFjayk7CisJfQorI2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOworI2VuZGlmCisJdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX25vX2Nz
dW1fb25fbG9vcGJhY2soMCk7CisKKwlpZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVU
NiwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgcmVjZWl2ZV9jYiwgTlVMTCwgMCwgTlVMTCkp
ID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOworCX0KKwltZW1zZXQoJmV2
ZW50LCAwLCBzaXplb2YoZXZlbnQpKTsKKwlldmVudC5zZV9hc3NvY19pZCA9IFNDVFBfQUxMX0FT
U09DOworCWV2ZW50LnNlX29uID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGV2ZW50X3R5
cGVzKS9zaXplb2YodWludDE2X3QpOyBpKyspIHsKKwkJZXZlbnQuc2VfdHlwZSA9IGV2ZW50X3R5
cGVzW2ldOworCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NU
UF9FVkVOVCwgJmV2ZW50LCBzaXplb2YoZXZlbnQpKSA8IDApIHsKKwkJCXBlcnJvcigic2V0c29j
a29wdCBTQ1RQX0VWRU5UIik7CisJCX0KKwl9CisJaWYgKGFyZ2MgPiAzKSB7CisJCW1lbXNldCgo
dm9pZCAqKSZhZGRyNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNpZmRlZiBI
QVZFX1NJTjZfTEVOCisJCWFkZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpOworI2VuZGlmCisJCWFkZHI2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJCWFkZHI2LnNp
bjZfcG9ydCA9IGh0b25zKGF0b2koYXJndlszXSkpOworCQlhZGRyNi5zaW42X2FkZHIgPSBpbjZh
ZGRyX2FueTsKKwkJaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFk
ZHI2LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgeworCQkJcGVycm9yKCJiaW5k
Iik7CisJCX0KKwl9CisJaWYgKGFyZ2MgPiA1KSB7CisJCW1lbXNldCgmZW5jYXBzLCAwLCBzaXpl
b2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7CisJCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1p
bHkgPSBBRl9JTkVUNjsKKwkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzVdKSk7
CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9U
RV9VRFBfRU5DQVBTX1BPUlQsIChjb25zdCB2b2lkKikmZW5jYXBzLCAoc29ja2xlbl90KXNpemVv
ZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKKwkJCXBlcnJvcigic2V0c29ja29wdCIp
OworCQl9CisJfQorCW1lbXNldCgodm9pZCAqKSZhZGRyNCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpOworCW1lbXNldCgodm9pZCAqKSZhZGRyNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpKTsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlhZGRyNC5zaW5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJYWRk
cjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwlhZGRy
NC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlhZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owor
CWFkZHI0LnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7CisJYWRkcjYuc2luNl9wb3J0
ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7CisJaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgYXJndlsx
XSwgJmFkZHI2LnNpbjZfYWRkcikgPT0gMSkgeworCQlpZiAodXNyc2N0cF9jb25uZWN0KHNvY2ss
IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkg
PCAwKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfY29ubmVjdCIpOworCQl9CisJfSBlbHNlIGlmIChp
bmV0X3B0b24oQUZfSU5FVCwgYXJndlsxXSwgJmFkZHI0LnNpbl9hZGRyKSA9PSAxKSB7CisJCWlm
ICh1c3JzY3RwX2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyNCwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3Qi
KTsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ZigiSWxsZWdhbCBkZXN0aW5hdGlvbiBhZGRyZXNz
LlxuIik7CisJfQorCWlmICgobiA9IHVzcnNjdHBfZ2V0bGFkZHJzKHNvY2ssIDAsICZhZGRycykp
IDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfZ2V0bGFkZHJzIik7CisJfSBlbHNlIHsKKwkJYWRk
ciA9IGFkZHJzOworCQlwcmludGYoIkxvY2FsIGFkZHJlc3NlczogIik7CisJCWZvciAoaSA9IDA7
IGkgPCAodW5zaWduZWQgaW50KW47IGkrKykgeworCQkJaWYgKGkgPiAwKSB7CisJCQkJcHJpbnRm
KCIlcyIsICIsICIpOworCQkJfQorCQkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKwkJCWNh
c2UgQUZfSU5FVDoKKwkJCXsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwkJCQljaGFy
IGJ1ZltJTkVUX0FERFJTVFJMRU5dOworCQkJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJCQlzaW4g
PSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lO
RVQsICZzaW4tPnNpbl9hZGRyLCBidWYsIElORVRfQUREUlNUUkxFTik7CisJCQkJcHJpbnRmKCIl
cyIsIG5hbWUpOworI2lmbmRlZiBIQVZFX1NBX0xFTgorCQkJCWFkZHIgPSAoc3RydWN0IHNvY2th
ZGRyICopKChjYWRkcl90KWFkZHIgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjZW5k
aWYKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgQUZfSU5FVDY6CisJCQl7CisJCQkJc3RydWN0
IHNvY2thZGRyX2luNiAqc2luNjsKKwkJCQljaGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsKKwkJ
CQljb25zdCBjaGFyICpuYW1lOworCisJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
YWRkcjsKKwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBi
dWYsIElORVQ2X0FERFJTVFJMRU4pOworCQkJCXByaW50ZigiJXMiLCBuYW1lKTsKKyNpZm5kZWYg
SEFWRV9TQV9MRU4KKwkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRy
ICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNlbmRpZgorCQkJCWJyZWFrOworCQkJ
fQorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJ
YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIGFkZHItPnNhX2xlbik7
CisjZW5kaWYKKwkJfQorCQlwcmludGYoIi5cbiIpOworCQl1c3JzY3RwX2ZyZWVsYWRkcnMoYWRk
cnMpOworCX0KKwlpZiAoKG4gPSB1c3JzY3RwX2dldHBhZGRycyhzb2NrLCAwLCAmYWRkcnMpKSA8
IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2dldHBhZGRycyIpOworCX0gZWxzZSB7CisJCWFkZHIg
PSBhZGRyczsKKwkJcHJpbnRmKCJQZWVyIGFkZHJlc3NlczogIik7CisJCWZvciAoaSA9IDA7IGkg
PCAodW5zaWduZWQgaW50KW47IGkrKykgeworCQkJaWYgKGkgPiAwKSB7CisJCQkJcHJpbnRmKCIl
cyIsICIsICIpOworCQkJfQorCQkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKwkJCWNhc2Ug
QUZfSU5FVDoKKwkJCXsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwkJCQljaGFyIGJ1
ZltJTkVUX0FERFJTVFJMRU5dOworCQkJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJCQlzaW4gPSAo
c3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQs
ICZzaW4tPnNpbl9hZGRyLCBidWYsIElORVRfQUREUlNUUkxFTik7CisJCQkJcHJpbnRmKCIlcyIs
IG5hbWUpOworI2lmbmRlZiBIQVZFX1NBX0xFTgorCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRy
ICopKChjYWRkcl90KWFkZHIgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjZW5kaWYK
KwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgQUZfSU5FVDY6CisJCQl7CisJCQkJc3RydWN0IHNv
Y2thZGRyX2luNiAqc2luNjsKKwkJCQljaGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsKKwkJCQlj
b25zdCBjaGFyICpuYW1lOworCisJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRk
cjsKKwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBidWYs
IElORVQ2X0FERFJTVFJMRU4pOworCQkJCXByaW50ZigiJXMiLCBuYW1lKTsKKyNpZm5kZWYgSEFW
RV9TQV9MRU4KKwkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNlbmRpZgorCQkJCWJyZWFrOworCQkJfQor
CQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJYWRk
ciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIGFkZHItPnNhX2xlbik7Cisj
ZW5kaWYKKwkJfQorCQlwcmludGYoIi5cbiIpOworCQl1c3JzY3RwX2ZyZWVwYWRkcnMoYWRkcnMp
OworCX0KKwl3aGlsZSAoKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKSAhPSBO
VUxMKSAmJiAhZG9uZSkgeworCQl1c3JzY3RwX3NlbmR2KHNvY2ssIGJ1ZmZlciwgc3RybGVuKGJ1
ZmZlciksIE5VTEwsIDAsIE5VTEwsIDAsIFNDVFBfU0VORFZfTk9JTkZPLCAwKTsKKwl9CisJaWYg
KCFkb25lKSB7CisJCWlmICh1c3JzY3RwX3NodXRkb3duKHNvY2ssIFNIVVRfV1IpIDwgMCkgewor
CQkJcGVycm9yKCJ1c3JzY3RwX3NodXRkb3duIik7CisJCX0KKwl9CisJd2hpbGUgKCFkb25lKSB7
CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEgKiAxMDAwKTsKKyNlbHNlCisJCXNsZWVwKDEpOwor
I2VuZGlmCisJfQorCXVzcnNjdHBfZ2V0X3N0YXQoJnN0YXQpOworCXByaW50ZigiTnVtYmVyIG9m
IHBhY2tldHMgKHNlbnQvcmVjZWl2ZWQpOiAoJXUvJXUpLlxuIiwKKwkgICAgICAgc3RhdC5zY3Rw
c19vdXRwYWNrZXRzLCBzdGF0LnNjdHBzX2lucGFja2V0cyk7CisJd2hpbGUgKHVzcnNjdHBfZmlu
aXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcCgxICogMTAwMCk7CisjZWxzZQor
CQlzbGVlcCgxKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4oMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9wcm9ncmFtcy9jbGllbnRfdXBjYWxsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9jbGllbnRf
dXBjYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTI5ZDhmYTIyNDM3MzdjMzNhOTUzZTZlMDcyZTljNDMyZTFm
YWEwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2NsaWVudF91cGNhbGwu
YwpAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hh
ZWwgVHVleGVuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNI
IERBTUFHRS4KKyAqLworCisvKgorICogVXNhZ2U6IGNsaWVudF91cGNhbGwgcmVtb3RlX2FkZHIg
cmVtb3RlX3BvcnQgW2xvY2FsX3BvcnRdIFtsb2NhbF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9lbmNh
cHNfcG9ydF0KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2lmICFkZWZpbmVk
KF9XSU4zMikKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2Vu
ZGlmIC8qICFkZWZpbmVkKF9XSU4zMikgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisj
aWYgIWRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZWxzZSAvKiAhZGVmaW5lZChf
V0lOMzIpICovCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8dXNyc2N0cC5o
PgorI2luY2x1ZGUgInByb2dyYW1zX2hlbHBlci5oIgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNk
ZWZpbmUgQlVGRkVSU0laRSAgICAgICAgICAgICAgICAgKDE8PDE2KQorCitpbnQgZG9uZSA9IDAs
IGlucHV0X2RvbmUgPSAwLCBjb25uZWN0ZWQgPSAwOworCisjaWZkZWYgX1dJTjMyCit0eXBlZGVm
IGNoYXIqIGNhZGRyX3Q7CisjZW5kaWYKKworaW50IGlucHV0QXZhaWxhYmxlKHZvaWQpCit7CisJ
c3RydWN0IHRpbWV2YWwgdHY7CisJZmRfc2V0IGZkczsKKwl0di50dl9zZWMgPSAwOworCXR2LnR2
X3VzZWMgPSAwOworCUZEX1pFUk8oJmZkcyk7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZp
bmVkKF9fTUlOR1czMl9fKQorCUZEX1NFVCgoU09DS0VUKV9maWxlbm8oc3RkaW4pLCAmZmRzKTsK
KyAgCXNlbGVjdChfZmlsZW5vKHN0ZGluKSArIDEsICZmZHMsIE5VTEwsIE5VTEwsICZ0dik7Cisj
ZWxzZQorCUZEX1NFVChTVERJTl9GSUxFTk8sICZmZHMpOworCXNlbGVjdChTVERJTl9GSUxFTk8r
MSwgJmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKKyNlbmRpZgorICByZXR1cm4gKEZEX0lTU0VUKDAs
ICZmZHMpKTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV91cGNhbGwoc3RydWN0IHNvY2tldCAq
c29jaywgdm9pZCAqYXJnLCBpbnQgZmxncykKK3sKKwlpbnQgZXZlbnRzID0gdXNyc2N0cF9nZXRf
ZXZlbnRzKHNvY2spOworCisJaWYgKGV2ZW50cyAmIFNDVFBfRVZFTlRfV1JJVEUgJiYgIWRvbmUg
JiYgIWNvbm5lY3RlZCkgeworCQljb25uZWN0ZWQgPSAxOworCQlwcmludGYoInNvY2tldCBjb25u
ZWN0ZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJd2hpbGUgKGV2ZW50cyAmIFNDVFBfRVZFTlRf
UkVBRCAmJiAhZG9uZSAmJiBjb25uZWN0ZWQpIHsKKwkJc3RydWN0IHNjdHBfcmVjdnZfcm4gcm47
CisJCXNzaXplX3QgbjsKKwkJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJCWNoYXIgKmJ1ZiA9
IGNhbGxvYygxLCBCVUZGRVJTSVpFKTsKKwkJaW50IGZsYWdzID0gMDsKKwkJc29ja2xlbl90IGxl
biA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCXVuc2lnbmVkIGlu
dCBpbmZvdHlwZSA9IDA7CisJCXNvY2tsZW5fdCBpbmZvbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X3JlY3Z2X3JuKTsKKwkJbWVtc2V0KCZybiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3Ju
KSk7CisJCW4gPSB1c3JzY3RwX3JlY3Z2KHNvY2ssIGJ1ZiwgQlVGRkVSU0laRSwgKHN0cnVjdCBz
b2NrYWRkciAqKSAmYWRkciwgJmxlbiwgKHZvaWQgKikmcm4sCisJCQkJCSAmaW5mb2xlbiwgJmlu
Zm90eXBlLCAmZmxhZ3MpOworCisJCWlmIChuID4gMCkgeworI2lmZGVmIF9XSU4zMgorCQkJX3dy
aXRlKF9maWxlbm8oc3Rkb3V0KSwgYnVmLCAodW5zaWduZWQgaW50KW4pOworI2Vsc2UKKwkJCWlm
ICh3cml0ZShmaWxlbm8oc3Rkb3V0KSwgYnVmLCBuKSA8IDApIHsKKwkJCQlwZXJyb3IoIndyaXRl
Iik7CisJCQl9CisjZW5kaWYKKwkJfSBlbHNlIGlmIChuID09IDApIHsKKwkJCWRvbmUgPSAxOwor
CQkJaW5wdXRfZG9uZSA9IDE7CisJCQlmcmVlKGJ1Zik7CisJCQlicmVhazsKKwkJfSBlbHNlIHsK
KwkJCXBlcnJvcigiXG51c3JzY3RwX3JlY3Z2Iik7CisJCQlmcmVlIChidWYpOworCQkJYnJlYWs7
CisJCX0KKwkJZnJlZShidWYpOworCQlldmVudHMgPSB1c3JzY3RwX2dldF9ldmVudHMoc29jayk7
CisJfQorCXJldHVybjsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7
CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsICphZGRyczsK
KwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjQ7CisJc3RydWN0IHNvY2thZGRyX2luNiBhZGRyNjsK
KwlzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBzOworCXN0cnVjdCBzY3Rwc3RhdCBzdGF0Owor
CWNoYXIgYnVmZmVyWzIwMF07CisJaW50IGksIG47CisKKwlpZiAoYXJnYyA+IDQpIHsKKwkJdXNy
c2N0cF9pbml0KGF0b2koYXJndls0XSksIE5VTEwsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJfSBl
bHNlIHsKKwkJdXNyc2N0cF9pbml0KDk4OTksIE5VTEwsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJ
fQorI2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihT
Q1RQX0RFQlVHX05PTkUpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2to
b2xlKDIpOworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX25vX2NzdW1fb25fbG9vcGJhY2soMCk7
CisKKwlpZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVUNiwgU09DS19TVFJFQU0sIElQ
UFJPVE9fU0NUUCwgTlVMTCwgTlVMTCwgMCwgTlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1
c3JzY3RwX3NvY2tldCIpOworCQlleGl0KDEpOworCX0KKworCXVzcnNjdHBfc2V0X25vbl9ibG9j
a2luZyhzb2NrLCAxKTsKKworCWlmIChhcmdjID4gMykgeworCQltZW1zZXQoKHZvaWQgKikmYWRk
cjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYgSEFWRV9TSU42X0xF
TgorCQlhZGRyNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRp
ZgorCQlhZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCQlhZGRyNi5zaW42X3BvcnQgPSBo
dG9ucyhhdG9pKGFyZ3ZbM10pKTsKKwkJYWRkcjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisJ
CWlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyNiwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDApIHsKKwkJCXBlcnJvcigiYmluZCIpOworCQkJdXNy
c2N0cF9jbG9zZShzb2NrKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJaWYgKGFyZ2MgPiA1KSB7
CisJCW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7CisJ
CWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9JTkVUNjsKKwkJZW5jYXBzLnN1ZV9w
b3J0ID0gaHRvbnMoYXRvaShhcmd2WzVdKSk7CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29j
aywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQsIChjb25zdCB2b2lk
KikmZW5jYXBzLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDAp
IHsKKwkJCXBlcnJvcigic2V0c29ja29wdCIpOworCQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJ
CWV4aXQoMSk7CisJCX0KKwl9CisKKwltZW1zZXQoKHZvaWQgKikmYWRkcjQsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwltZW1zZXQoKHZvaWQgKikmYWRkcjYsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJYWRkcjQuc2luX2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisjaWZkZWYgSEFWRV9TSU42
X0xFTgorCWFkZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2Vu
ZGlmCisJYWRkcjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJYWRkcjYuc2luNl9mYW1pbHkgPSBB
Rl9JTkVUNjsKKwlhZGRyNC5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCWFkZHI2
LnNpbjZfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCWlmIChpbmV0X3B0b24oQUZfSU5F
VDYsIGFyZ3ZbMV0sICZhZGRyNi5zaW42X2FkZHIpID09IDEpIHsKKwkJaWYgKHVzcnNjdHBfY29u
bmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI2LCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luNikpIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKKwkJfQorCX0g
ZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbMV0sICZhZGRyNC5zaW5fYWRkcikgPT0g
MSkgeworCQlpZiAodXNyc2N0cF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRk
cjQsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJCXBlcnJvcigidXNyc2N0
cF9jb25uZWN0Iik7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGYoIklsbGVnYWwgZGVzdGluYXRp
b24gYWRkcmVzcy5cbiIpOworCX0KKworCXVzcnNjdHBfc2V0X3VwY2FsbChzb2NrLCBoYW5kbGVf
dXBjYWxsLCBOVUxMKTsKKwlpZiAoKG4gPSB1c3JzY3RwX2dldGxhZGRycyhzb2NrLCAwLCAmYWRk
cnMpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2dldGxhZGRycyIpOworCX0gZWxzZSB7CisJ
CWFkZHIgPSBhZGRyczsKKwkJcHJpbnRmKCJMb2NhbCBhZGRyZXNzZXM6ICIpOworCQlmb3IgKGkg
PSAwOyBpIDwgbjsgaSsrKSB7CisJCQlpZiAoaSA+IDApIHsKKwkJCQlwcmludGYoIiVzIiwgIiwg
Iik7CisJCQl9CisJCQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworCQkJY2FzZSBBRl9JTkVU
OgorCQkJeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCQkJCWNoYXIgYnVmW0lORVRf
QUREUlNUUkxFTl07CisJCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJCXNpbiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW4gKilhZGRyOworCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVCwgJnNpbi0+
c2luX2FkZHIsIGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCQlwcmludGYoIiVzIiwgbmFtZSk7
CisjaWZuZGVmIEhBVkVfU0FfTEVOCisJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNh
ZGRyX3QpYWRkciArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyNlbmRpZgorCQkJCWJy
ZWFrOworCQkJfQorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCXsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJf
aW42ICpzaW42OworCQkJCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJMRU5dOworCQkJCWNvbnN0IGNo
YXIgKm5hbWU7CisKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQkJ
CW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2FkZHIsIGJ1ZiwgSU5FVDZf
QUREUlNUUkxFTik7CisJCQkJcHJpbnRmKCIlcyIsIG5hbWUpOworI2lmbmRlZiBIQVZFX1NBX0xF
TgorCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNikpOworI2VuZGlmCisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZh
dWx0OgorCQkJCWJyZWFrOworCQkJfQorI2lmZGVmIEhBVkVfU0FfTEVOCisJCQlhZGRyID0gKHN0
cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2FfbGVuKTsKKyNlbmRpZgor
CQl9CisJCXByaW50ZigiLlxuIik7CisJCXVzcnNjdHBfZnJlZWxhZGRycyhhZGRycyk7CisJfQor
CWlmICgobiA9IHVzcnNjdHBfZ2V0cGFkZHJzKHNvY2ssIDAsICZhZGRycykpIDwgMCkgeworCQlw
ZXJyb3IoInVzcnNjdHBfZ2V0cGFkZHJzIik7CisJfSBlbHNlIHsKKwkJYWRkciA9IGFkZHJzOwor
CQlwcmludGYoIlBlZXIgYWRkcmVzc2VzOiAiKTsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykg
eworCQkJaWYgKGkgPiAwKSB7CisJCQkJcHJpbnRmKCIlcyIsICIsICIpOworCQkJfQorCQkJc3dp
dGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCXsKKwkJCQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwkJCQljaGFyIGJ1ZltJTkVUX0FERFJTVFJMRU5dOworCQkJ
CWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRk
cjsKKwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQsICZzaW4tPnNpbl9hZGRyLCBidWYsIElO
RVRfQUREUlNUUkxFTik7CisJCQkJcHJpbnRmKCIlcyIsIG5hbWUpOworI2lmbmRlZiBIQVZFX1NB
X0xFTgorCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjZW5kaWYKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNh
c2UgQUZfSU5FVDY6CisJCQl7CisJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwkJCQlj
aGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsKKwkJCQljb25zdCBjaGFyICpuYW1lOworCisJCQkJ
c2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJCQluYW1lID0gaW5ldF9udG9w
KEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBidWYsIElORVQ2X0FERFJTVFJMRU4pOworCQkJ
CXByaW50ZigiJXMiLCBuYW1lKTsKKyNpZm5kZWYgSEFWRV9TQV9MRU4KKwkJCQlhZGRyID0gKHN0
cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpKTsKKyNlbmRpZgorCQkJCWJyZWFrOworCQkJfQorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsK
KwkJCX0KKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKiko
KGNhZGRyX3QpYWRkciArIGFkZHItPnNhX2xlbik7CisjZW5kaWYKKwkJfQorCQlwcmludGYoIi5c
biIpOworCQl1c3JzY3RwX2ZyZWVwYWRkcnMoYWRkcnMpOworCX0KKwl3aGlsZSAoIWRvbmUgJiYg
IWlucHV0X2RvbmUpIHsKKwkJaWYgKGlucHV0QXZhaWxhYmxlKCkpIHsKKwkJCWlmIChmZ2V0cyhi
dWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikgIT0gTlVMTCkgeworCQkJCXVzcnNjdHBfc2Vu
ZHYoc29jaywgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSwgTlVMTCwgMCwgTlVMTCwgMCwgU0NUUF9T
RU5EVl9OT0lORk8sIDApOworCQkJfSBlbHNlIHsKKwkJCQlpZiAodXNyc2N0cF9zaHV0ZG93bihz
b2NrLCBTSFVUX1dSKSA8IDApIHsKKwkJCQkJcGVycm9yKCJ1c3JzY3RwX3NodXRkb3duIik7CisJ
CQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorI2lmZGVmIF9XSU4zMgorCVNsZWVwKDEw
MDApOworI2Vsc2UKKwlzbGVlcCgxKTsKKyNlbmRpZgorCXVzcnNjdHBfY2xvc2Uoc29jayk7CisK
Kwl1c3JzY3RwX2dldF9zdGF0KCZzdGF0KTsKKwlwcmludGYoIk51bWJlciBvZiBwYWNrZXRzIChz
ZW50L3JlY2VpdmVkKTogKCV1LyV1KS5cbiIsCisJICAgICAgIHN0YXQuc2N0cHNfb3V0cGFja2V0
cywgc3RhdC5zY3Rwc19pbnBhY2tldHMpOworCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDAp
IHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMTAwMCk7CisjZWxzZQorCQlzbGVlcCgxKTsKKyNl
bmRpZgorCX0KKwlwcmludGYoIkNsaWVudCBmaW5pc2hlZFxuIik7CisJcmV0dXJuKDApOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZGF5dGltZV9zZXJ2ZXIuYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3Byb2dyYW1zL2RheXRpbWVfc2VydmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzNiMTU3YTUwM2Y1OTFiZjU0
NjEwMzQ2MmQ2YmQwMmIwNTZmMDZlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dy
YW1zL2RheXRpbWVfc2VydmVyLmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM
QUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFVzYWdlOiBkYXl0aW1l
X3NlcnZlciBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdCisgKgorICog
RXhhbXBsZQorICogU2VydmVyOiAkIC4vZGF5dGltZV9zZXJ2ZXIgMTExMTEgMjIyMjIKKyAqIENs
aWVudDogJCAuL2NsaWVudCAxMjcuMC4wLjEgMTMgMCAyMjIyMiAxMTExMQorICovCisKKyNpZmRl
ZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj
aW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGlt
ZS5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMv
c29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5o
PgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgorI2luY2x1ZGUgInByb2dyYW1zX2hlbHBl
ci5oIgorCisjZGVmaW5lIFBPUlQgMTMKKyNkZWZpbmUgREFZVElNRV9QUElEIDQwCisjZGVmaW5l
IFNMRUVQIDEKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0
IHNvY2tldCAqc29jaywgKmNvbm5fc29jazsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKwlz
dHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBzOworCXNvY2tsZW5fdCBhZGRyX2xlbjsKKwljaGFy
IGJ1ZmZlcls4MF07CisJdGltZV90IG5vdzsKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87
CisKKwlpZiAoYXJnYyA+IDEpIHsKKwkJdXNyc2N0cF9pbml0KGF0b2koYXJndlsxXSksIE5VTEws
IGRlYnVnX3ByaW50Zl9zdGFjayk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9pbml0KDk4OTksIE5V
TEwsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJfQorI2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3Rw
X3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOworI2VuZGlmCisJdXNy
c2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCXVzcnNjdHBfc3lzY3RsX3NldF9z
Y3RwX25vX2NzdW1fb25fbG9vcGJhY2soMCk7CisKKwlpZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tl
dChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBOVUxMLCBOVUxMLCAwLCBOVUxM
KSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJfQorCWlmIChhcmdj
ID4gMikgeworCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2Fw
cykpOworCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZfSU5FVDsKKwkJZW5jYXBz
LnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7CisJCWlmICh1c3JzY3RwX3NldHNvY2tv
cHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQsIChjb25z
dCB2b2lkKikmZW5jYXBzLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMp
KSA8IDApIHsKKwkJCXBlcnJvcigic2V0c29ja29wdCIpOworCQl9CisJfQorCW1lbXNldCgodm9p
ZCAqKSZhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjaWZkZWYgSEFWRV9T
SU5fTEVOCisJYWRkci5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5k
aWYKKwlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWFkZHIuc2luX3BvcnQgPSBodG9ucyhQ
T1JUKTsKKwlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOworCWlmICh1
c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9iaW5kIik7CisJfQorCWlm
ICh1c3JzY3RwX2xpc3Rlbihzb2NrLCAxKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2xpc3Rl
biIpOworCX0KKwl3aGlsZSAoMSkgeworCQlhZGRyX2xlbiA9IDA7CisJCWlmICgoY29ubl9zb2Nr
ID0gdXNyc2N0cF9hY2NlcHQoc29jaywgTlVMTCwgJmFkZHJfbGVuKSkgPT0gTlVMTCkgeworCQkJ
Y29udGludWU7CisJCX0KKwkJdGltZSgmbm93KTsKKyNpZmRlZiBfV0lOMzIKKwkJaWYgKF9zbnBy
aW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMiLCBjdGltZSgmbm93KSkgPCAwKSB7Cisj
ZWxzZQorCQlpZiAoc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzIiwgY3RpbWUo
Jm5vdykpIDwgMCkgeworI2VuZGlmCisJCQlidWZmZXJbMF0gPSAnXDAnOworCQl9CisJCXNuZGlu
Zm8uc25kX3NpZCA9IDA7CisJCXNuZGluZm8uc25kX2ZsYWdzID0gMDsKKwkJc25kaW5mby5zbmRf
cHBpZCA9IGh0b25sKERBWVRJTUVfUFBJRCk7CisJCXNuZGluZm8uc25kX2NvbnRleHQgPSAwOwor
CQlzbmRpbmZvLnNuZF9hc3NvY19pZCA9IDA7CisJCWlmICh1c3JzY3RwX3NlbmR2KGNvbm5fc29j
aywgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSwgTlVMTCwgMCwgKHZvaWQgKikmc25kaW5mbywKKwkJ
ICAgICAgICAgICAgICAgICAgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyks
IFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYi
KTsKKwkJfQorCQl1c3JzY3RwX2Nsb3NlKGNvbm5fc29jayk7CisJfQorCXJldHVybiAoMCk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kYXl0aW1lX3NlcnZlcl91cGNhbGwuYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3Byb2dyYW1zL2RheXRpbWVfc2VydmVyX3VwY2FsbC5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNk
ODM5NjNjZmYwMjc4OGU1MTZlZTQ5NTYzZTc5ODlkOTRhMDU0YzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9wcm9ncmFtcy9kYXl0aW1lX3NlcnZlcl91cGNhbGwuYwpAQCAtMCwwICsxLDE0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIE1pY2hhZWwgVHVleGVuCisgKgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pF
Q1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor
CisvKgorICogVXNhZ2U6IGRheXRpbWVfc2VydmVyX3VwY2FsbCBbbG9jYWxfZW5jYXBzX3BvcnRd
IFtyZW1vdGVfZW5jYXBzX3BvcnRdCisgKi8KKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBfQ1JU
X1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl
IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp
bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaWZuZGVmIF9XSU4zMgor
I2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1
c3JzY3RwLmg+CisjaW5jbHVkZSAicHJvZ3JhbXNfaGVscGVyLmgiCisKKyNkZWZpbmUgREFZVElN
RV9QUElEIDQwCisjZGVmaW5lIFBPUlQgMTMKKworc3RhdGljIHZvaWQKK2hhbmRsZV9hY2NlcHQo
c3RydWN0IHNvY2tldCAqc29jaywgdm9pZCAqZGF0YSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBz
b2NrZXQgKmNvbm5fc29jazsKKwljaGFyIGJ1ZmZlcls4MF07CisJdGltZV90IG5vdzsKKwlzb2Nr
bGVuX3QgYWRkcl9sZW4gPSAwOworCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKKworCWlm
ICgoKGNvbm5fc29jayA9IHVzcnNjdHBfYWNjZXB0KHNvY2ssIE5VTEwsICZhZGRyX2xlbikpID09
IE5VTEwpCisJICAgICYmIChlcnJubyAhPSBFSU5QUk9HUkVTUykpIHsKKwkJcGVycm9yKCJ1c3Jz
Y3RwX2FjY2VwdCIpOworCQlyZXR1cm47CisJfQorCXRpbWUoJm5vdyk7CisjaWZkZWYgX1dJTjMy
CisJCWlmIChfc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzIiwgY3RpbWUoJm5v
dykpIDwgMCkgeworI2Vsc2UKKwkJaWYgKHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciks
ICIlcyIsIGN0aW1lKCZub3cpKSA8IDApIHsKKyNlbmRpZgorCQkJYnVmZmVyWzBdID0gJ1wwJzsK
KwkJfQorCQlzbmRpbmZvLnNuZF9zaWQgPSAwOworCQlzbmRpbmZvLnNuZF9mbGFncyA9IDA7CisJ
CXNuZGluZm8uc25kX3BwaWQgPSBodG9ubChEQVlUSU1FX1BQSUQpOworCQlzbmRpbmZvLnNuZF9j
b250ZXh0ID0gMDsKKwkJc25kaW5mby5zbmRfYXNzb2NfaWQgPSAwOworCQl1c3JzY3RwX3NlbmR2
KGNvbm5fc29jaywgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSwgTlVMTCwgMCwgKHZvaWQgKikmc25k
aW5mbywKKwkJICAgICAgICAgICAgICAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRp
bmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZPLCAwKTsKKwkJdXNyc2N0cF9jbG9zZShjb25uX3NvY2sp
OworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qgc29j
a2V0ICpzb2NrOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXN0cnVjdCBzY3RwX3VkcGVu
Y2FwcyBlbmNhcHM7CisKKwlpZiAoYXJnYyA+IDEpIHsKKwkJdXNyc2N0cF9pbml0KGF0b2koYXJn
dlsxXSksIE5VTEwsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9p
bml0KDk4OTksIE5VTEwsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJfQorI2lmZGVmIFNDVFBfREVC
VUcKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOwor
I2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCXVzcnNjdHBf
c3lzY3RsX3NldF9zY3RwX25vX2NzdW1fb25fbG9vcGJhY2soMCk7CisKKwlpZiAoKHNvY2sgPSB1
c3JzY3RwX3NvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBOVUxMLCBO
VUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJ
fQorCXVzcnNjdHBfc2V0X25vbl9ibG9ja2luZyhzb2NrLCAxKTsKKwlpZiAoYXJnYyA+IDIpIHsK
KwkJbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJ
ZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9IEFGX0lORVQ7CisJCWVuY2Fwcy5zdWVfcG9y
dCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ss
IElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCop
JmVuY2FwcywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7
CisJCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKKwkJfQorCX0KKwltZW1zZXQoKHZvaWQgKikmYWRk
ciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworI2lmZGVmIEhBVkVfU0lOX0xFTgor
CWFkZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJYWRk
ci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlhZGRyLnNpbl9wb3J0ID0gaHRvbnMoUE9SVCk7CisJ
YWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKwlpZiAodXNyc2N0cF9i
aW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCX0KKwlpZiAodXNyc2N0
cF9saXN0ZW4oc29jaywgMSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKKwl9
CisKKwl1c3JzY3RwX3NldF91cGNhbGwoc29jaywgaGFuZGxlX2FjY2VwdCwgTlVMTCk7CisKKwl3
aGlsZSAoMSkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcCgxKjEwMDApOworI2Vsc2UKKwkJc2xl
ZXAoMSk7CisjZW5kaWYKKwl9CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kaXNjYXJkX3Nl
cnZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY4YzJhNzIxZjJhMDU1Y2MxZjFkMTRlZTFmNzY4N2NhNjkyMjYy
ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kaXNjYXJkX3NlcnZlci5j
CkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTWljaGFl
bCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmli
dXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg
REFNQUdFLgorICovCisKKy8qCisgKiBVc2FnZTogZGlzY2FyZF9zZXJ2ZXIgW2xvY2FsX2VuY2Fw
c19wb3J0XSBbcmVtb3RlX2VuY2Fwc19wb3J0XQorICogCisgKiBFeGFtcGxlCisgKiBTZXJ2ZXI6
ICQgLi9kaXNjYXJkX3NlcnZlciAxMTExMSAyMjIyMgorICogQ2xpZW50OiAkIC4vY2xpZW50IDEy
Ny4wLjAuMSA5IDAgMjIyMjIgMTExMTEKKyAqLworCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIF9D
UlRfU0VDVVJFX05PX1dBUk5JTkdTCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1
ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2lu
Y2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgorI2luY2x1
ZGUgInByb2dyYW1zX2hlbHBlci5oIgorCisjZGVmaW5lIFBPUlQgOQorI2RlZmluZSBCVUZGRVJf
U0laRSAxMDI0MAorI2RlZmluZSBTTEVFUCAxCisKK2NvbnN0IGludCB1c2VfY2IgPSAwOworCitz
dGF0aWMgaW50CityZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29j
a3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1
Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKK3sKKwljaGFy
IG5hbWVidWZbSU5FVDZfQUREUlNUUkxFTl07CisJY29uc3QgY2hhciAqbmFtZTsKKwl1aW50MTZf
dCBwb3J0OworCisJaWYgKGRhdGEpIHsKKwkJaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikg
eworCQkJcHJpbnRmKCJOb3RpZmljYXRpb24gb2YgbGVuZ3RoICVkIHJlY2VpdmVkLlxuIiwgKGlu
dClkYXRhbGVuKTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAoYWRkci5zYS5zYV9mYW1pbHkpIHsK
KyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9J
TkVULCAmYWRkci5zaW4uc2luX2FkZHIsIG5hbWVidWYsIElORVRfQUREUlNUUkxFTik7CisJCQkJ
cG9ydCA9IG50b2hzKGFkZHIuc2luLnNpbl9wb3J0KTsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5F
VDYsICZhZGRyLnNpbjYuc2luNl9hZGRyLCBuYW1lYnVmLCBJTkVUNl9BRERSU1RSTEVOKSwKKwkJ
CQlwb3J0ID0gbnRvaHMoYWRkci5zaW42LnNpbjZfcG9ydCk7CisJCQkJYnJlYWs7CisjZW5kaWYK
KwkJCWNhc2UgQUZfQ09OTjoKKyNpZmRlZiBfV0lOMzIKKwkJCQlpZiAoX3NucHJpbnRmKG5hbWVi
dWYsIElORVQ2X0FERFJTVFJMRU4sICIlcCIsIGFkZHIuc2Nvbm4uc2Nvbm5fYWRkcikgPCAwKSB7
CisjZWxzZQorCQkJCWlmIChzbnByaW50ZihuYW1lYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiJXAi
LCBhZGRyLnNjb25uLnNjb25uX2FkZHIpIDwgMCkgeworI2VuZGlmCisJCQkJCW5hbWVidWZbMF0g
PSAnXDAnOworCQkJCX0KKwkJCQluYW1lID0gbmFtZWJ1ZjsKKwkJCQlwb3J0ID0gbnRvaHMoYWRk
ci5zY29ubi5zY29ubl9wb3J0KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbmFtZSA9
ICI/Pz8iOworCQkJCXBvcnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJcHJpbnRmKCJNc2cg
b2YgbGVuZ3RoICVkIHJlY2VpdmVkIGZyb20gJXM6JXUgb24gc3RyZWFtICV1IHdpdGggU1NOICV1
IGFuZCBUU04gJXUsIFBQSUQgJXUsIGNvbnRleHQgJXUuXG4iLAorCQkJICAgICAgIChpbnQpZGF0
YWxlbiwKKwkJCSAgICAgICBuYW1lLAorCQkJICAgICAgIHBvcnQsCisJCQkgICAgICAgcmN2LnJj
dl9zaWQsCisJCQkgICAgICAgcmN2LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJ
CQkgICAgICAgKHVpbnQzMl90KW50b2hsKHJjdi5yY3ZfcHBpZCksCisJCQkgICAgICAgcmN2LnJj
dl9jb250ZXh0KTsKKwkJfQorCQlmcmVlKGRhdGEpOworCX0KKwlyZXR1cm4gKDEpOworfQorCitp
bnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2Nr
OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKwlzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5j
YXBzOworCXN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OworCXVpbnQxNl90IGV2ZW50X3R5cGVzW10g
PSB7U0NUUF9BU1NPQ19DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BF
RVJfQUREUl9DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1JFTU9URV9F
UlJPUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0hVVERPV05fRVZFTlQsCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTiwKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVH07CisJ
dW5zaWduZWQgaW50IGk7CisJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgYXY7CisJY29uc3QgaW50
IG9uID0gMTsKKwlzc2l6ZV90IG47CisJaW50IGZsYWdzOworCXNvY2tsZW5fdCBmcm9tX2xlbjsK
KwljaGFyIGJ1ZmZlcltCVUZGRVJfU0laRV07CisJY2hhciBuYW1lW0lORVQ2X0FERFJTVFJMRU5d
OworCXNvY2tsZW5fdCBpbmZvbGVuOworCXN0cnVjdCBzY3RwX3JjdmluZm8gcmN2X2luZm87CisJ
dW5zaWduZWQgaW50IGluZm90eXBlOworCisJaWYgKGFyZ2MgPiAxKSB7CisJCXVzcnNjdHBfaW5p
dChhdG9pKGFyZ3ZbMV0pLCBOVUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0gZWxzZSB7CisJ
CXVzcnNjdHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0KKyNpZmRl
ZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJV
R19BTEwpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOwor
CXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX25vX2NzdW1fb25fbG9vcGJhY2soMCk7CisKKwlpZiAo
KHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVUNiwgU09DS19TRVFQQUNLRVQsIElQUFJPVE9f
U0NUUCwgdXNlX2NiP3JlY2VpdmVfY2I6TlVMTCwgTlVMTCwgMCwgTlVMTCkpID09IE5VTEwpIHsK
KwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOworCX0KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0
KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIsIChjb25zdCB2
b2lkKikmb24sIChzb2NrbGVuX3Qpc2l6ZW9mKGludCkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNj
dHBfc2V0c29ja29wdCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiIpOworCX0KKwltZW1zZXQo
JmF2LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKTsKKwlhdi5hc3NvY19pZCA9
IFNDVFBfQUxMX0FTU09DOworCWF2LmFzc29jX3ZhbHVlID0gNDc7CisKKwlpZiAodXNyc2N0cF9z
ZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9DT05URVhULCAoY29uc3Qgdm9pZCop
JmF2LCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIDwgMCkgewor
CQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX0NPTlRFWFQiKTsKKwl9CisJaWYgKHVz
cnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVDVlJDVklORk8sICZv
biwgc2l6ZW9mKGludCkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQ
X1JFQ1ZSQ1ZJTkZPIik7CisJfQorCWlmIChhcmdjID4gMikgeworCQltZW1zZXQoJmVuY2Fwcywg
MCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpOworCQllbmNhcHMuc3VlX2FkZHJlc3Mu
c3NfZmFtaWx5ID0gQUZfSU5FVDY7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJn
dlsyXSkpOworCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NU
UF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCopJmVuY2FwcywgKHNvY2tsZW5f
dClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNj
dHBfc2V0c29ja29wdCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQiKTsKKwkJfQorCX0KKwlt
ZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YoZXZlbnQpKTsKKwlldmVudC5zZV9hc3NvY19pZCA9IFND
VFBfRlVUVVJFX0FTU09DOworCWV2ZW50LnNlX29uID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgKHVu
c2lnbmVkIGludCkoc2l6ZW9mKGV2ZW50X3R5cGVzKS9zaXplb2YodWludDE2X3QpKTsgaSsrKSB7
CisJCWV2ZW50LnNlX3R5cGUgPSBldmVudF90eXBlc1tpXTsKKwkJaWYgKHVzcnNjdHBfc2V0c29j
a29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfRVZFTlQsICZldmVudCwgc2l6ZW9mKHN0cnVj
dCBzY3RwX2V2ZW50KSkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQ
X0VWRU5UIik7CisJCX0KKwl9CisJbWVtc2V0KCh2b2lkICopJmFkZHIsIDAsIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCWFkZHIuc2luNl9sZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwlhZGRyLnNpbjZfZmFtaWx5
ID0gQUZfSU5FVDY7CisJYWRkci5zaW42X3BvcnQgPSBodG9ucyhQT1JUKTsKKwlhZGRyLnNpbjZf
YWRkciA9IGluNmFkZHJfYW55OworCWlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2Nr
YWRkciAqKSZhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgeworCQlwZXJy
b3IoInVzcnNjdHBfYmluZCIpOworCX0KKwlpZiAodXNyc2N0cF9saXN0ZW4oc29jaywgMSkgPCAw
KSB7CisJCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJaWYg
KHVzZV9jYikgeworI2lmZGVmIF9XSU4zMgorCQkJU2xlZXAoU0xFRVAgKiAxMDAwKTsKKyNlbHNl
CisJCQlzbGVlcChTTEVFUCk7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCWZyb21fbGVuID0gKHNv
Y2tsZW5fdClzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQlmbGFncyA9IDA7CisJCQlp
bmZvbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfcmN2aW5mbyk7CisJCQluID0g
dXNyc2N0cF9yZWN2dihzb2NrLCAodm9pZCopYnVmZmVyLCBCVUZGRVJfU0laRSwgKHN0cnVjdCBz
b2NrYWRkciAqKSAmYWRkciwgJmZyb21fbGVuLCAodm9pZCAqKSZyY3ZfaW5mbywKKwkJCSAgICAg
ICAgICAgICAgICAgICZpbmZvbGVuLCAmaW5mb3R5cGUsICZmbGFncyk7CisJCQlpZiAobiA+IDAp
IHsKKwkJCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7CisJCQkJCXByaW50ZigiTm90
aWZpY2F0aW9uIG9mIGxlbmd0aCAlbGx1IHJlY2VpdmVkLlxuIiwgKHVuc2lnbmVkIGxvbmcgbG9u
ZyluKTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoaW5mb3R5cGUgPT0gU0NUUF9SRUNWVl9SQ1ZJ
TkZPKSB7CisJCQkJCQlwcmludGYoIk1zZyBvZiBsZW5ndGggJWxsdSByZWNlaXZlZCBmcm9tICVz
OiV1IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAldSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0
ICV1LCBjb21wbGV0ZSAlZC5cbiIsCisJCQkJCQkgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcp
biwKKwkJCQkJCSAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYWRkci5zaW42X2FkZHIsIG5h
bWUsIElORVQ2X0FERFJTVFJMRU4pLCBudG9ocyhhZGRyLnNpbjZfcG9ydCksCisJCQkJCQkgICAg
ICAgIHJjdl9pbmZvLnJjdl9zaWQsCisJCQkJCQkgICAgICAgIHJjdl9pbmZvLnJjdl9zc24sCisJ
CQkJCQkgICAgICAgIHJjdl9pbmZvLnJjdl90c24sCisJCQkJCQkgICAgICAgICh1aW50MzJfdClu
dG9obChyY3ZfaW5mby5yY3ZfcHBpZCksCisJCQkJCQkgICAgICAgIHJjdl9pbmZvLnJjdl9jb250
ZXh0LAorCQkJCQkJICAgICAgICAoZmxhZ3MgJiBNU0dfRU9SKSA/IDEgOiAwKTsKKwkJCQkJfSBl
bHNlIHsKKwkJCQkJCXByaW50ZigiTXNnIG9mIGxlbmd0aCAlbGx1IHJlY2VpdmVkIGZyb20gJXM6
JXUsIGNvbXBsZXRlICVkLlxuIiwKKwkJCQkJCSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylu
LAorCQkJCQkJICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyLnNpbjZfYWRkciwgbmFt
ZSwgSU5FVDZfQUREUlNUUkxFTiksIG50b2hzKGFkZHIuc2luNl9wb3J0KSwKKwkJCQkJCSAgICAg
ICAgKGZsYWdzICYgTVNHX0VPUikgPyAxIDogMCk7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2Ug
eworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJd2hp
bGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcChTTEVF
UCAqIDEwMDApOworI2Vsc2UKKwkJc2xlZXAoU0xFRVApOworI2VuZGlmCisJfQorCXJldHVybiAo
MCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kaXNjYXJkX3NlcnZlcl91cGNh
bGwuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyX3VwY2FsbC5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjMxZDg0YjM4NzdlZmI1ZDY5NGM1MDRmNmU0ZjExYjFiYTA4ODY0YTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kaXNjYXJkX3NlcnZlcl91cGNhbGwuYwpAQCAtMCww
ICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwgVHVleGVu
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisg
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pF
Q1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqLworCisvKgorICogVXNhZ2U6IGRpc2NhcmRfc2VydmVyX3VwY2FsbCBbbG9jYWxfZW5jYXBz
X3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdCisgKi8KKworI2lmZGVmIF9XSU4zMgorI2RlZmlu
ZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcu
aD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8dW5p
c3RkLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4K
KyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHVzcnNjdHAuaD4KKyNp
bmNsdWRlICJwcm9ncmFtc19oZWxwZXIuaCIKKworI2RlZmluZSBCVUZGRVJTSVpFIDEwMjQwCisj
ZGVmaW5lIFBPUlQgOQorCisKK3N0YXRpYyB2b2lkCitoYW5kbGVfdXBjYWxsKHN0cnVjdCBzb2Nr
ZXQgKnNvY2ssIHZvaWQgKmRhdGEsIGludCBmbGdzKQoreworCWNoYXIgbmFtZWJ1ZltJTkVUNl9B
RERSU1RSTEVOXTsKKwljb25zdCBjaGFyICpuYW1lOworCXVpbnQxNl90IHBvcnQ7CisJY2hhciAq
YnVmOworCWludCBldmVudHM7CisKKwl3aGlsZSAoKGV2ZW50cyA9IHVzcnNjdHBfZ2V0X2V2ZW50
cyhzb2NrKSkgJiYgKGV2ZW50cyAmIFNDVFBfRVZFTlRfUkVBRCkpIHsKKwkJc3RydWN0IHNjdHBf
cmVjdnZfcm4gcm47CisJCXNzaXplX3QgbjsKKwkJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRk
cjsKKwkJYnVmID0gbWFsbG9jKEJVRkZFUlNJWkUpOworCQlpbnQgZmxhZ3MgPSAwOworCQlzb2Nr
bGVuX3QgbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpOwor
CQl1bnNpZ25lZCBpbnQgaW5mb3R5cGUgPSAwOworCQlzb2NrbGVuX3QgaW5mb2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9yZWN2dl9ybik7CisJCW1lbXNldCgmcm4sIDAsIHNpemVvZihzdHJ1Y3Qg
c2N0cF9yZWN2dl9ybikpOworCQluID0gdXNyc2N0cF9yZWN2dihzb2NrLCBidWYsIEJVRkZFUlNJ
WkUsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsICZsZW4sICh2b2lkICopJnJuLAorCQkgICAg
ICAgICAgICAgJmluZm9sZW4sICZpbmZvdHlwZSwgJmZsYWdzKTsKKwkJaWYgKG4gPCAwKSB7CisJ
CQlwZXJyb3IoInVzcnNjdHBfcmVjdnYiKTsKKwkJfQorCQlpZiAobiA+IDApIHsKKwkJCWlmIChm
bGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJCQlwcmludGYoIk5vdGlmaWNhdGlvbiBvZiBs
ZW5ndGggJWQgcmVjZWl2ZWQuXG4iLCAoaW50KW4pOworCQkJfSBlbHNlIHsKKy8qCisjaWZkZWYg
X1dJTjMyCisJCQkJX3dyaXRlKF9maWxlbm8oc3Rkb3V0KSwgYnVmLCAodW5zaWduZWQgaW50KW4p
OworI2Vsc2UKKwkJCQlpZiAod3JpdGUoZmlsZW5vKHN0ZG91dCksIGJ1ZiwgbikgPCAwKSB7CisJ
CQkJCXBlcnJvcigid3JpdGUiKTsKKwkJCQl9CisjZW5kaWYKKyovCisJCQkJc3dpdGNoIChhZGRy
LnNzX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQljYXNlIEFGX0lORVQ6IHsKKwkJCQkJc3Ry
dWN0IHNvY2thZGRyX2luIGFkZHI0OworCQkJCQltZW1jcHkoJmFkZHI0LCAoc3RydWN0IHNvY2th
ZGRyX2luICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJCQkJbmFtZSA9
IGluZXRfbnRvcChBRl9JTkVULCAmYWRkcjQuc2luX2FkZHIsIG5hbWVidWYsIElORVRfQUREUlNU
UkxFTik7CisJCQkJCXBvcnQgPSBudG9ocyhhZGRyNC5zaW5fcG9ydCk7CisJCQkJCWJyZWFrOwor
CQkJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCWNhc2UgQUZfSU5FVDY6IHsKKwkJCQkJ
c3RydWN0IHNvY2thZGRyX2luNiBhZGRyNjsKKwkJCQkJbWVtY3B5KCZhZGRyNiwgKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJCQkJ
bmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHI2LnNpbjZfYWRkciwgbmFtZWJ1ZiwgSU5F
VDZfQUREUlNUUkxFTiksCisJCQkJCXBvcnQgPSBudG9ocyhhZGRyNi5zaW42X3BvcnQpOworCQkJ
CQlicmVhazsKKwkJCQkJfQorI2VuZGlmCisJCQkJZGVmYXVsdDoKKwkJCQkJbmFtZSA9IE5VTEw7
CisJCQkJCXBvcnQgPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAobmFtZSA9PSBO
VUxMKSB7CisJCQkJCXByaW50ZigiaW5ldF9udG9wIGZhaWxlZFxuIik7CisJCQkJCWZyZWUoYnVm
KTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKworCQkJCXByaW50ZigiTXNnIG9mIGxlbmd0aCAlZCBy
ZWNlaXZlZCBmcm9tICVzOiV1IG9uIHN0cmVhbSAlZCB3aXRoIFNTTiAldSBhbmQgVFNOICV1LCBQ
UElEICV1LCBjb250ZXh0ICV1LlxuIiwKKwkJCQkgICAgICAgKGludCluLAorCQkJCSAgICAgICBu
YW1lYnVmLAorCQkJCSAgICAgICBwb3J0LAorCQkJCSAgICAgICBybi5yZWN2dl9yY3ZpbmZvLnJj
dl9zaWQsCisJCQkJICAgICAgIHJuLnJlY3Z2X3JjdmluZm8ucmN2X3NzbiwKKwkJCQkgICAgICAg
cm4ucmVjdnZfcmN2aW5mby5yY3ZfdHNuLAorCQkJCSAgICAgICAodWludDMyX3QpbnRvaGwocm4u
cmVjdnZfcmN2aW5mby5yY3ZfcHBpZCksCisJCQkJICAgICAgIHJuLnJlY3Z2X3JjdmluZm8ucmN2
X2NvbnRleHQpOworCQkJfQorCQl9CisJCWZyZWUoYnVmKTsKKwl9CisJcmV0dXJuOworfQorCitp
bnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2Nr
OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKwlzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5j
YXBzOworCXN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OworCXVpbnQxNl90IGV2ZW50X3R5cGVzW10g
PSB7U0NUUF9BU1NPQ19DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BF
RVJfQUREUl9DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1JFTU9URV9F
UlJPUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0hVVERPV05fRVZFTlQsCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTiwKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVH07CisJ
dW5zaWduZWQgaW50IGk7CisJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgYXY7CisJY29uc3QgaW50
IG9uID0gMTsKKworCWlmIChhcmdjID4gMSkgeworCQl1c3JzY3RwX2luaXQoYXRvaShhcmd2WzFd
KSwgTlVMTCwgZGVidWdfcHJpbnRmX3N0YWNrKTsKKwl9IGVsc2UgeworCQl1c3JzY3RwX2luaXQo
OTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmX3N0YWNrKTsKKwl9CisjaWZkZWYgU0NUUF9ERUJVRwor
CXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9ORSk7CisjZW5k
aWYKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUoMik7CisJdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfbm9fY3N1bV9vbl9sb29wYmFjaygwKTsKKworCWlmICgoc29jayA9IHVzcnNj
dHBfc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NFUVBBQ0tFVCwgSVBQUk9UT19TQ1RQLCBOVUxMLCBO
VUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJ
fQorCXVzcnNjdHBfc2V0X25vbl9ibG9ja2luZyhzb2NrLCAxKTsKKwlpZiAodXNyc2N0cF9zZXRz
b2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIsIChj
b25zdCB2b2lkKikmb24sIChzb2NrbGVuX3Qpc2l6ZW9mKGludCkpIDwgMCkgeworCQlwZXJyb3Io
InVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiIpOworCX0KKwlt
ZW1zZXQoJmF2LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKTsKKwlhdi5hc3Nv
Y19pZCA9IFNDVFBfQUxMX0FTU09DOworCWF2LmFzc29jX3ZhbHVlID0gNDc7CisKKwlpZiAodXNy
c2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9DT05URVhULCAoY29uc3Qg
dm9pZCopJmF2LCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIDwg
MCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX0NPTlRFWFQiKTsKKwl9CisJ
aWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVDVlJDVklO
Rk8sICZvbiwgc2l6ZW9mKGludCkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29w
dCBTQ1RQX1JFQ1ZSQ1ZJTkZPIik7CisJfQorCWlmIChhcmdjID4gMikgeworCQltZW1zZXQoJmVu
Y2FwcywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpOworCQllbmNhcHMuc3VlX2Fk
ZHJlc3Muc3NfZmFtaWx5ID0gQUZfSU5FVDY7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0
b2koYXJndlsyXSkpOworCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NU
UCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCopJmVuY2FwcywgKHNv
Y2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7CisJCQlwZXJyb3Io
InVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQiKTsKKwkJfQor
CX0KKwltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YoZXZlbnQpKTsKKwlldmVudC5zZV9hc3NvY19p
ZCA9IFNDVFBfRlVUVVJFX0FTU09DOworCWV2ZW50LnNlX29uID0gMTsKKwlmb3IgKGkgPSAwOyBp
IDwgKHVuc2lnbmVkIGludCkoc2l6ZW9mKGV2ZW50X3R5cGVzKS9zaXplb2YodWludDE2X3QpKTsg
aSsrKSB7CisJCWV2ZW50LnNlX3R5cGUgPSBldmVudF90eXBlc1tpXTsKKwkJaWYgKHVzcnNjdHBf
c2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfRVZFTlQsICZldmVudCwgc2l6ZW9m
KHN0cnVjdCBzY3RwX2V2ZW50KSkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29w
dCBTQ1RQX0VWRU5UIik7CisJCX0KKwl9CisKKwl1c3JzY3RwX3NldF91cGNhbGwoc29jaywgaGFu
ZGxlX3VwY2FsbCwgTlVMTCk7CisKKwltZW1zZXQoKHZvaWQgKikmYWRkciwgMCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJYWRkci5zaW42X2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCWFkZHIuc2luNl9mYW1p
bHkgPSBBRl9JTkVUNjsKKwlhZGRyLnNpbjZfcG9ydCA9IGh0b25zKFBPUlQpOworCWFkZHIuc2lu
Nl9hZGRyID0gaW42YWRkcl9hbnk7CisJaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNv
Y2thZGRyICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7CisJCXBl
cnJvcigidXNyc2N0cF9iaW5kIik7CisJfQorCWlmICh1c3JzY3RwX2xpc3Rlbihzb2NrLCAxKSA8
IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2xpc3RlbiIpOworCX0KKwl3aGlsZSAoMSkgeworI2lm
ZGVmIF9XSU4zMgorCQkJU2xlZXAoMSoxMDAwKTsKKyNlbHNlCisJCQlzbGVlcCgxKTsKKyNlbmRp
ZgorCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWNo
b19zZXJ2ZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2VjaG9fc2VydmVyLmMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTM1MTQ0N2EzOGQ4OWRjZDZjOTljNmI1YTM0ZTVjN2FlYjMyOTZiYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3Byb2dyYW1zL2VjaG9fc2VydmVyLmMKQEAgLTAsMCArMSwyNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBw
cm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAq
IFVzYWdlOiBlY2hvX3NlcnZlciBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5jYXBzX3Bv
cnRdCisgKgorICogRXhhbXBsZQorICogU2VydmVyOiAkIC4vZWNob19zZXJ2ZXIgMTExMTEgMjIy
MjIKKyAqIENsaWVudDogJCAuL2NsaWVudCAxMjcuMC4wLjEgNyAwIDIyMjIyIDExMTExCisgKi8K
KworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlm
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZm5k
ZWYgX1dJTjMyCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgor
I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgor
I2luY2x1ZGUgPHVzcnNjdHAuaD4KKyNpbmNsdWRlICJwcm9ncmFtc19oZWxwZXIuaCIKKworI2Rl
ZmluZSBQT1JUIDcKKyNkZWZpbmUgQlVGRkVSX1NJWkUgMTAyNDAKKyNkZWZpbmUgU0xFRVAgMQor
Citjb25zdCBpbnQgdXNlX2NiID0gMDsKKworc3RhdGljIGludAorcmVjZWl2ZV9jYihzdHJ1Y3Qg
c29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAg
ICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFn
cywgdm9pZCAqdWxwX2luZm8pCit7CisJY2hhciBuYW1lYnVmW0lORVQ2X0FERFJTVFJMRU5dOwor
CWNvbnN0IGNoYXIgKm5hbWU7CisJdWludDE2X3QgcG9ydDsKKworCWlmIChkYXRhKSB7CisJCWlm
IChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJCXByaW50ZigiTm90aWZpY2F0aW9uIG9m
IGxlbmd0aCAlZCByZWNlaXZlZC5cbiIsIChpbnQpZGF0YWxlbik7CisJCX0gZWxzZSB7CisJCQlz
d2l0Y2ggKGFkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVU
OgorCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVCwgJmFkZHIuc2luLnNpbl9hZGRyLCBuYW1l
YnVmLCBJTkVUX0FERFJTVFJMRU4pOworCQkJCXBvcnQgPSBudG9ocyhhZGRyLnNpbi5zaW5fcG9y
dCk7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoK
KwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmYWRkci5zaW42LnNpbjZfYWRkciwgbmFt
ZWJ1ZiwgSU5FVDZfQUREUlNUUkxFTiksCisJCQkJcG9ydCA9IG50b2hzKGFkZHIuc2luNi5zaW42
X3BvcnQpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFGX0NPTk46CisjaWZkZWYgX1dJ
TjMyCisJCQkJaWYgKF9zbnByaW50ZihuYW1lYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiJXAiLCBh
ZGRyLnNjb25uLnNjb25uX2FkZHIpIDwgMCkgeworI2Vsc2UKKwkJCQlpZiAoc25wcmludGYobmFt
ZWJ1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIiVwIiwgYWRkci5zY29ubi5zY29ubl9hZGRyKSA8IDAp
IHsKKyNlbmRpZgorCQkJCQluYW1lYnVmWzBdID0gJ1wwJzsKKwkJCQl9CisJCQkJbmFtZSA9IG5h
bWVidWY7CisJCQkJcG9ydCA9IG50b2hzKGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCk7CisJCQkJYnJl
YWs7CisJCQlkZWZhdWx0OgorCQkJCW5hbWUgPSAiPz8/IjsKKwkJCQlwb3J0ID0gMDsKKwkJCQli
cmVhazsKKwkJCX0KKwkJCXByaW50ZigiTXNnIG9mIGxlbmd0aCAlZCByZWNlaXZlZCBmcm9tICVz
OiV1IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAldSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0
ICV1LlxuIiwKKwkJCSAgICAgICAoaW50KWRhdGFsZW4sCisJCQkgICAgICAgbmFtZSwKKwkJCSAg
ICAgICBwb3J0LAorCQkJICAgICAgIHJjdi5yY3Zfc2lkLAorCQkJICAgICAgIHJjdi5yY3Zfc3Nu
LAorCQkJICAgICAgIHJjdi5yY3ZfdHNuLAorCQkJICAgICAgICh1aW50MzJfdCludG9obChyY3Yu
cmN2X3BwaWQpLAorCQkJICAgICAgIHJjdi5yY3ZfY29udGV4dCk7CisJCQlpZiAoZmxhZ3MgJiBN
U0dfRU9SKSB7CisJCQkJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRfaW5mbzsKKworCQkJCXNuZF9p
bmZvLnNuZF9zaWQgPSByY3YucmN2X3NpZDsKKwkJCQlzbmRfaW5mby5zbmRfZmxhZ3MgPSAwOwor
CQkJCWlmIChyY3YucmN2X2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsKKwkJCQkJc25kX2luZm8u
c25kX2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOworCQkJCX0KKwkJCQlzbmRfaW5mby5zbmRfcHBp
ZCA9IHJjdi5yY3ZfcHBpZDsKKwkJCQlzbmRfaW5mby5zbmRfY29udGV4dCA9IDA7CisJCQkJc25k
X2luZm8uc25kX2Fzc29jX2lkID0gcmN2LnJjdl9hc3NvY19pZDsKKwkJCQlpZiAodXNyc2N0cF9z
ZW5kdihzb2NrLCBkYXRhLCBkYXRhbGVuLCBOVUxMLCAwLCAmc25kX2luZm8sIHNpemVvZihzdHJ1
Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZPLCAwKSA8IDApIHsKKwkJCQkJcGVy
cm9yKCJzY3RwX3NlbmR2Iik7CisJCQkJfQorCQkJfQorCQl9CisJCWZyZWUoZGF0YSk7CisJfQor
CXJldHVybiAoMSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorewor
CXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworCXN0cnVj
dCBzY3RwX3VkcGVuY2FwcyBlbmNhcHM7CisJc3RydWN0IHNjdHBfZXZlbnQgZXZlbnQ7CisJdWlu
dDE2X3QgZXZlbnRfdHlwZXNbXSA9IHtTQ1RQX0FTU09DX0NIQU5HRSwKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfUEVFUl9BRERSX0NIQU5HRSwKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNDVFBfUkVNT1RFX0VSUk9SLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NU
UF9TSFVURE9XTl9FVkVOVCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQURBUFRB
VElPTl9JTkRJQ0FUSU9OLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9QQVJUSUFM
X0RFTElWRVJZX0VWRU5UfTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSBhdjsKKwljb25zdCBpbnQgb24gPSAxOworCXNzaXplX3QgbjsKKwlpbnQgZmxhZ3M7CisJ
c29ja2xlbl90IGZyb21fbGVuOworCWNoYXIgYnVmZmVyW0JVRkZFUl9TSVpFXTsKKwljaGFyIG5h
bWVbSU5FVDZfQUREUlNUUkxFTl07CisJc29ja2xlbl90IGluZm9sZW47CisJc3RydWN0IHNjdHBf
cmN2aW5mbyByY3ZfaW5mbzsKKwl1bnNpZ25lZCBpbnQgaW5mb3R5cGU7CisKKwlpZiAoYXJnYyA+
IDEpIHsKKwkJdXNyc2N0cF9pbml0KGF0b2koYXJndlsxXSksIE5VTEwsIGRlYnVnX3ByaW50Zl9z
dGFjayk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9pbml0KDk4OTksIE5VTEwsIGRlYnVnX3ByaW50
Zl9zdGFjayk7CisJfQorI2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0
cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0
X3NjdHBfYmxhY2tob2xlKDIpOworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX25vX2NzdW1fb25f
bG9vcGJhY2soMCk7CisKKwlpZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVUNiwgU09D
S19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCwgdXNlX2NiP3JlY2VpdmVfY2I6TlVMTCwgTlVMTCwg
MCwgTlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOworCX0KKwlp
ZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9JX1dBTlRfTUFQ
UEVEX1Y0X0FERFIsIChjb25zdCB2b2lkKikmb24sIChzb2NrbGVuX3Qpc2l6ZW9mKGludCkpIDwg
MCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRf
QUREUiIpOworCX0KKwltZW1zZXQoJmF2LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUpKTsKKwlhdi5hc3NvY19pZCA9IFNDVFBfQUxMX0FTU09DOworCWF2LmFzc29jX3ZhbHVlID0g
NDc7CisKKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9D
T05URVhULCAoY29uc3Qgdm9pZCopJmF2LCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX0NP
TlRFWFQiKTsKKwl9CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAs
IFNDVFBfUkVDVlJDVklORk8sICZvbiwgc2l6ZW9mKGludCkpIDwgMCkgeworCQlwZXJyb3IoInVz
cnNjdHBfc2V0c29ja29wdCBTQ1RQX1JFQ1ZSQ1ZJTkZPIik7CisJfQorCWlmIChhcmdjID4gMikg
eworCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpOwor
CQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZfSU5FVDY7CisJCWVuY2Fwcy5zdWVf
cG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNv
Y2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9p
ZCopJmVuY2FwcywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAw
KSB7CisJCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBT
X1BPUlQiKTsKKwkJfQorCX0KKwltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YoZXZlbnQpKTsKKwll
dmVudC5zZV9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOworCWV2ZW50LnNlX29uID0gMTsK
Kwlmb3IgKGkgPSAwOyBpIDwgKHVuc2lnbmVkIGludCkoc2l6ZW9mKGV2ZW50X3R5cGVzKS9zaXpl
b2YodWludDE2X3QpKTsgaSsrKSB7CisJCWV2ZW50LnNlX3R5cGUgPSBldmVudF90eXBlc1tpXTsK
KwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfRVZFTlQs
ICZldmVudCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50KSkgPCAwKSB7CisJCQlwZXJyb3IoInVz
cnNjdHBfc2V0c29ja29wdCBTQ1RQX0VWRU5UIik7CisJCX0KKwl9CisJbWVtc2V0KCh2b2lkICop
JmFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYgSEFWRV9TSU42
X0xFTgorCWFkZHIuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5k
aWYKKwlhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJYWRkci5zaW42X3BvcnQgPSBodG9u
cyhQT1JUKTsKKwlhZGRyLnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworCWlmICh1c3JzY3RwX2Jp
bmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCX0KKwlpZiAodXNyc2N0
cF9saXN0ZW4oc29jaywgMSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKKwl9
CisJd2hpbGUgKDEpIHsKKwkJaWYgKHVzZV9jYikgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcChT
TEVFUCAqIDEwMDApOworI2Vsc2UKKwkJc2xlZXAoU0xFRVApOworI2VuZGlmCisJCX0gZWxzZSB7
CisJCQlmcm9tX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwor
CQkJZmxhZ3MgPSAwOworCQkJaW5mb2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3Rw
X3JjdmluZm8pOworCQkJbiA9IHVzcnNjdHBfcmVjdnYoc29jaywgKHZvaWQqKWJ1ZmZlciwgQlVG
RkVSX1NJWkUsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsICZmcm9tX2xlbiwgKHZvaWQgKikm
cmN2X2luZm8sCisJCQkgICAgICAgICAgICAgICAgICAmaW5mb2xlbiwgJmluZm90eXBlLCAmZmxh
Z3MpOworCQkJaWYgKG4gPiAwKSB7CisJCQkJaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikg
eworCQkJCQlwcmludGYoIk5vdGlmaWNhdGlvbiBvZiBsZW5ndGggJWxsdSByZWNlaXZlZC5cbiIs
ICh1bnNpZ25lZCBsb25nIGxvbmcpbik7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKGluZm90eXBl
ID09IFNDVFBfUkVDVlZfUkNWSU5GTykgeworCQkJCQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVs
bHUgcmVjZWl2ZWQgZnJvbSAlczoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04gJXUgYW5kIFRTTiAl
dSwgUFBJRCAldSwgY29udGV4dCAldSwgY29tcGxldGUgJWQuXG4iLAorCQkJCQkJICAgICAgICAo
dW5zaWduZWQgbG9uZyBsb25nKW4sCisJCQkJCQkgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwg
JmFkZHIuc2luNl9hZGRyLCBuYW1lLCBJTkVUNl9BRERSU1RSTEVOKSwgbnRvaHMoYWRkci5zaW42
X3BvcnQpLAorCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zfc2lkLAorCQkJCQkJICAgICAgICBy
Y3ZfaW5mby5yY3Zfc3NuLAorCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3ZfdHNuLAorCQkJCQkJ
ICAgICAgICAodWludDMyX3QpbnRvaGwocmN2X2luZm8ucmN2X3BwaWQpLAorCQkJCQkJICAgICAg
ICByY3ZfaW5mby5yY3ZfY29udGV4dCwKKwkJCQkJCSAgICAgICAgKGZsYWdzICYgTVNHX0VPUikg
PyAxIDogMCk7CisJCQkJCQlpZiAoZmxhZ3MgJiBNU0dfRU9SKSB7CisJCQkJCQkJc3RydWN0IHNj
dHBfc25kaW5mbyBzbmRfaW5mbzsKKworCQkJCQkJCXNuZF9pbmZvLnNuZF9zaWQgPSByY3ZfaW5m
by5yY3Zfc2lkOworCQkJCQkJCXNuZF9pbmZvLnNuZF9mbGFncyA9IDA7CisJCQkJCQkJaWYgKHJj
dl9pbmZvLnJjdl9mbGFncyAmIFNDVFBfVU5PUkRFUkVEKSB7CisJCQkJCQkJCXNuZF9pbmZvLnNu
ZF9mbGFncyB8PSBTQ1RQX1VOT1JERVJFRDsKKwkJCQkJCQl9CisJCQkJCQkJc25kX2luZm8uc25k
X3BwaWQgPSByY3ZfaW5mby5yY3ZfcHBpZDsKKwkJCQkJCQlzbmRfaW5mby5zbmRfY29udGV4dCA9
IDA7CisJCQkJCQkJc25kX2luZm8uc25kX2Fzc29jX2lkID0gcmN2X2luZm8ucmN2X2Fzc29jX2lk
OworCQkJCQkJCWlmICh1c3JzY3RwX3NlbmR2KHNvY2ssIGJ1ZmZlciwgKHNpemVfdCluLCBOVUxM
LCAwLCAmc25kX2luZm8sIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLCBT
Q1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgeworCQkJCQkJCQlwZXJyb3IoInNjdHBfc2VuZHYi
KTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQlwcmludGYoIk1zZyBv
ZiBsZW5ndGggJWxsdSByZWNlaXZlZCBmcm9tICVzOiV1LCBjb21wbGV0ZSAlZC5cbiIsCisJCQkJ
CQkgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbiwKKwkJCQkJCSAgICAgICAgaW5ldF9udG9w
KEFGX0lORVQ2LCAmYWRkci5zaW42X2FkZHIsIG5hbWUsIElORVQ2X0FERFJTVFJMRU4pLCBudG9o
cyhhZGRyLnNpbjZfcG9ydCksCisJCQkJCQkgICAgICAgIChmbGFncyAmIE1TR19FT1IpID8gMSA6
IDApOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor
CX0KKwl1c3JzY3RwX2Nsb3NlKHNvY2spOworCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDAp
IHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoU0xFRVAgKiAxMDAwKTsKKyNlbHNlCisJCXNsZWVw
KFNMRUVQKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvcHJvZ3JhbXMvZWNob19zZXJ2ZXJfdXBjYWxsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9lY2hv
X3NlcnZlcl91cGNhbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzM0Mzc4NTE2OTA4ZjJlM2M0YmU1Yzg4N2Uz
ZWVhN2IzNDA5ZDIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWNob19z
ZXJ2ZXJfdXBjYWxsLmMKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
CUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFVzYWdlOiBkaXNjYXJkX3NlcnZl
cl91cGNhbGwgW2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2VuY2Fwc19wb3J0XQorICovCisK
KyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNpbmNsdWRl
IDxpby5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8
c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2lu
ZXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHVzcnNjdHAuaD4KKyNpbmNsdWRlICJwcm9ncmFtc19o
ZWxwZXIuaCIKKworI2RlZmluZSBCVUZGRVJTSVpFIDEwMjQwCisjZGVmaW5lIFBPUlQgNworCitz
dGF0aWMgdm9pZAoraGFuZGxlX3VwY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB2b2lkICpkYXRh
LCBpbnQgZmxncykKK3sKKwljaGFyIG5hbWVidWZbSU5FVDZfQUREUlNUUkxFTl07CisJY29uc3Qg
Y2hhciAqbmFtZTsKKwl1aW50MTZfdCBwb3J0OworCWNoYXIgKmJ1ZjsKKwlpbnQgZXZlbnRzOwor
CisJd2hpbGUgKChldmVudHMgPSB1c3JzY3RwX2dldF9ldmVudHMoc29jaykpICYmIChldmVudHMg
JiBTQ1RQX0VWRU5UX1JFQUQpKSB7CisJCXN0cnVjdCBzY3RwX3JlY3Z2X3JuIHJuOworCQlzc2l6
ZV90IG47CisJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7CisJCWJ1ZiA9IG1hbGxvYyhC
VUZGRVJTSVpFKTsKKwkJaW50IGZsYWdzID0gMDsKKwkJc29ja2xlbl90IGxlbiA9IChzb2NrbGVu
X3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKKwkJdW5zaWduZWQgaW50IGluZm90
eXBlID0gMDsKKwkJc29ja2xlbl90IGluZm9sZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZf
cm4pOworCQltZW1zZXQoJnJuLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4pKTsKKwkJ
biA9IHVzcnNjdHBfcmVjdnYoc29jaywgYnVmLCBCVUZGRVJTSVpFLCAoc3RydWN0IHNvY2thZGRy
ICopICZhZGRyLCAmbGVuLCAodm9pZCAqKSZybiwKKwkJICAgICAgICAgICAgICZpbmZvbGVuLCAm
aW5mb3R5cGUsICZmbGFncyk7CisJCWlmIChuIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX3Jl
Y3Z2Iik7CisJCX0KKwkJaWYgKG4gPT0gMCkgeworCQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJ
CXJldHVybjsKKwkJfQorCQlpZiAobiA+IDApIHsKKwkJCWlmIChmbGFncyAmIE1TR19OT1RJRklD
QVRJT04pIHsKKwkJCQlwcmludGYoIk5vdGlmaWNhdGlvbiBvZiBsZW5ndGggJWQgcmVjZWl2ZWQu
XG4iLCAoaW50KW4pOworCQkJfSBlbHNlIHsKKyNpZmRlZiBfV0lOMzIKKwkJCQlfd3JpdGUoX2Zp
bGVubyhzdGRvdXQpLCBidWYsICh1bnNpZ25lZCBpbnQpbik7CisjZWxzZQorCQkJCWlmICh3cml0
ZShmaWxlbm8oc3Rkb3V0KSwgYnVmLCBuKSA8IDApIHsKKwkJCQkJcGVycm9yKCJ3cml0ZSIpOwor
CQkJCX0KKyNlbmRpZgorCQkJCXN3aXRjaCAoYWRkci5zc19mYW1pbHkpIHsKKyNpZmRlZiBJTkVU
CisJCQkJCWNhc2UgQUZfSU5FVDogeworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luIGFkZHI0Owor
CQkJCQkJbWVtY3B5KCZhZGRyNCwgKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZhZGRyLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSk7CisJCQkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQsICZh
ZGRyNC5zaW5fYWRkciwgbmFtZWJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCQkJCXBvcnQgPSBu
dG9ocyhhZGRyNC5zaW5fcG9ydCk7CisJCQkJCQlicmVhazsKKwkJCQkJCX0KKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJCQkJCWNhc2UgQUZfSU5FVDY6IHsKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9p
bjYgYWRkcjY7CisJCQkJCQltZW1jcHkoJmFkZHI2LCAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZh
ZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQkJCQkJbmFtZSA9IGluZXRfbnRv
cChBRl9JTkVUNiwgJmFkZHI2LnNpbjZfYWRkciwgbmFtZWJ1ZiwgSU5FVDZfQUREUlNUUkxFTiks
CisJCQkJCQlwb3J0ID0gbnRvaHMoYWRkcjYuc2luNl9wb3J0KTsKKwkJCQkJCWJyZWFrOworCQkJ
CQkJfQorI2VuZGlmCisJCQkJCWRlZmF1bHQ6CisJCQkJCQluYW1lID0gTlVMTDsKKwkJCQkJCXBv
cnQgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQlpZiAobmFtZSA9PSBOVUxMKSB7
CisJCQkJCQlwcmludGYoImluZXRfbnRvcCBmYWlsZWRcbiIpOworCQkJCQkJZnJlZShidWYpOwor
CQkJCQkJcmV0dXJuOworCQkJCQl9CisKKwkJCQlwcmludGYoIk1zZyBvZiBsZW5ndGggJWQgcmVj
ZWl2ZWQgZnJvbSAlczoldSBvbiBzdHJlYW0gJWQgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJ
RCAldSwgY29udGV4dCAldS5cbiIsCisJCQkJICAgICAgIChpbnQpbiwKKwkJCQkgICAgICAgbmFt
ZWJ1ZiwKKwkJCQkgICAgICAgcG9ydCwKKwkJCQkgICAgICAgcm4ucmVjdnZfcmN2aW5mby5yY3Zf
c2lkLAorCQkJCSAgICAgICBybi5yZWN2dl9yY3ZpbmZvLnJjdl9zc24sCisJCQkJICAgICAgIHJu
LnJlY3Z2X3JjdmluZm8ucmN2X3RzbiwKKwkJCQkgICAgICAgKHVpbnQzMl90KW50b2hsKHJuLnJl
Y3Z2X3JjdmluZm8ucmN2X3BwaWQpLAorCQkJCSAgICAgICBybi5yZWN2dl9yY3ZpbmZvLnJjdl9j
b250ZXh0KTsKKwkJCQlpZiAoZmxhZ3MgJiBNU0dfRU9SKSB7CisJCQkJCXN0cnVjdCBzY3RwX3Nu
ZGluZm8gc25kX2luZm87CisKKwkJCQkJc25kX2luZm8uc25kX3NpZCA9IHJuLnJlY3Z2X3Jjdmlu
Zm8ucmN2X3NpZDsKKwkJCQkJc25kX2luZm8uc25kX2ZsYWdzID0gMDsKKwkJCQkJaWYgKHJuLnJl
Y3Z2X3JjdmluZm8ucmN2X2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsKKwkJCQkJCXNuZF9pbmZv
LnNuZF9mbGFncyB8PSBTQ1RQX1VOT1JERVJFRDsKKwkJCQkJfQorCQkJCQlzbmRfaW5mby5zbmRf
cHBpZCA9IHJuLnJlY3Z2X3JjdmluZm8ucmN2X3BwaWQ7CisJCQkJCXNuZF9pbmZvLnNuZF9jb250
ZXh0ID0gMDsKKwkJCQkJc25kX2luZm8uc25kX2Fzc29jX2lkID0gcm4ucmVjdnZfcmN2aW5mby5y
Y3ZfYXNzb2NfaWQ7CisJCQkJCWlmICh1c3JzY3RwX3NlbmR2KHNvY2ssIGJ1ZiwgKHNpemVfdCkg
biwgTlVMTCwgMCwgJnNuZF9pbmZvLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBf
U0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCQkJCQlwZXJyb3IoInNjdHBfc2VuZHYiKTsKKwkJ
CQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlmcmVlKGJ1Zik7CisJfQorCXJldHVybjsKK30KKwor
aW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHNvY2tldCAqc29j
azsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVu
Y2FwczsKKwlzdHJ1Y3Qgc2N0cF9ldmVudCBldmVudDsKKwl1aW50MTZfdCBldmVudF90eXBlc1td
ID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9Q
RUVSX0FERFJfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9SRU1PVEVf
RVJST1IsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NIVVRET1dOX0VWRU5ULAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04sCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlR9Owor
CXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGF2OworCWNvbnN0IGlu
dCBvbiA9IDE7CisKKwlpZiAoYXJnYyA+IDEpIHsKKwkJdXNyc2N0cF9pbml0KGF0b2koYXJndlsx
XSksIE5VTEwsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9pbml0
KDk4OTksIE5VTEwsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJfQorI2lmZGVmIFNDVFBfREVCVUcK
Kwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOworI2Vu
ZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCXVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX25vX2NzdW1fb25fbG9vcGJhY2soMCk7CisKKwlpZiAoKHNvY2sgPSB1c3Jz
Y3RwX3NvY2tldChBRl9JTkVUNiwgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCwgTlVMTCwg
TlVMTCwgMCwgTlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOwor
CX0KKwl1c3JzY3RwX3NldF9ub25fYmxvY2tpbmcoc29jaywgMSk7CisJaWYgKHVzcnNjdHBfc2V0
c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSLCAo
Y29uc3Qgdm9pZCopJm9uLCAoc29ja2xlbl90KXNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9y
KCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIiKTsKKwl9CisJ
bWVtc2V0KCZhdiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSk7CisJYXYuYXNz
b2NfaWQgPSBTQ1RQX0FMTF9BU1NPQzsKKwlhdi5hc3NvY192YWx1ZSA9IDQ3OworCisJaWYgKHVz
cnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfQ09OVEVYVCwgKGNvbnN0
IHZvaWQqKSZhdiwgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8
IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9DT05URVhUIik7CisJfQor
CWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFQ1ZSQ1ZJ
TkZPLCAmb24sIHNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tv
cHQgU0NUUF9SRUNWUkNWSU5GTyIpOworCX0KKwlpZiAoYXJnYyA+IDIpIHsKKwkJbWVtc2V0KCZl
bmNhcHMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9h
ZGRyZXNzLnNzX2ZhbWlseSA9IEFGX0lORVQ2OworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhh
dG9pKGFyZ3ZbMl0pKTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1ND
VFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChz
b2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9y
KCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUIik7CisJCX0K
Kwl9CisJbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisJZXZlbnQuc2VfYXNzb2Nf
aWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsKKwlldmVudC5zZV9vbiA9IDE7CisJZm9yIChpID0gMDsg
aSA8ICh1bnNpZ25lZCBpbnQpKHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVpbnQxNl90KSk7
IGkrKykgeworCQlldmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07CisJCWlmICh1c3JzY3Rw
X3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9ldmVudCkpIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tv
cHQgU0NUUF9FVkVOVCIpOworCQl9CisJfQorCisJdXNyc2N0cF9zZXRfdXBjYWxsKHNvY2ssIGhh
bmRsZV91cGNhbGwsIE5VTEwpOworCisJbWVtc2V0KCh2b2lkICopJmFkZHIsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCWFkZHIuc2luNl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwlhZGRyLnNpbjZfZmFt
aWx5ID0gQUZfSU5FVDY7CisJYWRkci5zaW42X3BvcnQgPSBodG9ucyhQT1JUKTsKKwlhZGRyLnNp
bjZfYWRkciA9IGluNmFkZHJfYW55OworCWlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBz
b2NrYWRkciAqKSZhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgeworCQlw
ZXJyb3IoInVzcnNjdHBfYmluZCIpOworCX0KKwlpZiAodXNyc2N0cF9saXN0ZW4oc29jaywgMSkg
PCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKKwl9CisJd2hpbGUgKDEpIHsKKyNp
ZmRlZiBfV0lOMzIKKwkJU2xlZXAoMSoxMDAwKTsKKyNlbHNlCisJCXNsZWVwKDEpOworI2VuZGlm
CisJfQorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3Jf
Y2xpZW50LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3JfY2xpZW50LmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTBl
NTUzZWRlYjkzZThkYTQ1OTdjYjMyM2JjNjVjODZkMTY1YWRkOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9jbGllbnQuYwpAQCAtMCwwICsxLDMxOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwgVHVleGVuCisgKgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2pl
Y3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUK
KyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX1dJ
TjMyCisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisjZW5kaWYKKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1
ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmbmRlZiBfV0lOMzIKKyNp
bmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUg
PGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgor
I2luY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1
ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+CisjaW5jbHVkZSAi
cHJvZ3JhbXNfaGVscGVyLmgiCisKKyNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFICgxPDwxNikKKyNk
ZWZpbmUgQlVGRkVSX1NJWkUgODAKKyNkZWZpbmUgRElTQ0FSRF9QUElEIDM5CisKKyNpZmRlZiBf
V0lOMzIKK3N0YXRpYyBEV09SRCBXSU5BUEkKKyNlbHNlCitzdGF0aWMgdm9pZCAqCisjZW5kaWYK
K2hhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKK3sKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgKmZk
cDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKwljaGFyICpkdW1wX2J1ZjsKKwlzc2l6ZV90
IGxlbmd0aDsKKwljaGFyIGJ1ZltNQVhfUEFDS0VUX1NJWkVdOworCisjaWZkZWYgX1dJTjMyCisJ
ZmRwID0gKFNPQ0tFVCAqKWFyZzsKKyNlbHNlCisJZmRwID0gKGludCAqKWFyZzsKKyNlbmRpZgor
CWZvciAoOzspIHsKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisJCXB0aHJlYWRfdGVzdGNhbmNl
bCgpOworI2VuZGlmCisJCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJWkUs
IDApOworCQlpZiAobGVuZ3RoID4gMCkgeworCQkJaWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVt
cHBhY2tldChidWYsIChzaXplX3QpbGVuZ3RoLCBTQ1RQX0RVTVBfSU5CT1VORCkpICE9IE5VTEwp
IHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgZHVtcF9idWYpOworCQkJCXVzcnNjdHBfZnJl
ZWR1bXBidWZmZXIoZHVtcF9idWYpOworCQkJfQorCQkJdXNyc2N0cF9jb25uaW5wdXQoZmRwLCBi
dWYsIChzaXplX3QpbGVuZ3RoLCAwKTsKKwkJfQorCX0KKyNpZmRlZiBfV0lOMzIKKwlyZXR1cm4g
MDsKKyNlbHNlCisJcmV0dXJuIChOVUxMKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50Citjb25u
X291dHB1dCh2b2lkICphZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9z
LCB1aW50OF90IHNldF9kZikKK3sKKwljaGFyICpkdW1wX2J1ZjsKKyNpZmRlZiBfV0lOMzIKKwlT
T0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgor
CWZkcCA9IChTT0NLRVQgKilhZGRyOworI2Vsc2UKKwlmZHAgPSAoaW50ICopYWRkcjsKKyNlbmRp
ZgorCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmLCBsZW5ndGgsIFNDVFBf
RFVNUF9PVVRCT1VORCkpICE9IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIGR1bXBf
YnVmKTsKKwkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1Zik7CisJfQorI2lmZGVmIF9X
SU4zMgorCWlmIChzZW5kKCpmZHAsIGJ1ZiwgKGludClsZW5ndGgsIDApID09IFNPQ0tFVF9FUlJP
UikgeworCQlyZXR1cm4gKFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJaWYgKHNlbmQoKmZk
cCwgYnVmLCBsZW5ndGgsIDApIDwgMCkgeworCQlyZXR1cm4gKGVycm5vKTsKKyNlbmRpZgorCX0g
ZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitzdGF0aWMgaW50CityZWNlaXZlX2NiKHN0
cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEs
CisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50
IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKK3sKKworCWlmIChkYXRhKSB7CisJCWlmIChmbGFncyAm
IE1TR19OT1RJRklDQVRJT04pIHsKKwkJCXByaW50ZigiTm90aWZpY2F0aW9uIG9mIGxlbmd0aCAl
ZCByZWNlaXZlZC5cbiIsIChpbnQpZGF0YWxlbik7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIk1z
ZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgdmlhICVwOiV1IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAl
dSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LlxuIiwKKwkJCSAgICAgICAoaW50KWRh
dGFsZW4sCisJCQkgICAgICAgYWRkci5zY29ubi5zY29ubl9hZGRyLAorCQkJICAgICAgIG50b2hz
KGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCksCisJCQkgICAgICAgcmN2LnJjdl9zaWQsCisJCQkgICAg
ICAgcmN2LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJCQkgICAgICAgKHVpbnQz
Ml90KW50b2hsKHJjdi5yY3ZfcHBpZCksCisJCQkgICAgICAgcmN2LnJjdl9jb250ZXh0KTsKKwkJ
fQorCQlmcmVlKGRhdGEpOworCX0gZWxzZSB7CisJCXVzcnNjdHBfZGVyZWdpc3Rlcl9hZGRyZXNz
KHVscF9pbmZvKTsKKwkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwl9CisJcmV0dXJuICgxKTsKK30K
KworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHNvY2thZGRy
X2luIHNpbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKKyNpZmRlZiBfV0lOMzIKKwlT
T0NLRVQgZmQ7CisjZWxzZQorCWludCBmZCwgcmM7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0ICpz
OworI2lmZGVmIF9XSU4zMgorCUhBTkRMRSB0aWQ7CisjZWxzZQorCXB0aHJlYWRfdCB0aWQ7Cisj
ZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87CisJY2hhciBidWZmZXJbQlVGRkVS
X1NJWkVdOworI2lmZGVmIF9XSU4zMgorCVdTQURBVEEgd3NhRGF0YTsKKyNlbmRpZgorCisJaWYg
KGFyZ2MgPCA0KSB7CisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IHRoaXMgcHJvZ3JhbSByZXF1
aXJlcyA0IGFyZ3VtZW50cyFcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisjaWZk
ZWYgX1dJTjMyCisJaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwyKSwgJndzYURhdGEpICE9IDAp
IHsKKwkJZnByaW50ZihzdGRlcnIsICJXU0FTdGFydHVwIGZhaWxlZFxuIik7CisJCWV4aXQgKEVY
SVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJdXNyc2N0cF9pbml0KDAsIGNvbm5fb3V0cHV0LCBk
ZWJ1Z19wcmludGZfc3RhY2spOworCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBVRFAgc29ja2V0ICov
CisjaWZkZWYgX1dJTjMyCisJaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJ
UFBST1RPX1VEUCkpID09IElOVkFMSURfU09DS0VUKSB7CisJCWZwcmludGYoc3RkZXJyLCAic29j
a2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwg
U09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKKwkJcGVycm9yKCJzb2NrZXQiKTsKKwkJ
ZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCW1lbXNldCgmc2luLCAwLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSk7CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVm
IEhBVkVfU0lOX0xFTgorCXNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisjZW5kaWYKKwlzaW4uc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwlpZiAoIWlu
ZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmc2luLnNpbl9hZGRyLnNfYWRkcikpeworCQlmcHJp
bnRmKHN0ZGVyciwgImVycm9yOiBpbnZhbGlkIGFkZHJlc3NcbiIpOworCQlleGl0KEVYSVRfRkFJ
TFVSRSk7CisJfQorI2lmZGVmIF9XSU4zMgorCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRy
ICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgewor
CQlmcHJpbnRmKHN0ZGVyciwgImJpbmQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdl
dExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKGJp
bmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KSkgPCAwKSB7CisJCXBlcnJvcigiYmluZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQor
I2VuZGlmCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlz
aW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc2luLnNpbl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNpbi5zaW5fcG9ydCA9
IGh0b25zKGF0b2koYXJndls0XSkpOworCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbM10s
ICZzaW4uc2luX2FkZHIuc19hZGRyKSl7CisJCXByaW50ZigiZXJyb3I6IGludmFsaWQgYWRkcmVz
c1xuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjaWZkZWYgX1dJTjMyCisJaWYgKGNv
bm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY29ubmVjdCgpIGZh
aWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRf
RkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAq
KSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJjb25u
ZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBTQ1RQX0RF
QlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsK
KyNlbmRpZgorCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2Vjbl9lbmFibGUoMCk7CisJdXNyc2N0
cF9yZWdpc3Rlcl9hZGRyZXNzKCh2b2lkICopJmZkKTsKKyNpZmRlZiBfV0lOMzIKKwlpZiAoKHRp
ZCA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkLCAw
LCBOVUxMKSkgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNyZWF0ZVRocmVhZCgpIGZh
aWxlZCB3aXRoIGVycm9yOiAlbHVcbiIsIEdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZB
SUxVUkUpOworCX0KKyNlbHNlCisJaWYgKChyYyA9IHB0aHJlYWRfY3JlYXRlKCZ0aWQsIE5VTEws
ICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmQpKSAhPSAwKSB7CisJCWZwcmludGYoc3RkZXJy
LCAicHRocmVhZF9jcmVhdGU6ICVzXG4iLCBzdHJlcnJvcihyYykpOworCQlleGl0KEVYSVRfRkFJ
TFVSRSk7CisJfQorI2VuZGlmCisJaWYgKChzID0gdXNyc2N0cF9zb2NrZXQoQUZfQ09OTiwgU09D
S19TVFJFQU0sIElQUFJPVE9fU0NUUCwgcmVjZWl2ZV9jYiwgTlVMTCwgMCwgJmZkKSkgPT0gTlVM
TCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJfQorCisJbWVtc2V0KCZzY29ubiwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5fZmFtaWx5ID0g
QUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9wb3J0ID0gaHRv
bnMoMCk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9IE5VTEw7CisJaWYgKHVzcnNjdHBfYmluZChzLCAo
c3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8
IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwl9CisKKwltZW1zZXQoJnNjb25uLCAw
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9mYW1pbHkgPSBB
Rl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3BvcnQgPSBodG9u
cyg1MDAxKTsKKwlzY29ubi5zY29ubl9hZGRyID0gJmZkOworCWlmICh1c3JzY3RwX2Nvbm5lY3Qo
cywgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25u
KSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9jb25uZWN0Iik7CisJfQorCW1lbXNldChidWZm
ZXIsICdBJywgQlVGRkVSX1NJWkUpOworCXNuZGluZm8uc25kX3NpZCA9IDE7CisJc25kaW5mby5z
bmRfZmxhZ3MgPSAwOworCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubChESVNDQVJEX1BQSUQpOwor
CXNuZGluZm8uc25kX2NvbnRleHQgPSAwOworCXNuZGluZm8uc25kX2Fzc29jX2lkID0gMDsKKwlp
ZiAodXNyc2N0cF9zZW5kdihzLCBidWZmZXIsIEJVRkZFUl9TSVpFLCBOVUxMLCAwLCAodm9pZCAq
KSZzbmRpbmZvLAorCSAgICAgICAgICAgICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBz
Y3RwX3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgeworCQlwZXJyb3IoInVz
cnNjdHBfc2VuZHYiKTsKKwl9CisKKwl1c3JzY3RwX3NodXRkb3duKHMsIFNIVVRfV1IpOworCXdo
aWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMTAw
MCk7CisjZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRpZgorCX0KKyNpZmRlZiBfV0lOMzIKKwlUZXJt
aW5hdGVUaHJlYWQodGlkLCAwKTsKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpZCwgSU5GSU5JVEUp
OworCWlmIChjbG9zZXNvY2tldChmZCkgPT0gU09DS0VUX0VSUk9SKSB7CisJCWZwcmludGYoc3Rk
ZXJyLCAiY2xvc2Vzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RF
cnJvcigpKTsKKwl9CisJV1NBQ2xlYW51cCgpOworI2Vsc2UKKwlwdGhyZWFkX2NhbmNlbCh0aWQp
OworCXB0aHJlYWRfam9pbih0aWQsIE5VTEwpOworCWlmIChjbG9zZShmZCkgPCAwKSB7CisJCXBl
cnJvcigiY2xvc2UiKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvcHJvZ3JhbXMvZWtyX2xvb3AuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9sb29w
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjVmZGI0YTcwM2QzZjc3MzY2NTllYTFlOGQ0M2I5Yzg2ZmE2YzE1Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9sb29wLmMKQEAgLTAsMCAr
MSw2NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgor
ICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNU
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQ
Uk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisg
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAor
ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisg
Ki8KKworLyoKKyAqIFVzYWdlOiBla3JfbG9vcCBbY2xpZW50X3BvcnRdIFtzZXJ2ZXJfcG9ydF0g
W2NyYzMyYyBvZmZsb2FkaW5nIDwwLzE+XQorICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUg
X0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+
CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHN5cy9z
b2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+
CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisjZWxzZQorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAu
aD4KKyNlbmRpZgorI2luY2x1ZGUgPHVzcnNjdHAuaD4KKyNpbmNsdWRlICJwcm9ncmFtc19oZWxw
ZXIuaCIKKworI2RlZmluZSBNQVhfUEFDS0VUX1NJWkUgKDE8PDE2KQorI2RlZmluZSBMSU5FX0xF
TkdUSCAoMTw8MjApCisjZGVmaW5lIERJU0NBUkRfUFBJRCAzOQorI2RlZmluZSBOVU1CRVJfT0Zf
U1RFUFMgMTAKKworc3RhdGljIHVpbnQ4X3QgY3JjMzJjX29mZmxvYWRpbmcgPSAwOworCisjaWZk
ZWYgX1dJTjMyCitzdGF0aWMgRFdPUkQgV0lOQVBJCisjZWxzZQorc3RhdGljIHZvaWQgKgorI2Vu
ZGlmCitoYW5kbGVfcGFja2V0cyh2b2lkICphcmcpCit7CisjaWZkZWYgX1dJTjMyCisJU09DS0VU
ICpmZHA7CisjZWxzZQorCWludCAqZmRwOworI2VuZGlmCisJY2hhciAqZHVtcF9idWY7CisJc3Ry
dWN0IHNjdHBfY29tbW9uX2hlYWRlciAqaGRyOworCXNzaXplX3QgbGVuZ3RoOworCWNoYXIgYnVm
W01BWF9QQUNLRVRfU0laRV07CisJdWludDMyX3QgcmVjZWl2ZWRfY3JjMzJjLCBjb21wdXRlZF9j
cmMzMmM7CisKKyNpZmRlZiBfV0lOMzIKKwlmZHAgPSAoU09DS0VUICopYXJnOworI2Vsc2UKKwlm
ZHAgPSAoaW50ICopYXJnOworI2VuZGlmCisJZm9yICg7OykgeworI2lmIGRlZmluZWQoX19OZXRC
U0RfXykKKwkJcHRocmVhZF90ZXN0Y2FuY2VsKCk7CisjZW5kaWYKKwkJbGVuZ3RoID0gcmVjdigq
ZmRwLCBidWYsIE1BWF9QQUNLRVRfU0laRSwgMCk7CisJCWlmIChsZW5ndGggPiAwKSB7CisJCQlp
ZiAoKGR1bXBfYnVmID0gdXNyc2N0cF9kdW1wcGFja2V0KGJ1ZiwgKHNpemVfdClsZW5ndGgsIFND
VFBfRFVNUF9JTkJPVU5EKSkgIT0gTlVMTCkgeworCQkJCS8qIGRlYnVnX3ByaW50Zl9jbGVhbigi
JXMiLCBkdW1wX2J1Zik7ICovCisJCQkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1Zik7
CisJCQl9CisKKwkJCWlmIChjcmMzMmNfb2ZmbG9hZGluZykgeworCQkJCWlmICgoc2l6ZV90KWxl
bmd0aCA+PSBzaXplb2Yoc3RydWN0IHNjdHBfY29tbW9uX2hlYWRlcikpIHsKKwkJCQkJaGRyID0g
KHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIgKilidWY7CisJCQkJCXJlY2VpdmVkX2NyYzMyYyA9
IGhkci0+Y3JjMzJjOworCQkJCQloZHItPmNyYzMyYyA9IGh0b25sKDApOworCQkJCQljb21wdXRl
ZF9jcmMzMmMgPSB1c3JzY3RwX2NyYzMyYyhidWYsIChzaXplX3QpbGVuZ3RoKTsKKwkJCQkJaGRy
LT5jcmMzMmMgPSByZWNlaXZlZF9jcmMzMmM7CisJCQkJCWlmIChyZWNlaXZlZF9jcmMzMmMgPT0g
Y29tcHV0ZWRfY3JjMzJjKSB7CisJCQkJCQl1c3JzY3RwX2Nvbm5pbnB1dChmZHAsIGJ1ZiwgKHNp
emVfdClsZW5ndGgsIDApOworCQkJCQl9IGVsc2UgeworCQkJCQkJZGVidWdfcHJpbnRmKCJXcm9u
ZyBDUkMzMmM6IGV4cGVjdGVkICUwOHggcmVjZWl2ZWQgJTA4eFxuIiwKKwkJCQkJCSAgICAgICAg
ICAgICBudG9obChjb21wdXRlZF9jcmMzMmMpLCBudG9obChyZWNlaXZlZF9jcmMzMmMpKTsKKwkJ
CQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWRlYnVnX3ByaW50ZigiUGFja2V0IHRvbyBzaG9ydDog
bGVuZ3RoICV6ZCIsIGxlbmd0aCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl1c3JzY3RwX2Nv
bm5pbnB1dChmZHAsIGJ1ZiwgKHNpemVfdClsZW5ndGgsIDApOworCQkJfQorCQl9CisJfQorI2lm
ZGVmIF9XSU4zMgorCXJldHVybiAwOworI2Vsc2UKKwlyZXR1cm4gKE5VTEwpOworI2VuZGlmCit9
CisKK3N0YXRpYyBpbnQKK2Nvbm5fb3V0cHV0KHZvaWQgKmFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90
IGxlbmd0aCwgdWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKQoreworCWNoYXIgKmR1bXBfYnVm
OworCXN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIgKmhkcjsKKyNpZmRlZiBfV0lOMzIKKwlTT0NL
RVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorCWZk
cCA9IChTT0NLRVQgKilhZGRyOworI2Vsc2UKKwlmZHAgPSAoaW50ICopYWRkcjsKKyNlbmRpZgor
CWlmIChjcmMzMmNfb2ZmbG9hZGluZyAmJiBsZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Nv
bW1vbl9oZWFkZXIpKSB7CisJCWhkciA9IChzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyICopYnVm
OworCQloZHItPmNyYzMyYyA9IHVzcnNjdHBfY3JjMzJjKGJ1ZiwgKHNpemVfdClsZW5ndGgpOwor
CX0KKworCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmLCBsZW5ndGgsIFND
VFBfRFVNUF9PVVRCT1VORCkpICE9IE5VTEwpIHsKKwkJLyogZGVidWdfcHJpbnRmX2NsZWFuKCIl
cyIsIGR1bXBfYnVmKTsgKi8KKwkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1Zik7CisJ
fQorI2lmZGVmIF9XSU4zMgorCWlmIChzZW5kKCpmZHAsIGJ1ZiwgKGludClsZW5ndGgsIDApID09
IFNPQ0tFVF9FUlJPUikgeworCQlyZXR1cm4gKFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJ
aWYgKHNlbmQoKmZkcCwgYnVmLCBsZW5ndGgsIDApIDwgMCkgeworCQlyZXR1cm4gKGVycm5vKTsK
KyNlbmRpZgorCX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitzdGF0aWMgaW50City
ZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIs
IHZvaWQgKmRhdGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3Zp
bmZvIHJjdiwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKK3sKKwlkZWJ1Z19wcmludGYoIk1T
RyBSQ1Y6ICVwIHJlY2VpdmVkIG9uIHNvY2sgPSAlcC5cbiIsIGRhdGEsICh2b2lkICopc29jayk7
CisJaWYgKGRhdGEpIHsKKwkJaWYgKChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pID09IDApIHsK
KwkJCWRlYnVnX3ByaW50ZigiTVNHIFJDVjogbGVuZ3RoICVkLCBhZGRyICVwOiV1LCBzdHJlYW0g
JXUsIFNTTiAldSwgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LCAlcyVzLlxuIiwKKwkJCSAg
ICAgICAoaW50KWRhdGFsZW4sCisJCQkgICAgICAgYWRkci5zY29ubi5zY29ubl9hZGRyLAorCQkJ
ICAgICAgIG50b2hzKGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCksCisJCQkgICAgICAgcmN2LnJjdl9z
aWQsCisJCQkgICAgICAgcmN2LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJCQkg
ICAgICAgbnRvaGwocmN2LnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQsCisJ
CQkgICAgICAgKHJjdi5yY3ZfZmxhZ3MgJiBTQ1RQX1VOT1JERVJFRCkgPyAidW5vcmRlcmVkIiA6
ICJvcmRlcmVkIiwKKwkJCQkgICAoZmxhZ3MgJiBNU0dfRU9SKSA/ICIsIEVPUiIgOiAiIik7CisJ
CX0KKwkJZnJlZShkYXRhKTsKKwl9IGVsc2UgeworCQl1c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVz
cyh1bHBfaW5mbyk7CisJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJfQorCXJldHVybiAoMSk7Cit9
CisKK3N0YXRpYyB2b2lkCitwcmludF9hZGRyZXNzZXMoc3RydWN0IHNvY2tldCAqc29jaykKK3sK
KwlpbnQgaSwgbjsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCAqYWRkcjsKKyNpZiAhZGVmaW5l
ZChIQVZFX1NBX0xFTikKKwlpbnQgc2FfbGVuOworI2VuZGlmCisKKwlkZWJ1Z19wcmludGYoIkFk
ZHJlc3NlczogIik7CisJbiA9IHVzcnNjdHBfZ2V0bGFkZHJzKHNvY2ssIDAsICZhZGRycyk7CisJ
YWRkciA9IGFkZHJzOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3dpdGNoIChhZGRy
LT5zYV9mYW1pbHkpIHsKKwkJY2FzZSBBRl9JTkVUOgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJf
aW4gKnNpbjsKKwkJCWNoYXIgYnVmW0lORVRfQUREUlNUUkxFTl07CisJCQljb25zdCBjaGFyICpu
YW1lOworCisJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJCW5hbWUgPSBp
bmV0X250b3AoQUZfSU5FVCwgJnNpbi0+c2luX2FkZHIsIGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsK
KwkJCWRlYnVnX3ByaW50Zl9jbGVhbigiJXM6JWQiLCBuYW1lLCBudG9ocyhzaW4tPnNpbl9wb3J0
KSk7CisjaWYgIWRlZmluZWQoSEFWRV9TQV9MRU4pCisJCQlzYV9sZW4gPSAoaW50KXNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCQljYXNlIEFGX0lO
RVQ2OgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCQkJY2hhciBidWZbSU5F
VDZfQUREUlNUUkxFTl07CisJCQljb25zdCBjaGFyICpuYW1lOworCisJCQlzaW42ID0gKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNp
bjYtPnNpbjZfYWRkciwgYnVmLCBJTkVUNl9BRERSU1RSTEVOKTsKKwkJCWRlYnVnX3ByaW50Zl9j
bGVhbigiJXM6JWQiLCBuYW1lLCBudG9ocyhzaW42LT5zaW42X3BvcnQpKTsKKyNpZiAhZGVmaW5l
ZChIQVZFX1NBX0xFTikKKwkJCXNhX2xlbiA9IChpbnQpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCQljYXNlIEFGX0NPTk46CisJCXsKKwkJCXN0
cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRy
X2Nvbm4gKilhZGRyOworCQkJZGVidWdfcHJpbnRmX2NsZWFuKCIlcDolZCIsIHNjb25uLT5zY29u
bl9hZGRyLCBudG9ocyhzY29ubi0+c2Nvbm5fcG9ydCkpOworI2lmICFkZWZpbmVkKEhBVkVfU0Ff
TEVOKQorCQkJc2FfbGVuID0gKGludClzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2Vu
ZGlmCisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OgorCQkJZGVidWdfcHJpbnRmX2NsZWFuKCJV
bmtub3duIGZhbWlseTogJWQiLCBhZGRyLT5zYV9mYW1pbHkpOworI2lmICFkZWZpbmVkKEhBVkVf
U0FfTEVOKQorCQkJc2FfbGVuID0gKGludClzaXplb2Yoc3RydWN0IHNvY2thZGRyKTsKKyNlbmRp
ZgorCQkJYnJlYWs7CisJCX0KKyNpZiAhZGVmaW5lZChIQVZFX1NBX0xFTikKKwkJYWRkciA9IChz
dHJ1Y3Qgc29ja2FkZHIgKikoKGNoYXIgKilhZGRyICsgc2FfbGVuKTsKKyNlbHNlCisJCWFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBhZGRyLT5zYV9sZW4pOworI2Vu
ZGlmCisJCWlmIChpICE9IG4gLSAxKSB7CisJCQlkZWJ1Z19wcmludGZfY2xlYW4oIiwiKTsKKwkJ
fQorCX0KKwlpZiAobiA+IDApIHsKKwkJdXNyc2N0cF9mcmVlbGFkZHJzKGFkZHJzKTsKKwl9CisJ
ZGVidWdfcHJpbnRmX2NsZWFuKCI8LT4iKTsKKwluID0gdXNyc2N0cF9nZXRwYWRkcnMoc29jaywg
MCwgJmFkZHJzKTsKKwlhZGRyID0gYWRkcnM7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewor
CQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCXsKKwkJCXN0
cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCQkJY2hhciBidWZbSU5FVF9BRERSU1RSTEVOXTsKKwkJ
CWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRy
OworCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYnVmLCBJTkVU
X0FERFJTVFJMRU4pOworCQkJZGVidWdfcHJpbnRmX2NsZWFuKCIlczolZCIsIG5hbWUsIG50b2hz
KHNpbi0+c2luX3BvcnQpKTsKKyNpZiAhZGVmaW5lZChIQVZFX1NBX0xFTikKKwkJCXNhX2xlbiA9
IChpbnQpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9
CisJCWNhc2UgQUZfSU5FVDY6CisJCXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisJ
CQljaGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsKKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJ
CXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCQluYW1lID0gaW5ldF9udG9w
KEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBidWYsIElORVQ2X0FERFJTVFJMRU4pOworCQkJ
ZGVidWdfcHJpbnRmX2NsZWFuKCIlczolZCIsIG5hbWUsIG50b2hzKHNpbjYtPnNpbjZfcG9ydCkp
OworI2lmICFkZWZpbmVkKEhBVkVfU0FfTEVOKQorCQkJc2FfbGVuID0gKGludClzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgQUZfQ09O
TjoKKwkJeworCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOworCisJCQlzY29ubiA9IChz
dHJ1Y3Qgc29ja2FkZHJfY29ubiAqKWFkZHI7CisJCQlkZWJ1Z19wcmludGZfY2xlYW4oIiVwOiVk
Iiwgc2Nvbm4tPnNjb25uX2FkZHIsIG50b2hzKHNjb25uLT5zY29ubl9wb3J0KSk7CisjaWYgIWRl
ZmluZWQoSEFWRV9TQV9MRU4pCisJCQlzYV9sZW4gPSAoaW50KXNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubik7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCQlkZWJ1Z19w
cmludGZfY2xlYW4oIlVua25vd24gZmFtaWx5OiAlZCIsIGFkZHItPnNhX2ZhbWlseSk7CisjaWYg
IWRlZmluZWQoSEFWRV9TQV9MRU4pCisJCQlzYV9sZW4gPSAoaW50KXNpemVvZihzdHJ1Y3Qgc29j
a2FkZHIpOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorI2lmICFkZWZpbmVkKEhBVkVfU0FfTEVO
KQorCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2hhciAqKWFkZHIgKyBzYV9sZW4pOwor
I2Vsc2UKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIGFkZHIt
PnNhX2xlbik7CisjZW5kaWYKKwkJaWYgKGkgIT0gbiAtIDEpIHsKKwkJCWRlYnVnX3ByaW50Zl9j
bGVhbigiLCIpOworCQl9CisJfQorCWlmIChuID4gMCkgeworCQl1c3JzY3RwX2ZyZWVwYWRkcnMo
YWRkcnMpOworCX0KKwlkZWJ1Z19wcmludGZfY2xlYW4oIlxuIik7Cit9CisKK2ludAorbWFpbihp
bnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fcywgc2lu
X2M7CisJc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47CisJc3RydWN0IHNjdHBfcGFkZHJwYXJh
bXMgcGFkZHJwYXJhbXM7CisjaWZkZWYgX1dJTjMyCisJU09DS0VUIGZkX2MsIGZkX3M7CisjZWxz
ZQorCWludCBmZF9jLCBmZF9zLCByYzsKKyNlbmRpZgorCXN0cnVjdCBzb2NrZXQgKnNfYywgKnNf
cywgKnNfbDsKKyNpZmRlZiBfV0lOMzIKKwlIQU5ETEUgdGlkX2MsIHRpZF9zOworI2Vsc2UKKwlw
dGhyZWFkX3QgdGlkX2MsIHRpZF9zOworI2VuZGlmCisJaW50IGksIGosIGN1cl9idWZfc2l6ZSwg
c25kX2J1Zl9zaXplLCByY3ZfYnVmX3NpemUsIHNlbmR2X3JldHJpZXNfbGVmdDsKKwlzb2NrbGVu
X3Qgb3B0X2xlbjsKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87CisJY2hhciAqbGluZTsK
KyNpZmRlZiBfV0lOMzIKKwlXU0FEQVRBIHdzYURhdGE7CisjZW5kaWYKKwl1aW50MTZfdCBjbGll
bnRfcG9ydCA9IDk5MDA7CisJdWludDE2X3Qgc2VydmVyX3BvcnQgPSA5OTAxOworCisJaWYgKGFy
Z2MgPiAxKSB7CisJCWNsaWVudF9wb3J0ID0gYXRvaShhcmd2WzFdKTsKKwl9CisKKwlpZiAoYXJn
YyA+IDIpIHsKKwkJc2VydmVyX3BvcnQgPSBhdG9pKGFyZ3ZbMl0pOworCX0KKworCWlmIChhcmdj
ID4gMykgeworCQljcmMzMmNfb2ZmbG9hZGluZyA9IGF0b2koYXJndlszXSk7CisJfQorCisJZGVi
dWdfcHJpbnRmKCJTdGFydGluZyBwcm9ncmFtXG4iKTsKKwlkZWJ1Z19wcmludGYoIkNvbmZpZzpc
blx0Q2xpZW50IFBvcnQ6XHQlZFxuXHRTZXJ2ZXIgUG9ydDpcdCVkXG5cdENSQzMyQyBDYWxjOlx0
JXNcbiIsIGNsaWVudF9wb3J0LCBzZXJ2ZXJfcG9ydCwgY3JjMzJjX29mZmxvYWRpbmcgPyAib2Zm
bG9hZGVkIiA6ICJOT1Qgb2ZmbG9hZGVkIik7CisKKyNpZmRlZiBfV0lOMzIKKwlpZiAoV1NBU3Rh
cnR1cChNQUtFV09SRCgyLDIpLCAmd3NhRGF0YSkgIT0gMCkgeworCQlkZWJ1Z19wcmludGYoIldT
QVN0YXJ0dXAgZmFpbGVkXG4iKTsKKwkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYK
Kwl1c3JzY3RwX2luaXQoMCwgY29ubl9vdXRwdXQsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisKKyNp
ZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9E
RUJVR19OT05FKTsKKyNlbmRpZgorCisJaWYgKGNyYzMyY19vZmZsb2FkaW5nKSB7CisJCXVzcnNj
dHBfZW5hYmxlX2NyYzMyY19vZmZsb2FkKCk7CisJfQorCisJLyogc2V0IHVwIGEgY29ubmVjdGVk
IFVEUCBzb2NrZXQgKi8KKyNpZmRlZiBfV0lOMzIKKwlpZiAoKGZkX2MgPSBzb2NrZXQoQUZfSU5F
VCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworCQlkZWJ1
Z19wcmludGYoInNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVy
cm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmICgoZmRfcyA9IHNvY2tldChB
Rl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpID09IElOVkFMSURfU09DS0VUKSB7CisJ
CWRlYnVnX3ByaW50Zigic29ja2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRM
YXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmICgoZmRf
YyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpIDwgMCkgeworCQlw
ZXJyb3IoInNvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmICgoZmRfcyA9
IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpIDwgMCkgeworCQlwZXJy
b3IoInNvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJbWVtc2V0
KCZzaW5fYywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCXNpbl9jLnNpbl9mYW1p
bHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCXNpbl9jLnNpbl9sZW4gPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNpbl9jLnNpbl9wb3J0ID0gaHRvbnMo
Y2xpZW50X3BvcnQpOworCXNpbl9jLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09Q
QkFDSyk7CisJbWVtc2V0KCZzaW5fcywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwor
CXNpbl9zLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCXNpbl9z
LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNpbl9zLnNp
bl9wb3J0ID0gaHRvbnMoc2VydmVyX3BvcnQpOworCXNpbl9zLnNpbl9hZGRyLnNfYWRkciA9IGh0
b25sKElOQUREUl9MT09QQkFDSyk7CisjaWZkZWYgX1dJTjMyCisJaWYgKGJpbmQoZmRfYywgKHN0
cnVjdCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNP
Q0tFVF9FUlJPUikgeworCQlkZWJ1Z19wcmludGYoImJpbmQoKSBmYWlsZWQgd2l0aCBlcnJvcjog
JWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlp
ZiAoYmluZChmZF9zLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCWRlYnVnX3ByaW50ZigiYmluZCgpIGZh
aWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRf
RkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoYmluZChmZF9jLCAoc3RydWN0IHNvY2thZGRyICop
JnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigiYmlu
ZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChiaW5kKGZkX3MsIChzdHJ1Y3Qg
c29ja2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJ
cGVycm9yKCJiaW5kIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKyNpZmRl
ZiBfV0lOMzIKKwlpZiAoY29ubmVjdChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCWRlYnVnX3By
aW50ZigiY29ubmVjdCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9y
KCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChjb25uZWN0KGZkX3MsIChzdHJ1
Y3Qgc29ja2FkZHIgKikmc2luX2MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NL
RVRfRVJST1IpIHsKKwkJZGVidWdfcHJpbnRmKCJjb25uZWN0KCkgZmFpbGVkIHdpdGggZXJyb3I6
ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cisj
ZWxzZQorCWlmIChjb25uZWN0KGZkX2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3MsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJjb25uZWN0Iik7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKGNvbm5lY3QoZmRfcywgKHN0cnVjdCBzb2NrYWRk
ciAqKSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3Io
ImNvbm5lY3QiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorI2lmZGVmIF9X
SU4zMgorCWlmICgodGlkX2MgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRz
LCAodm9pZCAqKSZmZF9jLCAwLCBOVUxMKSkgPT0gTlVMTCkgeworCQlkZWJ1Z19wcmludGYoIkNy
ZWF0ZVRocmVhZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwor
CQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmICgodGlkX3MgPSBDcmVhdGVUaHJlYWQoTlVM
TCwgMCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZF9zLCAwLCBOVUxMKSkgPT0gTlVMTCkg
eworCQlkZWJ1Z19wcmludGYoIkNyZWF0ZVRocmVhZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxu
IiwgR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlp
ZiAoKHJjID0gcHRocmVhZF9jcmVhdGUoJnRpZF9jLCBOVUxMLCAmaGFuZGxlX3BhY2tldHMsICh2
b2lkICopJmZkX2MpKSAhPSAwKSB7CisJCWRlYnVnX3ByaW50Zl9jbGVhbigicHRocmVhZF9jcmVh
dGUgdGlkX2M6ICVzXG4iLCBzdHJlcnJvcihyYykpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJ
fQorCisJaWYgKChyYyA9IHB0aHJlYWRfY3JlYXRlKCZ0aWRfcywgTlVMTCwgJmhhbmRsZV9wYWNr
ZXRzLCAodm9pZCAqKSZmZF9zKSkgIT0gMCkgeworCQlkZWJ1Z19wcmludGZfY2xlYW4oInB0aHJl
YWRfY3JlYXRlIHRpZF9zOiAlc1xuIiwgc3RyZXJyb3IocmMpKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX07CisjZW5kaWYKKworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2Vjbl9lbmFibGUo
MCk7CisJdXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKCh2b2lkICopJmZkX2MpOworCXVzcnNjdHBf
cmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZmZF9zKTsKKwlpZiAoKHNfYyA9IHVzcnNjdHBfc29j
a2V0KEFGX0NPTk4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIHJlY2VpdmVfY2IsIE5VTEws
IDAsICZmZF9jKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJb3B0X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7
CisJY3VyX2J1Zl9zaXplID0gMDsKKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNfYywgU09MX1NP
Q0tFVCwgU09fU05EQlVGLCAmY3VyX2J1Zl9zaXplLCAmb3B0X2xlbikgPCAwKSB7CisJCXBlcnJv
cigidXNyc2N0cF9nZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJZGVi
dWdfcHJpbnRmKCJDaGFuZ2Ugc2VuZCBzb2NrZXQgYnVmZmVyIHNpemUgZnJvbSAlZCAiLCBjdXJf
YnVmX3NpemUpOworCXNuZF9idWZfc2l6ZSA9IDE8PDIyOyAvKiA0IE1CICovCisJaWYgKHVzcnNj
dHBfc2V0c29ja29wdChzX2MsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgJnNuZF9idWZfc2l6ZSwg
c2l6ZW9mKGludCkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCIpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCW9wdF9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQp
OworCWN1cl9idWZfc2l6ZSA9IDA7CisJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzX2MsIFNPTF9T
T0NLRVQsIFNPX1NOREJVRiwgJmN1cl9idWZfc2l6ZSwgJm9wdF9sZW4pIDwgMCkgeworCQlwZXJy
b3IoInVzcnNjdHBfZ2V0c29ja29wdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWRl
YnVnX3ByaW50Zl9jbGVhbigidG8gJWQuXG4iLCBjdXJfYnVmX3NpemUpOworCW1lbXNldCgmcGFk
ZHJwYXJhbXMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcykpOworCXBhZGRycGFy
YW1zLnNwcF9hZGRyZXNzLnNzX2ZhbWlseSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9M
RU4KKwlwYWRkcnBhcmFtcy5zcHBfYWRkcmVzcy5zc19sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2Nvbm4pOworI2VuZGlmCisJcGFkZHJwYXJhbXMuc3BwX2ZsYWdzID0gU1BQX1BNVFVEX0RJ
U0FCTEU7CisJcGFkZHJwYXJhbXMuc3BwX3BhdGhtdHUgPSA5MDAwOworCWlmICh1c3JzY3RwX3Nl
dHNvY2tvcHQoc19jLCBJUFBST1RPX1NDVFAsIFNDVFBfUEVFUl9BRERSX1BBUkFNUywgJnBhZGRy
cGFyYW1zLCBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMpKSA8IDApIHsKKwkJcGVycm9y
KCJ1c3JzY3RwX3NldHNvY2tvcHQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAo
KHNfbCA9IHVzcnNjdHBfc29ja2V0KEFGX0NPTk4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAs
IHJlY2VpdmVfY2IsIE5VTEwsIDAsICZmZF9zKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNj
dHBfc29ja2V0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJb3B0X2xlbiA9IChzb2Nr
bGVuX3Qpc2l6ZW9mKGludCk7CisJY3VyX2J1Zl9zaXplID0gMDsKKwlpZiAodXNyc2N0cF9nZXRz
b2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmY3VyX2J1Zl9zaXplLCAmb3B0X2xl
bikgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisJZGVidWdfcHJpbnRmKCJDaGFuZ2UgcmVjZWl2ZSBzb2NrZXQgYnVmZmVy
IHNpemUgZnJvbSAlZCAiLCBjdXJfYnVmX3NpemUpOworCXJjdl9idWZfc2l6ZSA9IDE8PDE2OyAv
KiA2NCBLQiAqLworCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc19sLCBTT0xfU09DS0VULCBTT19S
Q1ZCVUYsICZyY3ZfYnVmX3NpemUsIHNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3Jz
Y3RwX3NldHNvY2tvcHQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlvcHRfbGVuID0g
KHNvY2tsZW5fdClzaXplb2YoaW50KTsKKwljdXJfYnVmX3NpemUgPSAwOworCWlmICh1c3JzY3Rw
X2dldHNvY2tvcHQoc19sLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZjdXJfYnVmX3NpemUsICZv
cHRfbGVuKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tvcHQiKTsKKwkJZXhpdChF
WElUX0ZBSUxVUkUpOworCX0KKwlkZWJ1Z19wcmludGZfY2xlYW4oInRvICVkLlxuIiwgY3VyX2J1
Zl9zaXplKTsKKwkvKiBCaW5kIHRoZSBjbGllbnQgc2lkZS4gKi8KKwltZW1zZXQoJnNjb25uLCAw
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9mYW1pbHkgPSBB
Rl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3BvcnQgPSBodG9u
cyg1MDAxKTsKKwlzY29ubi5zY29ubl9hZGRyID0gJmZkX2M7CisJaWYgKHVzcnNjdHBfYmluZChz
X2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29u
bikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCQlleGl0KEVYSVRfRkFJTFVS
RSk7CisJfQorCS8qIEJpbmQgdGhlIHNlcnZlciBzaWRlLiAqLworCW1lbXNldCgmc2Nvbm4sIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25uX2ZhbWlseSA9IEFG
X0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25z
KDUwMDEpOworCXNjb25uLnNjb25uX2FkZHIgPSAmZmRfczsKKwlpZiAodXNyc2N0cF9iaW5kKHNf
bCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25u
KSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9iaW5kIik7CisJCWV4aXQoRVhJVF9GQUlMVVJF
KTsKKwl9CisJLyogTWFrZSBzZXJ2ZXIgc2lkZSBwYXNzaXZlLi4uICovCisJaWYgKHVzcnNjdHBf
bGlzdGVuKHNfbCwgMSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKKwkJZXhp
dChFWElUX0ZBSUxVUkUpOworCX0KKwkvKiBJbml0aWF0ZSB0aGUgaGFuZHNoYWtlICovCisJbWVt
c2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nv
bm5fZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25u
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlzY29ubi5zY29u
bl9wb3J0ID0gaHRvbnMoNTAwMSk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZF9jOworCWlmICh1
c3JzY3RwX2Nvbm5lY3Qoc19jLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsK
KwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoKHNfcyA9IHVzcnNjdHBfYWNjZXB0KHNf
bCwgTlVMTCwgTlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2FjY2VwdCIpOwor
CQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCXVzcnNjdHBfY2xvc2Uoc19sKTsKKwlwcmludF9h
ZGRyZXNzZXMoc19zKTsKKworCWlmICgobGluZSA9IG1hbGxvYyhMSU5FX0xFTkdUSCkpID09IE5V
TEwpIHsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwltZW1zZXQobGluZSwgJ0EnLCBMSU5F
X0xFTkdUSCk7CisJc25kaW5mby5zbmRfc2lkID0gMTsKKwlzbmRpbmZvLnNuZF9wcGlkID0gaHRv
bmwoRElTQ0FSRF9QUElEKTsKKwlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKKwlzbmRpbmZvLnNu
ZF9hc3NvY19pZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX1NURVBTOyBpKysp
IHsKKwkJaWYgKGkgJSAyKSB7CisJCQlzbmRpbmZvLnNuZF9mbGFncyA9IFNDVFBfVU5PUkRFUkVE
OworCQl9IGVsc2UgeworCQkJc25kaW5mby5zbmRfZmxhZ3MgPSAwOworCQl9CisJCWZvciAoaiA9
IDA7IGogPCAyOyBqKyspIHsKKwkJCS8qIFNlbmQgYSAxIE1CIG1lc3NhZ2UgKi8KKwkJCXNlbmR2
X3JldHJpZXNfbGVmdCA9IDEyMDsKKwkJCWRlYnVnX3ByaW50ZigidXNyc2NwX3NlbmR2IC0gc3Rl
cCAlZCAtIGNhbGwgJWQgZmxhZ3MgJXhcbiIsIGksIGogKyAxLCBzbmRpbmZvLnNuZF9mbGFncyk7
CisJCQl3aGlsZSAodXNyc2N0cF9zZW5kdihzX2MsIGxpbmUsIExJTkVfTEVOR1RILCBOVUxMLCAw
LCAodm9pZCAqKSZzbmRpbmZvLAorCQkJCQkgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBf
c25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCQkJZGVidWdfcHJpbnRm
KCJ1c3JzY3RwX3NlbmR2IC0gZXJybm86ICVkIC0gJXNcbiIsIGVycm5vLCBzdHJlcnJvcihlcnJu
bykpOworCQkJCWlmIChlcnJubyAhPSBFV09VTERCTE9DSyB8fCAhc2VuZHZfcmV0cmllc19sZWZ0
KSB7CisJCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCQl9CisJCQkJc2VuZHZfcmV0cmllc19s
ZWZ0LS07CisjaWZkZWYgX1dJTjMyCisJCQkJU2xlZXAoMTAwMCk7CisjZWxzZQorCQkJCXNsZWVw
KDEpOworI2VuZGlmCisJCQl9CisJCX0KKwkJZGVidWdfcHJpbnRmKCJTZW5kaW5nIGRvbmUsIHNs
ZWVwaW5nXG4iKTsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMTAwMCk7CisjZWxzZQorCQlzbGVl
cCgxKTsKKyNlbmRpZgorCX0KKwlmcmVlKGxpbmUpOworCXVzcnNjdHBfc2h1dGRvd24oc19jLCBT
SFVUX1dSKTsKKworCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKwkJZGVidWdfcHJp
bnRmKCJXYWl0aW5nIGZvciB1c3JzY3RwX2ZpbmlzaCgpXG4iKTsKKyNpZmRlZiBfV0lOMzIKKwkJ
U2xlZXAoMTAwMCk7CisjZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRpZgorCX0KKyNpZmRlZiBfV0lO
MzIKKwlUZXJtaW5hdGVUaHJlYWQodGlkX2MsIDApOworCVdhaXRGb3JTaW5nbGVPYmplY3QodGlk
X2MsIElORklOSVRFKTsKKwlUZXJtaW5hdGVUaHJlYWQodGlkX3MsIDApOworCVdhaXRGb3JTaW5n
bGVPYmplY3QodGlkX3MsIElORklOSVRFKTsKKwlpZiAoY2xvc2Vzb2NrZXQoZmRfYykgPT0gU09D
S0VUX0VSUk9SKSB7CisJCWRlYnVnX3ByaW50ZigiY2xvc2Vzb2NrZXQoKSBmYWlsZWQgd2l0aCBl
cnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOwor
CX0KKwlpZiAoY2xvc2Vzb2NrZXQoZmRfcykgPT0gU09DS0VUX0VSUk9SKSB7CisJCWRlYnVnX3By
aW50ZigiY2xvc2Vzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RF
cnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlXU0FDbGVhbnVwKCk7CisjZWxz
ZQorCXB0aHJlYWRfY2FuY2VsKHRpZF9jKTsKKwlwdGhyZWFkX2pvaW4odGlkX2MsIE5VTEwpOwor
CXB0aHJlYWRfY2FuY2VsKHRpZF9zKTsKKwlwdGhyZWFkX2pvaW4odGlkX3MsIE5VTEwpOworCWlm
IChjbG9zZShmZF9jKSA8IDApIHsKKwkJcGVycm9yKCJjbG9zZSIpOworCQlleGl0KEVYSVRfRkFJ
TFVSRSk7CisJfQorCWlmIChjbG9zZShmZF9zKSA8IDApIHsKKwkJcGVycm9yKCJjbG9zZSIpOwor
CQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJcmV0dXJuICgwKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9sb29wX3VwY2FsbC5jIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJv
Z3JhbXMvZWtyX2xvb3BfdXBjYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RiNDgwYTcyOWMzNGJmMmUxZDhj
ODMxZjQ5MTM0OGU5MWZjOTQ0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1z
L2Vrcl9sb29wX3VwY2FsbC5jCkBAIC0wLDAgKzEsNzI4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTMgTWljaGFlbCBUdWV4ZW4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIwIEZl
bGl4IFdlaW5yYW5rCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqLworCisvKgorICogVXNhZ2U6IGVrcl9sb29wIFtjbGllbnRfcG9ydF0g
W3NlcnZlcl9wb3J0XSBbY3JjMzJjIG9mZmxvYWRpbmcgPDAvMT5dCisgKi8KKworI2lmZGVmIF9X
SU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisj
aW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRl
IDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNs
dWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgorI2luY2x1ZGUg
InByb2dyYW1zX2hlbHBlci5oIgorCisjZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAoMTw8MTYpCisj
ZGVmaW5lIExJTkVfTEVOR1RIICgxPDwyMCkKKyNkZWZpbmUgRElTQ0FSRF9QUElEIDM5CisjZGVm
aW5lIE5VTUJFUl9PRl9TVEVQUyAxMAorCitzdGF0aWMgdWludDhfdCBjcmMzMmNfb2ZmbG9hZGlu
ZyA9IDA7CisKK3N0cnVjdCB1cGNhbGxfbWV0YSB7CisJdWludDhfdCBzZW5kZXI7CisJdm9pZCog
YWRkcjsKK307CisKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBEV09SRCBXSU5BUEkKKyNlbHNlCitz
dGF0aWMgdm9pZCAqCisjZW5kaWYKK2hhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKK3sKKyNpZmRl
ZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKwljaGFy
ICpkdW1wX2J1ZjsKKwlzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyICpoZHI7CisJc3NpemVfdCBs
ZW5ndGg7CisJY2hhciBidWZbTUFYX1BBQ0tFVF9TSVpFXTsKKwl1aW50MzJfdCByZWNlaXZlZF9j
cmMzMmMsIGNvbXB1dGVkX2NyYzMyYzsKKworI2lmZGVmIF9XSU4zMgorCWZkcCA9IChTT0NLRVQg
Kilhcmc7CisjZWxzZQorCWZkcCA9IChpbnQgKilhcmc7CisjZW5kaWYKKwlmb3IgKDs7KSB7Cisj
aWYgZGVmaW5lZChfX05ldEJTRF9fKQorCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKKyNlbmRpZgor
CQlsZW5ndGggPSByZWN2KCpmZHAsIGJ1ZiwgTUFYX1BBQ0tFVF9TSVpFLCAwKTsKKwkJaWYgKGxl
bmd0aCA+IDApIHsKKwkJCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmLCAo
c2l6ZV90KWxlbmd0aCwgU0NUUF9EVU1QX0lOQk9VTkQpKSAhPSBOVUxMKSB7CisJCQkJLy9kZWJ1
Z19wcmludGZfY2xlYW4oIiVzXG4iLCBkdW1wX2J1Zik7CisJCQkJdXNyc2N0cF9mcmVlZHVtcGJ1
ZmZlcihkdW1wX2J1Zik7CisJCQl9CisKKwkJCWlmIChjcmMzMmNfb2ZmbG9hZGluZykgeworCQkJ
CWlmICgoc2l6ZV90KWxlbmd0aCA+PSBzaXplb2Yoc3RydWN0IHNjdHBfY29tbW9uX2hlYWRlcikp
IHsKKwkJCQkJaGRyID0gKHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIgKilidWY7CisJCQkJCXJl
Y2VpdmVkX2NyYzMyYyA9IGhkci0+Y3JjMzJjOworCQkJCQloZHItPmNyYzMyYyA9IGh0b25sKDAp
OworCQkJCQljb21wdXRlZF9jcmMzMmMgPSB1c3JzY3RwX2NyYzMyYyhidWYsIChzaXplX3QpbGVu
Z3RoKTsKKwkJCQkJaGRyLT5jcmMzMmMgPSByZWNlaXZlZF9jcmMzMmM7CisJCQkJCWlmIChyZWNl
aXZlZF9jcmMzMmMgPT0gY29tcHV0ZWRfY3JjMzJjKSB7CisJCQkJCQl1c3JzY3RwX2Nvbm5pbnB1
dChmZHAsIGJ1ZiwgKHNpemVfdClsZW5ndGgsIDApOworCQkJCQl9IGVsc2UgeworCQkJCQkJZGVi
dWdfcHJpbnRmKCJXcm9uZyBDUkMzMmM6IGV4cGVjdGVkICUwOHggcmVjZWl2ZWQgJTA4eFxuIiwK
KwkJCQkJCSAgICAgICAgICAgICBudG9obChjb21wdXRlZF9jcmMzMmMpLCBudG9obChyZWNlaXZl
ZF9jcmMzMmMpKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWRlYnVnX3ByaW50ZigiUGFj
a2V0IHRvbyBzaG9ydDogbGVuZ3RoICV6ZCIsIGxlbmd0aCk7CisJCQkJfQorCQkJfSBlbHNlIHsK
KwkJCQl1c3JzY3RwX2Nvbm5pbnB1dChmZHAsIGJ1ZiwgKHNpemVfdClsZW5ndGgsIDApOworCQkJ
fQorCQl9CisJfQorI2lmZGVmIF9XSU4zMgorCXJldHVybiAwOworI2Vsc2UKKwlyZXR1cm4gKE5V
TEwpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKK2Nvbm5fb3V0cHV0KHZvaWQgKmFkZHIsIHZv
aWQgKmJ1Ziwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKQorewor
CWNoYXIgKmR1bXBfYnVmOworCXN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIgKmhkcjsKKyNpZmRl
ZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKworI2lm
ZGVmIF9XSU4zMgorCWZkcCA9IChTT0NLRVQgKilhZGRyOworI2Vsc2UKKwlmZHAgPSAoaW50ICop
YWRkcjsKKyNlbmRpZgorCWlmIChjcmMzMmNfb2ZmbG9hZGluZyAmJiBsZW5ndGggPj0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIpKSB7CisJCWhkciA9IChzdHJ1Y3Qgc2N0cF9jb21t
b25faGVhZGVyICopYnVmOworCQloZHItPmNyYzMyYyA9IHVzcnNjdHBfY3JjMzJjKGJ1ZiwgKHNp
emVfdClsZW5ndGgpOworCX0KKworCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQo
YnVmLCBsZW5ndGgsIFNDVFBfRFVNUF9PVVRCT1VORCkpICE9IE5VTEwpIHsKKwkJLy9kZWJ1Z19w
cmludGZfY2xlYW4oIiVzXG4iLCBkdW1wX2J1Zik7CisJCXVzcnNjdHBfZnJlZWR1bXBidWZmZXIo
ZHVtcF9idWYpOworCX0KKyNpZmRlZiBfV0lOMzIKKwlpZiAoc2VuZCgqZmRwLCBidWYsIChpbnQp
bGVuZ3RoLCAwKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcmV0dXJuIChXU0FHZXRMYXN0RXJyb3Io
KSk7CisjZWxzZQorCWlmIChzZW5kKCpmZHAsIGJ1ZiwgbGVuZ3RoLCAwKSA8IDApIHsKKwkJcmV0
dXJuIChlcnJubyk7CisjZW5kaWYKKwl9IGVsc2UgeworCQlyZXR1cm4gKDApOworCX0KK30KKwor
c3RhdGljIHZvaWQKK2hhbmRsZV91cGNhbGwoc3RydWN0IHNvY2tldCAqc29jaywgdm9pZCAqZGF0
YSwgaW50IGZsZ3MpCit7CisJY2hhciAqYnVmOworCWludCBldmVudHM7CisJc3RydWN0IHVwY2Fs
bF9tZXRhICptZXRhOworCisJbWV0YSA9IGRhdGE7CisJYnVmID0gbWFsbG9jKE1BWF9QQUNLRVRf
U0laRSk7CisKKwl3aGlsZSAoKGV2ZW50cyA9IHVzcnNjdHBfZ2V0X2V2ZW50cyhzb2NrKSkgJiYg
KGV2ZW50cyAmIFNDVFBfRVZFTlRfUkVBRCkpIHsKKwkJc3RydWN0IHNjdHBfcmVjdnZfcm4gcm47
CisJCXNzaXplX3QgbjsKKwkJdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkcjsKKwkJaW50IGZsYWdz
ID0gMDsKKwkJc29ja2xlbl90IGxlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGFkZHIpOworCQl1bnNp
Z25lZCBpbnQgaW5mb3R5cGUgPSAwOworCQlzb2NrbGVuX3QgaW5mb2xlbiA9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9yZWN2dl9ybik7CisJCW1lbXNldCgmcm4sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9y
ZWN2dl9ybikpOworCQluID0gdXNyc2N0cF9yZWN2dihzb2NrLCBidWYsIE1BWF9QQUNLRVRfU0la
RSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgJmxlbiwgKHZvaWQgKikmcm4sICZpbmZvbGVu
LCAmaW5mb3R5cGUsICZmbGFncyk7CisJCWlmIChuIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3Rw
X3JlY3Z2Iik7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChuID4gMCkgeworCQkJaWYgKGZsYWdz
ICYgTVNHX05PVElGSUNBVElPTikgeworCQkJCWRlYnVnX3ByaW50ZigiTVNHIFJDVjogTm90aWZp
Y2F0aW9uIG9mIGxlbmd0aCAlZCByZWNlaXZlZC5cbiIsIChpbnQpbik7CisJCQl9IGVsc2Ugewor
CQkJCWRlYnVnX3ByaW50ZigiTVNHIFJDVjogRGF0YSBsZW5ndGggJWQsIGFkZHIgJXA6JXUsIHN0
cmVhbSAldSwgU1NOICV1LCBUU04gJXUsIFBQSUQgJXUsIGNvbnRleHQgJXUsICVzJXMuXG4iLAor
CQkJCSAgICAgICAoaW50KW4sCisJCQkJICAgICAgIGFkZHIuc2Nvbm4uc2Nvbm5fYWRkciwKKwkJ
CQkgICAgICAgbnRvaHMoYWRkci5zY29ubi5zY29ubl9wb3J0KSwKKwkJCQkgICAgICAgcm4ucmVj
dnZfcmN2aW5mby5yY3Zfc2lkLAorCQkJCSAgICAgICBybi5yZWN2dl9yY3ZpbmZvLnJjdl9zc24s
CisJCQkJICAgICAgIHJuLnJlY3Z2X3JjdmluZm8ucmN2X3RzbiwKKwkJCQkgICAgICAgbnRvaGwo
cm4ucmVjdnZfcmN2aW5mby5yY3ZfcHBpZCksCisJCQkJICAgICAgIHJuLnJlY3Z2X3JjdmluZm8u
cmN2X2NvbnRleHQsCisJCQkJICAgICAgIChybi5yZWN2dl9yY3ZpbmZvLnJjdl9mbGFncyAmIFND
VFBfVU5PUkRFUkVEKSA/ICJ1bm9yZGVyZWQiIDogIm9yZGVyZWQiLAorCQkJCSAgICAgICAoZmxh
Z3MgJiBNU0dfRU9SKSA/ICIsIEVPUiIgOiAiIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZWJ1
Z19wcmludGYoIkNvbm5lY3Rpb24gY2xvc2VkIVxuIik7CisJCQl1c3JzY3RwX2RlcmVnaXN0ZXJf
YWRkcmVzcyhtZXRhLT5hZGRyKTsKKwkJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJCQlicmVhazsK
KwkJfQorCX0KKwlmcmVlKGJ1Zik7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitwcmlu
dF9hZGRyZXNzZXMoc3RydWN0IHNvY2tldCAqc29jaykKK3sKKwlpbnQgaSwgbjsKKwlzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHJzLCAqYWRkcjsKKyNpZiAhZGVmaW5lZChIQVZFX1NBX0xFTikKKwlpbnQg
c2FfbGVuOworI2VuZGlmCisKKwlkZWJ1Z19wcmludGYoIkFkZHJlc3NlczogIik7CisJbiA9IHVz
cnNjdHBfZ2V0bGFkZHJzKHNvY2ssIDAsICZhZGRycyk7CisJYWRkciA9IGFkZHJzOworCWZvciAo
aSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKwkJY2Fz
ZSBBRl9JTkVUOgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwkJCWNoYXIgYnVm
W0lORVRfQUREUlNUUkxFTl07CisJCQljb25zdCBjaGFyICpuYW1lOworCisJCQlzaW4gPSAoc3Ry
dWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVCwgJnNp
bi0+c2luX2FkZHIsIGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCWRlYnVnX3ByaW50Zl9jbGVh
bigiJXM6JWQiLCBuYW1lLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CisjaWYgIWRlZmluZWQoSEFW
RV9TQV9MRU4pCisJCQlzYV9sZW4gPSAoaW50KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwor
I2VuZGlmCisJCQlicmVhazsKKwkJfQorCQljYXNlIEFGX0lORVQ2OgorCQl7CisJCQlzdHJ1Y3Qg
c29ja2FkZHJfaW42ICpzaW42OworCQkJY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07CisJCQlj
b25zdCBjaGFyICpuYW1lOworCisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRy
OworCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjYtPnNpbjZfYWRkciwgYnVmLCBJ
TkVUNl9BRERSU1RSTEVOKTsKKwkJCWRlYnVnX3ByaW50Zl9jbGVhbigiJXM6JWQiLCBuYW1lLCBu
dG9ocyhzaW42LT5zaW42X3BvcnQpKTsKKyNpZiAhZGVmaW5lZChIQVZFX1NBX0xFTikKKwkJCXNh
X2xlbiA9IChpbnQpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJCQlicmVh
azsKKwkJfQorCQljYXNlIEFGX0NPTk46CisJCXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpz
Y29ubjsKKworCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQkJZGVi
dWdfcHJpbnRmX2NsZWFuKCIlcDolZCIsIHNjb25uLT5zY29ubl9hZGRyLCBudG9ocyhzY29ubi0+
c2Nvbm5fcG9ydCkpOworI2lmICFkZWZpbmVkKEhBVkVfU0FfTEVOKQorCQkJc2FfbGVuID0gKGlu
dClzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJCQlicmVhazsKKwkJfQor
CQlkZWZhdWx0OgorCQkJZGVidWdfcHJpbnRmX2NsZWFuKCJVbmtub3duIGZhbWlseTogJWQiLCBh
ZGRyLT5zYV9mYW1pbHkpOworI2lmICFkZWZpbmVkKEhBVkVfU0FfTEVOKQorCQkJc2FfbGVuID0g
KGludClzaXplb2Yoc3RydWN0IHNvY2thZGRyKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKyNp
ZiAhZGVmaW5lZChIQVZFX1NBX0xFTikKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNo
YXIgKilhZGRyICsgc2FfbGVuKTsKKyNlbHNlCisJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICop
KChjYWRkcl90KWFkZHIgKyBhZGRyLT5zYV9sZW4pOworI2VuZGlmCisJCWlmIChpICE9IG4gLSAx
KSB7CisJCQlkZWJ1Z19wcmludGZfY2xlYW4oIiwiKTsKKwkJfQorCX0KKwlpZiAobiA+IDApIHsK
KwkJdXNyc2N0cF9mcmVlbGFkZHJzKGFkZHJzKTsKKwl9CisJZGVidWdfcHJpbnRmX2NsZWFuKCI8
LT4iKTsKKwluID0gdXNyc2N0cF9nZXRwYWRkcnMoc29jaywgMCwgJmFkZHJzKTsKKwlhZGRyID0g
YWRkcnM7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlzd2l0Y2ggKGFkZHItPnNhX2Zh
bWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lu
OworCQkJY2hhciBidWZbSU5FVF9BRERSU1RSTEVOXTsKKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisK
KwkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQkJbmFtZSA9IGluZXRfbnRv
cChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYnVmLCBJTkVUX0FERFJTVFJMRU4pOworCQkJZGVi
dWdfcHJpbnRmX2NsZWFuKCIlczolZCIsIG5hbWUsIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKKyNp
ZiAhZGVmaW5lZChIQVZFX1NBX0xFTikKKwkJCXNhX2xlbiA9IChpbnQpc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbik7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgQUZfSU5FVDY6CisJ
CXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisJCQljaGFyIGJ1ZltJTkVUNl9BRERS
U1RSTEVOXTsKKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2th
ZGRyX2luNiAqKWFkZHI7CisJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2lu
Nl9hZGRyLCBidWYsIElORVQ2X0FERFJTVFJMRU4pOworCQkJZGVidWdfcHJpbnRmX2NsZWFuKCIl
czolZCIsIG5hbWUsIG50b2hzKHNpbjYtPnNpbjZfcG9ydCkpOworI2lmICFkZWZpbmVkKEhBVkVf
U0FfTEVOKQorCQkJc2FfbGVuID0gKGludClzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Cisj
ZW5kaWYKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgQUZfQ09OTjoKKwkJeworCQkJc3RydWN0IHNv
Y2thZGRyX2Nvbm4gKnNjb25uOworCisJCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAq
KWFkZHI7CisJCQlkZWJ1Z19wcmludGZfY2xlYW4oIiVwOiVkIiwgc2Nvbm4tPnNjb25uX2FkZHIs
IG50b2hzKHNjb25uLT5zY29ubl9wb3J0KSk7CisjaWYgIWRlZmluZWQoSEFWRV9TQV9MRU4pCisJ
CQlzYV9sZW4gPSAoaW50KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwkJ
CWJyZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCQlkZWJ1Z19wcmludGZfY2xlYW4oIlVua25vd24g
ZmFtaWx5OiAlZCIsIGFkZHItPnNhX2ZhbWlseSk7CisjaWYgIWRlZmluZWQoSEFWRV9TQV9MRU4p
CisJCQlzYV9sZW4gPSAoaW50KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpOworI2VuZGlmCisJCQli
cmVhazsKKwkJfQorI2lmICFkZWZpbmVkKEhBVkVfU0FfTEVOKQorCQlhZGRyID0gKHN0cnVjdCBz
b2NrYWRkciAqKSgoY2hhciAqKWFkZHIgKyBzYV9sZW4pOworI2Vsc2UKKwkJYWRkciA9IChzdHJ1
Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIGFkZHItPnNhX2xlbik7CisjZW5kaWYKKwkJ
aWYgKGkgIT0gbiAtIDEpIHsKKwkJCWRlYnVnX3ByaW50Zl9jbGVhbigiLCIpOworCQl9CisJfQor
CWlmIChuID4gMCkgeworCQl1c3JzY3RwX2ZyZWVwYWRkcnMoYWRkcnMpOworCX0KKwlkZWJ1Z19w
cmludGZfY2xlYW4oIlxuIik7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd
KQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fcywgc2luX2M7CisJc3RydWN0IHNvY2thZGRy
X2Nvbm4gc2Nvbm47CisJc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMgcGFkZHJwYXJhbXM7CisjaWZk
ZWYgX1dJTjMyCisJU09DS0VUIGZkX2MsIGZkX3M7CisjZWxzZQorCWludCBmZF9jLCBmZF9zLCBy
YzsKKyNlbmRpZgorCXN0cnVjdCBzb2NrZXQgKnNfYywgKnNfcywgKnNfbDsKKyNpZmRlZiBfV0lO
MzIKKwlIQU5ETEUgdGlkX2MsIHRpZF9zOworI2Vsc2UKKwlwdGhyZWFkX3QgdGlkX2MsIHRpZF9z
OworI2VuZGlmCisJaW50IGksIGosIGN1cl9idWZfc2l6ZSwgc25kX2J1Zl9zaXplLCByY3ZfYnVm
X3NpemUsIHNlbmR2X3JldHJpZXNfbGVmdCwgb247CisJc29ja2xlbl90IG9wdF9sZW47CisJc3Ry
dWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOworCWNoYXIgKmxpbmU7CisjaWZkZWYgX1dJTjMyCisJ
V1NBREFUQSB3c2FEYXRhOworI2VuZGlmCisJdWludDE2X3QgY2xpZW50X3BvcnQgPSA5OTAwOwor
CXVpbnQxNl90IHNlcnZlcl9wb3J0ID0gOTkwMTsKKworCisJc3RydWN0IHVwY2FsbF9tZXRhIHVw
Y2FsbF9tZXRhX2NsaWVudDsKKwlzdHJ1Y3QgdXBjYWxsX21ldGEgdXBjYWxsX21ldGFfc2VydmVy
OworCisjaWZkZWYgT1VUUFVUX1RPX0xPR0ZJTEUKKwlGSUxFICpsb2dmaWxlOworCWxvZ2ZpbGUg
PSBmb3BlbigiZWtyX2xvb3BfdXBjYWxsLmxvZyIsICJhKyIpOworCWlmIChsb2dmaWxlID09IE5V
TEwpIHsKKwkJZGVidWdfcHJpbnRmKCJGYWlsZWQgY3JlYXRpbmcgbG9nZmlsZVxuIik7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJZGVidWdfc2V0X3RhcmdldChsb2dmaWxlKTsKKyNlbmRp
ZgorCisJaWYgKGFyZ2MgPiAxKSB7CisJCWNsaWVudF9wb3J0ID0gYXRvaShhcmd2WzFdKTsKKwl9
CisKKwlpZiAoYXJnYyA+IDIpIHsKKwkJc2VydmVyX3BvcnQgPSBhdG9pKGFyZ3ZbMl0pOworCX0K
KworCWlmIChhcmdjID4gMykgeworCQljcmMzMmNfb2ZmbG9hZGluZyA9IGF0b2koYXJndlszXSk7
CisJfQorCisJZGVidWdfcHJpbnRmKCJTdGFydGluZyBwcm9ncmFtXG4iKTsKKwlkZWJ1Z19wcmlu
dGYoIkNvbmZpZzpcblx0Q2xpZW50IFBvcnQ6XHQlZFxuXHRTZXJ2ZXIgUG9ydDpcdCVkXG5cdENS
QzMyQyBDYWxjOlx0JXNcbiIsIGNsaWVudF9wb3J0LCBzZXJ2ZXJfcG9ydCwgY3JjMzJjX29mZmxv
YWRpbmcgPyAib2ZmbG9hZGVkIiA6ICJOT1Qgb2ZmbG9hZGVkIik7CisKKyNpZmRlZiBfV0lOMzIK
KwlpZiAoV1NBU3RhcnR1cChNQUtFV09SRCgyLDIpLCAmd3NhRGF0YSkgIT0gMCkgeworCQlkZWJ1
Z19wcmludGYoIldTQVN0YXJ0dXAgZmFpbGVkXG4iKTsKKwkJZXhpdCAoRVhJVF9GQUlMVVJFKTsK
Kwl9CisjZW5kaWYKKwl1c3JzY3RwX2luaXQoMCwgY29ubl9vdXRwdXQsIGRlYnVnX3ByaW50Zl9z
dGFjayk7CisKKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVi
dWdfb24oU0NUUF9ERUJVR19OT05FKTsKKyNlbmRpZiAvLyBTQ1RQX0RFQlVHCisKKwlpZiAoY3Jj
MzJjX29mZmxvYWRpbmcpIHsKKwkJdXNyc2N0cF9lbmFibGVfY3JjMzJjX29mZmxvYWQoKTsKKwl9
CisKKwkvKiBzZXQgdXAgYSBjb25uZWN0ZWQgVURQIHNvY2tldCAqLworI2lmZGVmIF9XSU4zMgor
CWlmICgoZmRfYyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpID09
IElOVkFMSURfU09DS0VUKSB7CisJCWRlYnVnX3ByaW50Zigic29ja2V0KCkgZmFpbGVkIHdpdGgg
ZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsK
Kwl9CisJaWYgKChmZF9zID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQ
KSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkJZGVidWdfcHJpbnRmKCJzb2NrZXQoKSBmYWlsZWQg
d2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX0KKyNlbHNlCisJaWYgKChmZF9jID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0s
IElQUFJPVE9fVURQKSkgPCAwKSB7CisJCXBlcnJvcigic29ja2V0Iik7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisJaWYgKChmZF9zID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQ
UFJPVE9fVURQKSkgPCAwKSB7CisJCXBlcnJvcigic29ja2V0Iik7CisJCWV4aXQoRVhJVF9GQUlM
VVJFKTsKKwl9CisjZW5kaWYKKwltZW1zZXQoJnNpbl9jLCAwLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSk7CisJc2luX2Muc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5f
TEVOCisJc2luX2Muc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlm
CisJc2luX2Muc2luX3BvcnQgPSBodG9ucyhjbGllbnRfcG9ydCk7CisJc2luX2Muc2luX2FkZHIu
c19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKwltZW1zZXQoJnNpbl9zLCAwLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJc2luX3Muc2luX2ZhbWlseSA9IEFGX0lORVQ7Cisj
aWZkZWYgSEFWRV9TSU5fTEVOCisJc2luX3Muc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pOworI2VuZGlmCisJc2luX3Muc2luX3BvcnQgPSBodG9ucyhzZXJ2ZXJfcG9ydCk7CisJ
c2luX3Muc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKyNpZmRlZiBf
V0lOMzIKKwlpZiAoYmluZChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9jLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCWRlYnVnX3ByaW50Zigi
YmluZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChiaW5kKGZkX3MsIChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsK
KwkJZGVidWdfcHJpbnRmKCJiaW5kKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRM
YXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChiaW5k
KGZkX2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX2MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pKSA8IDApIHsKKwkJcGVycm9yKCJiaW5kIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9
CisJaWYgKGJpbmQoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3IoImJpbmQiKTsKKwkJZXhpdChFWElUX0ZB
SUxVUkUpOworCX0KKyNlbmRpZgorI2lmZGVmIF9XSU4zMgorCWlmIChjb25uZWN0KGZkX2MsIChz
dHJ1Y3Qgc29ja2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBT
T0NLRVRfRVJST1IpIHsKKwkJZGVidWdfcHJpbnRmKCJjb25uZWN0KCkgZmFpbGVkIHdpdGggZXJy
b3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9
CisJaWYgKGNvbm5lY3QoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlkZWJ1Z19wcmludGYoImNv
bm5lY3QoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJ
ZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKGNvbm5lY3QoZmRfYywgKHN0cnVj
dCBzb2NrYWRkciAqKSZzaW5fcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewor
CQlwZXJyb3IoImNvbm5lY3QiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoY29u
bmVjdChmZF9zLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigiY29ubmVjdCIpOworCQlleGl0KEVYSVRfRkFJTFVS
RSk7CisJfQorI2VuZGlmCisjaWZkZWYgX1dJTjMyCisJaWYgKCh0aWRfYyA9IENyZWF0ZVRocmVh
ZChOVUxMLCAwLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkX2MsIDAsIE5VTEwpKSA9PSBO
VUxMKSB7CisJCWRlYnVnX3ByaW50ZigiQ3JlYXRlVGhyZWFkKCkgZmFpbGVkIHdpdGggZXJyb3I6
ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYg
KCh0aWRfcyA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICop
JmZkX3MsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCWRlYnVnX3ByaW50ZigiQ3JlYXRlVGhyZWFk
KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmICgocmMgPSBwdGhyZWFkX2NyZWF0ZSgmdGlkX2Ms
IE5VTEwsICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmRfYykpICE9IDApIHsKKwkJZGVidWdf
cHJpbnRmKCJwdGhyZWFkX2NyZWF0ZSB0aWRfYzogJXNcbiIsIHN0cmVycm9yKHJjKSk7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlpZiAoKHJjID0gcHRocmVhZF9jcmVhdGUoJnRpZF9z
LCBOVUxMLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkX3MpKSAhPSAwKSB7CisJCWRlYnVn
X3ByaW50ZigicHRocmVhZF9jcmVhdGUgdGlkX3M6ICVzXG4iLCBzdHJlcnJvcihyYykpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfTsKKyNlbmRpZgorCisJdXNyc2N0cF9zeXNjdGxfc2V0X3Nj
dHBfZWNuX2VuYWJsZSgwKTsKKwl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmRf
Yyk7CisJdXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKCh2b2lkICopJmZkX3MpOworCWlmICgoc19j
ID0gdXNyc2N0cF9zb2NrZXQoQUZfQ09OTiwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgTlVM
TCwgTlVMTCwgMCwgTlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIp
OworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJdXBjYWxsX21ldGFfY2xpZW50LmFkZHIg
PSAmZmRfYzsKKwl1cGNhbGxfbWV0YV9jbGllbnQuc2VuZGVyID0gMTsKKwl1c3JzY3RwX3NldF91
cGNhbGwoc19jLCBoYW5kbGVfdXBjYWxsLCAmdXBjYWxsX21ldGFfY2xpZW50KTsKKworCW9wdF9s
ZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOworCWN1cl9idWZfc2l6ZSA9IDA7CisJaWYgKHVz
cnNjdHBfZ2V0c29ja29wdChzX2MsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgJmN1cl9idWZfc2l6
ZSwgJm9wdF9sZW4pIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfZ2V0c29ja29wdCIpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWRlYnVnX3ByaW50ZigiQ2hhbmdlIHNlbmQgc29ja2V0
IGJ1ZmZlciBzaXplIGZyb20gJWQgIiwgY3VyX2J1Zl9zaXplKTsKKwlzbmRfYnVmX3NpemUgPSAx
PDwyMjsgLyogNCBNQiAqLworCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc19jLCBTT0xfU09DS0VU
LCBTT19TTkRCVUYsICZzbmRfYnVmX3NpemUsIHNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9y
KCJ1c3JzY3RwX3NldHNvY2tvcHQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlvcHRf
bGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKKwljdXJfYnVmX3NpemUgPSAwOworCWlmICh1
c3JzY3RwX2dldHNvY2tvcHQoc19jLCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZjdXJfYnVmX3Np
emUsICZvcHRfbGVuKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tvcHQiKTsKKwkJ
ZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlkZWJ1Z19wcmludGZfY2xlYW4oInRvICVkLlxuIiwg
Y3VyX2J1Zl9zaXplKTsKKwltZW1zZXQoJnBhZGRycGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0IHNj
dHBfcGFkZHJwYXJhbXMpKTsKKwlwYWRkcnBhcmFtcy5zcHBfYWRkcmVzcy5zc19mYW1pbHkgPSBB
Rl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJcGFkZHJwYXJhbXMuc3BwX2FkZHJlc3Mu
c3NfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXBhZGRycGFy
YW1zLnNwcF9mbGFncyA9IFNQUF9QTVRVRF9ESVNBQkxFOworCXBhZGRycGFyYW1zLnNwcF9wYXRo
bXR1ID0gOTAwMDsKKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNfYywgSVBQUk9UT19TQ1RQLCBT
Q1RQX1BFRVJfQUREUl9QQVJBTVMsICZwYWRkcnBhcmFtcywgc2l6ZW9mKHN0cnVjdCBzY3RwX3Bh
ZGRycGFyYW1zKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0Iik7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKChzX2wgPSB1c3JzY3RwX3NvY2tldChBRl9DT05O
LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBOVUxMLCBOVUxMLCAwLCBOVUxMKSkgPT0gTlVM
TCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsK
Kwl9CisJb3B0X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7CisJY3VyX2J1Zl9zaXplID0g
MDsKKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAm
Y3VyX2J1Zl9zaXplLCAmb3B0X2xlbikgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRzb2Nr
b3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJZGVidWdfcHJpbnRmKCJDaGFuZ2Ug
cmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemUgZnJvbSAlZCAiLCBjdXJfYnVmX3NpemUpOworCXJj
dl9idWZfc2l6ZSA9IDE8PDE2OyAvKiA2NCBLQiAqLworCWlmICh1c3JzY3RwX3NldHNvY2tvcHQo
c19sLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZyY3ZfYnVmX3NpemUsIHNpemVvZihpbnQpKSA8
IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQiKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX0KKwlvcHRfbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKKwljdXJfYnVmX3Np
emUgPSAwOworCWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc19sLCBTT0xfU09DS0VULCBTT19SQ1ZC
VUYsICZjdXJfYnVmX3NpemUsICZvcHRfbGVuKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2dl
dHNvY2tvcHQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlkZWJ1Z19wcmludGZfY2xl
YW4oInRvICVkLlxuIiwgY3VyX2J1Zl9zaXplKTsKKworCW9uID0gMTsKKwlpZiAodXNyc2N0cF9z
ZXRzb2Nrb3B0KHNfbCwgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFQ1ZSQ1ZJTkZPLCAmb24sIHNpemVv
ZihpbnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQiKTsKKwkJZXhpdChF
WElUX0ZBSUxVUkUpOworCX0KKworCS8qIEJpbmQgdGhlIGNsaWVudCBzaWRlLiAqLworCW1lbXNl
dCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25u
X2ZhbWlseSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5f
cG9ydCA9IGh0b25zKDUwMDEpOworCXNjb25uLnNjb25uX2FkZHIgPSAmZmRfYzsKKwlpZiAodXNy
c2N0cF9iaW5kKHNfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9jb25uKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9iaW5kIik7CisJCWV4aXQo
RVhJVF9GQUlMVVJFKTsKKwl9CisJLyogQmluZCB0aGUgc2VydmVyIHNpZGUuICovCisJbWVtc2V0
KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5f
ZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9w
b3J0ID0gaHRvbnMoNTAwMSk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZF9zOworCWlmICh1c3Jz
Y3RwX2JpbmQoc19sLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2Nvbm4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwkJZXhpdChF
WElUX0ZBSUxVUkUpOworCX0KKwkvKiBNYWtlIHNlcnZlciBzaWRlIHBhc3NpdmUuLi4gKi8KKwlp
ZiAodXNyc2N0cF9saXN0ZW4oc19sLCAxKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2xpc3Rl
biIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCS8qIEluaXRpYXRlIHRoZSBoYW5kc2hh
a2UgKi8KKwltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsK
KwlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJ
c2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgor
CXNjb25uLnNjb25uX3BvcnQgPSBodG9ucyg1MDAxKTsKKwlzY29ubi5zY29ubl9hZGRyID0gJmZk
X2M7CisJaWYgKHVzcnNjdHBfY29ubmVjdChzX2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4s
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBf
Y29ubmVjdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmICgoc19zID0gdXNyc2N0
cF9hY2NlcHQoc19sLCBOVUxMLCBOVUxMKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBf
YWNjZXB0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwl1cGNhbGxfbWV0YV9zZXJ2
ZXIuYWRkciAJPSAmZmRfczsKKwl1cGNhbGxfbWV0YV9zZXJ2ZXIuc2VuZGVyIAk9IDA7CisJdXNy
c2N0cF9zZXRfdXBjYWxsKHNfcywgaGFuZGxlX3VwY2FsbCwgJnVwY2FsbF9tZXRhX3NlcnZlcik7
CisKKwl1c3JzY3RwX2Nsb3NlKHNfbCk7CisJcHJpbnRfYWRkcmVzc2VzKHNfcyk7CisKKwlpZiAo
KGxpbmUgPSBtYWxsb2MoTElORV9MRU5HVEgpKSA9PSBOVUxMKSB7CisJCWV4aXQoRVhJVF9GQUlM
VVJFKTsKKwl9CisJbWVtc2V0KGxpbmUsICdBJywgTElORV9MRU5HVEgpOworCXNuZGluZm8uc25k
X3NpZCA9IDE7CisJc25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERJU0NBUkRfUFBJRCk7CisJc25k
aW5mby5zbmRfY29udGV4dCA9IDA7CisJc25kaW5mby5zbmRfYXNzb2NfaWQgPSAwOworCisJZm9y
IChpID0gMDsgaSA8IE5VTUJFUl9PRl9TVEVQUzsgaSsrKSB7CisJCWlmIChpICUgMikgeworCQkJ
c25kaW5mby5zbmRfZmxhZ3MgPSBTQ1RQX1VOT1JERVJFRDsKKwkJfSBlbHNlIHsKKwkJCXNuZGlu
Zm8uc25kX2ZsYWdzID0gMDsKKwkJfQorCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQkv
KiBTZW5kIGEgMSBNQiBtZXNzYWdlICovCisJCQlzZW5kdl9yZXRyaWVzX2xlZnQgPSAxMjA7CisJ
CQlkZWJ1Z19wcmludGYoInVzcnNjcF9zZW5kdiAtIHN0ZXAgJWQgLSBjYWxsICVkIGZsYWdzICV4
XG4iLCBpLCBqICsgMSwgc25kaW5mby5zbmRfZmxhZ3MpOworCQkJd2hpbGUgKHVzcnNjdHBfc2Vu
ZHYoc19jLCBsaW5lLCBMSU5FX0xFTkdUSCwgTlVMTCwgMCwgKHZvaWQgKikmc25kaW5mbywKKwkJ
CQkJIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NO
RElORk8sIDApIDwgMCkgeworCQkJCWRlYnVnX3ByaW50ZigidXNyc2N0cF9zZW5kdiAtIGVycm5v
OiAlZCAtICVzXG4iLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlpZiAoZXJybm8gIT0g
RVdPVUxEQkxPQ0sgfHwgIXNlbmR2X3JldHJpZXNfbGVmdCkgeworCQkJCQlleGl0KEVYSVRfRkFJ
TFVSRSk7CisJCQkJfQorCQkJCXNlbmR2X3JldHJpZXNfbGVmdC0tOworI2lmZGVmIF9XSU4zMgor
CQkJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJCQlzbGVlcCgxKTsKKyNlbmRpZgorCQkJfQorCQl9
CisJCWRlYnVnX3ByaW50ZigiU2VuZGluZyBkb25lLCBzbGVlcGluZ1xuIik7CisjaWZkZWYgX1dJ
TjMyCisJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9CisJZnJl
ZShsaW5lKTsKKwl1c3JzY3RwX3NodXRkb3duKHNfYywgU0hVVF9XUik7CisKKwl3aGlsZSAodXNy
c2N0cF9maW5pc2goKSAhPSAwKSB7CisJCWRlYnVnX3ByaW50ZigiV2FpdGluZyBmb3IgdXNyc2N0
cF9maW5pc2goKVxuIik7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJ
c2xlZXAoMSk7CisjZW5kaWYKKwl9CisjaWZkZWYgX1dJTjMyCisJVGVybWluYXRlVGhyZWFkKHRp
ZF9jLCAwKTsKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpZF9jLCBJTkZJTklURSk7CisJVGVybWlu
YXRlVGhyZWFkKHRpZF9zLCAwKTsKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpZF9zLCBJTkZJTklU
RSk7CisJaWYgKGNsb3Nlc29ja2V0KGZkX2MpID09IFNPQ0tFVF9FUlJPUikgeworCQlkZWJ1Z19w
cmludGYoImNsb3Nlc29ja2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0
RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKGNsb3Nlc29ja2V0KGZk
X3MpID09IFNPQ0tFVF9FUlJPUikgeworCQlkZWJ1Z19wcmludGYoImNsb3Nlc29ja2V0KCkgZmFp
bGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisJV1NBQ2xlYW51cCgpOworI2Vsc2UKKwlwdGhyZWFkX2NhbmNlbCh0aWRf
Yyk7CisJcHRocmVhZF9qb2luKHRpZF9jLCBOVUxMKTsKKwlwdGhyZWFkX2NhbmNlbCh0aWRfcyk7
CisJcHRocmVhZF9qb2luKHRpZF9zLCBOVUxMKTsKKwlpZiAoY2xvc2UoZmRfYykgPCAwKSB7CisJ
CXBlcnJvcigiY2xvc2UiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoY2xvc2Uo
ZmRfcykgPCAwKSB7CisJCXBlcnJvcigiY2xvc2UiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOwor
CX0KKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFt
cy9la3JfcGVlci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX3BlZXIuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
ZWQ1MTEzMzNjZmQ5ZmIzOTU5OGNlNTcxZGRjMWE3ZGI4MDdjZTc4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX3BlZXIuYwpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwgVHVleGVuCisgKgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2pl
Y3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUK
KyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX1dJ
TjMyCisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisjZW5kaWYKKyNpbmNsdWRlIDxz
dGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1
ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0
aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGVycm5vLmg+Cisj
aW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyNpbmNsdWRl
IDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1
c3JzY3RwLmg+CisjaW5jbHVkZSAicHJvZ3JhbXNfaGVscGVyLmgiCisKKyNkZWZpbmUgTUFYX1BB
Q0tFVF9TSVpFICgxPDwxNikKKyNkZWZpbmUgTElORV9MRU5HVEggODAKKyNkZWZpbmUgRElTQ0FS
RF9QUElEIDM5CisKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBEV09SRCBXSU5BUEkKKyNlbHNlCitz
dGF0aWMgdm9pZCAqCisjZW5kaWYKK2hhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKK3sKKyNpZmRl
ZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKwlzc2l6
ZV90IGxlbmd0aDsKKwljaGFyIGJ1ZltNQVhfUEFDS0VUX1NJWkVdOworCisjaWZkZWYgX1dJTjMy
CisJZmRwID0gKFNPQ0tFVCAqKWFyZzsKKyNlbHNlCisJZmRwID0gKGludCAqKWFyZzsKKyNlbmRp
ZgorCWZvciAoOzspIHsKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisJCXB0aHJlYWRfdGVzdGNh
bmNlbCgpOworI2VuZGlmCisJCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJ
WkUsIDApOworCQlpZiAobGVuZ3RoID4gMCkgeworCQkJdXNyc2N0cF9jb25uaW5wdXQoZmRwLCBi
dWYsIChzaXplX3QpbGVuZ3RoLCAwKTsKKwkJfQorCX0KKyNpZmRlZiBfV0lOMzIKKwlyZXR1cm4g
MDsKKyNlbHNlCisJcmV0dXJuIChOVUxMKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50Citjb25u
X291dHB1dCh2b2lkICphZGRyLCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3Qg
dG9zLCB1aW50OF90IHNldF9kZikKK3sKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNl
bHNlCisJaW50ICpmZHA7CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorCWZkcCA9IChTT0NLRVQg
KilhZGRyOworI2Vsc2UKKwlmZHAgPSAoaW50ICopYWRkcjsKKyNlbmRpZgorI2lmZGVmIF9XSU4z
MgorCWlmIChzZW5kKCpmZHAsIGJ1ZmZlciwgKGludClsZW5ndGgsIDApID09IFNPQ0tFVF9FUlJP
UikgeworCQlyZXR1cm4gKFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJaWYgKHNlbmQoKmZk
cCwgYnVmZmVyLCBsZW5ndGgsIDApIDwgMCkgeworCQlyZXR1cm4gKGVycm5vKTsKKyNlbmRpZgor
CX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitzdGF0aWMgaW50CityZWNlaXZlX2Ni
KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRh
dGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwg
aW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKK3sKKwlpZiAoZGF0YSkgeworCQlpZiAoZmxhZ3Mg
JiBNU0dfTk9USUZJQ0FUSU9OKSB7CisJCQloYW5kbGVfbm90aWZpY2F0aW9uKCh1bmlvbiBzY3Rw
X25vdGlmaWNhdGlvbiAqKWRhdGEsIGRhdGFsZW4pOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJN
c2cgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIHZpYSAlcDoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04g
JXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldS5cbiIsCisJCQkgICAgICAgKGludClk
YXRhbGVuLAorCQkJICAgICAgIGFkZHIuc2Nvbm4uc2Nvbm5fYWRkciwKKwkJCSAgICAgICBudG9o
cyhhZGRyLnNjb25uLnNjb25uX3BvcnQpLAorCQkJICAgICAgIHJjdi5yY3Zfc2lkLAorCQkJICAg
ICAgIHJjdi5yY3Zfc3NuLAorCQkJICAgICAgIHJjdi5yY3ZfdHNuLAorCQkJICAgICAgICh1aW50
MzJfdCludG9obChyY3YucmN2X3BwaWQpLAorCQkJICAgICAgIHJjdi5yY3ZfY29udGV4dCk7CisJ
CX0KKwkJZnJlZShkYXRhKTsKKwl9IGVsc2UgeworCQl1c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVz
cyh1bHBfaW5mbyk7CisJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJfQorCXJldHVybiAoMSk7Cit9
CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrYWRk
cl9pbiBzaW47CisJc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47CisJc3RydWN0IHNjdHBfZXZl
bnQgZXZlbnQ7CisJdWludDE2X3QgZXZlbnRfdHlwZXNbXSA9IHtTQ1RQX0FTU09DX0NIQU5HRSwK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEVFUl9BRERSX0NIQU5HRSwKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0VORF9GQUlMRURfRVZFTlR9OworCXVuc2lnbmVk
IGludCBpOworI2lmZGVmIF9XSU4zMgorCVNPQ0tFVCBmZDsKKyNlbHNlCisJaW50IGZkLCByYzsK
KyNlbmRpZgorCXN0cnVjdCBzb2NrZXQgKnM7CisjaWZkZWYgX1dJTjMyCisJSEFORExFIHRpZDsK
KyNlbHNlCisJcHRocmVhZF90IHRpZDsKKyNlbmRpZgorCXN0cnVjdCBzY3RwX3NuZGluZm8gc25k
aW5mbzsKKwljaGFyIGxpbmVbTElORV9MRU5HVEhdOworI2lmZGVmIF9XSU4zMgorCVdTQURBVEEg
d3NhRGF0YTsKKyNlbmRpZgorCisJaWYgKGFyZ2MgPCA0KSB7CisJCXByaW50ZigiZXJyb3I6IHRo
aXMgcHJvZ3JhbSByZXF1aXJlcyA0IGFyZ3VtZW50cyFcbiIpOworCQlleGl0KEVYSVRfRkFJTFVS
RSk7CisJfQorCisjaWZkZWYgX1dJTjMyCisJaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwyKSwg
JndzYURhdGEpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJXU0FTdGFydHVwIGZhaWxlZFxu
Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKwl1c3JzY3RwX2luaXQoMCwg
Y29ubl9vdXRwdXQsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJLyogc2V0IHVwIGEgY29ubmVjdGVk
IFVEUCBzb2NrZXQgKi8KKyNpZmRlZiBfV0lOMzIKKwlpZiAoKGZkID0gc29ja2V0KEFGX0lORVQs
IFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkJZnByaW50
ZihzdGRlcnIsICJzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RF
cnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKChmZCA9IHNv
Y2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpIDwgMCkgeworCQlwZXJyb3Io
InNvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJbWVtc2V0KCZz
aW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlzaW4uc2luX2ZhbWlseSA9IEFG
X0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsy
XSkpOworCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbMV0sICZzaW4uc2luX2FkZHIuc19h
ZGRyKSl7CisJCXByaW50ZigiZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7CisJCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKKwl9CisjaWZkZWYgX1dJTjMyCisJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9S
KSB7CisJCWZwcmludGYoc3RkZXJyLCAiYmluZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwg
V1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlp
ZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJiaW5kIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsK
Kwl9CisjZW5kaWYKKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikp
OworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW4u
c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJc2luLnNpbl9w
b3J0ID0gaHRvbnMoYXRvaShhcmd2WzRdKSk7CisJaWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJn
dlszXSwgJnNpbi5zaW5fYWRkci5zX2FkZHIpKXsKKwkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBh
ZGRyZXNzXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNpZmRlZiBfV0lOMzIKKwlp
ZiAoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJZnByaW50ZihzdGRlcnIsICJjb25uZWN0
KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQo
RVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2th
ZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3Io
ImNvbm5lY3QiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorI2lmZGVmIF9X
SU4zMgorCWlmICgodGlkID0gQ3JlYXRlVGhyZWFkKE5VTEwsIDAsICZoYW5kbGVfcGFja2V0cywg
KHZvaWQgKikmZmQsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ3Jl
YXRlVGhyZWFkKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVsdVxuIiwgR2V0TGFzdEVycm9yKCkpOwor
CQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoKHJjID0gcHRocmVhZF9jcmVh
dGUoJnRpZCwgTlVMTCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZCkpICE9IDApIHsKKwkJ
ZnByaW50ZihzdGRlcnIsICJwdGhyZWFkX2NyZWF0ZTogJXNcbiIsIHN0cmVycm9yKHJjKSk7CisJ
CWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNy
c2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsKKyNlbmRpZgor
CXVzcnNjdHBfcmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZmZCk7CisJdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfZWNuX2VuYWJsZSgwKTsKKwlpZiAoKHMgPSB1c3JzY3RwX3NvY2tldChBRl9DT05O
LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmZmQpKSA9
PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwl9CisJLyogRW5hYmxlIHRo
ZSBldmVudHMgb2YgaW50ZXJlc3QuICovCisJaWYgKHVzcnNjdHBfc2V0X25vbl9ibG9ja2luZyhz
LCAxKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldF9ub25fYmxvY2tpbmciKTsKKwl9CisJ
bWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisJZXZlbnQuc2VfYXNzb2NfaWQgPSBT
Q1RQX0FMTF9BU1NPQzsKKwlldmVudC5zZV9vbiA9IDE7CisJZm9yIChpID0gMDsgaSA8IHNpemVv
ZihldmVudF90eXBlcykvc2l6ZW9mKHVpbnQxNl90KTsgaSsrKSB7CisJCWV2ZW50LnNlX3R5cGUg
PSBldmVudF90eXBlc1tpXTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzLCBJUFBST1RPX1ND
VFAsIFNDVFBfRVZFTlQsICZldmVudCwgc2l6ZW9mKGV2ZW50KSkgPCAwKSB7CisJCQlwZXJyb3Io
InNldHNvY2tvcHQgU0NUUF9FVkVOVCIpOworCQl9CisJfQorCW1lbXNldCgmc2Nvbm4sIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NP
Tk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25zKGF0
b2koYXJndls1XSkpOworCXNjb25uLnNjb25uX2FkZHIgPSAmZmQ7CisJaWYgKHVzcnNjdHBfYmlu
ZChzLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nv
bm4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwl9CisJbWVtc2V0KCZzY29u
biwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5fZmFtaWx5
ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9wb3J0ID0g
aHRvbnMoYXRvaShhcmd2WzZdKSk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZDsKKwlpZiAodXNy
c2N0cF9jb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfY29ubikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfY29ubmVjdCIpOworCX0K
Kwlmb3IgKDs7KSB7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fTUlOR1czMl9f
KQorCQlpZiAoZ2V0c19zKGxpbmUsIExJTkVfTEVOR1RIKSA9PSBOVUxMKSB7CisjZWxzZQorCQlp
ZiAoZmdldHMobGluZSwgTElORV9MRU5HVEgsIHN0ZGluKSA9PSBOVUxMKSB7CisjZW5kaWYKKwkJ
CWlmICh1c3JzY3RwX3NodXRkb3duKHMsIFNIVVRfV1IpIDwgMCkgeworCQkJCXBlcnJvcigidXNy
c2N0cF9zaHV0ZG93biIpOworCQkJfQorCQkJd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkg
eworI2lmZGVmIF9XSU4zMgorCQkJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJCQlzbGVlcCgxKTsK
KyNlbmRpZgorCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJc25kaW5mby5zbmRfc2lkID0gMTsKKwkJ
c25kaW5mby5zbmRfZmxhZ3MgPSAwOworCQlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoRElTQ0FS
RF9QUElEKTsKKwkJc25kaW5mby5zbmRfY29udGV4dCA9IDA7CisJCXNuZGluZm8uc25kX2Fzc29j
X2lkID0gMDsKKwkJaWYgKHVzcnNjdHBfc2VuZHYocywgbGluZSwgc3RybGVuKGxpbmUpLCBOVUxM
LCAwLCAodm9pZCAqKSZzbmRpbmZvLAorCQkgICAgICAgICAgICAgICAgICAoc29ja2xlbl90KXNp
emVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZPLCAwKSA8IDApIHsK
KwkJCXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOworCQl9CisJfQorCXdoaWxlICh1c3JzY3RwX2Zp
bmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMTAwMCk7CisjZWxzZQorCQlz
bGVlcCgxKTsKKyNlbmRpZgorCX0KKyNpZmRlZiBfV0lOMzIKKwlUZXJtaW5hdGVUaHJlYWQodGlk
LCAwKTsKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpZCwgSU5GSU5JVEUpOworCWlmIChjbG9zZXNv
Y2tldChmZCkgPT0gU09DS0VUX0VSUk9SKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY2xvc2Vzb2Nr
ZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwl9CisJ
V1NBQ2xlYW51cCgpOworI2Vsc2UKKwlwdGhyZWFkX2NhbmNlbCh0aWQpOworCXB0aHJlYWRfam9p
bih0aWQsIE5VTEwpOworCWlmIChjbG9zZShmZCkgPCAwKSB7CisJCXBlcnJvcigiY2xvc2UiKTsK
Kwl9CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3Jh
bXMvZWtyX3NlcnZlci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX3NlcnZlci5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE5ZGQ4NWVkZDdjYWFjMzIzYzRhZGNjZmMxODg4MzlkMjU4NjU0MTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3Jfc2VydmVyLmMKQEAgLTAsMCArMSwyODAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv
ZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
ZGVmIF9XSU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisKKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2lmbmRlZiBf
V0lOMzIKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgor
I2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cHRo
cmVhZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDx3aW5zb2NrMi5o
PgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+Cisj
aW5jbHVkZSAicHJvZ3JhbXNfaGVscGVyLmgiCisKKyNkZWZpbmUgUE9SVCA1MDAxCisjZGVmaW5l
IE1BWF9QQUNLRVRfU0laRSAoMTw8MTYpCisjZGVmaW5lIFNMRUVQIDEKKworI2lmZGVmIF9XSU4z
Mgorc3RhdGljIERXT1JEIFdJTkFQSQorI2Vsc2UKK3N0YXRpYyB2b2lkICoKKyNlbmRpZgoraGFu
ZGxlX3BhY2tldHModm9pZCAqYXJnKQoreworI2lmZGVmIF9XSU4zMgorCVNPQ0tFVCAqZmRwOwor
I2Vsc2UKKwlpbnQgKmZkcDsKKyNlbmRpZgorCWNoYXIgYnVmW01BWF9QQUNLRVRfU0laRV07CisJ
Y2hhciAqZHVtcF9idWY7CisJc3NpemVfdCBsZW5ndGg7CisKKyNpZmRlZiBfV0lOMzIKKwlmZHAg
PSAoU09DS0VUICopYXJnOworI2Vsc2UKKwlmZHAgPSAoaW50ICopYXJnOworI2VuZGlmCisJZm9y
ICg7OykgeworI2lmIGRlZmluZWQoX19OZXRCU0RfXykKKwkJcHRocmVhZF90ZXN0Y2FuY2VsKCk7
CisjZW5kaWYKKwkJbGVuZ3RoID0gcmVjdigqZmRwLCBidWYsIE1BWF9QQUNLRVRfU0laRSwgMCk7
CisJCWlmIChsZW5ndGggPiAwKSB7CisJCQlpZiAoKGR1bXBfYnVmID0gdXNyc2N0cF9kdW1wcGFj
a2V0KGJ1ZiwgKHNpemVfdClsZW5ndGgsIFNDVFBfRFVNUF9JTkJPVU5EKSkgIT0gTlVMTCkgewor
CQkJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBkdW1wX2J1Zik7CisJCQkJdXNyc2N0cF9mcmVlZHVt
cGJ1ZmZlcihkdW1wX2J1Zik7CisJCQl9CisJCQl1c3JzY3RwX2Nvbm5pbnB1dChmZHAsIGJ1Ziwg
KHNpemVfdClsZW5ndGgsIDApOworCQl9CisJfQorI2lmZGVmIF9XSU4zMgorCXJldHVybiAwOwor
I2Vsc2UKKwlyZXR1cm4gKE5VTEwpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKK2Nvbm5fb3V0
cHV0KHZvaWQgKmFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCB0b3MsIHVp
bnQ4X3Qgc2V0X2RmKQoreworCWNoYXIgKmR1bXBfYnVmOworI2lmZGVmIF9XSU4zMgorCVNPQ0tF
VCAqZmRwOworI2Vsc2UKKwlpbnQgKmZkcDsKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisJZmRw
ID0gKFNPQ0tFVCAqKWFkZHI7CisjZWxzZQorCWZkcCA9IChpbnQgKilhZGRyOworI2VuZGlmCisJ
aWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tldChidWYsIGxlbmd0aCwgU0NUUF9EVU1Q
X09VVEJPVU5EKSkgIT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgZHVtcF9idWYp
OworCQl1c3JzY3RwX2ZyZWVkdW1wYnVmZmVyKGR1bXBfYnVmKTsKKwl9CisjaWZkZWYgX1dJTjMy
CisJaWYgKHNlbmQoKmZkcCwgYnVmLCAoaW50KWxlbmd0aCwgMCkgPT0gU09DS0VUX0VSUk9SKSB7
CisJCXJldHVybiAoV1NBR2V0TGFzdEVycm9yKCkpOworI2Vsc2UKKwlpZiAoc2VuZCgqZmRwLCBi
dWYsIGxlbmd0aCwgMCkgPCAwKSB7CisJCXJldHVybiAoZXJybm8pOworI2VuZGlmCisJfSBlbHNl
IHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3JlY2VpdmVfY2Ioc3RydWN0
IHNvY2tldCAqcywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKKyAgICAg
ICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2LCBpbnQgZmxhZ3Ms
IHZvaWQgKnVscF9pbmZvKQoreworCisJaWYgKGRhdGEpIHsKKwkJaWYgKGZsYWdzICYgTVNHX05P
VElGSUNBVElPTikgeworCQkJcHJpbnRmKCJOb3RpZmljYXRpb24gb2YgbGVuZ3RoICVkIHJlY2Vp
dmVkLlxuIiwgKGludClkYXRhbGVuKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiTXNnIG9mIGxl
bmd0aCAlZCByZWNlaXZlZCB2aWEgJXA6JXUgb24gc3RyZWFtICV1IHdpdGggU1NOICV1IGFuZCBU
U04gJXUsIFBQSUQgJXUsIGNvbnRleHQgJXUuXG4iLAorCQkJICAgICAgIChpbnQpZGF0YWxlbiwK
KwkJCSAgICAgICBhZGRyLnNjb25uLnNjb25uX2FkZHIsCisJCQkgICAgICAgbnRvaHMoYWRkci5z
Y29ubi5zY29ubl9wb3J0KSwKKwkJCSAgICAgICByY3YucmN2X3NpZCwKKwkJCSAgICAgICByY3Yu
cmN2X3NzbiwKKwkJCSAgICAgICByY3YucmN2X3RzbiwKKwkJCSAgICAgICAodWludDMyX3QpbnRv
aGwocmN2LnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOworCQl9CisJCWZy
ZWUoZGF0YSk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9jbG9zZShzKTsKKwl9CisJcmV0dXJuICgx
KTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHNv
Y2thZGRyX2luIHNpbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKKyNpZmRlZiBfV0lO
MzIKKwlTT0NLRVQgZmQ7CisjZWxzZQorCWludCBmZCwgcmM7CisjZW5kaWYKKwlzdHJ1Y3Qgc29j
a2V0ICpzOworI2lmZGVmIF9XSU4zMgorCUhBTkRMRSB0aWQ7CisjZWxzZQorCXB0aHJlYWRfdCB0
aWQ7CisjZW5kaWYKKyNpZmRlZiBfV0lOMzIKKwlXU0FEQVRBIHdzYURhdGE7CisjZW5kaWYKKwor
CWlmIChhcmdjIDwgNCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB0aGlzIHByb2dyYW0g
cmVxdWlyZXMgNCBhcmd1bWVudHMhXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwor
I2lmZGVmIF9XSU4zMgorCWlmIChXU0FTdGFydHVwKE1BS0VXT1JEKDIsMiksICZ3c2FEYXRhKSAh
PSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiV1NBU3RhcnR1cCBmYWlsZWRcbiIpOworCQlleGl0
IChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCXVzcnNjdHBfaW5pdCgwLCBjb25uX291dHB1
dCwgZGVidWdfcHJpbnRmX3N0YWNrKTsKKwkvKiBzZXQgdXAgYSBjb25uZWN0ZWQgVURQIHNvY2tl
dCAqLworI2lmZGVmIF9XSU4zMgorCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JB
TSwgSVBQUk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworCQlmcHJpbnRmKHN0ZGVyciwg
InNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwor
CQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoKGZkID0gc29ja2V0KEFGX0lO
RVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPCAwKSB7CisJCXBlcnJvcigic29ja2V0Iik7
CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKwltZW1zZXQoJnNpbiwgMCwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNp
ZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pOworI2VuZGlmCisJc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7CisJaWYg
KCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndlsxXSwgJnNpbi5zaW5fYWRkci5zX2FkZHIpKXsKKwkJ
ZnByaW50ZihzdGRlcnIsICJlcnJvcjogaW52YWxpZCBhZGRyZXNzXG4iKTsKKwkJZXhpdChFWElU
X0ZBSUxVUkUpOworCX0KKyNpZmRlZiBfV0lOMzIKKwlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2Nr
YWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1Ip
IHsKKwkJZnByaW50ZihzdGRlcnIsICJiaW5kKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBX
U0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlm
IChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpIDwgMCkgeworCQlwZXJyb3IoImJpbmQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOwor
CX0KKyNlbmRpZgorCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7
CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCXNpbi5z
aW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlzaW4uc2luX3Bv
cnQgPSBodG9ucyhhdG9pKGFyZ3ZbNF0pKTsKKwlpZiAoIWluZXRfcHRvbihBRl9JTkVULCBhcmd2
WzNdLCAmc2luLnNpbl9hZGRyLnNfYWRkcikpeworCQlwcmludGYoImVycm9yOiBpbnZhbGlkIGFk
ZHJlc3NcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2lmZGVmIF9XSU4zMgorCWlm
IChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlmcHJpbnRmKHN0ZGVyciwgImNvbm5lY3Qo
KSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChF
WElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigi
Y29ubmVjdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisjaWZkZWYgU0NU
UF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9O
RSk7CisjZW5kaWYKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9lY25fZW5hYmxlKDApOworCXVz
cnNjdHBfcmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZmZCk7CisjaWZkZWYgX1dJTjMyCisJaWYg
KCh0aWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZm
ZCwgMCwgTlVMTCkpID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJDcmVhdGVUaHJlYWQo
KSBmYWlsZWQgd2l0aCBlcnJvcjogJWx1XG4iLCBHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmICgocmMgPSBwdGhyZWFkX2NyZWF0ZSgmdGlkLCBO
VUxMLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkKSkgIT0gMCkgeworCQlmcHJpbnRmKHN0
ZGVyciwgInB0aHJlYWRfY3JlYXRlOiAlc1xuIiwgc3RyZXJyb3IocmMpKTsKKwkJZXhpdChFWElU
X0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCWlmICgocyA9IHVzcnNjdHBfc29ja2V0KEFGX0NPTk4s
IFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIHJlY2VpdmVfY2IsIE5VTEwsIDAsIE5VTEwpKSA9
PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwl9CisJbWVtc2V0KCZzY29u
biwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5fZmFtaWx5
ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9wb3J0ID0g
aHRvbnMoUE9SVCk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICh2b2lkICopJmZkOworCWlmICh1c3Jz
Y3RwX2JpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9jb25uKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9iaW5kIik7CisJfQorCWlmICh1
c3JzY3RwX2xpc3RlbihzLCAxKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2xpc3RlbiIpOwor
CX0KKwl3aGlsZSAoMSkgeworCQlpZiAodXNyc2N0cF9hY2NlcHQocywgTlVMTCwgTlVMTCkgPT0g
TlVMTCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX2FjY2VwdCIpOworCQl9CisJfQorCXJldHVybiAo
MCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9odHRwX2NsaWVudC5jIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvcHJvZ3JhbXMvaHR0cF9jbGllbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2M5Mjg2MGE3NmFlYTBk
ZWQwMDY3YTY3ZDljNTY1NjM0ZWUxZDYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJv
Z3JhbXMvaHR0cF9jbGllbnQuYwpAQCAtMCwwICsxLDMxOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEZlbGl4IFdlaW5yYW5rCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB
SU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVXNhZ2U6IGh0dHBfY2xp
ZW50IHJlbW90ZV9hZGRyIHJlbW90ZV9wb3J0IFtsb2NhbF9wb3J0XSBbbG9jYWxfZW5jYXBzX3Bv
cnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdIFt1cmldCisgKgorICogRXhhbXBsZQorICogQ2xpZW50
OiAkIC4vaHR0cF9jbGllbnQgMjEyLjIwMS4xMjEuMTAwIDgwIDAgOTg5OSA5ODk5IC9jZ2ktYmlu
L2hlCisgKiAgICAgICAgICAgLi9odHRwX2NsaWVudCAyYTAyOmM2YTA6NDAxNToxMDo6MTAwIDgw
IDAgOTg5OSA5ODk5IC9jZ2ktYmluL2hlCisgKi8KKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBf
Q1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4K
KyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lu
Y2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxz
eXMvdGltZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2luY2x1ZGUgPHN5cy90aW1lYi5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgor
I2luY2x1ZGUgInByb2dyYW1zX2hlbHBlci5oIgorCisjZGVmaW5lIFJFVFZBTF9DQVRDSEFMTCAg
ICAgNTAKKyNkZWZpbmUgUkVUVkFMX1RJTUVPVVQgICAgICA2MAorI2RlZmluZSBSRVRWQUxfRUNP
Tk5SRUZVU0VEIDYxCisKK2ludCBkb25lID0gMDsKK3N0YXRpYyBjb25zdCBjaGFyICpyZXF1ZXN0
X3ByZWZpeCA9ICJHRVQiOworc3RhdGljIGNvbnN0IGNoYXIgKnJlcXVlc3RfcG9zdGZpeCA9ICJI
VFRQLzEuMFxyXG5Vc2VyLWFnZW50OiBsaWJ1c3JzY3RwXHJcbkNvbm5lY3Rpb246IGNsb3NlXHJc
blxyXG4iOworY2hhciByZXF1ZXN0WzUxMl07CisKKyNpZmRlZiBfV0lOMzIKK3R5cGVkZWYgY2hh
ciogY2FkZHJfdDsKKyNlbmRpZgorCitzdGF0aWMgaW50CityZWNlaXZlX2NiKHN0cnVjdCBzb2Nr
ZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAg
ICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzLCB2
b2lkICp1bHBfaW5mbykKK3sKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWRvbmUgPSAxOworCQl1
c3JzY3RwX2Nsb3NlKHNvY2spOworCX0gZWxzZSB7CisJCWlmIChmbGFncyAmIE1TR19OT1RJRklD
QVRJT04pIHsKKwkJCWhhbmRsZV9ub3RpZmljYXRpb24oKHVuaW9uIHNjdHBfbm90aWZpY2F0aW9u
ICopZGF0YSwgZGF0YWxlbik7CisJCX0gZWxzZSB7CisjaWZkZWYgX1dJTjMyCisJCV93cml0ZShf
ZmlsZW5vKHN0ZG91dCksIGRhdGEsICh1bnNpZ25lZCBpbnQpZGF0YWxlbik7CisjZWxzZQorCQlp
ZiAod3JpdGUoZmlsZW5vKHN0ZG91dCksIGRhdGEsIGRhdGFsZW4pIDwgMCkgeworCQkJcGVycm9y
KCJ3cml0ZSIpOworCQl9CisjZW5kaWYKKwkJfQorCQlmcmVlKGRhdGEpOworCX0KKwlyZXR1cm4g
KDEpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qg
c29ja2V0ICpzb2NrOworCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKwlzb2NrbGVuX3QgYWRkcl9s
ZW47CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI0OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRk
cjY7CisJc3RydWN0IHNvY2thZGRyX2luIGJpbmQ0OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgYmlu
ZDY7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZv
IHNuZGluZm87CisJc3RydWN0IHNjdHBfcnRvaW5mbyBydG9pbmZvOworCXN0cnVjdCBzY3RwX2lu
aXRtc2cgaW5pdG1zZzsKKwlzdHJ1Y3Qgc2N0cF9ldmVudCBldmVudDsKKwlpbnQgcmVzdWx0ID0g
MDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1aW50OF90IGFkZHJlc3NfZmFtaWx5ID0gMDsKKwl1aW50
MTZfdCBldmVudF90eXBlc1tdID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgU0NUUF9QRUVSX0FERFJfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVCwKKyAJICAgICAgICAgICAgICAgICAgICAgICAg
ICBTQ1RQX1JFTU9URV9FUlJPUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0hV
VERPV05fRVZFTlQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FEQVBUQVRJT05f
SU5ESUNBVElPTiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEFSVElBTF9ERUxJ
VkVSWV9FVkVOVAorCSAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKwlpZiAoYXJnYyA8IDMp
IHsKKwkJcHJpbnRmKCJVc2FnZTogaHR0cF9jbGllbnQgcmVtb3RlX2FkZHIgcmVtb3RlX3BvcnQg
W2xvY2FsX3BvcnRdIFtsb2NhbF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9lbmNhcHNfcG9ydF0gW3Vy
aV1cbiIpOworCQlyZXR1cm4oRVhJVF9GQUlMVVJFKTsKKwl9CisKKwltZW1zZXQoKHZvaWQgKikm
YWRkcjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwltZW1zZXQoKHZvaWQgKikm
YWRkcjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisKKwlpZiAoaW5ldF9wdG9u
KEFGX0lORVQsIGFyZ3ZbMV0sICZhZGRyNC5zaW5fYWRkcikgPT0gMSkgeworCQlhZGRyZXNzX2Zh
bWlseSA9IEFGX0lORVQ7CisKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjQ7CisJ
CWFkZHJfbGVuID0gc2l6ZW9mKGFkZHI0KTsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJYWRkcjQu
c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCWFkZHI0LnNp
bl9mYW1pbHkgPSBBRl9JTkVUOworCQlhZGRyNC5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsy
XSkpOworCX0gZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmd2WzFdLCAmYWRkcjYuc2lu
Nl9hZGRyKSA9PSAxKSB7CisJCWFkZHJlc3NfZmFtaWx5ID0gQUZfSU5FVDY7CisKKwkJYWRkciA9
IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjY7CisJCWFkZHJfbGVuID0gc2l6ZW9mKGFkZHI2KTsK
KyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCWFkZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpOworI2VuZGlmCisJCWFkZHI2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJ
CWFkZHI2LnNpbjZfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCX0gZWxzZSB7CisJCXBy
aW50ZigiVW5zdXBwb3J0ZWQgZGVzdGluYXRpb24gYWRkcmVzcyAtIHVzZSBJUHY0IG9yIElQdjYg
YWRkcmVzc1xuIik7CisJCXJlc3VsdCA9IFJFVFZBTF9DQVRDSEFMTDsKKwkJZ290byBvdXQ7CisJ
fQorCisJaWYgKGFyZ2MgPiA0KSB7CisJCXVzcnNjdHBfaW5pdChhdG9pKGFyZ3ZbNF0pLCBOVUxM
LCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0gZWxzZSB7CisJCXVzcnNjdHBfaW5pdCg5ODk5LCBO
VUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0KKworI2lmZGVmIFNDVFBfREVCVUcKKwl1c3Jz
Y3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX0FMTCk7CisjZW5kaWYKKwor
CXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKKwl1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKDApOworCisJaWYgKChzb2NrID0gdXNyc2N0cF9z
b2NrZXQoYWRkcmVzc19mYW1pbHksIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIHJlY2VpdmVf
Y2IsIE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQi
KTsKKwkJcmVzdWx0ID0gUkVUVkFMX0NBVENIQUxMOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1z
ZXQoJmV2ZW50LCAwLCBzaXplb2YoZXZlbnQpKTsKKwlldmVudC5zZV9hc3NvY19pZCA9IFNDVFBf
QUxMX0FTU09DOworCWV2ZW50LnNlX29uID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGV2
ZW50X3R5cGVzKSAvIHNpemVvZih1aW50MTZfdCk7IGkrKykgeworCQlldmVudC5zZV90eXBlID0g
ZXZlbnRfdHlwZXNbaV07CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19T
Q1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVvZihldmVudCkpIDwgMCkgeworCQkJcGVycm9y
KCJzZXRzb2Nrb3B0IFNDVFBfRVZFTlQiKTsKKwkJfQorCX0KKworCXJ0b2luZm8uc3J0b19hc3Nv
Y19pZCA9IDA7CisJcnRvaW5mby5zcnRvX2luaXRpYWwgPSAxMDAwOworCXJ0b2luZm8uc3J0b19t
aW4gPSAxMDAwOworCXJ0b2luZm8uc3J0b19tYXggPSA4MDAwOworCWlmICh1c3JzY3RwX3NldHNv
Y2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JUT0lORk8sIChjb25zdCB2b2lkICopJnJ0
b2luZm8sIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3J0b2luZm8pKSA8IDApIHsKKwkJ
cGVycm9yKCJzZXRzb2Nrb3B0Iik7CisJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJCXJlc3VsdCA9
IFJFVFZBTF9DQVRDSEFMTDsKKwkJZ290byBvdXQ7CisJfQorCWluaXRtc2cuc2luaXRfbnVtX29z
dHJlYW1zID0gMTsKKwlpbml0bXNnLnNpbml0X21heF9pbnN0cmVhbXMgPSAxOworCWluaXRtc2cu
c2luaXRfbWF4X2F0dGVtcHRzID0gNTsKKwlpbml0bXNnLnNpbml0X21heF9pbml0X3RpbWVvID0g
NDAwMDsKKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9J
TklUTVNHLCAoY29uc3Qgdm9pZCAqKSZpbml0bXNnLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qg
c2N0cF9pbml0bXNnKSkgPCAwKSB7CisJCXBlcnJvcigic2V0c29ja29wdCIpOworCQl1c3JzY3Rw
X2Nsb3NlKHNvY2spOworCQlyZXN1bHQgPSBSRVRWQUxfQ0FUQ0hBTEw7CisJCWdvdG8gb3V0Owor
CX0KKworCWlmIChhcmdjID4gMykgeworCisJCWlmIChhZGRyZXNzX2ZhbWlseSA9PSBBRl9JTkVU
KSB7CisJCQltZW1zZXQoKHZvaWQgKikmYmluZDQsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pKTsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJCWJpbmQ0LnNpbl9sZW4gPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJCWJpbmQ0LnNpbl9mYW1pbHkgPSBBRl9JTkVU
OworCQkJYmluZDQuc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbM10pKTsKKwkJCWJpbmQ0LnNp
bl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOworCisJCQlpZiAodXNyc2N0cF9iaW5k
KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYmluZDQsIHNpemVvZihiaW5kNCkpIDwgMCkgewor
CQkJCXBlcnJvcigiYmluZCIpOworCQkJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJCQkJcmVzdWx0
ID0gUkVUVkFMX0NBVENIQUxMOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJ
bWVtc2V0KCh2b2lkICopJmJpbmQ2LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwor
I2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJCWJpbmQ2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpOworI2VuZGlmCisJCQliaW5kNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owor
CQkJYmluZDYuc2luNl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzNdKSk7CisJCQliaW5kNi5zaW42
X2FkZHIgPSBpbjZhZGRyX2FueTsKKwkJCWlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBz
b2NrYWRkciAqKSZiaW5kNiwgc2l6ZW9mKGJpbmQ2KSkgPCAwKSB7CisJCQkJcGVycm9yKCJiaW5k
Iik7CisJCQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJCQlyZXN1bHQgPSBSRVRWQUxfQ0FUQ0hB
TEw7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoYXJnYyA+IDUpIHsKKwkJ
bWVtc2V0KCZlbmNhcHMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5j
YXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9IGFkZHJlc3NfZmFtaWx5OworCQllbmNhcHMuc3Vl
X3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbNV0pKTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChz
b2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZv
aWQgKikmZW5jYXBzLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8
IDApIHsKKwkJCXBlcnJvcigic2V0c29ja29wdCIpOworCQkJdXNyc2N0cF9jbG9zZShzb2NrKTsK
KwkJCXJlc3VsdCA9IFJFVFZBTF9DQVRDSEFMTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJ
aWYgKGFyZ2MgPiA2KSB7CisjaWZkZWYgX1dJTjMyCisJCWlmIChfc25wcmludGYocmVxdWVzdCwg
c2l6ZW9mKHJlcXVlc3QpLCAiJXMgJXMgJXMiLCByZXF1ZXN0X3ByZWZpeCwgYXJndls2XSwgcmVx
dWVzdF9wb3N0Zml4KSA8IDApIHsKKyNlbHNlCisJCWlmIChzbnByaW50ZihyZXF1ZXN0LCBzaXpl
b2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCBhcmd2WzZdLCByZXF1ZXN0
X3Bvc3RmaXgpIDwgMCkgeworI2VuZGlmCisJCQlyZXF1ZXN0WzBdID0gJ1wwJzsKKwkJfQorCX0g
ZWxzZSB7CisjaWZkZWYgX1dJTjMyCisJCWlmIChfc25wcmludGYocmVxdWVzdCwgc2l6ZW9mKHJl
cXVlc3QpLCAiJXMgJXMgJXMiLCByZXF1ZXN0X3ByZWZpeCwgIi8iLCByZXF1ZXN0X3Bvc3RmaXgp
IDwgMCkgeworI2Vsc2UKKwkJaWYgKHNucHJpbnRmKHJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwg
IiVzICVzICVzIiwgcmVxdWVzdF9wcmVmaXgsICIvIiwgcmVxdWVzdF9wb3N0Zml4KSA8IDApIHsK
KyNlbmRpZgorCQkJcmVxdWVzdFswXSA9ICdcMCc7CisJCX0KKwl9CisKKwlwcmludGYoIlxuSFRU
UCByZXF1ZXN0OlxuJXNcbiIsIHJlcXVlc3QpOworCXByaW50ZigiXG5IVFRQIHJlc3BvbnNlOlxu
Iik7CisKKwlpZiAodXNyc2N0cF9jb25uZWN0KHNvY2ssIGFkZHIsIGFkZHJfbGVuKSA8IDApIHsK
KwkJaWYgKGVycm5vID09IEVDT05OUkVGVVNFRCkgeworCQkJcmVzdWx0ID0gUkVUVkFMX0VDT05O
UkVGVVNFRDsKKwkJfSBlbHNlIGlmIChlcnJubyA9PSBFVElNRURPVVQpIHsKKwkJCXJlc3VsdCA9
IFJFVFZBTF9USU1FT1VUOworCQl9IGVsc2UgeworCQkJcmVzdWx0ID0gUkVUVkFMX0NBVENIQUxM
OworCQl9CisJCXBlcnJvcigidXNyc2N0cF9jb25uZWN0Iik7CisJCXVzcnNjdHBfY2xvc2Uoc29j
ayk7CisKKwkJZ290byBvdXQ7CisJfQorCisJbWVtc2V0KCZzbmRpbmZvLCAwLCBzaXplb2Yoc3Ry
dWN0IHNjdHBfc25kaW5mbykpOworCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubCg2Myk7IC8qIFBQ
SUQgZm9yIEhUVFAvU0NUUCAqLworCS8qIHNlbmQgR0VUIHJlcXVlc3QgKi8KKwlpZiAodXNyc2N0
cF9zZW5kdihzb2NrLCByZXF1ZXN0LCBzdHJsZW4ocmVxdWVzdCksIE5VTEwsIDAsICZzbmRpbmZv
LCBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAw
KSB7CisJCXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOworCQl1c3JzY3RwX2Nsb3NlKHNvY2spOwor
CQlyZXN1bHQgPSBSRVRWQUxfQ0FUQ0hBTEw7CisJCWdvdG8gb3V0OworCX0KKworCXdoaWxlICgh
ZG9uZSkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcCgxKjEwMDApOworI2Vsc2UKKwkJc2xlZXAo
MSk7CisjZW5kaWYKKwl9CitvdXQ6CisJd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgewor
I2lmZGVmIF9XSU4zMgorCQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJCXNsZWVwKDEpOworI2VuZGlm
CisJfQorCXByaW50ZigiRmluaXNoZWQsIHJldHVybmluZyB3aXRoICVkXG4iLCByZXN1bHQpOwor
CXJldHVybiAocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2h0dHBf
Y2xpZW50X3VwY2FsbC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvaHR0cF9jbGllbnRfdXBjYWxsLmMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDQyMjFjMjU5MzgxMjM2NmQ4NTNlMDU1NWIzNzlhYjg3Y2UwNzc0MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2h0dHBfY2xpZW50X3VwY2FsbC5jCkBA
IC0wLDAgKzEsMzMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgRmVsaXggV2Vp
bnJhbmsKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
UFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN
QUdFLgorICovCisKKy8qCisgKiBVc2FnZTogaHR0cF9jbGllbnRfdXBjYWxsIHJlbW90ZV9hZGRy
IHJlbW90ZV9wb3J0IFtsb2NhbF9wb3J0XSBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5j
YXBzX3BvcnRdIFt1cmldCisgKi8KKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VS
RV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpZm5kZWYg
X1dJTjMyCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5l
dGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5o
PgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZWIuaD4K
KyNpbmNsdWRlIDxpby5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgorI2luY2x1ZGUg
InByb2dyYW1zX2hlbHBlci5oIgorCisKKyNkZWZpbmUgUkVUVkFMX0NBVENIQUxMICAgICA1MAor
I2RlZmluZSBSRVRWQUxfVElNRU9VVCAgICAgIDYwCisjZGVmaW5lIFJFVFZBTF9FQ09OTlJFRlVT
RUQgNjEKKworaW50IGRvbmUgPSAwOworaW50IHdyaXRlUGVuZGluZyA9IDE7CitpbnQgcmVzdWx0
ID0gMDsKKworc3RhdGljIGNvbnN0IGNoYXIgKnJlcXVlc3RfcHJlZml4ID0gIkdFVCI7CitzdGF0
aWMgY29uc3QgY2hhciAqcmVxdWVzdF9wb3N0Zml4ID0gIkhUVFAvMS4wXHJcblVzZXItYWdlbnQ6
IGxpYnVzcnNjdHBcclxuQ29ubmVjdGlvbjogY2xvc2VcclxuXHJcbiI7CitjaGFyIHJlcXVlc3Rb
NTEyXTsKKworI2lmZGVmIF9XSU4zMgordHlwZWRlZiBjaGFyKiBjYWRkcl90OworI2VuZGlmCisK
KyNkZWZpbmUgQlVGRkVSU0laRSAoMTw8MTYpCisKK3N0YXRpYyB2b2lkIGhhbmRsZV91cGNhbGwo
c3RydWN0IHNvY2tldCAqc29jaywgdm9pZCAqYXJnLCBpbnQgZmxncykKK3sKKwlpbnQgZXZlbnRz
ID0gdXNyc2N0cF9nZXRfZXZlbnRzKHNvY2spOworCXNzaXplX3QgYnl0ZXNTZW50OworCWNoYXIg
KmJ1ZjsKKworCWlmICgoZXZlbnRzICYgU0NUUF9FVkVOVF9SRUFEKSAmJiAhZG9uZSkgeworCQlz
dHJ1Y3Qgc2N0cF9yZWN2dl9ybiBybjsKKwkJc3NpemVfdCBuOworCQlzdHJ1Y3Qgc29ja2FkZHJf
aW4gYWRkcjsKKwkJYnVmID0gbWFsbG9jKEJVRkZFUlNJWkUpOworCQlpbnQgZmxhZ3MgPSAwOwor
CQlzb2NrbGVuX3QgbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsK
KwkJdW5zaWduZWQgaW50IGluZm90eXBlID0gMDsKKwkJc29ja2xlbl90IGluZm9sZW4gPSBzaXpl
b2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4pOworCisJCW1lbXNldCgmcm4sIDAsIHNpemVvZihzdHJ1
Y3Qgc2N0cF9yZWN2dl9ybikpOworCQluID0gdXNyc2N0cF9yZWN2dihzb2NrLCBidWYsIEJVRkZF
UlNJWkUsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsICZsZW4sICh2b2lkICopJnJuLAorCQkg
ICAgICAgICAgICAgICAgICAmaW5mb2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOworCisJCWlmIChu
IDwgMCkgeworCQkJaWYgKGVycm5vID09IEVDT05OUkVGVVNFRCkgeworCQkJCXJlc3VsdCA9IFJF
VFZBTF9FQ09OTlJFRlVTRUQ7CisJCQl9IGVsc2UgaWYgKGVycm5vID09IEVUSU1FRE9VVCkgewor
CQkJCXJlc3VsdCA9IFJFVFZBTF9USU1FT1VUOworCQkJfSBlbHNlIHsKKwkJCQlyZXN1bHQgPSBS
RVRWQUxfQ0FUQ0hBTEw7CisJCQl9CisJCQlwZXJyb3IoInVzcnNjdHBfcmVjdnYiKTsKKwkJfQor
CisJCWlmIChuIDw9IDApIHsKKwkJCWRvbmUgPSAxOworCQkJdXNyc2N0cF9jbG9zZShzb2NrKTsK
KwkJfSBlbHNlIHsKKyNpZmRlZiBfV0lOMzIKKwkJCV93cml0ZShfZmlsZW5vKHN0ZG91dCksIGJ1
ZiwgKHVuc2lnbmVkIGludCluKTsKKyNlbHNlCisJCQlpZiAod3JpdGUoZmlsZW5vKHN0ZG91dCks
IGJ1ZiwgbikgPCAwKSB7CisJCQkJcGVycm9yKCJ3cml0ZSIpOworCQkJfQorI2VuZGlmCisJCX0K
KwkJZnJlZShidWYpOworCX0KKworCWlmICgoZXZlbnRzICYgU0NUUF9FVkVOVF9XUklURSkgJiYg
d3JpdGVQZW5kaW5nICYmICFkb25lKSB7CisJCXdyaXRlUGVuZGluZyA9IDA7CisJCXByaW50Zigi
XG5IVFRQIHJlcXVlc3Q6XG4lc1xuIiwgcmVxdWVzdCk7CisJCXByaW50ZigiXG5IVFRQIHJlc3Bv
bnNlOlxuIik7CisKKwkJLyogc2VuZCBHRVQgcmVxdWVzdCAqLworCQlieXRlc1NlbnQgPSB1c3Jz
Y3RwX3NlbmR2KHNvY2ssIHJlcXVlc3QsIHN0cmxlbihyZXF1ZXN0KSwgTlVMTCwgMCwgTlVMTCwg
MCwgU0NUUF9TRU5EVl9OT0lORk8sIDApOworCQlpZiAoYnl0ZXNTZW50IDwgMCkgeworCQkJcGVy
cm9yKCJ1c3JzY3RwX3NlbmR2Iik7CisJCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCQl9IGVsc2Ug
eworCQkJcHJpbnRmKCIlemQgYnl0ZXMgc2VudFxuIiwgYnl0ZXNTZW50KTsKKwkJfQorCX0KK30K
KworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHNvY2tldCAq
c29jazsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisJc29ja2xlbl90IGFkZHJfbGVuOworCXN0
cnVjdCBzb2NrYWRkcl9pbiBhZGRyNDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI2OworCXN0
cnVjdCBzb2NrYWRkcl9pbiBiaW5kNDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGJpbmQ2OworCXN0
cnVjdCBzY3RwX3VkcGVuY2FwcyBlbmNhcHM7CisJc3RydWN0IHNjdHBfcnRvaW5mbyBydG9pbmZv
OworCXN0cnVjdCBzY3RwX2luaXRtc2cgaW5pdG1zZzsKKwl1aW50OF90IGFkZHJlc3NfZmFtaWx5
ID0gMDsKKworCWlmIChhcmdjIDwgMykgeworCQlwcmludGYoIlVzYWdlOiBodHRwX2NsaWVudF91
cGNhbGwgcmVtb3RlX2FkZHIgcmVtb3RlX3BvcnQgW2xvY2FsX3BvcnRdIFtsb2NhbF9lbmNhcHNf
cG9ydF0gW3JlbW90ZV9lbmNhcHNfcG9ydF0gW3VyaV1cbiIpOworCQlyZXR1cm4oRVhJVF9GQUlM
VVJFKTsKKwl9CisKKwltZW1zZXQoKHZvaWQgKikmYWRkcjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKwltZW1zZXQoKHZvaWQgKikmYWRkcjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KSk7CisKKwlpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbMV0sICZhZGRyNC5z
aW5fYWRkcikgPT0gMSkgeworCQlhZGRyZXNzX2ZhbWlseSA9IEFGX0lORVQ7CisKKwkJYWRkciA9
IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjQ7CisJCWFkZHJfbGVuID0gc2l6ZW9mKGFkZHI0KTsK
KyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJYWRkcjQuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pOworI2VuZGlmCisJCWFkZHI0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCQlhZGRy
NC5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCX0gZWxzZSBpZiAoaW5ldF9wdG9u
KEFGX0lORVQ2LCBhcmd2WzFdLCAmYWRkcjYuc2luNl9hZGRyKSA9PSAxKSB7CisJCWFkZHJlc3Nf
ZmFtaWx5ID0gQUZfSU5FVDY7CisKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjY7
CisJCWFkZHJfbGVuID0gc2l6ZW9mKGFkZHI2KTsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCWFk
ZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJCWFk
ZHI2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJCWFkZHI2LnNpbjZfcG9ydCA9IGh0b25zKGF0
b2koYXJndlsyXSkpOworCX0gZWxzZSB7CisJCXByaW50ZigiVW5zdXBwb3J0ZWQgZGVzdGluYXRp
b24gYWRkcmVzcyAtIHVzZSBJUHY0IG9yIElQdjYgYWRkcmVzc1xuIik7CisJCXJlc3VsdCA9IFJF
VFZBTF9DQVRDSEFMTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGFyZ2MgPiA0KSB7CisJCXVz
cnNjdHBfaW5pdChhdG9pKGFyZ3ZbNF0pLCBOVUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0g
ZWxzZSB7CisJCXVzcnNjdHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOwor
CX0KKworI2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19v
bihTQ1RQX0RFQlVHX0FMTCk7CisjZW5kaWYKKworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2Js
YWNraG9sZSgyKTsKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ub19jc3VtX29uX2xvb3BiYWNr
KDApOworCisJaWYgKChzb2NrID0gdXNyc2N0cF9zb2NrZXQoYWRkcmVzc19mYW1pbHksIFNPQ0tf
U1RSRUFNLCBJUFBST1RPX1NDVFAsIE5VTEwsIE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJ
CXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwkJcmVzdWx0ID0gUkVUVkFMX0NBVENIQUxMOwor
CQlnb3RvIG91dDsKKwl9CisKKwkvKiB1c3JzY3RwX3NldF9ub25fYmxvY2tpbmcoc29jaywgMSk7
ICovCisKKwlydG9pbmZvLnNydG9fYXNzb2NfaWQgPSAwOworCXJ0b2luZm8uc3J0b19pbml0aWFs
ID0gMTAwMDsKKwlydG9pbmZvLnNydG9fbWluID0gMTAwMDsKKwlydG9pbmZvLnNydG9fbWF4ID0g
ODAwMDsKKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9S
VE9JTkZPLCAoY29uc3Qgdm9pZCAqKSZydG9pbmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qg
c2N0cF9ydG9pbmZvKSkgPCAwKSB7CisJCXBlcnJvcigic2V0c29ja29wdCIpOworCQl1c3JzY3Rw
X2Nsb3NlKHNvY2spOworCQlyZXN1bHQgPSBSRVRWQUxfQ0FUQ0hBTEw7CisJCWdvdG8gb3V0Owor
CX0KKwlpbml0bXNnLnNpbml0X251bV9vc3RyZWFtcyA9IDE7CisJaW5pdG1zZy5zaW5pdF9tYXhf
aW5zdHJlYW1zID0gMTsKKwlpbml0bXNnLnNpbml0X21heF9hdHRlbXB0cyA9IDU7CisJaW5pdG1z
Zy5zaW5pdF9tYXhfaW5pdF90aW1lbyA9IDQwMDA7CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChz
b2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfSU5JVE1TRywgKGNvbnN0IHZvaWQgKikmaW5pdG1zZywg
KHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfaW5pdG1zZykpIDwgMCkgeworCQlwZXJyb3Io
InNldHNvY2tvcHQiKTsKKwkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJcmVzdWx0ID0gUkVUVkFM
X0NBVENIQUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoYXJnYyA+IDMpIHsKKworCQlpZiAo
YWRkcmVzc19mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJbWVtc2V0KCh2b2lkICopJmJpbmQ0LCAw
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCQli
aW5kNC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJCQli
aW5kNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwkJCWJpbmQ0LnNpbl9wb3J0ID0gaHRvbnMoYXRv
aShhcmd2WzNdKSk7CisJCQliaW5kNC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5Z
KTsKKworCQkJaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmJpbmQ0
LCBzaXplb2YoYmluZDQpKSA8IDApIHsKKwkJCQlwZXJyb3IoImJpbmQiKTsKKwkJCQl1c3JzY3Rw
X2Nsb3NlKHNvY2spOworCQkJCXJlc3VsdCA9IFJFVFZBTF9DQVRDSEFMTDsKKwkJCQlnb3RvIG91
dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW1lbXNldCgodm9pZCAqKSZiaW5kNiwgMCwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCQliaW5kNi5z
aW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQkJYmluZDYu
c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwkJCWJpbmQ2LnNpbjZfcG9ydCA9IGh0b25zKGF0b2ko
YXJndlszXSkpOworCQkJYmluZDYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisJCQlpZiAodXNy
c2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYmluZDYsIHNpemVvZihiaW5kNikp
IDwgMCkgeworCQkJCXBlcnJvcigiYmluZCIpOworCQkJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJ
CQkJcmVzdWx0ID0gUkVUVkFMX0NBVENIQUxMOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJ
fQorCisJaWYgKGFyZ2MgPiA1KSB7CisJCW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0
IHNjdHBfdWRwZW5jYXBzKSk7CisJCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBhZGRy
ZXNzX2ZhbWlseTsKKwkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzVdKSk7CisJ
CWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9V
RFBfRU5DQVBTX1BPUlQsIChjb25zdCB2b2lkICopJmVuY2FwcywgKHNvY2tsZW5fdClzaXplb2Yo
c3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7CisJCQlwZXJyb3IoInNldHNvY2tvcHQiKTsK
KwkJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJCQlyZXN1bHQgPSBSRVRWQUxfQ0FUQ0hBTEw7CisJ
CQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChhcmdjID4gNikgeworI2lmZGVmIF9XSU4zMgor
CQlpZiAoX3NucHJpbnRmKHJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgIiVzICVzICVzIiwgcmVx
dWVzdF9wcmVmaXgsIGFyZ3ZbNl0sIHJlcXVlc3RfcG9zdGZpeCkgPCAwKSB7CisjZWxzZQorCQlp
ZiAoc25wcmludGYocmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpLCAiJXMgJXMgJXMiLCByZXF1ZXN0
X3ByZWZpeCwgYXJndls2XSwgcmVxdWVzdF9wb3N0Zml4KSA8IDApIHsKKyNlbmRpZgorCQkJcmVx
dWVzdFswXSA9ICdcMCc7CisJCX0KKwl9IGVsc2UgeworI2lmZGVmIF9XSU4zMgorCQlpZiAoX3Nu
cHJpbnRmKHJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgIiVzICVzICVzIiwgcmVxdWVzdF9wcmVm
aXgsICIvIiwgcmVxdWVzdF9wb3N0Zml4KSA8IDApIHsKKyNlbHNlCisJCWlmIChzbnByaW50Zihy
ZXF1ZXN0LCBzaXplb2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCAiLyIs
IHJlcXVlc3RfcG9zdGZpeCkgPCAwKSB7CisjZW5kaWYKKwkJCXJlcXVlc3RbMF0gPSAnXDAnOwor
CQl9CisJfQorCisJcHJpbnRmKCJcbkhUVFAgcmVxdWVzdDpcbiVzXG4iLCByZXF1ZXN0KTsKKwlw
cmludGYoIlxuSFRUUCByZXNwb25zZTpcbiIpOworCisKKwl1c3JzY3RwX3NldF91cGNhbGwoc29j
aywgaGFuZGxlX3VwY2FsbCwgTlVMTCk7CisJdXNyc2N0cF9zZXRfbm9uX2Jsb2NraW5nKHNvY2ss
IDEpOworCisJaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCBhZGRyLCBhZGRyX2xlbikgPCAwKSB7
CisJCWlmIChlcnJubyAhPSBFSU5QUk9HUkVTUykgeworCQkJaWYgKGVycm5vID09IEVDT05OUkVG
VVNFRCkgeworCQkJCXJlc3VsdCA9IFJFVFZBTF9FQ09OTlJFRlVTRUQ7CisJCQl9IGVsc2UgaWYg
KGVycm5vID09IEVUSU1FRE9VVCkgeworCQkJCXJlc3VsdCA9IFJFVFZBTF9USU1FT1VUOworCQkJ
fSBlbHNlIHsKKwkJCQlyZXN1bHQgPSBSRVRWQUxfQ0FUQ0hBTEw7CisJCQl9CisJCQlwZXJyb3Io
InVzcnNjdHBfY29ubmVjdCIpOworCQl9CisJfQorCisJd2hpbGUgKCFkb25lKSB7CisjaWZkZWYg
X1dJTjMyCisJCVNsZWVwKDEqMTAwMCk7CisjZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRpZgorCX0K
K291dDoKKwl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAwKSB7CisjaWZkZWYgX1dJTjMyCisJ
CVNsZWVwKDEwMDApOworI2Vsc2UKKwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9CisKKwlwcmludGYo
IkZpbmlzaGVkLCByZXR1cm5pbmcgd2l0aCAlZFxuIiwgcmVzdWx0KTsKKwlyZXR1cm4gKHJlc3Vs
dCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9tZXNvbi5idWlsZCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3Byb2dyYW1zL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2MjlhNDRiY2QyNWM1NmExZDVh
M2I5YjNkYmY0NjBmNGNkNGJiMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFt
cy9tZXNvbi5idWlsZApAQCAtMCwwICsxLDI4IEBACisjIEhlbHBlciBzb3VyY2VzIGZvciBhbGwg
cHJvZ3JhbXMKK3Byb2dyYW1zX2hlbHBlcl9zb3VyY2VzID0gZmlsZXMoJ3Byb2dyYW1zX2hlbHBl
ci5jJykKKworIyBQcm9ncmFtcyBhbmQgdGhlaXIgc291cmNlcworcHJvZ3JhbXMgPSB7CisgICAg
J2NoYXJnZW5fc2VydmVyX3VwY2FsbCc6IGZpbGVzKCdjaGFyZ2VuX3NlcnZlcl91cGNhbGwuYycp
LAorICAgICdjbGllbnQnOiBmaWxlcygnY2xpZW50LmMnKSwKKyAgICAnc3RfY2xpZW50JzogZmls
ZXMoJ3N0X2NsaWVudC5jJyksCisgICAgJ2NsaWVudF91cGNhbGwnOiBmaWxlcygnY2xpZW50X3Vw
Y2FsbC5jJyksCisgICAgJ2RheXRpbWVfc2VydmVyJzogZmlsZXMoJ2RheXRpbWVfc2VydmVyLmMn
KSwKKyAgICAnZGF5dGltZV9zZXJ2ZXJfdXBjYWxsJzogZmlsZXMoJ2RheXRpbWVfc2VydmVyX3Vw
Y2FsbC5jJyksCisgICAgJ2Rpc2NhcmRfc2VydmVyJzogZmlsZXMoJ2Rpc2NhcmRfc2VydmVyLmMn
KSwKKyAgICAnZGlzY2FyZF9zZXJ2ZXJfdXBjYWxsJzogZmlsZXMoJ2Rpc2NhcmRfc2VydmVyX3Vw
Y2FsbC5jJyksCisgICAgJ2VjaG9fc2VydmVyJzogZmlsZXMoJ2VjaG9fc2VydmVyLmMnKSwKKyAg
ICAnZWNob19zZXJ2ZXJfdXBjYWxsJzogZmlsZXMoJ2VjaG9fc2VydmVyX3VwY2FsbC5jJyksCisg
ICAgJ2Vrcl9jbGllbnQnOiBmaWxlcygnZWtyX2NsaWVudC5jJyksCisgICAgJ2Vrcl9sb29wJzog
ZmlsZXMoJ2Vrcl9sb29wLmMnKSwKKyAgICAnZWtyX2xvb3BfdXBjYWxsJzogZmlsZXMoJ2Vrcl9s
b29wX3VwY2FsbC5jJyksCisgICAgJ2Vrcl9wZWVyJzogZmlsZXMoJ2Vrcl9wZWVyLmMnKSwKKyAg
ICAnZWtyX3NlcnZlcic6IGZpbGVzKCdla3Jfc2VydmVyLmMnKSwKKyAgICAnaHR0cF9jbGllbnQn
OiBmaWxlcygnaHR0cF9jbGllbnQuYycpLAorICAgICdodHRwX2NsaWVudF91cGNhbGwnOiBmaWxl
cygnaHR0cF9jbGllbnRfdXBjYWxsLmMnKSwKKyAgICAncnRjd2ViJzogZmlsZXMoJ3J0Y3dlYi5j
JyksCisgICAgJ3Rlc3RfbGlibWdtdCc6IGZpbGVzKCd0ZXN0X2xpYm1nbXQuYycpLAorICAgICd0
ZXN0X3RpbWVyJzogZmlsZXMoJ3Rlc3RfdGltZXIuYycpLAorICAgICd0c2N0cCc6IGZpbGVzKCd0
c2N0cC5jJyksCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Byb2dyYW1zX2hl
bHBlci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvcHJvZ3JhbXNfaGVscGVyLmMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjYxYTViNTY0NWQyYzhlMjlkYzg2YzQ2ZWY4N2VhOGIzZjAyMWU0OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3Byb2dyYW1zL3Byb2dyYW1zX2hlbHBlci5jCkBAIC0wLDAgKzEsNDg2IEBA
CisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxOSAtMjAyMCBGZWxpeCBXZWlucmFuaworICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBfQ1JUX1NF
Q1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg
PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHVzcnNjdHAuaD4KKwor
I2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPGFycGEvaW5l
dC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZWIu
aD4KKyNpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJwcm9ncmFtc19oZWxwZXIu
aCIKKworI2RlZmluZSBERUZBVUxUX1RBUkdFVCBzdGRvdXQ7CisKK3N0YXRpYyBGSUxFICpkZWJ1
Z190YXJnZXQgPSBOVUxMOworCisjaWZkZWYgX1dJTjMyCitzdGF0aWMgdm9pZAorZ2V0dGltZW9m
ZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgdm9pZCAqaWdub3JlKQoreworCUZJTEVUSU1FIGZpbGV0
aW1lOworCVVMQVJHRV9JTlRFR0VSIHVsYXJnZTsKKworCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1l
KCZmaWxldGltZSk7CisJdWxhcmdlLkxvd1BhcnQgPSBmaWxldGltZS5kd0xvd0RhdGVUaW1lOwor
CXVsYXJnZS5IaWdoUGFydCA9IGZpbGV0aW1lLmR3SGlnaERhdGVUaW1lOworCS8qIENoYW5nZSBi
YXNlIGZyb20gSmFuIDEgMTYwMSAwMDowMDowMCB0byBKYW4gMSAxOTcwIDAwOjAwOjAwICovCisj
aWYgZGVmaW5lZChfX01JTkdXMzJfXykKKwl1bGFyZ2UuUXVhZFBhcnQgLT0gMTE2NDQ0NzM2MDAw
MDAwMDAwVUxMOworI2Vsc2UKKwl1bGFyZ2UuUXVhZFBhcnQgLT0gMTE2NDQ0NzM2MDAwMDAwMDAw
VUk2NDsKKyNlbmRpZgorCS8qCisJICogdWxhcmdlLlF1YWRQYXJ0IGlzIG5vdyB0aGUgbnVtYmVy
IG9mIDEwMC1uYW5vc2Vjb25kIGludGVydmFscworCSAqIHNpbmNlIEphbiAxIDE5NzAgMDA6MDA6
MDAuCisJICovCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKwl0di0+dHZfc2VjID0gKGxvbmcp
KHVsYXJnZS5RdWFkUGFydCAvIDEwMDAwMDAwVUxMKTsKKwl0di0+dHZfdXNlYyA9IChsb25nKSgo
dWxhcmdlLlF1YWRQYXJ0ICUgMTAwMDAwMDBVTEwpIC8gMTBVTEwpOworI2Vsc2UKKwl0di0+dHZf
c2VjID0gKGxvbmcpKHVsYXJnZS5RdWFkUGFydCAvIDEwMDAwMDAwVUk2NCk7CisJdHYtPnR2X3Vz
ZWMgPSAobG9uZykoKHVsYXJnZS5RdWFkUGFydCAlIDEwMDAwMDAwVUk2NCkgLyAxMFVJNjQpOwor
I2VuZGlmCit9CisjZW5kaWYKKwordm9pZAorZGVidWdfc2V0X3RhcmdldChGSUxFICpmcCkgewor
CWRlYnVnX3RhcmdldCA9IGZwOworfQorCit2b2lkCitkZWJ1Z19wcmludGZfY2xlYW4oY29uc3Qg
Y2hhciAqZm9ybWF0LCAuLi4pIHsKKwljaGFyIGNoYXJidWZbMTAyNF07CisJdmFfbGlzdCBhcDsK
KworCWlmIChkZWJ1Z190YXJnZXQgPT0gTlVMTCkgeworCQlkZWJ1Z190YXJnZXQgPSBERUZBVUxU
X1RBUkdFVDsKKwl9CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwlpZiAodnNucHJpbnRmKGNo
YXJidWYsIDEwMjQsIGZvcm1hdCwgYXApIDwgMCkgeworCQljaGFyYnVmWzBdID0gJ1wwJzsKKwl9
CisJdmFfZW5kKGFwKTsKKworCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiJXMiLCBjaGFyYnVmKTsK
KwlmZmx1c2goZGVidWdfdGFyZ2V0KTsKK30KKwordm9pZAorZGVidWdfcHJpbnRmKGNvbnN0IGNo
YXIgKmZvcm1hdCwgLi4uKSB7CisJdmFfbGlzdCBhcDsKKwljaGFyIGNoYXJidWZbMTAyNF07CisJ
c3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWVfbWFpbjsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX25v
dzsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX2RlbHRhOworCisJaWYgKGRlYnVnX3RhcmdldCA9PSBO
VUxMKSB7CisJCWRlYnVnX3RhcmdldCA9IERFRkFVTFRfVEFSR0VUOworCX0KKworCWlmICh0aW1l
X21haW4udHZfc2VjID09IDAgICYmIHRpbWVfbWFpbi50dl91c2VjID09IDApIHsKKwkJZ2V0dGlt
ZW9mZGF5KCZ0aW1lX21haW4sIE5VTEwpOworCX0KKworCWdldHRpbWVvZmRheSgmdGltZV9ub3cs
IE5VTEwpOworCXRpbWVyc3ViKCZ0aW1lX25vdywgJnRpbWVfbWFpbiwgJnRpbWVfZGVsdGEpOwor
CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJaWYgKHZzbnByaW50ZihjaGFyYnVmLCAxMDI0LCBm
b3JtYXQsIGFwKSA8IDApIHsKKwkJY2hhcmJ1ZlswXSA9ICdcMCc7CisJfQorCXZhX2VuZChhcCk7
CisKKwlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIltQXVsldS4lMDN1XSAlcyIsICh1bnNpZ25lZCBp
bnQpIHRpbWVfZGVsdGEudHZfc2VjLCAodW5zaWduZWQgaW50KSB0aW1lX2RlbHRhLnR2X3VzZWMg
LyAxMDAwLCBjaGFyYnVmKTsKKwlmZmx1c2goZGVidWdfdGFyZ2V0KTsKK30KKwordm9pZAorZGVi
dWdfcHJpbnRmX3N0YWNrKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7
CisJY2hhciBjaGFyYnVmWzEwMjRdOworCXN0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1lX21haW47
CisJc3RydWN0IHRpbWV2YWwgdGltZV9ub3c7CisJc3RydWN0IHRpbWV2YWwgdGltZV9kZWx0YTsK
KworCWlmIChkZWJ1Z190YXJnZXQgPT0gTlVMTCkgeworCQlkZWJ1Z190YXJnZXQgPSBERUZBVUxU
X1RBUkdFVDsKKwl9CisKKwlpZiAodGltZV9tYWluLnR2X3NlYyA9PSAwICAmJiB0aW1lX21haW4u
dHZfdXNlYyA9PSAwKSB7CisJCWdldHRpbWVvZmRheSgmdGltZV9tYWluLCBOVUxMKTsKKwl9CisK
KwlnZXR0aW1lb2ZkYXkoJnRpbWVfbm93LCBOVUxMKTsKKwl0aW1lcnN1YigmdGltZV9ub3csICZ0
aW1lX21haW4sICZ0aW1lX2RlbHRhKTsKKworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCWlmICh2
c25wcmludGYoY2hhcmJ1ZiwgMTAyNCwgZm9ybWF0LCBhcCkgPCAwKSB7CisJCWNoYXJidWZbMF0g
PSAnXDAnOworCX0KKwl2YV9lbmQoYXApOworCisJZnByaW50ZihkZWJ1Z190YXJnZXQsICJbU11b
JXUuJTAzdV0gJXMiLCAodW5zaWduZWQgaW50KSB0aW1lX2RlbHRhLnR2X3NlYywgKHVuc2lnbmVk
IGludCkgdGltZV9kZWx0YS50dl91c2VjIC8gMTAwMCwgY2hhcmJ1Zik7CisJZmZsdXNoKGRlYnVn
X3RhcmdldCk7Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfYXNzb2NpYXRpb25fY2hhbmdlX2V2
ZW50KHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqc2FjKQoreworCXVuc2lnbmVkIGludCBpLCBu
OworCisJaWYgKGRlYnVnX3RhcmdldCA9PSBOVUxMKSB7CisJCWRlYnVnX3RhcmdldCA9IERFRkFV
TFRfVEFSR0VUOworCX0KKworCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiQXNzb2NpYXRpb24gY2hh
bmdlICIpOworCXN3aXRjaCAoc2FjLT5zYWNfc3RhdGUpIHsKKwljYXNlIFNDVFBfQ09NTV9VUDoK
KwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQX0NPTU1fVVAiKTsKKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX0NPTU1fTE9TVDoKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQX0NPTU1fTE9T
VCIpOworCQlicmVhazsKKwljYXNlIFNDVFBfUkVTVEFSVDoKKwkJZnByaW50ZihkZWJ1Z190YXJn
ZXQsICJTQ1RQX1JFU1RBUlQiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NIVVRET1dOX0NPTVA6
CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiU0NUUF9TSFVURE9XTl9DT01QIik7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9DQU5UX1NUUl9BU1NPQzoKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJT
Q1RQX0NBTlRfU1RSX0FTU09DIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZwcmludGYoZGVi
dWdfdGFyZ2V0LCAiVU5LTk9XTiIpOworCQlicmVhazsKKwl9CisJZnByaW50ZihkZWJ1Z190YXJn
ZXQsICIsIHN0cmVhbXMgKGluL291dCkgPSAoJXUvJXUpIiwKKwkgICAgICAgc2FjLT5zYWNfaW5i
b3VuZF9zdHJlYW1zLCBzYWMtPnNhY19vdXRib3VuZF9zdHJlYW1zKTsKKwluID0gc2FjLT5zYWNf
bGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSk7CisJaWYgKCgoc2FjLT5z
YWNfc3RhdGUgPT0gU0NUUF9DT01NX1VQKSB8fAorCSAgICAgKHNhYy0+c2FjX3N0YXRlID09IFND
VFBfUkVTVEFSVCkpICYmIChuID4gMCkpIHsKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICIsIHN1
cHBvcnRzIik7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXN3aXRjaCAoc2FjLT5z
YWNfaW5mb1tpXSkgeworCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX1BSOgorCQkJCWZwcmlu
dGYoZGVidWdfdGFyZ2V0LCAiIFBSIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNDVFBfQVNTT0Nf
U1VQUE9SVFNfQVVUSDoKKwkJCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIiBBVVRIIik7CisJCQkJ
YnJlYWs7CisJCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNfQVNDT05GOgorCQkJCWZwcmludGYo
ZGVidWdfdGFyZ2V0LCAiIEFTQ09ORiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTQ1RQX0FTU09D
X1NVUFBPUlRTX01VTFRJQlVGOgorCQkJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiIE1VTFRJQlVG
Iik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNfUkVfQ09ORklHOgor
CQkJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiIFJFLUNPTkZJRyIpOworCQkJCWJyZWFrOworCQkJ
Y2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX0lOVEVSTEVBVklORzoKKwkJCQlmcHJpbnRmKGRlYnVn
X3RhcmdldCwgIiBJTlRFUkxFQVZJTkciKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJ
ZnByaW50ZihkZWJ1Z190YXJnZXQsICIgVU5LTk9XTigweCUwMngpIiwgc2FjLT5zYWNfaW5mb1tp
XSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKCgoc2FjLT5zYWNfc3RhdGUg
PT0gU0NUUF9DT01NX0xPU1QpIHx8CisJICAgICAgICAgICAgKHNhYy0+c2FjX3N0YXRlID09IFND
VFBfQ0FOVF9TVFJfQVNTT0MpKSAmJiAobiA+IDApKSB7CisJCWZwcmludGYoZGVidWdfdGFyZ2V0
LCAiLCBBQk9SVCA9Iik7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWZwcmludGYo
ZGVidWdfdGFyZ2V0LCAiIDB4JTAyeCIsIHNhYy0+c2FjX2luZm9baV0pOworCQl9CisJfQorCWZw
cmludGYoZGVidWdfdGFyZ2V0LCAiLlxuIik7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAor
aGFuZGxlX3BlZXJfYWRkcmVzc19jaGFuZ2VfZXZlbnQoc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdl
ICpzcGMpCit7CisJY2hhciBhZGRyX2J1ZltJTkVUNl9BRERSU1RSTEVOXTsKKwljb25zdCBjaGFy
ICphZGRyOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCXN0cnVjdCBzb2NrYWRkcl9pbjYg
KnNpbjY7CisJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOworCisJaWYgKGRlYnVnX3Rhcmdl
dCA9PSBOVUxMKSB7CisJCWRlYnVnX3RhcmdldCA9IERFRkFVTFRfVEFSR0VUOworCX0KKworCXN3
aXRjaCAoc3BjLT5zcGNfYWFkZHIuc3NfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlzaW4g
PSAoc3RydWN0IHNvY2thZGRyX2luICopJnNwYy0+c3BjX2FhZGRyOworCQlhZGRyID0gaW5ldF9u
dG9wKEFGX0lORVQsICZzaW4tPnNpbl9hZGRyLCBhZGRyX2J1ZiwgSU5FVF9BRERSU1RSTEVOKTsK
KwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopJnNwYy0+c3BjX2FhZGRyOworCQlhZGRyID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+
c2luNl9hZGRyLCBhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTik7CisJCWJyZWFrOworCWNhc2Ug
QUZfQ09OTjoKKwkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKikmc3BjLT5zcGNfYWFk
ZHI7CisjaWZkZWYgX1dJTjMyCisJCWlmIChfc25wcmludGYoYWRkcl9idWYsIElORVQ2X0FERFJT
VFJMRU4sICIlcCIsIHNjb25uLT5zY29ubl9hZGRyKSA8IDApIHsKKyNlbHNlCisJCWlmIChzbnBy
aW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIiVwIiwgc2Nvbm4tPnNjb25uX2FkZHIp
IDwgMCkgeworI2VuZGlmCisJCQlhZGRyX2J1ZlswXSA9ICdcMCc7CisJCX0KKwkJYWRkciA9IGFk
ZHJfYnVmOworCQlicmVhazsKKwlkZWZhdWx0OgorI2lmZGVmIF9XSU4zMgorCQlpZiAoX3NucHJp
bnRmKGFkZHJfYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiVW5rbm93biBmYW1pbHkgJWQiLCBzcGMt
PnNwY19hYWRkci5zc19mYW1pbHkpIDwgMCkgeworI2Vsc2UKKwkJaWYgKHNucHJpbnRmKGFkZHJf
YnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiVW5rbm93biBmYW1pbHkgJWQiLCBzcGMtPnNwY19hYWRk
ci5zc19mYW1pbHkpIDwgMCkgeworI2VuZGlmCisJCQlhZGRyX2J1ZlswXSA9ICdcMCc7CisJCX0K
KwkJYWRkciA9IGFkZHJfYnVmOworCQlicmVhazsKKwl9CisJZnByaW50ZihkZWJ1Z190YXJnZXQs
ICJQZWVyIGFkZHJlc3MgJXMgaXMgbm93ICIsIGFkZHIpOworCXN3aXRjaCAoc3BjLT5zcGNfc3Rh
dGUpIHsKKwljYXNlIFNDVFBfQUREUl9BVkFJTEFCTEU6CisJCWZwcmludGYoZGVidWdfdGFyZ2V0
LCAiU0NUUF9BRERSX0FWQUlMQUJMRSIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQUREUl9VTlJF
QUNIQUJMRToKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQX0FERFJfVU5SRUFDSEFCTEUi
KTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FERFJfUkVNT1ZFRDoKKwkJZnByaW50ZihkZWJ1Z190
YXJnZXQsICJTQ1RQX0FERFJfUkVNT1ZFRCIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQUREUl9B
RERFRDoKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQX0FERFJfQURERUQiKTsKKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX0FERFJfTUFERV9QUklNOgorCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwg
IlNDVFBfQUREUl9NQURFX1BSSU0iKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FERFJfQ09ORklS
TUVEOgorCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIlNDVFBfQUREUl9DT05GSVJNRUQiKTsKKwkJ
YnJlYWs7CisJZGVmYXVsdDoKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJVTktOT1dOIik7CisJ
CWJyZWFrOworCX0KKwlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIiAoZXJyb3IgPSAweCUwOHgpLlxu
Iiwgc3BjLT5zcGNfZXJyb3IpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9z
ZW5kX2ZhaWxlZF9ldmVudChzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCAqc3NmZSkKK3sK
KwlzaXplX3QgaSwgbjsKKworCWlmIChkZWJ1Z190YXJnZXQgPT0gTlVMTCkgeworCQlkZWJ1Z190
YXJnZXQgPSBERUZBVUxUX1RBUkdFVDsKKwl9CisKKwlpZiAoc3NmZS0+c3NmZV9mbGFncyAmIFND
VFBfREFUQV9VTlNFTlQpIHsKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJVbnNlbnQgIik7CisJ
fQorCWlmIChzc2ZlLT5zc2ZlX2ZsYWdzICYgU0NUUF9EQVRBX1NFTlQpIHsKKwkJZnByaW50Zihk
ZWJ1Z190YXJnZXQsICJTZW50ICIpOworCX0KKwlpZiAoc3NmZS0+c3NmZV9mbGFncyAmIH4oU0NU
UF9EQVRBX1NFTlQgfCBTQ1RQX0RBVEFfVU5TRU5UKSkgeworCQlmcHJpbnRmKGRlYnVnX3Rhcmdl
dCwgIihmbGFncyA9ICV4KSAiLCBzc2ZlLT5zc2ZlX2ZsYWdzKTsKKwl9CisJZnByaW50ZihkZWJ1
Z190YXJnZXQsICJtZXNzYWdlIHdpdGggUFBJRCA9ICV1LCBTSUQgPSAldSwgZmxhZ3M6IDB4JTA0
eCBkdWUgdG8gZXJyb3IgPSAweCUwOHgiLAorCSAgICAgICAodWludDMyX3QpbnRvaGwoc3NmZS0+
c3NmZV9pbmZvLnNuZF9wcGlkKSwgc3NmZS0+c3NmZV9pbmZvLnNuZF9zaWQsCisJICAgICAgIHNz
ZmUtPnNzZmVfaW5mby5zbmRfZmxhZ3MsIHNzZmUtPnNzZmVfZXJyb3IpOworCW4gPSBzc2ZlLT5z
c2ZlX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCk7CisJZm9y
IChpID0gMDsgaSA8IG47IGkrKykgeworCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIiAweCUwMngi
LCBzc2ZlLT5zc2ZlX2RhdGFbaV0pOworCX0KKwlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIi5cbiIp
OworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9hZGFwdGF0aW9uX2luZGljYXRp
b24oc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCAqc2FpKQoreworCWlmIChkZWJ1Z190YXJn
ZXQgPT0gTlVMTCkgeworCQlkZWJ1Z190YXJnZXQgPSBERUZBVUxUX1RBUkdFVDsKKwl9CisKKwlm
cHJpbnRmKGRlYnVnX3RhcmdldCwgIkFkYXB0YXRpb24gaW5kaWNhdGlvbjogJXguXG4iLCBzYWkt
PiBzYWlfYWRhcHRhdGlvbl9pbmQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRs
ZV9zaHV0ZG93bl9ldmVudChzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCAqc3NlKQoreworCWlm
IChkZWJ1Z190YXJnZXQgPT0gTlVMTCkgeworCQlkZWJ1Z190YXJnZXQgPSBERUZBVUxUX1RBUkdF
VDsKKwl9CisKKwlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIlNodXRkb3duIGV2ZW50LlxuIik7CisJ
LyogWFhYOiBub3RpZnkgYWxsIGNoYW5uZWxzLiAqLworCXJldHVybjsKK30KKworc3RhdGljIHZv
aWQKK2hhbmRsZV9zdHJlYW1fcmVzZXRfZXZlbnQoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2
ZW50ICpzdHJyc3QpCit7CisJdWludDMyX3QgbiwgaTsKKworCWlmIChkZWJ1Z190YXJnZXQgPT0g
TlVMTCkgeworCQlkZWJ1Z190YXJnZXQgPSBERUZBVUxUX1RBUkdFVDsKKwl9CisKKwluID0gKHN0
cnJzdC0+c3RycmVzZXRfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9l
dmVudCkpIC8gc2l6ZW9mKHVpbnQxNl90KTsKKwlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIlN0cmVh
bSByZXNldCBldmVudDogZmxhZ3MgPSAleCwgIiwgc3RycnN0LT5zdHJyZXNldF9mbGFncyk7CisJ
aWYgKHN0cnJzdC0+c3RycmVzZXRfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlOR19T
U04pIHsKKwkJaWYgKHN0cnJzdC0+c3RycmVzZXRfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9P
VVRHT0lOR19TU04pIHsKKwkJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiaW5jb21pbmcvIik7CisJ
CX0KKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJpbmNvbWluZyAiKTsKKwl9CisJaWYgKHN0cnJz
dC0+c3RycmVzZXRfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19TU04pIHsKKwkJ
ZnByaW50ZihkZWJ1Z190YXJnZXQsICJvdXRnb2luZyAiKTsKKwl9CisJZnByaW50ZihkZWJ1Z190
YXJnZXQsICJzdHJlYW0gaWRzID0gIik7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlp
ZiAoaSA+IDApIHsKKwkJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiLCAiKTsKKwkJfQorCQlmcHJp
bnRmKGRlYnVnX3RhcmdldCwgIiVkIiwgc3RycnN0LT5zdHJyZXNldF9zdHJlYW1fbGlzdFtpXSk7
CisJfQorCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiLlxuIik7CisJcmV0dXJuOworfQorCitzdGF0
aWMgdm9pZAoraGFuZGxlX3N0cmVhbV9jaGFuZ2VfZXZlbnQoc3RydWN0IHNjdHBfc3RyZWFtX2No
YW5nZV9ldmVudCAqc3RyY2hnKQoreworCWlmIChkZWJ1Z190YXJnZXQgPT0gTlVMTCkgeworCQlk
ZWJ1Z190YXJnZXQgPSBERUZBVUxUX1RBUkdFVDsKKwl9CisKKwlmcHJpbnRmKGRlYnVnX3Rhcmdl
dCwgIlN0cmVhbSBjaGFuZ2UgZXZlbnQ6IHN0cmVhbXMgKGluL291dCkgPSAoJXUvJXUpLCBmbGFn
cyA9ICV4LlxuIiwKKwkgICAgICAgc3RyY2hnLT5zdHJjaGFuZ2VfaW5zdHJtcywgc3RyY2hnLT5z
dHJjaGFuZ2Vfb3V0c3RybXMsIHN0cmNoZy0+c3RyY2hhbmdlX2ZsYWdzKTsKKwlyZXR1cm47Cit9
CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfcmVtb3RlX2Vycm9yX2V2ZW50KHN0cnVjdCBzY3RwX3Jl
bW90ZV9lcnJvciAqc3JlKQoreworCXNpemVfdCBpLCBuOworCisJaWYgKGRlYnVnX3RhcmdldCA9
PSBOVUxMKSB7CisJCWRlYnVnX3RhcmdldCA9IERFRkFVTFRfVEFSR0VUOworCX0KKworCW4gPSBz
cmUtPnNyZV9sZW5ndGggLSBzaXplb2Yoc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9yKTsKKwlmcHJp
bnRmKGRlYnVnX3RhcmdldCwgIlJlbW90ZSBFcnJvciAoZXJyb3IgPSAweCUwNHgpOiAiLCBzcmUt
PnNyZV9lcnJvcik7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlmcHJpbnRmKGRlYnVn
X3RhcmdldCwgIiAweCUwMngiLCBzcmUtPiBzcmVfZGF0YVtpXSk7CisJfQorCWZwcmludGYoZGVi
dWdfdGFyZ2V0LCAiLlxuIik7CisJcmV0dXJuOworfQorCit2b2lkCitoYW5kbGVfbm90aWZpY2F0
aW9uKHVuaW9uIHNjdHBfbm90aWZpY2F0aW9uICpub3RpZiwgc2l6ZV90IG4pCit7CisJaWYgKG5v
dGlmLT5zbl9oZWFkZXIuc25fbGVuZ3RoICE9ICh1aW50MzJfdCluKSB7CisJCXJldHVybjsKKwl9
CisKKwlpZiAoZGVidWdfdGFyZ2V0ID09IE5VTEwpIHsKKwkJZGVidWdfdGFyZ2V0ID0gREVGQVVM
VF9UQVJHRVQ7CisJfQorCisJZnByaW50ZihkZWJ1Z190YXJnZXQsICJoYW5kbGVfbm90aWZpY2F0
aW9uIDogIik7CisKKwlzd2l0Y2ggKG5vdGlmLT5zbl9oZWFkZXIuc25fdHlwZSkgeworCWNhc2Ug
U0NUUF9BU1NPQ19DSEFOR0U6CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiU0NUUF9BU1NPQ19D
SEFOR0VcbiIpOworCQloYW5kbGVfYXNzb2NpYXRpb25fY2hhbmdlX2V2ZW50KCYobm90aWYtPnNu
X2Fzc29jX2NoYW5nZSkpOworCQlicmVhazsKKwljYXNlIFNDVFBfUEVFUl9BRERSX0NIQU5HRToK
KwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQX1BFRVJfQUREUl9DSEFOR0VcbiIpOworCQlo
YW5kbGVfcGVlcl9hZGRyZXNzX2NoYW5nZV9ldmVudCgmKG5vdGlmLT5zbl9wYWRkcl9jaGFuZ2Up
KTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1JFTU9URV9FUlJPUjoKKwkJZnByaW50ZihkZWJ1Z190
YXJnZXQsICJTQ1RQX1JFTU9URV9FUlJPUlxuIik7CisJCWhhbmRsZV9yZW1vdGVfZXJyb3JfZXZl
bnQoJihub3RpZi0+c25fcmVtb3RlX2Vycm9yKSk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9TSFVU
RE9XTl9FVkVOVDoKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQX1NIVVRET1dOX0VWRU5U
XG4iKTsKKwkJaGFuZGxlX3NodXRkb3duX2V2ZW50KCYobm90aWYtPnNuX3NodXRkb3duX2V2ZW50
KSk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT046CisJCWZwcmlu
dGYoZGVidWdfdGFyZ2V0LCAiU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT05cbiIpOworCQloYW5k
bGVfYWRhcHRhdGlvbl9pbmRpY2F0aW9uKCYobm90aWYtPnNuX2FkYXB0YXRpb25fZXZlbnQpKTsK
KwkJYnJlYWs7CisJY2FzZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQ6CisJCWZwcmludGYo
ZGVidWdfdGFyZ2V0LCAiU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5UXG4iKTsKKwkJYnJlYWs7
CisJY2FzZSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5UOgorCQlmcHJpbnRmKGRlYnVnX3Rhcmdl
dCwgIlNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlRcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBf
U0VOREVSX0RSWV9FVkVOVDoKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQX1NFTkRFUl9E
UllfRVZFTlRcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZJQ0FUSU9OU19TVE9QUEVE
X0VWRU5UOgorCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIlNDVFBfTk9USUZJQ0FUSU9OU19TVE9Q
UEVEX0VWRU5UXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTkRfRkFJTEVEX0VWRU5UOgor
CQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIlNDVFBfU0VORF9GQUlMRURfRVZFTlRcbiIpOworCQlo
YW5kbGVfc2VuZF9mYWlsZWRfZXZlbnQoJihub3RpZi0+c25fc2VuZF9mYWlsZWRfZXZlbnQpKTsK
KwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVDoKKwkJZnByaW50ZihkZWJ1
Z190YXJnZXQsICJTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVFxuIik7CisJCWhhbmRsZV9zdHJlYW1f
cmVzZXRfZXZlbnQoJihub3RpZi0+c25fc3RycmVzZXRfZXZlbnQpKTsKKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX0FTU09DX1JFU0VUX0VWRU5UOgorCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIlNDVFBf
QVNTT0NfUkVTRVRfRVZFTlRcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfU1RSRUFNX0NIQU5H
RV9FVkVOVDoKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQX1NUUkVBTV9DSEFOR0VfRVZF
TlRcbiIpOworCQloYW5kbGVfc3RyZWFtX2NoYW5nZV9ldmVudCgmKG5vdGlmLT5zbl9zdHJjaGFu
Z2VfZXZlbnQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvcHJvZ3JhbXNfaGVscGVyLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9n
cmFtcy9wcm9ncmFtc19oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2E0NzEwMTdmZmZhMWY1ZGZlZWI0
NDkxNDZlMThjZjFmNWZlMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMv
cHJvZ3JhbXNfaGVscGVyLmgKQEAgLTAsMCArMSw5MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMp
IDIwMjAgRmVsaXggV2VpbnJhbmsKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgX19QUk9HUkFNU19IRUxQRVJfSF9fCisjZGVmaW5lIF9fUFJPR1JBTVNfSEVMUEVSX0hf
XworCisjaWZuZGVmIF9XSU4zMgorI2RlZmluZSBTQ1RQX1BBQ0tFRCBfX2F0dHJpYnV0ZV9fKChw
YWNrZWQpKQorI2Vsc2UKKyNwcmFnbWEgcGFjayAocHVzaCwgMSkKKyNkZWZpbmUgU0NUUF9QQUNL
RUQKKyNlbmRpZgorCitzdHJ1Y3Qgc2N0cF9jaHVua19oZWFkZXIgeworCXVpbnQ4X3QgY2h1bmtf
dHlwZTsJLyogY2h1bmsgdHlwZSAqLworCXVpbnQ4X3QgY2h1bmtfZmxhZ3M7CS8qIGNodW5rIGZs
YWdzICovCisJdWludDE2X3QgY2h1bmtfbGVuZ3RoOwkvKiBjaHVuayBsZW5ndGggKi8KKwkvKiBv
cHRpb25hbCBwYXJhbXMgZm9sbG93ICovCit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9p
bml0X2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua19oZWFkZXIgY2g7CisJdWludDMyX3QgaW5p
dGlhdGVfdGFnOwkvKiBpbml0aWF0ZSB0YWcgKi8KKwl1aW50MzJfdCBhX3J3bmQ7CS8qIGFfcndu
ZCAqLworCXVpbnQxNl90IG51bV9vdXRib3VuZF9zdHJlYW1zOwkvKiBPUyAqLworCXVpbnQxNl90
IG51bV9pbmJvdW5kX3N0cmVhbXM7CS8qIE1JUyAqLworCXVpbnQzMl90IGluaXRpYWxfdHNuOwkv
KiBJLVRTTiAqLworCS8qIG9wdGlvbmFsIHBhcmFtJ3MgZm9sbG93ICovCit9IFNDVFBfUEFDS0VE
OworCisjaWZkZWYgX1dJTjMyCisjcHJhZ21hIHBhY2socG9wKQorI2VuZGlmCisKKyN1bmRlZiBT
Q1RQX1BBQ0tFRAorCit2b2lkCitoYW5kbGVfbm90aWZpY2F0aW9uKHVuaW9uIHNjdHBfbm90aWZp
Y2F0aW9uICpub3RpZiwgc2l6ZV90IG4pOworI2lmbmRlZiB0aW1lcnN1YgorI2RlZmluZSB0aW1l
cnN1Yih0dnAsIHV2cCwgdnZwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
CWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisJCSh2dnApLT50dl9zZWMgPSAodHZwKS0+dHZfc2VjIC0gKHV2cCktPnR2X3NlYzsgICAg
XAorCQkodnZwKS0+dHZfdXNlYyA9ICh0dnApLT50dl91c2VjIC0gKHV2cCktPnR2X3VzZWM7IFwK
KwkJaWYgKCh2dnApLT50dl91c2VjIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJ
CQkodnZwKS0+dHZfc2VjLS07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkodnZwKS0+
dHZfdXNlYyArPSAxMDAwMDAwOyAgICAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisjZW5kaWYK
Kwordm9pZAorZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKwordm9pZAor
ZGVidWdfcHJpbnRmX2NsZWFuKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKwordm9pZAorZGVi
dWdfcHJpbnRmX3N0YWNrKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKwordm9pZAorZGVidWdf
c2V0X3RhcmdldChGSUxFICpmcCk7CisKKyNkZWZpbmUgRlVaWkVSX0FTU0VSVCh4KSBpZiAoISh4
KSkgeyBwcmludGYoIlVTUlNDVFAgYXNzZXJ0aW9uIGZhaWxlZDogZnVuY3Rpb24gJXMsIGZpbGUg
JXMsIGxpbmUgJWQuXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18p
OyBhYm9ydCgpOyB9CisgCisKKyNlbmRpZiAvKiBfX1BST0dSQU1TX0hFTFBFUl9IX18gKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3J0Y3dlYi5jIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMv
cnRjd2ViLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQ5ZWNmYTA0ZGJmOTk1ZmVjNDYzZTkwMDRhMWViZmZmZjA2
MGQyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3J0Y3dlYi5jCkBAIC0w
LDAgKzEsMTUyOSBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBNaWNoYWVsIFR1
ZXhlbgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgSXJlbmUgUnVlbmdlbGVyCisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1Qg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAk
SWQ6IHJ0Y3dlYi5jLHYgMS4yNiAyMDEyLTA3LTE3IDEzOjUwOjAyIHR1ZXhlbiBFeHAgJAorICov
CisKKy8qCisgKiBnY2MgLVdhbGwgLXN0ZD1jOTkgLXBlZGFudGljIC1vIHJ0Y3dlYiBydGN3ZWIu
YyAtbHVzcnNjdHAKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgX1dJTjMy
CisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisjaW5jbHVkZSA8d2luc29jazIuaD4K
KyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2luY2x1ZGUgPGNydGRiZy5oPgorI2Vsc2UKKyNpbmNs
dWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPG5l
dGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpbmNs
dWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
I2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dXNyc2N0
cC5oPgorI2luY2x1ZGUgInByb2dyYW1zX2hlbHBlci5oIgorCisjZGVmaW5lIExJTkVfTEVOR1RI
ICgxMDI0KQorI2RlZmluZSBCVUZGRVJfU0laRSAoMTw8MTYpCisjZGVmaW5lIE5VTUJFUl9PRl9D
SEFOTkVMUyAoMTAwKQorI2RlZmluZSBOVU1CRVJfT0ZfU1RSRUFNUyAoMTAwKQorCisjZGVmaW5l
IERBVEFfQ0hBTk5FTF9QUElEX0NPTlRST0wgICA1MAorI2RlZmluZSBEQVRBX0NIQU5ORUxfUFBJ
RF9ET01TVFJJTkcgNTEKKyNkZWZpbmUgREFUQV9DSEFOTkVMX1BQSURfQklOQVJZICAgIDUyCisK
KyNkZWZpbmUgREFUQV9DSEFOTkVMX0NMT1NFRCAgICAgMAorI2RlZmluZSBEQVRBX0NIQU5ORUxf
Q09OTkVDVElORyAxCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9PUEVOICAgICAgIDIKKyNkZWZpbmUg
REFUQV9DSEFOTkVMX0NMT1NJTkcgICAgMworCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFHU19T
RU5EX1JFUSAweDAwMDAwMDAxCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JTUCAw
eDAwMDAwMDAyCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX0FDSyAweDAwMDAwMDA0
CisKK3N0cnVjdCBjaGFubmVsIHsKKwl1aW50MzJfdCBpZDsKKwl1aW50MzJfdCBwcl92YWx1ZTsK
Kwl1aW50MTZfdCBwcl9wb2xpY3k7CisJdWludDE2X3QgaV9zdHJlYW07CisJdWludDE2X3Qgb19z
dHJlYW07CisJdWludDhfdCB1bm9yZGVyZWQ7CisJdWludDhfdCBzdGF0ZTsKKwl1aW50MzJfdCBm
bGFnczsKK307CisKK3N0cnVjdCBwZWVyX2Nvbm5lY3Rpb24geworCXN0cnVjdCBjaGFubmVsIGNo
YW5uZWxzW05VTUJFUl9PRl9DSEFOTkVMU107CisJc3RydWN0IGNoYW5uZWwgKmlfc3RyZWFtX2No
YW5uZWxbTlVNQkVSX09GX1NUUkVBTVNdOworCXN0cnVjdCBjaGFubmVsICpvX3N0cmVhbV9jaGFu
bmVsW05VTUJFUl9PRl9TVFJFQU1TXTsKKwl1aW50MTZfdCBvX3N0cmVhbV9idWZmZXJbTlVNQkVS
X09GX1NUUkVBTVNdOworCXVpbnQzMl90IG9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyOworI2lmZGVm
IF9XSU4zMgorCUNSSVRJQ0FMX1NFQ1RJT04gbXV0ZXg7CisjZWxzZQorCXB0aHJlYWRfbXV0ZXhf
dCBtdXRleDsKKyNlbmRpZgorCXN0cnVjdCBzb2NrZXQgKnNvY2s7Cit9IHBlZXJfY29ubmVjdGlv
bjsKKworI2RlZmluZSBEQVRBX0NIQU5ORUxfT1BFTl9SRVFVRVNUICAwCisjZGVmaW5lIERBVEFf
Q0hBTk5FTF9PUEVOX1JFU1BPTlNFIDEKKyNkZWZpbmUgREFUQV9DSEFOTkVMX0FDSyAgICAgICAg
ICAgMgorCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9SRUxJQUJMRSAgICAgICAgICAgICAgICAwCisj
ZGVmaW5lIERBVEFfQ0hBTk5FTF9SRUxJQUJMRV9TVFJFQU0gICAgICAgICAxCisjZGVmaW5lIERB
VEFfQ0hBTk5FTF9VTlJFTElBQkxFICAgICAgICAgICAgICAyCisjZGVmaW5lIERBVEFfQ0hBTk5F
TF9QQVJUSUFMX1JFTElBQkxFX1JFWE1JVCAzCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9QQVJUSUFM
X1JFTElBQkxFX1RJTUVEICA0CisKKyNkZWZpbmUgREFUQV9DSEFOTkVMX0ZMQUdfT1VUX09GX09S
REVSX0FMTE9XRUQgMHgwMDAxCisKKyNpZm5kZWYgX1dJTjMyCisjZGVmaW5lIFNDVFBfUEFDS0VE
IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZWxzZQorI3ByYWdtYSBwYWNrIChwdXNoLCAxKQor
I2RlZmluZSBTQ1RQX1BBQ0tFRAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRl
ZmluZWQoX19NSU5HVzMyX18pCisjcHJhZ21hIHdhcm5pbmcoIHB1c2ggKQorI3ByYWdtYSB3YXJu
aW5nKCBkaXNhYmxlIDogNDIwMCApCisjZW5kaWYgLyogZGVmaW5lZChfV0lOMzIpICYmICFkZWZp
bmVkKF9fTUlOR1czMl9fKSAqLworc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVl
c3QgeworCXVpbnQ4X3QgbXNnX3R5cGU7IC8qIERBVEFfQ0hBTk5FTF9PUEVOX1JFUVVFU1QgKi8K
Kwl1aW50OF90IGNoYW5uZWxfdHlwZTsKKwl1aW50MTZfdCBmbGFnczsKKwl1aW50MTZfdCByZWxp
YWJpbGl0eV9wYXJhbXM7CisJaW50MTZfdCBwcmlvcml0eTsKKwljaGFyIGxhYmVsW107Cit9IFND
VFBfUEFDS0VEOworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykK
KyNwcmFnbWEgd2FybmluZyggcG9wICkKKyNlbmRpZiAvKiBkZWZpbmVkKF9XSU4zMikgJiYgIWRl
ZmluZWQoX19NSU5HVzMyX18pICovCisKK3N0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9y
ZXNwb25zZSB7CisJdWludDhfdCAgbXNnX3R5cGU7IC8qIERBVEFfQ0hBTk5FTF9PUEVOX1JFU1BP
TlNFICovCisJdWludDhfdCAgZXJyb3I7CisJdWludDE2X3QgZmxhZ3M7CisJdWludDE2X3QgcmV2
ZXJzZV9zdHJlYW07Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVs
X2FjayB7CisJdWludDhfdCAgbXNnX3R5cGU7IC8qIERBVEFfQ0hBTk5FTF9BQ0sgKi8KK30gU0NU
UF9QQUNLRUQ7CisKKyNpZmRlZiBfV0lOMzIKKyNwcmFnbWEgcGFjayhwb3ApCisjZW5kaWYKKwor
I3VuZGVmIFNDVFBfUEFDS0VECisKK3N0YXRpYyB2b2lkCitsb2NrX3BlZXJfY29ubmVjdGlvbihz
dHJ1Y3QgcGVlcl9jb25uZWN0aW9uICopOworCitzdGF0aWMgdm9pZAordW5sb2NrX3BlZXJfY29u
bmVjdGlvbihzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICopOworCitzdGF0aWMgdm9pZAoraW5pdF9w
ZWVyX2Nvbm5lY3Rpb24oc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMpCit7CisJdWludDMyX3Qg
aTsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKworI2lmZGVmIF9XSU4zMgorCUluaXRpYWxp
emVDcml0aWNhbFNlY3Rpb24oJihwYy0+bXV0ZXgpKTsKKyNlbHNlCisJcHRocmVhZF9tdXRleF9p
bml0KCZwYy0+bXV0ZXgsIE5VTEwpOworI2VuZGlmCisJbG9ja19wZWVyX2Nvbm5lY3Rpb24ocGMp
OworCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykgeworCQljaGFubmVs
ID0gJihwYy0+Y2hhbm5lbHNbaV0pOworCQljaGFubmVsLT5pZCA9IGk7CisJCWNoYW5uZWwtPnN0
YXRlID0gREFUQV9DSEFOTkVMX0NMT1NFRDsKKwkJY2hhbm5lbC0+cHJfcG9saWN5ID0gU0NUUF9Q
Ul9TQ1RQX05PTkU7CisJCWNoYW5uZWwtPnByX3ZhbHVlID0gMDsKKwkJY2hhbm5lbC0+aV9zdHJl
YW0gPSAwOworCQljaGFubmVsLT5vX3N0cmVhbSA9IDA7CisJCWNoYW5uZWwtPnVub3JkZXJlZCA9
IDA7CisJCWNoYW5uZWwtPmZsYWdzID0gMDsKKwl9CisJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9P
Rl9TVFJFQU1TOyBpKyspIHsKKwkJcGMtPmlfc3RyZWFtX2NoYW5uZWxbaV0gPSBOVUxMOworCQlw
Yy0+b19zdHJlYW1fY2hhbm5lbFtpXSA9IE5VTEw7CisJCXBjLT5vX3N0cmVhbV9idWZmZXJbaV0g
PSAwOworCX0KKwlwYy0+b19zdHJlYW1fYnVmZmVyX2NvdW50ZXIgPSAwOworCXBjLT5zb2NrID0g
TlVMTDsKKwl1bmxvY2tfcGVlcl9jb25uZWN0aW9uKHBjKTsKK30KKworc3RhdGljIHZvaWQKK2xv
Y2tfcGVlcl9jb25uZWN0aW9uKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQoreworI2lmZGVm
IF9XSU4zMgorCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYocGMtPm11dGV4KSk7CisjZWxzZQorCXB0
aHJlYWRfbXV0ZXhfbG9jaygmcGMtPm11dGV4KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAor
dW5sb2NrX3BlZXJfY29ubmVjdGlvbihzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykKK3sKKyNp
ZmRlZiBfV0lOMzIKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmKHBjLT5tdXRleCkpOworI2Vsc2UK
KwlwdGhyZWFkX211dGV4X3VubG9jaygmcGMtPm11dGV4KTsKKyNlbmRpZgorfQorCitzdGF0aWMg
c3RydWN0IGNoYW5uZWwgKgorZmluZF9jaGFubmVsX2J5X2lfc3RyZWFtKHN0cnVjdCBwZWVyX2Nv
bm5lY3Rpb24gKnBjLCB1aW50MTZfdCBpX3N0cmVhbSkKK3sKKwlpZiAoaV9zdHJlYW0gPCBOVU1C
RVJfT0ZfU1RSRUFNUykgeworCQlyZXR1cm4gKHBjLT5pX3N0cmVhbV9jaGFubmVsW2lfc3RyZWFt
XSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg
Y2hhbm5lbCAqCitmaW5kX2NoYW5uZWxfYnlfb19zdHJlYW0oc3RydWN0IHBlZXJfY29ubmVjdGlv
biAqcGMsIHVpbnQxNl90IG9fc3RyZWFtKQoreworCWlmIChvX3N0cmVhbSA8IE5VTUJFUl9PRl9T
VFJFQU1TKSB7CisJCXJldHVybiAocGMtPm9fc3RyZWFtX2NoYW5uZWxbb19zdHJlYW1dKTsKKwl9
IGVsc2UgeworCQlyZXR1cm4gKE5VTEwpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjaGFubmVs
ICoKK2ZpbmRfZnJlZV9jaGFubmVsKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQoreworCXVp
bnQzMl90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NIQU5ORUxTOyBpKyspIHsK
KwkJaWYgKHBjLT5jaGFubmVsc1tpXS5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxfQ0xPU0VEKSB7CisJ
CQlicmVhazsKKwkJfQorCX0KKwlpZiAoaSA9PSBOVU1CRVJfT0ZfQ0hBTk5FTFMpIHsKKwkJcmV0
dXJuIChOVUxMKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKCYocGMtPmNoYW5uZWxzW2ldKSk7CisJ
fQorfQorCitzdGF0aWMgdWludDE2X3QKK2ZpbmRfZnJlZV9vX3N0cmVhbShzdHJ1Y3QgcGVlcl9j
b25uZWN0aW9uICpwYykKK3sKKwlzdHJ1Y3Qgc2N0cF9zdGF0dXMgc3RhdHVzOworCXVpbnQzMl90
IGksIGxpbWl0OworCXNvY2tsZW5fdCBsZW47CisKKwlsZW4gPSAoc29ja2xlbl90KXNpemVvZihz
dHJ1Y3Qgc2N0cF9zdGF0dXMpOworCWlmICh1c3JzY3RwX2dldHNvY2tvcHQocGMtPnNvY2ssIElQ
UFJPVE9fU0NUUCwgU0NUUF9TVEFUVVMsICZzdGF0dXMsICZsZW4pIDwgMCkgeworCQlwZXJyb3Io
ImdldHNvY2tvcHQiKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKHN0YXR1cy5zc3RhdF9vdXRz
dHJtcyA8IE5VTUJFUl9PRl9TVFJFQU1TKSB7CisJCWxpbWl0ID0gc3RhdHVzLnNzdGF0X291dHN0
cm1zOworCX0gZWxzZSB7CisJCWxpbWl0ID0gTlVNQkVSX09GX1NUUkVBTVM7CisJfQorCS8qIHN0
cmVhbSBpZCAwIGlzIHJlc2VydmVkICovCisJZm9yIChpID0gMTsgaSA8IGxpbWl0OyBpKyspIHsK
KwkJaWYgKHBjLT5vX3N0cmVhbV9jaGFubmVsW2ldID09IE5VTEwpIHsKKwkJCWJyZWFrOworCQl9
CisJfQorCWlmIChpID09IGxpbWl0KSB7CisJCXJldHVybiAoMCk7CisJfSBlbHNlIHsKKwkJcmV0
dXJuICgodWludDE2X3QpaSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcmVxdWVzdF9tb3JlX29f
c3RyZWFtcyhzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykKK3sKKwlzdHJ1Y3Qgc2N0cF9zdGF0
dXMgc3RhdHVzOworCXN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zIHNhczsKKwl1aW50MzJfdCBpLCBv
X3N0cmVhbXNfbmVlZGVkOworCXNvY2tsZW5fdCBsZW47CisKKwlvX3N0cmVhbXNfbmVlZGVkID0g
MDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NIQU5ORUxTOyBpKyspIHsKKwkJaWYgKChw
Yy0+Y2hhbm5lbHNbaV0uc3RhdGUgPT0gREFUQV9DSEFOTkVMX0NPTk5FQ1RJTkcpICYmCisJCSAg
ICAocGMtPmNoYW5uZWxzW2ldLm9fc3RyZWFtID09IDApKSB7CisJCQlvX3N0cmVhbXNfbmVlZGVk
Kys7CisJCX0KKwl9CisJbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc3RhdHVz
KTsKKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHBjLT5zb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBf
U1RBVFVTLCAmc3RhdHVzLCAmbGVuKSA8IDApIHsKKwkJcGVycm9yKCJnZXRzb2Nrb3B0Iik7CisJ
CXJldHVybjsKKwl9CisJaWYgKHN0YXR1cy5zc3RhdF9vdXRzdHJtcyArIG9fc3RyZWFtc19uZWVk
ZWQgPiBOVU1CRVJfT0ZfU1RSRUFNUykgeworCQlvX3N0cmVhbXNfbmVlZGVkID0gTlVNQkVSX09G
X1NUUkVBTVMgLSBzdGF0dXMuc3N0YXRfb3V0c3RybXM7CisJfQorCWlmIChvX3N0cmVhbXNfbmVl
ZGVkID09IDApIHsKKwkJcmV0dXJuOworCX0KKwltZW1zZXQoJnNhcywgMCwgc2l6ZW9mKHN0cnVj
dCBzY3RwX2FkZF9zdHJlYW1zKSk7CisJc2FzLnNhc19pbnN0cm1zID0gMDsKKwlzYXMuc2FzX291
dHN0cm1zID0gKHVpbnQxNl90KW9fc3RyZWFtc19uZWVkZWQ7IC8qIFhYWCBlcm9yIGhhbmRsaW5n
ICovCisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChwYy0+c29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQ
X0FERF9TVFJFQU1TLCAmc2FzLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9hZGRfc3Ry
ZWFtcykpIDwgMCkgeworCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKKwl9CisJcmV0dXJuOworfQor
CitzdGF0aWMgaW50CitzZW5kX29wZW5fcmVxdWVzdF9tZXNzYWdlKHN0cnVjdCBzb2NrZXQgKnNv
Y2ssIHVpbnQxNl90IG9fc3RyZWFtLCB1aW50OF90IHVub3JkZXJlZCwgdWludDE2X3QgcHJfcG9s
aWN5LCB1aW50MzJfdCBwcl92YWx1ZSkKK3sKKwkvKiBYWFg6IFRoaXMgc2hvdWxkIGJlIGVuY29k
ZWQgaW4gYSBiZXR0ZXIgd2F5ICovCisJc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jl
cXVlc3QgcmVxOworCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKKworCW1lbXNldCgmcmVx
LCAwLCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVlc3QpKTsKKwly
ZXEubXNnX3R5cGUgPSBEQVRBX0NIQU5ORUxfT1BFTl9SRVFVRVNUOworCXN3aXRjaCAocHJfcG9s
aWN5KSB7CisJY2FzZSBTQ1RQX1BSX1NDVFBfTk9ORToKKwkJLyogWFhYOiBXaGF0IGFib3V0IERB
VEFfQ0hBTk5FTF9SRUxJQUJMRV9TVFJFQU0gKi8KKwkJcmVxLmNoYW5uZWxfdHlwZSA9IERBVEFf
Q0hBTk5FTF9SRUxJQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1BSX1NDVFBfVFRMOgorCQkv
KiBYWFg6IFdoYXQgYWJvdXQgREFUQV9DSEFOTkVMX1VOUkVMSUFCTEUgKi8KKwkJcmVxLmNoYW5u
ZWxfdHlwZSA9IERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JFTElBQkxFX1RJTUVEOworCQlicmVhazsK
KwljYXNlIFNDVFBfUFJfU0NUUF9SVFg6CisJCXJlcS5jaGFubmVsX3R5cGUgPSBEQVRBX0NIQU5O
RUxfUEFSVElBTF9SRUxJQUJMRV9SRVhNSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVy
biAoMCk7CisJfQorCXJlcS5mbGFncyA9IGh0b25zKDApOworCWlmICh1bm9yZGVyZWQpIHsKKwkJ
cmVxLmZsYWdzIHw9IGh0b25zKERBVEFfQ0hBTk5FTF9GTEFHX09VVF9PRl9PUkRFUl9BTExPV0VE
KTsKKwl9CisJcmVxLnJlbGlhYmlsaXR5X3BhcmFtcyA9IGh0b25zKCh1aW50MTZfdClwcl92YWx1
ZSk7IC8qIFhYWCBXaHkgMTYtYml0ICovCisJcmVxLnByaW9yaXR5ID0gaHRvbnMoMCk7IC8qIFhY
WDogYWRkIHN1cHBvcnQgKi8KKwltZW1zZXQoJnNuZGluZm8sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0
cF9zbmRpbmZvKSk7CisJc25kaW5mby5zbmRfc2lkID0gb19zdHJlYW07CisJc25kaW5mby5zbmRf
ZmxhZ3MgPSBTQ1RQX0VPUjsKKwlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoREFUQV9DSEFOTkVM
X1BQSURfQ09OVFJPTCk7CisJaWYgKHVzcnNjdHBfc2VuZHYoc29jaywKKwkgICAgICAgICAgICAg
ICAgICAmcmVxLCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVlc3Qp
LAorCSAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisJICAgICAgICAgICAgICAgICAgJnNuZGlu
Zm8sIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLAorCSAgICAgICAgICAg
ICAgICAgIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCXBlcnJvcigic2N0cF9zZW5k
diIpOworCQlyZXR1cm4gKDApOworCX0gZWxzZSB7CisJCXJldHVybiAoMSk7CisJfQorfQorCitz
dGF0aWMgaW50CitzZW5kX29wZW5fcmVzcG9uc2VfbWVzc2FnZShzdHJ1Y3Qgc29ja2V0ICpzb2Nr
LCB1aW50MTZfdCBvX3N0cmVhbSwgdWludDE2X3QgaV9zdHJlYW0pCit7CisJLyogWFhYOiBUaGlz
IHNob3VsZCBiZSBlbmNvZGVkIGluIGEgYmV0dGVyIHdheSAqLworCXN0cnVjdCBydGN3ZWJfZGF0
YWNoYW5uZWxfb3Blbl9yZXNwb25zZSByc3A7CisJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZv
OworCisJbWVtc2V0KCZyc3AsIDAsIHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29w
ZW5fcmVzcG9uc2UpKTsKKwlyc3AubXNnX3R5cGUgPSBEQVRBX0NIQU5ORUxfT1BFTl9SRVNQT05T
RTsKKwlyc3AuZXJyb3IgPSAwOworCXJzcC5mbGFncyA9IGh0b25zKDApOworCXJzcC5yZXZlcnNl
X3N0cmVhbSA9IGh0b25zKGlfc3RyZWFtKTsKKwltZW1zZXQoJnNuZGluZm8sIDAsIHNpemVvZihz
dHJ1Y3Qgc2N0cF9zbmRpbmZvKSk7CisJc25kaW5mby5zbmRfc2lkID0gb19zdHJlYW07CisJc25k
aW5mby5zbmRfZmxhZ3MgPSBTQ1RQX0VPUjsKKwlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoREFU
QV9DSEFOTkVMX1BQSURfQ09OVFJPTCk7CisJaWYgKHVzcnNjdHBfc2VuZHYoc29jaywKKwkgICAg
ICAgICAgICAgICAgICAmcnNwLCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVu
X3Jlc3BvbnNlKSwKKwkgICAgICAgICAgICAgICAgICBOVUxMLCAwLAorCSAgICAgICAgICAgICAg
ICAgICZzbmRpbmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwKKwkg
ICAgICAgICAgICAgICAgICBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgeworCQlwZXJyb3Io
InNjdHBfc2VuZHYiKTsKKwkJcmV0dXJuICgwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKDEpOwor
CX0KK30KKworc3RhdGljIGludAorc2VuZF9vcGVuX2Fja19tZXNzYWdlKHN0cnVjdCBzb2NrZXQg
KnNvY2ssIHVpbnQxNl90IG9fc3RyZWFtKQoreworCS8qIFhYWDogVGhpcyBzaG91bGQgYmUgZW5j
b2RlZCBpbiBhIGJldHRlciB3YXkgKi8KKwlzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX2FjayBh
Y2s7CisJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOworCisJbWVtc2V0KCZhY2ssIDAsIHNp
emVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX2FjaykpOworCWFjay5tc2dfdHlwZSA9IERB
VEFfQ0hBTk5FTF9BQ0s7CisJbWVtc2V0KCZzbmRpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBf
c25kaW5mbykpOworCXNuZGluZm8uc25kX3NpZCA9IG9fc3RyZWFtOworCXNuZGluZm8uc25kX2Zs
YWdzID0gU0NUUF9FT1I7CisJc25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERBVEFfQ0hBTk5FTF9Q
UElEX0NPTlRST0wpOworCWlmICh1c3JzY3RwX3NlbmR2KHNvY2ssCisJICAgICAgICAgICAgICAg
ICAgJmFjaywgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNrKSwKKwkgICAgICAg
ICAgICAgICAgICBOVUxMLCAwLAorCSAgICAgICAgICAgICAgICAgICZzbmRpbmZvLCAoc29ja2xl
bl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwKKwkgICAgICAgICAgICAgICAgICBTQ1RQ
X1NFTkRWX1NORElORk8sIDApIDwgMCkgeworCQlwZXJyb3IoInNjdHBfc2VuZHYiKTsKKwkJcmV0
dXJuICgwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKDEpOworCX0KK30KKworc3RhdGljIHZvaWQK
K3NlbmRfZGVmZXJyZWRfbWVzc2FnZXMoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMpCit7CisJ
dWludDMyX3QgaTsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKworCWZvciAoaSA9IDA7IGkg
PCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykgeworCQljaGFubmVsID0gJihwYy0+Y2hhbm5lbHNb
aV0pOworCQlpZiAoY2hhbm5lbC0+ZmxhZ3MgJiBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SRVEp
IHsKKwkJCWlmIChzZW5kX29wZW5fcmVxdWVzdF9tZXNzYWdlKHBjLT5zb2NrLCBjaGFubmVsLT5v
X3N0cmVhbSwgY2hhbm5lbC0+dW5vcmRlcmVkLCBjaGFubmVsLT5wcl9wb2xpY3ksIGNoYW5uZWwt
PnByX3ZhbHVlKSkgeworCQkJCWNoYW5uZWwtPmZsYWdzICY9IH5EQVRBX0NIQU5ORUxfRkxBR1Nf
U0VORF9SRVE7CisJCQl9IGVsc2UgeworCQkJCWlmIChlcnJubyAhPSBFQUdBSU4pIHsKKwkJCQkJ
LyogWFhYOiBlcnJvciBoYW5kbGluZyAqLworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoY2hhbm5l
bC0+ZmxhZ3MgJiBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SU1ApIHsKKwkJCWlmIChzZW5kX29w
ZW5fcmVzcG9uc2VfbWVzc2FnZShwYy0+c29jaywgY2hhbm5lbC0+b19zdHJlYW0sIGNoYW5uZWwt
Pmlfc3RyZWFtKSkgeworCQkJCWNoYW5uZWwtPmZsYWdzICY9IH5EQVRBX0NIQU5ORUxfRkxBR1Nf
U0VORF9SU1A7CisJCQl9IGVsc2UgeworCQkJCWlmIChlcnJubyAhPSBFQUdBSU4pIHsKKwkJCQkJ
LyogWFhYOiBlcnJvciBoYW5kbGluZyAqLworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoY2hhbm5l
bC0+ZmxhZ3MgJiBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9BQ0spIHsKKwkJCWlmIChzZW5kX29w
ZW5fYWNrX21lc3NhZ2UocGMtPnNvY2ssIGNoYW5uZWwtPm9fc3RyZWFtKSkgeworCQkJCWNoYW5u
ZWwtPmZsYWdzICY9IH5EQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9BQ0s7CisJCQl9IGVsc2Ugewor
CQkJCWlmIChlcnJubyAhPSBFQUdBSU4pIHsKKwkJCQkJLyogWFhYOiBlcnJvciBoYW5kbGluZyAq
LworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hh
bm5lbCAqCitvcGVuX2NoYW5uZWwoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsIHVpbnQ4X3Qg
dW5vcmRlcmVkLCB1aW50MTZfdCBwcl9wb2xpY3ksIHVpbnQzMl90IHByX3ZhbHVlKQoreworCXN0
cnVjdCBjaGFubmVsICpjaGFubmVsOworCXVpbnQxNl90IG9fc3RyZWFtOworCisJaWYgKChwcl9w
b2xpY3kgIT0gU0NUUF9QUl9TQ1RQX05PTkUpICYmCisJICAgIChwcl9wb2xpY3kgIT0gU0NUUF9Q
Ul9TQ1RQX1RUTCkgJiYKKwkgICAgKHByX3BvbGljeSAhPSBTQ1RQX1BSX1NDVFBfUlRYKSkgewor
CQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoKHVub3JkZXJlZCAhPSAwKSAmJiAodW5vcmRlcmVk
ICE9IDEpKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmICgocHJfcG9saWN5ID09IFNDVFBf
UFJfU0NUUF9OT05FKSAmJiAocHJfdmFsdWUgIT0gMCkpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9
CisJaWYgKChjaGFubmVsID0gZmluZF9mcmVlX2NoYW5uZWwocGMpKSA9PSBOVUxMKSB7CisJCXJl
dHVybiAoTlVMTCk7CisJfQorCW9fc3RyZWFtID0gZmluZF9mcmVlX29fc3RyZWFtKHBjKTsKKwlj
aGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HOworCWNoYW5uZWwtPnVub3Jk
ZXJlZCA9IHVub3JkZXJlZDsKKwljaGFubmVsLT5wcl9wb2xpY3kgPSBwcl9wb2xpY3k7CisJY2hh
bm5lbC0+cHJfdmFsdWUgPSBwcl92YWx1ZTsKKwljaGFubmVsLT5vX3N0cmVhbSA9IG9fc3RyZWFt
OworCWNoYW5uZWwtPmZsYWdzID0gMDsKKwlpZiAob19zdHJlYW0gPT0gMCkgeworCQlyZXF1ZXN0
X21vcmVfb19zdHJlYW1zKHBjKTsKKwl9IGVsc2UgeworCQlpZiAoc2VuZF9vcGVuX3JlcXVlc3Rf
bWVzc2FnZShwYy0+c29jaywgb19zdHJlYW0sIHVub3JkZXJlZCwgcHJfcG9saWN5LCBwcl92YWx1
ZSkpIHsKKwkJCXBjLT5vX3N0cmVhbV9jaGFubmVsW29fc3RyZWFtXSA9IGNoYW5uZWw7CisJCX0g
ZWxzZSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOKSB7CisJCQkJcGMtPm9fc3RyZWFtX2NoYW5u
ZWxbb19zdHJlYW1dID0gY2hhbm5lbDsKKwkJCQljaGFubmVsLT5mbGFncyB8PSBEQVRBX0NIQU5O
RUxfRkxBR1NfU0VORF9SRVE7CisJCQl9IGVsc2UgeworCQkJCWNoYW5uZWwtPnN0YXRlID0gREFU
QV9DSEFOTkVMX0NMT1NFRDsKKwkJCQljaGFubmVsLT51bm9yZGVyZWQgPSAwOworCQkJCWNoYW5u
ZWwtPnByX3BvbGljeSA9IDA7CisJCQkJY2hhbm5lbC0+cHJfdmFsdWUgPSAwOworCQkJCWNoYW5u
ZWwtPm9fc3RyZWFtID0gMDsKKwkJCQljaGFubmVsLT5mbGFncyA9IDA7CisJCQkJY2hhbm5lbCA9
IE5VTEw7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChjaGFubmVsKTsKK30KKworc3RhdGljIGlu
dAorc2VuZF91c2VyX21lc3NhZ2Uoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsIHN0cnVjdCBj
aGFubmVsICpjaGFubmVsLCBjaGFyICptZXNzYWdlLCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVj
dCBzY3RwX3NlbmR2X3NwYSBzcGE7CisKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCXJldHVy
biAoMCk7CisJfQorCWlmICgoY2hhbm5lbC0+c3RhdGUgIT0gREFUQV9DSEFOTkVMX09QRU4pICYm
CisJICAgIChjaGFubmVsLT5zdGF0ZSAhPSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORykpIHsKKwkJ
LyogWFhYOiBXaGF0IHRvIGRvIGluIG90aGVyIHN0YXRlcyAqLworCQlyZXR1cm4gKDApOworCX0K
KworCW1lbXNldCgmc3BhLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZHZfc3BhKSk7CisJc3Bh
LnNlbmR2X3NuZGluZm8uc25kX3NpZCA9IGNoYW5uZWwtPm9fc3RyZWFtOworCWlmICgoY2hhbm5l
bC0+c3RhdGUgPT0gREFUQV9DSEFOTkVMX09QRU4pICYmCisJICAgIChjaGFubmVsLT51bm9yZGVy
ZWQpKSB7CisJCXNwYS5zZW5kdl9zbmRpbmZvLnNuZF9mbGFncyA9IFNDVFBfRU9SIHwgU0NUUF9V
Tk9SREVSRUQ7CisJfSBlbHNlIHsKKwkJc3BhLnNlbmR2X3NuZGluZm8uc25kX2ZsYWdzID0gU0NU
UF9FT1I7CisJfQorCXNwYS5zZW5kdl9zbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoREFUQV9DSEFO
TkVMX1BQSURfRE9NU1RSSU5HKTsKKwlzcGEuc2VuZHZfZmxhZ3MgPSBTQ1RQX1NFTkRfU05ESU5G
T19WQUxJRDsKKwlpZiAoKGNoYW5uZWwtPnByX3BvbGljeSA9PSBTQ1RQX1BSX1NDVFBfVFRMKSB8
fAorCSAgICAoY2hhbm5lbC0+cHJfcG9saWN5ID09IFNDVFBfUFJfU0NUUF9SVFgpKSB7CisJCXNw
YS5zZW5kdl9wcmluZm8ucHJfcG9saWN5ID0gY2hhbm5lbC0+cHJfcG9saWN5OworCQlzcGEuc2Vu
ZHZfcHJpbmZvLnByX3ZhbHVlID0gY2hhbm5lbC0+cHJfdmFsdWU7CisJCXNwYS5zZW5kdl9mbGFn
cyB8PSBTQ1RQX1NFTkRfUFJJTkZPX1ZBTElEOworCX0KKwlpZiAodXNyc2N0cF9zZW5kdihwYy0+
c29jaywKKwkgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsZW5ndGgsCisJICAgICAgICAgICAg
ICAgICAgTlVMTCwgMCwKKwkgICAgICAgICAgICAgICAgICAmc3BhLCAoc29ja2xlbl90KXNpemVv
ZihzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEpLAorCSAgICAgICAgICAgICAgICAgIFNDVFBfU0VORFZf
U1BBLCAwKSA8IDApIHsKKwkJcGVycm9yKCJzY3RwX3NlbmR2Iik7CisJCXJldHVybiAoMCk7CisJ
fSBlbHNlIHsKKwkJcmV0dXJuICgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCityZXNldF9vdXRn
b2luZ19zdHJlYW0oc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsIHVpbnQxNl90IG9fc3RyZWFt
KQoreworCXVpbnQzMl90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGMtPm9fc3RyZWFtX2J1ZmZl
cl9jb3VudGVyOyBpKyspIHsKKwkJaWYgKHBjLT5vX3N0cmVhbV9idWZmZXJbaV0gPT0gb19zdHJl
YW0pIHsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlwYy0+b19zdHJlYW1fYnVmZmVyW3BjLT5vX3N0
cmVhbV9idWZmZXJfY291bnRlcisrXSA9IG9fc3RyZWFtOworCXJldHVybjsKK30KKworc3RhdGlj
IHZvaWQKK3NlbmRfb3V0Z29pbmdfc3RyZWFtX3Jlc2V0KHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24g
KnBjKQoreworCXN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKnNyczsKKwl1aW50MzJfdCBpOwor
CXNpemVfdCBsZW47CisKKwlpZiAocGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyID09IDApIHsK
KwkJcmV0dXJuOworCX0KKwlsZW4gPSBzaXplb2Yoc2N0cF9hc3NvY190KSArICgyICsgcGMtPm9f
c3RyZWFtX2J1ZmZlcl9jb3VudGVyKSAqIHNpemVvZih1aW50MTZfdCk7CisJc3JzID0gKHN0cnVj
dCBzY3RwX3Jlc2V0X3N0cmVhbXMgKiltYWxsb2MobGVuKTsKKwlpZiAoc3JzID09IE5VTEwpIHsK
KwkJcmV0dXJuOworCX0KKwltZW1zZXQoc3JzLCAwLCBsZW4pOworCXNycy0+c3JzX2ZsYWdzID0g
U0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkc7CisJc3JzLT5zcnNfbnVtYmVyX3N0cmVhbXMgPSBw
Yy0+b19zdHJlYW1fYnVmZmVyX2NvdW50ZXI7CisJZm9yIChpID0gMDsgaSA8IHBjLT5vX3N0cmVh
bV9idWZmZXJfY291bnRlcjsgaSsrKSB7CisJCXNycy0+c3JzX3N0cmVhbV9saXN0W2ldID0gcGMt
Pm9fc3RyZWFtX2J1ZmZlcltpXTsKKwl9CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChwYy0+c29j
aywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFU0VUX1NUUkVBTVMsIHNycywgKHNvY2tsZW5fdClsZW4p
IDwgMCkgeworCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAw
OyBpIDwgcGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyOyBpKyspIHsKKwkJCXNycy0+c3JzX3N0
cmVhbV9saXN0W2ldID0gMDsKKwkJfQorCQlwYy0+b19zdHJlYW1fYnVmZmVyX2NvdW50ZXIgPSAw
OworCX0KKwlmcmVlKHNycyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorY2xvc2VfY2hh
bm5lbChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgc3RydWN0IGNoYW5uZWwgKmNoYW5uZWwp
Cit7CisJaWYgKGNoYW5uZWwgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWlmIChjaGFubmVs
LT5zdGF0ZSAhPSBEQVRBX0NIQU5ORUxfT1BFTikgeworCQlyZXR1cm47CisJfQorCXJlc2V0X291
dGdvaW5nX3N0cmVhbShwYywgY2hhbm5lbC0+b19zdHJlYW0pOworCXNlbmRfb3V0Z29pbmdfc3Ry
ZWFtX3Jlc2V0KHBjKTsKKwljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DTE9TSU5HOwor
CXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9vcGVuX3JlcXVlc3RfbWVzc2FnZShz
dHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVxdWVzdCAqcmVxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDE2X3QgaV9zdHJlYW0pCit7CisJc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7CisJdWlu
dDMyX3QgcHJfdmFsdWU7CisJdWludDE2X3QgcHJfcG9saWN5OworCXVpbnQxNl90IG9fc3RyZWFt
OworCXVpbnQ4X3QgdW5vcmRlcmVkOworCisJaWYgKChjaGFubmVsID0gZmluZF9jaGFubmVsX2J5
X2lfc3RyZWFtKHBjLCBpX3N0cmVhbSkpKSB7CisJCXByaW50ZigiaGFuZGxlX29wZW5fcmVxdWVz
dF9tZXNzYWdlOiBjaGFubmVsICV1IGlzIGluIHN0YXRlICV1IGluc3RlYWQgb2YgQ0xPU0VELlxu
IiwKKwkJICAgICAgIGNoYW5uZWwtPmlkLCBjaGFubmVsLT5zdGF0ZSk7CisJCS8qIFhYWDogc29t
ZSBlcnJvciBoYW5kbGluZyAqLworCQlyZXR1cm47CisJfQorCWlmICgoY2hhbm5lbCA9IGZpbmRf
ZnJlZV9jaGFubmVsKHBjKSkgPT0gTlVMTCkgeworCQkvKiBYWFg6IHNvbWUgZXJyb3IgaGFuZGxp
bmcgKi8KKwkJcmV0dXJuOworCX0KKwlzd2l0Y2ggKHJlcS0+Y2hhbm5lbF90eXBlKSB7CisJY2Fz
ZSBEQVRBX0NIQU5ORUxfUkVMSUFCTEU6CisJCXByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9OT05F
OworCQlicmVhazsKKwkvKiBYWFggRG9lc24ndCBtYWtlIHNlbnNlICovCisJY2FzZSBEQVRBX0NI
QU5ORUxfUkVMSUFCTEVfU1RSRUFNOgorCQlwcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfTk9ORTsK
KwkJYnJlYWs7CisJLyogWFhYIERvZXNuJ3QgbWFrZSBzZW5zZSAqLworCWNhc2UgREFUQV9DSEFO
TkVMX1VOUkVMSUFCTEU6CisJCXByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9UVEw7CisJCWJyZWFr
OworCWNhc2UgREFUQV9DSEFOTkVMX1BBUlRJQUxfUkVMSUFCTEVfUkVYTUlUOgorCQlwcl9wb2xp
Y3kgPSBTQ1RQX1BSX1NDVFBfUlRYOworCQlicmVhazsKKwljYXNlIERBVEFfQ0hBTk5FTF9QQVJU
SUFMX1JFTElBQkxFX1RJTUVEOgorCQlwcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfVFRMOworCQli
cmVhazsKKwlkZWZhdWx0OgorCQlwcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfTk9ORTsKKwkJLyog
WFhYIGVycm9yIGhhbmRsaW5nICovCisJCWJyZWFrOworCX0KKwlwcl92YWx1ZSA9IG50b2hzKHJl
cS0+cmVsaWFiaWxpdHlfcGFyYW1zKTsKKwlpZiAobnRvaHMocmVxLT5mbGFncykgJiBEQVRBX0NI
QU5ORUxfRkxBR19PVVRfT0ZfT1JERVJfQUxMT1dFRCkgeworCQl1bm9yZGVyZWQgPSAxOworCX0g
ZWxzZSB7CisJCXVub3JkZXJlZCA9IDA7CisJfQorCW9fc3RyZWFtID0gZmluZF9mcmVlX29fc3Ry
ZWFtKHBjKTsKKwljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HOworCWNo
YW5uZWwtPnVub3JkZXJlZCA9IHVub3JkZXJlZDsKKwljaGFubmVsLT5wcl9wb2xpY3kgPSBwcl9w
b2xpY3k7CisJY2hhbm5lbC0+cHJfdmFsdWUgPSBwcl92YWx1ZTsKKwljaGFubmVsLT5pX3N0cmVh
bSA9IGlfc3RyZWFtOworCWNoYW5uZWwtPm9fc3RyZWFtID0gb19zdHJlYW07CisJY2hhbm5lbC0+
ZmxhZ3MgPSAwOworCXBjLT5pX3N0cmVhbV9jaGFubmVsW2lfc3RyZWFtXSA9IGNoYW5uZWw7CisJ
aWYgKG9fc3RyZWFtID09IDApIHsKKwkJcmVxdWVzdF9tb3JlX29fc3RyZWFtcyhwYyk7CisJfSBl
bHNlIHsKKwkJaWYgKHNlbmRfb3Blbl9yZXNwb25zZV9tZXNzYWdlKHBjLT5zb2NrLCBvX3N0cmVh
bSwgaV9zdHJlYW0pKSB7CisJCQlwYy0+b19zdHJlYW1fY2hhbm5lbFtvX3N0cmVhbV0gPSBjaGFu
bmVsOworCQl9IGVsc2UgeworCQkJaWYgKGVycm5vID09IEVBR0FJTikgeworCQkJCWNoYW5uZWwt
PmZsYWdzIHw9IERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JTUDsKKwkJCQlwYy0+b19zdHJlYW1f
Y2hhbm5lbFtvX3N0cmVhbV0gPSBjaGFubmVsOworCQkJfSBlbHNlIHsKKwkJCQkvKiBYWFg6IFNp
Z25hbCBlcnJvciB0byB0aGUgb3RoZXIgZW5kLiAqLworCQkJCXBjLT5pX3N0cmVhbV9jaGFubmVs
W2lfc3RyZWFtXSA9IE5VTEw7CisJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfQ0xP
U0VEOworCQkJCWNoYW5uZWwtPnVub3JkZXJlZCA9IDA7CisJCQkJY2hhbm5lbC0+cHJfcG9saWN5
ID0gMDsKKwkJCQljaGFubmVsLT5wcl92YWx1ZSA9IDA7CisJCQkJY2hhbm5lbC0+aV9zdHJlYW0g
PSAwOworCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0gMDsKKwkJCQljaGFubmVsLT5mbGFncyA9IDA7
CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfb3Blbl9yZXNwb25zZV9t
ZXNzYWdlKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVzcG9uc2UgKnJzcCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgdWludDE2X3QgaV9zdHJl
YW0pCit7CisJdWludDE2X3Qgb19zdHJlYW07CisJc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7CisK
KwlvX3N0cmVhbSA9IG50b2hzKHJzcC0+cmV2ZXJzZV9zdHJlYW0pOworCWNoYW5uZWwgPSBmaW5k
X2NoYW5uZWxfYnlfb19zdHJlYW0ocGMsIG9fc3RyZWFtKTsKKwlpZiAoY2hhbm5lbCA9PSBOVUxM
KSB7CisJCS8qIFhYWDogaW1wcm92ZSBlcnJvciBoYW5kbGluZyAqLworCQlwcmludGYoImhhbmRs
ZV9vcGVuX3Jlc3BvbnNlX21lc3NhZ2U6IENhbid0IGZpbmQgY2hhbm5lbCBmb3Igb3V0Z29pbmcg
c3RlYW0gJWQuXG4iLCBvX3N0cmVhbSk7CisJCXJldHVybjsKKwl9CisJaWYgKGNoYW5uZWwtPnN0
YXRlICE9IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HKSB7CisJCS8qIFhYWDogaW1wcm92ZSBlcnJv
ciBoYW5kbGluZyAqLworCQlwcmludGYoImhhbmRsZV9vcGVuX3Jlc3BvbnNlX21lc3NhZ2U6IENo
YW5uZWwgd2l0aCBpZCAldSBmb3Igb3V0Z29pbmcgc3RlYW0gJXUgaXMgaW4gc3RhdGUgJXUuXG4i
LCBjaGFubmVsLT5pZCwgb19zdHJlYW0sIGNoYW5uZWwtPnN0YXRlKTsKKwkJcmV0dXJuOworCX0K
KwlpZiAoZmluZF9jaGFubmVsX2J5X2lfc3RyZWFtKHBjLCBpX3N0cmVhbSkpIHsKKwkJLyogWFhY
OiBpbXByb3ZlIGVycm9yIGhhbmRsaW5nICovCisJCXByaW50ZigiaGFuZGxlX29wZW5fcmVzcG9u
c2VfbWVzc2FnZTogQ2hhbm5lbCBjb2xsaXNpb24gZm9yIGNoYW5uZWwgd2l0aCBpZCAldSBhbmQg
c3RyZWFtcyAoaW4vb3V0KSA9ICgldS8ldSkuXG4iLCBjaGFubmVsLT5pZCwgaV9zdHJlYW0sIG9f
c3RyZWFtKTsKKwkJcmV0dXJuOworCX0KKwljaGFubmVsLT5pX3N0cmVhbSA9IGlfc3RyZWFtOwor
CWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX09QRU47CisJcGMtPmlfc3RyZWFtX2NoYW5u
ZWxbaV9zdHJlYW1dID0gY2hhbm5lbDsKKwlpZiAoc2VuZF9vcGVuX2Fja19tZXNzYWdlKHBjLT5z
b2NrLCBvX3N0cmVhbSkpIHsKKwkJY2hhbm5lbC0+ZmxhZ3MgPSAwOworCX0gZWxzZSB7CisJCWNo
YW5uZWwtPmZsYWdzIHw9IERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX0FDSzsKKwl9CisJcmV0dXJu
OworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX29wZW5fYWNrX21lc3NhZ2Uoc3RydWN0IHBlZXJf
Y29ubmVjdGlvbiAqcGMsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRjd2ViX2Rh
dGFjaGFubmVsX2FjayAqYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0
aCwgdWludDE2X3QgaV9zdHJlYW0pCit7CisJc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7CisKKwlj
aGFubmVsID0gZmluZF9jaGFubmVsX2J5X2lfc3RyZWFtKHBjLCBpX3N0cmVhbSk7CisJaWYgKGNo
YW5uZWwgPT0gTlVMTCkgeworCQkvKiBYWFg6IHNvbWUgZXJyb3IgaGFuZGxpbmcgKi8KKwkJcmV0
dXJuOworCX0KKwlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gREFUQV9DSEFOTkVMX09QRU4pIHsKKwkJ
cmV0dXJuOworCX0KKwlpZiAoY2hhbm5lbC0+c3RhdGUgIT0gREFUQV9DSEFOTkVMX0NPTk5FQ1RJ
TkcpIHsKKwkJLyogWFhYOiBlcnJvciBoYW5kbGluZyAqLworCQlyZXR1cm47CisJfQorCWNoYW5u
ZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX09QRU47CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9p
ZAoraGFuZGxlX3Vua25vd25fbWVzc2FnZShjaGFyICptc2csIHNpemVfdCBsZW5ndGgsIHVpbnQx
Nl90IGlfc3RyZWFtKQoreworCS8qIFhYWDogU2VuZCBhbiBlcnJvciBtZXNzYWdlICovCisJcmV0
dXJuOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX2RhdGFfbWVzc2FnZShzdHJ1Y3QgcGVlcl9j
b25uZWN0aW9uICpwYywKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3Qg
bGVuZ3RoLCB1aW50MTZfdCBpX3N0cmVhbSkKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsK
KworCWNoYW5uZWwgPSBmaW5kX2NoYW5uZWxfYnlfaV9zdHJlYW0ocGMsIGlfc3RyZWFtKTsKKwlp
ZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCS8qIFhYWDogU29tZSBlcnJvciBoYW5kbGluZyAqLwor
CQlyZXR1cm47CisJfQorCWlmIChjaGFubmVsLT5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxfQ09OTkVD
VElORykgeworCQkvKiBJbXBsaWNpdCBBQ0sgKi8KKwkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NI
QU5ORUxfT1BFTjsKKwl9CisJaWYgKGNoYW5uZWwtPnN0YXRlICE9IERBVEFfQ0hBTk5FTF9PUEVO
KSB7CisJCS8qIFhYWDogV2hhdCBhYm91dCBvdGhlciBzdGF0ZXM/ICovCisJCS8qIFhYWDogU29t
ZSBlcnJvciBoYW5kbGluZyAqLworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJLyogQXNzdW1pbmcg
REFUQV9DSEFOTkVMX1BQSURfRE9NU1RSSU5HICovCisJCS8qIFhYWDogUHJvdGVjdCBmb3Igbm9u
IDAgdGVybWluYXRlZCBidWZmZXIgKi8KKwkJcHJpbnRmKCJNZXNzYWdlIHJlY2VpdmVkIG9mIGxl
bmd0aCAlenUgb24gY2hhbm5lbCB3aXRoIGlkICV1OiAlLipzXG4iLAorCQkgICAgICAgbGVuZ3Ro
LCBjaGFubmVsLT5pZCwgKGludClsZW5ndGgsIGJ1ZmZlcik7CisJfQorCXJldHVybjsKK30KKwor
c3RhdGljIHZvaWQKK2hhbmRsZV9tZXNzYWdlKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLCBj
aGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQzMl90IHBwaWQsIHVpbnQxNl90IGlfc3Ry
ZWFtKQoreworCXN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0ICpyZXE7CisJ
c3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jlc3BvbnNlICpyc3A7CisJc3RydWN0IHJ0
Y3dlYl9kYXRhY2hhbm5lbF9hY2sgKmFjaywgKm1zZzsKKworCXN3aXRjaCAocHBpZCkgeworCWNh
c2UgREFUQV9DSEFOTkVMX1BQSURfQ09OVFJPTDoKKwkJaWYgKGxlbmd0aCA8IHNpemVvZihzdHJ1
Y3QgcnRjd2ViX2RhdGFjaGFubmVsX2FjaykpIHsKKwkJCXJldHVybjsKKwkJfQorCQltc2cgPSAo
c3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2sgKilidWZmZXI7CisJCXN3aXRjaCAobXNnLT5t
c2dfdHlwZSkgeworCQljYXNlIERBVEFfQ0hBTk5FTF9PUEVOX1JFUVVFU1Q6CisJCQlpZiAobGVu
Z3RoIDwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0KSkgewor
CQkJCS8qIFhYWDogZXJyb3IgaGFuZGxpbmc/ICovCisJCQkJcmV0dXJuOworCQkJfQorCQkJcmVx
ID0gKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0ICopYnVmZmVyOworCQkJ
aGFuZGxlX29wZW5fcmVxdWVzdF9tZXNzYWdlKHBjLCByZXEsIGxlbmd0aCwgaV9zdHJlYW0pOwor
CQkJYnJlYWs7CisJCWNhc2UgREFUQV9DSEFOTkVMX09QRU5fUkVTUE9OU0U6CisJCQlpZiAobGVu
Z3RoIDwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXNwb25zZSkpIHsK
KwkJCQkvKiBYWFg6IGVycm9yIGhhbmRsaW5nPyAqLworCQkJCXJldHVybjsKKwkJCX0KKwkJCXJz
cCA9IChzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVzcG9uc2UgKilidWZmZXI7CisJ
CQloYW5kbGVfb3Blbl9yZXNwb25zZV9tZXNzYWdlKHBjLCByc3AsIGxlbmd0aCwgaV9zdHJlYW0p
OworCQkJYnJlYWs7CisJCWNhc2UgREFUQV9DSEFOTkVMX0FDSzoKKwkJCWlmIChsZW5ndGggPCBz
aXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2spKSB7CisJCQkJLyogWFhYOiBlcnJv
ciBoYW5kbGluZz8gKi8KKwkJCQlyZXR1cm47CisJCQl9CisJCQlhY2sgPSAoc3RydWN0IHJ0Y3dl
Yl9kYXRhY2hhbm5lbF9hY2sgKilidWZmZXI7CisJCQloYW5kbGVfb3Blbl9hY2tfbWVzc2FnZShw
YywgYWNrLCBsZW5ndGgsIGlfc3RyZWFtKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaGFu
ZGxlX3Vua25vd25fbWVzc2FnZShidWZmZXIsIGxlbmd0aCwgaV9zdHJlYW0pOworCQkJYnJlYWs7
CisJCX0KKwkJYnJlYWs7CisJY2FzZSBEQVRBX0NIQU5ORUxfUFBJRF9ET01TVFJJTkc6CisJY2Fz
ZSBEQVRBX0NIQU5ORUxfUFBJRF9CSU5BUlk6CisJCWhhbmRsZV9kYXRhX21lc3NhZ2UocGMsIGJ1
ZmZlciwgbGVuZ3RoLCBpX3N0cmVhbSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50Zigi
TWVzc2FnZSBvZiBsZW5ndGggJXp1LCBQUElEICV1IG9uIHN0cmVhbSAldSByZWNlaXZlZC5cbiIs
CisJCSAgICAgICBsZW5ndGgsIHBwaWQsIGlfc3RyZWFtKTsKKwkJYnJlYWs7CisJfQorfQorCitz
dGF0aWMgdm9pZAoraGFuZGxlX2Fzc29jaWF0aW9uX2NoYW5nZV9ldmVudChzdHJ1Y3Qgc2N0cF9h
c3NvY19jaGFuZ2UgKnNhYykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbjsKKworCXByaW50ZigiQXNz
b2NpYXRpb24gY2hhbmdlICIpOworCXN3aXRjaCAoc2FjLT5zYWNfc3RhdGUpIHsKKwljYXNlIFND
VFBfQ09NTV9VUDoKKwkJcHJpbnRmKCJTQ1RQX0NPTU1fVVAiKTsKKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX0NPTU1fTE9TVDoKKwkJcHJpbnRmKCJTQ1RQX0NPTU1fTE9TVCIpOworCQlicmVhazsKKwlj
YXNlIFNDVFBfUkVTVEFSVDoKKwkJcHJpbnRmKCJTQ1RQX1JFU1RBUlQiKTsKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX1NIVVRET1dOX0NPTVA6CisJCXByaW50ZigiU0NUUF9TSFVURE9XTl9DT01QIik7
CisJCWJyZWFrOworCWNhc2UgU0NUUF9DQU5UX1NUUl9BU1NPQzoKKwkJcHJpbnRmKCJTQ1RQX0NB
TlRfU1RSX0FTU09DIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiVU5LTk9XTiIp
OworCQlicmVhazsKKwl9CisJcHJpbnRmKCIsIHN0cmVhbXMgKGluL291dCkgPSAoJXUvJXUpIiwK
KwkgICAgICAgc2FjLT5zYWNfaW5ib3VuZF9zdHJlYW1zLCBzYWMtPnNhY19vdXRib3VuZF9zdHJl
YW1zKTsKKwluID0gc2FjLT5zYWNfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2No
YW5nZSk7CisJaWYgKCgoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9DT01NX1VQKSB8fAorCSAgICAg
KHNhYy0+c2FjX3N0YXRlID09IFNDVFBfUkVTVEFSVCkpICYmIChuID4gMCkpIHsKKwkJcHJpbnRm
KCIsIHN1cHBvcnRzIik7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXN3aXRjaCAo
c2FjLT5zYWNfaW5mb1tpXSkgeworCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX1BSOgorCQkJ
CXByaW50ZigiIFBSIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNf
QVVUSDoKKwkJCQlwcmludGYoIiBBVVRIIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNDVFBfQVNT
T0NfU1VQUE9SVFNfQVNDT05GOgorCQkJCXByaW50ZigiIEFTQ09ORiIpOworCQkJCWJyZWFrOwor
CQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX01VTFRJQlVGOgorCQkJCXByaW50ZigiIE1VTFRJ
QlVGIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNfUkVfQ09ORklH
OgorCQkJCXByaW50ZigiIFJFLUNPTkZJRyIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTQ1RQX0FT
U09DX1NVUFBPUlRTX0lOVEVSTEVBVklORzoKKwkJCQlwcmludGYoIiBJTlRFUkxFQVZJTkciKTsK
KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRmKCIgVU5LTk9XTigweCUwMngpIiwg
c2FjLT5zYWNfaW5mb1tpXSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKCgo
c2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9DT01NX0xPU1QpIHx8CisJICAgICAgICAgICAgKHNhYy0+
c2FjX3N0YXRlID09IFNDVFBfQ0FOVF9TVFJfQVNTT0MpKSAmJiAobiA+IDApKSB7CisJCXByaW50
ZigiLCBBQk9SVCA9Iik7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXByaW50Zigi
IDB4JTAyeCIsIHNhYy0+c2FjX2luZm9baV0pOworCQl9CisJfQorCXByaW50ZigiLlxuIik7CisJ
aWYgKChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09DKSB8fAorCSAgICAoc2Fj
LT5zYWNfc3RhdGUgPT0gU0NUUF9TSFVURE9XTl9DT01QKSB8fAorCSAgICAoc2FjLT5zYWNfc3Rh
dGUgPT0gU0NUUF9DT01NX0xPU1QpKSB7CisJCWV4aXQoMCk7CisJfQorCXJldHVybjsKK30KKwor
c3RhdGljIHZvaWQKK2hhbmRsZV9wZWVyX2FkZHJlc3NfY2hhbmdlX2V2ZW50KHN0cnVjdCBzY3Rw
X3BhZGRyX2NoYW5nZSAqc3BjKQoreworCWNoYXIgYWRkcl9idWZbSU5FVDZfQUREUlNUUkxFTl07
CisJY29uc3QgY2hhciAqYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3Qg
c29ja2FkZHJfaW42ICpzaW42OworCisJc3dpdGNoIChzcGMtPnNwY19hYWRkci5zc19mYW1pbHkp
IHsKKwljYXNlIEFGX0lORVQ6CisJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmc3BjLT5z
cGNfYWFkZHI7CisJCWFkZHIgPSBpbmV0X250b3AoQUZfSU5FVCwgJnNpbi0+c2luX2FkZHIsIGFk
ZHJfYnVmLCBJTkVUX0FERFJTVFJMRU4pOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlz
aW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmc3BjLT5zcGNfYWFkZHI7CisJCWFkZHIgPSBp
bmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2FkZHIsIGFkZHJfYnVmLCBJTkVUNl9BRERS
U1RSTEVOKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKyNpZmRlZiBfV0lOMzIKKwkJaWYgKF9zbnBy
aW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIlVua25vd24gZmFtaWx5ICVkIiwgc3Bj
LT5zcGNfYWFkZHIuc3NfZmFtaWx5KSA8IDApIHsKKyNlbHNlCisJCWlmIChzbnByaW50ZihhZGRy
X2J1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIlVua25vd24gZmFtaWx5ICVkIiwgc3BjLT5zcGNfYWFk
ZHIuc3NfZmFtaWx5KSA8IDApIHsKKyNlbmRpZgorCQkJYWRkcl9idWZbMF0gPSAnXDAnOworCQl9
CisJCWFkZHIgPSBhZGRyX2J1ZjsKKwkJYnJlYWs7CisJfQorCXByaW50ZigiUGVlciBhZGRyZXNz
ICVzIGlzIG5vdyAiLCBhZGRyKTsKKwlzd2l0Y2ggKHNwYy0+c3BjX3N0YXRlKSB7CisJY2FzZSBT
Q1RQX0FERFJfQVZBSUxBQkxFOgorCQlwcmludGYoIlNDVFBfQUREUl9BVkFJTEFCTEUiKTsKKwkJ
YnJlYWs7CisJY2FzZSBTQ1RQX0FERFJfVU5SRUFDSEFCTEU6CisJCXByaW50ZigiU0NUUF9BRERS
X1VOUkVBQ0hBQkxFIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX1JFTU9WRUQ6CisJCXBy
aW50ZigiU0NUUF9BRERSX1JFTU9WRUQiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FERFJfQURE
RUQ6CisJCXByaW50ZigiU0NUUF9BRERSX0FEREVEIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9B
RERSX01BREVfUFJJTToKKwkJcHJpbnRmKCJTQ1RQX0FERFJfTUFERV9QUklNIik7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9BRERSX0NPTkZJUk1FRDoKKwkJcHJpbnRmKCJTQ1RQX0FERFJfQ09ORklS
TUVEIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiVU5LTk9XTiIpOworCQlicmVh
azsKKwl9CisJcHJpbnRmKCIgKGVycm9yID0gMHglMDh4KS5cbiIsIHNwYy0+c3BjX2Vycm9yKTsK
KwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfYWRhcHRhdGlvbl9pbmRpY2F0aW9u
KHN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgKnNhaSkKK3sKKwlwcmludGYoIkFkYXB0YXRp
b24gaW5kaWNhdGlvbjogJXguXG4iLCBzYWktPiBzYWlfYWRhcHRhdGlvbl9pbmQpOworCXJldHVy
bjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9zaHV0ZG93bl9ldmVudChzdHJ1Y3Qgc2N0cF9z
aHV0ZG93bl9ldmVudCAqc3NlKQoreworCXByaW50ZigiU2h1dGRvd24gZXZlbnQuXG4iKTsKKwkv
KiBYWFg6IG5vdGlmeSBhbGwgY2hhbm5lbHMuICovCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9p
ZAoraGFuZGxlX3N0cmVhbV9yZXNldF9ldmVudChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywg
c3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50ICpzdHJyc3QpCit7CisJdWludDMyX3Qgbiwg
aTsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKworCW4gPSAoc3RycnN0LT5zdHJyZXNldF9s
ZW5ndGggLSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50KSkgLyBzaXplb2Yo
dWludDE2X3QpOworCXByaW50ZigiU3RyZWFtIHJlc2V0IGV2ZW50OiBmbGFncyA9ICV4LCAiLCBz
dHJyc3QtPnN0cnJlc2V0X2ZsYWdzKTsKKwlpZiAoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFND
VFBfU1RSRUFNX1JFU0VUX0lOQ09NSU5HX1NTTikgeworCQlpZiAoc3RycnN0LT5zdHJyZXNldF9m
bGFncyAmIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HX1NTTikgeworCQkJcHJpbnRmKCJpbmNv
bWluZy8iKTsKKwkJfQorCQlwcmludGYoImluY29taW5nICIpOworCX0KKwlpZiAoc3RycnN0LT5z
dHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HX1NTTikgeworCQlwcmlu
dGYoIm91dGdvaW5nICIpOworCX0KKwlwcmludGYoInN0cmVhbSBpZHMgPSAiKTsKKwlmb3IgKGkg
PSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChpID4gMCkgeworCQkJcHJpbnRmKCIsICIpOworCQl9
CisJCXByaW50ZigiJWQiLCBzdHJyc3QtPnN0cnJlc2V0X3N0cmVhbV9saXN0W2ldKTsKKwl9CisJ
cHJpbnRmKCIuXG4iKTsKKwlpZiAoIShzdHJyc3QtPnN0cnJlc2V0X2ZsYWdzICYgU0NUUF9TVFJF
QU1fUkVTRVRfREVOSUVEKSAmJgorCSAgICAhKHN0cnJzdC0+c3RycmVzZXRfZmxhZ3MgJiBTQ1RQ
X1NUUkVBTV9SRVNFVF9GQUlMRUQpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJ
CWlmIChzdHJyc3QtPnN0cnJlc2V0X2ZsYWdzICYgU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkdf
U1NOKSB7CisJCQkJY2hhbm5lbCA9IGZpbmRfY2hhbm5lbF9ieV9pX3N0cmVhbShwYywgc3RycnN0
LT5zdHJyZXNldF9zdHJlYW1fbGlzdFtpXSk7CisJCQkJaWYgKGNoYW5uZWwgIT0gTlVMTCkgewor
CQkJCQlwYy0+aV9zdHJlYW1fY2hhbm5lbFtjaGFubmVsLT5pX3N0cmVhbV0gPSBOVUxMOworCQkJ
CQljaGFubmVsLT5pX3N0cmVhbSA9IDA7CisJCQkJCWlmIChjaGFubmVsLT5vX3N0cmVhbSA9PSAw
KSB7CisJCQkJCQljaGFubmVsLT5wcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfTk9ORTsKKwkJCQkJ
CWNoYW5uZWwtPnByX3ZhbHVlID0gMDsKKwkJCQkJCWNoYW5uZWwtPnVub3JkZXJlZCA9IDA7CisJ
CQkJCQljaGFubmVsLT5mbGFncyA9IDA7CisJCQkJCQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hB
Tk5FTF9DTE9TRUQ7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlpZiAoY2hhbm5lbC0+c3RhdGUgPT0g
REFUQV9DSEFOTkVMX09QRU4pIHsKKwkJCQkJCQlyZXNldF9vdXRnb2luZ19zdHJlYW0ocGMsIGNo
YW5uZWwtPm9fc3RyZWFtKTsKKwkJCQkJCQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9D
TE9TSU5HOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvKiBYWFg6IFdoYXQgdG8gZG8/ICovCisJ
CQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlpZiAoc3RycnN0LT5zdHJyZXNldF9mbGFn
cyAmIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HX1NTTikgeworCQkJCWNoYW5uZWwgPSBmaW5k
X2NoYW5uZWxfYnlfb19zdHJlYW0ocGMsIHN0cnJzdC0+c3RycmVzZXRfc3RyZWFtX2xpc3RbaV0p
OworCQkJCWlmIChjaGFubmVsICE9IE5VTEwpIHsKKwkJCQkJcGMtPm9fc3RyZWFtX2NoYW5uZWxb
Y2hhbm5lbC0+b19zdHJlYW1dID0gTlVMTDsKKwkJCQkJY2hhbm5lbC0+b19zdHJlYW0gPSAwOwor
CQkJCQlpZiAoY2hhbm5lbC0+aV9zdHJlYW0gPT0gMCkgeworCQkJCQkJY2hhbm5lbC0+cHJfcG9s
aWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7CisJCQkJCQljaGFubmVsLT5wcl92YWx1ZSA9IDA7CisJ
CQkJCQljaGFubmVsLT51bm9yZGVyZWQgPSAwOworCQkJCQkJY2hhbm5lbC0+ZmxhZ3MgPSAwOwor
CQkJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfQ0xPU0VEOworCQkJCQl9CisJCQkJ
fQorCQkJfQorCQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9zdHJl
YW1fY2hhbmdlX2V2ZW50KHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLCBzdHJ1Y3Qgc2N0cF9z
dHJlYW1fY2hhbmdlX2V2ZW50ICpzdHJjaGcpCit7CisJdWludDE2X3Qgb19zdHJlYW07CisJdWlu
dDMyX3QgaTsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKworCXByaW50ZigiU3RyZWFtIGNo
YW5nZSBldmVudDogc3RyZWFtcyAoaW4vb3V0KSA9ICgldS8ldSksIGZsYWdzID0gJXguXG4iLAor
CSAgICAgICBzdHJjaGctPnN0cmNoYW5nZV9pbnN0cm1zLCBzdHJjaGctPnN0cmNoYW5nZV9vdXRz
dHJtcywgc3RyY2hnLT5zdHJjaGFuZ2VfZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJf
T0ZfQ0hBTk5FTFM7IGkrKykgeworCQljaGFubmVsID0gJihwYy0+Y2hhbm5lbHNbaV0pOworCQlp
ZiAoKGNoYW5uZWwtPnN0YXRlID09IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HKSAmJgorCQkgICAg
KGNoYW5uZWwtPm9fc3RyZWFtID09IDApKSB7CisJCQlpZiAoKHN0cmNoZy0+c3RyY2hhbmdlX2Zs
YWdzICYgU0NUUF9TVFJFQU1fQ0hBTkdFX0RFTklFRCkgfHwKKwkJCSAgICAoc3RyY2hnLT5zdHJj
aGFuZ2VfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9DSEFOR0VfRkFJTEVEKSkgeworCQkJCS8qIFhYWDog
U2lnbmFsIHRvIHRoZSBvdGhlciBlbmQuICovCisJCQkJaWYgKGNoYW5uZWwtPmlfc3RyZWFtICE9
IDApIHsKKwkJCQkJcGMtPmlfc3RyZWFtX2NoYW5uZWxbY2hhbm5lbC0+aV9zdHJlYW1dID0gTlVM
TDsKKwkJCQl9CisJCQkJY2hhbm5lbC0+dW5vcmRlcmVkID0gMDsKKwkJCQljaGFubmVsLT5wcl9w
b2xpY3kgPSBTQ1RQX1BSX1NDVFBfTk9ORTsKKwkJCQljaGFubmVsLT5wcl92YWx1ZSA9IDA7CisJ
CQkJY2hhbm5lbC0+aV9zdHJlYW0gPSAwOworCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0gMDsKKwkJ
CQljaGFubmVsLT5mbGFncyA9IDA7CisJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxf
Q0xPU0VEOworCQkJfSBlbHNlIHsKKwkJCQlvX3N0cmVhbSA9IGZpbmRfZnJlZV9vX3N0cmVhbShw
Yyk7CisJCQkJaWYgKG9fc3RyZWFtICE9IDApIHsKKwkJCQkJY2hhbm5lbC0+b19zdHJlYW0gPSBv
X3N0cmVhbTsKKwkJCQkJcGMtPm9fc3RyZWFtX2NoYW5uZWxbb19zdHJlYW1dID0gY2hhbm5lbDsK
KwkJCQkJaWYgKGNoYW5uZWwtPmlfc3RyZWFtID09IDApIHsKKwkJCQkJCWNoYW5uZWwtPmZsYWdz
IHw9IERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JFUTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNo
YW5uZWwtPmZsYWdzIHw9IERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JTUDsKKwkJCQkJfQorCQkJ
CX0gZWxzZSB7CisJCQkJCS8qIFdlIHdpbGwgbm90IGZpbmQgbW9yZSAuLi4gKi8KKwkJCQkJYnJl
YWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hh
bmRsZV9yZW1vdGVfZXJyb3JfZXZlbnQoc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9yICpzcmUpCit7
CisJc2l6ZV90IGksIG47CisKKwluID0gc3JlLT5zcmVfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX3JlbW90ZV9lcnJvcik7CisJcHJpbnRmKCJSZW1vdGUgRXJyb3IgKGVycm9yID0gMHglMDR4
KTogIiwgc3JlLT5zcmVfZXJyb3IpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJcHJp
bnRmKCIgMHglMDJ4Iiwgc3JlLT4gc3JlX2RhdGFbaV0pOworCX0KKwlwcmludGYoIi5cbiIpOwor
CXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9zZW5kX2ZhaWxlZF9ldmVudChzdHJ1
Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCAqc3NmZSkKK3sKKwlzaXplX3QgaSwgbjsKKworCWlm
IChzc2ZlLT5zc2ZlX2ZsYWdzICYgU0NUUF9EQVRBX1VOU0VOVCkgeworCQlwcmludGYoIlVuc2Vu
dCAiKTsKKwl9CisJaWYgKHNzZmUtPnNzZmVfZmxhZ3MgJiBTQ1RQX0RBVEFfU0VOVCkgeworCQlw
cmludGYoIlNlbnQgIik7CisJfQorCWlmIChzc2ZlLT5zc2ZlX2ZsYWdzICYgfihTQ1RQX0RBVEFf
U0VOVCB8IFNDVFBfREFUQV9VTlNFTlQpKSB7CisJCXByaW50ZigiKGZsYWdzID0gJXgpICIsIHNz
ZmUtPnNzZmVfZmxhZ3MpOworCX0KKwlwcmludGYoIm1lc3NhZ2Ugd2l0aCBQUElEID0gJXUsIFNJ
RCA9ICV1LCBmbGFnczogMHglMDR4IGR1ZSB0byBlcnJvciA9IDB4JTA4eCIsCisJICAgICAgICh1
aW50MzJfdCludG9obChzc2ZlLT5zc2ZlX2luZm8uc25kX3BwaWQpLCBzc2ZlLT5zc2ZlX2luZm8u
c25kX3NpZCwKKwkgICAgICAgc3NmZS0+c3NmZV9pbmZvLnNuZF9mbGFncywgc3NmZS0+c3NmZV9l
cnJvcik7CisJbiA9IHNzZmUtPnNzZmVfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRf
ZmFpbGVkX2V2ZW50KTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXByaW50ZigiIDB4
JTAyeCIsIHNzZmUtPnNzZmVfZGF0YVtpXSk7CisJfQorCXByaW50ZigiLlxuIik7CisJcmV0dXJu
OworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX25vdGlmaWNhdGlvbl9ydGN3ZWIoc3RydWN0IHBl
ZXJfY29ubmVjdGlvbiAqcGMsIHVuaW9uIHNjdHBfbm90aWZpY2F0aW9uICpub3RpZiwgc2l6ZV90
IG4pCit7CisJaWYgKG5vdGlmLT5zbl9oZWFkZXIuc25fbGVuZ3RoICE9ICh1aW50MzJfdCluKSB7
CisJCXJldHVybjsKKwl9CisJc3dpdGNoIChub3RpZi0+c25faGVhZGVyLnNuX3R5cGUpIHsKKwlj
YXNlIFNDVFBfQVNTT0NfQ0hBTkdFOgorCQloYW5kbGVfYXNzb2NpYXRpb25fY2hhbmdlX2V2ZW50
KCYobm90aWYtPnNuX2Fzc29jX2NoYW5nZSkpOworCQlicmVhazsKKwljYXNlIFNDVFBfUEVFUl9B
RERSX0NIQU5HRToKKwkJaGFuZGxlX3BlZXJfYWRkcmVzc19jaGFuZ2VfZXZlbnQoJihub3RpZi0+
c25fcGFkZHJfY2hhbmdlKSk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9SRU1PVEVfRVJST1I6CisJ
CWhhbmRsZV9yZW1vdGVfZXJyb3JfZXZlbnQoJihub3RpZi0+c25fcmVtb3RlX2Vycm9yKSk7CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9TSFVURE9XTl9FVkVOVDoKKwkJaGFuZGxlX3NodXRkb3duX2V2
ZW50KCYobm90aWYtPnNuX3NodXRkb3duX2V2ZW50KSk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9B
REFQVEFUSU9OX0lORElDQVRJT046CisJCWhhbmRsZV9hZGFwdGF0aW9uX2luZGljYXRpb24oJihu
b3RpZi0+c25fYWRhcHRhdGlvbl9ldmVudCkpOworCQlicmVhazsKKwljYXNlIFNDVFBfUEFSVElB
TF9ERUxJVkVSWV9FVkVOVDoKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VW
RU5UOgorCQlicmVhazsKKwljYXNlIFNDVFBfU0VOREVSX0RSWV9FVkVOVDoKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX05PVElGSUNBVElPTlNfU1RPUFBFRF9FVkVOVDoKKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX1NFTkRfRkFJTEVEX0VWRU5UOgorCQloYW5kbGVfc2VuZF9mYWlsZWRfZXZlbnQoJihub3Rp
Zi0+c25fc2VuZF9mYWlsZWRfZXZlbnQpKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NUUkVBTV9S
RVNFVF9FVkVOVDoKKwkJaGFuZGxlX3N0cmVhbV9yZXNldF9ldmVudChwYywgJihub3RpZi0+c25f
c3RycmVzZXRfZXZlbnQpKTsKKwkJc2VuZF9kZWZlcnJlZF9tZXNzYWdlcyhwYyk7CisJCXNlbmRf
b3V0Z29pbmdfc3RyZWFtX3Jlc2V0KHBjKTsKKwkJcmVxdWVzdF9tb3JlX29fc3RyZWFtcyhwYyk7
CisJCWJyZWFrOworCWNhc2UgU0NUUF9BU1NPQ19SRVNFVF9FVkVOVDoKKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX1NUUkVBTV9DSEFOR0VfRVZFTlQ6CisJCWhhbmRsZV9zdHJlYW1fY2hhbmdlX2V2ZW50
KHBjLCAmKG5vdGlmLT5zbl9zdHJjaGFuZ2VfZXZlbnQpKTsKKwkJc2VuZF9kZWZlcnJlZF9tZXNz
YWdlcyhwYyk7CisJCXNlbmRfb3V0Z29pbmdfc3RyZWFtX3Jlc2V0KHBjKTsKKwkJcmVxdWVzdF9t
b3JlX29fc3RyZWFtcyhwYyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30K
Kworc3RhdGljIHZvaWQKK3ByaW50X3N0YXR1cyhzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykK
K3sKKwlzdHJ1Y3Qgc2N0cF9zdGF0dXMgc3RhdHVzOworCXNvY2tsZW5fdCBsZW47CisJdWludDMy
X3QgaTsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKworCWxlbiA9IChzb2NrbGVuX3Qpc2l6
ZW9mKHN0cnVjdCBzY3RwX3N0YXR1cyk7CisJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChwYy0+c29j
aywgSVBQUk9UT19TQ1RQLCBTQ1RQX1NUQVRVUywgJnN0YXR1cywgJmxlbikgPCAwKSB7CisJCXBl
cnJvcigiZ2V0c29ja29wdCIpOworCQlyZXR1cm47CisJfQorCXByaW50ZigiQXNzb2NpYXRpb24g
c3RhdGU6ICIpOworCXN3aXRjaCAoc3RhdHVzLnNzdGF0X3N0YXRlKSB7CisJY2FzZSBTQ1RQX0NM
T1NFRDoKKwkJcHJpbnRmKCJDTE9TRURcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQk9VTkQ6
CisJCXByaW50ZigiQk9VTkRcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfTElTVEVOOgorCQlw
cmludGYoIkxJU1RFTlxuIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9DT09LSUVfV0FJVDoKKwkJ
cHJpbnRmKCJDT09LSUVfV0FJVFxuIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9DT09LSUVfRUNI
T0VEOgorCQlwcmludGYoIkNPT0tJRV9FQ0hPRURcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBf
RVNUQUJMSVNIRUQ6CisJCXByaW50ZigiRVNUQUJMSVNIRURcbiIpOworCQlicmVhazsKKwljYXNl
IFNDVFBfU0hVVERPV05fUEVORElORzoKKwkJcHJpbnRmKCJTSFVURE9XTl9QRU5ESU5HXG4iKTsK
KwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NIVVRET1dOX1NFTlQ6CisJCXByaW50ZigiU0hVVERPV05f
U0VOVFxuIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9TSFVURE9XTl9SRUNFSVZFRDoKKwkJcHJp
bnRmKCJTSFVURE9XTl9SRUNFSVZFRFxuIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9TSFVURE9X
Tl9BQ0tfU0VOVDoKKwkJcHJpbnRmKCJTSFVURE9XTl9BQ0tfU0VOVFxuIik7CisJCWJyZWFrOwor
CWRlZmF1bHQ6CisJCXByaW50ZigiVU5LTk9XTlxuIik7CisJCWJyZWFrOworCX0KKwlwcmludGYo
Ik51bWJlciBvZiBzdHJlYW1zIChpL28pID0gKCV1LyV1KVxuIiwKKwkgICAgICAgc3RhdHVzLnNz
dGF0X2luc3RybXMsIHN0YXR1cy5zc3RhdF9vdXRzdHJtcyk7CisJZm9yIChpID0gMDsgaSA8IE5V
TUJFUl9PRl9DSEFOTkVMUzsgaSsrKSB7CisJCWNoYW5uZWwgPSAmKHBjLT5jaGFubmVsc1tpXSk7
CisJCWlmIChjaGFubmVsLT5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxfQ0xPU0VEKSB7CisJCQljb250
aW51ZTsKKwkJfQorCQlwcmludGYoIkNoYW5uZWwgd2l0aCBpZCA9ICV1OiBzdGF0ZSAiLCBjaGFu
bmVsLT5pZCk7CisJCXN3aXRjaCAoY2hhbm5lbC0+c3RhdGUpIHsKKwkJY2FzZSBEQVRBX0NIQU5O
RUxfQ0xPU0VEOgorCQkJcHJpbnRmKCJDTE9TRUQiKTsKKwkJCWJyZWFrOworCQljYXNlIERBVEFf
Q0hBTk5FTF9DT05ORUNUSU5HOgorCQkJcHJpbnRmKCJDT05ORUNUSU5HIik7CisJCQlicmVhazsK
KwkJY2FzZSBEQVRBX0NIQU5ORUxfT1BFTjoKKwkJCXByaW50ZigiT1BFTiIpOworCQkJYnJlYWs7
CisJCWNhc2UgREFUQV9DSEFOTkVMX0NMT1NJTkc6CisJCQlwcmludGYoIkNMT1NJTkciKTsKKwkJ
CWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRmKCJVTktOT1dOKCVkKSIsIGNoYW5uZWwtPnN0
YXRlKTsKKwkJCWJyZWFrOworCQl9CisJCXByaW50ZigiLCBmbGFncyA9IDB4JTA4eCwgc3RyZWFt
IGlkIChpbi9vdXQpOiAoJXUvJXUpLCAiLAorCQkgICAgICAgY2hhbm5lbC0+ZmxhZ3MsCisJCSAg
ICAgICBjaGFubmVsLT5pX3N0cmVhbSwKKwkJICAgICAgIGNoYW5uZWwtPm9fc3RyZWFtKTsKKwkJ
aWYgKGNoYW5uZWwtPnVub3JkZXJlZCkgeworCQkJcHJpbnRmKCJ1bm9yZGVyZWQsICIpOworCQl9
IGVsc2UgeworCQkJcHJpbnRmKCJvcmRlcmVkLCAiKTsKKwkJfQorCQlzd2l0Y2ggKGNoYW5uZWwt
PnByX3BvbGljeSkgeworCQljYXNlIFNDVFBfUFJfU0NUUF9OT05FOgorCQkJcHJpbnRmKCJyZWxp
YWJsZS5cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9QUl9TQ1RQX1RUTDoKKwkJCXByaW50
ZigidW5yZWxpYWJsZSAodGltZW91dCAldW1zKS5cbiIsIGNoYW5uZWwtPnByX3ZhbHVlKTsKKwkJ
CWJyZWFrOworCQljYXNlIFNDVFBfUFJfU0NUUF9SVFg6CisJCQlwcmludGYoInVucmVsaWFibGUg
KG1heC4gJXUgcnR4KS5cbiIsIGNoYW5uZWwtPnByX3ZhbHVlKTsKKwkJCWJyZWFrOworCQlkZWZh
dWx0OgorCQkJcHJpbnRmKCJ1bmtub3duIHBvbGljeSAldS5cbiIsIGNoYW5uZWwtPnByX3BvbGlj
eSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIGludAorcmVjZWl2ZV9jYihzdHJ1
Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAor
ICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBm
bGFncywgdm9pZCAqdWxwX2luZm8pCit7CisJc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGM7CisK
KwlwYyA9IChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICopdWxwX2luZm87CisKKwlpZiAoZGF0YSkg
eworCQlsb2NrX3BlZXJfY29ubmVjdGlvbihwYyk7CisJCWlmIChmbGFncyAmIE1TR19OT1RJRklD
QVRJT04pIHsKKwkJCWhhbmRsZV9ub3RpZmljYXRpb25fcnRjd2ViKHBjLCAodW5pb24gc2N0cF9u
b3RpZmljYXRpb24gKilkYXRhLCBkYXRhbGVuKTsKKwkJfSBlbHNlIHsKKwkJCWhhbmRsZV9tZXNz
YWdlKHBjLCBkYXRhLCBkYXRhbGVuLCBudG9obChyY3YucmN2X3BwaWQpLCByY3YucmN2X3NpZCk7
CisJCX0KKwkJdW5sb2NrX3BlZXJfY29ubmVjdGlvbihwYyk7CisJfQorCXJldHVybiAoMSk7Cit9
CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrZXQg
KnNvY2s7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJc29ja2xlbl90IGFkZHJfbGVuOwor
CWNoYXIgbGluZVtMSU5FX0xFTkdUSCArIDFdOworCXVuc2lnbmVkIGludCB1bm9yZGVyZWQsIHBv
bGljeSwgdmFsdWUsIGlkLCBzZWNvbmRzOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBjaGFu
bmVsICpjaGFubmVsOworCWNvbnN0IGludCBvbiA9IDE7CisJc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUgYXY7CisJc3RydWN0IHNjdHBfZXZlbnQgZXZlbnQ7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBz
IGVuY2FwczsKKwlzdHJ1Y3Qgc2N0cF9pbml0bXNnIGluaXRtc2c7CisJdWludDE2X3QgZXZlbnRf
dHlwZXNbXSA9IHtTQ1RQX0FTU09DX0NIQU5HRSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfUEVFUl9BRERSX0NIQU5HRSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBf
UkVNT1RFX0VSUk9SLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TSFVURE9XTl9F
VkVOVCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQURBUFRBVElPTl9JTkRJQ0FU
SU9OLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVCwK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU1RSRUFNX1JFU0VUX0VWRU5ULAorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UfTsKKwljaGFy
IGFkZHJidWZbSU5FVF9BRERSU1RSTEVOXTsKKworCWlmIChhcmdjID4gMSkgeworCQl1c3JzY3Rw
X2luaXQoYXRvaShhcmd2WzFdKSwgTlVMTCwgZGVidWdfcHJpbnRmX3N0YWNrKTsKKwl9IGVsc2Ug
eworCQl1c3JzY3RwX2luaXQoOTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmX3N0YWNrKTsKKwl9Cisj
aWZkZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBf
REVCVUdfTk9ORSk7CisjZW5kaWYKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUo
Mik7CisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbm9fY3N1bV9vbl9sb29wYmFjaygwKTsKKwor
CWlmICgoc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RP
X1NDVFAsIHJlY2VpdmVfY2IsIE5VTEwsIDAsICZwZWVyX2Nvbm5lY3Rpb24pKSA9PSBOVUxMKSB7
CisJCXBlcnJvcigic29ja2V0Iik7CisJfQorCWluaXRfcGVlcl9jb25uZWN0aW9uKCZwZWVyX2Nv
bm5lY3Rpb24pOworCWlmIChhcmdjID4gMikgeworCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9m
KHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpOworCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5
ID0gQUZfSU5FVDY7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwor
CQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVf
VURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCopJmVuY2FwcywgKHNvY2tsZW5fdClzaXplb2Yo
c3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7CisJCQlwZXJyb3IoInNldHNvY2tvcHQiKTsK
KwkJfQorCX0KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NU
UF9SRUNWUkNWSU5GTywgJm9uLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCXBlcnJvcigic2V0c29j
a29wdCBTQ1RQX1JFQ1ZSQ1ZJTkZPIik7CisJfQorCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29j
aywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VYUExJQ0lUX0VPUiwgJm9uLCBzaXplb2YoaW50KSkgPCAw
KSB7CisJCXBlcnJvcigic2V0c29ja29wdCBTQ1RQX0VYUExJQ0lUX0VPUiIpOworCX0KKwkvKiBB
bGxvdyByZXNldHRpbmcgc3RyZWFtcy4gKi8KKwlhdi5hc3NvY19pZCA9IFNDVFBfQUxMX0FTU09D
OworCWF2LmFzc29jX3ZhbHVlID0gU0NUUF9FTkFCTEVfUkVTRVRfU1RSRUFNX1JFUSB8IFNDVFBf
RU5BQkxFX0NIQU5HRV9BU1NPQ19SRVE7CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJ
UFBST1RPX1NDVFAsIFNDVFBfRU5BQkxFX1NUUkVBTV9SRVNFVCwgJmF2LCBzaXplb2Yoc3RydWN0
IHNjdHBfYXNzb2NfdmFsdWUpKSA8IDApIHsKKwkJcGVycm9yKCJzZXRzb2Nrb3B0IFNDVFBfRU5B
QkxFX1NUUkVBTV9SRVNFVCIpOworCX0KKwkvKiBFbmFibGUgdGhlIGV2ZW50cyBvZiBpbnRlcmVz
dC4gKi8KKwltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YoZXZlbnQpKTsKKwlldmVudC5zZV9hc3Nv
Y19pZCA9IFNDVFBfQUxMX0FTU09DOworCWV2ZW50LnNlX29uID0gMTsKKwlmb3IgKGkgPSAwOyBp
IDwgc2l6ZW9mKGV2ZW50X3R5cGVzKS9zaXplb2YodWludDE2X3QpOyBpKyspIHsKKwkJZXZlbnQu
c2VfdHlwZSA9IGV2ZW50X3R5cGVzW2ldOworCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ss
IElQUFJPVE9fU0NUUCwgU0NUUF9FVkVOVCwgJmV2ZW50LCBzaXplb2YoZXZlbnQpKSA8IDApIHsK
KwkJCXBlcnJvcigic2V0c29ja29wdCBTQ1RQX0VWRU5UIik7CisJCX0KKwl9CisJbWVtc2V0KCZp
bml0bXNnLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdG1zZykpOworCWluaXRtc2cuc2luaXRf
bnVtX29zdHJlYW1zID0gNTsKKwlpbml0bXNnLnNpbml0X21heF9pbnN0cmVhbXMgPSA2NTUzNTsK
KwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9JTklUTVNH
LCAmaW5pdG1zZywgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRtc2cpKSA8IDApIHsKKwkJcGVycm9y
KCJzZXRzb2Nrb3B0IFNDVFBfSU5JVE1TRyIpOworCX0KKworCWlmIChhcmdjID09IDUpIHsKKwkJ
Lyogb3BlcmF0aW5nIGFzIGNsaWVudCAqLworCQltZW1zZXQoJmFkZHIsIDAsIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKTsKKwkJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBI
QVZFX1NJTl9MRU4KKwkJYWRkci5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisjZW5kaWYKKwkJaWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndlszXSwgJmFkZHIuc2luX2Fk
ZHIuc19hZGRyKSl7CisJCQlwcmludGYoImVycm9yOiBpbnZhbGlkIGFkZHJlc3NcbiIpOworCQkJ
ZXhpdCgxKTsKKwkJfQorCQlhZGRyLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzRdKSk7CisJ
CWlmICh1c3JzY3RwX2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCQlwZXJyb3IoImNvbm5lY3QiKTsKKwkJ
fQorCisJCXByaW50ZigiQ29ubmVjdGVkIHRvICVzOiVkLlxuIiwgaW5ldF9udG9wKEFGX0lORVQs
ICYoYWRkci5zaW5fYWRkciksIGFkZHJidWYsIElORVRfQUREUlNUUkxFTiksIG50b2hzKGFkZHIu
c2luX3BvcnQpKTsKKwl9IGVsc2UgaWYgKGFyZ2MgPT0gNCkgeworCQlzdHJ1Y3Qgc29ja2V0ICpj
b25uX3NvY2s7CisKKwkJLyogb3BlcmF0aW5nIGFzIHNlcnZlciAqLworCQltZW1zZXQoJmFkZHIs
IDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJYWRkci5zaW5fZmFtaWx5ID0gQUZf
SU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJYWRkci5zaW5fbGVuID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJf
QU5ZOworCQlhZGRyLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzNdKSk7CisJCWlmICh1c3Jz
Y3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKSkgPCAwKSB7CisJCQlwZXJyb3IoImJpbmQiKTsKKwkJfQorCQlpZiAodXNyc2N0
cF9saXN0ZW4oc29jaywgMSkgPCAwKSB7CisJCQlwZXJyb3IoImxpc3RlbiIpOworCQl9CisJCWFk
ZHJfbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJbWVtc2V0
KCZhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCWlmICgoY29ubl9zb2Nr
ID0gdXNyc2N0cF9hY2NlcHQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCAmYWRkcl9s
ZW4pKSA9PSBOVUxMKSB7CisJCQlwZXJyb3IoImFjY2VwdCIpOworCQl9CisJCXVzcnNjdHBfY2xv
c2Uoc29jayk7CisJCXNvY2sgPSBjb25uX3NvY2s7CisJCXByaW50ZigiQ29ubmVjdGVkIHRvICVz
OiVkLlxuIiwgaW5ldF9udG9wKEFGX0lORVQsICYoYWRkci5zaW5fYWRkciksIGFkZHJidWYsIElO
RVRfQUREUlNUUkxFTiksIG50b2hzKGFkZHIuc2luX3BvcnQpKTsKKwl9IGVsc2UgeworCQlwcmlu
dGYoIlVzYWdlOiAlcyBsb2NhbF91ZHBfcG9ydCByZW1vdGVfdWRwX3BvcnQgbG9jYWxfcG9ydCB3
aGVuIG9wZXJhdGluZyBhcyBzZXJ2ZXJcbiIKKwkJICAgICAgICIgICAgICAgJXMgbG9jYWxfdWRw
X3BvcnQgcmVtb3RlX3VkcF9wb3J0IHJlbW90ZV9hZGRyIHJlbW90ZV9wb3J0IHdoZW4gb3BlcmF0
aW5nIGFzIGNsaWVudFxuIiwKKwkJICAgICAgIGFyZ3ZbMF0sIGFyZ3ZbMF0pOworCQlyZXR1cm4g
KDApOworCX0KKworCWxvY2tfcGVlcl9jb25uZWN0aW9uKCZwZWVyX2Nvbm5lY3Rpb24pOworCXBl
ZXJfY29ubmVjdGlvbi5zb2NrID0gc29jazsKKwl1bmxvY2tfcGVlcl9jb25uZWN0aW9uKCZwZWVy
X2Nvbm5lY3Rpb24pOworCisJZm9yICg7OykgeworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVm
aW5lZChfX01JTkdXMzJfXykKKwkJaWYgKGdldHNfcyhsaW5lLCBMSU5FX0xFTkdUSCkgPT0gTlVM
TCkgeworI2Vsc2UKKwkJaWYgKGZnZXRzKGxpbmUsIExJTkVfTEVOR1RILCBzdGRpbikgPT0gTlVM
TCkgeworI2VuZGlmCisJCQlpZiAodXNyc2N0cF9zaHV0ZG93bihzb2NrLCBTSFVUX1dSKSA8IDAp
IHsKKwkJCQlwZXJyb3IoInVzcnNjdHBfc2h1dGRvd24iKTsKKwkJCX0KKwkJCXdoaWxlICh1c3Jz
Y3RwX2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJCQlTbGVlcCgxMDAwKTsKKyNl
bHNlCisJCQkJc2xlZXAoMSk7CisjZW5kaWYKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWlmIChz
dHJuY21wKGxpbmUsICI/Iiwgc3RybGVuKCI/IikpID09IDAgfHwKKwkJICAgIHN0cm5jbXAobGlu
ZSwgImhlbHAiLCBzdHJsZW4oImhlbHAiKSkgPT0gMCkgeworCQkJcHJpbnRmKCJDb21tYW5kczpc
biIKKwkJCSAgICAgICAib3BlbiB1bm9yZGVyZWQgcHJfcG9saWN5IHByX3ZhbHVlIC0gb3BlbnMg
YSBjaGFubmVsXG4iCisJCQkgICAgICAgImNsb3NlIGNoYW5uZWwgLSBjbG9zZXMgdGhlIGNoYW5u
ZWxcbiIKKwkJCSAgICAgICAic2VuZCBjaGFubmVsOnN0cmluZyAtIHNlbmRzIHN0cmluZyB1c2lu
ZyBjaGFubmVsXG4iCisJCQkgICAgICAgInN0YXR1cyAtIHByaW50cyB0aGUgc3RhdHVzXG4iCisJ
CQkgICAgICAgInNsZWVwIG4gLSBzbGVlcCBmb3IgbiBzZWNvbmRzXG4iCisJCQkgICAgICAgImhl
bHAgLSB0aGlzIG1lc3NhZ2VcbiIpOworCQl9IGVsc2UgaWYgKHN0cm5jbXAobGluZSwgInN0YXR1
cyIsIHN0cmxlbigic3RhdHVzIikpID09IDApIHsKKwkJCWxvY2tfcGVlcl9jb25uZWN0aW9uKCZw
ZWVyX2Nvbm5lY3Rpb24pOworCQkJcHJpbnRfc3RhdHVzKCZwZWVyX2Nvbm5lY3Rpb24pOworCQkJ
dW5sb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKwkJfSBlbHNlIGlmIChz
dHJuY21wKGxpbmUsICJxdWl0Iiwgc3RybGVuKCJxdWl0IikpID09IDApIHsKKwkJCWlmICh1c3Jz
Y3RwX3NodXRkb3duKHNvY2ssIFNIVVRfV1IpIDwgMCkgeworCQkJCXBlcnJvcigidXNyc2N0cF9z
aHV0ZG93biIpOworCQkJfQorCQkJd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lm
ZGVmIF9XSU4zMgorCQkJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJCQlzbGVlcCgxKTsKKyNlbmRp
ZgorCQkJfQorCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoc3NjYW5mKGxpbmUsICJvcGVuICV1ICV1
ICV1IiwgJnVub3JkZXJlZCwgJnBvbGljeSwgJnZhbHVlKSA9PSAzKSB7CisJCQlsb2NrX3BlZXJf
Y29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKwkJCWNoYW5uZWwgPSBvcGVuX2NoYW5uZWwo
JnBlZXJfY29ubmVjdGlvbiwgKHVpbnQ4X3QpdW5vcmRlcmVkLCAodWludDE2X3QpcG9saWN5LCAo
dWludDMyX3QpdmFsdWUpOworCQkJdW5sb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0
aW9uKTsKKwkJCWlmIChjaGFubmVsID09IE5VTEwpIHsKKwkJCQlwcmludGYoIkNyZWF0aW5nIGNo
YW5uZWwgZmFpbGVkLlxuIik7CisJCQl9IGVsc2UgeworCQkJCXByaW50ZigiQ2hhbm5lbCB3aXRo
IGlkICV1IGNyZWF0ZWQuXG4iLCBjaGFubmVsLT5pZCk7CisJCQl9CisJCX0gZWxzZSBpZiAoc3Nj
YW5mKGxpbmUsICJjbG9zZSAldSIsICZpZCkgPT0gMSkgeworCQkJaWYgKGlkIDwgTlVNQkVSX09G
X0NIQU5ORUxTKSB7CisJCQkJbG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7
CisJCQkJY2xvc2VfY2hhbm5lbCgmcGVlcl9jb25uZWN0aW9uLCAmcGVlcl9jb25uZWN0aW9uLmNo
YW5uZWxzW2lkXSk7CisJCQkJdW5sb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9u
KTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzc2NhbmYobGluZSwgInNlbmQgJXUiLCAmaWQpID09IDEp
IHsKKwkJCWlmIChpZCA8IE5VTUJFUl9PRl9DSEFOTkVMUykgeworCQkJCWNoYXIgKm1zZzsKKwor
CQkJCW1zZyA9IHN0cnN0cihsaW5lLCAiOiIpOworCQkJCWlmIChtc2cpIHsKKwkJCQkJbXNnKys7
CisJCQkJCWxvY2tfcGVlcl9jb25uZWN0aW9uKCZwZWVyX2Nvbm5lY3Rpb24pOworI2lmZGVmIF9X
SU4zMgorCQkJCQlpZiAoc2VuZF91c2VyX21lc3NhZ2UoJnBlZXJfY29ubmVjdGlvbiwgJnBlZXJf
Y29ubmVjdGlvbi5jaGFubmVsc1tpZF0sIG1zZywgc3RybGVuKG1zZykpKSB7CisjZWxzZQorCQkJ
CQlpZiAoc2VuZF91c2VyX21lc3NhZ2UoJnBlZXJfY29ubmVjdGlvbiwgJnBlZXJfY29ubmVjdGlv
bi5jaGFubmVsc1tpZF0sIG1zZywgc3RybGVuKG1zZykgLSAxKSkgeworI2VuZGlmCisJCQkJCQlw
cmludGYoIk1lc3NhZ2Ugc2VudC5cbiIpOworCQkJCQl9IGVsc2UgeworCQkJCQkJcHJpbnRmKCJN
ZXNzYWdlIHNlbmRpbmcgZmFpbGVkLlxuIik7CisJCQkJCX0KKwkJCQkJdW5sb2NrX3BlZXJfY29u
bmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoc3Nj
YW5mKGxpbmUsICJzbGVlcCAldSIsICZzZWNvbmRzKSA9PSAxKSB7CisjaWZkZWYgX1dJTjMyCisJ
CQlTbGVlcChzZWNvbmRzICogMTAwMCk7CisjZWxzZQorCQkJc2xlZXAoc2Vjb25kcyk7CisjZW5k
aWYKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVW5rbm93biBjb21tYW5kOiAlcyIsIGxpbmUpOwor
CQl9CisJfQorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9z
dF9jbGllbnQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3N0X2NsaWVudC5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVl
ZjZkNTI3MjRiODhjZDI2ZjAyNDFlYTE4MGE1NzEzNjQyMWZlYTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9wcm9ncmFtcy9zdF9jbGllbnQuYwpAQCAtMCwwICsxLDM5MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwgVHVleGVuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxNSBDb2xpbiBDYXVnaGllCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBGZWxp
eCBXZWlucmFuaworICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5U
IFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD
SCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFVzYWdlOiBzdF9jbGllbnQgbG9jYWxfYWRkciBsb2Nh
bF9wb3J0IHJlbW90ZV9hZGRyIHJlbW90ZV9wb3J0IHJlbW90ZV9zY3RwX3BvcnQKKyAqLworCisj
aWZkZWYgX1dJTjMyCisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisjZW5kaWYKKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmbmRlZiBf
V0lOMzIKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8
ZXJybm8uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxz
ZQorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgor
I2luY2x1ZGUgPHVzcnNjdHAuaD4KKyNpbmNsdWRlICJwcm9ncmFtc19oZWxwZXIuaCIKKworI2Rl
ZmluZSBNQVhfUEFDS0VUX1NJWkUgKDE8PDE2KQorI2RlZmluZSBCVUZGRVJfU0laRSA4MAorI2Rl
ZmluZSBESVNDQVJEX1BQSUQgMzkKKyNkZWZpbmUgSFRUUF9QUElEIDYzCisKKyNkZWZpbmUgVElN
RVJfSU5URVJWQUxfTVNFQ1MgMTAKKworc3RhdGljIGludCBjb25uZWN0aW5nID0gMDsKK3N0YXRp
YyBpbnQgZmluaXNoID0gMDsKKworc3RhdGljIHVuc2lnbmVkIGludAorZ2V0X21pbGxpc2Vjb25k
c19jb3VudCh2b2lkKQoreworI2lmZGVmIF9XSU4zMgorCS8vIG9idGFpbiBudW1iZXIgb2YgbWls
bGlzZWNvbmRzIHNpbmNlIHN5c3RlbSBzdGFydGVkCisJcmV0dXJuIEdldFRpY2tDb3VudCgpOwor
I2Vsc2UKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwl1bnNpZ25lZCBpbnQgbWlsbGlzZWNvbmRzOwor
CisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7IC8qIGdldCBjdXJyZW50IHRpbWUgKi8KKwltaWxs
aXNlY29uZHMgPSB0di50dl9zZWMqMTAwMExMICsgdHYudHZfdXNlYy8xMDAwOyAvKiBjYWxjdWxh
dGUgbWlsbGlzZWNvbmRzICovCisJcmV0dXJuIChtaWxsaXNlY29uZHMpOworI2VuZGlmCit9CisK
K3N0YXRpYyB2b2lkCisjaWZkZWYgX1dJTjMyCitoYW5kbGVfZXZlbnRzKFNPQ0tFVCBzb2NrLCBz
dHJ1Y3Qgc29ja2V0KiBzLCB2b2lkKiBzY29ubl9hZGRyKQorI2Vsc2UKK2hhbmRsZV9ldmVudHMo
aW50IHNvY2ssIHN0cnVjdCBzb2NrZXQqIHMsIHZvaWQqIHNjb25uX2FkZHIpCisjZW5kaWYKK3sK
KwljaGFyICpkdW1wX2J1ZjsKKwlzc2l6ZV90IGxlbmd0aDsKKwljaGFyIGJ1ZltNQVhfUEFDS0VU
X1NJWkVdOworCisJZmRfc2V0IHJmZHM7CisJc3RydWN0IHRpbWV2YWwgdHY7CisKKwl1bnNpZ25l
ZCBuZXh0X2ZpcmVfdGltZSA9IGdldF9taWxsaXNlY29uZHNfY291bnQoKTsKKwl1bnNpZ25lZCBs
YXN0X2ZpcmVfdGltZSA9IG5leHRfZmlyZV90aW1lOworCXVuc2lnbmVkIG5vdyA9IGdldF9taWxs
aXNlY29uZHNfY291bnQoKTsKKwlpbnQgd2FpdF90aW1lOworCisJd2hpbGUgKCFmaW5pc2gpIHsK
KwkJaWYgKChpbnQpIChub3cgLSBuZXh0X2ZpcmVfdGltZSkgPiAwKSB7CisJCQl1c3JzY3RwX2hh
bmRsZV90aW1lcnMobm93IC0gbGFzdF9maXJlX3RpbWUpOworCQkJbGFzdF9maXJlX3RpbWUgPSBu
b3c7CisJCQluZXh0X2ZpcmVfdGltZSA9IG5vdyArIFRJTUVSX0lOVEVSVkFMX01TRUNTOworCQl9
CisKKwkJd2FpdF90aW1lID0gbmV4dF9maXJlX3RpbWUgLSBub3c7CisJCXR2LnR2X3NlYyA9IHdh
aXRfdGltZSAvIDEwMDA7CisJCXR2LnR2X3VzZWMgPSAod2FpdF90aW1lICUgMTAwMCkgKiAxMDAw
OworCisJCUZEX1pFUk8oJnJmZHMpOworCQlGRF9TRVQoc29jaywgJnJmZHMpOworCisjaWZkZWYg
X1dJTjMyCisJCXNlbGVjdCgwIC8qIGlnbm9yZWQgKi8sICZyZmRzLCBOVUxMLCBOVUxMLCAmdHYp
OworI2Vsc2UKKwkJc2VsZWN0KHNvY2sgKyAxLCAmcmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKKyNl
bmRpZgorCisJCWlmIChGRF9JU1NFVChzb2NrLCAmcmZkcykpIHsKKwkJCWxlbmd0aCA9IHJlY3Yo
c29jaywgYnVmLCBNQVhfUEFDS0VUX1NJWkUsIDApOworCisJCQlpZiAobGVuZ3RoID4gMCkgewor
CQkJCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmLCAoc2l6ZV90KWxlbmd0
aCwgU0NUUF9EVU1QX0lOQk9VTkQpKSAhPSBOVUxMKSB7CisJCQkJCWZwcmludGYoc3RkZXJyLCAi
JXMiLCBkdW1wX2J1Zik7CisJCQkJCXVzcnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOwor
CQkJCX0KKwkJCQl1c3JzY3RwX2Nvbm5pbnB1dChzY29ubl9hZGRyLCBidWYsIChzaXplX3QpbGVu
Z3RoLCAwKTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK29uX2Nvbm5lY3Qoc3Ry
dWN0IHNvY2tldCogcykKK3sKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87CisJY2hhciBi
dWZmZXJbQlVGRkVSX1NJWkVdOworCWludCBidWZmZXJsZW47CisKKwkvKiBtZW1zZXQoYnVmZmVy
LCAnQScsIEJVRkZFUl9TSVpFKTsgKi8KKwkvKiBidWZmZXJsZW4gPSBCVUZGRVJfU0laRTsgKi8K
KwlidWZmZXJsZW4gPSBzbnByaW50ZihidWZmZXIsIEJVRkZFUl9TSVpFLCAiR0VUIC8gSFRUUC8x
LjBcclxuVXNlci1hZ2VudDogbGlidXNyc2N0cFxyXG5Db25uZWN0aW9uOiBjbG9zZVxyXG5cclxu
Iik7CisJaWYgKGJ1ZmZlcmxlbiA8IDApIHsKKwkJcmV0dXJuOworCX0KKwlzbmRpbmZvLnNuZF9z
aWQgPSAwOworCXNuZGluZm8uc25kX2ZsYWdzID0gMDsKKwlzbmRpbmZvLnNuZF9wcGlkID0gaHRv
bmwoRElTQ0FSRF9QUElEKTsKKwlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKKwlzbmRpbmZvLnNu
ZF9hc3NvY19pZCA9IDA7CisJaWYgKHVzcnNjdHBfc2VuZHYocywgYnVmZmVyLCBidWZmZXJsZW4s
IE5VTEwsIDAsICh2b2lkICopJnNuZGluZm8sCisJICAgICAgICAgICAgICAgICAgKHNvY2tsZW5f
dClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAw
KSB7CisJCXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOworCX0KK30KKworc3RhdGljIHZvaWQKK29u
X3NvY2tldF9yZWFkYWJsZShzdHJ1Y3Qgc29ja2V0KiBzKSB7CisJY2hhciBidWZmZXJbQlVGRkVS
X1NJWkVdOworCXVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHI7CisJc29ja2xlbl90IGZyb21sZW4g
PSBzaXplb2YoYWRkcik7CisJc3RydWN0IHNjdHBfcmN2aW5mbyByY3ZfaW5mbzsKKwlzb2NrbGVu
X3QgaW5mb2xlbiA9IHNpemVvZihyY3ZfaW5mbyk7CisJdW5zaWduZWQgaW50IGluZm90eXBlID0g
MDsKKwlpbnQgZmxhZ3MgPSAwOworCXNzaXplX3QgcmV0dmFsOworCisJLyogS2VlcCByZWFkaW5n
IHVudGlsIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSAqLworCWZvciAoOzspIHsKKwkJcmV0dmFsID0g
dXNyc2N0cF9yZWN2dihzLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCAoc3RydWN0IHNvY2thZGRy
KikgJmFkZHIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgJmZyb21sZW4sICZyY3ZfaW5mbywg
JmluZm9sZW4sICZpbmZvdHlwZSwgJmZsYWdzKTsKKworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJ
aWYgKGVycm5vICE9IEVXT1VMREJMT0NLKSB7CisJCQkJcGVycm9yKCJ1c3JzY3RwX3JlY3Z2Iik7
CisJCQkJZmluaXNoID0gMTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChyZXR2YWwg
PT0gMCkgeworCQkJcHJpbnRmKCJzb2NrZXQgd2FzIGRpc2Nvbm5lY3RlZFxuIik7CisJCQlmaW5p
c2ggPSAxOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElP
TikgeworCQkJcHJpbnRmKCJOb3RpZmljYXRpb24gb2YgbGVuZ3RoICVkIHJlY2VpdmVkLlxuIiwg
KGludClyZXR2YWwpOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVkIHJl
Y2VpdmVkIHZpYSAlcDoldSBvbiBzdHJlYW0gJWQgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJ
RCAldSwgY29udGV4dCAldS5cbiIsCisJCQkgICAgICAgKGludClyZXR2YWwsCisJCQkgICAgICAg
YWRkci5zY29ubi5zY29ubl9hZGRyLAorCQkJICAgICAgIG50b2hzKGFkZHIuc2Nvbm4uc2Nvbm5f
cG9ydCksCisJCQkgICAgICAgcmN2X2luZm8ucmN2X3NpZCwKKwkJCSAgICAgICByY3ZfaW5mby5y
Y3Zfc3NuLAorCQkJICAgICAgIHJjdl9pbmZvLnJjdl90c24sCisJCQkgICAgICAgKHVpbnQzMl90
KW50b2hsKHJjdl9pbmZvLnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3ZfaW5mby5yY3ZfY29udGV4
dCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfdXBjYWxsKHN0cnVjdCBzb2Nr
ZXQgKnMsIHZvaWQgKmFyZywgaW50IGZsYWdzKQoreworCWludCBldmVudHMgPSB1c3JzY3RwX2dl
dF9ldmVudHMocyk7CisKKwlpZiAoY29ubmVjdGluZykgeworCQlpZiAoZXZlbnRzICYgU0NUUF9F
VkVOVF9FUlJPUikgeworCQkJY29ubmVjdGluZyA9IDA7CisJCQlmaW5pc2ggPSAxOworCQl9IGVs
c2UgaWYgKGV2ZW50cyAmIFNDVFBfRVZFTlRfV1JJVEUpIHsKKwkJCWNvbm5lY3RpbmcgPSAwOwor
CQkJb25fY29ubmVjdChzKTsKKwkJfQorCisJCXJldHVybjsKKwl9CisKKwlpZiAoZXZlbnRzICYg
U0NUUF9FVkVOVF9SRUFEKSB7CisJCW9uX3NvY2tldF9yZWFkYWJsZShzKTsKKwl9Cit9CisKK3N0
YXRpYyBpbnQKK2Nvbm5fb3V0cHV0KHZvaWQgKmFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbmd0
aCwgdWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKQoreworCWNoYXIgKmR1bXBfYnVmOworI2lm
ZGVmIF9XSU4zMgorCVNPQ0tFVCAqZmRwOworI2Vsc2UKKwlpbnQgKmZkcDsKKyNlbmRpZgorCisj
aWZkZWYgX1dJTjMyCisJZmRwID0gKFNPQ0tFVCAqKWFkZHI7CisjZWxzZQorCWZkcCA9IChpbnQg
KilhZGRyOworI2VuZGlmCisJaWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tldChidWYs
IGxlbmd0aCwgU0NUUF9EVU1QX09VVEJPVU5EKSkgIT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVy
ciwgIiVzIiwgZHVtcF9idWYpOworCQl1c3JzY3RwX2ZyZWVkdW1wYnVmZmVyKGR1bXBfYnVmKTsK
Kwl9CisjaWZkZWYgX1dJTjMyCisJaWYgKHNlbmQoKmZkcCwgYnVmLCAoaW50KWxlbmd0aCwgMCkg
PT0gU09DS0VUX0VSUk9SKSB7CisJCXJldHVybiAoV1NBR2V0TGFzdEVycm9yKCkpOworI2Vsc2UK
KwlpZiAoc2VuZCgqZmRwLCBidWYsIGxlbmd0aCwgMCkgPCAwKSB7CisJCXJldHVybiAoZXJybm8p
OworI2VuZGlmCisJfSBlbHNlIHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKKy8qIFVzYWdlOiBz
dF9jbGllbnQgbG9jYWxfYWRkciBsb2NhbF9wb3J0IHJlbW90ZV9hZGRyIHJlbW90ZV9wb3J0IHJl
bW90ZV9zY3RwX3BvcnQgKi8KK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorewor
CXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47Cisj
aWZkZWYgX1dJTjMyCisJU09DS0VUIGZkOworI2Vsc2UKKwlpbnQgZmQ7CisjZW5kaWYKKwlzdHJ1
Y3Qgc29ja2V0ICpzOworCWludCByZXR2YWw7CisjaWZkZWYgX1dJTjMyCisJV1NBREFUQSB3c2FE
YXRhOworI2VuZGlmCisJY29uc3QgaW50IG9uID0gMTsKKworCWlmIChhcmdjIDwgNikgeworCQlw
cmludGYoIlVzYWdlOiBzdF9jbGllbnQgbG9jYWxfYWRkciBsb2NhbF9wb3J0IHJlbW90ZV9hZGRy
IHJlbW90ZV9wb3J0IHJlbW90ZV9zY3RwX3BvcnRcbiIpOworCQlyZXR1cm4gKC0xKTsKKwl9CisK
KyNpZmRlZiBfV0lOMzIKKwlpZiAoV1NBU3RhcnR1cChNQUtFV09SRCgyLDIpLCAmd3NhRGF0YSkg
IT0gMCkgeworCQlwcmludGYoIldTQVN0YXJ0dXAgZmFpbGVkXG4iKTsKKwkJZXhpdChFWElUX0ZB
SUxVUkUpOworCX0KKyNlbmRpZgorCXVzcnNjdHBfaW5pdF9ub3RocmVhZHMoMCwgY29ubl9vdXRw
dXQsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJLyogc2V0IHVwIGEgY29ubmVjdGVkIFVEUCBzb2Nr
ZXQgKi8KKyNpZmRlZiBfV0lOMzIKKwlpZiAoKGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdS
QU0sIElQUFJPVE9fVURQKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkJcHJpbnRmKCJzb2NrZXQo
KSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChF
WElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NL
X0RHUkFNLCBJUFBST1RPX1VEUCkpIDwgMCkgeworCQlwZXJyb3IoInNvY2tldCIpOworCQlleGl0
KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKTsKKwlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFW
RV9TSU5fTEVOCisJc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNl
bmRpZgorCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCWlmICghaW5ldF9w
dG9uKEFGX0lORVQsIGFyZ3ZbMV0sICZzaW4uc2luX2FkZHIuc19hZGRyKSl7CisJCXByaW50Zigi
ZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cisj
aWZkZWYgX1dJTjMyCisJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCXByaW50ZigiYmlu
ZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0
KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRk
ciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJi
aW5kIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKwltZW1zZXQoJnNpbiwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5F
VDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pOworI2VuZGlmCisJc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzRdKSk7
CisJaWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndlszXSwgJnNpbi5zaW5fYWRkci5zX2FkZHIp
KXsKKwkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBhZGRyZXNzXG4iKTsKKwkJZXhpdChFWElUX0ZB
SUxVUkUpOworCX0KKyNpZmRlZiBfV0lOMzIKKwlpZiAoY29ubmVjdChmZCwgKHN0cnVjdCBzb2Nr
YWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1Ip
IHsKKwkJcHJpbnRmKCJjb25uZWN0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRM
YXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChjb25u
ZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpIDwgMCkgeworCQlwZXJyb3IoImNvbm5lY3QiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOwor
CX0KKyNlbmRpZgorI2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9k
ZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3Nj
dHBfZWNuX2VuYWJsZSgwKTsKKwl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmQp
OworCisJaWYgKChzID0gdXNyc2N0cF9zb2NrZXQoQUZfQ09OTiwgU09DS19TVFJFQU0sIElQUFJP
VE9fU0NUUCwgTlVMTCwgTlVMTCwgMCwgTlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3Jz
Y3RwX3NvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJdXNyc2N0cF9zZXRz
b2Nrb3B0KHMsIElQUFJPVE9fU0NUUCwgU0NUUF9SRUNWUkNWSU5GTywgJm9uLCBzaXplb2YoaW50
KSk7CisJdXNyc2N0cF9zZXRfbm9uX2Jsb2NraW5nKHMsIDEpOworCXVzcnNjdHBfc2V0X3VwY2Fs
bChzLCBoYW5kbGVfdXBjYWxsLCBOVUxMKTsKKworCW1lbXNldCgmc2Nvbm4sIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NPTk47Cisj
aWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25zKDApOworCXNj
b25uLnNjb25uX2FkZHIgPSBOVUxMOworCWlmICh1c3JzY3RwX2JpbmQocywgKHN0cnVjdCBzb2Nr
YWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkgPCAwKSB7CisJCXBl
cnJvcigidXNyc2N0cF9iaW5kIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwltZW1z
ZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29u
bl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5f
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25u
X3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbNV0pKTsKKwlzY29ubi5zY29ubl9hZGRyID0gJmZkOwor
CisJcmV0dmFsID0gdXNyc2N0cF9jb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4s
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCisJaWYgKHJldHZhbCA8IDAgJiYgZXJy
bm8gIT0gRVdPVUxEQkxPQ0sgJiYgZXJybm8gIT0gRUlOUFJPR1JFU1MpIHsKKwkJcGVycm9yKCJ1
c3JzY3RwX2Nvbm5lY3QiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWNvbm5lY3Rp
bmcgPSAxOworCisJaGFuZGxlX2V2ZW50cyhmZCwgcywgc2Nvbm4uc2Nvbm5fYWRkcik7CisKKwly
ZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdGVzdF9saWJtZ210
LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9wcm9ncmFtcy90ZXN0X2xpYm1nbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZTVlMGYw
MmE4MGRmYmQ5ZDEyNDQ3NWEyNjVmYjZhZDQzODMzNGY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvcHJvZ3JhbXMvdGVzdF9saWJtZ210LmMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJ
U0NMQUlNRUQuICAgICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisg
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
CisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9XSU4z
MgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSAidXNyc2N0cC5oIgorCitp
bnQKK21haW4odm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsr
KSB7CisJCXVzcnNjdHBfaW5pdCgwLCBOVUxMLCBOVUxMKTsKKwkJd2hpbGUgKHVzcnNjdHBfZmlu
aXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQkJU2xlZXAoMTAwMCk7CisjZWxzZQorCQkJ
c2xlZXAoMSk7CisjZW5kaWYKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvcHJvZ3JhbXMvdGVzdF90aW1lci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdGVzdF90
aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjkwYTkzYzg0NWE1YTQwOTNkNjVlZjlmNzRiOTMwNmRjNzZmNzI5
ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy90ZXN0X3RpbWVyLmMKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNaWNoYWVsIFR1ZXhlbgor
ICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNU
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQ
Uk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisg
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAor
ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8
c3RkYXJnLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisj
aW5jbHVkZSA8dXNyc2N0cC5oPgorCitpbnQKK21haW4odm9pZCkgCit7CisJdW5zaWduZWQgaW50
IGk7CisKKwl1c3JzY3RwX2luaXQoMCwgTlVMTCwgTlVMTCk7CisJcHJpbnRmKCJFbnRlcmluZyB0
aGUgbG9vcFxuIik7CisJZm9yIChpID0gMDsgaSA8IDEwMDAwMDA7IGkrKykgeworCQl1c3JzY3Rw
X3JlZ2lzdGVyX2FkZHJlc3MoTlVMTCk7CisJCXVzcnNjdHBfZGVyZWdpc3Rlcl9hZGRyZXNzKE5V
TEwpOworCX0KKwlwcmludGYoIkV4aXRlZCB0aGUgbG9vcFxuIik7CisJd2hpbGUgKHVzcnNjdHBf
ZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJ
CXNsZWVwKDEpOworI2VuZGlmCisJfQorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9wcm9ncmFtcy90c2N0cC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdHNjdHAuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hOTU1ODY4M2RiMGE1OTJlMDEwNDQ3YTI4OWRhM2M0NDdiMDQyY2E3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdHNjdHAuYwpAQCAtMCwwICsxLDk1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIE1pY2hhZWwgVHVleGVuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxMyBJcmVuZSBSdWVuZ2VsZXIKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpZmRlZiBfV0lOMzIKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRj
cGlwLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3J0ZGJnLmg+CisjaW5jbHVk
ZSA8c3lzL3RpbWViLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8c3lzL3Rp
bWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYK
KyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUg
PGVycm5vLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIExJTlVYCisjaW5jbHVkZSA8Z2V0
b3B0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+CisjaW5jbHVkZSAicHJvZ3JhbXNf
aGVscGVyLmgiCisKKy8qIGdsb2JhbCBmb3IgdGhlIHNlbmQgY2FsbGJhY2ssIGJ1dCB1c2VkIGlu
IGtlcm5lbCB2ZXJzaW9uIGFzIHdlbGwgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG51bWJlcl9v
Zl9tZXNzYWdlczsKK3N0YXRpYyBjaGFyICpidWZmZXI7CitzdGF0aWMgaW50IGxlbmd0aDsKK3N0
YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gcmVtb3RlX2FkZHI7CitzdGF0aWMgaW50IHVub3JkZXJl
ZDsKK3VpbnQzMl90IG9wdHZhbCA9IDE7CitzdHJ1Y3Qgc29ja2V0ICpwc29jayA9IE5VTEw7CisK
K3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lOwordW5zaWduZWQgaW50IHJ1bnRpbWUg
PSAwOworc3RhdGljIGludCBwb2xpY3kgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCB0aW1ldG9s
aXZlID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNiX21lc3NhZ2VzID0gMDsKK3N0YXRpYyB1
bnNpZ25lZCBsb25nIGxvbmcgY2JfZmlyc3RfbGVuZ3RoID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBs
b25nIGxvbmcgY2Jfc3VtID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNlX2NiID0gMDsKKwor
I2lmZGVmIF9XSU4zMgorc3RhdGljIHZvaWQKK2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAq
dHYsIHZvaWQgKmlnbm9yZSkKK3sKKwlGSUxFVElNRSBmaWxldGltZTsKKwlVTEFSR0VfSU5URUdF
UiB1bGFyZ2U7CisKKwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZmlsZXRpbWUpOworCXVsYXJn
ZS5Mb3dQYXJ0ID0gZmlsZXRpbWUuZHdMb3dEYXRlVGltZTsKKwl1bGFyZ2UuSGlnaFBhcnQgPSBm
aWxldGltZS5kd0hpZ2hEYXRlVGltZTsKKwkvKiBDaGFuZ2UgYmFzZSBmcm9tIEphbiAxIDE2MDEg
MDA6MDA6MDAgdG8gSmFuIDEgMTk3MCAwMDowMDowMCAqLworI2lmIGRlZmluZWQoX19NSU5HVzMy
X18pCisJdWxhcmdlLlF1YWRQYXJ0IC09IDExNjQ0NDczNjAwMDAwMDAwMFVMTDsKKyNlbHNlCisJ
dWxhcmdlLlF1YWRQYXJ0IC09IDExNjQ0NDczNjAwMDAwMDAwMFVJNjQ7CisjZW5kaWYKKwkvKgor
CSAqIHVsYXJnZS5RdWFkUGFydCBpcyBub3cgdGhlIG51bWJlciBvZiAxMDAtbmFub3NlY29uZCBp
bnRlcnZhbHMKKwkgKiBzaW5jZSBKYW4gMSAxOTcwIDAwOjAwOjAwLgorCSAqLworI2lmIGRlZmlu
ZWQoX19NSU5HVzMyX18pCisJdHYtPnR2X3NlYyA9IChsb25nKSh1bGFyZ2UuUXVhZFBhcnQgLyAx
MDAwMDAwMFVMTCk7CisJdHYtPnR2X3VzZWMgPSAobG9uZykoKHVsYXJnZS5RdWFkUGFydCAlIDEw
MDAwMDAwVUxMKSAvIDEwVUxMKTsKKyNlbHNlCisJdHYtPnR2X3NlYyA9IChsb25nKSh1bGFyZ2Uu
UXVhZFBhcnQgLyAxMDAwMDAwMFVJNjQpOworCXR2LT50dl91c2VjID0gKGxvbmcpKCh1bGFyZ2Uu
UXVhZFBhcnQgJSAxMDAwMDAwMFVJNjQpIC8gMTBVSTY0KTsKKyNlbmRpZgorfQorI2VuZGlmCisK
KworY2hhciBVc2FnZVtdID0KKyJVc2FnZTogdHNjdHAgW29wdGlvbnNdIFthZGRyZXNzXVxuIgor
Ik9wdGlvbnM6XG4iCisiICAgICAgICAtYSAgICAgICAgICAgICBzZXQgYWRhcHRhdGlvbiBsYXll
ciBpbmRpY2F0aW9uXG4iCisiICAgICAgICAtYyAgICAgICAgICAgICB1c2UgY2FsbGJhY2sgQVBJ
XG4iCisiICAgICAgICAtZCAgICAgICAgICAgICB0aW1lIGluIHNlY29uZHMgYWZ0ZXIgd2hpY2gg
YSBzdGF0dXMgdXBkYXRlIGlzIHByaW50ZWRcbiIKKyIgICAgICAgIC1EICAgICAgICAgICAgIHR1
cm5zIE5hZ2xlIG9mZlxuIgorIiAgICAgICAgLUUgICAgICAgICAgICAgbG9jYWwgVURQIGVuY2Fw
c3VsYXRpb24gcG9ydCAoZGVmYXVsdCA5ODk5KVxuIgorIiAgICAgICAgLWYgICAgICAgICAgICAg
ZnJhZ21lbnRhdGlvbiBwb2ludFxuIgorIiAgICAgICAgLWwgICAgICAgICAgICAgbWVzc2FnZSBs
ZW5ndGhcbiIKKyIgICAgICAgIC1MICAgICAgICAgICAgIGJpbmQgdG8gbG9jYWwgSVAgKGRlZmF1
bHQgSU5BRERSX0FOWSlcbiIKKyIgICAgICAgIC1uICAgICAgICAgICAgIG51bWJlciBvZiBtZXNz
YWdlcyBzZW50ICgwIG1lYW5zIGluZmluaXRlKS9yZWNlaXZlZFxuIgorIiAgICAgICAgLXAgICAg
ICAgICAgICAgcG9ydCBudW1iZXJcbiIKKyIgICAgICAgIC1QICAgICAgICAgICAgIHBhcnRpYWwg
cmVsaWFiaWxpdHkgcG9saWN5IHRvIHVzZSAoMD1ub25lIChkZWZhdWx0KSwgMT10dGwsIDI9cnR4
LCAzPWJ1ZilcbiIKKyIgICAgICAgIC1SICAgICAgICAgICAgIHNvY2tldCByZWN2IGJ1ZmZlclxu
IgorIiAgICAgICAgLVMgICAgICAgICAgICAgc29ja2V0IHNlbmQgYnVmZmVyXG4iCisiICAgICAg
ICAtdCAgICAgICAgICAgICBiYXNlZCBvbiAtUCB0aGUgdGltZSB0byBsaXZlLCBudW1iZXIgb2Yg
cmV0cmFuc21pc3Npb25zLCBvciBwcmlvcml0eSBmb3IgbWVzc2FnZXNcbiIKKyIgICAgICAgIC1U
ICAgICAgICAgICAgIHRpbWUgdG8gc2VuZCBtZXNzYWdlc1xuIgorIiAgICAgICAgLXUgICAgICAg
ICAgICAgdXNlIHVub3JkZXJlZCB1c2VyIG1lc3NhZ2VzXG4iCisiICAgICAgICAtVSAgICAgICAg
ICAgICByZW1vdGUgVURQIGVuY2Fwc3VsYXRpb24gcG9ydFxuIgorIiAgICAgICAgLXYgICAgICAg
ICAgICAgdmVyYm9zZVxuIgorIiAgICAgICAgLVYgICAgICAgICAgICAgdmVyeSB2ZXJib3NlXG4i
Cis7CisKKyNkZWZpbmUgREVGQVVMVF9MRU5HVEggICAgICAgICAgICAgMTAyNAorI2RlZmluZSBE
RUZBVUxUX05VTUJFUl9PRl9NRVNTQUdFUyAxMDI0CisjZGVmaW5lIERFRkFVTFRfUE9SVCAgICAg
ICAgICAgICAgIDUwMDEKKyNkZWZpbmUgQlVGRkVSU0laRSAgICAgICAgICAgICAgICAgKDE8PDE2
KQorCitzdGF0aWMgaW50IHZlcmJvc2UsIHZlcnlfdmVyYm9zZTsKK3N0YXRpYyB1bnNpZ25lZCBp
bnQgZG9uZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZHVyYXRpb247CisKK3ZvaWQgc3Rv
cF9zZW5kZXIoaW50IHNpZykKK3sKKwlkb25lID0gMTsKK30KKworc3RhdGljIHRpbWVfdCBjYWxj
X3JvdW5kX3RpbWVvdXQoc3RydWN0IHRpbWV2YWwgcm91bmRfc3RhcnQpCit7CisJdGltZV90IHJv
dW5kX3RpbWVvdXQgPSByb3VuZF9zdGFydC50dl9zZWMgKyByb3VuZF9kdXJhdGlvbjsKKwlpZiAo
cm91bmRfc3RhcnQudHZfdXNlYyA+PSA1MDAwMDApIHsKKwkJcm91bmRfdGltZW91dCsrOworCX0K
KwlyZXR1cm4gcm91bmRfdGltZW91dDsKK30KKworI2lmZGVmIF9XSU4zMgorc3RhdGljIERXT1JE
IFdJTkFQSQorI2Vsc2UKK3N0YXRpYyB2b2lkICoKKyNlbmRpZgoraGFuZGxlX2Nvbm5lY3Rpb24o
dm9pZCAqYXJnKQoreworCXNzaXplX3QgbjsKKwljaGFyICpidWY7CisKKyNpZiAhZGVmaW5lZChf
V0lOMzIpCisJcHRocmVhZF90IHRpZDsKKyNlbmRpZgorCXN0cnVjdCBzb2NrZXQgKmNvbm5fc29j
azsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX3N0YXJ0LCB0aW1lX25vdywgdGltZV9kaWZmOworCWRv
dWJsZSBzZWNvbmRzOworCXVuc2lnbmVkIGxvbmcgcmVjdl9jYWxscyA9IDA7CisJdW5zaWduZWQg
bG9uZyBub3RpZmljYXRpb25zID0gMDsKKwlpbnQgZmxhZ3M7CisJc3RydWN0IHNvY2thZGRyX2lu
IGFkZHI7CisJc29ja2xlbl90IGxlbjsKKwl1bmlvbiBzY3RwX25vdGlmaWNhdGlvbiAqc25wOwor
CXN0cnVjdCBzY3RwX3BhZGRyX2NoYW5nZSAqc3BjOworCXN0cnVjdCB0aW1ldmFsIG5vdGVfdGlt
ZTsKKwl1bnNpZ25lZCBpbnQgaW5mb3R5cGU7CisJc3RydWN0IHNjdHBfcmVjdnZfcm4gcm47CisJ
c29ja2xlbl90IGluZm9sZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4pOworCXVuc2ln
bmVkIGxvbmcgbWVzc2FnZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBmaXJzdF9sZW5ndGgg
PSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdW0gPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBy
b3VuZF9ieXRlcyA9IDA7CisJc3RydWN0IHRpbWV2YWwgcm91bmRfc3RhcnQgPSAoc3RydWN0IHRp
bWV2YWwpezB9OworCXRpbWVfdCByb3VuZF90aW1lb3V0ID0gMDsKKworCWNvbm5fc29jayA9ICoo
c3RydWN0IHNvY2tldCAqKilhcmc7CisKKyNpZiAhZGVmaW5lZChfV0lOMzIpCisJdGlkID0gcHRo
cmVhZF9zZWxmKCk7CisJcHRocmVhZF9kZXRhY2godGlkKTsKKyNlbmRpZgorCisJYnVmID0gbWFs
bG9jKEJVRkZFUlNJWkUpOworCWZsYWdzID0gMDsKKwlsZW4gPSAoc29ja2xlbl90KXNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pOworCWluZm90eXBlID0gMDsKKwltZW1zZXQoJnJuLCAwLCBzaXpl
b2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4pKTsKKwluID0gdXNyc2N0cF9yZWN2dihjb25uX3NvY2ss
IGJ1ZiwgQlVGRkVSU0laRSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgJmxlbiwgKHZvaWQg
Kikmcm4sCisJICAgICAgICAgICAgICAgICAmaW5mb2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOwor
CisJZ2V0dGltZW9mZGF5KCZ0aW1lX3N0YXJ0LCBOVUxMKTsKKwlpZiAocm91bmRfZHVyYXRpb24g
PiAwKSB7CisJCWdldHRpbWVvZmRheSgmcm91bmRfc3RhcnQsIE5VTEwpOworCQlyb3VuZF90aW1l
b3V0ID0gY2FsY19yb3VuZF90aW1lb3V0KHJvdW5kX3N0YXJ0KTsKKwl9CisKKwl3aGlsZSAobiA+
IDApIHsKKwkJcmVjdl9jYWxscysrOworCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7
CisJCQlub3RpZmljYXRpb25zKys7CisJCQlnZXR0aW1lb2ZkYXkoJm5vdGVfdGltZSwgTlVMTCk7
CisJCQlwcmludGYoIm5vdGlmaWNhdGlvbiBhcnJpdmVkIGF0ICVmXG4iLCBub3RlX3RpbWUudHZf
c2VjKyhkb3VibGUpbm90ZV90aW1lLnR2X3VzZWMvMTAwMDAwMC4wKTsKKwkJCXNucCA9ICh1bmlv
biBzY3RwX25vdGlmaWNhdGlvbiAqKWJ1ZjsKKwkJCWlmIChzbnAtPnNuX2hlYWRlci5zbl90eXBl
ID09IFNDVFBfUEVFUl9BRERSX0NIQU5HRSkgeworCQkJCXNwYyA9ICZzbnAtPnNuX3BhZGRyX2No
YW5nZTsKKwkJCQlwcmludGYoIlNDVFBfUEVFUl9BRERSX0NIQU5HRTogc3RhdGU9JXUsIGVycm9y
PSV1XG4iLHNwYy0+c3BjX3N0YXRlLCBzcGMtPnNwY19lcnJvcik7CisJCQl9CisJCX0gZWxzZSB7
CisJCQlpZiAodmVyeV92ZXJib3NlKSB7CisJCQkJcHJpbnRmKCJNZXNzYWdlIHJlY2VpdmVkXG4i
KTsKKwkJCX0KKwkJCXN1bSArPSBuOworCQkJaWYgKGZsYWdzICYgTVNHX0VPUikgeworCQkJCW1l
c3NhZ2VzKys7CisJCQkJaWYgKGZpcnN0X2xlbmd0aCA9PSAwKSB7CisJCQkJCWZpcnN0X2xlbmd0
aCA9IHN1bTsKKwkJCQl9CisJCQkJaWYgKHJvdW5kX2R1cmF0aW9uID4gMCkgeworCQkJCQlyb3Vu
ZF9ieXRlcyArPSBmaXJzdF9sZW5ndGg7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChyb3VuZF9k
dXJhdGlvbiA+IDAgJiYgcm91bmRfdGltZW91dCA8PSB0aW1lKE5VTEwpKSB7CisJCQlnZXR0aW1l
b2ZkYXkoJnRpbWVfbm93LCBOVUxMKTsKKwkJCXRpbWVyc3ViKCZ0aW1lX25vdywgJnJvdW5kX3N0
YXJ0LCAmdGltZV9kaWZmKTsKKwkJCXNlY29uZHMgPSB0aW1lX2RpZmYudHZfc2VjICsgKGRvdWJs
ZSl0aW1lX2RpZmYudHZfdXNlYy8xMDAwMDAwLjA7CisJCQlmcHJpbnRmKHN0ZG91dCwgInRocm91
Z2hwdXQgZm9yIHRoZSBsYXN0ICVmIHNlY29uZHM6ICVmIEIvc1xuIiwgc2Vjb25kcywgKGRvdWJs
ZSlyb3VuZF9ieXRlcyAvIHNlY29uZHMpOworCisJCQlyb3VuZF9ieXRlcyA9IDA7CisJCQlnZXR0
aW1lb2ZkYXkoJnJvdW5kX3N0YXJ0LCBOVUxMKTsKKwkJCXJvdW5kX3RpbWVvdXQgPSBjYWxjX3Jv
dW5kX3RpbWVvdXQocm91bmRfc3RhcnQpOworCQl9CisJCWZsYWdzID0gMDsKKwkJbGVuID0gKHNv
Y2tsZW5fdClzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJaW5mb2xlbiA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9yZWN2dl9ybik7CisJCWluZm90eXBlID0gMDsKKwkJbWVtc2V0KCZybiwgMCwg
c2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3JuKSk7CisJCW4gPSB1c3JzY3RwX3JlY3Z2KGNvbm5f
c29jaywgKHZvaWQgKikgYnVmLCBCVUZGRVJTSVpFLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRy
LCAmbGVuLCAodm9pZCAqKSZybiwKKwkJICAgICAgICAgICAgICAgICAgJmluZm9sZW4sICZpbmZv
dHlwZSwgJmZsYWdzKTsKKwl9CisJaWYgKG4gPCAwKSB7CisJCXBlcnJvcigic2N0cF9yZWN2diIp
OworCX0KKwlnZXR0aW1lb2ZkYXkoJnRpbWVfbm93LCBOVUxMKTsKKwl0aW1lcnN1YigmdGltZV9u
b3csICZ0aW1lX3N0YXJ0LCAmdGltZV9kaWZmKTsKKwlzZWNvbmRzID0gdGltZV9kaWZmLnR2X3Nl
YyArIChkb3VibGUpdGltZV9kaWZmLnR2X3VzZWMvMTAwMDAwMC4wOworCXByaW50ZigiJWxsdSwg
JWx1LCAlbHUsICVsbHUsICVmLCAlZiwgJWx1XG4iLAorCSAgICAgICAgZmlyc3RfbGVuZ3RoLCBt
ZXNzYWdlcywgcmVjdl9jYWxscywgc3VtLCBzZWNvbmRzLCAoZG91YmxlKWZpcnN0X2xlbmd0aCAq
IChkb3VibGUpbWVzc2FnZXMgLyBzZWNvbmRzLCBub3RpZmljYXRpb25zKTsKKwlmZmx1c2goc3Rk
b3V0KTsKKwl1c3JzY3RwX2Nsb3NlKGNvbm5fc29jayk7CisJZnJlZShidWYpOworI2lmZGVmIF9X
SU4zMgorCXJldHVybiAwOworI2Vsc2UKKwlyZXR1cm4gKE5VTEwpOworI2VuZGlmCit9CisKK3N0
YXRpYyBpbnQKK3NlbmRfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdWludDMyX3Qgc2JfZnJlZSwg
dm9pZCAqdWxwX2luZm8pIHsKKwlzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgc2VuZHZfc3BhOworCisJ
aWYgKChjYl9tZXNzYWdlcyA9PSAwKSAmJiB2ZXJib3NlKSB7CisJCXByaW50ZigiU3RhcnQgc2Vu
ZGluZyAiKTsKKwkJaWYgKG51bWJlcl9vZl9tZXNzYWdlcyA+IDApIHsKKwkJCXByaW50ZigiJWxk
IG1lc3NhZ2VzICIsIChsb25nKW51bWJlcl9vZl9tZXNzYWdlcyk7CisJCX0KKwkJaWYgKHJ1bnRp
bWUgPiAwKSB7CisJCQlwcmludGYoImZvciAldSBzZWNvbmRzIC4uLiIsIHJ1bnRpbWUpOworCQl9
CisJCXByaW50ZigiXG4iKTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJfQorCisJc2VuZHZfc3BhLnNl
bmR2X2ZsYWdzID0gU0NUUF9TRU5EX1NORElORk9fVkFMSUQgfCBTQ1RQX1NFTkRfUFJJTkZPX1ZB
TElEOworCisJc2VuZHZfc3BhLnNlbmR2X3NuZGluZm8uc25kX3NpZCA9IDA7CisJc2VuZHZfc3Bh
LnNlbmR2X3NuZGluZm8uc25kX2ZsYWdzID0gMDsKKwlpZiAodW5vcmRlcmVkICE9IDApIHsKKwkJ
c2VuZHZfc3BhLnNlbmR2X3NuZGluZm8uc25kX2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOworCX0K
KwlzZW5kdl9zcGEuc2VuZHZfc25kaW5mby5zbmRfcHBpZCA9IDA7CisJc2VuZHZfc3BhLnNlbmR2
X3NuZGluZm8uc25kX2NvbnRleHQgPSAwOworCXNlbmR2X3NwYS5zZW5kdl9zbmRpbmZvLnNuZF9h
c3NvY19pZCA9IDA7CisKKwlzZW5kdl9zcGEuc2VuZHZfcHJpbmZvLnByX3BvbGljeSA9IDA7CisJ
c3dpdGNoIChwb2xpY3kpIHsKKyNpZmRlZiBTQ1RQX1BSX1NDVFBfTk9ORQorCWNhc2UgMDoKKwkJ
c2VuZHZfc3BhLnNlbmR2X3ByaW5mby5wcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfTk9ORTsKKwkJ
YnJlYWs7CisjZW5kaWYKKyNpZmRlZiBTQ1RQX1BSX1NDVFBfVFRMCisJY2FzZSAxOgorCQlzZW5k
dl9zcGEuc2VuZHZfcHJpbmZvLnByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9UVEw7CisJCWJyZWFr
OworI2VuZGlmCisjaWZkZWYgU0NUUF9QUl9TQ1RQX1JUWAorCWNhc2UgMjoKKwkJc2VuZHZfc3Bh
LnNlbmR2X3ByaW5mby5wcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfUlRYOworCQlicmVhazsKKyNl
bmRpZgorI2lmZGVmIFNDVFBfUFJfU0NUUF9CVUYKKwljYXNlIDM6CisJCXNlbmR2X3NwYS5zZW5k
dl9wcmluZm8ucHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX0JVRjsKKwkJYnJlYWs7CisjZW5kaWYK
KwlkZWZhdWx0OgorCQlwcmludGYoIlVua25vd24gUFItU0NUUCBwb2xpY3kuXG4iKTsKKwkJYnJl
YWs7CisJfQorCXNlbmR2X3NwYS5zZW5kdl9wcmluZm8ucHJfdmFsdWUgPSB0aW1ldG9saXZlOwor
CisJd2hpbGUgKCFkb25lICYmICgobnVtYmVyX29mX21lc3NhZ2VzID09IDApIHx8IChjYl9tZXNz
YWdlcyA8IChudW1iZXJfb2ZfbWVzc2FnZXMgLSAxKSkpKSB7CisJCWlmICh2ZXJ5X3ZlcmJvc2Up
IHsKKwkJCXByaW50ZigiU2VuZGluZyBtZXNzYWdlIG51bWJlciAlbHUuXG4iLCBjYl9tZXNzYWdl
cyArIDEpOworCQl9CisKKwkJaWYgKHVzcnNjdHBfc2VuZHYocHNvY2ssIGJ1ZmZlciwgbGVuZ3Ro
LAorCQkgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopICZyZW1vdGVfYWRkciwg
MSwKKwkJICAgICAgICAgICAgICAgICAgKHZvaWQgKikmc2VuZHZfc3BhLCAoc29ja2xlbl90KXNp
emVvZihzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEpLCBTQ1RQX1NFTkRWX1NQQSwKKwkJICAgICAgICAg
ICAgICAgICAgMCkgPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRVdPVUxEQkxPQ0sgJiYgZXJybm8g
IT0gRUFHQUlOKSB7CisJCQkJcGVycm9yKCJ1c3JzY3RwX3NlbmR2IChjYikiKTsKKwkJCQlleGl0
KDEpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAodmVyeV92ZXJib3NlKXsKKwkJCQkJcHJpbnRmKCJF
V09VTERCTE9DSyBvciBFQUdBSU4gZm9yIG1lc3NhZ2UgbnVtYmVyICVsdSAtIHdpbGwgcmV0cnlc
biIsIGNiX21lc3NhZ2VzICsgMSk7CisJCQkJfQorCQkJCS8qIHNlbmQgdW50aWwgRVdPVUxEQkxP
Q0sgdGhlbiBleGl0IGNhbGxiYWNrLiAqLworCQkJCXJldHVybiAoMSk7CisJCQl9CisJCX0KKwkJ
Y2JfbWVzc2FnZXMrKzsKKwl9CisJaWYgKChkb25lID09IDEpIHx8IChjYl9tZXNzYWdlcyA9PSAo
bnVtYmVyX29mX21lc3NhZ2VzIC0gMSkpKSB7CisJCWlmICh2ZXJ5X3ZlcmJvc2UpIHsKKwkJCXBy
aW50ZigiU2VuZGluZyBmaW5hbCBtZXNzYWdlIG51bWJlciAlbHUuXG4iLCBjYl9tZXNzYWdlcyAr
IDEpOworCQl9CisKKwkJc2VuZHZfc3BhLnNlbmR2X3NuZGluZm8uc25kX2ZsYWdzIHw9IFNDVFBf
RU9GOworCQlpZiAodXNyc2N0cF9zZW5kdihwc29jaywgYnVmZmVyLCBsZW5ndGgsIChzdHJ1Y3Qg
c29ja2FkZHIgKikgJnJlbW90ZV9hZGRyLCAxLAorCQkgICAgICAgICAgICAgICAgICAodm9pZCAq
KSZzZW5kdl9zcGEsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSksIFND
VFBfU0VORFZfU1BBLAorCQkgICAgICAgICAgICAgICAgICAwKSA8IDApIHsKKwkJCWlmIChlcnJu
byAhPSBFV09VTERCTE9DSyAmJiBlcnJubyAhPSBFQUdBSU4pIHsKKwkJCQlwZXJyb3IoInVzcnNj
dHBfc2VuZHYgKGNiKSIpOworCQkJCWV4aXQoMSk7CisJCQl9IGVsc2UgeworCQkJCWlmICh2ZXJ5
X3ZlcmJvc2UpeworCQkJCQlwcmludGYoIkVXT1VMREJMT0NLIG9yIEVBR0FJTiBmb3IgZmluYWwg
bWVzc2FnZSBudW1iZXIgJWx1IC0gd2lsbCByZXRyeVxuIiwgY2JfbWVzc2FnZXMgKyAxKTsKKwkJ
CQl9CisJCQkJLyogc2VuZCB1bnRpbCBFV09VTERCTE9DSyB0aGVuIGV4aXQgY2FsbGJhY2suICov
CisJCQkJcmV0dXJuICgxKTsKKwkJCX0KKwkJfQorCQljYl9tZXNzYWdlcysrOworCQlkb25lID0g
MjsKKwl9CisKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW50CitzZXJ2ZXJfcmVjZWl2ZV9j
YihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpk
YXRhLAorICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3Ys
IGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7CisJc3RydWN0IHRpbWV2YWwgbm93LCBkaWZm
X3RpbWU7CisJZG91YmxlIHNlY29uZHM7CisKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWdldHRp
bWVvZmRheSgmbm93LCBOVUxMKTsKKwkJdGltZXJzdWIoJm5vdywgJnN0YXJ0X3RpbWUsICZkaWZm
X3RpbWUpOworCQlzZWNvbmRzID0gZGlmZl90aW1lLnR2X3NlYyArIChkb3VibGUpZGlmZl90aW1l
LnR2X3VzZWMgLyAxMDAwMDAwLjA7CisJCXByaW50ZigiJWxsdSwgJWx1LCAlbGx1LCAlZiwgJWZc
biIsCisJCQljYl9maXJzdF9sZW5ndGgsIGNiX21lc3NhZ2VzLCBjYl9zdW0sIHNlY29uZHMsIChk
b3VibGUpY2JfZmlyc3RfbGVuZ3RoICogKGRvdWJsZSljYl9tZXNzYWdlcyAvIHNlY29uZHMpOwor
CQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCQljYl9maXJzdF9sZW5ndGggPSAwOworCQljYl9zdW0g
PSAwOworCQljYl9tZXNzYWdlcyA9IDA7CisJCXJldHVybiAoMSk7CisJfQorCWlmIChjYl9maXJz
dF9sZW5ndGggPT0gMCkgeworCQljYl9maXJzdF9sZW5ndGggPSAodW5zaWduZWQgaW50KWRhdGFs
ZW47CisJCWdldHRpbWVvZmRheSgmc3RhcnRfdGltZSwgTlVMTCk7CisJfQorCWNiX3N1bSArPSBk
YXRhbGVuOworCWNiX21lc3NhZ2VzKys7CisKKwlmcmVlKGRhdGEpOworCXJldHVybiAoMSk7Cit9
CisKK3N0YXRpYyBpbnQKK2NsaWVudF9yZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVu
aW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgIHNpemVfdCBk
YXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5m
bykKK3sKKwlmcmVlKGRhdGEpOworCXJldHVybiAoMSk7Cit9CisKK2ludCBtYWluKGludCBhcmdj
LCBjaGFyICoqYXJndikKK3sKKyNpZm5kZWYgX1dJTjMyCisJaW50IGMsIHJjOworI2VuZGlmCisJ
c29ja2xlbl90IGFkZHJfbGVuOworCXN0cnVjdCBzb2NrYWRkcl9pbiBsb2NhbF9hZGRyOworCXN0
cnVjdCB0aW1ldmFsIHRpbWVfc3RhcnQsIHRpbWVfbm93LCB0aW1lX2RpZmY7CisJaW50IGNsaWVu
dDsKKwl1aW50MTZfdCBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydCwgcG9ydCwgbG9jYWxfdWRwX3Bv
cnQsIHJlbW90ZV91ZHBfcG9ydDsKKwlpbnQgcmN2YnVmc2l6ZT0wLCBzbmRidWZzaXplPTAsIG15
cmN2YnVmc2l6ZSwgbXlzbmRidWZzaXplOworCXNvY2tsZW5fdCBpbnRsZW47CisJZG91YmxlIHNl
Y29uZHM7CisJZG91YmxlIHRocm91Z2hwdXQ7CisJaW50IG5vZGVsYXkgPSAwOworCXN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlIGF2OworCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyBlbmNhcHM7CisJc3Ry
dWN0IHNjdHBfc2VuZHZfc3BhIHNlbmR2X3NwYTsKKwl1bnNpZ25lZCBsb25nIG1lc3NhZ2VzID0g
MDsKKyNpZmRlZiBfV0lOMzIKKwl1bnNpZ25lZCBsb25nIHNyY0FkZHI7CisJSEFORExFIHRpZDsK
KyNlbHNlCisJaW5fYWRkcl90IHNyY0FkZHI7CisJcHRocmVhZF90IHRpZDsKKyNlbmRpZgorCWlu
dCBmcmFncG9pbnQgPSAwOworCXN0cnVjdCBzY3RwX3NldGFkYXB0YXRpb24gaW5kID0gezB9Owor
I2lmZGVmIF9XSU4zMgorCWNoYXIgKm9wdDsKKwlpbnQgb3B0aW5kOworI2VuZGlmCisJdW5vcmRl
cmVkID0gMDsKKworCWxlbmd0aCA9IERFRkFVTFRfTEVOR1RIOworCW51bWJlcl9vZl9tZXNzYWdl
cyA9IERFRkFVTFRfTlVNQkVSX09GX01FU1NBR0VTOworCXBvcnQgPSBERUZBVUxUX1BPUlQ7CisJ
cmVtb3RlX3VkcF9wb3J0ID0gMDsKKwlsb2NhbF91ZHBfcG9ydCA9IDk4OTk7CisJdmVyYm9zZSA9
IDA7CisJdmVyeV92ZXJib3NlID0gMDsKKwlzcmNBZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisJ
cm91bmRfZHVyYXRpb24gPSAwOworCisJbWVtc2V0KCh2b2lkICopICZyZW1vdGVfYWRkciwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCW1lbXNldCgodm9pZCAqKSAmbG9jYWxfYWRk
ciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCisjaWZuZGVmIF9XSU4zMgorCXdo
aWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiYTpjZDpERTpmOmw6TDpuOnA6UDpSOlM6dDpU
OnVVOnZWIikpICE9IC0xKQorCQlzd2l0Y2goYykgeworCQkJY2FzZSAnYSc6CisJCQkJaW5kLnNz
Yl9hZGFwdGF0aW9uX2luZCA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2Mn
OgorCQkJCXVzZV9jYiA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlICdkJzoKKwkJCQlyb3VuZF9k
dXJhdGlvbiA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0QnOgorCQkJCW5v
ZGVsYXkgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAnbCc6CisJCQkJbGVuZ3RoID0gYXRvaShv
cHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJbnVtYmVyX29mX21lc3NhZ2Vz
ID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAncCc6CisJCQkJcG9ydCA9IGF0
b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1AnOgorCQkJCXBvbGljeSA9IGF0b2ko
b3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0UnOgorCQkJCWxvY2FsX3VkcF9wb3J0ID0g
YXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnZic6CisJCQkJZnJhZ3BvaW50ID0g
YXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnTCc6CisJCQkJaWYgKGluZXRfcHRv
bihBRl9JTkVULCBvcHRhcmcsICZzcmNBZGRyKSAhPSAxKSB7CisJCQkJCXByaW50ZigiQ2FuJ3Qg
cGFyc2UgJXNcbiIsIG9wdGFyZyk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnUic6CisJ
CQkJcmN2YnVmc2l6ZSA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1MnOgor
CQkJCXNuZGJ1ZnNpemUgPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoK
KwkJCQl0aW1ldG9saXZlID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnVCc6
CisJCQkJcnVudGltZSA9IGF0b2kob3B0YXJnKTsKKwkJCQludW1iZXJfb2ZfbWVzc2FnZXMgPSAw
OworCQkJCWJyZWFrOworCQkJY2FzZSAndSc6CisJCQkJdW5vcmRlcmVkID0gMTsKKwkJCQlicmVh
azsKKwkJCWNhc2UgJ1UnOgorCQkJCXJlbW90ZV91ZHBfcG9ydCA9IGF0b2kob3B0YXJnKTsKKwkJ
CQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCXZlcmJvc2UgPSAxOworCQkJCWJyZWFrOworCQkJ
Y2FzZSAnVic6CisJCQkJdmVyYm9zZSA9IDE7CisJCQkJdmVyeV92ZXJib3NlID0gMTsKKwkJCQli
cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZnByaW50ZihzdGRlcnIsICIlcyIsIFVzYWdlKTsKKwkJ
CQlleGl0KDEpOworCQl9CisjZWxzZQorCWZvciAob3B0aW5kID0gMTsgb3B0aW5kIDwgYXJnYzsg
b3B0aW5kKyspIHsKKwkJaWYgKGFyZ3Zbb3B0aW5kXVswXSA9PSAnLScpIHsKKwkJCXN3aXRjaCAo
YXJndltvcHRpbmRdWzFdKSB7CisJCQkJY2FzZSAnYSc6CisJCQkJCWlmICgrK29wdGluZCA+PSBh
cmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhpdCgxKTsKKwkJCQkJ
fQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCWluZC5zc2JfYWRhcHRhdGlvbl9pbmQg
PSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ2MnOgorCQkJCQl1c2VfY2IgPSAx
OworCQkJCQlicmVhazsKKwkJCQljYXNlICdsJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2Mp
IHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJ
CQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJbGVuZ3RoID0gYXRvaShvcHQpOworCQkJCQli
cmVhazsKKwkJCQljYXNlICdwJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJ
CXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9
IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJcG9ydCA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJ
Y2FzZSAnUCc6CisJCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVz
IiwgVXNhZ2UpOworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGlu
ZF07CisJCQkJCXBvbGljeSA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnbic6
CisJCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2Up
OworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJ
CW51bWJlcl9vZl9tZXNzYWdlcyA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAn
Zic6CisJCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNh
Z2UpOworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJ
CQkJCWZyYWdwb2ludCA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnTCc6CisJ
CQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOwor
CQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCWlu
ZXRfcHRvbihBRl9JTkVULCBvcHQsICZzcmNBZGRyKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAn
VSc6CisJCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNh
Z2UpOworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJ
CQkJCXJlbW90ZV91ZHBfcG9ydCA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAn
RSc6CisJCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNh
Z2UpOworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJ
CQkJCWxvY2FsX3VkcF9wb3J0ID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdS
JzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2Fn
ZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJ
CQkJcmN2YnVmc2l6ZSA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnUyc6CisJ
CQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOwor
CQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCXNu
ZGJ1ZnNpemUgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ3QnOgorCQkJCQlp
ZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKKwkJCQkJ
CWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJCQl0aW1ldG9s
aXZlID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdUJzoKKwkJCQkJaWYgKCsr
b3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQlleGl0
KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJcnVudGltZSA9IGF0
b2kob3B0KTsKKwkJCQkJbnVtYmVyX29mX21lc3NhZ2VzID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJ
Y2FzZSAndSc6CisJCQkJCXVub3JkZXJlZCA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ3Yn
OgorCQkJCQl2ZXJib3NlID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnVic6CisJCQkJCXZl
cmJvc2UgPSAxOworCQkJCQl2ZXJ5X3ZlcmJvc2UgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNl
ICdEJzoKKwkJCQkJbm9kZWxheSA9IDE7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJ
CXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCWV4aXQoMSk7CisJCQl9CisJCX0gZWxzZSB7CisJ
CQlicmVhazsKKwkJfQorCX0KKyNlbmRpZgorCWlmIChvcHRpbmQgPT0gYXJnYykgeworCQljbGll
bnQgPSAwOworCQlsb2NhbF9wb3J0ID0gcG9ydDsKKwkJcmVtb3RlX3BvcnQgPSAwOworCX0gZWxz
ZSB7CisJCWNsaWVudCA9IDE7CisJCWxvY2FsX3BvcnQgPSAwOworCQlyZW1vdGVfcG9ydCA9IHBv
cnQ7CisJfQorCWxvY2FsX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9T
SU5fTEVOCisJbG9jYWxfYWRkci5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisjZW5kaWYKKwlsb2NhbF9hZGRyLnNpbl9wb3J0ID0gaHRvbnMobG9jYWxfcG9ydCk7CisJbG9j
YWxfYWRkci5zaW5fYWRkci5zX2FkZHIgPSBzcmNBZGRyOworCisJdXNyc2N0cF9pbml0KGxvY2Fs
X3VkcF9wb3J0LCBOVUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOworI2lmZGVmIFNDVFBfREVCVUcK
Kwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX0FMTCk7CisjZW5k
aWYKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUoMik7CisJdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfbm9fY3N1bV9vbl9sb29wYmFjaygwKTsKKwl1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9lbmFibGVfc2Fja19pbW1lZGlhdGVseSgxKTsKKworCWlmIChjbGllbnQpIHsKKwkJaWYg
KHVzZV9jYikgeworCQkJaWYgKCEocHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVULCBTT0NL
X1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBjbGllbnRfcmVjZWl2ZV9jYiwgc2VuZF9jYiwgbGVuZ3Ro
LCBOVUxMKSkpIHsKKwkJCQlwZXJyb3IoInVzZXJfc29ja2V0Iik7CisJCQkJZXhpdCgxKTsKKwkJ
CX0KKwkJfSBlbHNlIHsKKwkJCWlmICghKHBzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVCwg
U09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgTlVMTCwgTlVMTCwgMCwgTlVMTCkpKSB7CisJCQkJ
cGVycm9yKCJ1c2VyX3NvY2tldCIpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCX0KKwl9IGVsc2Ug
eworCQlpZiAodXNlX2NiKSB7CisJCQlpZiAoIShwc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lO
RVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIHNlcnZlcl9yZWNlaXZlX2NiLCBOVUxMLCAw
LCBOVUxMKSkpIHsKKwkJCQlwZXJyb3IoInVzZXJfc29ja2V0Iik7CisJCQkJZXhpdCgxKTsKKwkJ
CX0KKwkJfSBlbHNlIHsKKwkJCWlmICghKHBzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVCwg
U09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgTlVMTCwgTlVMTCwgMCwgTlVMTCkpKSB7CisJCQkJ
cGVycm9yKCJ1c2VyX3NvY2tldCIpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCX0KKwl9CisKKwlp
ZiAodXNyc2N0cF9iaW5kKHBzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmxvY2FsX2FkZHIsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSAtMSkgeworCQlwZXJyb3IoInVzcnNjdHBfYmlu
ZCIpOworCQlleGl0KDEpOworCX0KKworCWlmICh1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIElQ
UFJPVE9fU0NUUCwgU0NUUF9BREFQVEFUSU9OX0xBWUVSLCAoY29uc3Qgdm9pZCopJmluZCwgKHNv
Y2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc2V0YWRhcHRhdGlvbikpIDwgMCkgeworCQlwZXJy
b3IoInNldHNvY2tvcHQiKTsKKwl9CisKKwlpZiAoIWNsaWVudCkgeworCQlpZiAocmN2YnVmc2l6
ZSkgeworCQkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgU09MX1NPQ0tFVCwgU09fUkNW
QlVGLCAmcmN2YnVmc2l6ZSwgc2l6ZW9mKGludCkpIDwgMCkgeworCQkJCXBlcnJvcigic2V0c29j
a29wdDogcmN2YnVmIik7CisJCQl9CisJCX0KKwkJaWYgKHZlcmJvc2UpIHsKKwkJCWludGxlbiA9
IHNpemVvZihpbnQpOworCQkJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChwc29jaywgU09MX1NPQ0tF
VCwgU09fUkNWQlVGLCAmbXlyY3ZidWZzaXplLCAoc29ja2xlbl90ICopJmludGxlbikgPCAwKSB7
CisJCQkJcGVycm9yKCJnZXRzb2Nrb3B0OiByY3ZidWYiKTsKKwkJCX0gZWxzZSB7CisJCQkJZnBy
aW50ZihzdGRvdXQsIlJlY2VpdmUgYnVmZmVyIHNpemU6ICVkLlxuIiwgbXlyY3ZidWZzaXplKTsK
KwkJCX0KKwkJfQorCisJCWlmICh1c3JzY3RwX2xpc3Rlbihwc29jaywgMSkgPCAwKSB7CisJCQlw
ZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJCQlleGl0KDEpOworCQl9CisKKwkJd2hpbGUgKDEp
IHsKKwkJCW1lbXNldCgmcmVtb3RlX2FkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
KTsKKwkJCWFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCQlpZiAodXNl
X2NiKSB7CisJCQkJc3RydWN0IHNvY2tldCAqY29ubl9zb2NrOworCisJCQkJaWYgKChjb25uX3Nv
Y2sgPSB1c3JzY3RwX2FjY2VwdChwc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmcmVtb3RlX2Fk
ZHIsICZhZGRyX2xlbikpID09IE5VTEwpIHsKKwkJCQkJcGVycm9yKCJ1c3JzY3RwX2FjY2VwdCIp
OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCBzb2NrZXQg
Kipjb25uX3NvY2s7CisKKwkJCQljb25uX3NvY2sgPSAoc3RydWN0IHNvY2tldCAqKikgbWFsbG9j
KHNpemVvZihzdHJ1Y3Qgc29ja2V0ICopKTsKKwkJCQlpZiAoKCpjb25uX3NvY2sgPSB1c3JzY3Rw
X2FjY2VwdChwc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmcmVtb3RlX2FkZHIsICZhZGRyX2xl
bikpID09IE5VTEwpIHsKKwkJCQkJcGVycm9yKCJ1c3JzY3RwX2FjY2VwdCIpOworCQkJCQljb250
aW51ZTsKKwkJCQl9CisjaWZkZWYgX1dJTjMyCisJCQkJaWYgKCh0aWQgPSBDcmVhdGVUaHJlYWQo
TlVMTCwgMCwgJmhhbmRsZV9jb25uZWN0aW9uLCAodm9pZCAqKWNvbm5fc29jaywgMCwgTlVMTCkp
ID09IE5VTEwpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsICJDcmVhdGVUaHJlYWQoKSBmYWlsZWQg
d2l0aCBlcnJvcjogJWx1XG4iLCBHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCQkJCWlmICgocmMg
PSBwdGhyZWFkX2NyZWF0ZSgmdGlkLCBOVUxMLCAmaGFuZGxlX2Nvbm5lY3Rpb24sICh2b2lkICop
Y29ubl9zb2NrKSkgIT0gMCkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgInB0aHJlYWRfY3JlYXRl
OiAlc1xuIiwgc3RyZXJyb3IocmMpKTsKKyNlbmRpZgorCQkJCQl1c3JzY3RwX2Nsb3NlKCpjb25u
X3NvY2spOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAodmVyYm9zZSkgewor
CQkJCS8qIGNvbnN0IGNoYXIgKmluZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hh
ciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSkKKwkJCQlpbmV0X250b2EocmVtb3RlX2FkZHIuc2luX2Fk
ZHIpICovCisJCQkJY2hhciBhZGRyYnVmW0lORVRfQUREUlNUUkxFTl07CisJCQkJcHJpbnRmKCJD
b25uZWN0aW9uIGFjY2VwdGVkIGZyb20gJXM6JWRcbiIsIGluZXRfbnRvcChBRl9JTkVULCAmKHJl
bW90ZV9hZGRyLnNpbl9hZGRyKSwgYWRkcmJ1ZiwgSU5FVF9BRERSU1RSTEVOKSwgbnRvaHMocmVt
b3RlX2FkZHIuc2luX3BvcnQpKTsKKwkJCX0KKwkJfQorCQkvKiB1c3JzY3RwX2Nsb3NlKHBzb2Nr
KTsgIHVucmVhY2hhYmxlICovCisJfSBlbHNlIHsKKwkJbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWls
eSA9IEFGX0lORVQ7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKHJlbW90ZV91ZHBfcG9ydCk7
CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1P
VEVfVURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCopJmVuY2FwcywgKHNvY2tsZW5fdClzaXpl
b2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7CisJCQlwZXJyb3IoInNldHNvY2tvcHQi
KTsKKwkJfQorCisJCXJlbW90ZV9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhB
VkVfU0lOX0xFTgorCQlyZW1vdGVfYWRkci5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbik7CisjZW5kaWYKKwkJaWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndltvcHRpbmRdLCAm
cmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyKSl7CisJCQlwcmludGYoImVycm9yOiBpbnZhbGlk
IGRlc3RpbmF0aW9uIGFkZHJlc3NcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlyZW1vdGVfYWRk
ci5zaW5fcG9ydCA9IGh0b25zKHJlbW90ZV9wb3J0KTsKKworCQkvKiBUT0RPIGZyYWdwb2ludCBz
dHVmZiAqLworCQlpZiAobm9kZWxheSA9PSAxKSB7CisJCQlvcHR2YWwgPSAxOworCQl9IGVsc2Ug
eworCQkJb3B0dmFsID0gMDsKKwkJfQorCQl1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIElQUFJP
VE9fU0NUUCwgU0NUUF9OT0RFTEFZLCAmb3B0dmFsLCBzaXplb2YoaW50KSk7CisKKwkJaWYgKGZy
YWdwb2ludCkgeworCQkJYXYuYXNzb2NfaWQgPSAwOworCQkJYXYuYXNzb2NfdmFsdWUgPSBmcmFn
cG9pbnQ7CisJCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBJUFBST1RPX1NDVFAsIFND
VFBfTUFYU0VHLCAmYXYsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIDwgMCkgewor
CQkJCXBlcnJvcigic2V0c29ja29wdDogU0NUUF9NQVhTRUciKTsKKwkJCX0KKwkJfQorCisJCWlm
IChzbmRidWZzaXplKSB7CisJCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBTT0xfU09D
S0VULCBTT19TTkRCVUYsICZzbmRidWZzaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCQkJcGVy
cm9yKCJzZXRzb2Nrb3B0OiBzbmRidWYiKTsKKwkJCX0KKwkJfQorCQlpZiAodmVyYm9zZSkgewor
CQkJaW50bGVuID0gc2l6ZW9mKGludCk7CisJCQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHBzb2Nr
LCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZteXNuZGJ1ZnNpemUsIChzb2NrbGVuX3QgKikmaW50
bGVuKSA8IDApIHsKKwkJCQlwZXJyb3IoInNldHNvY2tvcHQ6IFNPX1NOREJVRiIpOworCQkJfSBl
bHNlIHsKKwkJCQlmcHJpbnRmKHN0ZG91dCwiU2VuZCBidWZmZXIgc2l6ZTogJWQuXG4iLCBteXNu
ZGJ1ZnNpemUpOworCQkJfQorCQl9CisKKwkJYnVmZmVyID0gbWFsbG9jKGxlbmd0aCk7CisJCW1l
bXNldChidWZmZXIsICdiJywgbGVuZ3RoKTsKKworCQlpZiAodXNyc2N0cF9jb25uZWN0KHBzb2Nr
LCAoc3RydWN0IHNvY2thZGRyICopICZyZW1vdGVfYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpID09IC0xICkgeworCQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKKwkJCWV4aXQo
MSk7CisJCX0KKworCQlnZXR0aW1lb2ZkYXkoJnRpbWVfc3RhcnQsIE5VTEwpOworCisJCWRvbmUg
PSAwOworCisJCWlmIChydW50aW1lID4gMCkgeworI2lmbmRlZiBfV0lOMzIKKwkJCXNpZ25hbChT
SUdBTFJNLCBzdG9wX3NlbmRlcik7CisJCQlhbGFybShydW50aW1lKTsKKyNlbHNlCisJCQlmcHJp
bnRmKHN0ZGVyciwgIllvdSBjYW5ub3Qgc2V0IHRoZSBydW50aW1lIGluIFdpbmRvd3MgeWV0XG4i
KTsKKwkJCWV4aXQoLTEpOworI2VuZGlmCisJCX0KKworCQlpZiAodXNlX2NiKSB7CisJCQl3aGls
ZSAoZG9uZSA8IDIgJiYgKGNiX21lc3NhZ2VzIDwgKG51bWJlcl9vZl9tZXNzYWdlcyAtIDEpKSkg
eworI2lmZGVmIF9XSU4zMgorCQkJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJCQlzbGVlcCgxKTsK
KyNlbmRpZgorCQkJfQorCQl9IGVsc2UgeworCQkJc2VuZHZfc3BhLnNlbmR2X2ZsYWdzID0gU0NU
UF9TRU5EX1NORElORk9fVkFMSUQgfCBTQ1RQX1NFTkRfUFJJTkZPX1ZBTElEOworCisJCQlzZW5k
dl9zcGEuc2VuZHZfc25kaW5mby5zbmRfc2lkID0gMDsKKwkJCXNlbmR2X3NwYS5zZW5kdl9zbmRp
bmZvLnNuZF9mbGFncyA9IDA7CisJCQlpZiAodW5vcmRlcmVkICE9IDApIHsKKwkJCQlzZW5kdl9z
cGEuc2VuZHZfc25kaW5mby5zbmRfZmxhZ3MgfD0gU0NUUF9VTk9SREVSRUQ7CisJCQl9CisJCQlz
ZW5kdl9zcGEuc2VuZHZfc25kaW5mby5zbmRfcHBpZCA9IDA7CisJCQlzZW5kdl9zcGEuc2VuZHZf
c25kaW5mby5zbmRfY29udGV4dCA9IDA7CisJCQlzZW5kdl9zcGEuc2VuZHZfc25kaW5mby5zbmRf
YXNzb2NfaWQgPSAwOworCisJCQlzZW5kdl9zcGEuc2VuZHZfcHJpbmZvLnByX3BvbGljeSA9IDA7
CisJCQlzd2l0Y2ggKHBvbGljeSkgeworI2lmZGVmIFNDVFBfUFJfU0NUUF9OT05FCisJCQljYXNl
IDA6CisJCQkJc2VuZHZfc3BhLnNlbmR2X3ByaW5mby5wcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBf
Tk9ORTsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIFNDVFBfUFJfU0NUUF9UVEwKKwkJCWNh
c2UgMToKKwkJCQlzZW5kdl9zcGEuc2VuZHZfcHJpbmZvLnByX3BvbGljeSA9IFNDVFBfUFJfU0NU
UF9UVEw7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBTQ1RQX1BSX1NDVFBfUlRYCisJCQlj
YXNlIDI6CisJCQkJc2VuZHZfc3BhLnNlbmR2X3ByaW5mby5wcl9wb2xpY3kgPSBTQ1RQX1BSX1ND
VFBfUlRYOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgU0NUUF9QUl9TQ1RQX0JVRgorCQkJ
Y2FzZSAzOgorCQkJCXNlbmR2X3NwYS5zZW5kdl9wcmluZm8ucHJfcG9saWN5ID0gU0NUUF9QUl9T
Q1RQX0JVRjsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlwcmludGYoIlVu
a25vd24gUFItU0NUUCBwb2xpY3kuXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNlbmR2X3Nw
YS5zZW5kdl9wcmluZm8ucHJfdmFsdWUgPSB0aW1ldG9saXZlOworCisJCQlpZiAodmVyYm9zZSkg
eworCQkJCXByaW50ZigiU3RhcnQgc2VuZGluZyAiKTsKKwkJCQlpZiAobnVtYmVyX29mX21lc3Nh
Z2VzID4gMCkgeworCQkJCQlwcmludGYoIiVsZCBtZXNzYWdlcyAiLCAobG9uZyludW1iZXJfb2Zf
bWVzc2FnZXMpOworCQkJCX0KKwkJCQlpZiAocnVudGltZSA+IDApIHsKKwkJCQkJcHJpbnRmKCJm
b3IgJXUgc2Vjb25kcyAuLi4iLCBydW50aW1lKTsKKwkJCQl9CisJCQkJcHJpbnRmKCJcbiIpOwor
CQkJCWZmbHVzaChzdGRvdXQpOworCQkJfQorCQkJd2hpbGUgKCFkb25lICYmICgobnVtYmVyX29m
X21lc3NhZ2VzID09IDApIHx8IChtZXNzYWdlcyA8IChudW1iZXJfb2ZfbWVzc2FnZXMgLSAxKSkp
KSB7CisJCQkJaWYgKHZlcnlfdmVyYm9zZSkgeworCQkJCQlwcmludGYoIlNlbmRpbmcgbWVzc2Fn
ZSBudW1iZXIgJWx1LlxuIiwgbWVzc2FnZXMgKyAxKTsKKwkJCQl9CisKKwkJCQlpZiAodXNyc2N0
cF9zZW5kdihwc29jaywgYnVmZmVyLCBsZW5ndGgsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90
ZV9hZGRyLCAxLAorCQkJCSAgICAgICAgICAgICAgICAgICh2b2lkICopJnNlbmR2X3NwYSwgKHNv
Y2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc2VuZHZfc3BhKSwgU0NUUF9TRU5EVl9TUEEsCisJ
CQkJICAgICAgICAgICAgICAgICAgMCkgPCAwKSB7CisJCQkJCXBlcnJvcigidXNyc2N0cF9zZW5k
diIpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQltZXNzYWdlcysrOworCQkJfQorCQkJaWYg
KHZlcnlfdmVyYm9zZSkgeworCQkJCXByaW50ZigiU2VuZGluZyBtZXNzYWdlIG51bWJlciAlbHUu
XG4iLCBtZXNzYWdlcyArIDEpOworCQkJfQorCisJCQlzZW5kdl9zcGEuc2VuZHZfc25kaW5mby5z
bmRfZmxhZ3MgfD0gU0NUUF9FT0Y7CisJCQlpZiAodXNyc2N0cF9zZW5kdihwc29jaywgYnVmZmVy
LCBsZW5ndGgsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90ZV9hZGRyLCAxLAorCQkJICAgICAg
ICAgICAgICAgICAgKHZvaWQgKikmc2VuZHZfc3BhLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qg
c2N0cF9zZW5kdl9zcGEpLCBTQ1RQX1NFTkRWX1NQQSwKKwkJCSAgICAgICAgICAgICAgICAgIDAp
IDwgMCkgeworCQkJCXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOworCQkJCWV4aXQoMSk7CisJCQl9
CisJCQltZXNzYWdlcysrOworCQl9CisJCWZyZWUgKGJ1ZmZlcik7CisKKwkJaWYgKHZlcmJvc2Up
IHsKKwkJCXByaW50ZigiQ2xvc2luZyBzb2NrZXQuXG4iKTsKKwkJfQorCisJCXVzcnNjdHBfY2xv
c2UocHNvY2spOworCQlnZXR0aW1lb2ZkYXkoJnRpbWVfbm93LCBOVUxMKTsKKwkJdGltZXJzdWIo
JnRpbWVfbm93LCAmdGltZV9zdGFydCwgJnRpbWVfZGlmZik7CisJCXNlY29uZHMgPSB0aW1lX2Rp
ZmYudHZfc2VjICsgKGRvdWJsZSl0aW1lX2RpZmYudHZfdXNlYy8xMDAwMDAwOworCQlwcmludGYo
IiVzIG9mICVsdSBtZXNzYWdlcyBvZiBsZW5ndGggJWQgdG9vayAlZiBzZWNvbmRzLlxuIiwKKwkJ
ICAgICAgICJTZW5kaW5nIiwgbWVzc2FnZXMsIGxlbmd0aCwgc2Vjb25kcyk7CisJCXRocm91Z2hw
dXQgPSAoZG91YmxlKW1lc3NhZ2VzICogKGRvdWJsZSlsZW5ndGggLyBzZWNvbmRzOworCQlwcmlu
dGYoIlRocm91Z2hwdXQgd2FzICVmIEJ5dGUvc2VjLlxuIiwgdGhyb3VnaHB1dCk7CisJfQorCisJ
d2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcCgx
MDAwKTsKKyNlbHNlCisJCXNsZWVwKDEpOworI2VuZGlmCisJfQorCXJldHVybiAwOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdHNjdHBfdXBjYWxsLmMgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9n
cmFtcy90c2N0cF91cGNhbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGNjNDgzNzIwODJhMDljYWRhYTY1ZTQy
OWYwMTQ2MWEzZTgxNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdHNj
dHBfdXBjYWxsLmMKQEAgLTAsMCArMSw3ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUt
MjAxMyBNaWNoYWVsIFR1ZXhlbgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgSXJlbmUgUnVl
bmdlbGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBGZWxpeCBXZWlucmFuaworICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m
IHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNU
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPHdpbnNvY2sy
Lmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl
IDxjcnRkYmcuaD4KKyNpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lz
L3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQu
aD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg
PHB0aHJlYWQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlv
Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8
c2lnbmFsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2lm
ZGVmIExJTlVYCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3Rw
Lmg+CisjaW5jbHVkZSAicHJvZ3JhbXNfaGVscGVyLmgiCisKKyNkZWZpbmUgVFNDVFBfQ0xJRU5U
IDEKKyNkZWZpbmUgVFNDVFBfU0VSVkVSIDIKKworI2RlZmluZSBERUZBVUxUX0xFTkdUSCAgICAg
ICAgICAgICAxMDI0CisjZGVmaW5lIERFRkFVTFRfTlVNQkVSX09GX01FU1NBR0VTIDEwMjQKKyNk
ZWZpbmUgREVGQVVMVF9QT1JUICAgICAgICAgICAgICAgNTAwMQorI2RlZmluZSBCVUZGRVJTSVpF
ICAgICAgICAgICAgICAgICAoMTw8MTYpCisKK3N0YXRpYyBpbnQgcGFyX3ZlcmJvc2UgPSAwOwor
c3RhdGljIGludCBwYXJfdmVyeV92ZXJib3NlID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZG9u
ZSA9IDA7CisKK3N0cnVjdCB0c2N0cF9tZXRhIHsKKwl1aW50OF90IHBhcl9yb2xlOworCXVpbnQ4
X3QgcGFyX3N0YXRzX2h1bWFuOworCXVpbnQ4X3QgcGFyX29yZGVyZWQ7CisJdWludDY0X3QgcGFy
X21lc3NhZ2VzOworCXVpbnQ2NF90IHBhcl9tZXNzYWdlX2xlbmd0aDsKKwl1aW50NjRfdCBwYXJf
cnVudGltZTsKKworCXVpbnQ2NF90IHN0YXRfbWVzc2FnZXM7CisJdWludDY0X3Qgc3RhdF9tZXNz
YWdlX2xlbmd0aDsKKwl1aW50NjRfdCBzdGF0X25vdGlmaWNhdGlvbnM7CisJdWludDY0X3Qgc3Rh
dF9yZWN2X2NhbGxzOworCXN0cnVjdCB0aW1ldmFsIHN0YXRfc3RhcnQ7CisKKwl1aW50NjRfdCBz
dGF0X2ZyYWdtZW50X3N1bTsKKworCWNoYXIgKmJ1ZmZlcjsKK307CisKKyNpZm5kZWYgdGltZXJz
dWIKKyNkZWZpbmUgdGltZXJzdWIodHZwLCB1dnAsIHZ2cCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKwlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorCQkodnZwKS0+dHZfc2VjID0gKHR2cCktPnR2X3NlYyAtICh1
dnApLT50dl9zZWM7ICAgIFwKKwkJKHZ2cCktPnR2X3VzZWMgPSAodHZwKS0+dHZfdXNlYyAtICh1
dnApLT50dl91c2VjOyBcCisJCWlmICgodnZwKS0+dHZfdXNlYyA8IDApIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorCQkJKHZ2cCktPnR2X3NlYy0tOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorCQkJKHZ2cCktPnR2X3VzZWMgKz0gMTAwMDAwMDsgICAgICAgICAgICAgICAgXAorCQl9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9IHdo
aWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyB2b2lkCitnZXR0aW1lb2Zk
YXkoc3RydWN0IHRpbWV2YWwgKnR2LCB2b2lkICppZ25vcmUpCit7CisJRklMRVRJTUUgZmlsZXRp
bWU7CisJVUxBUkdFX0lOVEVHRVIgdWxhcmdlOworCisJR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUo
JmZpbGV0aW1lKTsKKwl1bGFyZ2UuTG93UGFydCA9IGZpbGV0aW1lLmR3TG93RGF0ZVRpbWU7CisJ
dWxhcmdlLkhpZ2hQYXJ0ID0gZmlsZXRpbWUuZHdIaWdoRGF0ZVRpbWU7CisJLyogQ2hhbmdlIGJh
c2UgZnJvbSBKYW4gMSAxNjAxIDAwOjAwOjAwIHRvIEphbiAxIDE5NzAgMDA6MDA6MDAgKi8KKyNp
ZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorCXVsYXJnZS5RdWFkUGFydCAtPSAxMTY0NDQ3MzYwMDAw
MDAwMDBVTEw7CisjZWxzZQorCXVsYXJnZS5RdWFkUGFydCAtPSAxMTY0NDQ3MzYwMDAwMDAwMDBV
STY0OworI2VuZGlmCisJLyoKKwkgKiB1bGFyZ2UuUXVhZFBhcnQgaXMgbm93IHRoZSBudW1iZXIg
b2YgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzCisJICogc2luY2UgSmFuIDEgMTk3MCAwMDowMDow
MC4KKwkgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorCXR2LT50dl9zZWMgPSAobG9uZyko
dWxhcmdlLlF1YWRQYXJ0IC8gMTAwMDAwMDBVTEwpOworCXR2LT50dl91c2VjID0gKGxvbmcpKCh1
bGFyZ2UuUXVhZFBhcnQgJSAxMDAwMDAwMFVMTCkgLyAxMFVMTCk7CisjZWxzZQorCXR2LT50dl9z
ZWMgPSAobG9uZykodWxhcmdlLlF1YWRQYXJ0IC8gMTAwMDAwMDBVSTY0KTsKKwl0di0+dHZfdXNl
YyA9IChsb25nKSgodWxhcmdlLlF1YWRQYXJ0ICUgMTAwMDAwMDBVSTY0KSAvIDEwVUk2NCk7Cisj
ZW5kaWYKK30KKyNlbmRpZgorCisKK2NoYXIgVXNhZ2VbXSA9CisiVXNhZ2U6IHRzY3RwIFtvcHRp
b25zXSBbYWRkcmVzc11cbiIKKyJPcHRpb25zOlxuIgorIiAgICAgICAgLWEgICAgICAgICAgICAg
c2V0IGFkYXB0YXRpb24gbGF5ZXIgaW5kaWNhdGlvblxuIgorIiAgICAgICAgLUUgICAgICAgICAg
ICAgbG9jYWwgVURQIGVuY2Fwc3VsYXRpb24gcG9ydCAoZGVmYXVsdCA5ODk5KVxuIgorIiAgICAg
ICAgLWYgICAgICAgICAgICAgZnJhZ21lbnRhdGlvbiBwb2ludFxuIgorIiAgICAgICAgLUggICAg
ICAgICAgICAgaHVtYW4gcmVhZGFibGUgc3RhdGlzdGljcyIKKyIgICAgICAgIC1sICAgICAgICAg
ICAgIG1lc3NhZ2UgbGVuZ3RoXG4iCisiICAgICAgICAtTCAgICAgICAgICAgICBiaW5kIHRvIGxv
Y2FsIElQIChkZWZhdWx0IElOQUREUl9BTlkpXG4iCisiICAgICAgICAtbiAgICAgICAgICAgICBu
dW1iZXIgb2YgbWVzc2FnZXMgc2VudCAoMCBtZWFucyBpbmZpbml0ZSkvcmVjZWl2ZWRcbiIKKyIg
ICAgICAgIC1EICAgICAgICAgICAgIHR1cm5zIE5hZ2xlIG9mZlxuIgorIiAgICAgICAgLVIgICAg
ICAgICAgICAgc29ja2V0IHJlY3YgYnVmZmVyXG4iCisiICAgICAgICAtUyAgICAgICAgICAgICBz
b2NrZXQgc2VuZCBidWZmZXJcbiIKKyIgICAgICAgIC1UICAgICAgICAgICAgIHRpbWUgdG8gc2Vu
ZCBtZXNzYWdlc1xuIgorIiAgICAgICAgLXUgICAgICAgICAgICAgdXNlIHVub3JkZXJlZCB1c2Vy
IG1lc3NhZ2VzXG4iCisiICAgICAgICAtVSAgICAgICAgICAgICByZW1vdGUgVURQIGVuY2Fwc3Vs
YXRpb24gcG9ydFxuIgorIiAgICAgICAgLXYgICAgICAgICAgICAgdmVyYm9zZVxuIgorIiAgICAg
ICAgLVYgICAgICAgICAgICAgdmVyeSB2ZXJib3NlXG4iCis7CisKK3N0YXRpYyB2b2lkIGhhbmRs
ZV91cGNhbGwoc3RydWN0IHNvY2tldCAqdXBjYWxsX3NvY2tldCwgdm9pZCAqdXBjYWxsX2RhdGEs
IGludCB1cGNhbGxfZmxhZ3MpOworCitzdGF0aWMgY29uc3QgY2hhciAqYnl0ZXMyaHVtYW4odWlu
dDY0X3QgYnl0ZXMpCit7CisJY2hhciAqc3VmZml4W10gPSB7IiIsICJLIiwgIk0iLCAiRyIsICJU
In07CisJY2hhciBzdWZmaXhfbGVuZ3RoID0gc2l6ZW9mKHN1ZmZpeCkgLyBzaXplb2Yoc3VmZml4
WzBdKTsKKwlpbnQgaSA9IDA7CisJZG91YmxlIGh1bWFuX3NpemUgPSBieXRlczsKKwlzdGF0aWMg
Y2hhciBvdXRwdXRbMjAwXTsKKworCWlmIChieXRlcyA+IDEwMjQpIHsKKwkJZm9yIChpID0gMDsg
KGJ5dGVzIC8gMTAyNCkgPiAwICYmIGkgPCBzdWZmaXhfbGVuZ3RoIC0gMTsgaSsrKSB7CisJCQlo
dW1hbl9zaXplID0gYnl0ZXMgLyAxMDI0LjA7CisJCQlieXRlcyAvPSAxMDI0OworCQl9CisJfQor
CisJaWYgKHNucHJpbnRmKG91dHB1dCwgc2l6ZW9mKG91dHB1dCksICIlLjAybGYgJXMiLCBodW1h
bl9zaXplLCBzdWZmaXhbaV0pIDwgMCkgeworCQlvdXRwdXRbMF0gPSAnXDAnOworCX0KKwlyZXR1
cm4gb3V0cHV0OworfQorCisKK3N0YXRpYyB2b2lkCitoYW5kbGVfYWNjZXB0KHN0cnVjdCBzb2Nr
ZXQgKnVwY2FsbF9zb2NrZXQsIHZvaWQgKnVwY2FsbF9kYXRhLCBpbnQgdXBjYWxsX2ZsYWdzKQor
eworCXN0cnVjdCBzb2NrZXQgKmNvbm5fc29jazsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gcmVtb3Rl
X2FkZHI7CisJc29ja2xlbl90IGFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisJc3RydWN0IHRzY3RwX21ldGEgKm1ldGFfbGlzdGVuaW5nLCAqbWV0YV9hY2NlcHRlZDsKKwlj
aGFyIGFkZHJidWZbSU5FVF9BRERSU1RSTEVOXTsKKworCW1ldGFfbGlzdGVuaW5nID0gKHN0cnVj
dCB0c2N0cF9tZXRhICopIHVwY2FsbF9kYXRhOworCisJbWVtc2V0KCZyZW1vdGVfYWRkciwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCWlmICgoKGNvbm5fc29jayA9IHVzcnNjdHBf
YWNjZXB0KHVwY2FsbF9zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90ZV9hZGRyLCAm
YWRkcl9sZW4pKSA9PSBOVUxMKSAmJiAoZXJybm8gIT0gRUlOUFJPR1JFU1MpKSB7CisJCXBlcnJv
cigidXNyc2N0cF9hY2NlcHQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWlmIChw
YXJfdmVyYm9zZSkgeworCQlwcmludGYoIkNvbm5lY3Rpb24gYWNjZXB0ZWQgZnJvbSAlczolZFxu
IiwgaW5ldF9udG9wKEFGX0lORVQsICYocmVtb3RlX2FkZHIuc2luX2FkZHIpLCBhZGRyYnVmLCBJ
TkVUX0FERFJTVFJMRU4pLCBudG9ocyhyZW1vdGVfYWRkci5zaW5fcG9ydCkpOworCX0KKworCW1l
dGFfYWNjZXB0ZWQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0c2N0cF9tZXRhKSk7CisJaWYgKCFt
ZXRhX2FjY2VwdGVkKSB7CisJCXByaW50ZigibWFsbG9jKCkgZmFpbGVkIVxuIik7CisJCWV4aXQo
RVhJVF9GQUlMVVJFKTsKKwl9CisKKwltZW1zZXQobWV0YV9hY2NlcHRlZCwgMCwgc2l6ZW9mKHN0
cnVjdCB0c2N0cF9tZXRhKSk7CisKKwltZXRhX2FjY2VwdGVkLT5wYXJfcm9sZSA9IG1ldGFfbGlz
dGVuaW5nLT5wYXJfcm9sZTsKKwltZXRhX2FjY2VwdGVkLT5wYXJfc3RhdHNfaHVtYW4gPSBtZXRh
X2xpc3RlbmluZy0+cGFyX3N0YXRzX2h1bWFuOworCW1ldGFfYWNjZXB0ZWQtPmJ1ZmZlciA9IG1h
bGxvYyhCVUZGRVJTSVpFKTsKKworCWlmICghbWV0YV9hY2NlcHRlZC0+YnVmZmVyKSB7CisJCXBy
aW50ZigibWFsbG9jKCkgZmFpbGVkIVxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisK
Kwl1c3JzY3RwX3NldF91cGNhbGwoY29ubl9zb2NrLCBoYW5kbGVfdXBjYWxsLCBtZXRhX2FjY2Vw
dGVkKTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV91cGNhbGwoc3RydWN0IHNvY2tldCAqdXBj
YWxsX3NvY2tldCwgdm9pZCAqdXBjYWxsX2RhdGEsIGludCB1cGNhbGxfZmxhZ3MpCit7CisJaW50
IGV2ZW50cyA9IHVzcnNjdHBfZ2V0X2V2ZW50cyh1cGNhbGxfc29ja2V0KTsKKwlzdHJ1Y3QgdHNj
dHBfbWV0YSogdHNjdHBfbWV0YSA9IChzdHJ1Y3QgdHNjdHBfbWV0YSopIHVwY2FsbF9kYXRhOwor
CisJc3RydWN0IHNjdHBfcmVjdnZfcm4gcm47CisJc3NpemVfdCBuOworCXN0cnVjdCBzb2NrYWRk
cl9zdG9yYWdlIGFkZHI7CisJaW50IHJlY3ZfZmxhZ3MgPSAwOworCXNvY2tsZW5fdCBsZW4gPSAo
c29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSk7CisJdW5zaWduZWQgaW50
IGluZm90eXBlID0gMDsKKwlzb2NrbGVuX3QgaW5mb2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9y
ZWN2dl9ybik7CisJc3RydWN0IHNjdHBfcmN2aW5mbyAqcmN2aW5mbyA9IChzdHJ1Y3Qgc2N0cF9y
Y3ZpbmZvICopICZybjsKKwltZW1zZXQoJnJuLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZf
cm4pKTsKKwlzdHJ1Y3QgdGltZXZhbCBub3RlX3RpbWU7CisJdW5pb24gc2N0cF9ub3RpZmljYXRp
b24gKnNucDsKKwlzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgKnNwYzsKKwlzdHJ1Y3QgdGltZXZh
bCB0aW1lX25vdzsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX2RpZmY7CisJZmxvYXQgc2Vjb25kczsK
KwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZF9pbmZvOworCisJaWYgKGV2ZW50cyAmIFNDVFBfRVZF
TlRfUkVBRCkgeworCQl3aGlsZSAoKG4gPSB1c3JzY3RwX3JlY3Z2KHVwY2FsbF9zb2NrZXQsIHRz
Y3RwX21ldGEtPmJ1ZmZlciwgQlVGRkVSU0laRSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwg
JmxlbiwgKHZvaWQgKikmcm4sICZpbmZvbGVuLCAmaW5mb3R5cGUsICZyZWN2X2ZsYWdzKSkgPiAw
KSB7CisKKwkJCWlmICghdHNjdHBfbWV0YS0+c3RhdF9yZWN2X2NhbGxzKSB7CisJCQkJZ2V0dGlt
ZW9mZGF5KCZ0c2N0cF9tZXRhLT5zdGF0X3N0YXJ0LCBOVUxMKTsKKwkJCX0KKwkJCXRzY3RwX21l
dGEtPnN0YXRfcmVjdl9jYWxscysrOworCisJCQlpZiAocmVjdl9mbGFncyAmIE1TR19OT1RJRklD
QVRJT04pIHsKKwkJCQl0c2N0cF9tZXRhLT5zdGF0X25vdGlmaWNhdGlvbnMrKzsKKwkJCQlnZXR0
aW1lb2ZkYXkoJm5vdGVfdGltZSwgTlVMTCk7CisJCQkJaWYgKHBhcl92ZXJib3NlKSB7CisJCQkJ
CXByaW50Zigibm90aWZpY2F0aW9uIGFycml2ZWQgYXQgJWZcbiIsIG5vdGVfdGltZS50dl9zZWMg
KyAoZG91YmxlKW5vdGVfdGltZS50dl91c2VjIC8gMTAwMDAwMC4wKTsKKworCQkJCQlzbnAgPSAo
dW5pb24gc2N0cF9ub3RpZmljYXRpb24gKil0c2N0cF9tZXRhLT5idWZmZXI7CisJCQkJCWlmIChz
bnAtPnNuX2hlYWRlci5zbl90eXBlID09IFNDVFBfUEVFUl9BRERSX0NIQU5HRSkgeworCQkJCQkJ
c3BjID0gJnNucC0+c25fcGFkZHJfY2hhbmdlOworCQkJCQkJcHJpbnRmKCJTQ1RQX1BFRVJfQURE
Ul9DSEFOR0U6IHN0YXRlPSV1LCBlcnJvcj0ldVxuIixzcGMtPnNwY19zdGF0ZSwgc3BjLT5zcGNf
ZXJyb3IpOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAocGFyX3ZlcnlfdmVy
Ym9zZSkgeworCQkJCQlpZiAoaW5mb3R5cGUgPT0gU0NUUF9SRUNWVl9SQ1ZJTkZPKSB7CisJCQkJ
CQlwcmludGYoIk1lc3NhZ2UgcmVjZWl2ZWQgLSAlemQgYnl0ZXMgLSAlcyAtIHNpZCAldSAtIHRz
biAldSAlc1xuIiwKKwkJCQkJCQluLAorCQkJCQkJCShyY3ZpbmZvLT5yY3ZfZmxhZ3MgJiBTQ1RQ
X1VOT1JERVJFRCkgPyAidW5vcmRlcmVkIiA6ICJvcmRlcmVkIiwKKwkJCQkJCQlyY3ZpbmZvLT5y
Y3Zfc2lkLAorCQkJCQkJCXJjdmluZm8tPnJjdl90c24sCisJCQkJCQkJKHJlY3ZfZmxhZ3MgJiBN
U0dfRU9SKSA/ICItIEVPUiIgOiAiIgorCQkJCQkJKTsKKworCQkJCQl9IGVsc2UgeworCQkJCQkJ
cHJpbnRmKCJNZXNzYWdlIHJlY2VpdmVkIC0gJXpkIGJ5dGVzICVzXG4iLCBuLCAocmVjdl9mbGFn
cyAmIE1TR19FT1IpID8gIi0gRU9SIiA6ICIiKTsKKwkJCQkJfQorCQkJCX0KKwkJCQl0c2N0cF9t
ZXRhLT5zdGF0X2ZyYWdtZW50X3N1bSArPSBuOworCQkJCWlmIChyZWN2X2ZsYWdzICYgTVNHX0VP
UikgeworCQkJCQl0c2N0cF9tZXRhLT5zdGF0X21lc3NhZ2VzKys7CisJCQkJCWlmICh0c2N0cF9t
ZXRhLT5zdGF0X21lc3NhZ2VfbGVuZ3RoID09IDApIHsKKwkJCQkJCXRzY3RwX21ldGEtPnN0YXRf
bWVzc2FnZV9sZW5ndGggPSB0c2N0cF9tZXRhLT5zdGF0X2ZyYWdtZW50X3N1bTsKKwkJCQkJfQor
CQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChuIDwgMCAmJiBlcnJubyAhPSBFQUdBSU4gJiYgZXJy
bm8gIT0gRVdPVUxEQkxPQ0spIHsKKwkJCXBlcnJvcigidXNyc2N0cF9yZWN2diIpOworCQkJZXhp
dChFWElUX0ZBSUxVUkUpOworCQl9CisKKwkJaWYgKG4gPT0gMCkgeworCQkJZG9uZSA9IDE7CisK
KwkJCWdldHRpbWVvZmRheSgmdGltZV9ub3csIE5VTEwpOworCQkJdGltZXJzdWIoJnRpbWVfbm93
LCAmdHNjdHBfbWV0YS0+c3RhdF9zdGFydCwgJnRpbWVfZGlmZik7CisJCQlzZWNvbmRzID0gdGlt
ZV9kaWZmLnR2X3NlYyArIChkb3VibGUpdGltZV9kaWZmLnR2X3VzZWMgLyAxMDAwMDAwLjA7CisK
KwkJCWlmICh0c2N0cF9tZXRhLT5wYXJfc3RhdHNfaHVtYW4pIHsKKwkJCQlwcmludGYoIkNvbm5l
Y3Rpb24gY2xvc2VkIC0gc3RhdGlzdGljc1xuIik7CisKKwkJCQlwcmludGYoIlx0bWVzc2FnZSBz
aXplICA6ICUiIFBSSXU2NCAiXG4iLCB0c2N0cF9tZXRhLT5zdGF0X21lc3NhZ2VfbGVuZ3RoKTsK
KwkJCQlwcmludGYoIlx0bWVzc2FnZXMgICAgICA6ICUiIFBSSXU2NCAiXG4iLCB0c2N0cF9tZXRh
LT5zdGF0X21lc3NhZ2VzKTsKKwkJCQlwcmludGYoIlx0cmVjdigpIGNhbGxzICA6ICUiIFBSSXU2
NCAiXG4iLCB0c2N0cF9tZXRhLT5zdGF0X3JlY3ZfY2FsbHMpOworCQkJCXByaW50ZigiXHRub3Rp
ZmljYXRpb25zIDogJSIgUFJJdTY0ICJcbiIsIHRzY3RwX21ldGEtPnN0YXRfbm90aWZpY2F0aW9u
cyk7CisJCQkJcHJpbnRmKCJcdHRyYW5zZmVycmVkICAgOiAlc0J5dGVcbiIsIGJ5dGVzMmh1bWFu
KHRzY3RwX21ldGEtPnN0YXRfbWVzc2FnZV9sZW5ndGggKiB0c2N0cF9tZXRhLT5zdGF0X21lc3Nh
Z2VzKSk7CisJCQkJcHJpbnRmKCJcdHJ1bnRpbWUgICAgICAgOiAlLjJmIHNcbiIsIHNlY29uZHMp
OworCQkJCXByaW50ZigiXHRnb29kcHV0ICAgICAgIDogJXNCaXQvc1xuIiwgYnl0ZXMyaHVtYW4o
KGRvdWJsZSkgdHNjdHBfbWV0YS0+c3RhdF9tZXNzYWdlX2xlbmd0aCAqIChkb3VibGUpIHRzY3Rw
X21ldGEtPnN0YXRfbWVzc2FnZXMgLyBzZWNvbmRzICogOCkpOworCisJCQl9IGVsc2UgeworCQkJ
CXByaW50ZigiJSIgUFJJdTY0ICIsICUiIFBSSXU2NCAiLCAlIiBQUkl1NjQgIiwgJSIgUFJJdTY0
ICIsICVmLCAlZiwgJSIgUFJJdTY0ICJcbiIsCisJCQkJCQl0c2N0cF9tZXRhLT5zdGF0X21lc3Nh
Z2VfbGVuZ3RoLAorCQkJCQkJdHNjdHBfbWV0YS0+c3RhdF9tZXNzYWdlcywKKwkJCQkJCXRzY3Rw
X21ldGEtPnN0YXRfcmVjdl9jYWxscywKKwkJCQkJCXRzY3RwX21ldGEtPnN0YXRfbWVzc2FnZV9s
ZW5ndGggKiB0c2N0cF9tZXRhLT5zdGF0X21lc3NhZ2VzLAorCQkJCQkJc2Vjb25kcywKKwkJCQkJ
CShkb3VibGUpIHRzY3RwX21ldGEtPnN0YXRfbWVzc2FnZV9sZW5ndGggKiAoZG91YmxlKSB0c2N0
cF9tZXRhLT5zdGF0X21lc3NhZ2VzIC8gc2Vjb25kcywKKwkJCQkJCXRzY3RwX21ldGEtPnN0YXRf
bm90aWZpY2F0aW9ucyk7CisJCQl9CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCXVzcnNjdHBfY2xv
c2UodXBjYWxsX3NvY2tldCk7CisKKwkJCWZyZWUodHNjdHBfbWV0YS0+YnVmZmVyKTsKKwkJCWZy
ZWUodHNjdHBfbWV0YSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoKGV2ZW50cyAmIFND
VFBfRVZFTlRfV1JJVEUpICYmIHRzY3RwX21ldGEtPnBhcl9yb2xlID09IFRTQ1RQX0NMSUVOVCAm
JiAhZG9uZSkgeworCisJCW1lbXNldCgmc25kX2luZm8sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9z
bmRpbmZvKSk7CisJCWlmICh0c2N0cF9tZXRhLT5wYXJfb3JkZXJlZCA9PSAwKSB7CisJCQlzbmRf
aW5mby5zbmRfZmxhZ3MgfD0gU0NUUF9VTk9SREVSRUQ7CisJCX0KKworCQl3aGlsZSAoKG4gPSB1
c3JzY3RwX3NlbmR2KHVwY2FsbF9zb2NrZXQsIHRzY3RwX21ldGEtPmJ1ZmZlciwgdHNjdHBfbWV0
YS0+cGFyX21lc3NhZ2VfbGVuZ3RoLCBOVUxMLCAwLCAmc25kX2luZm8sIChzb2NrbGVuX3Qpc2l6
ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NORElORk8sIDApKSA+IDApIHsK
KwkJCWlmICh0c2N0cF9tZXRhLT5zdGF0X21lc3NhZ2VzID09IDApIHsKKwkJCQlnZXR0aW1lb2Zk
YXkoJnRzY3RwX21ldGEtPnN0YXRfc3RhcnQsIE5VTEwpOworCQkJfQorCQkJdHNjdHBfbWV0YS0+
c3RhdF9tZXNzYWdlcysrOworCisJCQlpZiAocGFyX3ZlcnlfdmVyYm9zZSkgeworCQkJCXByaW50
ZigiTWVzc2FnZSAjJSIgUFJJdTY0ICIgc2VudFxuIiwgdHNjdHBfbWV0YS0+c3RhdF9tZXNzYWdl
cyk7CisJCQl9CisKKwkJCWlmICh0c2N0cF9tZXRhLT5wYXJfbWVzc2FnZXMgJiYgdHNjdHBfbWV0
YS0+cGFyX21lc3NhZ2VzID09IHRzY3RwX21ldGEtPnN0YXRfbWVzc2FnZXMpIHsKKwkJCQlicmVh
azsKKwkJCX0KKwkJfQorCisJCWlmIChlcnJubyAhPSBFQUdBSU4gJiYgZXJybm8gIT0gRVdPVUxE
QkxPQ0spIHsKKwkJCWRvbmUgPSAxOworCQkJdXNyc2N0cF9jbG9zZSh1cGNhbGxfc29ja2V0KTsK
KwkJCXByaW50ZigiY2xpZW50IHNvY2tldCAlcCBjbG9zZWRcbiIsICh2b2lkICopdXBjYWxsX3Nv
Y2tldCk7CisJCQlmcmVlKHRzY3RwX21ldGEtPmJ1ZmZlcik7CisJCQlmcmVlKHRzY3RwX21ldGEp
OworCQkJcmV0dXJuOworCQl9CisKKwkJZ2V0dGltZW9mZGF5KCZ0aW1lX25vdywgTlVMTCk7CisJ
CXRpbWVyc3ViKCZ0aW1lX25vdywgJnRzY3RwX21ldGEtPnN0YXRfc3RhcnQsICZ0aW1lX2RpZmYp
OworCQlzZWNvbmRzID0gdGltZV9kaWZmLnR2X3NlYyArIChkb3VibGUpdGltZV9kaWZmLnR2X3Vz
ZWMgLyAxMDAwMDAwLjA7CisKKwkJaWYgKCh0c2N0cF9tZXRhLT5wYXJfbWVzc2FnZXMgJiYgdHNj
dHBfbWV0YS0+cGFyX21lc3NhZ2VzID09IHRzY3RwX21ldGEtPnN0YXRfbWVzc2FnZXMpIHx8CisJ
CQkodHNjdHBfbWV0YS0+cGFyX3J1bnRpbWUgJiYgdHNjdHBfbWV0YS0+cGFyX3J1bnRpbWUgPD0g
c2Vjb25kcykpIHsKKworCQkJaWYgKHBhcl92ZXJib3NlKSB7CisJCQkJcHJpbnRmKCJSdW50aW1l
IG9yIG1heCBtZXNzYWdlcyByZWFjaGVkIC0gZmluaXNoaW5nLi4uXG4iKTsKKwkJCX0KKworCQkJ
ZG9uZSA9IDE7CisJCQl1c3JzY3RwX2Nsb3NlKHVwY2FsbF9zb2NrZXQpOworCQkJZnJlZSh0c2N0
cF9tZXRhLT5idWZmZXIpOworCQkJZnJlZSh0c2N0cF9tZXRhKTsKKwkJCXJldHVybjsKKwkJfQor
CX0KKworCXJldHVybjsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorewor
I2lmbmRlZiBfV0lOMzIKKwlpbnQgYzsKKyNlbmRpZgorCXN0cnVjdCBzb2NrZXQgKnBzb2NrID0g
TlVMTDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9jYWxfYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJf
aW4gcmVtb3RlX2FkZHI7CisJaW50IG9wdHZhbDsKKwl1aW50MTZfdCBsb2NhbF9wb3J0OworCXVp
bnQxNl90IHJlbW90ZV9wb3J0OworCXVpbnQxNl90IGxvY2FsX3VkcF9wb3J0OworCXVpbnQxNl90
IHJlbW90ZV91ZHBfcG9ydDsKKwlpbnQgcmN2YnVmc2l6ZSA9IDA7CisJaW50IHNuZGJ1ZnNpemUg
PSAwOworCXNvY2tsZW5fdCBpbnRsZW47CisJaW50IG5vZGVsYXkgPSAwOworCXN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlIGF2OworCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyBlbmNhcHM7CisJc3RydWN0
IHRzY3RwX21ldGEgKm1ldGE7CisKKwl1aW50MTZfdCBwYXJfcG9ydCA9IERFRkFVTFRfUE9SVDsK
Kwl1aW50OF90IHBhcl9zdGF0c19odW1hbiA9IDA7CisJaW50IHBhcl9vcmRlcmVkID0gMTsKKwlp
bnQgcGFyX21lc3NhZ2VfbGVuZ3RoID0gREVGQVVMVF9MRU5HVEg7CisJaW50IHBhcl9tZXNzYWdl
cyA9IERFRkFVTFRfTlVNQkVSX09GX01FU1NBR0VTOworCWludCBwYXJfcnVudGltZSA9IDA7CisK
KyNpZmRlZiBfV0lOMzIKKwl1bnNpZ25lZCBsb25nIHNyY19hZGRyOworI2Vsc2UKKwlpbl9hZGRy
X3Qgc3JjX2FkZHI7CisjZW5kaWYKKwlpbnQgZnJhZ3BvaW50ID0gMDsKKwlzdHJ1Y3Qgc2N0cF9z
ZXRhZGFwdGF0aW9uIGluZCA9IHswfTsKKyNpZmRlZiBfV0lOMzIKKwljaGFyICpvcHQ7CisJaW50
IG9wdGluZDsKKyNlbmRpZgorCisJcmVtb3RlX3VkcF9wb3J0ID0gMDsKKwlsb2NhbF91ZHBfcG9y
dCA9IDk4OTk7CisJc3JjX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKworCW1lbXNldCgodm9p
ZCAqKSAmcmVtb3RlX2FkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwltZW1z
ZXQoKHZvaWQgKikgJmxvY2FsX2FkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsK
KworI2lmbmRlZiBfV0lOMzIKKwl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgImE6REU6
ZjpIbDpMOm46cDpSOlM6VDp1VTp2ViIpKSAhPSAtMSkKKwkJc3dpdGNoKGMpIHsKKwkJCWNhc2Ug
J2EnOgorCQkJCWluZC5zc2JfYWRhcHRhdGlvbl9pbmQgPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJl
YWs7CisJCQljYXNlICdEJzoKKwkJCQlub2RlbGF5ID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug
J0UnOgorCQkJCWxvY2FsX3VkcF9wb3J0ID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJ
Y2FzZSAnZic6CisJCQkJZnJhZ3BvaW50ID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJ
Y2FzZSAnSCc6CisJCQkJcGFyX3N0YXRzX2h1bWFuID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug
J2wnOgorCQkJCXBhcl9tZXNzYWdlX2xlbmd0aCA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsK
KwkJCWNhc2UgJ0wnOgorCQkJCWlmIChpbmV0X3B0b24oQUZfSU5FVCwgb3B0YXJnLCAmc3JjX2Fk
ZHIpICE9IDEpIHsKKwkJCQkJcHJpbnRmKCJDYW4ndCBwYXJzZSAlc1xuIiwgb3B0YXJnKTsKKwkJ
CQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgor
CQkJCXBhcl9tZXNzYWdlcyA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3An
OgorCQkJCXBhcl9wb3J0ID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnUic6
CisJCQkJcmN2YnVmc2l6ZSA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1Mn
OgorCQkJCXNuZGJ1ZnNpemUgPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdU
JzoKKwkJCQlwYXJfcnVudGltZSA9IGF0b2kob3B0YXJnKTsKKwkJCQlwYXJfbWVzc2FnZXMgPSAw
OworCQkJCWJyZWFrOworCQkJY2FzZSAndSc6CisJCQkJcGFyX29yZGVyZWQgPSAwOworCQkJCWJy
ZWFrOworCQkJY2FzZSAnVSc6CisJCQkJcmVtb3RlX3VkcF9wb3J0ID0gYXRvaShvcHRhcmcpOwor
CQkJCWJyZWFrOworCQkJY2FzZSAndic6CisJCQkJcGFyX3ZlcmJvc2UgPSAxOworCQkJCWJyZWFr
OworCQkJY2FzZSAnVic6CisJCQkJcGFyX3ZlcmJvc2UgPSAxOworCQkJCXBhcl92ZXJ5X3ZlcmJv
c2UgPSAxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVz
IiwgVXNhZ2UpOworCQkJCWV4aXQoMSk7CisJCX0KKyNlbHNlCisJZm9yIChvcHRpbmQgPSAxOyBv
cHRpbmQgPCBhcmdjOyBvcHRpbmQrKykgeworCQlpZiAoYXJndltvcHRpbmRdWzBdID09ICctJykg
eworCQkJc3dpdGNoIChhcmd2W29wdGluZF1bMV0pIHsKKwkJCQljYXNlICdhJzoKKwkJCQkJaWYg
KCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQll
eGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJaW5kLnNzYl9h
ZGFwdGF0aW9uX2luZCA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnRCc6CisJ
CQkJCW5vZGVsYXkgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlICdFJzoKKwkJCQkJaWYgKCsr
b3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQlleGl0
KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJbG9jYWxfdWRwX3Bv
cnQgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ2YnOgorCQkJCQlpZiAoKytv
cHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKKwkJCQkJCWV4aXQo
MSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJCQlmcmFncG9pbnQgPSBh
dG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ0gnOgorCQkJCQlwYXJfc3RhdHNfaHVt
YW4gPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlICdsJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49
IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJ
CQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJcGFyX21lc3NhZ2VfbGVuZ3RoID0g
YXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdMJzoKKwkJCQkJaWYgKCsrb3B0aW5k
ID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOwor
CQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJaW5ldF9wdG9uKEFGX0lORVQs
IG9wdCwgJnNyY19hZGRyKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnbic6CisJCQkJCWlmICgr
K29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhp
dCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCXBhcl9tZXNzYWdl
cyA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAncCc6CisJCQkJCWlmICgrK29w
dGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhpdCgx
KTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCXBhcl9wb3J0ID0gYXRv
aShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdSJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49
IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJ
CQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJcmN2YnVmc2l6ZSA9IGF0b2kob3B0
KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnUyc6CisJCQkJCWlmICgrK29wdGluZCA+PSBhcmdj
KSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQor
CQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCXNuZGJ1ZnNpemUgPSBhdG9pKG9wdCk7CisJ
CQkJCWJyZWFrOworCQkJCWNhc2UgJ1QnOgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgewor
CQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJ
b3B0ID0gYXJndltvcHRpbmRdOworCQkJCQlwYXJfcnVudGltZSA9IGF0b2kob3B0KTsKKwkJCQkJ
cGFyX21lc3NhZ2VzID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAndSc6CisJCQkJCXBhcl9v
cmRlcmVkID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnVSc6CisJCQkJCWlmICgrK29wdGlu
ZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhpdCgxKTsK
KwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCXJlbW90ZV91ZHBfcG9ydCA9
IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAndic6CisJCQkJCXBhcl92ZXJib3Nl
ID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnVic6CisJCQkJCXBhcl92ZXJib3NlID0gMTsK
KwkJCQkJcGFyX3ZlcnlfdmVyYm9zZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJ
CQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCWV4aXQoMSk7CisJCQl9CisJCX0gZWxzZSB7
CisJCQlicmVhazsKKwkJfQorCX0KKyNlbmRpZgorCisJbWV0YSA9IG1hbGxvYyhzaXplb2Yoc3Ry
dWN0IHRzY3RwX21ldGEpKTsKKwlpZiAoIW1ldGEpIHsKKwkJcHJpbnRmKCJtYWxsb2MoKSBmYWls
ZWQhXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCW1lbXNldChtZXRhLCAwLCBz
aXplb2Yoc3RydWN0IHRzY3RwX21ldGEpKTsKKworCW1ldGEtPmJ1ZmZlciA9IG1hbGxvYyhCVUZG
RVJTSVpFKTsKKwlpZiAoIW1ldGEtPmJ1ZmZlcikgeworCQlwcmludGYoIm1hbGxvYygpIGZhaWxl
ZCFcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJbWV0YS0+cGFyX3N0YXRzX2h1
bWFuID0gcGFyX3N0YXRzX2h1bWFuOworCW1ldGEtPnBhcl9tZXNzYWdlX2xlbmd0aCA9IHBhcl9t
ZXNzYWdlX2xlbmd0aDsKKwltZXRhLT5wYXJfbWVzc2FnZXMgPSBwYXJfbWVzc2FnZXM7CisJbWV0
YS0+cGFyX29yZGVyZWQgPSBwYXJfb3JkZXJlZDsKKwltZXRhLT5wYXJfcnVudGltZSA9IHBhcl9y
dW50aW1lOworCisJaWYgKG9wdGluZCA9PSBhcmdjKSB7CisJCW1ldGEtPnBhcl9yb2xlID0gVFND
VFBfU0VSVkVSOworCQlsb2NhbF9wb3J0ID0gcGFyX3BvcnQ7CisJCXJlbW90ZV9wb3J0ID0gMDsK
Kwl9IGVsc2UgeworCQltZXRhLT5wYXJfcm9sZSA9IFRTQ1RQX0NMSUVOVDsKKwkJbG9jYWxfcG9y
dCA9IDA7CisJCXJlbW90ZV9wb3J0ID0gcGFyX3BvcnQ7CisJfQorCWxvY2FsX2FkZHIuc2luX2Zh
bWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJbG9jYWxfYWRkci5zaW5fbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlsb2NhbF9hZGRyLnNpbl9w
b3J0ID0gaHRvbnMobG9jYWxfcG9ydCk7CisJbG9jYWxfYWRkci5zaW5fYWRkci5zX2FkZHIgPSBz
cmNfYWRkcjsKKworCXVzcnNjdHBfaW5pdChsb2NhbF91ZHBfcG9ydCwgTlVMTCwgZGVidWdfcHJp
bnRmX3N0YWNrKTsKKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
ZGVidWdfb24oU0NUUF9ERUJVR19BTEwpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3Nj
dHBfYmxhY2tob2xlKDIpOworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX25vX2NzdW1fb25fbG9v
cGJhY2soMCk7CisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRl
bHkoMSk7CisKKwlpZiAoIShwc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RS
RUFNLCBJUFBST1RPX1NDVFAsIE5VTEwsIE5VTEwsIDAsIE5VTEwpKSkgeworCQlwZXJyb3IoInVz
ZXJfc29ja2V0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlvcHR2YWwgPSAxOwor
CWlmICh1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRUNWUkNW
SU5GTywgJm9wdHZhbCwgc2l6ZW9mKG9wdHZhbCkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBf
c2V0c29ja29wdCBTQ1RQX1JFQ1ZSQ1ZJTkZPIik7CisJfQorCisJdXNyc2N0cF9zZXRfbm9uX2Js
b2NraW5nKHBzb2NrLCAxKTsKKworCWlmICh1c3JzY3RwX2JpbmQocHNvY2ssIChzdHJ1Y3Qgc29j
a2FkZHIgKikgJmxvY2FsX2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSAtMSkg
eworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCQlleGl0KDEpOworCX0KKworCWlmICh1c3Jz
Y3RwX3NldHNvY2tvcHQocHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9BREFQVEFUSU9OX0xBWUVS
LCAoY29uc3Qgdm9pZCopJmluZCwgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc2V0YWRh
cHRhdGlvbikpIDwgMCkgeworCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKKwl9CisKKwlpZiAobWV0
YS0+cGFyX3JvbGUgPT0gVFNDVFBfU0VSVkVSKSB7CisJCWlmIChyY3ZidWZzaXplKSB7CisJCQlp
ZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZyY3Zi
dWZzaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCQkJcGVycm9yKCJzZXRzb2Nrb3B0OiByY3Zi
dWYiKTsKKwkJCX0KKwkJfQorCQlpZiAocGFyX3ZlcmJvc2UpIHsKKwkJCWludGxlbiA9IHNpemVv
ZihpbnQpOworCQkJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChwc29jaywgU09MX1NPQ0tFVCwgU09f
UkNWQlVGLCAmcmN2YnVmc2l6ZSwgKHNvY2tsZW5fdCAqKSZpbnRsZW4pIDwgMCkgeworCQkJCXBl
cnJvcigiZ2V0c29ja29wdDogcmN2YnVmIik7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3Rk
b3V0LCAiUmVjZWl2ZSBidWZmZXIgc2l6ZTogJWQuXG4iLCByY3ZidWZzaXplKTsKKwkJCX0KKwkJ
fQorCisJCWlmICh1c3JzY3RwX2xpc3Rlbihwc29jaywgMSkgPCAwKSB7CisJCQlwZXJyb3IoInVz
cnNjdHBfbGlzdGVuIik7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKworCQl1c3JzY3Rw
X3NldF91cGNhbGwocHNvY2ssIGhhbmRsZV9hY2NlcHQsIG1ldGEpOworCisJCXdoaWxlICgxKSB7
CisjaWZkZWYgX1dJTjMyCisJCQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJCQlzbGVlcCgxKTsKKyNl
bmRpZgorCQl9CisKKwl9IGVsc2UgeworCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVj
dCBzY3RwX3VkcGVuY2FwcykpOworCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZf
SU5FVDsKKwkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMocmVtb3RlX3VkcF9wb3J0KTsKKwkJaWYg
KHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9VRFBf
RU5DQVBTX1BPUlQsIChjb25zdCB2b2lkKikmZW5jYXBzLCAoc29ja2xlbl90KXNpemVvZihzdHJ1
Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKKwkJCXBlcnJvcigic2V0c29ja29wdCIpOworCQl9
CisKKwkJcmVtb3RlX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5f
TEVOCisJCXJlbW90ZV9hZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsK
KyNlbmRpZgorCQlpZiAoIWluZXRfcHRvbihBRl9JTkVULCBhcmd2W29wdGluZF0sICZyZW1vdGVf
YWRkci5zaW5fYWRkci5zX2FkZHIpKXsKKwkJCXByaW50ZigiZXJyb3I6IGludmFsaWQgZGVzdGlu
YXRpb24gYWRkcmVzc1xuIik7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwkJcmVtb3Rl
X2FkZHIuc2luX3BvcnQgPSBodG9ucyhyZW1vdGVfcG9ydCk7CisKKwkJbWVtc2V0KG1ldGEtPmJ1
ZmZlciwgJ1gnLCBCVUZGRVJTSVpFKTsKKworCQl1c3JzY3RwX3NldF91cGNhbGwocHNvY2ssIGhh
bmRsZV91cGNhbGwsIG1ldGEpOworCisJCXVzcnNjdHBfc2V0c29ja29wdChwc29jaywgSVBQUk9U
T19TQ1RQLCBTQ1RQX05PREVMQVksICZub2RlbGF5LCBzaXplb2Yobm9kZWxheSkpOworCisJCWlm
IChmcmFncG9pbnQpIHsKKwkJCWF2LmFzc29jX2lkID0gMDsKKwkJCWF2LmFzc29jX3ZhbHVlID0g
ZnJhZ3BvaW50OworCQkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgSVBQUk9UT19TQ1RQ
LCBTQ1RQX01BWFNFRywgJmF2LCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8IDAp
IHsKKwkJCQlwZXJyb3IoInNldHNvY2tvcHQ6IFNDVFBfTUFYU0VHIik7CisJCQl9CisJCX0KKwor
CQlpZiAoc25kYnVmc2l6ZSkgeworCQkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgU09M
X1NPQ0tFVCwgU09fU05EQlVGLCAmc25kYnVmc2l6ZSwgc2l6ZW9mKGludCkpIDwgMCkgeworCQkJ
CXBlcnJvcigic2V0c29ja29wdDogc25kYnVmIik7CisJCQl9CisJCX0KKworCQlpZiAocGFyX3Zl
cmJvc2UpIHsKKwkJCWludGxlbiA9IHNpemVvZihpbnQpOworCQkJaWYgKHVzcnNjdHBfZ2V0c29j
a29wdChwc29jaywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmc25kYnVmc2l6ZSwgKHNvY2tsZW5f
dCAqKSZpbnRsZW4pIDwgMCkgeworCQkJCXBlcnJvcigic2V0c29ja29wdDogU09fU05EQlVGIik7
CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3Rkb3V0LCJTZW5kIGJ1ZmZlciBzaXplOiAlZC5c
biIsIHNuZGJ1ZnNpemUpOworCQkJfQorCQl9CisKKwkJaWYgKHVzcnNjdHBfY29ubmVjdChwc29j
aywgKHN0cnVjdCBzb2NrYWRkciAqKSAmcmVtb3RlX2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKSA9PSAtMSApIHsKKwkJCWlmIChlcnJubyAhPSBFSU5QUk9HUkVTUykgeworCQkJCXBl
cnJvcigidXNyc2N0cF9jb25uZWN0Iik7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQor
CQl9CisKKwkJd2hpbGUgKCFkb25lKSB7CisjaWZkZWYgX1dJTjMyCisJCQlTbGVlcCgxMDAwKTsK
KyNlbHNlCisJCQlzbGVlcCgxKTsKKyNlbmRpZgorCQl9CisKKwkJaWYgKHBhcl92ZXJib3NlKSB7
CisJCQlwcmludGYoIkZpbmlzaGVkLi4uIFxuIik7CisJCX0KKwl9CisKKwl3aGlsZSAodXNyc2N0
cF9maW5pc2goKSAhPSAwKSB7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEwMDApOworI2Vsc2UK
KwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL0NN
YWtlTGlzdHMudHh0CmluZGV4IGJkNzRhOTlmYTkyZWMwMzI1YmFlNDIzMTIxOWFjMmY0NTU5MjRh
OWQuLjg0NTc3MmZjNGYwNmMwMjUzNDI4M2I5MzE0OTk2ZTg1NjJkZGFjYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9DTWFrZUxpc3RzLnR4dApAQCAtMzQsMjMgKzM0LDM2IEBACiAjIElOQ0xVREUgTU9EVUxF
UyBBTkQgU0VUVElOR1MKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKIAotc2V0KFZFUlNJT04gIjEuMC4wIikKK3NldChWRVJTSU9OICIwLjkuNS4wIikK
KworIyBTaGFyZWQgbGlicmFyeSBBUEkgYW5kIEFCSSB2ZXJzaW9ucworIyBOb3RpY2U6IHNoYXJl
ZCBsaWJyYXJ5IHZlcnNpb24gbXVzdCBiZSBpbiBYLlkuWiBmb3JtYXQgb25seQorc2V0KFNPVkVS
U0lPTl9GVUxMICIyLjAuMCIpCitzZXQoU09WRVJTSU9OX1NIT1JUICIyIikKIAogaW5jbHVkZShH
TlVJbnN0YWxsRGlycykKLXNldChwcmVmaXggCQkJCQkke0NNQUtFX0lOU1RBTExfUFJFRklYfSkK
LXNldChleGVjX3ByZWZpeCAJCQkke3ByZWZpeH0pCi1zZXQobGliZGlyIAkJCQkJJHtleGVjX3By
ZWZpeH0vJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0pCi1zZXQoaW5jbHVkZWRpciAJCQkJJHtwcmVm
aXh9LyR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElSfS91c3JzY3RwKQorc2V0KHByZWZpeCAke0NN
QUtFX0lOU1RBTExfUFJFRklYfSkKK3NldChleGVjX3ByZWZpeCAke3ByZWZpeH0pCitzZXQobGli
ZGlyICR7ZXhlY19wcmVmaXh9LyR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9KQorc2V0KGluY2x1ZGVk
aXIgJHtwcmVmaXh9LyR7Q01BS0VfSU5TVEFMTF9JTkNMVURFRElSfSkKIAogc2V0KENNQUtFX1JF
UVVJUkVEX0lOQ0xVREVTICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKLXNldChDTUFLRV9N
QUNPU1hfUlBBVEggCQkxKQorc2V0KENNQUtFX01BQ09TWF9SUEFUSCAxKQogCiBpbmNsdWRlKENo
ZWNrQ0NvbXBpbGVyRmxhZykKIAorCitvcHRpb24oU0NUUF9VU0VfTUJFRFRMU19TSEExICJCdWls
ZCB3aXRoIG1iZWR0bHMgc2hhMSBzdXBwb3J0LiIgT0ZGKQorCiBhZGRfZGVmaW5pdGlvbnMoLURf
X1VzZXJzcGFjZV9fKQogYWRkX2RlZmluaXRpb25zKC1EU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQog
YWRkX2RlZmluaXRpb25zKC1EU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKQogCitpZihTQ1RQX1VT
RV9NQkVEVExTX1NIQTEpCisJYWRkX2RlZmluaXRpb25zKC1EU0NUUF9VU0VfTUJFRFRMU19TSEEx
KQorCWZpbmRfcGFja2FnZShNYmVkVExTIFJFUVVJUkVEKQorZW5kaWYoKQorCiAKICMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgT1MgREVQRU5ERU5U
CkBAIC0xNzEsMTMgKzE4NCwyMiBAQCBhZGRfbGlicmFyeSh1c3JzY3RwICR7dXNyc2N0cF9zb3Vy
Y2VzfSAke3VzcnNjdHBfaGVhZGVyc30pCiAKIHRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHVz
cnNjdHAgUFVCTElDICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKIAoraWYoU0NUUF9VU0Vf
TUJFRFRMU19TSEExKQorCXRhcmdldF9pbmNsdWRlX2RpcmVjdG9yaWVzKHVzcnNjdHAgUFJJVkFU
RSAke01CRURUTFNfSU5DTFVERV9ESVJTfSkKK2VuZGlmKCkKKwogaWYgKFdJTjMyKQogCW1lc3Nh
Z2UoU1RBVFVTICJsaW5rIGxpYnJhcnk6IHdzMl8zMiIpCiAJdGFyZ2V0X2xpbmtfbGlicmFyaWVz
KHVzcnNjdHAgd3MyXzMyIGlwaGxwYXBpKQogZW5kaWYgKCkKIAoraWYoU0NUUF9VU0VfTUJFRFRM
U19TSEExKQorCXRhcmdldF9saW5rX2xpYnJhcmllcyh1c3JzY3RwIFBSSVZBVEUgJHtNQkVEVExT
X0xJQlJBUklFU30pCitlbmRpZigpCisKKwogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHVzcnNjdHAg
UFJPUEVSVElFUyBJTVBPUlRfU1VGRklYICJfaW1wb3J0LmxpYiIpCi1zZXRfdGFyZ2V0X3Byb3Bl
cnRpZXModXNyc2N0cCBQUk9QRVJUSUVTIFNPVkVSU0lPTiAxIFZFUlNJT04gMS4wLjApCitzZXRf
dGFyZ2V0X3Byb3BlcnRpZXModXNyc2N0cCBQUk9QRVJUSUVTIFNPVkVSU0lPTiAke1NPVkVSU0lP
Tl9TSE9SVH0gVkVSU0lPTiAke1NPVkVSU0lPTl9GVUxMfSkKIAogIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBJTlNUQUxMIExJQlJBUlkgQU5EIEhF
QURFUgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9NYWtlZmlsZS5hbSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvTWFrZWZpbGUuYW0KaW5kZXggODUyNDBiN2NlYThmNjZiMDliMzVlZDA3
YjdkMmY2ZmVjZTljNTE3MS4uZGMwN2M2ZTE3ZmJjYjQ5YjQyNDRhNTVkNWU5MWEyOTQzN2QyYWI0
MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9NYWtlZmlsZS5hbQorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL01ha2VmaWxlLmFtCkBAIC03Niw2ICs3Niw2IEBAIGxpYnVzcnNjdHBf
bGFfU09VUkNFUyAgPSB1c2VyX2F0b21pYy5oIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXRpbmV0Ni9zY3RwNl92YXIuaCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldDYv
c2N0cDZfdXNycmVxLmMKIGxpYnVzcnNjdHBfbGFfQ0ZMQUdTID0gJChMSUJDRkxBR1MpCi1saWJ1
c3JzY3RwX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1pbmZvIDE6MDowCitsaWJ1c3JzY3RwX2xhX0xE
RkxBR1MgPSAtdmVyc2lvbi1pbmZvIDI6MDowCiBpbmNsdWRlX0hFQURFUlMgPSB1c3JzY3RwLmgK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIu
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2JzZF9hZGRyLmMKaW5kZXggZmE3
Yjg3NzY2YmQ0MmE5ZmM5NjI4NzcxYzYxNDQ1OTNkZmU3ZmE4Mi4uODMyMDE3MTJhNDczZmJmZTA1
NDUyOGZhMTkxOTY2YjNjNTljMDMxZiAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfYnNkX2FkZHIuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9ic2RfYWRkci5jCkBAIC0xOTUsNyArMTk1LDcgQEAgc2N0cF9zdGFydHVwX2l0ZXJhdG9y
KHZvaWQpCiAJa3Byb2NfY3JlYXRlKHNjdHBfaXRlcmF0b3JfdGhyZWFkLAogCSAgICAgICAgICAg
ICAodm9pZCAqKU5VTEwsCiAJICAgICAgICAgICAgICZzY3RwX2l0X2N0bC50aHJlYWRfcHJvYywK
LQkgICAgICAgICAgICAgUkZQUk9DLAorCSAgICAgICAgICAgICAwLAogCSAgICAgICAgICAgICBT
Q1RQX0tUSFJFQURfUEFHRVMsCiAJICAgICAgICAgICAgIFNDVFBfS1RSSEVBRF9OQU1FKTsKICNl
bGlmIGRlZmluZWQoX19BUFBMRV9fKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfY29uc3RhbnRzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9jb25zdGFudHMuaAppbmRleCBiOGUyZjJkNTgxZjNiMjY2NjU2OTQ2NWIyYWY2ZDJmMGRiZjdi
MTY3Li5iZTIwMjhlYjI3NTFhMmYxYWEwYjJkNWIxZDQ1ZjFkYzlmYWNhNWI3IDEwMDc1NQotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jb25zdGFudHMuaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jb25zdGFudHMuaApAQCAtMzQsNyArMzQsNyBA
QAogCiAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
ICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0
aW5ldC9zY3RwX2NvbnN0YW50cy5oIDM2NTA3MSAyMDIwLTA5LTAxIDIxOjE5OjE0WiBtamcgJCIp
OworX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2VuZGlmCiAKICNpZm5kZWYgX05FVElORVRfU0NU
UF9DT05TVEFOVFNfSF8KQEAgLTYxMCw3ICs2MTAsNyBAQCBleHRlcm4gdm9pZCBnZXR3aW50aW1l
b2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KTsKIAogI2RlZmluZSBTQ1RQX1JUT19VUFBFUl9CT1VO
RAkoNjAwMDApCS8qIDYwIHNlYyBpbiBtcyAqLwogI2RlZmluZSBTQ1RQX1JUT19MT1dFUl9CT1VO
RAkoMTAwMCkJLyogMSBzZWMgaXMgbXMgKi8KLSNkZWZpbmUgU0NUUF9SVE9fSU5JVElBTAkoMzAw
MCkJLyogMyBzZWMgaW4gbXMgKi8KKyNkZWZpbmUgU0NUUF9SVE9fSU5JVElBTAkoMTAwMCkJLyog
MSBzZWMgaW4gbXMgKi8KIAogI2RlZmluZSBTQ1RQX0lOUF9LSUxMX1RJTUVPVVQgMjAJLyogbnVt
YmVyIG9mIG1zIHRvIHJldHJ5IGtpbGwgb2YgaW5wY2IgKi8KICNkZWZpbmUgU0NUUF9BU09DX0tJ
TExfVElNRU9VVCAxMAkvKiBudW1iZXIgb2YgbXMgdG8gcmV0cnkga2lsbCBvZiBpbnBjYiAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5kYXRhLmMgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbmRhdGEuYwppbmRleCAzYmNlOWU5OWE2
NmEwMjNiNzdiMTQ1MzNmOGQzMGIxYjBlMzQ1NTdhLi5mZWRjMTRmMGUwYjA2ZmZiNmE1NWM1ZmI1
YzRjY2ZhM2FiMmVmYzhhIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9pbmRhdGEuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbmRh
dGEuYwpAQCAtMzQsNyArMzQsNyBAQAogCiAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIk
RnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2luZGF0YS5jIDM2NzUyMCAyMDIwLTExLTA5
IDEzOjEyOjA3WiB0dWV4ZW4gJCIpOworX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2VuZGlmCiAK
ICNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KQEAgLTgzOCw3ICs4MzgsNyBAQCByZXN0YXJ0
OgogCQkJfQogCQkJbWVtc2V0KG5jLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfcXVldWVkX3RvX3Jl
YWQpKTsKIAkJCVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVhc20sIGNoaywgc2N0cF9uZXh0KTsK
LQkJCXNjdHBfYWRkX2Noa190b19jb250cm9sKGNvbnRyb2wsIHN0cm0sIHN0Y2IsIGFzb2MsIGNo
aywgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQpOworCQkJc2N0cF9hZGRfY2hrX3RvX2NvbnRyb2wo
Y29udHJvbCwgc3RybSwgc3RjYiwgYXNvYywgY2hrLCBpbnBfcmVhZF9sb2NrX2hlbGQpOwogCQkJ
ZnNuKys7CiAJCQljbnRfYWRkZWQrKzsKIAkJCWNoayA9IE5VTEw7CkBAIC05MjcsNyArOTI3LDcg
QEAgcmVzdGFydDoKIAl9CiAJaWYgKGNudF9hZGRlZCAmJiBzdHJtLT5wZF9hcGlfc3RhcnRlZCkg
ewogI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJc2N0cF9pbnZva2VfcmVjdl9jYWxsYmFj
ayhzdGNiLT5zY3RwX2VwLCBzdGNiLCBjb250cm9sLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCk7
CisJCXNjdHBfaW52b2tlX3JlY3ZfY2FsbGJhY2soc3RjYi0+c2N0cF9lcCwgc3RjYiwgY29udHJv
bCwgaW5wX3JlYWRfbG9ja19oZWxkKTsKICNlbmRpZgogCQlzY3RwX3dha2V1cF90aGVfcmVhZF9z
b2NrZXQoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKIAl9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5jIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYwppbmRleCAyODljNjVjNjFkN2QyNmU4
ODc5NmY3MWUxZGYwOTNhMDUxYjkwODZhLi5mYjZlNGMyM2ViODEyMzcxYmNkYWJiODlkMGQxZjg2
Mjc0Y2Q2MGJhIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9p
bnB1dC5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmMKQEAg
LTM0LDcgKzM0LDcgQEAKIAogI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6
IGhlYWQvc3lzL25ldGluZXQvc2N0cF9pbnB1dC5jIDM2ODYyMiAyMDIwLTEyLTEzIDIzOjUxOjUx
WiB0dWV4ZW4gJCIpOworX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2VuZGlmCiAKICNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfb3MuaD4KQEAgLTEwOCw1NyArMTA4LDEyIEBAIHNjdHBfaGFuZGxlX2lu
aXQoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCiAJaWYgKHN0Y2IgPT0g
TlVMTCkgewogCQlTQ1RQX0lOUF9STE9DSyhpbnApOwogCX0KLQkvKiB2YWxpZGF0ZSBsZW5ndGgg
Ki8KLQlpZiAobnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgPCBzaXplb2Yoc3RydWN0IHNjdHBf
aW5pdF9jaHVuaykpIHsKLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNF
X0lOVkFMSURfUEFSQU0sICIiKTsKLQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihpbnAsIHN0Y2Is
IG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJICAgICAgICAgICAgICAgICAgICAgICBt
Zmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJCQkgICAgICAgdnJmX2lkLCBwb3J0KTsKLQkJ
aWYgKHN0Y2IpCi0JCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJZ290byBvdXRub3c7Ci0JfQot
CS8qIHZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KKwkvKiBWYWxpZGF0ZSBwYXJhbWV0ZXJzICovCiAJ
aW5pdCA9ICZjcC0+aW5pdDsKLQlpZiAoaW5pdC0+aW5pdGlhdGVfdGFnID09IDApIHsKLQkJLyog
cHJvdG9jb2wgZXJyb3IuLi4gc2VuZCBhYm9ydCAqLwotCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRl
X2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOwotCQlzY3RwX2Fib3J0X2Fzc29j
aWF0aW9uKGlucCwgc3RjYiwgbSwgaXBobGVuLCBzcmMsIGRzdCwgc2gsIG9wX2VyciwKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkgICAgICAg
ICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNlbmRpZgotCQkJCSAgICAgICB2
cmZfaWQsIHBvcnQpOwotCQlpZiAoc3RjYikKLQkJCSphYm9ydF9ub191bmxvY2sgPSAxOwotCQln
b3RvIG91dG5vdzsKLQl9Ci0JaWYgKG50b2hsKGluaXQtPmFfcnduZCkgPCBTQ1RQX01JTl9SV05E
KSB7Ci0JCS8qIGludmFsaWQgcGFyYW1ldGVyLi4uIHNlbmQgYWJvcnQgKi8KLQkJb3BfZXJyID0g
c2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICIiKTsKLQkJc2N0
cF9hYm9ydF9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCBv
cF9lcnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKLQkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYK
LQkJCQkgICAgICAgdnJmX2lkLCBwb3J0KTsKLQkJaWYgKHN0Y2IpCi0JCQkqYWJvcnRfbm9fdW5s
b2NrID0gMTsKLQkJZ290byBvdXRub3c7Ci0JfQotCWlmIChpbml0LT5udW1faW5ib3VuZF9zdHJl
YW1zID09IDApIHsKLQkJLyogcHJvdG9jb2wgZXJyb3IuLi4gc2VuZCBhYm9ydCAqLwotCQlvcF9l
cnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOwot
CQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgbSwgaXBobGVuLCBzcmMsIGRzdCwg
c2gsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQotCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNl
bmRpZgotCQkJCSAgICAgICB2cmZfaWQsIHBvcnQpOwotCQlpZiAoc3RjYikKLQkJCSphYm9ydF9u
b191bmxvY2sgPSAxOwotCQlnb3RvIG91dG5vdzsKLQl9Ci0JaWYgKGluaXQtPm51bV9vdXRib3Vu
ZF9zdHJlYW1zID09IDApIHsKKwlpZiAoKG50b2hsKGluaXQtPmluaXRpYXRlX3RhZykgPT0gMCkg
fHwKKwkgICAgKG50b2hsKGluaXQtPmFfcnduZCkgPCBTQ1RQX01JTl9SV05EKSB8fAorCSAgICAo
bnRvaHMoaW5pdC0+bnVtX2luYm91bmRfc3RyZWFtcykgPT0gMCkgfHwKKwkgICAgKG50b2hzKGlu
aXQtPm51bV9vdXRib3VuZF9zdHJlYW1zKSA9PSAwKSkgewogCQkvKiBwcm90b2NvbCBlcnJvci4u
LiBzZW5kIGFib3J0ICovCiAJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVT
RV9JTlZBTElEX1BBUkFNLCAiIik7CiAJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBzdGNi
LCBtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgb3BfZXJyLApAQCAtNTE0LDI2ICs0NjksMzQgQEAg
c2N0cF9wcm9jZXNzX2luaXRfYWNrKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zm
c2V0LAogCWFzb2MgPSAmc3RjYi0+YXNvYzsKIAlhc29jLT5wZWVyX3N1cHBvcnRzX25hdCA9ICh1
aW50OF90KW5hdF9mcmllbmRseTsKIAkvKiBwcm9jZXNzIHRoZSBwZWVyJ3MgcGFyYW1ldGVycyBp
biB0aGUgSU5JVC1BQ0sgKi8KLQlyZXR2YWwgPSBzY3RwX3Byb2Nlc3NfaW5pdCgoc3RydWN0IHNj
dHBfaW5pdF9jaHVuayAqKWNwLCBzdGNiKTsKLQlpZiAocmV0dmFsIDwgMCkgeworCWlmIChzY3Rw
X3Byb2Nlc3NfaW5pdCgoc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqKWNwLCBzdGNiKSA8IDApIHsK
IAkJaWYgKG9wX2VyciAhPSBOVUxMKSB7CiAJCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKIAkJfQot
CQlyZXR1cm4gKHJldHZhbCk7CisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9D
QVVTRV9PVVRfT0ZfUkVTQywgIiIpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAic2N0
cF9wcm9jZXNzX2luaXQoKSBmYWlsZWRcbiIpOworCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICBz
cmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZs
b3dpZCwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0
KTsKKwkJKmFib3J0X25vX3VubG9jayA9IDE7CisJCXJldHVybiAoLTEpOwogCX0KIAlpbml0YWNr
X2xpbWl0ID0gb2Zmc2V0ICsgbnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCk7CiAJLyogbG9hZCBh
bGwgYWRkcmVzc2VzICovCiAJaWYgKChyZXR2YWwgPSBzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21f
aW5pdChzdGNiLCBtLAotCSAgICAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1
bmspKSwgaW5pdGFja19saW1pdCwKLQkgICAgc3JjLCBkc3QsIE5VTEwsIHN0Y2ItPmFzb2MucG9y
dCkpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZz
ZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayksCisJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0YWNrX2xpbWl0LCBzcmMsIGRzdCwgTlVMTCwg
c3RjYi0+YXNvYy5wb3J0KSkgPCAwKSB7CiAJCWlmIChvcF9lcnIgIT0gTlVMTCkgewogCQkJc2N0
cF9tX2ZyZWVtKG9wX2Vycik7CiAJCX0KIAkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAogCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJQcm9ibGVtIHdpdGggYWRkcmVzcyBwYXJhbWV0ZXJzIik7CiAJCVNDVFBE
QkcoU0NUUF9ERUJVR19JTlBVVDEsCi0JCQkiTG9hZCBhZGRyZXNzZXMgZnJvbSBJTklUIGNhdXNl
cyBhbiBhYm9ydCAlZFxuIiwKLQkJCXJldHZhbCk7CisJCSAgICAgICAgIkxvYWQgYWRkcmVzc2Vz
IGZyb20gSU5JVCBjYXVzZXMgYW4gYWJvcnQgJWRcbiIsCisJCSAgICAgICAgcmV0dmFsKTsKIAkJ
c2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBtLCBpcGhsZW4sCiAJ
CSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCiAjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKQEAgLTE0MjAsNTcgKzEz
ODMsMTIgQEAgc2N0cF9oYW5kbGVfaW5pdF9hY2soc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4s
IGludCBvZmZzZXQsCiAJCQkic2N0cF9oYW5kbGVfaW5pdF9hY2s6IFRDQiBpcyBudWxsXG4iKTsK
IAkJcmV0dXJuICgtMSk7CiAJfQotCWlmIChudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSA8IHNp
emVvZihzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuaykpIHsKLQkJLyogSW52YWxpZCBsZW5ndGgg
Ki8KLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFS
QU0sICIiKTsKLQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBt
LCBpcGhsZW4sCi0JCSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIs
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJ
ICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJICAg
ICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7Ci0JCSphYm9ydF9ub191bmxv
Y2sgPSAxOwotCQlyZXR1cm4gKC0xKTsKLQl9CiAJaW5pdF9hY2sgPSAmY3AtPmluaXQ7Ci0JLyog
dmFsaWRhdGUgcGFyYW1ldGVycyAqLwotCWlmIChpbml0X2Fjay0+aW5pdGlhdGVfdGFnID09IDAp
IHsKLQkJLyogcHJvdG9jb2wgZXJyb3IuLi4gc2VuZCBhbiBhYm9ydCAqLwotCQlvcF9lcnIgPSBz
Y3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOwotCQlzY3Rw
X2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKLQkJICAg
ICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkgICAgICAgICAgICAgICAg
ICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAg
ICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKLQkJKmFib3J0X25vX3VubG9jayA9IDE7Ci0JCXJldHVy
biAoLTEpOwotCX0KLQlpZiAobnRvaGwoaW5pdF9hY2stPmFfcnduZCkgPCBTQ1RQX01JTl9SV05E
KSB7Ci0JCS8qIHByb3RvY29sIGVycm9yLi4uIHNlbmQgYW4gYWJvcnQgKi8KLQkJb3BfZXJyID0g
c2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICIiKTsKLQkJc2N0
cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBtLCBpcGhsZW4sCi0JCSAg
ICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJICAgICAgICAgICAgICAg
ICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJICAgICAgICAgICAgICAgICAg
ICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7Ci0JCSphYm9ydF9ub191bmxvY2sgPSAxOwotCQlyZXR1
cm4gKC0xKTsKLQl9Ci0JaWYgKGluaXRfYWNrLT5udW1faW5ib3VuZF9zdHJlYW1zID09IDApIHsK
LQkJLyogcHJvdG9jb2wgZXJyb3IuLi4gc2VuZCBhbiBhYm9ydCAqLwotCQlvcF9lcnIgPSBzY3Rw
X2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOwotCQlzY3RwX2Fi
b3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKLQkJICAgICAg
ICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkgICAgICAgICAgICAgICAgICAg
ICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAgICAg
IHZyZl9pZCwgbmV0LT5wb3J0KTsKLQkJKmFib3J0X25vX3VubG9jayA9IDE7Ci0JCXJldHVybiAo
LTEpOwotCX0KLQlpZiAoaW5pdF9hY2stPm51bV9vdXRib3VuZF9zdHJlYW1zID09IDApIHsKKwkv
KiBWYWxpZGF0ZSBwYXJhbWV0ZXJzLiAqLworCWlmICgobnRvaGwoaW5pdF9hY2stPmluaXRpYXRl
X3RhZykgPT0gMCkgfHwKKwkgICAgKG50b2hsKGluaXRfYWNrLT5hX3J3bmQpIDwgU0NUUF9NSU5f
UldORCkgfHwKKwkgICAgKG50b2hzKGluaXRfYWNrLT5udW1faW5ib3VuZF9zdHJlYW1zKSA9PSAw
KSB8fAorCSAgICAobnRvaHMoaW5pdF9hY2stPm51bV9vdXRib3VuZF9zdHJlYW1zKSA9PSAwKSkg
ewogCQkvKiBwcm90b2NvbCBlcnJvci4uLiBzZW5kIGFuIGFib3J0ICovCiAJCW9wX2VyciA9IHNj
dHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAiIik7CiAJCXNjdHBf
YWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgbSwgaXBobGVuLApAQCAtMTYy
NCw2ICsxNTQyLDcgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1Y3QgbWJ1ZiAq
bSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKIAkJICAgICAgICAgICAgICAgICAgIHZyZl9pZCwg
bmV0LT5wb3J0KTsKIAkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQog
CQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAyOworCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CiAJCXJldHVybiAoTlVMTCk7CiAJfQogCS8qCkBAIC0xNjM4LDkgKzE1NTcsMTEgQEAgc2N0
cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50
IG9mZnNldCwKIAkJCSAgICAgICh1aW50OF90ICopICYgaW5pdF9idWYpOwogCWlmIChpbml0X2Nw
ID09IE5VTEwpIHsKIAkJLyogY291bGQgbm90IHB1bGwgYSBJTklUIGNodW5rIGluIGNvb2tpZSAq
LworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CiAJCXJldHVybiAoTlVMTCk7CiAJfQogCWlmIChp
bml0X2NwLT5jaC5jaHVua190eXBlICE9IFNDVFBfSU5JVElBVElPTikgeworCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CiAJCXJldHVybiAoTlVMTCk7CiAJfQogCS8qCkBAIC0xNjUzLDkgKzE1NzQs
MTEgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlw
aGxlbiwgaW50IG9mZnNldCwKIAkJCSAgICAgICh1aW50OF90ICopICYgaW5pdGFja19idWYpOwog
CWlmIChpbml0YWNrX2NwID09IE5VTEwpIHsKIAkJLyogY291bGQgbm90IHB1bGwgSU5JVC1BQ0sg
Y2h1bmsgaW4gY29va2llICovCisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKIAkJcmV0dXJuIChO
VUxMKTsKIAl9CiAJaWYgKGluaXRhY2tfY3AtPmNoLmNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFU
SU9OX0FDSykgeworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CiAJCXJldHVybiAoTlVMTCk7CiAJ
fQogCWlmICgobnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWF0ZV90YWcpID09IGFzb2MtPm15
X3Z0YWcpICYmCkBAIC0xNjgxLDYgKzE2MDQsNyBAQCBzY3RwX3Byb2Nlc3NfY29va2llX2V4aXN0
aW5nKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogCQkJICovCiAJCQlp
ZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCiAJCQkJYXNvYy0+Y29va2ll
X2hvd1tob3dfaW5keF0gPSAxNzsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKIAkJCXJldHVy
biAoTlVMTCk7CiAJCX0KIAkJc3dpdGNoIChTQ1RQX0dFVF9TVEFURShzdGNiKSkgewpAQCAtMTY5
MywxMCArMTYxNywxNyBAQCBzY3RwX3Byb2Nlc3NfY29va2llX2V4aXN0aW5nKHN0cnVjdCBtYnVm
ICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogCQkJCSAqIGhhdmUgdGhlIHJpZ2h0IHNlcSBu
bydzLgogCQkJCSAqLwogCQkJCS8qIEZpcnN0IHdlIG11c3QgcHJvY2VzcyB0aGUgSU5JVCAhISAq
LwotCQkJCXJldHZhbCA9IHNjdHBfcHJvY2Vzc19pbml0KGluaXRfY3AsIHN0Y2IpOwotCQkJCWlm
IChyZXR2YWwgPCAwKSB7CisJCQkJaWYgKHNjdHBfcHJvY2Vzc19pbml0KGluaXRfY3AsIHN0Y2Ip
IDwgMCkgewogCQkJCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCiAJ
CQkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDM7CisJCQkJCW9wX2VyciA9IHNjdHBf
Z2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIpOworCQkJCQlTQ1RQREJH
KFNDVFBfREVCVUdfSU5QVVQxLCAic2N0cF9wcm9jZXNzX2luaXQoKSBmYWlsZWRcbiIpOworCQkJ
CQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwK
KwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKIAkJCQkJcmV0dXJuIChOVUxM
KTsKIAkJCQl9CiAJCQkJLyogd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGUgSU5JVCBzbyBu
byBwcm9ibGVtICovCkBAIC0xNzQxLDYgKzE2NzIsNyBAQCBzY3RwX3Byb2Nlc3NfY29va2llX2V4
aXN0aW5nKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogCQkJCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOwogCQkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQs
IC0xKTsKIAkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NL
RVQpIHsKKwkJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKIAkJCQkJCVNDVFBfU09DS0VUX1VO
TE9DSyhzbywgMSk7CiAJCQkJCQlyZXR1cm4gKE5VTEwpOwogCQkJCQl9CkBAIC0xNzc2LDE2ICsx
NzA4LDIyIEBAIHNjdHBfcHJvY2Vzc19jb29raWVfZXhpc3Rpbmcoc3RydWN0IG1idWYgKm0sIGlu
dCBpcGhsZW4sIGludCBvZmZzZXQsCiAJCQkJYnJlYWs7CiAJCX0JLyogZW5kIHN3aXRjaCAqLwog
CQlzY3RwX3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7Ci0JCS8qCi0JCSAqIFdlIGlnbm9y
ZSB0aGUgcmV0dXJuIGNvZGUgaGVyZS4uIG5vdCBzdXJlIGlmIHdlIHNob3VsZAotCQkgKiBzb21l
aG93IGFib3J0Li4gYnV0IHdlIGRvIGhhdmUgYW4gZXhpc3RpbmcgYXNvYy4gVGhpcwotCQkgKiBy
ZWFsbHkgc2hvdWxkIG5vdCBmYWlsLgotCQkgKi8KLQkJaWYgKHNjdHBfbG9hZF9hZGRyZXNzZXNf
ZnJvbV9pbml0KHN0Y2IsIG0sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfb2Zm
c2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLAotCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbml0YWNrX29mZnNldCwgc3JjLCBkc3QsIGluaXRfc3JjLCBzdGNiLT5hc29j
LnBvcnQpKSB7CisJCWlmICgocmV0dmFsID0gc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQo
c3RjYiwgbSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfb2Zm
c2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLAorCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0LCBpbml0X3NyYywg
c3RjYi0+YXNvYy5wb3J0KSkgPCAwKSB7CiAJCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+
Y29va2llX2hvdykpCiAJCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSA0OworCQkJb3Bf
ZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZv
X2NvZGUpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvYmxlbSB3aXRoIGFk
ZHJlc3MgcGFyYW1ldGVycyIpOworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwKKwkJCSAg
ICAgICAgIkxvYWQgYWRkcmVzc2VzIGZyb20gSU5JVCBjYXVzZXMgYW4gYWJvcnQgJWRcbiIsCisJ
CQkgICAgICAgIHJldHZhbCk7CisJCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3Qs
IHNoLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAor
I2VuZGlmCisJCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKIAkJ
CXJldHVybiAoTlVMTCk7CiAJCX0KIAkJLyogcmVzcG9uZCB3aXRoIGEgQ09PS0lFLUFDSyAqLwpA
QCAtMTgwNSw2ICsxNzQzLDcgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1Y3Qg
bWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKIAkJICovCiAJCWlmIChob3dfaW5keCA8
IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKIAkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhd
ID0gNjsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KIAkv
KiBJZiBuYXQgc3VwcG9ydCwgYW5kIHRoZSBiZWxvdyBhbmQgc3RjYiBpcyBlc3RhYmxpc2hlZCwK
QEAgLTE4MzAsNiArMTc2OSw3IEBAIHNjdHBfcHJvY2Vzc19jb29raWVfZXhpc3Rpbmcoc3RydWN0
IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCiAJCSAgICAgICAgICAgICAgICBtZmxv
d3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAogI2VuZGlmCiAJCSAgICAgICAgICAgICAgICB2
cmZfaWQsIHBvcnQpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CiAJCXJldHVybiAoTlVMTCk7
CiAJfQogCWlmICgobnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWF0ZV90YWcpID09IGFzb2Mt
Pm15X3Z0YWcpICYmCkBAIC0xODU5LDYgKzE3OTksNyBAQCBzY3RwX3Byb2Nlc3NfY29va2llX2V4
aXN0aW5nKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogCQkJaWYgKGhv
d19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQogCQkJCWFzb2MtPmNvb2tpZV9ob3db
aG93X2luZHhdID0gNzsKIAorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwogCQkJcmV0dXJuIChO
VUxMKTsKIAkJfQogCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCkBA
IC0xOTAxLDE3ICsxODQyLDM1IEBAIHNjdHBfcHJvY2Vzc19jb29raWVfZXhpc3Rpbmcoc3RydWN0
IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCiAJCQl9CiAJCX0KIAkJLyogcHJvY2Vz
cyB0aGUgSU5JVCBpbmZvIChwZWVyJ3MgaW5mbykgKi8KLQkJcmV0dmFsID0gc2N0cF9wcm9jZXNz
X2luaXQoaW5pdF9jcCwgc3RjYik7Ci0JCWlmIChyZXR2YWwgPCAwKSB7CisJCWlmIChzY3RwX3By
b2Nlc3NfaW5pdChpbml0X2NwLCBzdGNiKSA8IDApIHsKIAkJCWlmIChob3dfaW5keCA8IHNpemVv
Zihhc29jLT5jb29raWVfaG93KSkKIAkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDk7
CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfT1VUX09GX1JFU0Ms
ICIiKTsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJzY3RwX3Byb2Nlc3NfaW5pdCgp
IGZhaWxlZFxuIik7CisJCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsIG0sIGlwaGxlbiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBv
cF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlm
CisJCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKIAkJCXJldHVy
biAoTlVMTCk7CiAJCX0KLQkJaWYgKHNjdHBfbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0KHN0Y2Is
IG0sCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X29mZnNldCArIHNp
emVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluaXRhY2tfb2Zmc2V0LCBzcmMsIGRzdCwgaW5pdF9zcmMsIHN0Y2ItPmFzb2Mu
cG9ydCkpIHsKKwkJaWYgKChyZXR2YWwgPSBzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChz
dGNiLCBtLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
aXRfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLAorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRhY2tfb2Zmc2V0LCBzcmMsIGRz
dCwgaW5pdF9zcmMsIHN0Y2ItPmFzb2MucG9ydCkpIDwgMCkgewogCQkJaWYgKGhvd19pbmR4IDwg
c2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQogCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhd
ID0gMTA7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9kaWFnX2luZm9fY29kZSksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ
cm9ibGVtIHdpdGggYWRkcmVzcyBwYXJhbWV0ZXJzIik7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdf
SU5QVVQxLAorCQkJICAgICAgICAiTG9hZCBhZGRyZXNzZXMgZnJvbSBJTklUIGNhdXNlcyBhbiBh
Ym9ydCAlZFxuIiwKKwkJCSAgICAgICAgcmV0dmFsKTsKKwkJCXNjdHBfYWJvcnRfYXNzb2NpYXRp
b24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgbSwgaXBobGVuLAorCQkJICAgICAgICAgICAgICAgICAg
ICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5
cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBu
ZXQtPnBvcnQpOwogCQkJcmV0dXJuIChOVUxMKTsKIAkJfQogCQlpZiAoKFNDVFBfR0VUX1NUQVRF
KHN0Y2IpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8CkBAIC0xOTMzLDYgKzE4OTIsNyBA
QCBzY3RwX3Byb2Nlc3NfY29va2llX2V4aXN0aW5nKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVu
LCBpbnQgb2Zmc2V0LAogCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CiAJCQkJYXRvbWljX2FkZF9p
bnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7CiAJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBT
Q1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwog
CQkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwogCQkJCQlyZXR1cm4gKE5VTEwpOwogCQkJ
CX0KQEAgLTE5ODUsMTkgKzE5NDUsMjUgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhz
dHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKICNlbmRpZgogCiAJCWlmIChh
c29jLT5wZWVyX3N1cHBvcnRzX25hdCkgeworCQkJc3RydWN0IHNjdHBfdGNiICpsb2NhbF9zdGNi
OworCiAJCQkvKiBUaGlzIGlzIGEgZ3Jvc3MgZ3Jvc3MgaGFjay4KIAkJCSAqIEp1c3QgY2FsbCB0
aGUgY29va2llX25ldyBjb2RlIHNpbmNlIHdlCiAJCQkgKiBhcmUgYWxsb3dpbmcgYSBkdXBsaWNh
dGUgYXNzb2NpYXRpb24uCiAJCQkgKiBJIGhvcGUgdGhpcyB3b3Jrcy4uLgogCQkJICovCi0JCQly
ZXR1cm4gKHNjdHBfcHJvY2Vzc19jb29raWVfbmV3KG0sIGlwaGxlbiwgb2Zmc2V0LCBzcmMsIGRz
dCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2gsIGNvb2tpZSwgY29va2ll
X2xlbiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wLCBuZXRwLCBpbml0
X3NyYyxub3RpZmljYXRpb24sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1
dGhfc2tpcHBlZCwgYXV0aF9vZmZzZXQsIGF1dGhfbGVuLAorCQkJbG9jYWxfc3RjYiA9IHNjdHBf
cHJvY2Vzc19jb29raWVfbmV3KG0sIGlwaGxlbiwgb2Zmc2V0LCBzcmMsIGRzdCwKKwkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaCwgY29va2llLCBjb29raWVfbGVuLAor
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucCwgbmV0cCwgaW5pdF9z
cmMsbm90aWZpY2F0aW9uLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF1dGhfc2tpcHBlZCwgYXV0aF9vZmZzZXQsIGF1dGhfbGVuLAogI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKwkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCiAjZW5kaWYKLQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KSk7CisJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJCWlmIChsb2NhbF9zdGNi
ID09IE5VTEwpIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQl9CisJCQlyZXR1cm4g
KGxvY2FsX3N0Y2IpOwogCQl9CiAJCS8qCiAJCSAqIGNhc2UgQSBpbiBTZWN0aW9uIDUuMi40IFRh
YmxlIDI6IFhYTU0gKHBlZXIgcmVzdGFydGVkKQpAQCAtMjA3NCw5ICsyMDQwLDkgQEAgc2N0cF9w
cm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9m
ZnNldCwKIAkJCWFzb2MtPnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbMF0gPSAwOwogCQkJYXNv
Yy0+c3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50WzBdID0gMDsKICNlbmRpZgotCQkJc3RjYi0+
YXNvYy5zdHJtb3V0W2ldLnNpZCA9IGk7CiAJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9t
aWRfb3JkZXJlZCA9IDA7CiAJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRl
cmVkID0gMDsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5zaWQgPSBpOwogCQkJc3RjYi0+YXNv
Yy5zdHJtb3V0W2ldLmxhc3RfbXNnX2luY29tcGxldGUgPSAwOwogCQl9CiAJCVRBSUxRX0ZPUkVB
Q0hfU0FGRShzdHJyc3QsICZhc29jLT5yZXNldEhlYWQsIG5leHRfcmVzcCwgbnN0cnJzdCkgewpA
QCAtMjE1NywxMSArMjEyMywxNyBAQCBzY3RwX3Byb2Nlc3NfY29va2llX2V4aXN0aW5nKHN0cnVj
dCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogCQlhc29jLT50b3RhbF9mbGlnaHQg
PSAwOwogCQlhc29jLT50b3RhbF9mbGlnaHRfY291bnQgPSAwOwogCQkvKiBwcm9jZXNzIHRoZSBJ
TklUIGluZm8gKHBlZXIncyBpbmZvKSAqLwotCQlyZXR2YWwgPSBzY3RwX3Byb2Nlc3NfaW5pdChp
bml0X2NwLCBzdGNiKTsKLQkJaWYgKHJldHZhbCA8IDApIHsKKwkJaWYgKHNjdHBfcHJvY2Vzc19p
bml0KGluaXRfY3AsIHN0Y2IpIDwgMCkgewogCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2Mt
PmNvb2tpZV9ob3cpKQogCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTM7Ci0KKwkJ
CW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIp
OworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwgInNjdHBfcHJvY2Vzc19pbml0KCkgZmFp
bGVkXG4iKTsKKwkJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwg
bSwgaXBobGVuLAorCQkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2Vy
ciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CQkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJ
CSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOwogCQkJcmV0dXJuIChO
VUxMKTsKIAkJfQogCQkvKgpAQCAtMjE3MCwxMiArMjE0MiwyMiBAQCBzY3RwX3Byb2Nlc3NfY29v
a2llX2V4aXN0aW5nKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogCQkg
Ki8KIAkJbmV0LT5oYl9yZXNwb25kZWQgPSAxOwogCi0JCWlmIChzY3RwX2xvYWRfYWRkcmVzc2Vz
X2Zyb21faW5pdChzdGNiLCBtLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5pdF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayksCi0JCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0YWNrX29mZnNldCwgc3JjLCBkc3QsIGluaXRf
c3JjLCBzdGNiLT5hc29jLnBvcnQpKSB7CisJCWlmICgocmV0dmFsID0gc2N0cF9sb2FkX2FkZHJl
c3Nlc19mcm9tX2luaXQoc3RjYiwgbSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbml0X29mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5r
KSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0YWNr
X29mZnNldCwgc3JjLCBkc3QsIGluaXRfc3JjLCBzdGNiLT5hc29jLnBvcnQpKSA8IDApIHsKIAkJ
CWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKIAkJCQlhc29jLT5jb29r
aWVfaG93W2hvd19pbmR4XSA9IDE0OwotCisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNl
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJQcm9ibGVtIHdpdGggYWRkcmVzcyBwYXJhbWV0ZXJzIik7CisJCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLAorCQkJICAgICAgICAiTG9hZCBhZGRyZXNzZXMgZnJv
bSBJTklUIGNhdXNlcyBhbiBhYm9ydCAlZFxuIiwKKwkJCSAgICAgICAgcmV0dmFsKTsKKwkJCXNj
dHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgbSwgaXBobGVuLAorCQkJ
ICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJICAgICAgICAgICAg
ICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJCSAgICAgICAgICAgICAg
ICAgICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOwogCQkJcmV0dXJuIChOVUxMKTsKIAkJfQogCQkv
KiByZXNwb25kIHdpdGggYSBDT09LSUUtQUNLICovCkBAIC0yMTkxLDYgKzIxNzMsNyBAQCBzY3Rw
X3Byb2Nlc3NfY29va2llX2V4aXN0aW5nKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQg
b2Zmc2V0LAogCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKIAkJYXNv
Yy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAxNjsKIAkvKiBhbGwgb3RoZXIgY2FzZXMuLi4gKi8K
KwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CiAJcmV0dXJuIChOVUxMKTsKIH0KIApAQCAtMjM2NCw4
ICsyMzQ3LDcgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9uZXcoc3RydWN0IG1idWYgKm0sIGludCBp
cGhsZW4sIGludCBvZmZzZXQsCiAJYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBhc29j
LT5sYXN0X2Fja2VkX3NlcTsKIAogCS8qIHByb2Nlc3MgdGhlIElOSVQgaW5mbyAocGVlcidzIGlu
Zm8pICovCi0JcmV0dmFsID0gc2N0cF9wcm9jZXNzX2luaXQoaW5pdF9jcCwgc3RjYik7Ci0JaWYg
KHJldHZhbCA8IDApIHsKKwlpZiAoc2N0cF9wcm9jZXNzX2luaXQoaW5pdF9jcCwgc3RjYikgPCAw
KSB7CiAjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCiAJ
CWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CiAJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKQEAgLTIzODEsOSArMjM2Myw5IEBAIHNjdHBfcHJvY2Vzc19jb29raWVfbmV3KHN0
cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogCQlyZXR1cm4gKE5VTEwpOwog
CX0KIAkvKiBsb2FkIGFsbCBhZGRyZXNzZXMgKi8KLQlpZiAoc2N0cF9sb2FkX2FkZHJlc3Nlc19m
cm9tX2luaXQoc3RjYiwgbSwKLQkgICAgaW5pdF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBf
aW5pdF9jaHVuayksIGluaXRhY2tfb2Zmc2V0LAotCSAgICBzcmMsIGRzdCwgaW5pdF9zcmMsIHBv
cnQpKSB7CisJaWYgKChyZXR2YWwgPSBzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdGNi
LCBtLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9v
ZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayksCisJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0YWNrX29mZnNldCwgc3JjLCBkc3QsIGlu
aXRfc3JjLCBwb3J0KSkgPCAwKSB7CiAjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCiAJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7
CiAJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKQEAgLTI5NjAsMTIgKzI5NDIsMTUgQEAgc2N0cF9o
YW5kbGVfY29va2llX2VjaG8oc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQs
CiAJCWhhZF9hX2V4aXN0aW5nX3RjYiA9IDE7CiAJCSpzdGNiID0gc2N0cF9wcm9jZXNzX2Nvb2tp
ZV9leGlzdGluZyhtLCBpcGhsZW4sIG9mZnNldCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwKLQkJCQkJCSAgICAgY29va2llLCBjb29raWVfbGVu
LCAqaW5wX3AsICpzdGNiLCBuZXRwLCB0bywKLQkJCQkJCSAgICAgJm5vdGlmaWNhdGlvbiwgYXV0
aF9za2lwcGVkLCBhdXRoX29mZnNldCwgYXV0aF9sZW4sCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb29raWUsIGNvb2tpZV9sZW4sICppbnBfcCwgKnN0Y2IsIG5ldHAs
IHRvLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5vdGlmaWNhdGlv
biwgYXV0aF9za2lwcGVkLCBhdXRoX29mZnNldCwgYXV0aF9sZW4sCiAjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKIAkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKICNlbmRpZgogCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJaWYgKCpzdGNi
ID09IE5VTEwpIHsKKwkJCSpsb2NrZWRfdGNiID0gTlVMTDsKKwkJfQogCX0KIAogCWlmICgqc3Rj
YiA9PSBOVUxMKSB7CkBAIC0zODUxLDE5ICszODM2LDE2IEBAIHNjdHBfZmluZF9zdHJlYW1fcmVz
ZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzY3RwX3RtaXRf
Y2h1CiAJaW50IGxlbiwgY2xlbjsKIAogCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlpZiAoVEFJTFFf
RU1QVFkoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlKSkgewotCQlhc29jLT5zdHJlYW1f
cmVzZXRfb3V0c3RhbmRpbmcgPSAwOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoc3RjYi0+
YXNvYy5zdHJfcmVzZXQgPT0gTlVMTCkgeworCWNoayA9IGFzb2MtPnN0cl9yZXNldDsKKwlpZiAo
VEFJTFFfRU1QVFkoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSkgfHwKKwkgICAgKGNoayA9PSBO
VUxMKSkgewogCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcgPSAwOwogCQlyZXR1cm4g
KE5VTEwpOwogCX0KLQljaGsgPSBzdGNiLT5hc29jLnN0cl9yZXNldDsKIAlpZiAoY2hrLT5kYXRh
ID09IE5VTEwpIHsKIAkJcmV0dXJuIChOVUxMKTsKIAl9Ci0JaWYgKGJjaGspIHsKKwlpZiAoYmNo
ayAhPSBOVUxMKSB7CiAJCS8qIGhlIHdhbnRzIGEgY29weSBvZiB0aGUgY2hrIHBvaW50ZXIgKi8K
IAkJKmJjaGsgPSBjaGs7CiAJfQpAQCAtNDgwMiw2ICs0Nzg0LDcgQEAgc2N0cF9wcm9jZXNzX2Nv
bnRyb2woc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVuZ3Ro
LAogCWludCByZXQ7CiAJaW50IGFib3J0X25vX3VubG9jayA9IDA7CiAJaW50IGVjbmVfc2VlbiA9
IDA7CisJaW50IGFib3J0X2ZsYWc7CiAJLyoKIAkgKiBIb3cgYmlnIHNob3VsZCB0aGlzIGJlLCBh
bmQgc2hvdWxkIGl0IGJlIGFsbG9jJ2Q/IExldHMgdHJ5IHRoZQogCSAqIGQtbXR1LWNlaWxpbmcg
Zm9yIG5vdyAoMmspIGFuZCB0aGF0IHNob3VsZCBob3BlZnVsbHkgd29yayAuLi4KQEAgLTQ5NjYs
MjkgKzQ5NDksNiBAQCBzY3RwX3Byb2Nlc3NfY29udHJvbChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlw
aGxlbiwgaW50ICpvZmZzZXQsIGludCBsZW5ndGgsCiAJCQkJfQogCQkJCXJldHVybiAoTlVMTCk7
CiAJCQl9Ci0JCX0gZWxzZSBpZiAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TSFVURE9XTl9BQ0sp
IHsKLQkJCWlmICh2dGFnX2luICE9IGFzb2MtPm15X3Z0YWcpIHsKLQkJCQkvKgotCQkJCSAqIHRo
aXMgY291bGQgYmUgYSBzdGFsZSBTSFVURE9XTi1BQ0sgb3IgdGhlCi0JCQkJICogcGVlciBuZXZl
ciBnb3QgdGhlIFNIVVRET1dOLUNPTVBMRVRFIGFuZAotCQkJCSAqIGlzIHN0aWxsIGh1bmc7IHdl
IGhhdmUgc3RhcnRlZCBhIG5ldyBhc29jCi0JCQkJICogYnV0IGl0IHdvbid0IGNvbXBsZXRlIHVu
dGlsIHRoZSBzaHV0ZG93bgotCQkJCSAqIGlzIGNvbXBsZXRlZAotCQkJCSAqLwotCQkJCWlmIChz
dGNiICE9IE5VTEwpIHsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCX0KLQkJCQlT
Q1RQX1NOUFJJTlRGKG1zZywgc2l6ZW9mKG1zZyksICJPT1RCLCAlczolZCBhdCAlcyIsIF9fRklM
RV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwotCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1
c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKLQkJCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1zZyk7Ci0JCQkJc2N0cF9oYW5kbGVfb290YihtLCBpcGhsZW4s
ICpvZmZzZXQsIHNyYywgZHN0LAotCQkJCSAgICAgICAgICAgICAgICAgc2gsIGlucCwgb3BfZXJy
LAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0J
CQkJICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51bSwKLSNlbmRpZgot
CQkJCSAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKLQkJCQlyZXR1cm4gKE5VTEwpOwot
CQkJfQogCQl9IGVsc2UgewogCQkJLyogZm9yIGFsbCBvdGhlciBjaHVua3MsIHZ0YWcgbXVzdCBt
YXRjaCAqLwogCQkJaWYgKHZ0YWdfaW4gIT0gYXNvYy0+bXlfdnRhZykgewpAQCAtNTA1MSwxMCAr
NTAxMSw3IEBAIHNjdHBfcHJvY2Vzc19jb250cm9sKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVu
LCBpbnQgKm9mZnNldCwgaW50IGxlbmd0aCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNodW5rX2J1Zik7CiAJCWlmIChjaCA9PSBOVUxMKSB7CiAJCQkqb2Zm
c2V0ID0gbGVuZ3RoOwotCQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKLQkJCX0KLQkJCXJldHVybiAoTlVMTCk7CisJCQlyZXR1cm4gKHN0Y2IpOwogCQl9
CiAKIAkJbnVtX2NodW5rcysrOwpAQCAtNTA4OCwxMiArNTA0NSwxMiBAQCBzY3RwX3Byb2Nlc3Nf
Y29udHJvbChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50ICpvZmZzZXQsIGludCBsZW5n
dGgsCiAJCQkvKiBUaGUgSU5JVCBjaHVuayBtdXN0IGJlIHRoZSBvbmx5IGNodW5rLiAqLwogCQkJ
aWYgKChudW1fY2h1bmtzID4gMSkgfHwKIAkJCSAgICAobGVuZ3RoIC0gKm9mZnNldCA+IChpbnQp
U0NUUF9TSVpFMzIoY2hrX2xlbmd0aCkpKSB7Ci0JCQkJLyogUkZDIDQ5NjAgcmVxdWlyZXMgdGhh
dCBubyBBQk9SVCBpcyBzZW50ICovCisJCQkJLyoKKwkJCQkgKiBSRkMgNDk2MGJpcyByZXF1aXJl
cyBzdG9wcGluZyB0aGUKKwkJCQkgKiBwcm9jZXNzaW5nIG9mIHRoZSBwYWNrZXQuCisJCQkJICov
CiAJCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlpZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCQkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIChOVUxMKTsKKwkJCQlyZXR1
cm4gKHN0Y2IpOwogCQkJfQogCQkJLyogSG9ub3Igb3VyIHJlc291cmNlIGxpbWl0LiAqLwogCQkJ
aWYgKGNoa19sZW5ndGggPiBTQ1RQX0xBUkdFU1RfSU5JVF9BQ0NFUFRFRCkgewpAQCAtNTMwMCwy
MCArNTI1NywxOSBAQCBzY3RwX3Byb2Nlc3NfY29udHJvbChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlw
aGxlbiwgaW50ICpvZmZzZXQsIGludCBsZW5ndGgsCiAJCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYg
KG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CiAJCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfcmVjdmhlYXJ0YmVhdCk7CiAJCQkJc2N0cF9zZW5kX2hlYXJ0YmVhdF9hY2soc3RjYiwg
bSwgKm9mZnNldCwKLQkJCQkJCQljaGtfbGVuZ3RoLCAqbmV0cCk7CisJCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgY2hrX2xlbmd0aCwgKm5ldHApOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2Ug
U0NUUF9IRUFSVEJFQVRfQUNLOgogCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBf
SEVBUlRCRUFUX0FDS1xuIik7CiAJCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGNoa19sZW5ndGgg
IT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9jaHVuaykpKSB7CiAJCQkJLyogSXRzIG5v
dCBvdXJzICovCi0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJ
CWJyZWFrOwogCQkJfQogCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmhlYXJ0YmVhdGFjayk7
CiAJCQlpZiAoKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CiAJCQkJc2N0cF9o
YW5kbGVfaGVhcnRiZWF0X2Fjaygoc3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rICopY2gsCi0J
CQkJCQkJICBzdGNiLCAqbmV0cCk7CisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNi
LCAqbmV0cCk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9O
OgpAQCAtNTMzNCwxNCArNTI5MCwxMiBAQCBzY3RwX3Byb2Nlc3NfY29udHJvbChzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IGlwaGxlbiwgaW50ICpvZmZzZXQsIGludCBsZW5ndGgsCiAJCQlTQ1RQREJHKFND
VFBfREVCVUdfSU5QVVQzLCAiU0NUUF9TSFVURE9XTiwgc3RjYiAlcFxuIiwKIAkJCQkodm9pZCAq
KXN0Y2IpOwogCQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChjaGtfbGVuZ3RoICE9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuaykpKSB7Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJ
CQlyZXR1cm4gKHN0Y2IpOworCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKChuZXRwICE9IE5VTEwp
ICYmICgqbmV0cCAhPSBOVUxMKSkgewotCQkJCWludCBhYm9ydF9mbGFnID0gMDsKLQorCQkJCWFi
b3J0X2ZsYWcgPSAwOwogCQkJCXNjdHBfaGFuZGxlX3NodXRkb3duKChzdHJ1Y3Qgc2N0cF9zaHV0
ZG93bl9jaHVuayAqKWNoLAotCQkJCQkJICAgICBzdGNiLCAqbmV0cCwgJmFib3J0X2ZsYWcpOwor
CQkJCSAgICAgICAgICAgICAgICAgICAgIHN0Y2IsICpuZXRwLCAmYWJvcnRfZmxhZyk7CiAJCQkJ
aWYgKGFib3J0X2ZsYWcpIHsKIAkJCQkJKm9mZnNldCA9IGxlbmd0aDsKIAkJCQkJcmV0dXJuIChO
VUxMKTsKQEAgLTUzNTAsMTEgKzUzMDQsMTIgQEAgc2N0cF9wcm9jZXNzX2NvbnRyb2woc3RydWN0
IG1idWYgKm0sIGludCBpcGhsZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVuZ3RoLAogCQkJYnJlYWs7
CiAJCWNhc2UgU0NUUF9TSFVURE9XTl9BQ0s6CiAJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQz
LCAiU0NUUF9TSFVURE9XTl9BQ0ssIHN0Y2IgJXBcbiIsICh2b2lkICopc3RjYik7Ci0JCQlpZiAo
KHN0Y2IgIT0gTlVMTCkgJiYgKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJ
CQlpZiAoKGNoa19sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2Fja19jaHVu
aykpICYmCisJCQkgICAgKHN0Y2IgIT0gTlVMTCkgJiYgKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRw
ICE9IE5VTEwpKSB7CiAJCQkJc2N0cF9oYW5kbGVfc2h1dGRvd25fYWNrKChzdHJ1Y3Qgc2N0cF9z
aHV0ZG93bl9hY2tfY2h1bmsgKiljaCwgc3RjYiwgKm5ldHApOworCQkJCSpvZmZzZXQgPSBsZW5n
dGg7CisJCQkJcmV0dXJuIChOVUxMKTsKIAkJCX0KLQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQly
ZXR1cm4gKE5VTEwpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0NUUF9PUEVSQVRJT05fRVJST1I6CiAJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9PUF9FUlJcbiIpOwpAQCAtNTQ5OCw3
ICs1NDUzLDcgQEAgc2N0cF9wcm9jZXNzX2NvbnRyb2woc3RydWN0IG1idWYgKm0sIGludCBpcGhs
ZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVuZ3RoLAogCQljYXNlIFNDVFBfQ09PS0lFX0FDSzoKIAkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0NPT0tJRV9BQ0ssIHN0Y2IgJXBcbiIs
ICh2b2lkICopc3RjYik7CiAJCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgY2hrX2xlbmd0aCAhPSBz
aXplb2Yoc3RydWN0IHNjdHBfY29va2llX2Fja19jaHVuaykpIHsKLQkJCQlyZXR1cm4gKHN0Y2Ip
OworCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1NPQ0tFVF9HT05FKSB7CiAJCQkJLyogV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGFueW1vcmUg
Ki8KQEAgLTU1MjgsMjYgKzU0ODMsMjkgQEAgc2N0cF9wcm9jZXNzX2NvbnRyb2woc3RydWN0IG1i
dWYgKm0sIGludCBpcGhsZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVuZ3RoLAogCQkJYnJlYWs7CiAJ
CWNhc2UgU0NUUF9FQ05fRUNITzoKIAkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQ
X0VDTl9FQ0hPXG4iKTsKLQkJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoY2hrX2xlbmd0aCAhPSBz
aXplb2Yoc3RydWN0IHNjdHBfZWNuZV9jaHVuaykpKSB7Ci0JCQkJLyogSXRzIG5vdCBvdXJzICov
Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJaWYgKHN0Y2Ig
PT0gTlVMTCkgeworCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKHN0Y2ItPmFzb2MuZWNuX3N1cHBv
cnRlZCA9PSAwKSB7CiAJCQkJZ290byB1bmtub3duX2NodW5rOwogCQkJfQorCQkJaWYgKGNoa19s
ZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2VjbmVfY2h1bmspKSB7CisJCQkJYnJlYWs7CisJ
CQl9CiAJCQlzY3RwX2hhbmRsZV9lY25fZWNobygoc3RydWN0IHNjdHBfZWNuZV9jaHVuayAqKWNo
LCBzdGNiKTsKIAkJCWVjbmVfc2VlbiA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBTQ1RQX0VDTl9D
V1I6CiAJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9FQ05fQ1dSXG4iKTsKLQkJ
CWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoY2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBf
Y3dyX2NodW5rKSkpIHsKLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCXJldHVybiAoc3RjYik7
CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoc3RjYi0+
YXNvYy5lY25fc3VwcG9ydGVkID09IDApIHsKIAkJCQlnb3RvIHVua25vd25fY2h1bms7CiAJCQl9
CisJCQlpZiAoY2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfY3dyX2NodW5rKSkgewor
CQkJCWJyZWFrOworCQkJfQogCQkJc2N0cF9oYW5kbGVfZWNuX2N3cigoc3RydWN0IHNjdHBfY3dy
X2NodW5rICopY2gsIHN0Y2IsICpuZXRwKTsKIAkJCWJyZWFrOwogCQljYXNlIFNDVFBfU0hVVERP
V05fQ09NUExFVEU6CkBAIC01NTU4LDEyICs1NTE2LDEzIEBAIHNjdHBfcHJvY2Vzc19jb250cm9s
KHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgKm9mZnNldCwgaW50IGxlbmd0aCwKIAkJ
CQkqb2Zmc2V0ID0gbGVuZ3RoOwogCQkJCXJldHVybiAoc3RjYik7CiAJCQl9Ci0JCQlpZiAoKHN0
Y2IgIT0gTlVMTCkgJiYgKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJCQlp
ZiAoKGNoa19sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2NvbXBsZXRlX2No
dW5rKSkgJiYKKwkJCSAgICAoc3RjYiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAoKm5l
dHAgIT0gTlVMTCkpIHsKIAkJCQlzY3RwX2hhbmRsZV9zaHV0ZG93bl9jb21wbGV0ZSgoc3RydWN0
IHNjdHBfc2h1dGRvd25fY29tcGxldGVfY2h1bmsgKiljaCwKLQkJCQkJCQkgICAgICBzdGNiLCAq
bmV0cCk7CisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RjYiwgKm5ldHApOwor
CQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChOVUxMKTsKIAkJCX0KLQkJCSpvZmZz
ZXQgPSBsZW5ndGg7Ci0JCQlyZXR1cm4gKE5VTEwpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0NUUF9B
U0NPTkY6CiAJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9BU0NPTkZcbiIpOwpA
QCAtNTU3MiwzMiArNTUzMSwzMyBAQCBzY3RwX3Byb2Nlc3NfY29udHJvbChzdHJ1Y3QgbWJ1ZiAq
bSwgaW50IGlwaGxlbiwgaW50ICpvZmZzZXQsIGludCBsZW5ndGgsCiAJCQkJCWdvdG8gdW5rbm93
bl9jaHVuazsKIAkJCQl9CiAJCQkJc2N0cF9oYW5kbGVfYXNjb25mKG0sICpvZmZzZXQsIHNyYywK
LQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1bmsgKiljaCwgc3RjYiwgYXNjb25mX2Nu
dCA9PSAwKTsKKwkJCQkgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVu
ayAqKWNoLCBzdGNiLCBhc2NvbmZfY250ID09IDApOwogCQkJCWFzY29uZl9jbnQrKzsKIAkJCX0K
IAkJCWJyZWFrOwogCQljYXNlIFNDVFBfQVNDT05GX0FDSzoKIAkJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDMsICJTQ1RQX0FTQ09ORl9BQ0tcbiIpOworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgewor
CQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAw
KSB7CisJCQkJZ290byB1bmtub3duX2NodW5rOworCQkJfQogCQkJaWYgKGNoa19sZW5ndGggPCBz
aXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuaykpIHsKLQkJCQkvKiBJdHMgbm90IG91
cnMgKi8KLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCXJldHVybiAoc3RjYik7CisJCQkJYnJl
YWs7CiAJCQl9Ci0JCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKG5ldHAgIT0gTlVMTCkgJiYgKCpu
ZXRwICE9IE5VTEwpKSB7Ci0JCQkJaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAw
KSB7Ci0JCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKLQkJCQl9CisJCQlpZiAoKG5ldHAgIT0gTlVM
TCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CiAJCQkJLyogSGUncyBhbGl2ZSBzbyBnaXZlIGhpbSBj
cmVkaXQgKi8KIAkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9USFJFU0hPTERfTE9HR0lORykgewogCQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVT
SE9MRF9DTEVBUiwKLQkJCQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQs
Ci0JCQkJCQkgICAgICAgMCwKLQkJCQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCwKLQkJ
CQkJCSAgICAgICBfX0xJTkVfXyk7CisJCQkJCSAgICAgICAgICAgICAgIHN0Y2ItPmFzb2Mub3Zl
cmFsbF9lcnJvcl9jb3VudCwKKwkJCQkJICAgICAgICAgICAgICAgMCwKKwkJCQkJICAgICAgICAg
ICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQsCisJCQkJCSAgICAgICAgICAgICAgIF9fTElORV9f
KTsKIAkJCQl9CiAJCQkJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKIAkJCQlz
Y3RwX2hhbmRsZV9hc2NvbmZfYWNrKG0sICpvZmZzZXQsCi0JCQkJCQkgICAgICAgKHN0cnVjdCBz
Y3RwX2FzY29uZl9hY2tfY2h1bmsgKiljaCwgc3RjYiwgKm5ldHAsICZhYm9ydF9ub191bmxvY2sp
OworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1
bmsgKiljaCwgc3RjYiwgKm5ldHAsICZhYm9ydF9ub191bmxvY2spOwogCQkJCWlmIChhYm9ydF9u
b191bmxvY2spCiAJCQkJCXJldHVybiAoTlVMTCk7CiAJCQl9CkBAIC01NjA2LDcyICs1NTY2LDcw
IEBAIHNjdHBfcHJvY2Vzc19jb250cm9sKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQg
Km9mZnNldCwgaW50IGxlbmd0aCwKIAkJY2FzZSBTQ1RQX0lGT1JXQVJEX0NVTV9UU046CiAJCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiJXNcbiIsCiAJCQkJY2gtPmNodW5rX3R5cGUgPT0g
U0NUUF9GT1JXQVJEX0NVTV9UU04gPyAiRk9SV0FSRF9UU04iIDogIklfRk9SV0FSRF9UU04iKTsK
KwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzdGNiLT5h
c29jLnByc2N0cF9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKKwkJ
CX0KIAkJCWlmIChjaGtfbGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2No
dW5rKSkgewotCQkJCS8qIEl0cyBub3Qgb3VycyAqLwotCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0J
CQkJcmV0dXJuIChzdGNiKTsKKwkJCQlicmVhazsKIAkJCX0KLQotCQkJaWYgKHN0Y2IgIT0gTlVM
TCkgewotCQkJCWludCBhYm9ydF9mbGFnID0gMDsKLQotCQkJCWlmIChzdGNiLT5hc29jLnByc2N0
cF9zdXBwb3J0ZWQgPT0gMCkgewotCQkJCQlnb3RvIHVua25vd25fY2h1bms7Ci0JCQkJfQotCQkJ
CWlmICgoKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDEpICYmIChjaC0+Y2h1bmtfdHlw
ZSA9PSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTikpIHx8Ci0JCQkJICAgICgoc3RjYi0+YXNvYy5pZGF0
YV9zdXBwb3J0ZWQgPT0gMCkgJiYgKGNoLT5jaHVua190eXBlID09IFNDVFBfSUZPUldBUkRfQ1VN
X1RTTikpKSB7Ci0JCQkJCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0ZPUldBUkRfQ1VNX1RT
TikgewotCQkJCQkJU0NUUF9TTlBSSU5URihtc2csIHNpemVvZihtc2cpLCAiJXMiLCAiRk9SV0FS
RC1UU04gY2h1bmsgcmVjZWl2ZWQgd2hlbiBJLUZPUldBUkQtVFNOIHdhcyBuZWdvdGlhdGVkIik7
Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlTQ1RQX1NOUFJJTlRGKG1zZywgc2l6ZW9mKG1zZyksICIl
cyIsICJJLUZPUldBUkQtVFNOIGNodW5rIHJlY2VpdmVkIHdoZW4gRk9SV0FSRC1UU04gd2FzIG5l
Z290aWF0ZWQiKTsKLQkJCQkJfQotCQkJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFND
VFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cpOwotCQkJCQlzY3RwX2Fib3J0X2FuX2Fz
c29jaWF0aW9uKGlucCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJCQkq
b2Zmc2V0ID0gbGVuZ3RoOwotCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJaWYgKCgoc3RjYi0+YXNv
Yy5pZGF0YV9zdXBwb3J0ZWQgPT0gMSkgJiYgKGNoLT5jaHVua190eXBlID09IFNDVFBfRk9SV0FS
RF9DVU1fVFNOKSkgfHwKKwkJCSAgICAoKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDAp
ICYmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lGT1JXQVJEX0NVTV9UU04pKSkgeworCQkJCWlm
IChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTikgeworCQkJCQlTQ1RQX1NO
UFJJTlRGKG1zZywgc2l6ZW9mKG1zZyksICIlcyIsICJGT1JXQVJELVRTTiBjaHVuayByZWNlaXZl
ZCB3aGVuIEktRk9SV0FSRC1UU04gd2FzIG5lZ290aWF0ZWQiKTsKKwkJCQl9IGVsc2UgeworCQkJ
CQlTQ1RQX1NOUFJJTlRGKG1zZywgc2l6ZW9mKG1zZyksICIlcyIsICJJLUZPUldBUkQtVFNOIGNo
dW5rIHJlY2VpdmVkIHdoZW4gRk9SV0FSRC1UU04gd2FzIG5lZ290aWF0ZWQiKTsKIAkJCQl9Ci0J
CQkJKmZ3ZF90c25fc2VlbiA9IDE7Ci0JCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9HT05FKSB7Ci0JCQkJCS8qIFdlIGFyZSBub3QgaW50ZXJlc3RlZCBhbnlt
b3JlICovCisJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RP
Q09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwg
c3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCSpvZmZzZXQgPSBsZW5ndGg7
CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCSpmd2RfdHNuX3NlZW4gPSAxOworCQkJaWYg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7CisJCQkJLyog
V2UgYXJlIG5vdCBpbnRlcmVzdGVkIGFueW1vcmUgKi8KICNpZiBkZWZpbmVkKF9fQVBQTEVfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQkJc28gPSBTQ1RQX0lOUF9TTyhpbnApOwot
CQkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCQkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotCQkJCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgMSk7CisJCQkJc28gPSBTQ1RQX0lOUF9TTyhpbnApOworCQkJCWF0b21pY19hZGRfaW50
KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJ
CVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJ
YXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwogI2VuZGlmCi0JCQkJ
CSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0JCQkJ
CSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzMx
KTsKKwkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9D
LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBf
TE9DXzMxKTsKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKLQkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJCQlTQ1RQX1NPQ0tFVF9VTkxP
Q0soc28sIDEpOwogI2VuZGlmCi0JCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJCXJldHVybiAo
TlVMTCk7Ci0JCQkJfQotCQkJCS8qCi0JCQkJICogRm9yIHNlbmRpbmcgYSBTQUNLIHRoaXMgbG9v
a3MgbGlrZSBEQVRBCi0JCQkJICogY2h1bmtzLgotCQkJCSAqLwotCQkJCXN0Y2ItPmFzb2MubGFz
dF9kYXRhX2NodW5rX2Zyb20gPSBzdGNiLT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9tOwot
CQkJCXNjdHBfaGFuZGxlX2ZvcndhcmRfdHNuKHN0Y2IsCi0JCQkJCQkJKHN0cnVjdCBzY3RwX2Zv
cndhcmRfdHNuX2NodW5rICopY2gsICZhYm9ydF9mbGFnLCBtLCAqb2Zmc2V0KTsKLQkJCQlpZiAo
YWJvcnRfZmxhZykgewotCQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCQlyZXR1cm4gKE5VTEwp
OwotCQkJCX0KKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9
CisJCQkvKgorCQkJICogRm9yIHNlbmRpbmcgYSBTQUNLIHRoaXMgbG9va3MgbGlrZSBEQVRBCisJ
CQkgKiBjaHVua3MuCisJCQkgKi8KKwkJCXN0Y2ItPmFzb2MubGFzdF9kYXRhX2NodW5rX2Zyb20g
PSBzdGNiLT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9tOworCQkJYWJvcnRfZmxhZyA9IDA7
CisJCQlzY3RwX2hhbmRsZV9mb3J3YXJkX3RzbihzdGNiLAorCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rICopY2gsICZhYm9ydF9mbGFnLCBt
LCAqb2Zmc2V0KTsKKwkJCWlmIChhYm9ydF9mbGFnKSB7CisJCQkJKm9mZnNldCA9IGxlbmd0aDsK
KwkJCQlyZXR1cm4gKE5VTEwpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgU0NUUF9TVFJFQU1f
UkVTRVQ6CiAJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9TVFJFQU1fUkVTRVRc
biIpOwotCQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChjaGtfbGVuZ3RoIDwgc2l6ZW9mKHN0cnVj
dCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxKSkpIHsKLQkJCQkvKiBJdHMgbm90IG91cnMgKi8K
LQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCXJldHVybiAoc3RjYik7CisJCQlpZiAoc3RjYiA9
PSBOVUxMKSB7CisJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoc3RjYi0+YXNvYy5yZWNvbmZpZ19z
dXBwb3J0ZWQgPT0gMCkgewogCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKIAkJCX0KKwkJCWlmIChj
aGtfbGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxKSkgewor
CQkJCWJyZWFrOworCQkJfQogCQkJaWYgKHNjdHBfaGFuZGxlX3N0cmVhbV9yZXNldChzdGNiLCBt
LCAqb2Zmc2V0LCBjaCkpIHsKIAkJCQkvKiBzdG9wIHByb2Nlc3NpbmcgKi8KIAkJCQkqb2Zmc2V0
ID0gbGVuZ3RoOwpAQCAtNTY4MCwyMCArNTYzOCwxOSBAQCBzY3RwX3Byb2Nlc3NfY29udHJvbChz
dHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50ICpvZmZzZXQsIGludCBsZW5ndGgsCiAJCQli
cmVhazsKIAkJY2FzZSBTQ1RQX1BBQ0tFVF9EUk9QUEVEOgogCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X0lOUFVUMywgIlNDVFBfUEFDS0VUX0RST1BQRURcbiIpOwotCQkJLyogcmUtZ2V0IGl0IGFsbCBw
bGVhc2UgKi8KKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlm
IChzdGNiLT5hc29jLnBrdGRyb3Bfc3VwcG9ydGVkID09IDApIHsKKwkJCQlnb3RvIHVua25vd25f
Y2h1bms7CisJCQl9CiAJCQlpZiAoY2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9wa3Rk
cm9wX2NodW5rKSkgewotCQkJCS8qIEl0cyBub3Qgb3VycyAqLwotCQkJCSpvZmZzZXQgPSBsZW5n
dGg7Ci0JCQkJcmV0dXJuIChzdGNiKTsKKwkJCQlicmVhazsKIAkJCX0KLQotCQkJaWYgKChzdGNi
ICE9IE5VTEwpICYmIChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkgewotCQkJCWlm
IChzdGNiLT5hc29jLnBrdGRyb3Bfc3VwcG9ydGVkID09IDApIHsKLQkJCQkJZ290byB1bmtub3du
X2NodW5rOwotCQkJCX0KKwkJCWlmICgobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkp
IHsKIAkJCQlzY3RwX2hhbmRsZV9wYWNrZXRfZHJvcHBlZCgoc3RydWN0IHNjdHBfcGt0ZHJvcF9j
aHVuayAqKWNoLAotCQkJCQkJCSAgIHN0Y2IsICpuZXRwLAotCQkJCQkJCSAgIG1pbihjaGtfbGVu
Z3RoLCBjb250aWd1b3VzKSk7CisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RjYiwg
Km5ldHAsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluKGNoa19sZW5ndGgsIGNv
bnRpZ3VvdXMpKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFNDVFBfQVVUSEVOVElDQVRJT046
CkBAIC01NzA2LDIxICs1NjYzLDIxIEBAIHNjdHBfcHJvY2Vzc19jb250cm9sKHN0cnVjdCBtYnVm
ICptLCBpbnQgaXBobGVuLCBpbnQgKm9mZnNldCwgaW50IGxlbmd0aCwKIAkJCQkJYXV0aF9za2lw
cGVkID0gMTsKIAkJCQl9CiAJCQkJLyogc2tpcCB0aGlzIGNodW5rICh0ZW1wb3JhcmlseSkgKi8K
LQkJCQlnb3RvIG5leHRfY2h1bms7CisJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoc3RjYi0+YXNv
Yy5hdXRoX3N1cHBvcnRlZCA9PSAwKSB7CiAJCQkJZ290byB1bmtub3duX2NodW5rOwogCQkJfQog
CQkJaWYgKChjaGtfbGVuZ3RoIDwgKHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rKSkpIHx8
CiAJCQkgICAgKGNoa19sZW5ndGggPiAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmspICsK
LQkJCQkJICAgU0NUUF9BVVRIX0RJR0VTVF9MRU5fTUFYKSkpIHsKKwkJCSAgICAgICAgICAgICAg
ICAgIFNDVFBfQVVUSF9ESUdFU1RfTEVOX01BWCkpKSB7CiAJCQkJLyogSXRzIG5vdCBvdXJzICov
CiAJCQkJKm9mZnNldCA9IGxlbmd0aDsKIAkJCQlyZXR1cm4gKHN0Y2IpOwogCQkJfQogCQkJaWYg
KGdvdF9hdXRoID09IDEpIHsKIAkJCQkvKiBza2lwIHRoaXMgY2h1bmsuLi4gaXQncyBhbHJlYWR5
IGF1dGgnZCAqLwotCQkJCWdvdG8gbmV4dF9jaHVuazsKKwkJCQlicmVhazsKIAkJCX0KIAkJCWdv
dF9hdXRoID0gMTsKIAkJCWlmIChzY3RwX2hhbmRsZV9hdXRoKHN0Y2IsIChzdHJ1Y3Qgc2N0cF9h
dXRoX2NodW5rICopY2gsIG0sICpvZmZzZXQpKSB7CkBAIC01NzgxLDcgKzU3MzgsNyBAQCBzY3Rw
X3Byb2Nlc3NfY29udHJvbChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50ICpvZmZzZXQs
IGludCBsZW5ndGgsCiAJCQlicmVhazsKIAkJfQogCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciAqKXNjdHBfbV9nZXRwdHIobSwgKm9mZnNldCwKLQkJCQkJCQkgICBzaXplb2Yoc3RydWN0IHNj
dHBfY2h1bmtoZHIpLCBjaHVua19idWYpOworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwgY2h1bmtfYnVmKTsK
IAkJaWYgKGNoID09IE5VTEwpIHsKIAkJCSpvZmZzZXQgPSBsZW5ndGg7CiAJCQlyZXR1cm4gKHN0
Y2IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3NfdXNl
cnNwYWNlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vc191c2Vyc3BhY2Uu
aAppbmRleCAxNDc2NjYwNTQwYzUzODQ0YjNhNjIxMzE3NmExYTQ1NTlmMGQzMjZjLi40NmI2MTgx
MTBjMzdhZDg4NjRlYjM4OTM2NjYyMTAyZDhmOWI2NjcyIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c3JzY3RwbGliL25ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaApAQCAtMjgzLDkgKzI4MywxMyBAQCB0
eXBlZGVmIGNoYXIqIGNhZGRyX3Q7CiAKICNlbHNlIC8qICFkZWZpbmVkKFVzZXJzcGFjZV9vc19X
aW5kb3dzKSAqLwogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZiBkZWZpbmVkKF9fRHJhZ29u
Rmx5X18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19saW51eF9fKSB8fCBk
ZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19u
YXRpdmVfY2xpZW50X18pIHx8IGRlZmluZWQoX19GdWNoc2lhX18pIHx8IGRlZmluZWQoX19FTVND
UklQVEVOX1BUSFJFQURTX18pCi0jaW5jbHVkZSA8cHRocmVhZC5oPgorCisjaWYgZGVmaW5lZChf
X0VNU0NSSVBURU5fXykgJiYgIWRlZmluZWQoX19FTVNDUklQVEVOX1BUSFJFQURTX18pCisjZXJy
b3IgIlVuc3VwcG9ydGVkIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIgogI2VuZGlmCisKKyNpbmNsdWRl
IDxwdGhyZWFkLmg+CisKIHR5cGVkZWYgcHRocmVhZF9tdXRleF90IHVzZXJsYW5kX211dGV4X3Q7
CiB0eXBlZGVmIHB0aHJlYWRfY29uZF90IHVzZXJsYW5kX2NvbmRfdDsKIHR5cGVkZWYgcHRocmVh
ZF90IHVzZXJsYW5kX3RocmVhZF90OwpAQCAtODgyLDcgKzg4Niw3IEBAIGludCBzY3RwX3VzZXJz
cGFjZV9nZXRfbXR1X2Zyb21faWZuKHVpbnQzMl90IGlmX2luZGV4LCBpbnQgYWYpOwogCiAjZGVm
aW5lIFNDVFBfR0FUSEVSX01UVV9GUk9NX1JPVVRFKHNjdHBfaWZhLCBzYSwgcnQpICgocnQgIT0g
TlVMTCkgPyBydC0+cnRfcm14LnJteF9tdHUgOiAwKQogCi0jZGVmaW5lIFNDVFBfR0FUSEVSX01U
VV9GUk9NX0lOVEZDKHNjdHBfaWZuKSAgc2N0cF91c2Vyc3BhY2VfZ2V0X210dV9mcm9tX2lmbihp
Zl9uYW1ldG9pbmRleCgoKHN0cnVjdCBpZmFkZHJzICopIChzY3RwX2lmbikpLT5pZmFfbmFtZSks
IEFGX0lORVQpCisjZGVmaW5lIFNDVFBfR0FUSEVSX01UVV9GUk9NX0lOVEZDKHNjdHBfaWZuKSAo
c2N0cF9pZm4tPmlmbl9tdHUpCiAKICNkZWZpbmUgU0NUUF9TRVRfTVRVX09GX1JPVVRFKHNhLCBy
dCwgbXR1KSBkbyB7IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocnQgIT0gTlVMTCkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfb3V0cHV0LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9v
dXRwdXQuYwppbmRleCA2YTdkZmY5OWMyNDlhZTFmZTY5MDUxMjk4YjQ1N2ZhN2Y0MGZjNTAxLi44
MDBlMTM2Y2I3NjhjM2E4YjgyMTIzYjA4NGUyNTJhZTZiNmJjMGMyIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYworKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYwpAQCAtMzczNiw5ICszNzM2LDggQEAgc2N0cF9w
cm9jZXNzX2Ntc2dzX2Zvcl9pbml0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYg
KmNvbnRyb2wsIGludCAqZXIKIAkJCQkJfQogCQkJCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNv
Yy5zdHJlYW1vdXRjbnQ7IGkrKykgewogCQkJCQkJVEFJTFFfSU5JVCgmc3RjYi0+YXNvYy5zdHJt
b3V0W2ldLm91dHF1ZXVlKTsKKwkJCQkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3Nf
aW5pdF9zdHJlYW0oc3RjYiwgJnN0Y2ItPmFzb2Muc3RybW91dFtpXSwgTlVMTCk7CiAJCQkJCQlz
dGNiLT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcyA9IDA7Ci0JCQkJCQlzdGNiLT5h
c29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9IDA7Ci0JCQkJCQlzdGNiLT5hc29jLnN0
cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsKICNpZiBkZWZpbmVkKFNDVFBfREVUQUlM
RURfU1RSX1NUQVRTKQogCQkJCQkJZm9yIChqID0gMDsgaiA8IFNDVFBfUFJfU0NUUF9NQVggKyAx
OyBqKyspIHsKIAkJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbal0g
PSAwOwpAQCAtMzc0OCwxMCArMzc0NywxMSBAQCBzY3RwX3Byb2Nlc3NfY21zZ3NfZm9yX2luaXQo
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgaW50ICplcgogCQkJ
CQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmFiYW5kb25lZF9zZW50WzBdID0gMDsKIAkJCQkJCXN0
Y2ItPmFzb2Muc3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50WzBdID0gMDsKICNlbmRpZgorCQkJ
CQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX29yZGVyZWQgPSAwOworCQkJCQkJc3Rj
Yi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX3Vub3JkZXJlZCA9IDA7CiAJCQkJCQlzdGNiLT5h
c29jLnN0cm1vdXRbaV0uc2lkID0gaTsKIAkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5sYXN0
X21zZ19pbmNvbXBsZXRlID0gMDsKIAkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9
IFNDVFBfU1RSRUFNX09QRU5JTkc7Ci0JCQkJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3Rw
X3NzX2luaXRfc3RyZWFtKHN0Y2IsICZzdGNiLT5hc29jLnN0cm1vdXRbaV0sIE5VTEwpOwogCQkJ
CQl9CiAJCQkJfQogCQkJCWJyZWFrOwpAQCAtNTY4MiwyNCArNTY4MiwyMyBAQCBzY3RwX2FyZXRo
ZXJlX3VucmVjb2duaXplZF9wYXJhbWV0ZXJzKHN0cnVjdCBtYnVmICppbl9pbml0cGt0LAogCXJl
dHVybiAob3BfZXJyKTsKIH0KIAotc3RhdGljIGludAorLyoKKyAqIEdpdmVuIGEgSU5JVCBjaHVu
aywgbG9vayB0aHJvdWdoIHRoZSBwYXJhbWV0ZXJzIHRvIHZlcmlmeSB0aGF0IHRoZXJlCisgKiBh
cmUgbm8gbmV3IGFkZHJlc3Nlcy4KKyAqIFJldHVybiB0cnVlLCBpZiB0aGVyZSBpcyBhIG5ldyBh
ZGRyZXNzIG9yIHRoZXJlIGlzIGEgcHJvYmxlbSBwYXJzaW5nCisgICB0aGUgcGFyYW1ldGVycy4g
UHJvdmlkZSBhbiBvcHRpb25hbCBlcnJvciBjYXVzZSB1c2VkIHdoZW4gc2VuZGluZyBhbiBBQk9S
VC4KKyAqIFJldHVybiBmYWxzZSwgaWYgdGhlcmUgYXJlIG5vIG5ldyBhZGRyZXNzZXMgYW5kIHRo
ZXJlIGlzIG5vIHByb2JsZW0gaW4KKyAgIHBhcmFtZXRlciBwcm9jZXNzaW5nLgorICovCitzdGF0
aWMgYm9vbAogc2N0cF9hcmVfdGhlcmVfbmV3X2FkZHJlc3NlcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYywKLSAgICBzdHJ1Y3QgbWJ1ZiAqaW5faW5pdHBrdCwgaW50IG9mZnNldCwgc3Ry
dWN0IHNvY2thZGRyICpzcmMpCisgICAgc3RydWN0IG1idWYgKmluX2luaXRwa3QsIGludCBvZmZz
ZXQsIGludCBsaW1pdCwgc3RydWN0IHNvY2thZGRyICpzcmMsCisgICAgc3RydWN0IG1idWYgKipv
cF9lcnIpCiB7Ci0JLyoKLQkgKiBHaXZlbiBhIElOSVQgcGFja2V0LCBsb29rIHRocm91Z2ggdGhl
IHBhY2tldCB0byB2ZXJpZnkgdGhhdCB0aGVyZQotCSAqIGFyZSBOTyBuZXcgYWRkcmVzc2VzLiBB
cyB3ZSBnbyB0aHJvdWdoIHRoZSBwYXJhbWV0ZXJzIGFkZCByZXBvcnRzCi0JICogb2YgYW55IHVu
LXVuZGVyc3Rvb2QgcGFyYW1ldGVycyB0aGF0IHJlcXVpcmUgYW4gZXJyb3IuICBBbHNvIHdlCi0J
ICogbXVzdCByZXR1cm4gKDEpIHRvIGRyb3AgdGhlIHBhY2tldCBpZiB3ZSBzZWUgYSB1bi11bmRl
cnN0b29kCi0JICogcGFyYW1ldGVyIHRoYXQgdGVsbHMgdXMgdG8gZHJvcCB0aGUgY2h1bmsuCi0J
ICovCiAJc3RydWN0IHNvY2thZGRyICpzYV90b3VzZTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhOwog
CXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRyLCBwYXJhbXM7Ci0JdWludDE2X3QgcHR5cGUsIHBs
ZW47Ci0JdWludDhfdCBmbmQ7CiAJc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCWludCBjaGVja19z
cmM7CiAjaWZkZWYgSU5FVAogCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW40LCAqc2E0OwogI2VuZGlm
CkBAIC01NzA5LDcgKzU3MDgsMTAgQEAgc2N0cF9hcmVfdGhlcmVfbmV3X2FkZHJlc3NlcyhzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKICNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCiAJ
c3RydWN0IHNvY2thZGRyX2Nvbm4gKnNhYzsKICNlbmRpZgorCXVpbnQxNl90IHB0eXBlLCBwbGVu
OworCWJvb2wgZm5kLCBjaGVja19zcmM7CiAKKwkqb3BfZXJyID0gTlVMTDsKICNpZmRlZiBJTkVU
CiAJbWVtc2V0KCZzaW40LCAwLCBzaXplb2Yoc2luNCkpOwogCXNpbjQuc2luX2ZhbWlseSA9IEFG
X0lORVQ7CkBAIC01NzI1LDI2ICs1NzI3LDI2IEBAIHNjdHBfYXJlX3RoZXJlX25ld19hZGRyZXNz
ZXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAjZW5kaWYKICNlbmRpZgogCS8qIEZp
cnN0IHdoYXQgYWJvdXQgdGhlIHNyYyBhZGRyZXNzIG9mIHRoZSBwa3QgPyAqLwotCWNoZWNrX3Ny
YyA9IDA7CisJY2hlY2tfc3JjID0gZmFsc2U7CiAJc3dpdGNoIChzcmMtPnNhX2ZhbWlseSkgewog
I2lmZGVmIElORVQKIAljYXNlIEFGX0lORVQ6CiAJCWlmIChhc29jLT5zY29wZS5pcHY0X2FkZHJf
bGVnYWwpIHsKLQkJCWNoZWNrX3NyYyA9IDE7CisJCQljaGVja19zcmMgPSB0cnVlOwogCQl9CiAJ
CWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgSU5FVDYKIAljYXNlIEFGX0lORVQ2OgogCQlpZiAoYXNv
Yy0+c2NvcGUuaXB2Nl9hZGRyX2xlZ2FsKSB7Ci0JCQljaGVja19zcmMgPSAxOworCQkJY2hlY2tf
c3JjID0gdHJ1ZTsKIAkJfQogCQlicmVhazsKICNlbmRpZgogI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKIAljYXNlIEFGX0NPTk46CiAJCWlmIChhc29jLT5zY29wZS5jb25uX2FkZHJfbGVnYWwp
IHsKLQkJCWNoZWNrX3NyYyA9IDE7CisJCQljaGVja19zcmMgPSB0cnVlOwogCQl9CiAJCWJyZWFr
OwogI2VuZGlmCkBAIC01NzUzLDcgKzU3NTUsNyBAQCBzY3RwX2FyZV90aGVyZV9uZXdfYWRkcmVz
c2VzKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQlicmVhazsKIAl9CiAJaWYgKGNo
ZWNrX3NyYykgewotCQlmbmQgPSAwOworCQlmbmQgPSBmYWxzZTsKIAkJVEFJTFFfRk9SRUFDSChu
ZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKIAkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAq
KSZuZXQtPnJvLl9sX2FkZHI7CiAJCQlpZiAoc2EtPnNhX2ZhbWlseSA9PSBzcmMtPnNhX2ZhbWls
eSkgewpAQCAtNTc2NCw3ICs1NzY2LDcgQEAgc2N0cF9hcmVfdGhlcmVfbmV3X2FkZHJlc3Nlcyhz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCQkJc2E0ID0gKHN0cnVjdCBzb2NrYWRk
cl9pbiAqKXNhOwogCQkJCQlzcmM0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNyYzsKIAkJCQkJ
aWYgKHNhNC0+c2luX2FkZHIuc19hZGRyID09IHNyYzQtPnNpbl9hZGRyLnNfYWRkcikgewotCQkJ
CQkJZm5kID0gMTsKKwkJCQkJCWZuZCA9IHRydWU7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJ
CX0KQEAgLTU3NzYsNyArNTc3OCw3IEBAIHNjdHBfYXJlX3RoZXJlX25ld19hZGRyZXNzZXMoc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQkJCXNhNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopc2E7CiAJCQkJCXNyYzYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNyYzsKIAkJCQkJ
aWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNhNiwgc3JjNikpIHsKLQkJCQkJCWZuZCA9IDE7CisJ
CQkJCQlmbmQgPSB0cnVlOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQl9CkBAIC01Nzg4LDE2
ICs1NzkwLDIyIEBAIHNjdHBfYXJlX3RoZXJlX25ld19hZGRyZXNzZXMoc3RydWN0IHNjdHBfYXNz
b2NpYXRpb24gKmFzb2MsCiAJCQkJCXNhYyA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNhOwog
CQkJCQlzcmNjID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopc3JjOwogCQkJCQlpZiAoc2FjLT5z
Y29ubl9hZGRyID09IHNyY2MtPnNjb25uX2FkZHIpIHsKLQkJCQkJCWZuZCA9IDE7CisJCQkJCQlm
bmQgPSB0cnVlOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQl9CiAjZW5kaWYKIAkJCX0KIAkJ
fQotCQlpZiAoZm5kID09IDApIHsKLQkJCS8qIE5ldyBhZGRyZXNzIGFkZGVkISBubyBuZWVkIHRv
IGxvb2sgZnVydGhlci4gKi8KLQkJCXJldHVybiAoMSk7CisJCWlmICghZm5kKSB7CisJCQkvKgor
CQkJICogSWYgc2VuZGluZyBhbiBBQk9SVCBpbiBjYXNlIG9mIGFuIGFkZGl0aW9uYWwgYWRkcmVz
cywKKwkJCSAqIGRvbid0IHVzZSB0aGUgbmV3IGFkZHJlc3MgZXJyb3IgY2F1c2UuCisJCQkgKiBU
aGlzIGxvb2tzIG5vIGRpZmZlcmVudCB0aGFuIGlmIG5vIGxpc3RlbmVyIHdhcworCQkJICogcHJl
c2VudC4KKwkJCSAqLworCQkJKm9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwgIkFkZHJlc3MgYWRkZWQiKTsKKwkJCXJldHVy
biAodHJ1ZSk7CiAJCX0KIAl9CiAJLyogT2sgc28gZmFyIGxldHMgbXVuZ2UgdGhyb3VnaCB0aGUg
cmVzdCBvZiB0aGUgcGFja2V0ICovCkBAIC01ODA3LDYgKzU4MTUsMTQgQEAgc2N0cF9hcmVfdGhl
cmVfbmV3X2FkZHJlc3NlcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJc2FfdG91
c2UgPSBOVUxMOwogCQlwdHlwZSA9IG50b2hzKHBoZHItPnBhcmFtX3R5cGUpOwogCQlwbGVuID0g
bnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKTsKKwkJaWYgKG9mZnNldCArIHBsZW4gPiBsaW1pdCkg
eworCQkJKm9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9W
SU9MQVRJT04sICJQYXJ0aWFsIHBhcmFtZXRlciIpOworCQkJcmV0dXJuICh0cnVlKTsKKwkJfQor
CQlpZiAocGxlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsKKwkJCSpvcF9lcnIg
PSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCAiUGFy
YW1ldGVyIGxlbmd0aCB0b28gc21hbGwiKTsKKwkJCXJldHVybiAodHJ1ZSk7CisJCX0KIAkJc3dp
dGNoIChwdHlwZSkgewogI2lmZGVmIElORVQKIAkJY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKQEAg
LTU4MTQsMTIgKzU4MzAsMTQgQEAgc2N0cF9hcmVfdGhlcmVfbmV3X2FkZHJlc3NlcyhzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICpw
NCwgcDRfYnVmOwogCiAJCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJf
cGFyYW0pKSB7Ci0JCQkJcmV0dXJuICgxKTsKKwkJCQkqb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9j
YXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgIlBhcmFtZXRlciBsZW5ndGggaWxs
ZWdhbCIpOworCQkJCXJldHVybiAodHJ1ZSk7CiAJCQl9CiAJCQlwaGRyID0gc2N0cF9nZXRfbmV4
dF9wYXJhbShpbl9pbml0cGt0LCBvZmZzZXQsCiAJCQkgICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRy
ICopJnA0X2J1Ziwgc2l6ZW9mKHA0X2J1ZikpOwogCQkJaWYgKHBoZHIgPT0gTlVMTCkgewotCQkJ
CXJldHVybiAoMSk7CisJCQkJKm9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVT
RV9QUk9UT0NPTF9WSU9MQVRJT04sICIiKTsKKwkJCQlyZXR1cm4gKHRydWUpOwogCQkJfQogCQkJ
aWYgKGFzb2MtPnNjb3BlLmlwdjRfYWRkcl9sZWdhbCkgewogCQkJCXA0ID0gKHN0cnVjdCBzY3Rw
X2lwdjRhZGRyX3BhcmFtICopcGhkcjsKQEAgLTU4MzUsMTIgKzU4NTMsMTQgQEAgc2N0cF9hcmVf
dGhlcmVfbmV3X2FkZHJlc3NlcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCXN0
cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICpwNiwgcDZfYnVmOwogCiAJCQlpZiAocGxlbiAhPSBz
aXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSB7Ci0JCQkJcmV0dXJuICgxKTsKKwkJ
CQkqb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xB
VElPTiwgIlBhcmFtZXRlciBsZW5ndGggaWxsZWdhbCIpOworCQkJCXJldHVybiAodHJ1ZSk7CiAJ
CQl9CiAJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShpbl9pbml0cGt0LCBvZmZzZXQsCiAJ
CQkgICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopJnA2X2J1Ziwgc2l6ZW9mKHA2X2J1ZikpOwog
CQkJaWYgKHBoZHIgPT0gTlVMTCkgewotCQkJCXJldHVybiAoMSk7CisJCQkJKm9wX2VyciA9IHNj
dHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sICIiKTsKKwkJ
CQlyZXR1cm4gKHRydWUpOwogCQkJfQogCQkJaWYgKGFzb2MtPnNjb3BlLmlwdjZfYWRkcl9sZWdh
bCkgewogCQkJCXA2ID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICopcGhkcjsKQEAgLTU4
NTcsNyArNTg3Nyw3IEBAIHNjdHBfYXJlX3RoZXJlX25ld19hZGRyZXNzZXMoc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2MsCiAJCX0KIAkJaWYgKHNhX3RvdXNlKSB7CiAJCQkvKiBvaywgc2Ff
dG91c2UgcG9pbnRzIHRvIG9uZSB0byBjaGVjayAqLwotCQkJZm5kID0gMDsKKwkJCWZuZCA9IGZh
bHNlOwogCQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKIAkJ
CQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyOwogCQkJCWlmIChzYS0+
c2FfZmFtaWx5ICE9IHNhX3RvdXNlLT5zYV9mYW1pbHkpIHsKQEAgLTU4NjgsNyArNTg4OCw3IEBA
IHNjdHBfYXJlX3RoZXJlX25ld19hZGRyZXNzZXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2MsCiAJCQkJCXNhNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKIAkJCQkJaWYgKHNhNC0+
c2luX2FkZHIuc19hZGRyID09CiAJCQkJCSAgICBzaW40LnNpbl9hZGRyLnNfYWRkcikgewotCQkJ
CQkJZm5kID0gMTsKKwkJCQkJCWZuZCA9IHRydWU7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJ
CX0KQEAgLTU4NzgsMjEgKzU4OTgsMzEgQEAgc2N0cF9hcmVfdGhlcmVfbmV3X2FkZHJlc3Nlcyhz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCQkJc2E2ID0gKHN0cnVjdCBzb2NrYWRk
cl9pbjYgKilzYTsKIAkJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKAogCQkJCQkgICAgc2E2
LCAmc2luNikpIHsKLQkJCQkJCWZuZCA9IDE7CisJCQkJCQlmbmQgPSB0cnVlOwogCQkJCQkJYnJl
YWs7CiAJCQkJCX0KIAkJCQl9CiAjZW5kaWYKIAkJCX0KIAkJCWlmICghZm5kKSB7Ci0JCQkJLyog
TmV3IGFkZHIgYWRkZWQhIG5vIG5lZWQgdG8gbG9vayBmdXJ0aGVyICovCi0JCQkJcmV0dXJuICgx
KTsKKwkJCQkvKgorCQkJCSAqIElmIHNlbmRpbmcgYW4gQUJPUlQgaW4gY2FzZSBvZiBhbiBhZGRp
dGlvbmFsCisJCQkJICogYWRkcmVzcywgZG9uJ3QgdXNlIHRoZSBuZXcgYWRkcmVzcyBlcnJvcgor
CQkJCSAqIGNhdXNlLgorCQkJCSAqIFRoaXMgbG9va3Mgbm8gZGlmZmVyZW50IHRoYW4gaWYgbm8g
bGlzdGVuZXIKKwkJCQkgKiB3YXMgcHJlc2VudC4KKwkJCQkgKi8KKwkJCQkqb3BfZXJyID0gc2N0
cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLCAi
QWRkcmVzcyBhZGRlZCIpOworCQkJCXJldHVybiAodHJ1ZSk7CiAJCQl9CiAJCX0KIAkJb2Zmc2V0
ICs9IFNDVFBfU0laRTMyKHBsZW4pOworCQlpZiAob2Zmc2V0ID49IGxpbWl0KSB7CisJCQlicmVh
azsKKwkJfQogCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShpbl9pbml0cGt0LCBvZmZzZXQs
ICZwYXJhbXMsIHNpemVvZihwYXJhbXMpKTsKIAl9Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gKGZh
bHNlKTsKIH0KIAogLyoKQEAgLTU5MDgsNyArNTkzOCw3IEBAIHNjdHBfc2VuZF9pbml0aWF0ZV9h
Y2soc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAogICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2thZGRyICpk
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgc3RydWN0IHNj
dHBfaW5pdF9jaHVuayAqaW5pdF9jaGssCiAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJf
dCBtZmxvd2lkLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWlu
dDMyX3QgbWZsb3dpZCwKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2
cmZfaWQsIHVpbnQxNl90IHBvcnQpCiB7CkBAIC01OTU1LDE2ICs1OTg1LDEwIEBAIHNjdHBfc2Vu
ZF9pbml0aWF0ZV9hY2soc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpz
dGNiLAogCX0KIAlpZiAoKGFzb2MgIT0gTlVMTCkgJiYKIAkgICAgKFNDVFBfR0VUX1NUQVRFKHN0
Y2IpICE9IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpKSB7Ci0JCWlmIChzY3RwX2FyZV90aGVyZV9u
ZXdfYWRkcmVzc2VzKGFzb2MsIGluaXRfcGt0LCBvZmZzZXQsIHNyYykpIHsKKwkJaWYgKHNjdHBf
YXJlX3RoZXJlX25ld19hZGRyZXNzZXMoYXNvYywgaW5pdF9wa3QsIG9mZnNldCwgb2Zmc2V0ICsg
bnRvaHMoaW5pdF9jaGstPmNoLmNodW5rX2xlbmd0aCksIHNyYywgJm9wX2VycikpIHsKIAkJCS8q
CiAJCQkgKiBuZXcgYWRkcmVzc2VzLCBvdXQgb2YgaGVyZSBpbiBub24tY29va2llLXdhaXQgc3Rh
dGVzCi0JCQkgKgotCQkJICogU2VuZCBhbiBBQk9SVCwgd2l0aG91dCB0aGUgbmV3IGFkZHJlc3Mg
ZXJyb3IgY2F1c2UuCi0JCQkgKiBUaGlzIGxvb2tzIG5vIGRpZmZlcmVudCB0aGFuIGlmIG5vIGxp
c3RlbmVyCi0JCQkgKiB3YXMgcHJlc2VudC4KIAkJCSAqLwotCQkJb3BfZXJyID0gc2N0cF9nZW5l
cmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAotCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiQWRkcmVzcyBhZGRlZCIpOwogCQkJc2N0cF9zZW5k
X2Fib3J0KGluaXRfcGt0LCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgMCwgb3BfZXJyLAogI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCiAJCQkgICAgICAg
ICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKQEAgLTEyOTI4LDE1ICsx
Mjk1MiwyNCBAQCBzY3RwX3NlbmRfc3RyX3Jlc2V0X3JlcShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
CiAJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfY2xlYXIoc3RjYiwgJnN0Y2ItPmFz
b2MsIDAsIDEpOwogCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkr
KykgewogCQkJVEFJTFFfSU5JVCgmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlKTsKKwkJ
CS8qIEZJWCBNRSBGSVggTUUgKi8KKwkJCS8qIFRoaXMgc2hvdWxkIGJlIGEgU1NfQ09QWSBvcGVy
YXRpb24gRklYIE1FIFNUUkVBTSBTQ0hFRFVMRVIgRVhQRVJUICovCisJCQlzdGNiLT5hc29jLnNz
X2Z1bmN0aW9ucy5zY3RwX3NzX2luaXRfc3RyZWFtKHN0Y2IsICZzdGNiLT5hc29jLnN0cm1vdXRb
aV0sICZvbGRzdHJlYW1baV0pOwogCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmNodW5rc19vbl9x
dWV1ZXMgPSBvbGRzdHJlYW1baV0uY2h1bmtzX29uX3F1ZXVlczsKKyNpZiBkZWZpbmVkKFNDVFBf
REVUQUlMRURfU1RSX1NUQVRTKQorCQkJZm9yIChqID0gMDsgaiA8IFNDVFBfUFJfU0NUUF9NQVgg
KyAxOyBqKyspIHsKKwkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbal0g
PSBvbGRzdHJlYW1baV0uYWJhbmRvbmVkX3NlbnRbal07CisJCQkJc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLmFiYW5kb25lZF91bnNlbnRbal0gPSBvbGRzdHJlYW1baV0uYWJhbmRvbmVkX3Vuc2VudFtq
XTsKKwkJCX0KKyNlbHNlCisJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRb
MF0gPSBvbGRzdHJlYW1baV0uYWJhbmRvbmVkX3NlbnRbMF07CisJCQlzdGNiLT5hc29jLnN0cm1v
dXRbaV0uYWJhbmRvbmVkX3Vuc2VudFswXSA9IG9sZHN0cmVhbVtpXS5hYmFuZG9uZWRfdW5zZW50
WzBdOworI2VuZGlmCiAJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9
IG9sZHN0cmVhbVtpXS5uZXh0X21pZF9vcmRlcmVkOwogCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ld
Lm5leHRfbWlkX3Vub3JkZXJlZCA9IG9sZHN0cmVhbVtpXS5uZXh0X21pZF91bm9yZGVyZWQ7CiAJ
CQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubGFzdF9tc2dfaW5jb21wbGV0ZSA9IG9sZHN0cmVhbVtp
XS5sYXN0X21zZ19pbmNvbXBsZXRlOwogCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnNpZCA9IGk7
CiAJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPSBvbGRzdHJlYW1baV0uc3RhdGU7Ci0J
CQkvKiBGSVggTUUgRklYIE1FICovCi0JCQkvKiBUaGlzIHNob3VsZCBiZSBhIFNTX0NPUFkgb3Bl
cmF0aW9uIEZJWCBNRSBTVFJFQU0gU0NIRURVTEVSIEVYUEVSVCAqLwotCQkJc3RjYi0+YXNvYy5z
c19mdW5jdGlvbnMuc2N0cF9zc19pbml0X3N0cmVhbShzdGNiLCAmc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLCAmb2xkc3RyZWFtW2ldKTsKIAkJCS8qIG5vdyBhbnl0aGluZyBvbiB0aG9zZSBxdWV1ZXM/
ICovCiAJCQlUQUlMUV9GT1JFQUNIX1NBRkUoc3AsICZvbGRzdHJlYW1baV0ub3V0cXVldWUsIG5l
eHQsIG5zcCkgewogCQkJCVRBSUxRX1JFTU9WRSgmb2xkc3RyZWFtW2ldLm91dHF1ZXVlLCBzcCwg
bmV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2Iu
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5jCmluZGV4IGNjZWI5ZTNk
M2YyOTZiNjgyYWZjMTY1MjUyMmViNjNkNWU2YTExZTkuLmYyMWFhMTBlMjBlOGM1OGRiOGM2NDRh
YjJjMTdkYWU4ZmEzNTk1MDEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5l
dC9zY3RwX3BjYi5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5j
CkBAIC0zNCw3ICszNCw3IEBACiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVl
QlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfcGNiLmMgMzY2NDgzIDIwMjAtMTAtMDYgMTE6Mjk6
MDhaIHR1ZXhlbiAkIik7CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjZW5kaWYKIAogI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgpAQCAtNTE4MSw2ICs1MTgxLDEwIEBAIG91dDoKIAkJLyog
Q2xlYXIgbmV0ICovCiAJCWFzb2MtPmxhc3RfY29udHJvbF9jaHVua19mcm9tID0gTlVMTDsKIAl9
CisJaWYgKG5ldCA9PSBhc29jLT5sYXN0X25ldF9jbXRfc2VuZF9zdGFydGVkKSB7CisJCS8qIENs
ZWFyIG5ldCAqLworCQlhc29jLT5sYXN0X25ldF9jbXRfc2VuZF9zdGFydGVkID0gTlVMTDsKKwl9
CiAJaWYgKG5ldCA9PSBzdGNiLT5hc29jLmFsdGVybmF0ZSkgewogCQlzY3RwX2ZyZWVfcmVtb3Rl
X2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOwogCQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IE5V
TEw7CkBAIC02NDQ5LDcgKzY0NTMsNyBAQCBzY3RwX3N0YXJ0dXBfbWNvcmVfdGhyZWFkcyh2b2lk
KQogCQkodm9pZClrcHJvY19jcmVhdGUoc2N0cF9tY29yZV90aHJlYWQsCiAJCQkJICAgKHZvaWQg
Kikmc2N0cF9tY29yZV93b3JrZXJzW2NwdV0sCiAJCQkJICAgJnNjdHBfbWNvcmVfd29ya2Vyc1tj
cHVdLnRocmVhZF9wcm9jLAotCQkJCSAgIFJGUFJPQywKKwkJCQkgICAwLAogCQkJCSAgIFNDVFBf
S1RIUkVBRF9QQUdFUywKIAkJCQkgICBTQ1RQX01DT1JFX05BTUUpOwogCX0KQEAgLTY3MDQsNyAr
NjcwOCw3IEBAIHNjdHBfcGNiX2luaXQodm9pZCkKICNlbmRpZgogI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKIAltYnVmX2luaXRpYWxpemUoTlVMTCk7Ci0JLy8gV2ViS2l0IGNoYW5nZSwgdGhp
cyBjb25mbGljdHMgd2l0aCBhdG9taWNfaW5pdAorICAgIC8vIFdlYktpdCBjaGFuZ2UsIHRoaXMg
Y29uZmxpY3RzIHdpdGggYXRvbWljX2luaXQKIAkvLyBhdG9taWNfaW5pdCgpOwogI2lmIGRlZmlu
ZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKIAlpZiAoc3RhcnRfdGhyZWFkcykKQEAgLTc1MzAs
NyArNzUzNCw3IEBAIHNjdHBfbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0KHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IG1idWYgKm0sCiAJCQlicmVhazsKIAkJfQogCQlwaGRyID0gc2N0cF9n
ZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsICZwYXJhbV9idWYsCi0JCQkJCSAgIHNpemVvZihwYXJh
bV9idWYpKTsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBhcmFtX2J1Zikp
OwogCX0KIAkvKiBOb3cgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcHVyZ2UgYW55IGFkZHJl
c3NlcyAqLwogCVRBSUxRX0ZPUkVBQ0hfU0FGRShuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBf
bmV4dCwgbm5ldCkgewpAQCAtNzU0MCwxMSArNzU0NCwxNSBAQCBzY3RwX2xvYWRfYWRkcmVzc2Vz
X2Zyb21faW5pdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICptLAogCQkJLyog
cmVtb3ZlIGFuZCBmcmVlIGl0ICovCiAJCQlzdGNiLT5hc29jLm51bW5ldHMtLTsKIAkJCVRBSUxR
X1JFTU9WRSgmc3RjYi0+YXNvYy5uZXRzLCBuZXQsIHNjdHBfbmV4dCk7Ci0JCQlzY3RwX2ZyZWVf
cmVtb3RlX2FkZHIobmV0KTsKKwkJCWlmIChuZXQgPT0gc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsK
KwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOworCQkJCXN0
Y2ItPmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKKwkJCX0KIAkJCWlmIChuZXQgPT0gc3RjYi0+YXNv
Yy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSB7CiAJCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uID0gTlVMTDsKIAkJCQlzY3RwX3NlbGVjdF9wcmltYXJ5X2Rlc3RpbmF0aW9uKHN0Y2IpOwog
CQkJfQorCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKG5ldCk7CiAJCX0KIAl9CiAJaWYgKChzdGNi
LT5hc29jLmVjbl9zdXBwb3J0ZWQgPT0gMSkgJiYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX3NoYTEuYwppbmRleCBkYjBlNzUzM2ZmNmFiNzY0ZjA1MTc5MGMwMDZkMmFkMTVkNDlmYmQx
Li44NDcyYzNhMWMwYmQ0MTM1NWM5ZjBiZDJlOGJlNTRmYTA3ZThiMmRjIDEwMDc1NQotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zaGExLmMKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfc2hhMS5jCkBAIC04MCw3ICs4MCwyNSBAQCBzY3RwX3NoYTFf
ZmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKmN0
eCkKIHsKIAlTSEExX0ZpbmFsKGRpZ2VzdCwgJmN0eC0+c2hhX2N0eCk7CiB9CisjZWxpZiBkZWZp
bmVkKFNDVFBfVVNFX01CRURUTFNfU0hBMSkKK3ZvaWQKK3NjdHBfc2hhMV9pbml0KHN0cnVjdCBz
Y3RwX3NoYTFfY29udGV4dCAqY3R4KQoreworCW1iZWR0bHNfc2hhMV9pbml0KCZjdHgtPnNoYTFf
Y3R4KTsKKwltYmVkdGxzX3NoYTFfc3RhcnRzX3JldCgmY3R4LT5zaGExX2N0eCk7Cit9CiAKK3Zv
aWQKK3NjdHBfc2hhMV91cGRhdGUoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgsIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnB0ciwgdW5zaWduZWQgaW50IHNpeikKK3sKKwltYmVkdGxzX3NoYTFf
dXBkYXRlX3JldCgmY3R4LT5zaGExX2N0eCwgcHRyLCBzaXopOworfQorCit2b2lkCitzY3RwX3No
YTFfZmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQg
KmN0eCkKK3sKKwltYmVkdGxzX3NoYTFfZmluaXNoX3JldCgmY3R4LT5zaGExX2N0eCwgZGlnZXN0
KTsKK30KICNlbHNlCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3NoYTEuaAppbmRleCBkNTM1ZWU0NjM5NTE4ODI3MTE3MjZiMzRmODczYWFmMmFl
MjcxMjY5Li45ZmY0ZmY3YmRjMmY0ZWMwNjhlZGRjYmE2ZGM1Njk2NDVjZmY3OTFjIDEwMDc1NQot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zaGExLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc2hhMS5oCkBAIC00Niw2ICs0Niw4IEBAIF9fRkJT
RElEKCIkRnJlZUJTRCQiKTsKICNpbmNsdWRlIDxwazExcHViLmg+CiAjZWxpZiBkZWZpbmVkKFND
VFBfVVNFX09QRU5TU0xfU0hBMSkKICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorI2VsaWYgZGVm
aW5lZChTQ1RQX1VTRV9NQkVEVExTX1NIQTEpCisjaW5jbHVkZSA8bWJlZHRscy9zaGExLmg+CiAj
ZW5kaWYKIAogc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0IHsKQEAgLTUzLDYgKzU1LDggQEAgc3Ry
dWN0IHNjdHBfc2hhMV9jb250ZXh0IHsKIAlzdHJ1Y3QgUEsxMUNvbnRleHQgKnBrMTFfY3R4Owog
I2VsaWYgZGVmaW5lZChTQ1RQX1VTRV9PUEVOU1NMX1NIQTEpCiAJU0hBX0NUWCBzaGFfY3R4Owor
I2VsaWYgZGVmaW5lZChTQ1RQX1VTRV9NQkVEVExTX1NIQTEpCisJbWJlZHRsc19zaGExX2NvbnRl
eHQgc2hhMV9jdHg7CiAjZWxzZQogCXVuc2lnbmVkIGludCBBOwogCXVuc2lnbmVkIGludCBCOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3NfZnVuY3Rpb25z
LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYwppbmRl
eCA0MzFjYmYyM2FlODRmOGY1ZjFlZDFmZmNlY2YxZDBmZWFlN2RkZmEwLi5jMjNlMTQyZWE0NGI4
OTBiN2Y3ZWM5OTQyNmQyNzVhMzgxYjI0NDVmIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYwpAQCAtNTg5LDcgKzU4OSw3IEBAIHNjdHBfc3Nf
cHJpb19zZXRfdmFsdWUoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYywKIAogLyoKICAqIEZhaXIgYmFuZHdpZHRoIGFsZ29yaXRobS4KLSAqIE1haW50
YWlucyBhbiBlcXVhbCB0cm91Z2hwdXQgcGVyIHN0cmVhbS4KKyAqIE1haW50YWlucyBhbiBlcXVh
bCB0aHJvdWdocHV0IHBlciBzdHJlYW0uCiAgKi8KIHN0YXRpYyB2b2lkCiBzY3RwX3NzX2ZiX2Ns
ZWFyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2Ms
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zdHJ1Y3RzLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zdHJ1Y3RzLmgKaW5kZXggNzA4YWI3
MDJmMTE4ZTJjZWIxYWY0YmQ1MWM3MTM2NmI5NWY1NGQ2My4uYzNjZTc0OTkyMmUwZTQ5NmRhMDBl
MWJlZjFlOTA3ZTRhZTg5YzIxZCAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfc3RydWN0cy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X3N0cnVjdHMuaApAQCAtMzQsNyArMzQsNyBAQAogCiAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJT
RElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX3N0cnVjdHMuaCAzNjUwNzEgMjAy
MC0wOS0wMSAyMToxOToxNFogbWpnICQiKTsKK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNlbmRp
ZgogCiAjaWZuZGVmIF9ORVRJTkVUX1NDVFBfU1RSVUNUU19IXwpAQCAtNTk4LDYgKzU5OCwyMCBA
QCBzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gewogVEFJTFFfSEVBRChzY3Rwd2hlZWxfbGlzdGhlYWQs
IHNjdHBfc3RyZWFtX291dCk7CiBUQUlMUV9IRUFEKHNjdHBsaXN0X2xpc3RoZWFkLCBzY3RwX3N0
cmVhbV9xdWV1ZV9wZW5kaW5nKTsKIAorLyoKKyAqIFRoaXMgdW5pb24gaG9sZHMgYWxsIGRhdGEg
bmVjZXNzYXJ5IGZvcgorICogZGlmZmVyZW50IHN0cmVhbSBzY2hlZHVsZXJzLgorICovCitzdHJ1
Y3Qgc2NoZWR1bGluZ19kYXRhIHsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpsb2NrZWRfb25f
c2VuZGluZzsKKwkvKiBjaXJjdWxhciBsb29raW5nIGZvciBvdXRwdXQgc2VsZWN0aW9uICovCisJ
c3RydWN0IHNjdHBfc3RyZWFtX291dCAqbGFzdF9vdXRfc3RyZWFtOworCXVuaW9uIHsKKwkJc3Ry
dWN0IHNjdHB3aGVlbF9saXN0aGVhZCB3aGVlbDsKKwkJc3RydWN0IHNjdHBsaXN0X2xpc3RoZWFk
IGxpc3Q7CisJfSBvdXQ7Cit9OworCiAvKiBSb3VuZC1yb2JpbiBzY2hlZHVsZXJzICovCiBzdHJ1
Y3Qgc3NfcnIgewogCS8qIG5leHQgbGluayBpbiB3aGVlbCAqLwpAQCAtNjIwLDIwICs2MzQsNiBA
QCBzdHJ1Y3Qgc3NfZmIgewogCWludDMyX3Qgcm91bmRzOwogfTsKIAotLyoKLSAqIFRoaXMgdW5p
b24gaG9sZHMgYWxsIGRhdGEgbmVjZXNzYXJ5IGZvcgotICogZGlmZmVyZW50IHN0cmVhbSBzY2hl
ZHVsZXJzLgotICovCi1zdHJ1Y3Qgc2NoZWR1bGluZ19kYXRhIHsKLQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fb3V0ICpsb2NrZWRfb25fc2VuZGluZzsKLQkvKiBjaXJjdWxhciBsb29raW5nIGZvciBvdXRw
dXQgc2VsZWN0aW9uICovCi0Jc3RydWN0IHNjdHBfc3RyZWFtX291dCAqbGFzdF9vdXRfc3RyZWFt
OwotCXVuaW9uIHsKLQkJc3RydWN0IHNjdHB3aGVlbF9saXN0aGVhZCB3aGVlbDsKLQkJc3RydWN0
IHNjdHBsaXN0X2xpc3RoZWFkIGxpc3Q7Ci0JfSBvdXQ7Ci19OwotCiAvKgogICogVGhpcyB1bmlv
biBob2xkcyBhbGwgcGFyYW1ldGVycyBwZXIgc3RyZWFtCiAgKiBuZWNlc3NhcnkgZm9yIGRpZmZl
cmVudCBzdHJlYW0gc2NoZWR1bGVycy4KQEAgLTY1MSw4ICs2NTEsNiBAQCB1bmlvbiBzY2hlZHVs
aW5nX3BhcmFtZXRlcnMgewogI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HICAgIDB4
MDMKICNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfSU5fRkxJR0hUICAweDA0CiAKLSNkZWZpbmUg
U0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JFU0VUIDIwMAotCiAvKiBUaGlzIHN0cnVjdCBpcyB1
c2VkIHRvIHRyYWNrIHRoZSB0cmFmZmljIG9uIG91dGJvdW5kIHN0cmVhbXMgKi8KIHN0cnVjdCBz
Y3RwX3N0cmVhbV9vdXQgewogCXN0cnVjdCBzY3RwX3N0cmVhbWhlYWQgb3V0cXVldWU7CkBAIC02
NzYsNiArNjc0LDggQEAgc3RydWN0IHNjdHBfc3RyZWFtX291dCB7CiAJdWludDhfdCBzdGF0ZTsK
IH07CiAKKyNkZWZpbmUgU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JFU0VUIDIwMAorCiAvKiB1
c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGFkZHJlc3NlcyB5ZXQgdG8gdHJ5IHRvIGFkZC9kZWxl
dGUgKi8KIFRBSUxRX0hFQUQoc2N0cF9hc2NvbmZfYWRkcmhlYWQsIHNjdHBfYXNjb25mX2FkZHIp
Owogc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfdGltZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX3RpbWVyLmMKaW5kZXggYTBjYTRhYWJmNDc1MmRlZTVkZGU4N2ZlNmY4ODgyNmY2Mzk4ZmRi
Yy4uZjI0ODMwNWUyN2M0ODA1YTljMWQzZmM4NWZhYWE5MjVhMWY5ODFmZiAxMDA3NTUKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdGltZXIuYworKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c3JzY3RwbGliL25ldGluZXQvc2N0cF90aW1lci5jCkBAIC0zNCw3ICszNCw3IEBACiAKICNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQogI2luY2x1ZGUg
PHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBf
dGltZXIuYyAzNjUwNzEgMjAyMC0wOS0wMSAyMToxOToxNFogbWpnICQiKTsKK19fRkJTRElEKCIk
RnJlZUJTRCQiKTsKICNlbmRpZgogCiAjZGVmaW5lIF9JUF9WSEwKQEAgLTE3MSw4ICsxNzEsOCBA
QCBzY3RwX3RocmVzaG9sZF9tYW5hZ2VtZW50KHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwKIH0KIAogLyoKLSAqIHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KCkg
cmV0dXJucyBhIG5vbi1OVUxMIHBvaW50ZXIgYXMgbG9uZwotICogdGhlIGFyZ3VtZW50IG5ldCBp
cyBub24tTlVMTC4KKyAqIHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KCkgcmV0dXJucyBhIG5vbi1O
VUxMIHBvaW50ZXIgYXMgbG9uZyBhcyB0aGVyZQorICogZXhpc3RzIG5ldHMsIHdoaWNoIGFyZSBu
b3QgYmVpbmcgZGVsZXRlZC4KICAqLwogc3RydWN0IHNjdHBfbmV0cyAqCiBzY3RwX2ZpbmRfYWx0
ZXJuYXRlX25ldChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCkBAIC0xODEsMTMgKzE4MSwxMyBAQCBz
Y3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCiB7CiAJLyogRmlu
ZCBhbmQgcmV0dXJuIGFuIGFsdGVybmF0ZSBuZXR3b3JrIGlmIHBvc3NpYmxlICovCiAJc3RydWN0
IHNjdHBfbmV0cyAqYWx0LCAqbW5ldCwgKm1pbl9lcnJvcnNfbmV0ID0gTlVMTCAsICptYXhfY3du
ZF9uZXQgPSBOVUxMOwotCWludCBvbmNlOworCWJvb2wgbG9vcGVkOwogCS8qIEpSUyA1LzE0LzA3
IC0gSW5pdGlhbGl6ZSBtaW5fZXJyb3JzIHRvIGFuIGltcG9zc2libGUgdmFsdWUuICovCiAJaW50
IG1pbl9lcnJvcnMgPSAtMTsKIAl1aW50MzJfdCBtYXhfY3duZCA9IDA7CiAKIAlpZiAoc3RjYi0+
YXNvYy5udW1uZXRzID09IDEpIHsKLQkJLyogTm8gb3RoZXJzIGJ1dCBuZXQgKi8KKwkJLyogTm8g
c2VsZWN0aW9uIGNhbiBiZSBtYWRlLiAqLwogCQlyZXR1cm4gKFRBSUxRX0ZJUlNUKCZzdGNiLT5h
c29jLm5ldHMpKTsKIAl9CiAJLyoKQEAgLTMyMywyNSArMzIzLDIyIEBAIHNjdHBfZmluZF9hbHRl
cm5hdGVfbmV0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKIAkJCXJldHVybiAobWF4X2N3bmRfbmV0
KTsKIAkJfQogCX0KLQltbmV0ID0gbmV0OwotCW9uY2UgPSAwOwotCi0JaWYgKG1uZXQgPT0gTlVM
TCkgewotCQltbmV0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7Ci0JCWlmIChtbmV0
ID09IE5VTEwpIHsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KKwkvKiBMb29rIGZvciBhbiBhbHRl
cm5hdGUgbmV0LCB3aGljaCBpcyBhY3RpdmUuICovCisJaWYgKChuZXQgIT0gTlVMTCkgJiYgKChu
ZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfQkVJTkdfREVMRVRFRCkgPT0gMCkpIHsKKwkJYWx0
ID0gVEFJTFFfTkVYVChuZXQsIHNjdHBfbmV4dCk7OworCX0gZWxzZSB7CisJCWFsdCA9IFRBSUxR
X0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOwogCX0KKwlsb29wZWQgPSBmYWxzZTsKIAlmb3IgKDs7
KSB7Ci0JCWFsdCA9IFRBSUxRX05FWFQobW5ldCwgc2N0cF9uZXh0KTsKIAkJaWYgKGFsdCA9PSBO
VUxMKSB7Ci0JCQlvbmNlKys7Ci0JCQlpZiAob25jZSA+IDEpIHsKLQkJCQlicmVhazsKKwkJCWlm
ICghbG9vcGVkKSB7CisJCQkJYWx0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7CisJ
CQkJbG9vcGVkID0gdHJ1ZTsKIAkJCX0KLQkJCWFsdCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29j
Lm5ldHMpOworCQkJLyogRGVmaW5pdGVseSBvdXQgb2YgY2FuZGlkYXRlcy4gKi8KIAkJCWlmIChh
bHQgPT0gTlVMTCkgewotCQkJCXJldHVybiAoTlVMTCk7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0K
ICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQpAQCAt
MzYxLDQzICszNTgsNTYgQEAgc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAogI2Vsc2UKIAkJICAgIChhbHQtPnJvLnJvX3J0ICE9IE5VTEwpICYmCiAjZW5kaWYK
LQkJICAgICghKGFsdC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpKSB7Ci0J
CQkvKiBGb3VuZCBhIHJlYWNoYWJsZSBhZGRyZXNzICovCisJCSAgICAoIShhbHQtPmRlc3Rfc3Rh
dGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSAmJgorCQkgICAgKGFsdCAhPSBuZXQpKSB7CisJ
CQkvKiBGb3VuZCBhbiBhbHRlcm5hdGUgbmV0LCB3aGljaCBpcyByZWFjaGFibGUuICovCiAJCQli
cmVhazsKIAkJfQotCQltbmV0ID0gYWx0OworCQlhbHQgPSBUQUlMUV9ORVhUKGFsdCwgc2N0cF9u
ZXh0KTsKIAl9CiAKIAlpZiAoYWx0ID09IE5VTEwpIHsKLQkJLyogQ2FzZSB3aGVyZSBOTyBpbnN2
IG5ldHdvcmsgZXhpc3RzIChkb3JtYW50IHN0YXRlKSAqLwotCQkvKiB3ZSByb3RhdGUgZGVzdGlu
YXRpb25zICovCi0JCW9uY2UgPSAwOwotCQltbmV0ID0gbmV0OworCQkvKgorCQkgKiBJbiBjYXNl
IG5vIGFjdGl2ZSBhbHRlcm5hdGUgbmV0IGhhcyBiZWVuIGZvdW5kLCBsb29rIGZvcgorCQkgKiBh
biBhbHRlcm5hdGUgbmV0LCB3aGljaCBpcyBjb25maXJtZWQuCisJCSAqLworCQlpZiAoKG5ldCAh
PSBOVUxMKSAmJiAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9CRUlOR19ERUxFVEVEKSA9
PSAwKSkgeworCQkJYWx0ID0gVEFJTFFfTkVYVChuZXQsIHNjdHBfbmV4dCk7OworCQl9IGVsc2Ug
eworCQkJYWx0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7CisJCX0KKwkJbG9vcGVk
ID0gZmFsc2U7CiAJCWZvciAoOzspIHsKLQkJCWlmIChtbmV0ID09IE5VTEwpIHsKLQkJCQlyZXR1
cm4gKFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpKTsKLQkJCX0KLQkJCWFsdCA9IFRBSUxR
X05FWFQobW5ldCwgc2N0cF9uZXh0KTsKIAkJCWlmIChhbHQgPT0gTlVMTCkgewotCQkJCW9uY2Ur
KzsKLQkJCQlpZiAob25jZSA+IDEpIHsKLQkJCQkJYnJlYWs7CisJCQkJaWYgKCFsb29wZWQpIHsK
KwkJCQkJYWx0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7CisJCQkJCWxvb3BlZCA9
IHRydWU7CiAJCQkJfQotCQkJCWFsdCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOwor
CQkJCS8qIERlZmluaXRlbHkgb3V0IG9mIGNhbmRpZGF0ZXMuICovCiAJCQkJaWYgKGFsdCA9PSBO
VUxMKSB7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KIAkJCWlmICgoIShhbHQtPmRlc3Rfc3Rh
dGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSAmJgogCQkJICAgIChhbHQgIT0gbmV0KSkgewot
CQkJCS8qIEZvdW5kIGFuIGFsdGVybmF0ZSBhZGRyZXNzICovCisJCQkJLyogRm91bmQgYW4gYWx0
ZXJuYXRlIG5ldCwgd2hpY2ggaXMgY29uZmlybWVkLiAqLwogCQkJCWJyZWFrOwogCQkJfQotCQkJ
bW5ldCA9IGFsdDsKKwkJCWFsdCA9IFRBSUxRX05FWFQoYWx0LCBzY3RwX25leHQpOwogCQl9CiAJ
fQogCWlmIChhbHQgPT0gTlVMTCkgewotCQlyZXR1cm4gKG5ldCk7CisJCS8qCisJCSAqIEluIGNh
c2Ugbm8gY29uZmlybWVkIGFsdGVybmF0ZSBuZXQgaGFzIGJlZW4gZm91bmQsIGp1c3QKKwkJICog
cmV0dXJuIG5ldCwgaWYgaXQgaXMgbm90IGJlaW5nIGRlbGV0ZWQuIEluIHRoZSBvdGhlciBjYXNl
CisJCSAqIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBuZXQuCisJCSAqLworCQlpZiAoKG5ldCAhPSBO
VUxMKSAmJiAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9CRUlOR19ERUxFVEVEKSA9PSAw
KSkgeworCQkJYWx0ID0gbmV0OworCQl9CisJCWlmIChhbHQgPT0gTlVMTCkgeworCQkJYWx0ID0g
VEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7CisJCX0KIAl9CiAJcmV0dXJuIChhbHQpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdXNlcnNwYWNl
LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYwppbmRleCBi
YTY0YWFmZjc3MGRlZWQzOTlmMjUyNmRiODg1MWUyNWE4OGE5YTFkLi40MWFmZjE5ZTA4ODdlYzI3
OTc4MmYwMWIyNjk0ZTMyNWViNmY1Yjk2IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF91c2Vyc3BhY2UuYwpAQCAtOTgsMjMgKzk4LDQyIEBAIHNjdHBfdXNlcnNwYWNlX3Nl
dF90aHJlYWRuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiBpbnQKIHNjdHBfdXNlcnNwYWNlX2dldF9t
dHVfZnJvbV9pZm4odWludDMyX3QgaWZfaW5kZXgsIGludCBhZikKIHsKKyNpZiBkZWZpbmVkKElO
RVQpIHx8IGRlZmluZWQoSU5FVDYpCiAJc3RydWN0IGlmcmVxIGlmcjsKIAlpbnQgZmQ7CisjZW5k
aWYKKwlpbnQgbXR1OwogCi0JbWVtc2V0KCZpZnIsIDAsIHNpemVvZihzdHJ1Y3QgaWZyZXEpKTsK
LQlpZiAoaWZfaW5kZXh0b25hbWUoaWZfaW5kZXgsIGlmci5pZnJfbmFtZSkgIT0gTlVMTCkgewot
CQkvKiBUT0RPIGNhbiBJIHVzZSB0aGUgcmF3IHNvY2tldCBoZXJlIGFuZCBub3QgaGF2ZSB0byBv
cGVuIGEgbmV3IG9uZSB3aXRoIGVhY2ggcXVlcnk/ICovCi0JCWlmICgoZmQgPSBzb2NrZXQoYWYs
IFNPQ0tfREdSQU0sIDApKSA8IDApCi0JCQlyZXR1cm4gKDApOwotCQlpZiAoaW9jdGwoZmQsIFNJ
T0NHSUZNVFUsICZpZnIpIDwgMCkgeworCXN3aXRjaCAoYWYpIHsKKyNpZiBkZWZpbmVkKElORVQp
CisJY2FzZSBBRl9JTkVUOgorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwljYXNlIEFGX0lO
RVQ2OgorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCQltZW1z
ZXQoJmlmciwgMCwgc2l6ZW9mKHN0cnVjdCBpZnJlcSkpOworCQltdHUgPSAwOworCQlpZiAoaWZf
aW5kZXh0b25hbWUoaWZfaW5kZXgsIGlmci5pZnJfbmFtZSkgIT0gTlVMTCkgeworCQkJLyogVE9E
TyBjYW4gSSB1c2UgdGhlIHJhdyBzb2NrZXQgaGVyZSBhbmQgbm90IGhhdmUgdG8gb3BlbiBhIG5l
dyBvbmUgd2l0aCBlYWNoIHF1ZXJ5PyAqLworCQkJaWYgKChmZCA9IHNvY2tldChhZiwgU09DS19E
R1JBTSwgMCkpIDwgMCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGlvY3RsKGZkLCBTSU9D
R0lGTVRVLCAmaWZyKSA+PSAwKSB7CisJCQkJbXR1ID0gaWZyLmlmcl9tdHU7CisJCQl9CiAJCQlj
bG9zZShmZCk7Ci0JCQlyZXR1cm4gKDApOwogCQl9Ci0JCWNsb3NlKGZkKTsKLQkJcmV0dXJuIGlm
ci5pZnJfbXR1OwotCX0gZWxzZSB7Ci0JCXJldHVybiAoMCk7CisJCWJyZWFrOworI2VuZGlmCisJ
Y2FzZSBBRl9DT05OOgorCQltdHUgPSAxMjgwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltdHUg
PSAwOworCQlicmVhazsKIAl9CisJcmV0dXJuIChtdHUpOwogfQogI2VuZGlmCiAKQEAgLTE0Myw0
MSArMTYyLDYwIEBAIHRpbWluZ3NhZmVfYmNtcChjb25zdCB2b2lkICpiMSwgY29uc3Qgdm9pZCAq
YjIsIHNpemVfdCBuKQogaW50CiBzY3RwX3VzZXJzcGFjZV9nZXRfbXR1X2Zyb21faWZuKHVpbnQz
Ml90IGlmX2luZGV4LCBpbnQgYWYpCiB7CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElO
RVQ2KQogCVBJUF9BREFQVEVSX0FERFJFU1NFUyBwQWRhcHRlckFkZHJzLCBwQWRhcHQ7CiAJRFdP
UkQgQWRhcHRlckFkZHJzU2l6ZSwgRXJyOwotCWludCByZXQ7CisjZW5kaWYKKwlpbnQgbXR1Owog
Ci0JcmV0ID0gMDsKLQlBZGFwdGVyQWRkcnNTaXplID0gMDsKLQlwQWRhcHRlckFkZHJzID0gTlVM
TDsKLQlpZiAoKEVyciA9IEdldEFkYXB0ZXJzQWRkcmVzc2VzKEFGX1VOU1BFQywgMCwgTlVMTCwg
TlVMTCwgJkFkYXB0ZXJBZGRyc1NpemUpKSAhPSAwKSB7Ci0JCWlmICgoRXJyICE9IEVSUk9SX0JV
RkZFUl9PVkVSRkxPVykgJiYgKEVyciAhPSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSkgewot
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkdldEFkYXB0ZXJzQWRkcmVzc2VzKCkgc2l6aW5n
IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWQsIEFkYXB0ZXJBZGRyc1NpemUgPSAlZFxuIiwgRXJy
LCBBZGFwdGVyQWRkcnNTaXplKTsKLQkJCXJldCA9IC0xOworCXN3aXRjaCAoYWYpIHsKKyNpZiBk
ZWZpbmVkKElORVQpCisJY2FzZSBBRl9JTkVUOgorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikK
KwljYXNlIEFGX0lORVQ2OgorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElO
RVQ2KQorCQltdHUgPSAwOworCQlBZGFwdGVyQWRkcnNTaXplID0gMDsKKwkJcEFkYXB0ZXJBZGRy
cyA9IE5VTEw7CisJCWlmICgoRXJyID0gR2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZfVU5TUEVDLCAw
LCBOVUxMLCBOVUxMLCAmQWRhcHRlckFkZHJzU2l6ZSkpICE9IDApIHsKKwkJCWlmICgoRXJyICE9
IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykgJiYgKEVyciAhPSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVG
RkVSKSkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJHZXRBZGFwdGVyc0FkZHJlc3Nl
cygpIHNpemluZyBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkLCBBZGFwdGVyQWRkcnNTaXplID0g
JWRcbiIsIEVyciwgQWRhcHRlckFkZHJzU2l6ZSk7CisJCQkJbXR1ID0gLTE7CisJCQkJZ290byBj
bGVhbnVwOworCQkJfQorCQl9CisJCWlmICgocEFkYXB0ZXJBZGRycyA9IChQSVBfQURBUFRFUl9B
RERSRVNTRVMpIEdsb2JhbEFsbG9jKEdQVFIsIEFkYXB0ZXJBZGRyc1NpemUpKSA9PSBOVUxMKSB7
CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3IhXG4i
KTsKKwkJCW10dSA9IC0xOwogCQkJZ290byBjbGVhbnVwOwogCQl9Ci0JfQotCWlmICgocEFkYXB0
ZXJBZGRycyA9IChQSVBfQURBUFRFUl9BRERSRVNTRVMpIEdsb2JhbEFsbG9jKEdQVFIsIEFkYXB0
ZXJBZGRyc1NpemUpKSA9PSBOVUxMKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJNZW1v
cnkgYWxsb2NhdGlvbiBlcnJvciFcbiIpOwotCQlyZXQgPSAtMTsKLQkJZ290byBjbGVhbnVwOwot
CX0KLQlpZiAoKEVyciA9IEdldEFkYXB0ZXJzQWRkcmVzc2VzKEFGX1VOU1BFQywgMCwgTlVMTCwg
cEFkYXB0ZXJBZGRycywgJkFkYXB0ZXJBZGRyc1NpemUpKSAhPSBFUlJPUl9TVUNDRVNTKSB7Ci0J
CVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJHZXRBZGFwdGVyc0FkZHJlc3NlcygpIGZhaWxlZCB3
aXRoIGVycm9yIGNvZGUgJWRcbiIsIEVycik7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGNsZWFudXA7
Ci0JfQotCWZvciAocEFkYXB0ID0gcEFkYXB0ZXJBZGRyczsgcEFkYXB0OyBwQWRhcHQgPSBwQWRh
cHQtPk5leHQpIHsKLQkJaWYgKHBBZGFwdC0+SWZJbmRleCA9PSBpZl9pbmRleCkgewotCQkJcmV0
ID0gcEFkYXB0LT5NdHU7Ci0JCQlicmVhazsKKwkJaWYgKChFcnIgPSBHZXRBZGFwdGVyc0FkZHJl
c3NlcyhBRl9VTlNQRUMsIDAsIE5VTEwsIHBBZGFwdGVyQWRkcnMsICZBZGFwdGVyQWRkcnNTaXpl
KSkgIT0gRVJST1JfU1VDQ0VTUykgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkdldEFk
YXB0ZXJzQWRkcmVzc2VzKCkgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgRXJyKTsKKwkJ
CW10dSA9IC0xOworCQkJZ290byBjbGVhbnVwOwogCQl9CisJCWZvciAocEFkYXB0ID0gcEFkYXB0
ZXJBZGRyczsgcEFkYXB0OyBwQWRhcHQgPSBwQWRhcHQtPk5leHQpIHsKKwkJCWlmIChwQWRhcHQt
PklmSW5kZXggPT0gaWZfaW5kZXgpIHsKKwkJCQltdHUgPSBwQWRhcHQtPk10dTsKKwkJCQlicmVh
azsKKwkJCX0KKwkJfQorCWNsZWFudXA6CisJCWlmIChwQWRhcHRlckFkZHJzICE9IE5VTEwpIHsK
KwkJCUdsb2JhbEZyZWUocEFkYXB0ZXJBZGRycyk7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwlj
YXNlIEFGX0NPTk46CisJCW10dSA9IDEyODA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW10dSA9
IDA7CisJCWJyZWFrOwogCX0KLWNsZWFudXA6Ci0JaWYgKHBBZGFwdGVyQWRkcnMgIT0gTlVMTCkg
ewotCQlHbG9iYWxGcmVlKHBBZGFwdGVyQWRkcnMpOwotCX0KLQlyZXR1cm4gKHJldCk7CisJcmV0
dXJuIChtdHUpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF91c3JyZXEuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Vz
cnJlcS5jCmluZGV4IGU1ZmJhOTY3MTdiMmE0Y2FjYzA5ZmYyYWE4YmVkYTZkOTBlMWEyMmEuLmU4
Y2Y3ODAxN2EwNTg5MTQ3NjZiMzViZmUwMjk2MWM2N2ZlODI5NzUgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzcnJlcS5jCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX3VzcnJlcS5jCkBAIC0zNCw3ICszNCw3IEBACiAKICNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQogI2luY2x1ZGUgPHN5
cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfdXNy
cmVxLmMgMzY2NzUwIDIwMjAtMTAtMTYgMTA6NDQ6NDhaIHR1ZXhlbiAkIik7CitfX0ZCU0RJRCgi
JEZyZWVCU0QkIik7CiAjZW5kaWYKIAogI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgpAQCAt
OTc0LDI5ICs5NzQsMjkgQEAgc2N0cF9zZW5kbShzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGZsYWdz
LCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICphZGRyLAogCSAgICAoKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgfHwKIAkgICAgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpKSkgewogCQlnb3RvIGNvbm5lY3RlZF90eXBl
OwotCX0gZWxzZSBpZiAoYWRkciA9PSBOVUxMKSB7CisJfQorCisJZXJyb3IgPSAwOworCWlmIChh
ZGRyID09IE5VTEwpIHsKIAkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVERVNUQUREUlJFUSk7CiAJCWVycm9yID0gRURF
U1RBRERSUkVROwotCQlzY3RwX21fZnJlZW0obSk7Ci0JCWlmIChjb250cm9sKSB7Ci0JCQlzY3Rw
X21fZnJlZW0oY29udHJvbCk7Ci0JCQljb250cm9sID0gTlVMTDsKLQkJfQotCQlyZXR1cm4gKGVy
cm9yKTsKKwl9IGVsc2UgaWYgKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisJCVNDVFBf
TFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFQUZOT1NVUFBPUlQpOworCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKyNpZiBkZWZpbmVk
KEhBVkVfU0FfTEVOKQorCX0gZWxzZSBpZiAoYWRkci0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQllcnJvciA9IEVJTlZBTDsK
KyNlbmRpZgogCX0KLSNpZmRlZiBJTkVUNgotCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5F
VCkgewotCQkvKiBtdXN0IGJlIGEgdjQgYWRkcmVzcyEgKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VF9QS1QobSwgaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVERVNUQURE
UlJFUSk7CisJaWYgKGVycm9yICE9IDApIHsKIAkJc2N0cF9tX2ZyZWVtKG0pOwogCQlpZiAoY29u
dHJvbCkgewogCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wpOwogCQkJY29udHJvbCA9IE5VTEw7CiAJ
CX0KLQkJZXJyb3IgPSBFREVTVEFERFJSRVE7CiAJCXJldHVybiAoZXJyb3IpOwogCX0KLSNlbmRp
ZgkJCQkvKiBJTkVUNiAqLwogY29ubmVjdGVkX3R5cGU6CiAJLyogbm93IHdoYXQgYWJvdXQgY29u
dHJvbCAqLwogCWlmIChjb250cm9sKSB7CkBAIC02MTEyLDYgKzYxMTIsNyBAQCBzY3RwX3NldG9w
dChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IG9wdG5hbWUsIHZvaWQgKm9wdHZhbCwgc2l6ZV90IG9w
dHNpemUsCiAJCQlyZXR1cm4gKEVJTlZBTCk7CiAJCX0KIAkJaWYgKChwYWRkcnAtPnNwcF9mbGFn
cyAmIFNQUF9QTVRVRF9ESVNBQkxFKSAmJgorCQkgICAgKHBhZGRycC0+c3BwX3BhdGhtdHUgPiAw
KSAmJgogCQkgICAgKChwYWRkcnAtPnNwcF9wYXRobXR1IDwgU0NUUF9TTUFMTEVTVF9QTVRVKSB8
fAogCQkgICAgIChwYWRkcnAtPnNwcF9wYXRobXR1ID4gU0NUUF9MQVJHRVNUX1BNVFUpKSkgewog
CQkJaWYgKHN0Y2IpCkBAIC02MTU2LDI4ICs2MTU3LDMwIEBAIHNjdHBfc2V0b3B0KHN0cnVjdCBz
b2NrZXQgKnNvLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLCBzaXplX3Qgb3B0c2l6ZSwKIAkJ
CQkJCQkJU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTEpOwogCQkJCQl9CiAJCQkJ
CW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfTk9fUE1UVUQ7Ci0JCQkJCW5ldC0+bXR1ID0g
cGFkZHJwLT5zcHBfcGF0aG10dTsKLQkJCQkJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2Ff
ZmFtaWx5KSB7CisJCQkJCWlmIChwYWRkcnAtPnNwcF9wYXRobXR1ID4gMCkgeworCQkJCQkJbmV0
LT5tdHUgPSBwYWRkcnAtPnNwcF9wYXRobXR1OworCQkJCQkJc3dpdGNoIChuZXQtPnJvLl9sX2Fk
ZHIuc2Euc2FfZmFtaWx5KSB7CiAjaWZkZWYgSU5FVAotCQkJCQljYXNlIEFGX0lORVQ6Ci0JCQkJ
CQluZXQtPm10dSArPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQkJCQkJCWJyZWFrOworCQkJCQkJ
Y2FzZSBBRl9JTkVUOgorCQkJCQkJCW5ldC0+bXR1ICs9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOwor
CQkJCQkJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgSU5FVDYKLQkJCQkJY2FzZSBBRl9JTkVUNjoK
LQkJCQkJCW5ldC0+bXR1ICs9IFNDVFBfTUlOX09WRVJIRUFEOwotCQkJCQkJYnJlYWs7CisJCQkJ
CQljYXNlIEFGX0lORVQ2OgorCQkJCQkJCW5ldC0+bXR1ICs9IFNDVFBfTUlOX09WRVJIRUFEOwor
CQkJCQkJCWJyZWFrOwogI2VuZGlmCiAjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJCQlj
YXNlIEFGX0NPTk46Ci0JCQkJCQluZXQtPm10dSArPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwot
CQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIEFGX0NPTk46CisJCQkJCQkJbmV0LT5tdHUgKz0gc2l6
ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwkJCQkJCQlicmVhazsKICNlbmRpZgotCQkJCQlkZWZhdWx0
OgotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJaWYgKG5ldC0+bXR1IDwgc3RjYi0+YXNvYy5z
bWFsbGVzdF9tdHUpIHsKLQkJCQkJCXNjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0Y2IsIG5ldC0+
bXR1KTsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlpZiAo
bmV0LT5tdHUgPCBzdGNiLT5hc29jLnNtYWxsZXN0X210dSkgeworCQkJCQkJCXNjdHBfcGF0aG10
dV9hZGp1c3RtZW50KHN0Y2IsIG5ldC0+bXR1KTsKKwkJCQkJCX0KIAkJCQkJfQogCQkJCX0KIAkJ
CQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfUE1UVURfRU5BQkxFKSB7CkBAIC02MTg2LDcg
KzYxODksNyBAQCBzY3RwX3NldG9wdChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IG9wdG5hbWUsIHZv
aWQgKm9wdHZhbCwgc2l6ZV90IG9wdHNpemUsCiAJCQkJCX0KIAkJCQkJbmV0LT5kZXN0X3N0YXRl
ICY9IH5TQ1RQX0FERFJfTk9fUE1UVUQ7CiAJCQkJfQotCQkJCWlmIChwYWRkcnAtPnNwcF9wYXRo
bWF4cnh0KSB7CisJCQkJaWYgKHBhZGRycC0+c3BwX3BhdGhtYXhyeHQgPiAwKSB7CiAJCQkJCWlm
IChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKIAkJCQkJCWlmIChuZXQtPmVycm9y
X2NvdW50ID4gcGFkZHJwLT5zcHBfcGF0aG1heHJ4dCkgewogCQkJCQkJCW5ldC0+ZGVzdF9zdGF0
ZSAmPSB+U0NUUF9BRERSX1BGOwpAQCAtNjIyOSw3ICs2MjMyLDcgQEAgc2N0cF9zZXRvcHQoc3Ry
dWN0IHNvY2tldCAqc28sIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsIHNpemVfdCBvcHRzaXpl
LAogI2VuZGlmCiAJCQl9IGVsc2UgewogCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKipBU1NP
QyBPTkxZIC0tIE5PIE5FVCBTUEVDSUZJQyBTRVQgKioqKioqKioqKioqKioqKioqLwotCQkJCWlm
IChwYWRkcnAtPnNwcF9wYXRobWF4cnh0ICE9IDApIHsKKwkJCQlpZiAocGFkZHJwLT5zcHBfcGF0
aG1heHJ4dCA+IDApIHsKIAkJCQkJc3RjYi0+YXNvYy5kZWZfbmV0X2ZhaWx1cmUgPSBwYWRkcnAt
PnNwcF9wYXRobWF4cnh0OwogCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0
cywgc2N0cF9uZXh0KSB7CiAJCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BG
KSB7CkBAIC02MjYxLDcgKzYyNjQsNiBAQCBzY3RwX3NldG9wdChzdHJ1Y3Qgc29ja2V0ICpzbywg
aW50IG9wdG5hbWUsIHZvaWQgKm9wdHZhbCwgc2l6ZV90IG9wdHNpemUsCiAJCQkJCQluZXQtPmZh
aWx1cmVfdGhyZXNob2xkID0gcGFkZHJwLT5zcHBfcGF0aG1heHJ4dDsKIAkJCQkJfQogCQkJCX0K
LQogCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9IQl9FTkFCTEUpIHsKIAkJCQkJaWYg
KHBhZGRycC0+c3BwX2hiaW50ZXJ2YWwgIT0gMCkgewogCQkJCQkJc3RjYi0+YXNvYy5oZWFydF9i
ZWF0X2RlbGF5ID0gcGFkZHJwLT5zcHBfaGJpbnRlcnZhbDsKQEAgLTYzMDQsMzEgKzYzMDYsMzUg
QEAgc2N0cF9zZXRvcHQoc3RydWN0IHNvY2tldCAqc28sIGludCBvcHRuYW1lLCB2b2lkICpvcHR2
YWwsIHNpemVfdCBvcHRzaXplLAogCQkJCQkJCQkJU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NU
UF9MT0NfMTYpOwogCQkJCQkJfQogCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9O
T19QTVRVRDsKLQkJCQkJCW5ldC0+bXR1ID0gcGFkZHJwLT5zcHBfcGF0aG10dTsKLQkJCQkJCXN3
aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworCQkJCQkJaWYgKHBhZGRycC0+
c3BwX3BhdGhtdHUgPiAwKSB7CisJCQkJCQkJbmV0LT5tdHUgPSBwYWRkcnAtPnNwcF9wYXRobXR1
OworCQkJCQkJCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewogI2lmZGVm
IElORVQKLQkJCQkJCWNhc2UgQUZfSU5FVDoKLQkJCQkJCQluZXQtPm10dSArPSBTQ1RQX01JTl9W
NF9PVkVSSEVBRDsKLQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIEFGX0lORVQ6CisJCQkJCQkJ
CW5ldC0+bXR1ICs9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCQkJCQlicmVhazsKICNlbmRp
ZgogI2lmZGVmIElORVQ2Ci0JCQkJCQljYXNlIEFGX0lORVQ2OgotCQkJCQkJCW5ldC0+bXR1ICs9
IFNDVFBfTUlOX09WRVJIRUFEOwotCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgQUZfSU5FVDY6
CisJCQkJCQkJCW5ldC0+bXR1ICs9IFNDVFBfTUlOX09WRVJIRUFEOworCQkJCQkJCQlicmVhazsK
ICNlbmRpZgogI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQkJCWNhc2UgQUZfQ09OTjoK
LQkJCQkJCQluZXQtPm10dSArPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwotCQkJCQkJCWJyZWFr
OworCQkJCQkJCWNhc2UgQUZfQ09OTjoKKwkJCQkJCQkJbmV0LT5tdHUgKz0gc2l6ZW9mKHN0cnVj
dCBzY3RwaGRyKTsKKwkJCQkJCQkJYnJlYWs7CiAjZW5kaWYKLQkJCQkJCWRlZmF1bHQ6Ci0JCQkJ
CQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAobmV0LT5tdHUgPCBzdGNiLT5hc29jLnNtYWxs
ZXN0X210dSkgewotCQkJCQkJCXNjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0Y2IsIG5ldC0+bXR1
KTsKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQkJaWYg
KG5ldC0+bXR1IDwgc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUpIHsKKwkJCQkJCQkJc2N0cF9wYXRo
bXR1X2FkanVzdG1lbnQoc3RjYiwgbmV0LT5tdHUpOworCQkJCQkJCX0KIAkJCQkJCX0KIAkJCQkJ
fQotCQkJCQlzdGNiLT5hc29jLmRlZmF1bHRfbXR1ID0gcGFkZHJwLT5zcHBfcGF0aG10dTsKKwkJ
CQkJaWYgKHBhZGRycC0+c3BwX3BhdGhtdHUgPiAwKSB7CisJCQkJCQlzdGNiLT5hc29jLmRlZmF1
bHRfbXR1ID0gcGFkZHJwLT5zcHBfcGF0aG10dTsKKwkJCQkJfQogCQkJCQlzY3RwX3N0Y2JfZmVh
dHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0RPX05PVF9QTVRVRCk7CiAJCQkJfQog
CQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9QTVRVRF9FTkFCTEUpIHsKQEAgLTYzNzQs
NyArNjM4MCw3IEBAIHNjdHBfc2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0bmFtZSwg
dm9pZCAqb3B0dmFsLCBzaXplX3Qgb3B0c2l6ZSwKIAkJCQkgKiBGb3IgdGhlIFRPUy9GTE9XTEFC
RUwgc3R1ZmYgeW91IHNldCBpdAogCQkJCSAqIHdpdGggdGhlIG9wdGlvbnMgb24gdGhlIHNvY2tl
dAogCQkJCSAqLwotCQkJCWlmIChwYWRkcnAtPnNwcF9wYXRobWF4cnh0ICE9IDApIHsKKwkJCQlp
ZiAocGFkZHJwLT5zcHBfcGF0aG1heHJ4dCA+IDApIHsKIAkJCQkJaW5wLT5zY3RwX2VwLmRlZl9u
ZXRfZmFpbHVyZSA9IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQ7CiAJCQkJfQogCkBAIC02NDAwLDcg
KzY0MDYsOSBAQCBzY3RwX3NldG9wdChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IG9wdG5hbWUsIHZv
aWQgKm9wdHZhbCwgc2l6ZV90IG9wdHNpemUsCiAJCQkJCWlucC0+c2N0cF9lcC5kZWZhdWx0X210
dSA9IDA7CiAJCQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19ET19OT1Rf
UE1UVUQpOwogCQkJCX0gZWxzZSBpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfUE1UVURfRElT
QUJMRSkgewotCQkJCQlpbnAtPnNjdHBfZXAuZGVmYXVsdF9tdHUgPSBwYWRkcnAtPnNwcF9wYXRo
bXR1OworCQkJCQlpZiAocGFkZHJwLT5zcHBfcGF0aG10dSA+IDApIHsKKwkJCQkJCWlucC0+c2N0
cF9lcC5kZWZhdWx0X210dSA9IHBhZGRycC0+c3BwX3BhdGhtdHU7CisJCQkJCX0KIAkJCQkJc2N0
cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fTk9UX1BNVFVEKTsKIAkJCQl9CiAJ
CQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0RTQ1ApIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwdXRpbC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHB1dGlsLmMKaW5kZXggNDE5MTBlYzQ5ZDRiM2M3ZTkzODllZjczZTQ1NTVlMTg1
N2NiNzY3NS4uNjM5YjM2ZjMwNzk1YzlmNGE4NzFmYzYyN2E1NzlmMjYxYzk4MDViYyAxMDA3NTUK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHB1dGlsLmMKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHB1dGlsLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCiAjaW5jbHVk
ZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0
cHV0aWwuYyAzNjY0ODIgMjAyMC0xMC0wNiAxMTowODo1MlogdHVleGVuICQiKTsKK19fRkJTRElE
KCIkRnJlZUJTRCQiKTsKICNlbmRpZgogCiAjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CkBA
IC0xMzMzLDkgKzEzMzMsOCBAQCBzY3RwX2luaXRfYXNvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5w
LCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCiAJCSAqIHRoYXQgd2VyZSBkcm9wcGVkIG11c3QgYmUg
bm90aWZpZWQgdG8gdGhlIHVwcGVyIGxheWVyIGFzCiAJCSAqIGZhaWxlZCB0byBzZW5kLgogCQkg
Ki8KLQkJYXNvYy0+c3RybW91dFtpXS5uZXh0X21pZF9vcmRlcmVkID0gMDsKLQkJYXNvYy0+c3Ry
bW91dFtpXS5uZXh0X21pZF91bm9yZGVyZWQgPSAwOwogCQlUQUlMUV9JTklUKCZhc29jLT5zdHJt
b3V0W2ldLm91dHF1ZXVlKTsKKwkJYXNvYy0+c3NfZnVuY3Rpb25zLnNjdHBfc3NfaW5pdF9zdHJl
YW0oc3RjYiwgJmFzb2MtPnN0cm1vdXRbaV0sIE5VTEwpOwogCQlhc29jLT5zdHJtb3V0W2ldLmNo
dW5rc19vbl9xdWV1ZXMgPSAwOwogI2lmIGRlZmluZWQoU0NUUF9ERVRBSUxFRF9TVFJfU1RBVFMp
CiAJCWZvciAoaiA9IDA7IGogPCBTQ1RQX1BSX1NDVFBfTUFYICsgMTsgaisrKSB7CkBAIC0xMzQ2
LDEwICsxMzQ1LDExIEBAIHNjdHBfaW5pdF9hc29jKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKIAkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRfc2VudFsw
XSA9IDA7CiAJCWFzb2MtPnN0cm1vdXRbaV0uYWJhbmRvbmVkX3Vuc2VudFswXSA9IDA7CiAjZW5k
aWYKKwkJYXNvYy0+c3RybW91dFtpXS5uZXh0X21pZF9vcmRlcmVkID0gMDsKKwkJYXNvYy0+c3Ry
bW91dFtpXS5uZXh0X21pZF91bm9yZGVyZWQgPSAwOwogCQlhc29jLT5zdHJtb3V0W2ldLnNpZCA9
IGk7CiAJCWFzb2MtPnN0cm1vdXRbaV0ubGFzdF9tc2dfaW5jb21wbGV0ZSA9IDA7CiAJCWFzb2Mt
PnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9PUEVOSU5HOwotCQlhc29jLT5zc19mdW5j
dGlvbnMuc2N0cF9zc19pbml0X3N0cmVhbShzdGNiLCAmYXNvYy0+c3RybW91dFtpXSwgTlVMTCk7
CiAJfQogCWFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXQoc3RjYiwgYXNvYywgMCk7CiAK
QEAgLTIxMTcsMTQgKzIxMTcsMTMgQEAgc2N0cF90aW1lb3V0X2hhbmRsZXIodm9pZCAqdCkKIAkJ
U0NUUF9TT0NLRVRfVU5MT0NLKFNDVFBfSU5QX1NPKGlucCksIDEpOwogI2VuZGlmCiAJCWlucCA9
IE5VTEw7Ci0JCWdvdG8gb3V0X25vX2RlY3I7CisJCWdvdG8gb3V0X2RlY3I7CiAJY2FzZSBTQ1RQ
X1RJTUVSX1RZUEVfQVNPQ0tJTEw6CiAJCUtBU1NFUlQoaW5wICE9IE5VTEwgJiYgc3RjYiAhPSBO
VUxMICYmIG5ldCA9PSBOVUxMLAogCQkgICAgICAgICgidGltZW91dCBvZiB0eXBlICVkOiBpbnAg
PSAlcCwgc3RjYiA9ICVwLCBuZXQgPSAlcCIsCiAJCSAgICAgICAgIHR5cGUsIGlucCwgc3RjYiwg
bmV0KSk7CiAJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9hc3NvY2tpbGwpOwogCQkvKiBDYW4g
d2UgZnJlZSBpdCB5ZXQ/ICovCi0JCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CiAJCXNjdHBfdGlt
ZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEwsIGlucCwgc3RjYiwgTlVMTCwKIAkJICAg
ICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9DXzEpOwogI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQpAQCAtMjE0NSw3ICsyMTQ0
LDcgQEAgc2N0cF90aW1lb3V0X2hhbmRsZXIodm9pZCAqdCkKIAkJICogZHVwbGljYXRlIHVubG9j
ayBvciB1bmxvY2sgb2YgYSBmcmVlIG10eCA6LTAKIAkJICovCiAJCXN0Y2IgPSBOVUxMOwotCQln
b3RvIG91dF9ub19kZWNyOworCQlnb3RvIG91dF9kZWNyOwogCWNhc2UgU0NUUF9USU1FUl9UWVBF
X0FERFJfV1E6CiAJCUtBU1NFUlQoaW5wID09IE5VTEwgJiYgc3RjYiA9PSBOVUxMICYmIG5ldCA9
PSBOVUxMLAogCQkgICAgICAgICgidGltZW91dCBvZiB0eXBlICVkOiBpbnAgPSAlcCwgc3RjYiA9
ICVwLCBuZXQgPSAlcCIsCkBAIC0yMjE0LDcgKzIyMTMsNiBAQCBvdXRfZGVjcjoKIAlpZiAobmV0
ICE9IE5VTEwpIHsKIAkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKG5ldCk7CiAJfQotb3V0X25vX2Rl
Y3I6CiAJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMiwgIlRpbWVyIHR5cGUgJWQgaGFuZGxlciBm
aW5pc2hlZC5cbiIsIHR5cGUpOwogI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCiAJQ1VSVk5FVF9SRVNUT1JFKCk7CkBAIC0yMzg1LDE0ICsyMzgzLDIx
IEBAIHNjdHBfdGltZXJfc3RhcnQoaW50IHRfdHlwZSwgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwg
c3RydWN0IHNjdHBfdGNiICpzdGNiLAogCQl9CiAJCXJuZHZhbCA9IHNjdHBfc2VsZWN0X2luaXRp
YWxfVFNOKCZpbnAtPnNjdHBfZXApOwogCQlqaXR0ZXIgPSBybmR2YWwgJSB0b190aWNrczsKLQkJ
aWYgKGppdHRlciA+PSAodG9fdGlja3MgPj4gMSkpIHsKLQkJCXRvX3RpY2tzID0gdG9fdGlja3Mg
KyAoaml0dGVyIC0gKHRvX3RpY2tzID4+IDEpKTsKKwkJaWYgKHRvX3RpY2tzID4gMSkgeworCQkJ
dG9fdGlja3MgPj49IDE7CisJCX0KKwkJaWYgKGppdHRlciA8IChVSU5UMzJfTUFYIC0gdG9fdGlj
a3MpKSB7CisJCQl0b190aWNrcyArPSBqaXR0ZXI7CiAJCX0gZWxzZSB7Ci0JCQl0b190aWNrcyA9
IHRvX3RpY2tzIC0gaml0dGVyOworCQkJdG9fdGlja3MgPSBVSU5UMzJfTUFYOwogCQl9CiAJCWlm
ICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgJiYKIAkJICAgICEo
bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSkgewotCQkJdG9fdGlja3MgKz0gbmV0LT5o
ZWFydF9iZWF0X2RlbGF5OworCQkJaWYgKG5ldC0+aGVhcnRfYmVhdF9kZWxheSA8IChVSU5UMzJf
TUFYIC0gdG9fdGlja3MpKSB7CisJCQkJdG9fdGlja3MgKz0gbmV0LT5oZWFydF9iZWF0X2RlbGF5
OworCQkJfSBlbHNlIHsKKwkJCQl0b190aWNrcyA9IFVJTlQzMl9NQVg7CisJCQl9CiAJCX0KIAkJ
LyoKIAkJICogTm93IHdlIG11c3QgY29udmVydCB0aGUgdG9fdGlja3MgdGhhdCBhcmUgbm93IGlu
CkBAIC00ODMyLDcgKzQ4MzcsNyBAQCBzY3RwX2hhbmRsZV9vb3RiKHN0cnVjdCBtYnVmICptLCBp
bnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogICogaWYgdGhlcmUgaXMgcmV0dXJuIDEsIGVsc2UgcmV0
dXJuIDAuCiAgKi8KIGludAotc2N0cF9pc190aGVyZV9hbl9hYm9ydF9oZXJlKHN0cnVjdCBtYnVm
ICptLCBpbnQgaXBobGVuLCB1aW50MzJfdCAqIHZ0YWdmaWxsKQorc2N0cF9pc190aGVyZV9hbl9h
Ym9ydF9oZXJlKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCB1aW50MzJfdCAqdnRhZykKIHsK
IAlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7CiAJc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqaW5p
dF9jaGssIGNodW5rX2J1ZjsKQEAgLTQ4NTMsMTIgKzQ4NTgsMTMgQEAgc2N0cF9pc190aGVyZV9h
bl9hYm9ydF9oZXJlKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCB1aW50MzJfdCAqIHZ0YWdm
aWxsKQogCQkJLyogeWVwLCB0ZWxsIHRoZW0gKi8KIAkJCXJldHVybiAoMSk7CiAJCX0KLQkJaWYg
KGNoLT5jaHVua190eXBlID09IFNDVFBfSU5JVElBVElPTikgeworCQlpZiAoKGNoLT5jaHVua190
eXBlID09IFNDVFBfSU5JVElBVElPTikgfHwKKwkJICAgIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQ
X0lOSVRJQVRJT05fQUNLKSkgewogCQkJLyogbmVlZCB0byB1cGRhdGUgdGhlIFZ0YWcgKi8KIAkJ
CWluaXRfY2hrID0gKHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKilzY3RwX21fZ2V0cHRyKG0sCi0J
CQkgICAgb2Zmc2V0LCBzaXplb2YoKmluaXRfY2hrKSwgKHVpbnQ4X3QgKikgJiBjaHVua19idWYp
OworCQkJICAgIG9mZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLCAodWludDhf
dCAqKSAmIGNodW5rX2J1Zik7CiAJCQlpZiAoaW5pdF9jaGsgIT0gTlVMTCkgewotCQkJCSp2dGFn
ZmlsbCA9IG50b2hsKGluaXRfY2hrLT5pbml0LmluaXRpYXRlX3RhZyk7CisJCQkJKnZ0YWcgPSBu
dG9obChpbml0X2Noay0+aW5pdC5pbml0aWF0ZV90YWcpOwogCQkJfQogCQl9CiAJCS8qIE5vcGUs
IG1vdmUgdG8gdGhlIG5leHQgY2h1bmsgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldDYvc2N0cDZfdXNycmVxLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQ2
L3NjdHA2X3VzcnJlcS5jCmluZGV4IDVhOTMxZGQ1YTJmY2RhMjU0ZmE3Y2Q0ZGI2MmViNzNlNWE5
ZTZlYTEuLmFhMGMwMDUxYTVlODFhZTgwOTE2MDY3MGZjMzY5Y2Q2NzJlZDE4YmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdXNycmVxLmMKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl91c3JyZXEuYwpAQCAtMzQsNyArMzQsNyBA
QAogCiAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
ICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0
aW5ldDYvc2N0cDZfdXNycmVxLmMgMzY1MDcxIDIwMjAtMDktMDEgMjE6MTk6MTRaIG1qZyAkIik7
CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjZW5kaWYKIAogI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9vcy5oPgpAQCAtMjU5LDEzICsyNTksMTQgQEAgc2N0cDZfaW5wdXQoc3RydWN0IG1idWYgKipp
X3BhaywgaW50ICpvZmZwLCBpbnQgcHJvdG8pCiAJaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgm
aXA2LT5pcDZfZHN0KSkgewogCQlnb3RvIG91dDsKIAl9Ci0JZWNuX2JpdHMgPSAoKG50b2hsKGlw
Ni0+aXA2X2Zsb3cpID4+IDIwKSAmIDB4MDAwMDAwZmYpOwogI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCisJZWNuX2JpdHMgPSBJUFY2X1RSQUZGSUNfQ0xBU1MoaXA2KTsKIAlpZiAobS0+bV9wa3Ro
ZHIuY3N1bV9mbGFncyAmIENTVU1fU0NUUF9WQUxJRCkgewogCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19yZWN2aHdjcmMpOwogCQljb21wdXRlX2NyYyA9IDA7CiAJfSBlbHNlIHsKICNlbHNlCisJZWNu
X2JpdHMgPSAoKG50b2hsKGlwNi0+aXA2X2Zsb3cpID4+IDIwKSAmIDB4MDAwMDAwZmYpOwogCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykgJiYKIAkgICAgKElO
Nl9BUkVfQUREUl9FUVVBTCgmc3JjLnNpbjZfYWRkciwgJmRzdC5zaW42X2FkZHIpKSkgewogCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2aHdjcmMpOwpAQCAtNjU0LDkgKzY1NSwxMCBAQCBvdXQ6
CiAJcmV0dXJuIChlcnJvcik7CiB9CiAKLVNZU0NUTF9QUk9DKF9uZXRfaW5ldDZfc2N0cDYsIE9J
RF9BVVRPLCBnZXRjcmVkLCBDVExUWVBFX09QQVFVRSB8IENUTEZMQUdfUlcsCi0gICAgMCwgMCwK
LSAgICBzY3RwNl9nZXRjcmVkLCAiUyx1Y3JlZCIsICJHZXQgdGhlIHVjcmVkIG9mIGEgU0NUUDYg
Y29ubmVjdGlvbiIpOworU1lTQ1RMX1BST0MoX25ldF9pbmV0Nl9zY3RwNiwgT0lEX0FVVE8sIGdl
dGNyZWQsCisgICAgQ1RMVFlQRV9PUEFRVUUgfCBDVExGTEFHX1JXIHwgQ1RMRkxBR19ORUVER0lB
TlQsCisgICAgMCwgMCwgc2N0cDZfZ2V0Y3JlZCwgIlMsdWNyZWQiLAorICAgICJHZXQgdGhlIHVj
cmVkIG9mIGEgU0NUUDYgY29ubmVjdGlvbiIpOwogI2VuZGlmCiAKIC8qIFRoaXMgaXMgdGhlIHNh
bWUgYXMgdGhlIHNjdHBfYWJvcnQoKSBjb3VsZCBiZSBtYWRlIGNvbW1vbiAqLwpAQCAtMTAwNyw2
ICsxMDA5LDQ2IEBAIHNjdHA2X3NlbmQoc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFncywgc3Ry
dWN0IG1idWYgKm0sIHN0cnVjdCBtYnVmICpuYW0sCiAJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFREVTVEFERFJSRVEpOwogCQly
ZXR1cm4gKEVERVNUQUREUlJFUSk7CiAJfQorCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7Cisj
aWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKyNpZiBkZWZpbmVkKEhBVkVfU0FfTEVOKQorCQlp
ZiAoYWRkci0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7CisJCQlpZiAo
Y29udHJvbCkgeworCQkJCVNDVFBfUkVMRUFTRV9QS1QoY29udHJvbCk7CisJCQkJY29udHJvbCA9
IE5VTEw7CisJCQl9CisJCQlTQ1RQX1JFTEVBU0VfUEtUKG0pOworCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJ
CQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKyNlbmRpZgorCQlicmVhazsKKyNlbmRpZgorI2lmZGVm
IElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKyNpZiBkZWZpbmVkKEhBVkVfU0FfTEVOKQorCQlpZiAo
YWRkci0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgeworCQkJaWYgKGNv
bnRyb2wpIHsKKwkJCQlTQ1RQX1JFTEVBU0VfUEtUKGNvbnRyb2wpOworCQkJCWNvbnRyb2wgPSBO
VUxMOworCQkJfQorCQkJU0NUUF9SRUxFQVNFX1BLVChtKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQkJ
cmV0dXJuIChFSU5WQUwpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0
OgorCQlpZiAoY29udHJvbCkgeworCQkJU0NUUF9SRUxFQVNFX1BLVChjb250cm9sKTsKKwkJCWNv
bnRyb2wgPSBOVUxMOworCQl9CisJCVNDVFBfUkVMRUFTRV9QS1QobSk7CisJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwp
OworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQogI2lmZGVmIElORVQKIAlzaW42ID0gKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKilhZGRyOwogCWlmIChTQ1RQX0lQVjZfVjZPTkxZKGlucCkpIHsKQEAgLTEw
MTUsMTAgKzEwNTcsMjAgQEAgc2N0cDZfc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGZsYWdz
LCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1idWYgKm5hbSwKIAkJICogdjQgYWRkciBvciB2NC1t
YXBwZWQgYWRkcgogCQkgKi8KIAkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJ
CQlpZiAoY29udHJvbCkgeworCQkJCVNDVFBfUkVMRUFTRV9QS1QoY29udHJvbCk7CisJCQkJY29u
dHJvbCA9IE5VTEw7CisJCQl9CisJCQlTQ1RQX1JFTEVBU0VfUEtUKG0pOwogCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZB
TCk7CiAJCQlyZXR1cm4gKEVJTlZBTCk7CiAJCX0KIAkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVE
KCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQlpZiAoY29udHJvbCkgeworCQkJCVNDVFBfUkVMRUFT
RV9QS1QoY29udHJvbCk7CisJCQkJY29udHJvbCA9IE5VTEw7CisJCQl9CisJCQlTQ1RQX1JFTEVB
U0VfUEtUKG0pOwogCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CiAJCQlyZXR1cm4gKEVJTlZBTCk7CiAJCX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9lbnZpcm9ubWVudC5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50LmgKaW5kZXggZDg4ZmRiNzdlNjZlOWEyYWM2
Mjk0MDVhNzdmNzZjZWQ1ZjRhNDE1NS4uYTU0NWFjY2JhMDc5MWYyNWFhOWVmMjBhZTRhMTAzZjhj
YzhlMTQ3NCAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50LmgKQEAgLTkyLDcg
KzkyLDcgQEAgZXh0ZXJuIHVfc2hvcnQgaXBfaWQ7CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKICNp
ZiBkZWZpbmVkKF9XSU4zMikKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIGlubGluZSB2b2lk
IF9fZGVjbHNwZWMobm9yZXR1cm4pCiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmli
dXRlX18oKF9fbm9yZXR1cm5fXykpCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430357</attachid>
            <date>2021-06-02 08:17:32 -0700</date>
            <delta_ts>2021-06-02 09:32:39 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-226493-20210602171729.patch</filename>
            <type>text/plain</type>
            <size>405871</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCBiZjM1YTdmYjg2NGE0NmNkMmUwYWNkYzkwMzk4Y2UxNjI4ZTMxOTQzLi42ZTUw
ZTgzOGVlOTFjMzI1MGEyZTc5NTczZTI4ODRlZTE2MDM2ZWUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0wNi0wMiAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIHVzcnNjdHAgdG8gTTky
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY0OTMK
KworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgICogU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHA6IFJlc3luY2VkLgorICAgICAgICAqIFNvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvLmdpdGF0dHJpYnV0ZXM6IEFkZGVkLgorCiAyMDIx
LTA2LTAxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRh
dGUgYm9yaW5nc3NsIHRvIE05MgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL0JVSUxELmduIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL0JVSUxELmduCmluZGV4IGI4
Njk4NTIwMGI4ZjQxZjFjZjQ3N2NhMzM0YWE5Y2ZhN2EyZjNiOWIuLjkwNjE5NGVlYzBhYWY3MDQ2
NzczZDg1NTg0ZDNjMDE2ODBhOWEzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9CVUlMRC5nbgorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvQlVJTEQuZ24K
QEAgLTMsOCArMyw5IEBACiAjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAKIGltcG9ydCgi
Ly9idWlsZC90b29sY2hhaW4vdG9vbGNoYWluLmduaSIpCitpbXBvcnQoIi8vdGVzdGluZy9saWJm
dXp6ZXIvZnV6emVyX3Rlc3QuZ25pIikKIAotY29uZmlnKCJ1c3JzY3RwX2NvbmZpZyIpIHsKK2Nv
bmZpZygidXNyc2N0cF9wdWJsaWNfY29uZmlnIikgewogICBpbmNsdWRlX2RpcnMgPSBbCiAgICAg
InVzcnNjdHBsaWIvdXNyc2N0cGxpYiIsCiAgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0IiwKQEAgLTE3LDYgKzE4LDE2IEBAIGNvbmZpZygidXNyc2N0cF9jb25maWciKSB7CiAgIH0K
IH0KIAorIyBVc2VkIGJ5IGJvdGggdXNyc2N0cCBzdGF0aWMgbGlicmFyeSBhbmQgZnV6emVycy4K
K2NvbmZpZygidXNyc2N0cF9pbnRlcm5hbF9jb25maWciKSB7CisgIGRlZmluZXMgPSBbXQorICBp
ZiAoaXNfbGludXggfHwgaXNfY2hyb21lb3MgfHwgaXNfYW5kcm9pZCkgeworICAgIGRlZmluZXMg
Kz0gWyAiX0dOVV9TT1VSQ0UiIF0KKyAgfSBlbHNlIGlmIChpc19hcHBsZSkgeworICAgIGRlZmlu
ZXMgKz0gWyAiX19BUFBMRV9VU0VfUkZDXzIyOTIiIF0KKyAgfQorfQorCiBjb25maWcoInVzcnNj
dHBfd2FybmluZ3MiKSB7CiAgIGlmIChpc19jbGFuZykgewogICAgIGNmbGFncyA9IFsKQEAgLTEw
NSw2ICsxMTYsNyBAQCBzdGF0aWNfbGlicmFyeSgidXNyc2N0cCIpIHsKICAgICAiU0NUUF9QUk9D
RVNTX0xFVkVMX0xPQ0tTIiwKICAgICAiU0NUUF9TSU1QTEVfQUxMT0NBVE9SIiwKICAgICAiU0NU
UF9VU0VfT1BFTlNTTF9TSEExIiwKKyAgICAiU0NUUF9VU0VfT1BFTlNTTF9SQU5EIiwKICAgICAi
X19Vc2Vyc3BhY2VfXyIsCiAKICAgICAjICJTQ1RQX0RFQlVHIiwgIyBVbmNvbW1lbnQgZm9yIFND
VFAgZGVidWdnaW5nLgpAQCAtMTE4LDM2ICsxMzAsNjAgQEAgc3RhdGljX2xpYnJhcnkoInVzcnNj
dHAiKSB7CiAgICAgIyBjb3JyZWN0bHkuCiAgICAgIi8vYnVpbGQvY29uZmlnL2NvbXBpbGVyOm5v
X2luY29tcGF0aWJsZV9wb2ludGVyX3dhcm5pbmdzIiwKICAgICAiOnVzcnNjdHBfd2FybmluZ3Mi
LAorICAgICI6dXNyc2N0cF9pbnRlcm5hbF9jb25maWciLAogICBdCiAKLSAgcHVibGljX2NvbmZp
Z3MgPSBbICI6dXNyc2N0cF9jb25maWciIF0KKyAgcHVibGljX2NvbmZpZ3MgPSBbICI6dXNyc2N0
cF9wdWJsaWNfY29uZmlnIiBdCiAKICAgY2ZsYWdzID0gWwogICAgICItVUlORVQiLAogICAgICIt
VUlORVQ2IiwKICAgXQogCi0gIGlmIChpc19saW51eCB8fCBpc19jaHJvbWVvcyB8fCBpc19hbmRy
b2lkKSB7Ci0gICAgZGVmaW5lcyArPSBbCi0gICAgICAiX19Vc2Vyc3BhY2Vfb3NfTGludXgiLAot
ICAgICAgIl9HTlVfU09VUkNFIiwKLSAgICBdCi0gIH0gZWxzZSBpZiAoaXNfYXBwbGUpIHsKLSAg
ICBkZWZpbmVzICs9IFsKLSAgICAgICJIQVZFX1NBX0xFTiIsCi0gICAgICAiX19BUFBMRV9VU0Vf
UkZDXzIyOTIiLAotICAgICAgIl9fVXNlcnNwYWNlX29zX0RhcndpbiIsCi0gICAgXQorICBpZiAo
dXNlX2Z1enppbmdfZW5naW5lKSB7CisgICAgZGVmaW5lcyArPSBbICJJTlZBUklBTlRTIiBdCiAg
IH0KKyAgZGVwcyA9IFsgIi8vdGhpcmRfcGFydHkvYm9yaW5nc3NsIiBdCit9CiAKLSAgaWYgKGlz
X3dpbikgewotICAgIGRlZmluZXMgKz0gWyAiX19Vc2Vyc3BhY2Vfb3NfV2luZG93cyIgXQotICB9
IGVsc2UgewotICAgIGRlZmluZXMgKz0gWyAiTk9OX1dJTkRPV1NfREVGSU5FIiBdCi0gIH0KK2Z1
enplcl90ZXN0KCJ1c3JzY3RwX2Z1enplcl9saXN0ZW4iKSB7CisgIHNvdXJjZXMgPSBbCisgICAg
InVzcnNjdHBsaWIvZnV6emVyL2Z1enplcl9saXN0ZW4uYyIsCisgICAgInVzcnNjdHBsaWIvcHJv
Z3JhbXMvcHJvZ3JhbXNfaGVscGVyLmMiLAorICBdCisgIGFkZGl0aW9uYWxfY29uZmlncyA9IFsg
Ijp1c3JzY3RwX2ludGVybmFsX2NvbmZpZyIgXQorICBkZXBzID0gWyAiOnVzcnNjdHAiIF0KKyAg
c2VlZF9jb3JwdXMgPSAidXNyc2N0cGxpYi9mdXp6ZXIvQ09SUFVTX0xJU1RFTiIKKyAgbGliZnV6
emVyX29wdGlvbnMgPSBbICJtYXhfbGVuPTQwODYiIF0KK30KIAotICBpZiAoaXNfZnVjaHNpYSkg
ewotICAgIGRlZmluZXMgKz0gWyAiX19Vc2Vyc3BhY2Vfb3NfRnVjaHNpYSIgXQotICB9Ci0gIGRl
cHMgPSBbICIvL3RoaXJkX3BhcnR5L2JvcmluZ3NzbCIgXQorZnV6emVyX3Rlc3QoInVzcnNjdHBf
ZnV6emVyX2ZyYWdtZW50IikgeworICBzb3VyY2VzID0gWworICAgICJ1c3JzY3RwbGliL2Z1enpl
ci9mdXp6ZXJfZnJhZ21lbnQuYyIsCisgICAgInVzcnNjdHBsaWIvcHJvZ3JhbXMvcHJvZ3JhbXNf
aGVscGVyLmMiLAorICBdCisgIGFkZGl0aW9uYWxfY29uZmlncyA9IFsgIjp1c3JzY3RwX2ludGVy
bmFsX2NvbmZpZyIgXQorICBkZXBzID0gWyAiOnVzcnNjdHAiIF0KKyAgc2VlZF9jb3JwdXMgPSAi
dXNyc2N0cGxpYi9mdXp6ZXIvQ09SUFVTX0ZSQUdNRU5UIgorICBsaWJmdXp6ZXJfb3B0aW9ucyA9
IFsgIm1heF9sZW49NDA4NiIgXQorfQorCitmdXp6ZXJfdGVzdCgidXNyc2N0cF9mdXp6ZXJfY29u
bmVjdF9tdWx0aSIpIHsKKyAgc291cmNlcyA9IFsKKyAgICAidXNyc2N0cGxpYi9mdXp6ZXIvZnV6
emVyX2Nvbm5lY3QuYyIsCisgICAgInVzcnNjdHBsaWIvcHJvZ3JhbXMvcHJvZ3JhbXNfaGVscGVy
LmMiLAorICBdCisKKyAgYWRkaXRpb25hbF9jb25maWdzID0gWyAiOnVzcnNjdHBfaW50ZXJuYWxf
Y29uZmlnIiBdCisKKyAgIyBTZWUgdXNyc2N0cGxpYi9mdXp6ZXIvQ01ha2VMaXN0cy50eHQuCisg
ICMgU3RhZ2UgMCBpcyAibXVsdGkiLCB3aGljaCBjYW4gc3RhcnQgZnV6emluZyBhdCBkaWZmZXJl
bnQgcG9pbnRzIGR1cmluZyB0aGUKKyAgIyBoYW5kc2hha2UgYmFzZWQgb24gdGhlIGZpcnN0IGZ1
enplZCBieXRlLiBUaGVyZSB3ZXJlIHBsYW5zIHRvIGhhdmUgZGVkaWNhdGVkCisgICMgZnV6emVy
cyBmb3IgdmFyaW91cyBzdGFnZXMsIGJ1dCB0aGlzIGlkZWEgd2FzIGFiYW5kb25lZCB3aGF0IHdh
cyBmb3VuZCB0aGF0CisgICMgdGhlICJtdWx0aSIgZnV6emVyIHBlcmZvcm1lZCBqdXN0IGFzIHdl
bGwuCisgIGRlZmluZXMgPSBbICJGVVpaSU5HX1NUQUdFPTAiIF0KKworICBkZXBzID0gWyAiOnVz
cnNjdHAiIF0KKyAgc2VlZF9jb3JwdXMgPSAidXNyc2N0cGxpYi9mdXp6ZXIvQ09SUFVTX0NPTk5F
Q1QiCisgIGxpYmZ1enplcl9vcHRpb25zID0gWyAibWF4X2xlbj0zMjAwMCIgXQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL0RJUl9NRVRBREFUQSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC9ESVJfTUVUQURBVEEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGYwYTJkMDE4MTE2NGU3
ODgwYzQzMjg2NTdlZmVhMGIwMDA0ODJlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9ESVJfTUVUQURBVEEK
QEAgLTAsMCArMSwzIEBACittb25vcmFpbDogeworICBjb21wb25lbnQ6ICJCbGluaz5XZWJSVEM+
TmV0d29yayIKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC9PV05FUlMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvT1dORVJTCmluZGV4IGFhZTUzOGIwYjg2YWM4
ZGQ3M2JiOWJmNjA5ZmNiMzY2NGU5ZmZiYmIuLjBlMzQ5NzA4OTlmZmNmODY3ZTEwMGJiZDhjZjkz
NjgzZjYxOGZjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC9PV05FUlMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL09XTkVSUwpAQCAtMSw0ICsxLDIgQEAK
IGh0YUBjaHJvbWl1bS5vcmcKIG9ycGhpc0BjaHJvbWl1bS5vcmcKLQotIyBDT01QT05FTlQ6IEJs
aW5rPldlYlJUQz5OZXR3b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvUkVBRE1FLmNocm9taXVtIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL1JFQURNRS5jaHJv
bWl1bQppbmRleCBlNzQwNWFjOTU0OThmNDYyMDA0ZjRlNzJjNzgxMmYwYWE0YzUyNDJmLi5iNGNh
NDNjMDkyYTViNzQ0NGQyZmIyYjNmYTJjZDhhMmY0Mzc2YjdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvUkVBRE1FLmNo
cm9taXVtCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC9SRUFETUUuY2hyb21pdW0KQEAgLTIsOCArMiw4IEBAIE5hbWU6IHVzcnNjdHAK
IFVSTDogaHR0cDovL2dpdGh1Yi5jb20vc2N0cGxhYi91c3JzY3RwCiBWZXJzaW9uOiAwCiBDUEVQ
cmVmaXg6IGNwZTovYTp1c3JzY3RwX3Byb2plY3Q6dXNyc2N0cDoyMDE5LTEyLTIwCi1EYXRlOiBB
dWcgMjgsIDIwMjAKLVJldmlzaW9uOiA5OTVjMGI4NDQxNDQ2NmQ3N2Q1MjAxMWU1YjU3MmNiZTIx
M2I3NzBhCitEYXRlOiBNYXkgMTAsIDIwMjEKK1JldmlzaW9uOiBhY2ZjZTQ2ZTQyOGNjMDg0YjRi
ZDAxNjRlMWIwMTkyNjFhOGRiZWRhCiBMaWNlbnNlOiBOZXcgQlNECiBMaWNlbnNlIEZpbGU6IExJ
Q0VOU0UKIFNlY3VyaXR5IENyaXRpY2FsOiB5ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliLy5naXRh
dHRyaWJ1dGVzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmRkZjE4OTdl
ODRkZGVhZGY0NGI1Y2Y0NmFiOThkYzc0M2E0MjM5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEgQEAKK3Byb2dyYW1zIHN2bi1wcm9wZXJ0aWVz
PWFsbG93LXRhYnM9b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliLy5naXRodWIvd29ya2Zsb3dzL2J1
aWxkLXdpdGgtY21ha2UueW1sIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtd2l0
aC1jbWFrZS55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWJhOWQ2OWMzMWZkOGZlMjgyZjAxZTBhMGE2YTAwOWUw
MGFlNWY1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliLy5naXRodWIvd29ya2Zsb3dzL2J1
aWxkLXdpdGgtY21ha2UueW1sCkBAIC0wLDAgKzEsNTcgQEAKK25hbWU6IEJ1aWxkIHdpdGggQ01h
a2UKKworb246CisgIHB1c2g6CisgICAgYnJhbmNoZXM6IFsgbWFzdGVyLCBnaXRodWItYWN0aW9u
cyBdCisgIHB1bGxfcmVxdWVzdDoKKyAgICBicmFuY2hlczogWyBtYXN0ZXIgXQorCitqb2JzOgor
ICBidWlsZDoKKworICAgIHN0cmF0ZWd5OgorICAgICAgbWF0cml4OgorICAgICAgICBwbGF0Zm9y
bTogW3VidW50dS1sYXRlc3QsIG1hY29zLWxhdGVzdCwgd2luZG93cy1sYXRlc3RdCisgICAgICAg
IGNtYWtlX2J1aWxkX3R5cGU6IFtEZWJ1ZywgUmVsV2l0aERlYkluZm9dCisgICAgICAgIHNjdHBf
aW52YXJpYW50czogW09OLCBPRkZdCisgICAgICAgIHNjdHBfaW5ldDY6IFtPTiwgT0ZGXQorICAg
ICAgICBzY3RwX2luZXQ6IFtPTiwgT0ZGXQorICAgICAgICBzY3RwX2RlYnVnOiBbT04sIE9GRl0K
KworICAgIHJ1bnMtb246ICR7eyBtYXRyaXgucGxhdGZvcm0gfX0KKworICAgIHN0ZXBzOgorICAg
IC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2MgorICAgICAgd2l0aDoKKyAgICAgICAgcGF0aDog
J3VzcnNjdHBfc291cmNlJworCisgICAgLSBuYW1lOiBQcmVwYXJlIGRpcnMKKyAgICAgIHNoZWxs
OiBiYXNoCisgICAgICBydW46IHwKKyAgICAgICAgbWtkaXIgLXAgY21ha2VfYnVpbGQKKyAgICAg
ICAgbWtkaXIgLXAgY21ha2VfaW5zdGFsbAorICAgICAgICAKKyAgICAtIG5hbWU6IEdlbmVyYXRl
IENNYWtlIHByb2plY3QKKyAgICAgIHNoZWxsOiBiYXNoCisgICAgICBydW46IHwKKyAgICAgICAg
Y2QgY21ha2VfYnVpbGQKKyAgICAgICAgY21ha2UgLURDTUFLRV9CVUlMRF9UWVBFPSR7eyBtYXRy
aXguY21ha2VfYnVpbGRfdHlwZSB9fSBcCisgICAgICAgICAgICAgIC1EQ01BS0VfUE9TSVRJT05f
SU5ERVBFTkRFTlRfQ09ERT1PTiBcCisgICAgICAgICAgICAgIC1EQ01BS0VfVkVSQk9TRV9NQUtF
RklMRTpCT09MPU9OIFwKKyAgICAgICAgICAgICAgLURzY3RwX2RlYnVnPSR7eyBtYXRyaXguc2N0
cF9kZWJ1ZyB9fSBcCisgICAgICAgICAgICAgIC1Ec2N0cF9pbnZhcmlhbnRzPSR7eyBtYXRyaXgu
c2N0cF9pbnZhcmlhbnRzIH19IFwKKyAgICAgICAgICAgICAgLURzY3RwX2luZXQ2PSR7eyBtYXRy
aXguc2N0cF9pbmV0NiB9fSBcCisgICAgICAgICAgICAgIC1Ec2N0cF9pbmV0PSR7eyBtYXRyaXgu
c2N0cF9pbmV0IH19IFwKKyAgICAgICAgICAgICAgLURzY3RwX2J1aWxkX3Byb2dyYW1zPU9OIFwK
KyAgICAgICAgICAgICAgLURzY3RwX2J1aWxkX2Z1enplcj1PRkYgXAorICAgICAgICAgICAgICAt
RENNQUtFX0lOU1RBTExfUFJFRklYPSR7R0lUSFVCX1dPUktTUEFDRX0vY21ha2VfaW5zdGFsbCBc
CisgICAgICAgICAgICAgICR7R0lUSFVCX1dPUktTUEFDRX0vdXNyc2N0cF9zb3VyY2UKKyAgICAg
ICAgCisgICAgLSBuYW1lOiBCdWlsZCBhbmQgaW5zdGFsbCBwcm9qZWN0CisgICAgICBzaGVsbDog
YmFzaAorICAgICAgcnVuOiB8CisgICAgICAgIGNtYWtlIC0tYnVpbGQgY21ha2VfYnVpbGQgXAor
ICAgICAgICAgICAgICAtLXBhcmFsbGVsIDIgXAorICAgICAgICAgICAgICAtLWNvbmZpZyAke3sg
bWF0cml4LmNtYWtlX2J1aWxkX3R5cGUgfX0gXAorICAgICAgICAgICAgICAtLXRhcmdldCBpbnN0
YWxsIFwKKyAgICAgICAgICAgICAgLS1jbGVhbi1maXJzdApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
Q01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9DTWFrZUxpc3RzLnR4dAppbmRleCBiYTkzNWY1NzUw
YmU2YTVhZTk1MDUwOWFjOTY4OTQ3NmMwMWNmZTlhLi41ZTMzMTk1NDI1MTIwNTZjN2VlMWE4YTZk
ODgyZGM0NWEwZWRmMDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9DTWFrZUxpc3RzLnR4dApAQCAtMzgsNiArMzgsOCBAQCBpZiAoTk9UIENNQUtF
X0JVSUxEX1RZUEUpCiAJc2V0KENNQUtFX0JVSUxEX1RZUEUgIkRFQlVHIikKIGVuZGlmICgpCiAK
K2xpc3QoQVBQRU5EIENNQUtFX01PRFVMRV9QQVRIICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS9jbWFrZSkKKwogaW5jbHVkZShDaGVja1N0cnVjdEhhc01lbWJlcikKIGluY2x1ZGUoQ2hlY2tJ
bmNsdWRlRmlsZSkKIGluY2x1ZGUoQ2hlY2tJbmNsdWRlRmlsZXMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9NYW51YWwubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9NYW51YWwubWQKaW5kZXggYjE3Yzc1NDE0MmRmMTYw
Zjk4MTRjNGM4OWFiMTk2NjdkMmNlMzg3Yi4uNWVmYzc4NTk1Nzg4ZjMwMGZiNjM1ZmE2ZmI1OWNl
OWQ2MDllNTliMiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvTWFudWFsLm1kCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L01hbnVhbC5tZApAQCAtMzY0LDcgKzM2NCw3IEBAIFNDVFBfUkVDVlJDVklORk8gfCBpbnQgfCBy
L3cKIFNDVFBfUkVDVk5YVElORk8gfCBpbnQgfCByL3cKIFNDVFBfREVGQVVMVF9TTkRJTkZPIHwg
c3RydWN0IHNjdHBfc25kaW5mbyB8IHIvdwogU0NUUF9ERUZBVUxUX1BSSU5GTyB8IHN0cnVjdCBz
Y3RwX2RlZmF1bHRfcHJpbmZvIHwgci93Ci1TQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQgfCBp
bnQgfCByL3cKK1NDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCB8IHN0cnVjdCBzY3RwX3VkcGVu
Y2FwcyB8IHIvdwogU0NUUF9FTkFCTEVfU1RSRUFNX1JFU0VUIHwgc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUgfCByL3cKIFNDVFBfU1RBVFVTIHwgc3RydWN0IHNjdHBfc3RhdHVzIHwgcgogU0NUUF9H
RVRfUEVFUl9BRERSX0lORk8gfCBzdHJ1Y3Qgc2N0cF9wYWRkcmluZm8gfCByCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9jbWFrZS9GaW5kTWJlZFRMUy5jbWFrZSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL2NtYWtlL0ZpbmRN
YmVkVExTLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzZWQwNDZiNjllMDc5MDU3NTg1ZTU1OGMzYjI4Mzlm
ZmU4NzJjMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9jbWFrZS9GaW5kTWJlZFRMUy5j
bWFrZQpAQCAtMCwwICsxLDM4IEBACitmaW5kX3BhdGgoTUJFRFRMU19JTkNMVURFX0RJUlMgbWJl
ZHRscy9zc2wuaCkKKworZmluZF9saWJyYXJ5KE1CRURUTFNfTElCUkFSWSBtYmVkdGxzKQorZmlu
ZF9saWJyYXJ5KE1CRURYNTA5X0xJQlJBUlkgbWJlZHg1MDkpCitmaW5kX2xpYnJhcnkoTUJFRENS
WVBUT19MSUJSQVJZIG1iZWRjcnlwdG8pCisKK3NldChNQkVEVExTX0xJQlJBUklFUyAiJHtNQkVE
VExTX0xJQlJBUll9IiAiJHtNQkVEWDUwOV9MSUJSQVJZfSIgIiR7TUJFRENSWVBUT19MSUJSQVJZ
fSIpCisKK2luY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitmaW5kX3BhY2th
Z2VfaGFuZGxlX3N0YW5kYXJkX2FyZ3MoTWJlZFRMUyBERUZBVUxUX01TRworICAgIE1CRURUTFNf
TElCUkFSWSBNQkVEVExTX0lOQ0xVREVfRElSUyBNQkVEWDUwOV9MSUJSQVJZIE1CRURDUllQVE9f
TElCUkFSWSkKKworbWFya19hc19hZHZhbmNlZChNQkVEVExTX0lOQ0xVREVfRElSUyBNQkVEVExT
X0xJQlJBUlkgTUJFRFg1MDlfTElCUkFSWSBNQkVEQ1JZUFRPX0xJQlJBUlkpCisKK2lmKE5PVCBU
QVJHRVQgTWJlZFRMUykKKwltZXNzYWdlKCJpbiBtYmVkdGxzICR7TUJFRFRMU19MSUJSQVJZfSIp
CisgICAgYWRkX2xpYnJhcnkoTWJlZFRMUyBVTktOT1dOIElNUE9SVEVEKQorICAgIHNldF90YXJn
ZXRfcHJvcGVydGllcyhNYmVkVExTIFBST1BFUlRJRVMKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7TUJFRFRMU19JTkNMVURFX0RJUlN9
IgorICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRFRF9MSU5LX0lOVEVSRkFDRV9MQU5H
VUFHRVMgIkMiCisgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xPQ0FUSU9OICIk
e01CRURUTFNfTElCUkFSWX0iKQorZW5kaWYoKQorCitpZihOT1QgVEFSR0VUIE1iZWRDcnlwdG8p
CisgICAgYWRkX2xpYnJhcnkoTWJlZENyeXB0byBVTktOT1dOIElNUE9SVEVEKQorICAgIHNldF90
YXJnZXRfcHJvcGVydGllcyhNYmVkQ3J5cHRvIFBST1BFUlRJRVMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7TUJFRFRMU19JTkNMVURF
X0RJUlN9IgorICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRFRF9MSU5LX0lOVEVSRkFD
RV9MQU5HVUFHRVMgIkMiCisgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xPQ0FU
SU9OICIke01CRURDUllQVE9fTElCUkFSWX0iKQorZW5kaWYoKQorCitpZihOT1QgVEFSR0VUIE1i
ZWRYNTA5KQorICAgIGFkZF9saWJyYXJ5KE1iZWRYNTA5IFVOS05PV04gSU1QT1JURUQpCisgICAg
c2V0X3RhcmdldF9wcm9wZXJ0aWVzKE1iZWRYNTA5IFBST1BFUlRJRVMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgSU5URVJGQUNFX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7TUJFRFRMU19JTkNM
VURFX0RJUlN9IgorICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRFRF9MSU5LX0lOVEVS
RkFDRV9MQU5HVUFHRVMgIkMiCisgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEVEX0xP
Q0FUSU9OICIke01CRURYNTA5X0xJQlJBUll9IikKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL2NvbmZpZ3VyZS5hYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL2NvbmZpZ3VyZS5hYwppbmRleCAxNzZkNWZhN2Uz
OWM1Yzc2NDE1NzM2OWU2Nzk0MGJkMjFjMjU4MGVlLi4yMDRlN2ViZGU3NWZkYjI3MjFmNTU4NjA2
NjIzYjBjNzUyMGJiZTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9jb25maWd1cmUuYWMKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvY29uZmlndXJlLmFjCkBAIC0yOCw3ICsyOCw3IEBAIGRubCBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
CiBkbmwgU1VDSCBEQU1BR0UuCiBkbmwKIAotQUNfSU5JVChbbGlidXNyc2N0cF0sIFswLjkuMy4w
XSkKK0FDX0lOSVQoW2xpYnVzcnNjdHBdLCBbMC45LjUuMF0pCiBBTV9JTklUX0FVVE9NQUtFKFtm
b3JlaWduXSkKIAogQUNfUFJPR19DQwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbWVzb24uYnVpbGQg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9tZXNvbi5idWlsZAppbmRleCAyOWYwNjQ3N2RhYmMyOTUwOTRjODg1MWFmYTg0
NzlhYmM4OTVmMzUwLi5kYWFjOTI1YmRhMDU3NTdmZWM2NThkMjU3NGYzM2JjMjRjYmI0NTE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9tZXNvbi5idWlsZAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9tZXNvbi5idWls
ZApAQCAtMSw5ICsxLDE0IEBACiAjIFByb2plY3QgZGVmaW5pdGlvbgogcHJvamVjdCgndXNyc2N0
cGxpYicsICdjJywKLSAgICB2ZXJzaW9uOiAnMS4wLjAnLAorICAgIHZlcnNpb246ICcwLjkuNS4w
JywKICAgICBkZWZhdWx0X29wdGlvbnM6IFsnY19zdGQ9Yzk5J10sCiAgICAgbWVzb25fdmVyc2lv
bjogJz49MC40OS4wJykKIAorIyBTaGFyZWQgbGlicmFyeSBBUEkgYW5kIEFCSSB2ZXJzaW9ucwor
IyBOb3RpY2U6IHNoYXJlZCBsaWJyYXJ5IHZlcnNpb24gbXVzdCBiZSBpbiBYLlkuWiBmb3JtYXQg
b25seQorc292ZXJzaW9uX2Z1bGwgPSAnMi4wLjAnCitzb3ZlcnNpb25fc2hvcnQgPSAnMicKKwog
IyBTZXQgY29tcGlsZXIgd2FybmluZyBmbGFncwogY29tcGlsZXIgPSBtZXNvbi5nZXRfY29tcGls
ZXIoJ2MnKQogaWYgY29tcGlsZXIuZ2V0X2FyZ3VtZW50X3N5bnRheCgpID09ICdtc3ZjJwpAQCAt
MTg2LDcgKzE5MSw4IEBAIGVsc2UKICAgICAgICAgZGVwZW5kZW5jaWVzOiBkZXBlbmRlbmNpZXMs
CiAgICAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IGluY2x1ZGVfZGlycywKICAgICAgICAgaW5z
dGFsbDogdHJ1ZSwKLSAgICAgICAgdmVyc2lvbjogbWVzb24ucHJvamVjdF92ZXJzaW9uKCkpCisg
ICAgICAgIHZlcnNpb246IHNvdmVyc2lvbl9mdWxsLAorICAgICAgICBzb3ZlcnNpb246IHNvdmVy
c2lvbl9zaG9ydCkKIGVuZGlmCiAKICMgRGVjbGFyZSBkZXBlbmRlbmN5CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9wcm9ncmFtcy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL0NNYWtl
TGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmOTA3YmIyZjE1NjYyZDQ3ZDg0NGY2NjAwYWM2MWUzYzVh
Y2FjNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9DTWFrZUxpc3RzLnR4
dApAQCAtMCwwICsxLDEyMiBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNSBPbGVnIEFs
ZXhlZW5rb3YKKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMjAgRmVsaXggV2VpbnJhbmsKKyMKKyMg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVj
dCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyMgICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisj
ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorIyBTVUNIIERBTUFHRS4KKyMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIElOQ0xVREUgTU9EVUxFUworIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbmNsdWRlKENoZWNrSW5j
bHVkZUZpbGUpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIworIyBDSEVDSyBJTkNMVURFUworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIworCitpbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q01BS0VfU09VUkNF
X0RJUn0vdXNyc2N0cGxpYikKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCisjIE9TIERFUEVOREVOVAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpZiAoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hF
UyAiTGludXgiKQorCWFkZF9kZWZpbml0aW9ucygtRF9HTlVfU09VUkNFKQorZW5kaWYgKCkKKwor
aWYgKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIkRhcndpbiIpCisJYWRkX2RlZmluaXRpb25z
KC1EX19BUFBMRV9VU0VfUkZDXzIyOTIpCitlbmRpZiAoKQorCitpZiAoTVNZUyBPUiBNSU5HVykK
KwltZXNzYWdlKFNUQVRVUyAiTVNZUyAvIE1JTkdXIikKKwlhZGRfZGVmaW5pdGlvbnMoLURfX1VT
RV9NSU5HV19BTlNJX1NURElPKQorCSMgMHgwNjAxID0gV2luZG93cyA3IEFQSQorCWFkZF9kZWZp
bml0aW9ucygtRFdJTlZFUj0weDA2MDEpCisJYWRkX2RlZmluaXRpb25zKC1EX1dJTjMyX1dJTk5U
PTB4MDYwMSkKKworCWlmIChDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIkdOVSIpCisJCW1l
c3NhZ2UoU1RBVFVTICJNU1lTIC8gTUlOR1cgKyBHQ0MiKQorCQlzZXQoQ01BS0VfQ19GTEFHUyAi
JHtDTUFLRV9DX0ZMQUdTfSAtV25vLWZvcm1hdCIpCisJZW5kaWYgKCkKK2VuZGlmICgpCisKKwor
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNSVND
CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Zp
bmRfcGFja2FnZShUaHJlYWRzKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKyMgUFJPR1JBTVMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbGlzdChBUFBFTkQgY2hlY2tfcHJvZ3JhbXMKKwlj
aGFyZ2VuX3NlcnZlcl91cGNhbGwuYworCWNsaWVudC5jCisJY2xpZW50X3VwY2FsbC5jCisJZGF5
dGltZV9zZXJ2ZXIuYworCWRheXRpbWVfc2VydmVyX3VwY2FsbC5jCisJZGlzY2FyZF9zZXJ2ZXIu
YworCWRpc2NhcmRfc2VydmVyX3VwY2FsbC5jCisJZWNob19zZXJ2ZXIuYworCWVjaG9fc2VydmVy
X3VwY2FsbC5jCisJZWtyX2NsaWVudC5jCisJZWtyX2xvb3AuYworCWVrcl9sb29wX3VwY2FsbC5j
CisJZWtyX3BlZXIuYworCWVrcl9zZXJ2ZXIuYworCWh0dHBfY2xpZW50LmMKKwlodHRwX2NsaWVu
dF91cGNhbGwuYworCXJ0Y3dlYi5jCisJc3RfY2xpZW50LmMKKwl0ZXN0X2xpYm1nbXQuYworCXRl
c3RfdGltZXIuYworCXRzY3RwLmMKKwl0c2N0cF91cGNhbGwuYworKQorCitmb3JlYWNoIChzb3Vy
Y2VfZmlsZSAke2NoZWNrX3Byb2dyYW1zfSkKKwlnZXRfZmlsZW5hbWVfY29tcG9uZW50KHNvdXJj
ZV9maWxlX3dlICR7c291cmNlX2ZpbGV9IE5BTUVfV0UpCisJYWRkX2V4ZWN1dGFibGUoCisJCSR7
c291cmNlX2ZpbGVfd2V9CisJCSR7c291cmNlX2ZpbGV9CisJCXByb2dyYW1zX2hlbHBlci5jCisJ
KQorCisJdGFyZ2V0X2xpbmtfbGlicmFyaWVzKAorCQkke3NvdXJjZV9maWxlX3dlfQorCQkidXNy
c2N0cCIKKwkJJHtDTUFLRV9USFJFQURfTElCU19JTklUfQorCSkKK2VuZGZvcmVhY2ggKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL01ha2VmaWxlLmFtIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3Jh
bXMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE1MDFiNWZkODk5NzE4ZjFhMzAyMzczODc2MzA2
MTkyMTEzODdlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL01ha2VmaWxl
LmFtCkBAIC0wLDAgKzEsMTIyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE1pY2hh
ZWwgVHVleGVuCisjCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisjICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisjIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCisjCisKK0FNX0NQUEZMQUdT
ID0gLUkkKHNyY2RpcikvLi4vdXNyc2N0cGxpYgorRVhUUkFfRElTVCA9IFwKKyAgICBNYWtlZmls
ZS5ubWFrZSBcCisgICAgdGVzdF9saWJtZ210LmMgXAorICAgIHRlc3RfdGltZXIuYyBcCisgICAg
dHNjdHAuYyBcCisgICAgY2hhcmdlbl9zZXJ2ZXJfdXBjYWxsLmMgXAorICAgIGRheXRpbWVfc2Vy
dmVyLmMgXAorICAgIGRheXRpbWVfc2VydmVyX3VwY2FsbC5jIFwKKyAgICBkaXNjYXJkX3NlcnZl
ci5jIFwKKyAgICBkaXNjYXJkX3NlcnZlcl91cGNhbGwuYyBcCisgICAgZWNob19zZXJ2ZXIuYyBc
CisgICAgZWNob19zZXJ2ZXJfdXBjYWxsLmMgXAorICAgIGNsaWVudC5jIFwKKyAgICBjbGllbnRf
dXBjYWxsLmMgXAorICAgIHJ0Y3dlYi5jIFwKKyAgICBla3JfY2xpZW50LmMgXAorICAgIGVrcl9z
ZXJ2ZXIuYyBcCisgICAgZWtyX2xvb3AuYyBcCisgICAgZWtyX2xvb3BfdXBjYWxsLmMgXAorICAg
IGVrcl9wZWVyLmMgXAorICAgIHRlc3RfbGlibWdtdC5jIFwKKyAgICBodHRwX2NsaWVudC5jIFwK
KyAgICBodHRwX2NsaWVudF91cGNhbGwuYyBcCisgICAgc3RfY2xpZW50LmMKKworbm9pbnN0X1BS
T0dSQU1TID0gXAorICAgIHRlc3RfbGlibWdtdCBcCisgICAgdGVzdF90aW1lciBcCisgICAgdHNj
dHAgXAorICAgIGNoYXJnZW5fc2VydmVyX3VwY2FsbCBcCisgICAgZGF5dGltZV9zZXJ2ZXIgXAor
ICAgIGRheXRpbWVfc2VydmVyX3VwY2FsbCBcCisgICAgZGlzY2FyZF9zZXJ2ZXIgXAorICAgIGRp
c2NhcmRfc2VydmVyX3VwY2FsbCBcCisgICAgZWNob19zZXJ2ZXIgXAorICAgIGVjaG9fc2VydmVy
X3VwY2FsbCBcCisgICAgY2xpZW50IFwKKyAgICBjbGllbnRfdXBjYWxsIFwKKyAgICBydGN3ZWIg
XAorICAgIGVrcl9jbGllbnQgXAorICAgIGVrcl9zZXJ2ZXIgXAorICAgIGVrcl9sb29wIFwKKyAg
ICBla3JfbG9vcF91cGNhbGwgXAorICAgIGVrcl9wZWVyIFwKKyAgICB0ZXN0X2xpYm1nbXQgXAor
ICAgIGh0dHBfY2xpZW50IFwKKyAgICBodHRwX2NsaWVudF91cGNhbGwgXAorICAgIHN0X2NsaWVu
dAorCit0ZXN0X2xpYm1nbXRfU09VUkNFUyA9IHByb2dyYW1zX2hlbHBlci5jIHRlc3RfbGlibWdt
dC5jCit0ZXN0X2xpYm1nbXRfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK3Rl
c3RfdGltZXJfU09VUkNFUyA9IHByb2dyYW1zX2hlbHBlci5jIHRlc3RfdGltZXIuYwordGVzdF90
aW1lcl9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQordHNjdHBfU09VUkNFUyA9
IHByb2dyYW1zX2hlbHBlci5jIHRzY3RwLmMKK3RzY3RwX0xEQUREID0gLi4vdXNyc2N0cGxpYi9s
aWJ1c3JzY3RwLmxhCitjaGFyZ2VuX3NlcnZlcl91cGNhbGxfU09VUkNFUyA9IHByb2dyYW1zX2hl
bHBlci5jIGNoYXJnZW5fc2VydmVyX3VwY2FsbC5jCitjaGFyZ2VuX3NlcnZlcl91cGNhbGxfTERB
REQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK2RheXRpbWVfc2VydmVyX1NPVVJDRVMg
PSBwcm9ncmFtc19oZWxwZXIuYyBkYXl0aW1lX3NlcnZlci5jCitkYXl0aW1lX3NlcnZlcl9MREFE
RCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQorZGF5dGltZV9zZXJ2ZXJfdXBjYWxsX1NP
VVJDRVMgPSBwcm9ncmFtc19oZWxwZXIuYyBkYXl0aW1lX3NlcnZlcl91cGNhbGwuYworZGF5dGlt
ZV9zZXJ2ZXJfdXBjYWxsX0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCitkaXNj
YXJkX3NlcnZlcl9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgZGlzY2FyZF9zZXJ2ZXIuYwor
ZGlzY2FyZF9zZXJ2ZXJfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK2Rpc2Nh
cmRfc2VydmVyX3VwY2FsbF9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgZGlzY2FyZF9zZXJ2
ZXJfdXBjYWxsLmMKK2Rpc2NhcmRfc2VydmVyX3VwY2FsbF9MREFERCA9IC4uL3VzcnNjdHBsaWIv
bGlidXNyc2N0cC5sYQorZWNob19zZXJ2ZXJfU09VUkNFUyA9IHByb2dyYW1zX2hlbHBlci5jIGVj
aG9fc2VydmVyLmMKK2VjaG9fc2VydmVyX0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3Rw
LmxhCitlY2hvX3NlcnZlcl91cGNhbGxfU09VUkNFUyA9IHByb2dyYW1zX2hlbHBlci5jIGVjaG9f
c2VydmVyX3VwY2FsbC5jCitlY2hvX3NlcnZlcl91cGNhbGxfTERBREQgPSAuLi91c3JzY3RwbGli
L2xpYnVzcnNjdHAubGEKK2NsaWVudF9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgY2xpZW50
LmMKK2NsaWVudF9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQorY2xpZW50X3Vw
Y2FsbF9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgY2xpZW50X3VwY2FsbC5jCitjbGllbnRf
dXBjYWxsX0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCitydGN3ZWJfU09VUkNF
UyA9IHByb2dyYW1zX2hlbHBlci5jIHJ0Y3dlYi5jCitydGN3ZWJfTERBREQgPSAuLi91c3JzY3Rw
bGliL2xpYnVzcnNjdHAubGEKK2Vrcl9zZXJ2ZXJfU09VUkNFUyA9IHByb2dyYW1zX2hlbHBlci5j
IGVrcl9zZXJ2ZXIuYworZWtyX3NlcnZlcl9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0
cC5sYQorZWtyX2NsaWVudF9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgZWtyX2NsaWVudC5j
Citla3JfY2xpZW50X0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCitla3JfcGVl
cl9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgZWtyX3BlZXIuYworZWtyX3BlZXJfTERBREQg
PSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK2Vrcl9sb29wX1NPVVJDRVMgPSBwcm9ncmFt
c19oZWxwZXIuYyBla3JfbG9vcC5jCitla3JfbG9vcF9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGli
dXNyc2N0cC5sYQorZWtyX2xvb3BfdXBjYWxsX1NPVVJDRVMgPSBwcm9ncmFtc19oZWxwZXIuYyBl
a3JfbG9vcF91cGNhbGwuYworZWtyX2xvb3BfdXBjYWxsX0xEQUREID0gLi4vdXNyc2N0cGxpYi9s
aWJ1c3JzY3RwLmxhCitodHRwX2NsaWVudF9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgaHR0
cF9jbGllbnQuYworaHR0cF9jbGllbnRfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAu
bGEKK2h0dHBfY2xpZW50X3VwY2FsbF9TT1VSQ0VTID0gcHJvZ3JhbXNfaGVscGVyLmMgaHR0cF9j
bGllbnRfdXBjYWxsLmMKK2h0dHBfY2xpZW50X3VwY2FsbF9MREFERCA9IC4uL3VzcnNjdHBsaWIv
bGlidXNyc2N0cC5sYQorc3RfY2xpZW50X1NPVVJDRVMgPSBwcm9ncmFtc19oZWxwZXIuYyBzdF9j
bGllbnQuYworc3RfY2xpZW50X0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9NYWtlZmlsZS5ubWFrZSBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3By
b2dyYW1zL01ha2VmaWxlLm5tYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhY2ZjNzRlNWZjOTMwY2VkNGRiNjc0
OWQ1YmFhYmNkYjJiMjFkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9N
YWtlZmlsZS5ubWFrZQpAQCAtMCwwICsxLDE3OSBAQAorIw0KKyMgQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTIgTWljaGFlbCBUdWV4ZW4NCisjDQorIyBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyMNCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dA0KKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorIyBhcmUgbWV0Og0KKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4NCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
Lg0KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMNCisjICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KKyMgICAgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorIw0KKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQNCisj
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQ0KKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisjIEFSRSBESVNDTEFJTUVELglJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQor
IyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTA0KKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMNCisjIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0K
KyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QNCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkNCisjIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YNCisjIFNVQ0ggREFNQUdFLg0KKyMNCisNCitDRkxBR1M9L1czIC9XWCAvSS4uXHVzcnNjdHBs
aWINCisNCitDVkFSU0RMTD0tRElORVQgLURJTkVUNg0KKw0KK0xJTktGTEFHUz0vTElCUEFUSDou
Llx1c3JzY3RwbGliIHVzcnNjdHAubGliDQorDQorLmMub2JqOjoNCisJJChDQykgJChDVkFSU0RM
TCkgJChDRkxBR1MpIC1GZC5cIC1jICQ8DQorDQorYWxsOiBcDQorCXByb2dyYW1zX2hlbHBlci5v
YmogXA0KKwljbGllbnQgXA0KKwljbGllbnRfdXBjYWxsIFwNCisJZGF5dGltZV9zZXJ2ZXIgXA0K
KwlkYXl0aW1lX3NlcnZlcl91cGNhbGwgXA0KKwlkaXNjYXJkX3NlcnZlciBcDQorCWRpc2NhcmRf
c2VydmVyX3VwY2FsbCBcDQorCWVjaG9fc2VydmVyIFwNCisJZWNob19zZXJ2ZXJfdXBjYWxsIFwN
CisJdHNjdHAgXA0KKwlydGN3ZWIgXA0KKwlla3JfY2xpZW50IFwNCisJZWtyX3NlcnZlciBcDQor
CWVrcl9wZWVyIFwNCisJZWtyX2xvb3AgXA0KKwlla3JfbG9vcF91cGNhbGwgXA0KKwl0ZXN0X2xp
Ym1nbXQgXA0KKwlodHRwX2NsaWVudCBcDQorCWh0dHBfY2xpZW50X3VwY2FsbCBcDQorCXN0X2Ns
aWVudA0KKwkNCitwcm9ncmFtc19oZWxwZXIub2JqIDogcHJvZ3JhbXNfaGVscGVyLmMgcHJvZ3Jh
bXNfaGVscGVyLmgNCisJY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIHByb2dyYW1zX2hlbHBl
ci5jDQorDQorY2xpZW50Og0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgY2xpZW50
LmMNCisJbGluayAtb3V0OmNsaWVudC5leGUgY2xpZW50Lm9iaiBwcm9ncmFtc19oZWxwZXIub2Jq
ICQoTElOS0ZMQUdTKQ0KKw0KK2NsaWVudF91cGNhbGw6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENW
QVJTRExMKSAtYyBjbGllbnRfdXBjYWxsLmMNCisJbGluayAtb3V0OmNsaWVudF91cGNhbGwuZXhl
IGNsaWVudF91cGNhbGwub2JqIHByb2dyYW1zX2hlbHBlci5vYmogJChMSU5LRkxBR1MpDQorDQor
ZGF5dGltZV9zZXJ2ZXI6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBkYXl0aW1l
X3NlcnZlci5jDQorCWxpbmsgLW91dDpkYXl0aW1lX3NlcnZlci5leGUgZGF5dGltZV9zZXJ2ZXIu
b2JqIHByb2dyYW1zX2hlbHBlci5vYmogJChMSU5LRkxBR1MpDQorDQorZGF5dGltZV9zZXJ2ZXJf
dXBjYWxsOg0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZGF5dGltZV9zZXJ2ZXJf
dXBjYWxsLmMNCisJbGluayAtb3V0OmRheXRpbWVfc2VydmVyX3VwY2FsbC5leGUgZGF5dGltZV9z
ZXJ2ZXJfdXBjYWxsLm9iaiBwcm9ncmFtc19oZWxwZXIub2JqICQoTElOS0ZMQUdTKQ0KKw0KK2Rp
c2NhcmRfc2VydmVyOg0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZGlzY2FyZF9z
ZXJ2ZXIuYw0KKwlsaW5rIC1vdXQ6ZGlzY2FyZF9zZXJ2ZXIuZXhlIGRpc2NhcmRfc2VydmVyLm9i
aiBwcm9ncmFtc19oZWxwZXIub2JqICQoTElOS0ZMQUdTKQ0KKw0KK2Rpc2NhcmRfc2VydmVyX3Vw
Y2FsbDoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGRpc2NhcmRfc2VydmVyX3Vw
Y2FsbC5jDQorCWxpbmsgLW91dDpkaXNjYXJkX3NlcnZlcl91cGNhbGwuZXhlIGRpc2NhcmRfc2Vy
dmVyX3VwY2FsbC5vYmogcHJvZ3JhbXNfaGVscGVyLm9iaiAkKExJTktGTEFHUykNCisNCitlY2hv
X3NlcnZlcjoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVjaG9fc2VydmVyLmMN
CisJbGluayAtb3V0OmVjaG9fc2VydmVyLmV4ZSBlY2hvX3NlcnZlci5vYmogcHJvZ3JhbXNfaGVs
cGVyLm9iaiAkKExJTktGTEFHUykNCisNCitlY2hvX3NlcnZlcl91cGNhbGw6DQorCSQoQ0MpICQo
Q0ZMQUdTKSAkKENWQVJTRExMKSAtYyBlY2hvX3NlcnZlcl91cGNhbGwuYw0KKwlsaW5rIC1vdXQ6
ZWNob19zZXJ2ZXJfdXBjYWxsLmV4ZSBlY2hvX3NlcnZlcl91cGNhbGwub2JqIHByb2dyYW1zX2hl
bHBlci5vYmogJChMSU5LRkxBR1MpDQorDQordHNjdHA6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENW
QVJTRExMKSAtYyB0c2N0cC5jDQorCWxpbmsgLW91dDp0c2N0cC5leGUgdHNjdHAub2JqIHByb2dy
YW1zX2hlbHBlci5vYmogJChMSU5LRkxBR1MpDQorDQorcnRjd2ViOg0KKwkkKENDKSAkKENGTEFH
UykgJChDVkFSU0RMTCkgLWMgcnRjd2ViLmMNCisJbGluayAtb3V0OnJ0Y3dlYi5leGUgcnRjd2Vi
Lm9iaiBwcm9ncmFtc19oZWxwZXIub2JqICQoTElOS0ZMQUdTKQ0KKw0KK2Vrcl9jbGllbnQ6DQor
CSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBla3JfY2xpZW50LmMNCisJbGluayAtb3V0
OmVrcl9jbGllbnQuZXhlIGVrcl9jbGllbnQub2JqIHByb2dyYW1zX2hlbHBlci5vYmogJChMSU5L
RkxBR1MpDQorDQorZWtyX3NlcnZlcjoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1j
IGVrcl9zZXJ2ZXIuYw0KKwlsaW5rIC1vdXQ6ZWtyX3NlcnZlci5leGUgZWtyX3NlcnZlci5vYmog
cHJvZ3JhbXNfaGVscGVyLm9iaiAkKExJTktGTEFHUykNCisNCitla3JfcGVlcjoNCisJJChDQykg
JChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVrcl9wZWVyLmMNCisJbGluayAtb3V0OmVrcl9wZWVy
LmV4ZSBla3JfcGVlci5vYmogcHJvZ3JhbXNfaGVscGVyLm9iaiAkKExJTktGTEFHUykNCisNCitl
a3JfbG9vcDoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVrcl9sb29wLmMNCisJ
bGluayAtb3V0OmVrcl9sb29wLmV4ZSBla3JfbG9vcC5vYmogcHJvZ3JhbXNfaGVscGVyLm9iaiAk
KExJTktGTEFHUykNCisNCitla3JfbG9vcF91cGNhbGw6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENW
QVJTRExMKSAtYyBla3JfbG9vcF91cGNhbGwuYw0KKwlsaW5rIC1vdXQ6ZWtyX2xvb3BfdXBjYWxs
LmV4ZSBla3JfbG9vcF91cGNhbGwub2JqIHByb2dyYW1zX2hlbHBlci5vYmogJChMSU5LRkxBR1Mp
DQorDQordGVzdF9saWJtZ210Og0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgdGVz
dF9saWJtZ210LmMNCisJbGluayAtb3V0OnRlc3RfbGlibWdtdC5leGUgdGVzdF9saWJtZ210Lm9i
aiBwcm9ncmFtc19oZWxwZXIub2JqICQoTElOS0ZMQUdTKQ0KKw0KK2h0dHBfY2xpZW50Og0KKwkk
KENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgaHR0cF9jbGllbnQuYw0KKwlsaW5rIC1vdXQ6
aHR0cF9jbGllbnQuZXhlIGh0dHBfY2xpZW50Lm9iaiBwcm9ncmFtc19oZWxwZXIub2JqICQoTElO
S0ZMQUdTKQ0KKw0KK2h0dHBfY2xpZW50X3VwY2FsbDoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZB
UlNETEwpIC1jIGh0dHBfY2xpZW50X3VwY2FsbC5jDQorCWxpbmsgLW91dDpodHRwX2NsaWVudF91
cGNhbGwuZXhlIGh0dHBfY2xpZW50X3VwY2FsbC5vYmogcHJvZ3JhbXNfaGVscGVyLm9iaiAkKExJ
TktGTEFHUykNCisNCitzdF9jbGllbnQ6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAt
YyBzdF9jbGllbnQuYw0KKwlsaW5rIC1vdXQ6c3RfY2xpZW50LmV4ZSBzdF9jbGllbnQub2JqIHBy
b2dyYW1zX2hlbHBlci5vYmogJChMSU5LRkxBR1MpDQorDQorY2xlYW46DQorCWRlbCAvRiBjbGll
bnQuZXhlDQorCWRlbCAvRiBjbGllbnQub2JqDQorCWRlbCAvRiBjbGllbnRfdXBjYWxsLmV4ZQ0K
KwlkZWwgL0YgY2xpZW50X3VwY2FsbC5vYmoNCisJZGVsIC9GIGRheXRpbWVfc2VydmVyLmV4ZQ0K
KwlkZWwgL0YgZGF5dGltZV9zZXJ2ZXIub2JqDQorCWRlbCAvRiBkYXl0aW1lX3NlcnZlcl91cGNh
bGwuZXhlDQorCWRlbCAvRiBkYXl0aW1lX3NlcnZlcl91cGNhbGwub2JqDQorCWRlbCAvRiBkaXNj
YXJkX3NlcnZlci5leGUNCisJZGVsIC9GIGRpc2NhcmRfc2VydmVyLm9iag0KKwlkZWwgL0YgZGlz
Y2FyZF9zZXJ2ZXJfdXBjYWxsLmV4ZQ0KKwlkZWwgL0YgZGlzY2FyZF9zZXJ2ZXJfdXBjYWxsLm9i
ag0KKwlkZWwgL0YgZWNob19zZXJ2ZXIuZXhlDQorCWRlbCAvRiBlY2hvX3NlcnZlci5vYmoNCisJ
ZGVsIC9GIGVjaG9fc2VydmVyX3VwY2FsbC5leGUNCisJZGVsIC9GIGVjaG9fc2VydmVyX3VwY2Fs
bC5vYmoNCisJZGVsIC9GIHRzY3RwLmV4ZQ0KKwlkZWwgL0YgdHNjdHAub2JqDQorCWRlbCAvRiBy
dGN3ZWIuZXhlDQorCWRlbCAvRiBydGN3ZWIub2JqDQorCWRlbCAvRiBla3JfY2xpZW50LmV4ZQ0K
KwlkZWwgL0YgZWtyX2NsaWVudC5vYmoNCisJZGVsIC9GIGVrcl9zZXJ2ZXIuZXhlDQorCWRlbCAv
RiBla3Jfc2VydmVyLm9iag0KKwlkZWwgL0YgZWtyX3BlZXIuZXhlDQorCWRlbCAvRiBla3JfcGVl
ci5vYmoNCisJZGVsIC9GIGVrcl9sb29wLmV4ZQ0KKwlkZWwgL0YgZWtyX2xvb3Aub2JqDQorCWRl
bCAvRiBla3JfbG9vcF91cGNhbGwuZXhlDQorCWRlbCAvRiBla3JfbG9vcF91cGNhbGwub2JqDQor
CWRlbCAvRiB0ZXN0X2xpYm1nbXQuZXhlDQorCWRlbCAvRiB0ZXN0X2xpYm1nbXQub2JqDQorCWRl
bCAvRiBodHRwX2NsaWVudC5leGUNCisJZGVsIC9GIGh0dHBfY2xpZW50Lm9iag0KKwlkZWwgL0Yg
aHR0cF9jbGllbnRfdXBjYWxsLmV4ZQ0KKwlkZWwgL0YgaHR0cF9jbGllbnRfdXBjYWxsLm9iag0K
KwlkZWwgL0Ygc3RfY2xpZW50LmV4ZQ0KKwlkZWwgL0Ygc3RfY2xpZW50Lm9iag0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3Byb2dyYW1zL2NoYXJnZW5fc2VydmVyX3VwY2FsbC5jIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
cHJvZ3JhbXMvY2hhcmdlbl9zZXJ2ZXJfdXBjYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTUyZDQwNTkxNDY0
MzQwM2I3YzllZGFlM2QzYmZlZWVhYTI3MDg0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3Byb2dyYW1zL2NoYXJnZW5fc2VydmVyX3VwY2FsbC5jCkBAIC0wLDAgKzEsMjIzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJv
amVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy
ZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBV
c2FnZTogY2hhcmdlbl9zZXJ2ZXJfdXBjYWxsIFtsb2NhbF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9l
bmNhcHNfcG9ydF0KKyAqLworCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIF9DUlRfU0VDVVJFX05P
X1dBUk5JTkdTCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisj
aW5jbHVkZSA8dXNyc2N0cC5oPgorI2luY2x1ZGUgInByb2dyYW1zX2hlbHBlci5oIgorCisjZGVm
aW5lIEJVRkZFUlNJWkUgMTAyNDAKKyNkZWZpbmUgUE9SVCAxOQorCitjaGFyIGJ1ZmZlcls5NV07
CitpbnQgZG9uZSA9IDA7CitpbnQgc2VuZF9kb25lID0gMDsKKworc3RhdGljIHZvaWQKK2luaXRC
dWZmZXIodm9pZCkgeworCWludCBpLCBqOworCWZvciAoaSA9IDMyLCBqID0gMDsgaSA8IDEyNjsg
aSsrLCBqKyspIHsKKwkJYnVmZmVyW2pdID0gaTsKKwl9Cit9CisKK3Vuc2lnbmVkIGludCBzaWdu
Q291bnRlciA9IDA7CitzdGF0aWMgdm9pZAoraGFuZGxlX3VwY2FsbChzdHJ1Y3Qgc29ja2V0ICp1
cGNhbGxfc29ja2V0LCB2b2lkICp1cGNhbGxfZGF0YSwgaW50IHVwY2FsbF9mbGFncyk7CisKK3N0
YXRpYyB2b2lkCitoYW5kbGVfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnVwY2FsbF9zb2NrZXQsIHZv
aWQgKnVwY2FsbF9kYXRhLCBpbnQgdXBjYWxsX2ZsYWdzKQoreworCXN0cnVjdCBzb2NrZXQgKmNv
bm5fc29jazsKKworCWlmICgoKGNvbm5fc29jayA9IHVzcnNjdHBfYWNjZXB0KHVwY2FsbF9zb2Nr
ZXQsIE5VTEwsIE5VTEwpKSA9PSBOVUxMKQorCSAgICAmJiAoZXJybm8gIT0gRUlOUFJPR1JFU1Mp
KSB7CisJCXBlcnJvcigidXNyc2N0cF9hY2NlcHQiKTsKKwkJcmV0dXJuOworCX0KKwlkb25lID0g
MDsKKwlwcmludGYoImNvbm5lY3Rpb24gYWNjZXB0ZWQgZnJvbSBzb2NrZXQgJXBcbiIsICh2b2lk
ICopY29ubl9zb2NrKTsKKwl1c3JzY3RwX3NldF91cGNhbGwoY29ubl9zb2NrLCBoYW5kbGVfdXBj
YWxsLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV91cGNhbGwoc3RydWN0IHNvY2tl
dCAqdXBjYWxsX3NvY2tldCwgdm9pZCAqdXBjYWxsX2RhdGEsIGludCB1cGNhbGxfZmxhZ3MpCit7
CisJaW50IGV2ZW50cyA9IHVzcnNjdHBfZ2V0X2V2ZW50cyh1cGNhbGxfc29ja2V0KTsKKworCWlm
IChldmVudHMgJiBTQ1RQX0VWRU5UX1JFQUQgJiYgIXNlbmRfZG9uZSkgeworCQljaGFyICpidWY7
CisJCXN0cnVjdCBzY3RwX3JlY3Z2X3JuIHJuOworCQlzc2l6ZV90IG47CisJCXN0cnVjdCBzb2Nr
YWRkcl9zdG9yYWdlIGFkZHI7CisJCWJ1ZiA9IG1hbGxvYyhCVUZGRVJTSVpFKTsKKwkJaW50IHJl
Y3ZfZmxhZ3MgPSAwOworCQlzb2NrbGVuX3QgbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0
IHNvY2thZGRyX3N0b3JhZ2UpOworCQl1bnNpZ25lZCBpbnQgaW5mb3R5cGUgPSAwOworCQlzb2Nr
bGVuX3QgaW5mb2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2dl9ybik7CisJCW1lbXNldCgm
cm4sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2dl9ybikpOworCisJCW4gPSB1c3JzY3RwX3Jl
Y3Z2KHVwY2FsbF9zb2NrZXQsIGJ1ZiwgQlVGRkVSU0laRSwgKHN0cnVjdCBzb2NrYWRkciAqKSAm
YWRkciwgJmxlbiwgKHZvaWQgKikmcm4sCisJCQkJICZpbmZvbGVuLCAmaW5mb3R5cGUsICZyZWN2
X2ZsYWdzKTsKKwkJaWYgKG4gPCAwKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfcmVjdnYiKTsKKwkJ
CWRvbmUgPSAxOworCQkJdXNyc2N0cF9jbG9zZSh1cGNhbGxfc29ja2V0KTsKKwkJCXByaW50Zigi
Y2xpZW50IHNvY2tldCAlcCBjbG9zZWRcbiIsICh2b2lkICopdXBjYWxsX3NvY2tldCk7CisJCQl1
cGNhbGxfc29ja2V0ID0gTlVMTDsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAobiA9PSAwKSB7CisJ
CQlkb25lID0gMTsKKwkJCXVzcnNjdHBfY2xvc2UodXBjYWxsX3NvY2tldCk7CisJCQlwcmludGYo
ImNsaWVudCBzb2NrZXQgJXAgY2xvc2VkXG4iLCAodm9pZCAqKXVwY2FsbF9zb2NrZXQpOworCQkJ
dXBjYWxsX3NvY2tldCA9IE5VTEw7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKG4gPiAwKSB7CisJ
CQlpZiAocmVjdl9mbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJCQlwcmludGYoIk5vdGlm
aWNhdGlvbiBvZiBsZW5ndGggJWQgcmVjZWl2ZWQuXG4iLCAoaW50KW4pOworCQkJfSBlbHNlIHsK
KwkJCQlwcmludGYoImRhdGEgb2Ygc2l6ZSAlZCByZWNlaXZlZFxuIiwgKGludCluKTsKKwkJCX0K
KwkJfQorCQlmcmVlKGJ1Zik7CisJfQorCisJaWYgKChldmVudHMgJiBTQ1RQX0VWRU5UX1dSSVRF
KSAmJiAhZG9uZSkgeworCQlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZF9pbmZvOworCQlzbmRfaW5m
by5zbmRfc2lkID0gMDsKKwkJc25kX2luZm8uc25kX2ZsYWdzID0gMDsKKwkJc25kX2luZm8uc25k
X3BwaWQgPSAwOworCQlzbmRfaW5mby5zbmRfY29udGV4dCA9IDA7CisJCXNuZF9pbmZvLnNuZF9h
c3NvY19pZCA9IDA7CisJCWlmICh1c3JzY3RwX3NlbmR2KHVwY2FsbF9zb2NrZXQsIGJ1ZmZlciwg
c3RybGVuKGJ1ZmZlciksIE5VTEwsIDAsICZzbmRfaW5mbywgKHNvY2tsZW5fdClzaXplb2Yoc3Ry
dWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCQlpZiAo
ZXJybm8gIT0gRUFHQUlOICYmIGVycm5vICE9IEVXT1VMREJMT0NLKSB7CisJCQkJc2VuZF9kb25l
ID0gMTsKKwkJCQl1c3JzY3RwX2Nsb3NlKHVwY2FsbF9zb2NrZXQpOworCQkJCXByaW50ZigiY2xp
ZW50IHNvY2tldCAlcCBjbG9zZWRcbiIsICh2b2lkICopdXBjYWxsX3NvY2tldCk7CisJCQkJcmV0
dXJuOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuOworfQorCitpbnQKK21haW4oaW50IGFyZ2Ms
IGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpsaXN0ZW5pbmdfc29ja2V0OworCXN0
cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKwlzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBzOwor
CXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGF2OworCWNvbnN0IGludCBvbiA9IDE7CisKKwlpZiAo
YXJnYyA+IDEpIHsKKwkJdXNyc2N0cF9pbml0KGF0b2koYXJndlsxXSksIE5VTEwsIGRlYnVnX3By
aW50Zl9zdGFjayk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9pbml0KDk4OTksIE5VTEwsIGRlYnVn
X3ByaW50Zl9zdGFjayk7CisJfQorI2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOworI2VuZGlmCisJdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX25vX2Nz
dW1fb25fbG9vcGJhY2soMCk7CisKKwlpZiAoKGxpc3RlbmluZ19zb2NrZXQgPSB1c3JzY3RwX3Nv
Y2tldChBRl9JTkVUNiwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgTlVMTCwgTlVMTCwgMCwg
TlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOworCX0KKwl1c3Jz
Y3RwX3NldF9ub25fYmxvY2tpbmcobGlzdGVuaW5nX3NvY2tldCwgMSk7CisJaWYgKHVzcnNjdHBf
c2V0c29ja29wdChsaXN0ZW5pbmdfc29ja2V0LCBJUFBST1RPX1NDVFAsIFNDVFBfSV9XQU5UX01B
UFBFRF9WNF9BRERSLCAoY29uc3Qgdm9pZCopJm9uLCAoc29ja2xlbl90KXNpemVvZihpbnQpKSA8
IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0
X0FERFIiKTsKKwl9CisJbWVtc2V0KCZhdiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlKSk7CisJYXYuYXNzb2NfaWQgPSBTQ1RQX0FMTF9BU1NPQzsKKwlhdi5hc3NvY192YWx1ZSA9
IDQ3OworCisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChsaXN0ZW5pbmdfc29ja2V0LCBJUFBST1RP
X1NDVFAsIFNDVFBfQ09OVEVYVCwgKGNvbnN0IHZvaWQqKSZhdiwgKHNvY2tsZW5fdClzaXplb2Yo
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNv
Y2tvcHQgU0NUUF9DT05URVhUIik7CisJfQorCWlmICh1c3JzY3RwX3NldHNvY2tvcHQobGlzdGVu
aW5nX3NvY2tldCwgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFQ1ZSQ1ZJTkZPLCAmb24sIHNpemVvZihp
bnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9SRUNWUkNWSU5G
TyIpOworCX0KKwlpZiAoYXJnYyA+IDIpIHsKKwkJbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVvZihz
dHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9
IEFGX0lORVQ2OworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwkJ
aWYgKHVzcnNjdHBfc2V0c29ja29wdChsaXN0ZW5pbmdfc29ja2V0LCBJUFBST1RPX1NDVFAsIFND
VFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVu
X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJ1c3Jz
Y3RwX3NldHNvY2tvcHQgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUIik7CisJCX0KKwl9CisK
Kwlpbml0QnVmZmVyKCk7CisKKwltZW1zZXQoKHZvaWQgKikmYWRkciwgMCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpKTsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJYWRkci5zaW42X2xlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCWFkZHIuc2luNl9mYW1pbHkg
PSBBRl9JTkVUNjsKKwlhZGRyLnNpbjZfcG9ydCA9IGh0b25zKFBPUlQpOworCWFkZHIuc2luNl9h
ZGRyID0gaW42YWRkcl9hbnk7CisJaWYgKHVzcnNjdHBfYmluZChsaXN0ZW5pbmdfc29ja2V0LCAo
c3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAw
KSB7CisJCXBlcnJvcigidXNyc2N0cF9iaW5kIik7CisJfQorCWlmICh1c3JzY3RwX2xpc3Rlbihs
aXN0ZW5pbmdfc29ja2V0LCAxKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2xpc3RlbiIpOwor
CX0KKwl1c3JzY3RwX3NldF91cGNhbGwobGlzdGVuaW5nX3NvY2tldCwgaGFuZGxlX2FjY2VwdCwg
TlVMTCk7CisKKwl3aGlsZSAoMSkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcCgxKjEwMDApOwor
I2Vsc2UKKwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3Byb2dyYW1zL2NsaWVudC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvY2xpZW50
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGExNWE3YmU4MmQzZjQxODc1NWVjNTdhNDU1NDdiMDM0NmI1MmUxYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2NsaWVudC5jCkBAIC0wLDAgKzEs
Mjk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTWljaGFlbCBUdWV4ZW4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFt
ZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJP
SkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICog
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAq
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICov
CisKKy8qCisgKiBVc2FnZTogY2xpZW50IHJlbW90ZV9hZGRyIHJlbW90ZV9wb3J0IFtsb2NhbF9w
b3J0XSBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdCisgKi8KKworI2lm
ZGVmIF9XSU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8dW5pc3RkLmg+
CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVk
ZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBh
L2luZXQuaD4KKyNlbHNlCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHVzcnNj
dHAuaD4KKyNpbmNsdWRlICJwcm9ncmFtc19oZWxwZXIuaCIKKworaW50IGRvbmUgPSAwOworCisj
aWZkZWYgX1dJTjMyCit0eXBlZGVmIGNoYXIqIGNhZGRyX3Q7CisjZW5kaWYKKworCisKK3N0YXRp
YyBpbnQKK3JlY2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3Rv
cmUgYWRkciwgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBz
Y3RwX3JjdmluZm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQoreworCWlmIChkYXRh
ID09IE5VTEwpIHsKKwkJZG9uZSA9IDE7CisJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJfSBlbHNl
IHsKKwkJaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikgeworCQkJaGFuZGxlX25vdGlmaWNh
dGlvbigodW5pb24gc2N0cF9ub3RpZmljYXRpb24gKilkYXRhLCBkYXRhbGVuKTsKKwkJfSBlbHNl
IHsKKyNpZmRlZiBfV0lOMzIKKwkJCV93cml0ZShfZmlsZW5vKHN0ZG91dCksIGRhdGEsICh1bnNp
Z25lZCBpbnQpZGF0YWxlbik7CisjZWxzZQorCQkJaWYgKHdyaXRlKGZpbGVubyhzdGRvdXQpLCBk
YXRhLCBkYXRhbGVuKSA8IDApIHsKKwkJCQlwZXJyb3IoIndyaXRlIik7CisJCQl9CisjZW5kaWYK
KwkJfQorCQlmcmVlKGRhdGEpOworCX0KKwlyZXR1cm4gKDEpOworfQorCitpbnQKK21haW4oaW50
IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBz
b2NrYWRkciAqYWRkciwgKmFkZHJzOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyNDsKKwlzdHJ1
Y3Qgc29ja2FkZHJfaW42IGFkZHI2OworCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyBlbmNhcHM7CisJ
c3RydWN0IHNjdHBzdGF0IHN0YXQ7CisJc3RydWN0IHNjdHBfZXZlbnQgZXZlbnQ7CisJdWludDE2
X3QgZXZlbnRfdHlwZXNbXSA9IHtTQ1RQX0FTU09DX0NIQU5HRSwKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNDVFBfUEVFUl9BRERSX0NIQU5HRSwKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNDVFBfU0VORF9GQUlMRURfRVZFTlR9OworCWNoYXIgYnVmZmVyWzgwXTsKKwl1bnNpZ25l
ZCBpbnQgaTsKKwlpbnQgbjsKKworCWlmIChhcmdjIDwgMykgeworCQlwcmludGYoIiVzIiwgIlVz
YWdlOiBjbGllbnQgcmVtb3RlX2FkZHIgcmVtb3RlX3BvcnQgbG9jYWxfcG9ydCBsb2NhbF9lbmNh
cHNfcG9ydCByZW1vdGVfZW5jYXBzX3BvcnRcbiIpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYg
KGFyZ2MgPiA0KSB7CisJCXVzcnNjdHBfaW5pdChhdG9pKGFyZ3ZbNF0pLCBOVUxMLCBkZWJ1Z19w
cmludGZfc3RhY2spOworCX0gZWxzZSB7CisJCXVzcnNjdHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1
Z19wcmludGZfc3RhY2spOworCX0KKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsKKyNlbmRpZgorCXVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ub19j
c3VtX29uX2xvb3BiYWNrKDApOworCisJaWYgKChzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5F
VDYsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIHJlY2VpdmVfY2IsIE5VTEwsIDAsIE5VTEwp
KSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwl9CisJbWVtc2V0KCZl
dmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisJZXZlbnQuc2VfYXNzb2NfaWQgPSBTQ1RQX0FMTF9B
U1NPQzsKKwlldmVudC5zZV9vbiA9IDE7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihldmVudF90
eXBlcykvc2l6ZW9mKHVpbnQxNl90KTsgaSsrKSB7CisJCWV2ZW50LnNlX3R5cGUgPSBldmVudF90
eXBlc1tpXTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFND
VFBfRVZFTlQsICZldmVudCwgc2l6ZW9mKGV2ZW50KSkgPCAwKSB7CisJCQlwZXJyb3IoInNldHNv
Y2tvcHQgU0NUUF9FVkVOVCIpOworCQl9CisJfQorCWlmIChhcmdjID4gMykgeworCQltZW1zZXQo
KHZvaWQgKikmYWRkcjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYg
SEFWRV9TSU42X0xFTgorCQlhZGRyNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW42KTsKKyNlbmRpZgorCQlhZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCQlhZGRyNi5z
aW42X3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbM10pKTsKKwkJYWRkcjYuc2luNl9hZGRyID0gaW42
YWRkcl9hbnk7CisJCWlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZh
ZGRyNiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDApIHsKKwkJCXBlcnJvcigiYmlu
ZCIpOworCQl9CisJfQorCWlmIChhcmdjID4gNSkgeworCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6
ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpOworCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFt
aWx5ID0gQUZfSU5FVDY7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJndls1XSkp
OworCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1P
VEVfVURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCopJmVuY2FwcywgKHNvY2tsZW5fdClzaXpl
b2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7CisJCQlwZXJyb3IoInNldHNvY2tvcHQi
KTsKKwkJfQorCX0KKwltZW1zZXQoKHZvaWQgKikmYWRkcjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKwltZW1zZXQoKHZvaWQgKikmYWRkcjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KSk7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJYWRkcjQuc2luX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisjaWZkZWYgSEFWRV9TSU42X0xFTgorCWFk
ZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJYWRk
cjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJYWRkcjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsK
KwlhZGRyNC5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCWFkZHI2LnNpbjZfcG9y
dCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCWlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGFyZ3Zb
MV0sICZhZGRyNi5zaW42X2FkZHIpID09IDEpIHsKKwkJaWYgKHVzcnNjdHBfY29ubmVjdChzb2Nr
LCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI2LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikp
IDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKKwkJfQorCX0gZWxzZSBpZiAo
aW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbMV0sICZhZGRyNC5zaW5fYWRkcikgPT0gMSkgeworCQlp
ZiAodXNyc2N0cF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjQsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJCXBlcnJvcigidXNyc2N0cF9jb25uZWN0
Iik7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGYoIklsbGVnYWwgZGVzdGluYXRpb24gYWRkcmVz
cy5cbiIpOworCX0KKwlpZiAoKG4gPSB1c3JzY3RwX2dldGxhZGRycyhzb2NrLCAwLCAmYWRkcnMp
KSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2dldGxhZGRycyIpOworCX0gZWxzZSB7CisJCWFk
ZHIgPSBhZGRyczsKKwkJcHJpbnRmKCJMb2NhbCBhZGRyZXNzZXM6ICIpOworCQlmb3IgKGkgPSAw
OyBpIDwgKHVuc2lnbmVkIGludCluOyBpKyspIHsKKwkJCWlmIChpID4gMCkgeworCQkJCXByaW50
ZigiJXMiLCAiLCAiKTsKKwkJCX0KKwkJCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisJCQlj
YXNlIEFGX0lORVQ6CisJCQl7CisJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJCQkJY2hh
ciBidWZbSU5FVF9BRERSU1RSTEVOXTsKKwkJCQljb25zdCBjaGFyICpuYW1lOworCisJCQkJc2lu
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9J
TkVULCAmc2luLT5zaW5fYWRkciwgYnVmLCBJTkVUX0FERFJTVFJMRU4pOworCQkJCXByaW50Zigi
JXMiLCBuYW1lKTsKKyNpZm5kZWYgSEFWRV9TQV9MRU4KKwkJCQlhZGRyID0gKHN0cnVjdCBzb2Nr
YWRkciAqKSgoY2FkZHJfdClhZGRyICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworI2Vu
ZGlmCisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIEFGX0lORVQ2OgorCQkJeworCQkJCXN0cnVj
dCBzb2NrYWRkcl9pbjYgKnNpbjY7CisJCQkJY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07CisJ
CQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAq
KWFkZHI7CisJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjYtPnNpbjZfYWRkciwg
YnVmLCBJTkVUNl9BRERSU1RSTEVOKTsKKwkJCQlwcmludGYoIiVzIiwgbmFtZSk7CisjaWZuZGVm
IEhBVkVfU0FfTEVOCisJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRk
ciArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjZW5kaWYKKwkJCQlicmVhazsKKwkJ
CX0KKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJ
CWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBhZGRyLT5zYV9sZW4p
OworI2VuZGlmCisJCX0KKwkJcHJpbnRmKCIuXG4iKTsKKwkJdXNyc2N0cF9mcmVlbGFkZHJzKGFk
ZHJzKTsKKwl9CisJaWYgKChuID0gdXNyc2N0cF9nZXRwYWRkcnMoc29jaywgMCwgJmFkZHJzKSkg
PCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRwYWRkcnMiKTsKKwl9IGVsc2UgeworCQlhZGRy
ID0gYWRkcnM7CisJCXByaW50ZigiUGVlciBhZGRyZXNzZXM6ICIpOworCQlmb3IgKGkgPSAwOyBp
IDwgKHVuc2lnbmVkIGludCluOyBpKyspIHsKKwkJCWlmIChpID4gMCkgeworCQkJCXByaW50Zigi
JXMiLCAiLCAiKTsKKwkJCX0KKwkJCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisJCQljYXNl
IEFGX0lORVQ6CisJCQl7CisJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJCQkJY2hhciBi
dWZbSU5FVF9BRERSU1RSTEVOXTsKKwkJCQljb25zdCBjaGFyICpuYW1lOworCisJCQkJc2luID0g
KHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVU
LCAmc2luLT5zaW5fYWRkciwgYnVmLCBJTkVUX0FERFJTVFJMRU4pOworCQkJCXByaW50ZigiJXMi
LCBuYW1lKTsKKyNpZm5kZWYgSEFWRV9TQV9MRU4KKwkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRk
ciAqKSgoY2FkZHJfdClhZGRyICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworI2VuZGlm
CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIEFGX0lORVQ2OgorCQkJeworCQkJCXN0cnVjdCBz
b2NrYWRkcl9pbjYgKnNpbjY7CisJCQkJY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07CisJCQkJ
Y29uc3QgY2hhciAqbmFtZTsKKworCQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFk
ZHI7CisJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjYtPnNpbjZfYWRkciwgYnVm
LCBJTkVUNl9BRERSU1RSTEVOKTsKKwkJCQlwcmludGYoIiVzIiwgbmFtZSk7CisjaWZuZGVmIEhB
VkVfU0FfTEVOCisJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciAr
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjZW5kaWYKKwkJCQlicmVhazsKKwkJCX0K
KwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWFk
ZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBhZGRyLT5zYV9sZW4pOwor
I2VuZGlmCisJCX0KKwkJcHJpbnRmKCIuXG4iKTsKKwkJdXNyc2N0cF9mcmVlcGFkZHJzKGFkZHJz
KTsKKwl9CisJd2hpbGUgKChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikgIT0g
TlVMTCkgJiYgIWRvbmUpIHsKKwkJdXNyc2N0cF9zZW5kdihzb2NrLCBidWZmZXIsIHN0cmxlbihi
dWZmZXIpLCBOVUxMLCAwLCBOVUxMLCAwLCBTQ1RQX1NFTkRWX05PSU5GTywgMCk7CisJfQorCWlm
ICghZG9uZSkgeworCQlpZiAodXNyc2N0cF9zaHV0ZG93bihzb2NrLCBTSFVUX1dSKSA8IDApIHsK
KwkJCXBlcnJvcigidXNyc2N0cF9zaHV0ZG93biIpOworCQl9CisJfQorCXdoaWxlICghZG9uZSkg
eworI2lmZGVmIF9XSU4zMgorCQlTbGVlcCgxICogMTAwMCk7CisjZWxzZQorCQlzbGVlcCgxKTsK
KyNlbmRpZgorCX0KKwl1c3JzY3RwX2dldF9zdGF0KCZzdGF0KTsKKwlwcmludGYoIk51bWJlciBv
ZiBwYWNrZXRzIChzZW50L3JlY2VpdmVkKTogKCV1LyV1KS5cbiIsCisJICAgICAgIHN0YXQuc2N0
cHNfb3V0cGFja2V0cywgc3RhdC5zY3Rwc19pbnBhY2tldHMpOworCXdoaWxlICh1c3JzY3RwX2Zp
bmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMSAqIDEwMDApOworI2Vsc2UK
KwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9CisJcmV0dXJuKDApOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvcHJvZ3JhbXMvY2xpZW50X3VwY2FsbC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvY2xpZW50
X3VwY2FsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyOWQ4ZmEyMjQzNzM3YzMzYTk1M2U2ZTA3MmU5YzQzMmUx
ZmFhMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9jbGllbnRfdXBjYWxs
LmMKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNo
YWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5U
IFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD
SCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFVzYWdlOiBjbGllbnRfdXBjYWxsIHJlbW90ZV9hZGRy
IHJlbW90ZV9wb3J0IFtsb2NhbF9wb3J0XSBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5j
YXBzX3BvcnRdCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpZiAhZGVmaW5l
ZChfV0lOMzIpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNl
bmRpZiAvKiAhZGVmaW5lZChfV0lOMzIpICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwor
I2lmICFkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2Vsc2UgLyogIWRlZmluZWQo
X1dJTjMyKSAqLworI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHVzcnNjdHAu
aD4KKyNpbmNsdWRlICJwcm9ncmFtc19oZWxwZXIuaCIKKyNpbmNsdWRlIDxmY250bC5oPgorCisj
ZGVmaW5lIEJVRkZFUlNJWkUgICAgICAgICAgICAgICAgICgxPDwxNikKKworaW50IGRvbmUgPSAw
LCBpbnB1dF9kb25lID0gMCwgY29ubmVjdGVkID0gMDsKKworI2lmZGVmIF9XSU4zMgordHlwZWRl
ZiBjaGFyKiBjYWRkcl90OworI2VuZGlmCisKK2ludCBpbnB1dEF2YWlsYWJsZSh2b2lkKQorewor
CXN0cnVjdCB0aW1ldmFsIHR2OworCWZkX3NldCBmZHM7CisJdHYudHZfc2VjID0gMDsKKwl0di50
dl91c2VjID0gMDsKKwlGRF9aRVJPKCZmZHMpOworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVm
aW5lZChfX01JTkdXMzJfXykKKwlGRF9TRVQoKFNPQ0tFVClfZmlsZW5vKHN0ZGluKSwgJmZkcyk7
CisgIAlzZWxlY3QoX2ZpbGVubyhzdGRpbikgKyAxLCAmZmRzLCBOVUxMLCBOVUxMLCAmdHYpOwor
I2Vsc2UKKwlGRF9TRVQoU1RESU5fRklMRU5PLCAmZmRzKTsKKwlzZWxlY3QoU1RESU5fRklMRU5P
KzEsICZmZHMsIE5VTEwsIE5VTEwsICZ0dik7CisjZW5kaWYKKyAgcmV0dXJuIChGRF9JU1NFVCgw
LCAmZmRzKSk7Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfdXBjYWxsKHN0cnVjdCBzb2NrZXQg
KnNvY2ssIHZvaWQgKmFyZywgaW50IGZsZ3MpCit7CisJaW50IGV2ZW50cyA9IHVzcnNjdHBfZ2V0
X2V2ZW50cyhzb2NrKTsKKworCWlmIChldmVudHMgJiBTQ1RQX0VWRU5UX1dSSVRFICYmICFkb25l
ICYmICFjb25uZWN0ZWQpIHsKKwkJY29ubmVjdGVkID0gMTsKKwkJcHJpbnRmKCJzb2NrZXQgY29u
bmVjdGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChldmVudHMgJiBTQ1RQX0VWRU5U
X1JFQUQgJiYgIWRvbmUgJiYgY29ubmVjdGVkKSB7CisJCXN0cnVjdCBzY3RwX3JlY3Z2X3JuIHJu
OworCQlzc2l6ZV90IG47CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCQljaGFyICpidWYg
PSBjYWxsb2MoMSwgQlVGRkVSU0laRSk7CisJCWludCBmbGFncyA9IDA7CisJCXNvY2tsZW5fdCBs
ZW4gPSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCQl1bnNpZ25lZCBp
bnQgaW5mb3R5cGUgPSAwOworCQlzb2NrbGVuX3QgaW5mb2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9yZWN2dl9ybik7CisJCW1lbXNldCgmcm4sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2dl9y
bikpOworCQluID0gdXNyc2N0cF9yZWN2dihzb2NrLCBidWYsIEJVRkZFUlNJWkUsIChzdHJ1Y3Qg
c29ja2FkZHIgKikgJmFkZHIsICZsZW4sICh2b2lkICopJnJuLAorCQkJCQkgJmluZm9sZW4sICZp
bmZvdHlwZSwgJmZsYWdzKTsKKworCQlpZiAobiA+IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJCV93
cml0ZShfZmlsZW5vKHN0ZG91dCksIGJ1ZiwgKHVuc2lnbmVkIGludCluKTsKKyNlbHNlCisJCQlp
ZiAod3JpdGUoZmlsZW5vKHN0ZG91dCksIGJ1ZiwgbikgPCAwKSB7CisJCQkJcGVycm9yKCJ3cml0
ZSIpOworCQkJfQorI2VuZGlmCisJCX0gZWxzZSBpZiAobiA9PSAwKSB7CisJCQlkb25lID0gMTsK
KwkJCWlucHV0X2RvbmUgPSAxOworCQkJZnJlZShidWYpOworCQkJYnJlYWs7CisJCX0gZWxzZSB7
CisJCQlwZXJyb3IoIlxudXNyc2N0cF9yZWN2diIpOworCQkJZnJlZSAoYnVmKTsKKwkJCWJyZWFr
OworCQl9CisJCWZyZWUoYnVmKTsKKwkJZXZlbnRzID0gdXNyc2N0cF9nZXRfZXZlbnRzKHNvY2sp
OworCX0KKwlyZXR1cm47Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQor
eworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IHNvY2thZGRyICphZGRyLCAqYWRkcnM7
CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI0OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjY7
CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlzdHJ1Y3Qgc2N0cHN0YXQgc3RhdDsK
KwljaGFyIGJ1ZmZlclsyMDBdOworCWludCBpLCBuOworCisJaWYgKGFyZ2MgPiA0KSB7CisJCXVz
cnNjdHBfaW5pdChhdG9pKGFyZ3ZbNF0pLCBOVUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0g
ZWxzZSB7CisJCXVzcnNjdHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOwor
CX0KKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24o
U0NUUF9ERUJVR19OT05FKTsKKyNlbmRpZgorCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNr
aG9sZSgyKTsKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKDAp
OworCisJaWYgKChzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBJ
UFBST1RPX1NDVFAsIE5VTEwsIE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigi
dXNyc2N0cF9zb2NrZXQiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwl1c3JzY3RwX3NldF9ub25fYmxv
Y2tpbmcoc29jaywgMSk7CisKKwlpZiAoYXJnYyA+IDMpIHsKKwkJbWVtc2V0KCh2b2lkICopJmFk
ZHI2LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lONl9M
RU4KKwkJYWRkcjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5k
aWYKKwkJYWRkcjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwkJYWRkcjYuc2luNl9wb3J0ID0g
aHRvbnMoYXRvaShhcmd2WzNdKSk7CisJCWFkZHI2LnNpbjZfYWRkciA9IGluNmFkZHJfYW55Owor
CQlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjYsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7CisJCQlwZXJyb3IoImJpbmQiKTsKKwkJCXVz
cnNjdHBfY2xvc2Uoc29jayk7CisJCQlleGl0KDEpOworCQl9CisJfQorCWlmIChhcmdjID4gNSkg
eworCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpOwor
CQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZfSU5FVDY7CisJCWVuY2Fwcy5zdWVf
cG9ydCA9IGh0b25zKGF0b2koYXJndls1XSkpOworCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNv
Y2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9p
ZCopJmVuY2FwcywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAw
KSB7CisJCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKKwkJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJ
CQlleGl0KDEpOworCQl9CisJfQorCisJbWVtc2V0KCh2b2lkICopJmFkZHI0LCAwLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSk7CisJbWVtc2V0KCh2b2lkICopJmFkZHI2LCAwLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCWFkZHI0LnNpbl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfU0lO
Nl9MRU4KKwlhZGRyNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNl
bmRpZgorCWFkZHI0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWFkZHI2LnNpbjZfZmFtaWx5ID0g
QUZfSU5FVDY7CisJYWRkcjQuc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwlhZGRy
Ni5zaW42X3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwlpZiAoaW5ldF9wdG9uKEFGX0lO
RVQ2LCBhcmd2WzFdLCAmYWRkcjYuc2luNl9hZGRyKSA9PSAxKSB7CisJCWlmICh1c3JzY3RwX2Nv
bm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyNiwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpKSA8IDApIHsKKwkJCXBlcnJvcigidXNyc2N0cF9jb25uZWN0Iik7CisJCX0KKwl9
IGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmYWRkcjQuc2luX2FkZHIpID09
IDEpIHsKKwkJaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFk
ZHI0LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNj
dHBfY29ubmVjdCIpOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJJbGxlZ2FsIGRlc3RpbmF0
aW9uIGFkZHJlc3MuXG4iKTsKKwl9CisKKwl1c3JzY3RwX3NldF91cGNhbGwoc29jaywgaGFuZGxl
X3VwY2FsbCwgTlVMTCk7CisJaWYgKChuID0gdXNyc2N0cF9nZXRsYWRkcnMoc29jaywgMCwgJmFk
ZHJzKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRsYWRkcnMiKTsKKwl9IGVsc2Ugewor
CQlhZGRyID0gYWRkcnM7CisJCXByaW50ZigiTG9jYWwgYWRkcmVzc2VzOiAiKTsKKwkJZm9yIChp
ID0gMDsgaSA8IG47IGkrKykgeworCQkJaWYgKGkgPiAwKSB7CisJCQkJcHJpbnRmKCIlcyIsICIs
ICIpOworCQkJfQorCQkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKwkJCWNhc2UgQUZfSU5F
VDoKKwkJCXsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwkJCQljaGFyIGJ1ZltJTkVU
X0FERFJTVFJMRU5dOworCQkJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJCQlzaW4gPSAoc3RydWN0
IHNvY2thZGRyX2luICopYWRkcjsKKwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQsICZzaW4t
PnNpbl9hZGRyLCBidWYsIElORVRfQUREUlNUUkxFTik7CisJCQkJcHJpbnRmKCIlcyIsIG5hbWUp
OworI2lmbmRlZiBIQVZFX1NBX0xFTgorCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChj
YWRkcl90KWFkZHIgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjZW5kaWYKKwkJCQli
cmVhazsKKwkJCX0KKwkJCWNhc2UgQUZfSU5FVDY6CisJCQl7CisJCQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNjsKKwkJCQljaGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsKKwkJCQljb25zdCBj
aGFyICpuYW1lOworCisJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJ
CQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBidWYsIElORVQ2
X0FERFJTVFJMRU4pOworCQkJCXByaW50ZigiJXMiLCBuYW1lKTsKKyNpZm5kZWYgSEFWRV9TQV9M
RU4KKwkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNlbmRpZgorCQkJCWJyZWFrOworCQkJfQorCQkJZGVm
YXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJYWRkciA9IChz
dHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIGFkZHItPnNhX2xlbik7CisjZW5kaWYK
KwkJfQorCQlwcmludGYoIi5cbiIpOworCQl1c3JzY3RwX2ZyZWVsYWRkcnMoYWRkcnMpOworCX0K
KwlpZiAoKG4gPSB1c3JzY3RwX2dldHBhZGRycyhzb2NrLCAwLCAmYWRkcnMpKSA8IDApIHsKKwkJ
cGVycm9yKCJ1c3JzY3RwX2dldHBhZGRycyIpOworCX0gZWxzZSB7CisJCWFkZHIgPSBhZGRyczsK
KwkJcHJpbnRmKCJQZWVyIGFkZHJlc3NlczogIik7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKysp
IHsKKwkJCWlmIChpID4gMCkgeworCQkJCXByaW50ZigiJXMiLCAiLCAiKTsKKwkJCX0KKwkJCXN3
aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisJCQljYXNlIEFGX0lORVQ6CisJCQl7CisJCQkJc3Ry
dWN0IHNvY2thZGRyX2luICpzaW47CisJCQkJY2hhciBidWZbSU5FVF9BRERSU1RSTEVOXTsKKwkJ
CQljb25zdCBjaGFyICpuYW1lOworCisJCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFk
ZHI7CisJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYnVmLCBJ
TkVUX0FERFJTVFJMRU4pOworCQkJCXByaW50ZigiJXMiLCBuYW1lKTsKKyNpZm5kZWYgSEFWRV9T
QV9MRU4KKwkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworI2VuZGlmCisJCQkJYnJlYWs7CisJCQl9CisJCQlj
YXNlIEFGX0lORVQ2OgorCQkJeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisJCQkJ
Y2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07CisJCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJ
CXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCQkJbmFtZSA9IGluZXRfbnRv
cChBRl9JTkVUNiwgJnNpbjYtPnNpbjZfYWRkciwgYnVmLCBJTkVUNl9BRERSU1RSTEVOKTsKKwkJ
CQlwcmludGYoIiVzIiwgbmFtZSk7CisjaWZuZGVmIEhBVkVfU0FfTEVOCisJCQkJYWRkciA9IChz
dHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW42KSk7CisjZW5kaWYKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7
CisJCQl9CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICop
KChjYWRkcl90KWFkZHIgKyBhZGRyLT5zYV9sZW4pOworI2VuZGlmCisJCX0KKwkJcHJpbnRmKCIu
XG4iKTsKKwkJdXNyc2N0cF9mcmVlcGFkZHJzKGFkZHJzKTsKKwl9CisJd2hpbGUgKCFkb25lICYm
ICFpbnB1dF9kb25lKSB7CisJCWlmIChpbnB1dEF2YWlsYWJsZSgpKSB7CisJCQlpZiAoZmdldHMo
YnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pICE9IE5VTEwpIHsKKwkJCQl1c3JzY3RwX3Nl
bmR2KHNvY2ssIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlciksIE5VTEwsIDAsIE5VTEwsIDAsIFNDVFBf
U0VORFZfTk9JTkZPLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHVzcnNjdHBfc2h1dGRvd24o
c29jaywgU0hVVF9XUikgPCAwKSB7CisJCQkJCXBlcnJvcigidXNyc2N0cF9zaHV0ZG93biIpOwor
CQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKyNpZmRlZiBfV0lOMzIKKwlTbGVlcCgx
MDAwKTsKKyNlbHNlCisJc2xlZXAoMSk7CisjZW5kaWYKKwl1c3JzY3RwX2Nsb3NlKHNvY2spOwor
CisJdXNyc2N0cF9nZXRfc3RhdCgmc3RhdCk7CisJcHJpbnRmKCJOdW1iZXIgb2YgcGFja2V0cyAo
c2VudC9yZWNlaXZlZCk6ICgldS8ldSkuXG4iLAorCSAgICAgICBzdGF0LnNjdHBzX291dHBhY2tl
dHMsIHN0YXQuc2N0cHNfaW5wYWNrZXRzKTsKKwl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAw
KSB7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJc2xlZXAoMSk7Cisj
ZW5kaWYKKwl9CisJcHJpbnRmKCJDbGllbnQgZmluaXNoZWRcbiIpOworCXJldHVybigwKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2RheXRpbWVfc2VydmVyLmMgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi9wcm9ncmFtcy9kYXl0aW1lX3NlcnZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzYjE1N2E1MDNmNTkxYmY1
NDYxMDM0NjJkNmJkMDJiMDU2ZjA2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9n
cmFtcy9kYXl0aW1lX3NlcnZlci5jCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTMgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBVc2FnZTogZGF5dGlt
ZV9zZXJ2ZXIgW2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2VuY2Fwc19wb3J0XQorICoKKyAq
IEV4YW1wbGUKKyAqIFNlcnZlcjogJCAuL2RheXRpbWVfc2VydmVyIDExMTExIDIyMjIyCisgKiBD
bGllbnQ6ICQgLi9jbGllbnQgMTI3LjAuMC4xIDEzIDAgMjIyMjIgMTExMTEKKyAqLworCisjaWZk
ZWYgX1dJTjMyCisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisjZW5kaWYKKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor
I2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHRp
bWUuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lz
L3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQu
aD4KKyNlbmRpZgorI2luY2x1ZGUgPHVzcnNjdHAuaD4KKyNpbmNsdWRlICJwcm9ncmFtc19oZWxw
ZXIuaCIKKworI2RlZmluZSBQT1JUIDEzCisjZGVmaW5lIERBWVRJTUVfUFBJRCA0MAorI2RlZmlu
ZSBTTEVFUCAxCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVj
dCBzb2NrZXQgKnNvY2ssICpjb25uX3NvY2s7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJ
c3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlzb2NrbGVuX3QgYWRkcl9sZW47CisJY2hh
ciBidWZmZXJbODBdOworCXRpbWVfdCBub3c7CisJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZv
OworCisJaWYgKGFyZ2MgPiAxKSB7CisJCXVzcnNjdHBfaW5pdChhdG9pKGFyZ3ZbMV0pLCBOVUxM
LCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0gZWxzZSB7CisJCXVzcnNjdHBfaW5pdCg5ODk5LCBO
VUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0KKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0
cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsKKyNlbmRpZgorCXVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKKwl1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKDApOworCisJaWYgKChzb2NrID0gdXNyc2N0cF9zb2Nr
ZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgTlVMTCwgTlVMTCwgMCwgTlVM
TCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOworCX0KKwlpZiAoYXJn
YyA+IDIpIHsKKwkJbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNh
cHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9IEFGX0lORVQ7CisJCWVuY2Fw
cy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCQlpZiAodXNyc2N0cF9zZXRzb2Nr
b3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAoY29u
c3Qgdm9pZCopJmVuY2FwcywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBz
KSkgPCAwKSB7CisJCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKKwkJfQorCX0KKwltZW1zZXQoKHZv
aWQgKikmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworI2lmZGVmIEhBVkVf
U0lOX0xFTgorCWFkZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2Vu
ZGlmCisJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlhZGRyLnNpbl9wb3J0ID0gaHRvbnMo
UE9SVCk7CisJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKwlpZiAo
dXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCX0KKwlp
ZiAodXNyc2N0cF9saXN0ZW4oc29jaywgMSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9saXN0
ZW4iKTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJYWRkcl9sZW4gPSAwOworCQlpZiAoKGNvbm5fc29j
ayA9IHVzcnNjdHBfYWNjZXB0KHNvY2ssIE5VTEwsICZhZGRyX2xlbikpID09IE5VTEwpIHsKKwkJ
CWNvbnRpbnVlOworCQl9CisJCXRpbWUoJm5vdyk7CisjaWZkZWYgX1dJTjMyCisJCWlmIChfc25w
cmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzIiwgY3RpbWUoJm5vdykpIDwgMCkgewor
I2Vsc2UKKwkJaWYgKHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlcyIsIGN0aW1l
KCZub3cpKSA8IDApIHsKKyNlbmRpZgorCQkJYnVmZmVyWzBdID0gJ1wwJzsKKwkJfQorCQlzbmRp
bmZvLnNuZF9zaWQgPSAwOworCQlzbmRpbmZvLnNuZF9mbGFncyA9IDA7CisJCXNuZGluZm8uc25k
X3BwaWQgPSBodG9ubChEQVlUSU1FX1BQSUQpOworCQlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsK
KwkJc25kaW5mby5zbmRfYXNzb2NfaWQgPSAwOworCQlpZiAodXNyc2N0cF9zZW5kdihjb25uX3Nv
Y2ssIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlciksIE5VTEwsIDAsICh2b2lkICopJnNuZGluZm8sCisJ
CSAgICAgICAgICAgICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8p
LCBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX3NlbmR2
Iik7CisJCX0KKwkJdXNyc2N0cF9jbG9zZShjb25uX3NvY2spOworCX0KKwlyZXR1cm4gKDApOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZGF5dGltZV9zZXJ2ZXJfdXBjYWxsLmMg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9wcm9ncmFtcy9kYXl0aW1lX3NlcnZlcl91cGNhbGwuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
ZDgzOTYzY2ZmMDI3ODhlNTE2ZWU0OTU2M2U3OTg5ZDk0YTA1NGM5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvcHJvZ3JhbXMvZGF5dGltZV9zZXJ2ZXJfdXBjYWxsLmMKQEAgLTAsMCArMSwx
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9K
RUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8K
KworLyoKKyAqIFVzYWdlOiBkYXl0aW1lX3NlcnZlcl91cGNhbGwgW2xvY2FsX2VuY2Fwc19wb3J0
XSBbcmVtb3RlX2VuY2Fwc19wb3J0XQorICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NS
VF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk
ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+Cisj
aW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmbmRlZiBfV0lOMzIK
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaW5jbHVkZSA8
dXNyc2N0cC5oPgorI2luY2x1ZGUgInByb2dyYW1zX2hlbHBlci5oIgorCisjZGVmaW5lIERBWVRJ
TUVfUFBJRCA0MAorI2RlZmluZSBQT1JUIDEzCisKK3N0YXRpYyB2b2lkCitoYW5kbGVfYWNjZXB0
KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHZvaWQgKmRhdGEsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qg
c29ja2V0ICpjb25uX3NvY2s7CisJY2hhciBidWZmZXJbODBdOworCXRpbWVfdCBub3c7CisJc29j
a2xlbl90IGFkZHJfbGVuID0gMDsKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87CisKKwlp
ZiAoKChjb25uX3NvY2sgPSB1c3JzY3RwX2FjY2VwdChzb2NrLCBOVUxMLCAmYWRkcl9sZW4pKSA9
PSBOVUxMKQorCSAgICAmJiAoZXJybm8gIT0gRUlOUFJPR1JFU1MpKSB7CisJCXBlcnJvcigidXNy
c2N0cF9hY2NlcHQiKTsKKwkJcmV0dXJuOworCX0KKwl0aW1lKCZub3cpOworI2lmZGVmIF9XSU4z
MgorCQlpZiAoX3NucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlcyIsIGN0aW1lKCZu
b3cpKSA8IDApIHsKKyNlbHNlCisJCWlmIChzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIp
LCAiJXMiLCBjdGltZSgmbm93KSkgPCAwKSB7CisjZW5kaWYKKwkJCWJ1ZmZlclswXSA9ICdcMCc7
CisJCX0KKwkJc25kaW5mby5zbmRfc2lkID0gMDsKKwkJc25kaW5mby5zbmRfZmxhZ3MgPSAwOwor
CQlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoREFZVElNRV9QUElEKTsKKwkJc25kaW5mby5zbmRf
Y29udGV4dCA9IDA7CisJCXNuZGluZm8uc25kX2Fzc29jX2lkID0gMDsKKwkJdXNyc2N0cF9zZW5k
dihjb25uX3NvY2ssIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlciksIE5VTEwsIDAsICh2b2lkICopJnNu
ZGluZm8sCisJCSAgICAgICAgICAgICAgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25k
aW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCk7CisJCXVzcnNjdHBfY2xvc2UoY29ubl9zb2Nr
KTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHNv
Y2tldCAqc29jazsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKwlzdHJ1Y3Qgc2N0cF91ZHBl
bmNhcHMgZW5jYXBzOworCisJaWYgKGFyZ2MgPiAxKSB7CisJCXVzcnNjdHBfaW5pdChhdG9pKGFy
Z3ZbMV0pLCBOVUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0gZWxzZSB7CisJCXVzcnNjdHBf
aW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0KKyNpZmRlZiBTQ1RQX0RF
QlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsK
KyNlbmRpZgorCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKKwl1c3JzY3Rw
X3N5c2N0bF9zZXRfc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKDApOworCisJaWYgKChzb2NrID0g
dXNyc2N0cF9zb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgTlVMTCwg
TlVMTCwgMCwgTlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOwor
CX0KKwl1c3JzY3RwX3NldF9ub25fYmxvY2tpbmcoc29jaywgMSk7CisJaWYgKGFyZ2MgPiAyKSB7
CisJCW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7CisJ
CWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9JTkVUOworCQllbmNhcHMuc3VlX3Bv
cnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2Nr
LCBJUFBST1RPX1NDVFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQq
KSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkg
eworCQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7CisJCX0KKwl9CisJbWVtc2V0KCh2b2lkICopJmFk
ZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyNpZmRlZiBIQVZFX1NJTl9MRU4K
KwlhZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCWFk
ZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJYWRkci5zaW5fcG9ydCA9IGh0b25zKFBPUlQpOwor
CWFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisJaWYgKHVzcnNjdHBf
YmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwl9CisJaWYgKHVzcnNj
dHBfbGlzdGVuKHNvY2ssIDEpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJ
fQorCisJdXNyc2N0cF9zZXRfdXBjYWxsKHNvY2ssIGhhbmRsZV9hY2NlcHQsIE5VTEwpOworCisJ
d2hpbGUgKDEpIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMSoxMDAwKTsKKyNlbHNlCisJCXNs
ZWVwKDEpOworI2VuZGlmCisJfQorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi9wcm9ncmFtcy9kaXNjYXJkX3NlcnZlci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZGlzY2FyZF9z
ZXJ2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mOGMyYTcyMWYyYTA1NWNjMWYxZDE0ZWUxZjc2ODdjYTY5MjI2
MmUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZGlzY2FyZF9zZXJ2ZXIu
YwpAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hh
ZWwgVHVleGVuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNI
IERBTUFHRS4KKyAqLworCisvKgorICogVXNhZ2U6IGRpc2NhcmRfc2VydmVyIFtsb2NhbF9lbmNh
cHNfcG9ydF0gW3JlbW90ZV9lbmNhcHNfcG9ydF0KKyAqIAorICogRXhhbXBsZQorICogU2VydmVy
OiAkIC4vZGlzY2FyZF9zZXJ2ZXIgMTExMTEgMjIyMjIKKyAqIENsaWVudDogJCAuL2NsaWVudCAx
MjcuMC4wLjEgOSAwIDIyMjIyIDExMTExCisgKi8KKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBf
Q1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4K
KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8dW5pc3Rk
Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNp
bmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHVzcnNjdHAuaD4KKyNpbmNs
dWRlICJwcm9ncmFtc19oZWxwZXIuaCIKKworI2RlZmluZSBQT1JUIDkKKyNkZWZpbmUgQlVGRkVS
X1NJWkUgMTAyNDAKKyNkZWZpbmUgU0xFRVAgMQorCitjb25zdCBpbnQgdXNlX2NiID0gMDsKKwor
c3RhdGljIGludAorcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3Nv
Y2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3Ry
dWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7CisJY2hh
ciBuYW1lYnVmW0lORVQ2X0FERFJTVFJMRU5dOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdWludDE2
X3QgcG9ydDsKKworCWlmIChkYXRhKSB7CisJCWlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJT04p
IHsKKwkJCXByaW50ZigiTm90aWZpY2F0aW9uIG9mIGxlbmd0aCAlZCByZWNlaXZlZC5cbiIsIChp
bnQpZGF0YWxlbik7CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKGFkZHIuc2Euc2FfZmFtaWx5KSB7
CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorCQkJCW5hbWUgPSBpbmV0X250b3AoQUZf
SU5FVCwgJmFkZHIuc2luLnNpbl9hZGRyLCBuYW1lYnVmLCBJTkVUX0FERFJTVFJMRU4pOworCQkJ
CXBvcnQgPSBudG9ocyhhZGRyLnNpbi5zaW5fcG9ydCk7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNp
ZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lO
RVQ2LCAmYWRkci5zaW42LnNpbjZfYWRkciwgbmFtZWJ1ZiwgSU5FVDZfQUREUlNUUkxFTiksCisJ
CQkJcG9ydCA9IG50b2hzKGFkZHIuc2luNi5zaW42X3BvcnQpOworCQkJCWJyZWFrOworI2VuZGlm
CisJCQljYXNlIEFGX0NPTk46CisjaWZkZWYgX1dJTjMyCisJCQkJaWYgKF9zbnByaW50ZihuYW1l
YnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiJXAiLCBhZGRyLnNjb25uLnNjb25uX2FkZHIpIDwgMCkg
eworI2Vsc2UKKwkJCQlpZiAoc25wcmludGYobmFtZWJ1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIiVw
IiwgYWRkci5zY29ubi5zY29ubl9hZGRyKSA8IDApIHsKKyNlbmRpZgorCQkJCQluYW1lYnVmWzBd
ID0gJ1wwJzsKKwkJCQl9CisJCQkJbmFtZSA9IG5hbWVidWY7CisJCQkJcG9ydCA9IG50b2hzKGFk
ZHIuc2Nvbm4uc2Nvbm5fcG9ydCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW5hbWUg
PSAiPz8/IjsKKwkJCQlwb3J0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXByaW50ZigiTXNn
IG9mIGxlbmd0aCAlZCByZWNlaXZlZCBmcm9tICVzOiV1IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAl
dSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LlxuIiwKKwkJCSAgICAgICAoaW50KWRh
dGFsZW4sCisJCQkgICAgICAgbmFtZSwKKwkJCSAgICAgICBwb3J0LAorCQkJICAgICAgIHJjdi5y
Y3Zfc2lkLAorCQkJICAgICAgIHJjdi5yY3Zfc3NuLAorCQkJICAgICAgIHJjdi5yY3ZfdHNuLAor
CQkJICAgICAgICh1aW50MzJfdCludG9obChyY3YucmN2X3BwaWQpLAorCQkJICAgICAgIHJjdi5y
Y3ZfY29udGV4dCk7CisJCX0KKwkJZnJlZShkYXRhKTsKKwl9CisJcmV0dXJuICgxKTsKK30KKwor
aW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHNvY2tldCAqc29j
azsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVu
Y2FwczsKKwlzdHJ1Y3Qgc2N0cF9ldmVudCBldmVudDsKKwl1aW50MTZfdCBldmVudF90eXBlc1td
ID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9Q
RUVSX0FERFJfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9SRU1PVEVf
RVJST1IsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NIVVRET1dOX0VWRU5ULAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04sCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlR9Owor
CXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGF2OworCWNvbnN0IGlu
dCBvbiA9IDE7CisJc3NpemVfdCBuOworCWludCBmbGFnczsKKwlzb2NrbGVuX3QgZnJvbV9sZW47
CisJY2hhciBidWZmZXJbQlVGRkVSX1NJWkVdOworCWNoYXIgbmFtZVtJTkVUNl9BRERSU1RSTEVO
XTsKKwlzb2NrbGVuX3QgaW5mb2xlbjsKKwlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdl9pbmZvOwor
CXVuc2lnbmVkIGludCBpbmZvdHlwZTsKKworCWlmIChhcmdjID4gMSkgeworCQl1c3JzY3RwX2lu
aXQoYXRvaShhcmd2WzFdKSwgTlVMTCwgZGVidWdfcHJpbnRmX3N0YWNrKTsKKwl9IGVsc2Ugewor
CQl1c3JzY3RwX2luaXQoOTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmX3N0YWNrKTsKKwl9CisjaWZk
ZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVC
VUdfQUxMKTsKKyNlbmRpZgorCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsK
Kwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKDApOworCisJaWYg
KChzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RP
X1NDVFAsIHVzZV9jYj9yZWNlaXZlX2NiOk5VTEwsIE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7
CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwl9CisJaWYgKHVzcnNjdHBfc2V0c29ja29w
dChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSLCAoY29uc3Qg
dm9pZCopJm9uLCAoc29ja2xlbl90KXNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3Jz
Y3RwX3NldHNvY2tvcHQgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIiKTsKKwl9CisJbWVtc2V0
KCZhdiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSk7CisJYXYuYXNzb2NfaWQg
PSBTQ1RQX0FMTF9BU1NPQzsKKwlhdi5hc3NvY192YWx1ZSA9IDQ3OworCisJaWYgKHVzcnNjdHBf
c2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfQ09OVEVYVCwgKGNvbnN0IHZvaWQq
KSZhdiwgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8IDApIHsK
KwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9DT05URVhUIik7CisJfQorCWlmICh1
c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFQ1ZSQ1ZJTkZPLCAm
b24sIHNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NU
UF9SRUNWUkNWSU5GTyIpOworCX0KKwlpZiAoYXJnYyA+IDIpIHsKKwkJbWVtc2V0KCZlbmNhcHMs
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNz
LnNzX2ZhbWlseSA9IEFGX0lORVQ2OworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhhdG9pKGFy
Z3ZbMl0pKTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFND
VFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVu
X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJ1c3Jz
Y3RwX3NldHNvY2tvcHQgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUIik7CisJCX0KKwl9CisJ
bWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisJZXZlbnQuc2VfYXNzb2NfaWQgPSBT
Q1RQX0ZVVFVSRV9BU1NPQzsKKwlldmVudC5zZV9vbiA9IDE7CisJZm9yIChpID0gMDsgaSA8ICh1
bnNpZ25lZCBpbnQpKHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVpbnQxNl90KSk7IGkrKykg
eworCQlldmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07CisJCWlmICh1c3JzY3RwX3NldHNv
Y2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVvZihzdHJ1
Y3Qgc2N0cF9ldmVudCkpIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NU
UF9FVkVOVCIpOworCQl9CisJfQorCW1lbXNldCgodm9pZCAqKSZhZGRyLCAwLCBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlhZGRyLnNpbjZfbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJYWRkci5zaW42X2ZhbWls
eSA9IEFGX0lORVQ2OworCWFkZHIuc2luNl9wb3J0ID0gaHRvbnMoUE9SVCk7CisJYWRkci5zaW42
X2FkZHIgPSBpbjZhZGRyX2FueTsKKwlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29j
a2FkZHIgKikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDApIHsKKwkJcGVy
cm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwl9CisJaWYgKHVzcnNjdHBfbGlzdGVuKHNvY2ssIDEpIDwg
MCkgeworCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJfQorCXdoaWxlICgxKSB7CisJCWlm
ICh1c2VfY2IpIHsKKyNpZmRlZiBfV0lOMzIKKwkJCVNsZWVwKFNMRUVQICogMTAwMCk7CisjZWxz
ZQorCQkJc2xlZXAoU0xFRVApOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQlmcm9tX2xlbiA9IChz
b2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJZmxhZ3MgPSAwOworCQkJ
aW5mb2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pOworCQkJbiA9
IHVzcnNjdHBfcmVjdnYoc29jaywgKHZvaWQqKWJ1ZmZlciwgQlVGRkVSX1NJWkUsIChzdHJ1Y3Qg
c29ja2FkZHIgKikgJmFkZHIsICZmcm9tX2xlbiwgKHZvaWQgKikmcmN2X2luZm8sCisJCQkgICAg
ICAgICAgICAgICAgICAmaW5mb2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOworCQkJaWYgKG4gPiAw
KSB7CisJCQkJaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikgeworCQkJCQlwcmludGYoIk5v
dGlmaWNhdGlvbiBvZiBsZW5ndGggJWxsdSByZWNlaXZlZC5cbiIsICh1bnNpZ25lZCBsb25nIGxv
bmcpbik7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKGluZm90eXBlID09IFNDVFBfUkVDVlZfUkNW
SU5GTykgeworCQkJCQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVsbHUgcmVjZWl2ZWQgZnJvbSAl
czoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4
dCAldSwgY29tcGxldGUgJWQuXG4iLAorCQkJCQkJICAgICAgICAodW5zaWduZWQgbG9uZyBsb25n
KW4sCisJCQkJCQkgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNl9hZGRyLCBu
YW1lLCBJTkVUNl9BRERSU1RSTEVOKSwgbnRvaHMoYWRkci5zaW42X3BvcnQpLAorCQkJCQkJICAg
ICAgICByY3ZfaW5mby5yY3Zfc2lkLAorCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zfc3NuLAor
CQkJCQkJICAgICAgICByY3ZfaW5mby5yY3ZfdHNuLAorCQkJCQkJICAgICAgICAodWludDMyX3Qp
bnRvaGwocmN2X2luZm8ucmN2X3BwaWQpLAorCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3ZfY29u
dGV4dCwKKwkJCQkJCSAgICAgICAgKGZsYWdzICYgTVNHX0VPUikgPyAxIDogMCk7CisJCQkJCX0g
ZWxzZSB7CisJCQkJCQlwcmludGYoIk1zZyBvZiBsZW5ndGggJWxsdSByZWNlaXZlZCBmcm9tICVz
OiV1LCBjb21wbGV0ZSAlZC5cbiIsCisJCQkJCQkgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcp
biwKKwkJCQkJCSAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYWRkci5zaW42X2FkZHIsIG5h
bWUsIElORVQ2X0FERFJTVFJMRU4pLCBudG9ocyhhZGRyLnNpbjZfcG9ydCksCisJCQkJCQkgICAg
ICAgIChmbGFncyAmIE1TR19FT1IpID8gMSA6IDApOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNl
IHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwl1c3JzY3RwX2Nsb3NlKHNvY2spOworCXdo
aWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoU0xF
RVAgKiAxMDAwKTsKKyNlbHNlCisJCXNsZWVwKFNMRUVQKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4g
KDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZGlzY2FyZF9zZXJ2ZXJfdXBj
YWxsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kaXNjYXJkX3NlcnZlcl91cGNhbGwuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zMWQ4NGIzODc3ZWZiNWQ2OTRjNTA0ZjZlNGYxMWIxYmEwODg2NGE3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZGlzY2FyZF9zZXJ2ZXJfdXBjYWxsLmMKQEAgLTAs
MCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhl
bgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwor
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9K
RUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRI
RSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKi8KKworLyoKKyAqIFVzYWdlOiBkaXNjYXJkX3NlcnZlcl91cGNhbGwgW2xvY2FsX2VuY2Fw
c19wb3J0XSBbcmVtb3RlX2VuY2Fwc19wb3J0XQorICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZp
bmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJn
Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVu
aXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+
CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+Cisj
aW5jbHVkZSAicHJvZ3JhbXNfaGVscGVyLmgiCisKKyNkZWZpbmUgQlVGRkVSU0laRSAxMDI0MAor
I2RlZmluZSBQT1JUIDkKKworCitzdGF0aWMgdm9pZAoraGFuZGxlX3VwY2FsbChzdHJ1Y3Qgc29j
a2V0ICpzb2NrLCB2b2lkICpkYXRhLCBpbnQgZmxncykKK3sKKwljaGFyIG5hbWVidWZbSU5FVDZf
QUREUlNUUkxFTl07CisJY29uc3QgY2hhciAqbmFtZTsKKwl1aW50MTZfdCBwb3J0OworCWNoYXIg
KmJ1ZjsKKwlpbnQgZXZlbnRzOworCisJd2hpbGUgKChldmVudHMgPSB1c3JzY3RwX2dldF9ldmVu
dHMoc29jaykpICYmIChldmVudHMgJiBTQ1RQX0VWRU5UX1JFQUQpKSB7CisJCXN0cnVjdCBzY3Rw
X3JlY3Z2X3JuIHJuOworCQlzc2l6ZV90IG47CisJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFk
ZHI7CisJCWJ1ZiA9IG1hbGxvYyhCVUZGRVJTSVpFKTsKKwkJaW50IGZsYWdzID0gMDsKKwkJc29j
a2xlbl90IGxlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsK
KwkJdW5zaWduZWQgaW50IGluZm90eXBlID0gMDsKKwkJc29ja2xlbl90IGluZm9sZW4gPSBzaXpl
b2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4pOworCQltZW1zZXQoJnJuLCAwLCBzaXplb2Yoc3RydWN0
IHNjdHBfcmVjdnZfcm4pKTsKKwkJbiA9IHVzcnNjdHBfcmVjdnYoc29jaywgYnVmLCBCVUZGRVJT
SVpFLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmbGVuLCAodm9pZCAqKSZybiwKKwkJICAg
ICAgICAgICAgICZpbmZvbGVuLCAmaW5mb3R5cGUsICZmbGFncyk7CisJCWlmIChuIDwgMCkgewor
CQkJcGVycm9yKCJ1c3JzY3RwX3JlY3Z2Iik7CisJCX0KKwkJaWYgKG4gPiAwKSB7CisJCQlpZiAo
ZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7CisJCQkJcHJpbnRmKCJOb3RpZmljYXRpb24gb2Yg
bGVuZ3RoICVkIHJlY2VpdmVkLlxuIiwgKGludCluKTsKKwkJCX0gZWxzZSB7CisvKgorI2lmZGVm
IF9XSU4zMgorCQkJCV93cml0ZShfZmlsZW5vKHN0ZG91dCksIGJ1ZiwgKHVuc2lnbmVkIGludClu
KTsKKyNlbHNlCisJCQkJaWYgKHdyaXRlKGZpbGVubyhzdGRvdXQpLCBidWYsIG4pIDwgMCkgewor
CQkJCQlwZXJyb3IoIndyaXRlIik7CisJCQkJfQorI2VuZGlmCisqLworCQkJCXN3aXRjaCAoYWRk
ci5zc19mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVUOiB7CisJCQkJCXN0
cnVjdCBzb2NrYWRkcl9pbiBhZGRyNDsKKwkJCQkJbWVtY3B5KCZhZGRyNCwgKHN0cnVjdCBzb2Nr
YWRkcl9pbiAqKSZhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCQkJCW5hbWUg
PSBpbmV0X250b3AoQUZfSU5FVCwgJmFkZHI0LnNpbl9hZGRyLCBuYW1lYnVmLCBJTkVUX0FERFJT
VFJMRU4pOworCQkJCQlwb3J0ID0gbnRvaHMoYWRkcjQuc2luX3BvcnQpOworCQkJCQlicmVhazsK
KwkJCQkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lORVQ2OiB7CisJCQkJ
CXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjY7CisJCQkJCW1lbWNweSgmYWRkcjYsIChzdHJ1Y3Qg
c29ja2FkZHJfaW42ICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCQkJ
CW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyNi5zaW42X2FkZHIsIG5hbWVidWYsIElO
RVQ2X0FERFJTVFJMRU4pLAorCQkJCQlwb3J0ID0gbnRvaHMoYWRkcjYuc2luNl9wb3J0KTsKKwkJ
CQkJYnJlYWs7CisJCQkJCX0KKyNlbmRpZgorCQkJCWRlZmF1bHQ6CisJCQkJCW5hbWUgPSBOVUxM
OworCQkJCQlwb3J0ID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKG5hbWUgPT0g
TlVMTCkgeworCQkJCQlwcmludGYoImluZXRfbnRvcCBmYWlsZWRcbiIpOworCQkJCQlmcmVlKGJ1
Zik7CisJCQkJCXJldHVybjsKKwkJCQl9CisKKwkJCQlwcmludGYoIk1zZyBvZiBsZW5ndGggJWQg
cmVjZWl2ZWQgZnJvbSAlczoldSBvbiBzdHJlYW0gJWQgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwg
UFBJRCAldSwgY29udGV4dCAldS5cbiIsCisJCQkJICAgICAgIChpbnQpbiwKKwkJCQkgICAgICAg
bmFtZWJ1ZiwKKwkJCQkgICAgICAgcG9ydCwKKwkJCQkgICAgICAgcm4ucmVjdnZfcmN2aW5mby5y
Y3Zfc2lkLAorCQkJCSAgICAgICBybi5yZWN2dl9yY3ZpbmZvLnJjdl9zc24sCisJCQkJICAgICAg
IHJuLnJlY3Z2X3JjdmluZm8ucmN2X3RzbiwKKwkJCQkgICAgICAgKHVpbnQzMl90KW50b2hsKHJu
LnJlY3Z2X3JjdmluZm8ucmN2X3BwaWQpLAorCQkJCSAgICAgICBybi5yZWN2dl9yY3ZpbmZvLnJj
dl9jb250ZXh0KTsKKwkJCX0KKwkJfQorCQlmcmVlKGJ1Zik7CisJfQorCXJldHVybjsKK30KKwor
aW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHNvY2tldCAqc29j
azsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVu
Y2FwczsKKwlzdHJ1Y3Qgc2N0cF9ldmVudCBldmVudDsKKwl1aW50MTZfdCBldmVudF90eXBlc1td
ID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9Q
RUVSX0FERFJfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9SRU1PVEVf
RVJST1IsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NIVVRET1dOX0VWRU5ULAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04sCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlR9Owor
CXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGF2OworCWNvbnN0IGlu
dCBvbiA9IDE7CisKKwlpZiAoYXJnYyA+IDEpIHsKKwkJdXNyc2N0cF9pbml0KGF0b2koYXJndlsx
XSksIE5VTEwsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9pbml0
KDk4OTksIE5VTEwsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJfQorI2lmZGVmIFNDVFBfREVCVUcK
Kwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOworI2Vu
ZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCXVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX25vX2NzdW1fb25fbG9vcGJhY2soMCk7CisKKwlpZiAoKHNvY2sgPSB1c3Jz
Y3RwX3NvY2tldChBRl9JTkVUNiwgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCwgTlVMTCwg
TlVMTCwgMCwgTlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOwor
CX0KKwl1c3JzY3RwX3NldF9ub25fYmxvY2tpbmcoc29jaywgMSk7CisJaWYgKHVzcnNjdHBfc2V0
c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSLCAo
Y29uc3Qgdm9pZCopJm9uLCAoc29ja2xlbl90KXNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9y
KCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIiKTsKKwl9CisJ
bWVtc2V0KCZhdiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSk7CisJYXYuYXNz
b2NfaWQgPSBTQ1RQX0FMTF9BU1NPQzsKKwlhdi5hc3NvY192YWx1ZSA9IDQ3OworCisJaWYgKHVz
cnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfQ09OVEVYVCwgKGNvbnN0
IHZvaWQqKSZhdiwgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8
IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9DT05URVhUIik7CisJfQor
CWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFQ1ZSQ1ZJ
TkZPLCAmb24sIHNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tv
cHQgU0NUUF9SRUNWUkNWSU5GTyIpOworCX0KKwlpZiAoYXJnYyA+IDIpIHsKKwkJbWVtc2V0KCZl
bmNhcHMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9h
ZGRyZXNzLnNzX2ZhbWlseSA9IEFGX0lORVQ2OworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhh
dG9pKGFyZ3ZbMl0pKTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1ND
VFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChz
b2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9y
KCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUIik7CisJCX0K
Kwl9CisJbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisJZXZlbnQuc2VfYXNzb2Nf
aWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsKKwlldmVudC5zZV9vbiA9IDE7CisJZm9yIChpID0gMDsg
aSA8ICh1bnNpZ25lZCBpbnQpKHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVpbnQxNl90KSk7
IGkrKykgeworCQlldmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07CisJCWlmICh1c3JzY3Rw
X3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9ldmVudCkpIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tv
cHQgU0NUUF9FVkVOVCIpOworCQl9CisJfQorCisJdXNyc2N0cF9zZXRfdXBjYWxsKHNvY2ssIGhh
bmRsZV91cGNhbGwsIE5VTEwpOworCisJbWVtc2V0KCh2b2lkICopJmFkZHIsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCWFkZHIuc2luNl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwlhZGRyLnNpbjZfZmFt
aWx5ID0gQUZfSU5FVDY7CisJYWRkci5zaW42X3BvcnQgPSBodG9ucyhQT1JUKTsKKwlhZGRyLnNp
bjZfYWRkciA9IGluNmFkZHJfYW55OworCWlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBz
b2NrYWRkciAqKSZhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgeworCQlw
ZXJyb3IoInVzcnNjdHBfYmluZCIpOworCX0KKwlpZiAodXNyc2N0cF9saXN0ZW4oc29jaywgMSkg
PCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKKwl9CisJd2hpbGUgKDEpIHsKKyNp
ZmRlZiBfV0lOMzIKKwkJCVNsZWVwKDEqMTAwMCk7CisjZWxzZQorCQkJc2xlZXAoMSk7CisjZW5k
aWYKKwl9CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vj
aG9fc2VydmVyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9lY2hvX3NlcnZlci5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjkzNTE0NDdhMzhkODlkY2Q2Yzk5YzZiNWEzNGU1YzdhZWIzMjk2YmMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9lY2hvX3NlcnZlci5jCkBAIC0wLDAgKzEsMjc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
cHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0
d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisg
KiBVc2FnZTogZWNob19zZXJ2ZXIgW2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2VuY2Fwc19w
b3J0XQorICoKKyAqIEV4YW1wbGUKKyAqIFNlcnZlcjogJCAuL2VjaG9fc2VydmVyIDExMTExIDIy
MjIyCisgKiBDbGllbnQ6ICQgLi9jbGllbnQgMTI3LjAuMC4xIDcgMCAyMjIyMiAxMTExMQorICov
CisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRp
ZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3Ry
aW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZu
ZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYK
KyNpbmNsdWRlIDx1c3JzY3RwLmg+CisjaW5jbHVkZSAicHJvZ3JhbXNfaGVscGVyLmgiCisKKyNk
ZWZpbmUgUE9SVCA3CisjZGVmaW5lIEJVRkZFUl9TSVpFIDEwMjQwCisjZGVmaW5lIFNMRUVQIDEK
KworY29uc3QgaW50IHVzZV9jYiA9IDA7CisKK3N0YXRpYyBpbnQKK3JlY2VpdmVfY2Ioc3RydWN0
IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKKyAg
ICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2LCBpbnQgZmxh
Z3MsIHZvaWQgKnVscF9pbmZvKQoreworCWNoYXIgbmFtZWJ1ZltJTkVUNl9BRERSU1RSTEVOXTsK
Kwljb25zdCBjaGFyICpuYW1lOworCXVpbnQxNl90IHBvcnQ7CisKKwlpZiAoZGF0YSkgeworCQlp
ZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7CisJCQlwcmludGYoIk5vdGlmaWNhdGlvbiBv
ZiBsZW5ndGggJWQgcmVjZWl2ZWQuXG4iLCAoaW50KWRhdGFsZW4pOworCQl9IGVsc2UgeworCQkJ
c3dpdGNoIChhZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5F
VDoKKwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQsICZhZGRyLnNpbi5zaW5fYWRkciwgbmFt
ZWJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCQlwb3J0ID0gbnRvaHMoYWRkci5zaW4uc2luX3Bv
cnQpOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6
CisJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNi5zaW42X2FkZHIsIG5h
bWVidWYsIElORVQ2X0FERFJTVFJMRU4pLAorCQkJCXBvcnQgPSBudG9ocyhhZGRyLnNpbjYuc2lu
Nl9wb3J0KTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBRl9DT05OOgorI2lmZGVmIF9X
SU4zMgorCQkJCWlmIChfc25wcmludGYobmFtZWJ1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIiVwIiwg
YWRkci5zY29ubi5zY29ubl9hZGRyKSA8IDApIHsKKyNlbHNlCisJCQkJaWYgKHNucHJpbnRmKG5h
bWVidWYsIElORVQ2X0FERFJTVFJMRU4sICIlcCIsIGFkZHIuc2Nvbm4uc2Nvbm5fYWRkcikgPCAw
KSB7CisjZW5kaWYKKwkJCQkJbmFtZWJ1ZlswXSA9ICdcMCc7CisJCQkJfQorCQkJCW5hbWUgPSBu
YW1lYnVmOworCQkJCXBvcnQgPSBudG9ocyhhZGRyLnNjb25uLnNjb25uX3BvcnQpOworCQkJCWJy
ZWFrOworCQkJZGVmYXVsdDoKKwkJCQluYW1lID0gIj8/PyI7CisJCQkJcG9ydCA9IDA7CisJCQkJ
YnJlYWs7CisJCQl9CisJCQlwcmludGYoIk1zZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgZnJvbSAl
czoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4
dCAldS5cbiIsCisJCQkgICAgICAgKGludClkYXRhbGVuLAorCQkJICAgICAgIG5hbWUsCisJCQkg
ICAgICAgcG9ydCwKKwkJCSAgICAgICByY3YucmN2X3NpZCwKKwkJCSAgICAgICByY3YucmN2X3Nz
biwKKwkJCSAgICAgICByY3YucmN2X3RzbiwKKwkJCSAgICAgICAodWludDMyX3QpbnRvaGwocmN2
LnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOworCQkJaWYgKGZsYWdzICYg
TVNHX0VPUikgeworCQkJCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kX2luZm87CisKKwkJCQlzbmRf
aW5mby5zbmRfc2lkID0gcmN2LnJjdl9zaWQ7CisJCQkJc25kX2luZm8uc25kX2ZsYWdzID0gMDsK
KwkJCQlpZiAocmN2LnJjdl9mbGFncyAmIFNDVFBfVU5PUkRFUkVEKSB7CisJCQkJCXNuZF9pbmZv
LnNuZF9mbGFncyB8PSBTQ1RQX1VOT1JERVJFRDsKKwkJCQl9CisJCQkJc25kX2luZm8uc25kX3Bw
aWQgPSByY3YucmN2X3BwaWQ7CisJCQkJc25kX2luZm8uc25kX2NvbnRleHQgPSAwOworCQkJCXNu
ZF9pbmZvLnNuZF9hc3NvY19pZCA9IHJjdi5yY3ZfYXNzb2NfaWQ7CisJCQkJaWYgKHVzcnNjdHBf
c2VuZHYoc29jaywgZGF0YSwgZGF0YWxlbiwgTlVMTCwgMCwgJnNuZF9pbmZvLCBzaXplb2Yoc3Ry
dWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCQkJCXBl
cnJvcigic2N0cF9zZW5kdiIpOworCQkJCX0KKwkJCX0KKwkJfQorCQlmcmVlKGRhdGEpOworCX0K
KwlyZXR1cm4gKDEpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sK
KwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKwlzdHJ1
Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBzOworCXN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OworCXVp
bnQxNl90IGV2ZW50X3R5cGVzW10gPSB7U0NUUF9BU1NPQ19DSEFOR0UsCisJICAgICAgICAgICAg
ICAgICAgICAgICAgICBTQ1RQX1BFRVJfQUREUl9DSEFOR0UsCisJICAgICAgICAgICAgICAgICAg
ICAgICAgICBTQ1RQX1JFTU9URV9FUlJPUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFND
VFBfU0hVVERPV05fRVZFTlQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FEQVBU
QVRJT05fSU5ESUNBVElPTiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEFSVElB
TF9ERUxJVkVSWV9FVkVOVH07CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUgYXY7CisJY29uc3QgaW50IG9uID0gMTsKKwlzc2l6ZV90IG47CisJaW50IGZsYWdzOwor
CXNvY2tsZW5fdCBmcm9tX2xlbjsKKwljaGFyIGJ1ZmZlcltCVUZGRVJfU0laRV07CisJY2hhciBu
YW1lW0lORVQ2X0FERFJTVFJMRU5dOworCXNvY2tsZW5fdCBpbmZvbGVuOworCXN0cnVjdCBzY3Rw
X3JjdmluZm8gcmN2X2luZm87CisJdW5zaWduZWQgaW50IGluZm90eXBlOworCisJaWYgKGFyZ2Mg
PiAxKSB7CisJCXVzcnNjdHBfaW5pdChhdG9pKGFyZ3ZbMV0pLCBOVUxMLCBkZWJ1Z19wcmludGZf
c3RhY2spOworCX0gZWxzZSB7CisJCXVzcnNjdHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmlu
dGZfc3RhY2spOworCX0KKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3Nj
dHBfZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsKKyNlbmRpZgorCXVzcnNjdHBfc3lzY3RsX3Nl
dF9zY3RwX2JsYWNraG9sZSgyKTsKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ub19jc3VtX29u
X2xvb3BiYWNrKDApOworCisJaWYgKChzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVDYsIFNP
Q0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFAsIHVzZV9jYj9yZWNlaXZlX2NiOk5VTEwsIE5VTEws
IDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwl9CisJ
aWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfSV9XQU5UX01B
UFBFRF9WNF9BRERSLCAoY29uc3Qgdm9pZCopJm9uLCAoc29ja2xlbl90KXNpemVvZihpbnQpKSA8
IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0
X0FERFIiKTsKKwl9CisJbWVtc2V0KCZhdiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlKSk7CisJYXYuYXNzb2NfaWQgPSBTQ1RQX0FMTF9BU1NPQzsKKwlhdi5hc3NvY192YWx1ZSA9
IDQ3OworCisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBf
Q09OVEVYVCwgKGNvbnN0IHZvaWQqKSZhdiwgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBf
YXNzb2NfdmFsdWUpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9D
T05URVhUIik7CisJfQorCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQ
LCBTQ1RQX1JFQ1ZSQ1ZJTkZPLCAmb24sIHNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1
c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9SRUNWUkNWSU5GTyIpOworCX0KKwlpZiAoYXJnYyA+IDIp
IHsKKwkJbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsK
KwkJZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9IEFGX0lORVQ2OworCQllbmNhcHMuc3Vl
X3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChz
b2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZv
aWQqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwg
MCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9SRU1PVEVfVURQX0VOQ0FQ
U19QT1JUIik7CisJCX0KKwl9CisJbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisJ
ZXZlbnQuc2VfYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsKKwlldmVudC5zZV9vbiA9IDE7
CisJZm9yIChpID0gMDsgaSA8ICh1bnNpZ25lZCBpbnQpKHNpemVvZihldmVudF90eXBlcykvc2l6
ZW9mKHVpbnQxNl90KSk7IGkrKykgeworCQlldmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07
CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5U
LCAmZXZlbnQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9ldmVudCkpIDwgMCkgeworCQkJcGVycm9yKCJ1
c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9FVkVOVCIpOworCQl9CisJfQorCW1lbXNldCgodm9pZCAq
KSZhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lO
Nl9MRU4KKwlhZGRyLnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2Vu
ZGlmCisJYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCWFkZHIuc2luNl9wb3J0ID0gaHRv
bnMoUE9SVCk7CisJYWRkci5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKKwlpZiAodXNyc2N0cF9i
aW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwl9CisJaWYgKHVzcnNj
dHBfbGlzdGVuKHNvY2ssIDEpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJ
fQorCXdoaWxlICgxKSB7CisJCWlmICh1c2VfY2IpIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAo
U0xFRVAgKiAxMDAwKTsKKyNlbHNlCisJCXNsZWVwKFNMRUVQKTsKKyNlbmRpZgorCQl9IGVsc2Ug
eworCQkJZnJvbV9sZW4gPSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsK
KwkJCWZsYWdzID0gMDsKKwkJCWluZm9sZW4gPSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0
cF9yY3ZpbmZvKTsKKwkJCW4gPSB1c3JzY3RwX3JlY3Z2KHNvY2ssICh2b2lkKilidWZmZXIsIEJV
RkZFUl9TSVpFLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmZnJvbV9sZW4sICh2b2lkICop
JnJjdl9pbmZvLAorCQkJICAgICAgICAgICAgICAgICAgJmluZm9sZW4sICZpbmZvdHlwZSwgJmZs
YWdzKTsKKwkJCWlmIChuID4gMCkgeworCQkJCWlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJT04p
IHsKKwkJCQkJcHJpbnRmKCJOb3RpZmljYXRpb24gb2YgbGVuZ3RoICVsbHUgcmVjZWl2ZWQuXG4i
LCAodW5zaWduZWQgbG9uZyBsb25nKW4pOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChpbmZvdHlw
ZSA9PSBTQ1RQX1JFQ1ZWX1JDVklORk8pIHsKKwkJCQkJCXByaW50ZigiTXNnIG9mIGxlbmd0aCAl
bGx1IHJlY2VpdmVkIGZyb20gJXM6JXUgb24gc3RyZWFtICV1IHdpdGggU1NOICV1IGFuZCBUU04g
JXUsIFBQSUQgJXUsIGNvbnRleHQgJXUsIGNvbXBsZXRlICVkLlxuIiwKKwkJCQkJCSAgICAgICAg
KHVuc2lnbmVkIGxvbmcgbG9uZyluLAorCQkJCQkJICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYs
ICZhZGRyLnNpbjZfYWRkciwgbmFtZSwgSU5FVDZfQUREUlNUUkxFTiksIG50b2hzKGFkZHIuc2lu
Nl9wb3J0KSwKKwkJCQkJCSAgICAgICAgcmN2X2luZm8ucmN2X3NpZCwKKwkJCQkJCSAgICAgICAg
cmN2X2luZm8ucmN2X3NzbiwKKwkJCQkJCSAgICAgICAgcmN2X2luZm8ucmN2X3RzbiwKKwkJCQkJ
CSAgICAgICAgKHVpbnQzMl90KW50b2hsKHJjdl9pbmZvLnJjdl9wcGlkKSwKKwkJCQkJCSAgICAg
ICAgcmN2X2luZm8ucmN2X2NvbnRleHQsCisJCQkJCQkgICAgICAgIChmbGFncyAmIE1TR19FT1Ip
ID8gMSA6IDApOworCQkJCQkJaWYgKGZsYWdzICYgTVNHX0VPUikgeworCQkJCQkJCXN0cnVjdCBz
Y3RwX3NuZGluZm8gc25kX2luZm87CisKKwkJCQkJCQlzbmRfaW5mby5zbmRfc2lkID0gcmN2X2lu
Zm8ucmN2X3NpZDsKKwkJCQkJCQlzbmRfaW5mby5zbmRfZmxhZ3MgPSAwOworCQkJCQkJCWlmIChy
Y3ZfaW5mby5yY3ZfZmxhZ3MgJiBTQ1RQX1VOT1JERVJFRCkgeworCQkJCQkJCQlzbmRfaW5mby5z
bmRfZmxhZ3MgfD0gU0NUUF9VTk9SREVSRUQ7CisJCQkJCQkJfQorCQkJCQkJCXNuZF9pbmZvLnNu
ZF9wcGlkID0gcmN2X2luZm8ucmN2X3BwaWQ7CisJCQkJCQkJc25kX2luZm8uc25kX2NvbnRleHQg
PSAwOworCQkJCQkJCXNuZF9pbmZvLnNuZF9hc3NvY19pZCA9IHJjdl9pbmZvLnJjdl9hc3NvY19p
ZDsKKwkJCQkJCQlpZiAodXNyc2N0cF9zZW5kdihzb2NrLCBidWZmZXIsIChzaXplX3QpbiwgTlVM
TCwgMCwgJnNuZF9pbmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwg
U0NUUF9TRU5EVl9TTkRJTkZPLCAwKSA8IDApIHsKKwkJCQkJCQkJcGVycm9yKCJzY3RwX3NlbmR2
Iik7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJcHJpbnRmKCJNc2cg
b2YgbGVuZ3RoICVsbHUgcmVjZWl2ZWQgZnJvbSAlczoldSwgY29tcGxldGUgJWQuXG4iLAorCQkJ
CQkJICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW4sCisJCQkJCQkgICAgICAgIGluZXRfbnRv
cChBRl9JTkVUNiwgJmFkZHIuc2luNl9hZGRyLCBuYW1lLCBJTkVUNl9BRERSU1RSTEVOKSwgbnRv
aHMoYWRkci5zaW42X3BvcnQpLAorCQkJCQkJICAgICAgICAoZmxhZ3MgJiBNU0dfRU9SKSA/IDEg
OiAwKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0K
Kwl9CisJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAw
KSB7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKFNMRUVQICogMTAwMCk7CisjZWxzZQorCQlzbGVl
cChTTEVFUCk7CisjZW5kaWYKKwl9CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3Byb2dyYW1zL2VjaG9fc2VydmVyX3VwY2FsbC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWNo
b19zZXJ2ZXJfdXBjYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDczNDM3ODUxNjkwOGYyZTNjNGJlNWM4ODdl
M2VlYTdiMzQwOWQyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2VjaG9f
c2VydmVyX3VwY2FsbC5jCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTMgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
CisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBVc2FnZTogZGlzY2FyZF9zZXJ2
ZXJfdXBjYWxsIFtsb2NhbF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9lbmNhcHNfcG9ydF0KKyAqLwor
CisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisjaW5jbHVk
ZSA8aW8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lz
L3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg
PHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9p
bmV0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+CisjaW5jbHVkZSAicHJvZ3JhbXNf
aGVscGVyLmgiCisKKyNkZWZpbmUgQlVGRkVSU0laRSAxMDI0MAorI2RlZmluZSBQT1JUIDcKKwor
c3RhdGljIHZvaWQKK2hhbmRsZV91cGNhbGwoc3RydWN0IHNvY2tldCAqc29jaywgdm9pZCAqZGF0
YSwgaW50IGZsZ3MpCit7CisJY2hhciBuYW1lYnVmW0lORVQ2X0FERFJTVFJMRU5dOworCWNvbnN0
IGNoYXIgKm5hbWU7CisJdWludDE2X3QgcG9ydDsKKwljaGFyICpidWY7CisJaW50IGV2ZW50czsK
KworCXdoaWxlICgoZXZlbnRzID0gdXNyc2N0cF9nZXRfZXZlbnRzKHNvY2spKSAmJiAoZXZlbnRz
ICYgU0NUUF9FVkVOVF9SRUFEKSkgeworCQlzdHJ1Y3Qgc2N0cF9yZWN2dl9ybiBybjsKKwkJc3Np
emVfdCBuOworCQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOworCQlidWYgPSBtYWxsb2Mo
QlVGRkVSU0laRSk7CisJCWludCBmbGFncyA9IDA7CisJCXNvY2tsZW5fdCBsZW4gPSAoc29ja2xl
bl90KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSk7CisJCXVuc2lnbmVkIGludCBpbmZv
dHlwZSA9IDA7CisJCXNvY2tsZW5fdCBpbmZvbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2
X3JuKTsKKwkJbWVtc2V0KCZybiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3JuKSk7CisJ
CW4gPSB1c3JzY3RwX3JlY3Z2KHNvY2ssIGJ1ZiwgQlVGRkVSU0laRSwgKHN0cnVjdCBzb2NrYWRk
ciAqKSAmYWRkciwgJmxlbiwgKHZvaWQgKikmcm4sCisJCSAgICAgICAgICAgICAmaW5mb2xlbiwg
JmluZm90eXBlLCAmZmxhZ3MpOworCQlpZiAobiA8IDApIHsKKwkJCXBlcnJvcigidXNyc2N0cF9y
ZWN2diIpOworCQl9CisJCWlmIChuID09IDApIHsKKwkJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJ
CQlyZXR1cm47CisJCX0KKwkJaWYgKG4gPiAwKSB7CisJCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJ
Q0FUSU9OKSB7CisJCQkJcHJpbnRmKCJOb3RpZmljYXRpb24gb2YgbGVuZ3RoICVkIHJlY2VpdmVk
LlxuIiwgKGludCluKTsKKwkJCX0gZWxzZSB7CisjaWZkZWYgX1dJTjMyCisJCQkJX3dyaXRlKF9m
aWxlbm8oc3Rkb3V0KSwgYnVmLCAodW5zaWduZWQgaW50KW4pOworI2Vsc2UKKwkJCQlpZiAod3Jp
dGUoZmlsZW5vKHN0ZG91dCksIGJ1ZiwgbikgPCAwKSB7CisJCQkJCXBlcnJvcigid3JpdGUiKTsK
KwkJCQl9CisjZW5kaWYKKwkJCQlzd2l0Y2ggKGFkZHIuc3NfZmFtaWx5KSB7CisjaWZkZWYgSU5F
VAorCQkJCQljYXNlIEFGX0lORVQ6IHsKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyNDsK
KwkJCQkJCW1lbWNweSgmYWRkcjQsIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYWRkciwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpOworCQkJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVULCAm
YWRkcjQuc2luX2FkZHIsIG5hbWVidWYsIElORVRfQUREUlNUUkxFTik7CisJCQkJCQlwb3J0ID0g
bnRvaHMoYWRkcjQuc2luX3BvcnQpOworCQkJCQkJYnJlYWs7CisJCQkJCQl9CisjZW5kaWYKKyNp
ZmRlZiBJTkVUNgorCQkJCQljYXNlIEFGX0lORVQ2OiB7CisJCQkJCQlzdHJ1Y3Qgc29ja2FkZHJf
aW42IGFkZHI2OworCQkJCQkJbWVtY3B5KCZhZGRyNiwgKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikm
YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJCQkJCW5hbWUgPSBpbmV0X250
b3AoQUZfSU5FVDYsICZhZGRyNi5zaW42X2FkZHIsIG5hbWVidWYsIElORVQ2X0FERFJTVFJMRU4p
LAorCQkJCQkJcG9ydCA9IG50b2hzKGFkZHI2LnNpbjZfcG9ydCk7CisJCQkJCQlicmVhazsKKwkJ
CQkJCX0KKyNlbmRpZgorCQkJCQlkZWZhdWx0OgorCQkJCQkJbmFtZSA9IE5VTEw7CisJCQkJCQlw
b3J0ID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJCQkJaWYgKG5hbWUgPT0gTlVMTCkg
eworCQkJCQkJcHJpbnRmKCJpbmV0X250b3AgZmFpbGVkXG4iKTsKKwkJCQkJCWZyZWUoYnVmKTsK
KwkJCQkJCXJldHVybjsKKwkJCQkJfQorCisJCQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVkIHJl
Y2VpdmVkIGZyb20gJXM6JXUgb24gc3RyZWFtICVkIHdpdGggU1NOICV1IGFuZCBUU04gJXUsIFBQ
SUQgJXUsIGNvbnRleHQgJXUuXG4iLAorCQkJCSAgICAgICAoaW50KW4sCisJCQkJICAgICAgIG5h
bWVidWYsCisJCQkJICAgICAgIHBvcnQsCisJCQkJICAgICAgIHJuLnJlY3Z2X3JjdmluZm8ucmN2
X3NpZCwKKwkJCQkgICAgICAgcm4ucmVjdnZfcmN2aW5mby5yY3Zfc3NuLAorCQkJCSAgICAgICBy
bi5yZWN2dl9yY3ZpbmZvLnJjdl90c24sCisJCQkJICAgICAgICh1aW50MzJfdCludG9obChybi5y
ZWN2dl9yY3ZpbmZvLnJjdl9wcGlkKSwKKwkJCQkgICAgICAgcm4ucmVjdnZfcmN2aW5mby5yY3Zf
Y29udGV4dCk7CisJCQkJaWYgKGZsYWdzICYgTVNHX0VPUikgeworCQkJCQlzdHJ1Y3Qgc2N0cF9z
bmRpbmZvIHNuZF9pbmZvOworCisJCQkJCXNuZF9pbmZvLnNuZF9zaWQgPSBybi5yZWN2dl9yY3Zp
bmZvLnJjdl9zaWQ7CisJCQkJCXNuZF9pbmZvLnNuZF9mbGFncyA9IDA7CisJCQkJCWlmIChybi5y
ZWN2dl9yY3ZpbmZvLnJjdl9mbGFncyAmIFNDVFBfVU5PUkRFUkVEKSB7CisJCQkJCQlzbmRfaW5m
by5zbmRfZmxhZ3MgfD0gU0NUUF9VTk9SREVSRUQ7CisJCQkJCX0KKwkJCQkJc25kX2luZm8uc25k
X3BwaWQgPSBybi5yZWN2dl9yY3ZpbmZvLnJjdl9wcGlkOworCQkJCQlzbmRfaW5mby5zbmRfY29u
dGV4dCA9IDA7CisJCQkJCXNuZF9pbmZvLnNuZF9hc3NvY19pZCA9IHJuLnJlY3Z2X3JjdmluZm8u
cmN2X2Fzc29jX2lkOworCQkJCQlpZiAodXNyc2N0cF9zZW5kdihzb2NrLCBidWYsIChzaXplX3Qp
IG4sIE5VTEwsIDAsICZzbmRfaW5mbywgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLCBTQ1RQ
X1NFTkRWX1NORElORk8sIDApIDwgMCkgeworCQkJCQkJcGVycm9yKCJzY3RwX3NlbmR2Iik7CisJ
CQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZnJlZShidWYpOworCX0KKwlyZXR1cm47Cit9CisK
K2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrZXQgKnNv
Y2s7CisJc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyBl
bmNhcHM7CisJc3RydWN0IHNjdHBfZXZlbnQgZXZlbnQ7CisJdWludDE2X3QgZXZlbnRfdHlwZXNb
XSA9IHtTQ1RQX0FTU09DX0NIQU5HRSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBf
UEVFUl9BRERSX0NIQU5HRSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUkVNT1RF
X0VSUk9SLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TSFVURE9XTl9FVkVOVCwK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OLAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5UfTsK
Kwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSBhdjsKKwljb25zdCBp
bnQgb24gPSAxOworCisJaWYgKGFyZ2MgPiAxKSB7CisJCXVzcnNjdHBfaW5pdChhdG9pKGFyZ3Zb
MV0pLCBOVUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0gZWxzZSB7CisJCXVzcnNjdHBfaW5p
dCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGZfc3RhY2spOworCX0KKyNpZmRlZiBTQ1RQX0RFQlVH
CisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsKKyNl
bmRpZgorCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKKwl1c3JzY3RwX3N5
c2N0bF9zZXRfc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKDApOworCisJaWYgKChzb2NrID0gdXNy
c2N0cF9zb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFAsIE5VTEws
IE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsK
Kwl9CisJdXNyc2N0cF9zZXRfbm9uX2Jsb2NraW5nKHNvY2ssIDEpOworCWlmICh1c3JzY3RwX3Nl
dHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiwg
KGNvbnN0IHZvaWQqKSZvbiwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgPCAwKSB7CisJCXBlcnJv
cigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSIik7CisJfQor
CW1lbXNldCgmYXYsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpOworCWF2LmFz
c29jX2lkID0gU0NUUF9BTExfQVNTT0M7CisJYXYuYXNzb2NfdmFsdWUgPSA0NzsKKworCWlmICh1
c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0NPTlRFWFQsIChjb25z
dCB2b2lkKikmYXYsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkg
PCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfQ09OVEVYVCIpOworCX0K
KwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRUNWUkNW
SU5GTywgJm9uLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nr
b3B0IFNDVFBfUkVDVlJDVklORk8iKTsKKwl9CisJaWYgKGFyZ2MgPiAyKSB7CisJCW1lbXNldCgm
ZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7CisJCWVuY2Fwcy5zdWVf
YWRkcmVzcy5zc19mYW1pbHkgPSBBRl9JTkVUNjsKKwkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMo
YXRvaShhcmd2WzJdKSk7CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19T
Q1RQLCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQsIChjb25zdCB2b2lkKikmZW5jYXBzLCAo
c29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKKwkJCXBlcnJv
cigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCIpOworCQl9
CisJfQorCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZihldmVudCkpOworCWV2ZW50LnNlX2Fzc29j
X2lkID0gU0NUUF9GVVRVUkVfQVNTT0M7CisJZXZlbnQuc2Vfb24gPSAxOworCWZvciAoaSA9IDA7
IGkgPCAodW5zaWduZWQgaW50KShzaXplb2YoZXZlbnRfdHlwZXMpL3NpemVvZih1aW50MTZfdCkp
OyBpKyspIHsKKwkJZXZlbnQuc2VfdHlwZSA9IGV2ZW50X3R5cGVzW2ldOworCQlpZiAodXNyc2N0
cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9FVkVOVCwgJmV2ZW50LCBzaXpl
b2Yoc3RydWN0IHNjdHBfZXZlbnQpKSA8IDApIHsKKwkJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nr
b3B0IFNDVFBfRVZFTlQiKTsKKwkJfQorCX0KKworCXVzcnNjdHBfc2V0X3VwY2FsbChzb2NrLCBo
YW5kbGVfdXBjYWxsLCBOVUxMKTsKKworCW1lbXNldCgodm9pZCAqKSZhZGRyLCAwLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlhZGRyLnNpbjZf
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJYWRkci5zaW42X2Zh
bWlseSA9IEFGX0lORVQ2OworCWFkZHIuc2luNl9wb3J0ID0gaHRvbnMoUE9SVCk7CisJYWRkci5z
aW42X2FkZHIgPSBpbjZhZGRyX2FueTsKKwlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qg
c29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDApIHsKKwkJ
cGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwl9CisJaWYgKHVzcnNjdHBfbGlzdGVuKHNvY2ssIDEp
IDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJfQorCXdoaWxlICgxKSB7Cisj
aWZkZWYgX1dJTjMyCisJCVNsZWVwKDEqMTAwMCk7CisjZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRp
ZgorCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWty
X2NsaWVudC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX2NsaWVudC5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUw
ZTU1M2VkZWI5M2U4ZGE0NTk3Y2IzMjNiYzY1Yzg2ZDE2NWFkZDkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9wcm9ncmFtcy9la3JfY2xpZW50LmMKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9q
ZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
CisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9X
SU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisj
aW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRl
IDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNs
dWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgorI2luY2x1ZGUg
InByb2dyYW1zX2hlbHBlci5oIgorCisjZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAoMTw8MTYpCisj
ZGVmaW5lIEJVRkZFUl9TSVpFIDgwCisjZGVmaW5lIERJU0NBUkRfUFBJRCAzOQorCisjaWZkZWYg
X1dJTjMyCitzdGF0aWMgRFdPUkQgV0lOQVBJCisjZWxzZQorc3RhdGljIHZvaWQgKgorI2VuZGlm
CitoYW5kbGVfcGFja2V0cyh2b2lkICphcmcpCit7CisjaWZkZWYgX1dJTjMyCisJU09DS0VUICpm
ZHA7CisjZWxzZQorCWludCAqZmRwOworI2VuZGlmCisJY2hhciAqZHVtcF9idWY7CisJc3NpemVf
dCBsZW5ndGg7CisJY2hhciBidWZbTUFYX1BBQ0tFVF9TSVpFXTsKKworI2lmZGVmIF9XSU4zMgor
CWZkcCA9IChTT0NLRVQgKilhcmc7CisjZWxzZQorCWZkcCA9IChpbnQgKilhcmc7CisjZW5kaWYK
Kwlmb3IgKDs7KSB7CisjaWYgZGVmaW5lZChfX05ldEJTRF9fKQorCQlwdGhyZWFkX3Rlc3RjYW5j
ZWwoKTsKKyNlbmRpZgorCQlsZW5ndGggPSByZWN2KCpmZHAsIGJ1ZiwgTUFYX1BBQ0tFVF9TSVpF
LCAwKTsKKwkJaWYgKGxlbmd0aCA+IDApIHsKKwkJCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1
bXBwYWNrZXQoYnVmLCAoc2l6ZV90KWxlbmd0aCwgU0NUUF9EVU1QX0lOQk9VTkQpKSAhPSBOVUxM
KSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIlcyIsIGR1bXBfYnVmKTsKKwkJCQl1c3JzY3RwX2Zy
ZWVkdW1wYnVmZmVyKGR1bXBfYnVmKTsKKwkJCX0KKwkJCXVzcnNjdHBfY29ubmlucHV0KGZkcCwg
YnVmLCAoc2l6ZV90KWxlbmd0aCwgMCk7CisJCX0KKwl9CisjaWZkZWYgX1dJTjMyCisJcmV0dXJu
IDA7CisjZWxzZQorCXJldHVybiAoTlVMTCk7CisjZW5kaWYKK30KKworc3RhdGljIGludAorY29u
bl9vdXRwdXQodm9pZCAqYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90IHRv
cywgdWludDhfdCBzZXRfZGYpCit7CisJY2hhciAqZHVtcF9idWY7CisjaWZkZWYgX1dJTjMyCisJ
U09DS0VUICpmZHA7CisjZWxzZQorCWludCAqZmRwOworI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIK
KwlmZHAgPSAoU09DS0VUICopYWRkcjsKKyNlbHNlCisJZmRwID0gKGludCAqKWFkZHI7CisjZW5k
aWYKKwlpZiAoKGR1bXBfYnVmID0gdXNyc2N0cF9kdW1wcGFja2V0KGJ1ZiwgbGVuZ3RoLCBTQ1RQ
X0RVTVBfT1VUQk9VTkQpKSAhPSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBkdW1w
X2J1Zik7CisJCXVzcnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOworCX0KKyNpZmRlZiBf
V0lOMzIKKwlpZiAoc2VuZCgqZmRwLCBidWYsIChpbnQpbGVuZ3RoLCAwKSA9PSBTT0NLRVRfRVJS
T1IpIHsKKwkJcmV0dXJuIChXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCWlmIChzZW5kKCpm
ZHAsIGJ1ZiwgbGVuZ3RoLCAwKSA8IDApIHsKKwkJcmV0dXJuIChlcnJubyk7CisjZW5kaWYKKwl9
IGVsc2UgeworCQlyZXR1cm4gKDApOworCX0KK30KKworc3RhdGljIGludAorcmVjZWl2ZV9jYihz
dHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRh
LAorICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGlu
dCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7CisKKwlpZiAoZGF0YSkgeworCQlpZiAoZmxhZ3Mg
JiBNU0dfTk9USUZJQ0FUSU9OKSB7CisJCQlwcmludGYoIk5vdGlmaWNhdGlvbiBvZiBsZW5ndGgg
JWQgcmVjZWl2ZWQuXG4iLCAoaW50KWRhdGFsZW4pOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJN
c2cgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIHZpYSAlcDoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04g
JXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldS5cbiIsCisJCQkgICAgICAgKGludClk
YXRhbGVuLAorCQkJICAgICAgIGFkZHIuc2Nvbm4uc2Nvbm5fYWRkciwKKwkJCSAgICAgICBudG9o
cyhhZGRyLnNjb25uLnNjb25uX3BvcnQpLAorCQkJICAgICAgIHJjdi5yY3Zfc2lkLAorCQkJICAg
ICAgIHJjdi5yY3Zfc3NuLAorCQkJICAgICAgIHJjdi5yY3ZfdHNuLAorCQkJICAgICAgICh1aW50
MzJfdCludG9obChyY3YucmN2X3BwaWQpLAorCQkJICAgICAgIHJjdi5yY3ZfY29udGV4dCk7CisJ
CX0KKwkJZnJlZShkYXRhKTsKKwl9IGVsc2UgeworCQl1c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVz
cyh1bHBfaW5mbyk7CisJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJfQorCXJldHVybiAoMSk7Cit9
CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrYWRk
cl9pbiBzaW47CisJc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47CisjaWZkZWYgX1dJTjMyCisJ
U09DS0VUIGZkOworI2Vsc2UKKwlpbnQgZmQsIHJjOworI2VuZGlmCisJc3RydWN0IHNvY2tldCAq
czsKKyNpZmRlZiBfV0lOMzIKKwlIQU5ETEUgdGlkOworI2Vsc2UKKwlwdGhyZWFkX3QgdGlkOwor
I2VuZGlmCisJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOworCWNoYXIgYnVmZmVyW0JVRkZF
Ul9TSVpFXTsKKyNpZmRlZiBfV0lOMzIKKwlXU0FEQVRBIHdzYURhdGE7CisjZW5kaWYKKworCWlm
IChhcmdjIDwgNCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB0aGlzIHByb2dyYW0gcmVx
dWlyZXMgNCBhcmd1bWVudHMhXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworI2lm
ZGVmIF9XSU4zMgorCWlmIChXU0FTdGFydHVwKE1BS0VXT1JEKDIsMiksICZ3c2FEYXRhKSAhPSAw
KSB7CisJCWZwcmludGYoc3RkZXJyLCAiV1NBU3RhcnR1cCBmYWlsZWRcbiIpOworCQlleGl0IChF
WElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCXVzcnNjdHBfaW5pdCgwLCBjb25uX291dHB1dCwg
ZGVidWdfcHJpbnRmX3N0YWNrKTsKKwkvKiBzZXQgdXAgYSBjb25uZWN0ZWQgVURQIHNvY2tldCAq
LworI2lmZGVmIF9XSU4zMgorCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwg
SVBQUk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworCQlmcHJpbnRmKHN0ZGVyciwgInNv
Y2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoKGZkID0gc29ja2V0KEFGX0lORVQs
IFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPCAwKSB7CisJCXBlcnJvcigic29ja2V0Iik7CisJ
CWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRl
ZiBIQVZFX1NJTl9MRU4KKwlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
OworI2VuZGlmCisJc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7CisJaWYgKCFp
bmV0X3B0b24oQUZfSU5FVCwgYXJndlsxXSwgJnNpbi5zaW5fYWRkci5zX2FkZHIpKXsKKwkJZnBy
aW50ZihzdGRlcnIsICJlcnJvcjogaW52YWxpZCBhZGRyZXNzXG4iKTsKKwkJZXhpdChFWElUX0ZB
SUxVUkUpOworCX0KKyNpZmRlZiBfV0lOMzIKKwlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRk
ciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsK
KwkJZnByaW50ZihzdGRlcnIsICJiaW5kKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FH
ZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChi
aW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpIDwgMCkgeworCQlwZXJyb3IoImJpbmQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0K
KyNlbmRpZgorCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJ
c2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCXNpbi5zaW5f
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlzaW4uc2luX3BvcnQg
PSBodG9ucyhhdG9pKGFyZ3ZbNF0pKTsKKwlpZiAoIWluZXRfcHRvbihBRl9JTkVULCBhcmd2WzNd
LCAmc2luLnNpbl9hZGRyLnNfYWRkcikpeworCQlwcmludGYoImVycm9yOiBpbnZhbGlkIGFkZHJl
c3NcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2lmZGVmIF9XSU4zMgorCWlmIChj
b25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlmcHJpbnRmKHN0ZGVyciwgImNvbm5lY3QoKSBm
YWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElU
X0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigiY29u
bmVjdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisjaWZkZWYgU0NUUF9E
RUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9ORSk7
CisjZW5kaWYKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9lY25fZW5hYmxlKDApOworCXVzcnNj
dHBfcmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZmZCk7CisjaWZkZWYgX1dJTjMyCisJaWYgKCh0
aWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZCwg
MCwgTlVMTCkpID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJDcmVhdGVUaHJlYWQoKSBm
YWlsZWQgd2l0aCBlcnJvcjogJWx1XG4iLCBHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisjZWxzZQorCWlmICgocmMgPSBwdGhyZWFkX2NyZWF0ZSgmdGlkLCBOVUxM
LCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkKSkgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVy
ciwgInB0aHJlYWRfY3JlYXRlOiAlc1xuIiwgc3RyZXJyb3IocmMpKTsKKwkJZXhpdChFWElUX0ZB
SUxVUkUpOworCX0KKyNlbmRpZgorCWlmICgocyA9IHVzcnNjdHBfc29ja2V0KEFGX0NPTk4sIFNP
Q0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIHJlY2VpdmVfY2IsIE5VTEwsIDAsICZmZCkpID09IE5V
TEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOworCX0KKworCW1lbXNldCgmc2Nvbm4s
IDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25uX2ZhbWlseSA9
IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9sZW4gPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0
b25zKDApOworCXNjb25uLnNjb25uX2FkZHIgPSBOVUxMOworCWlmICh1c3JzY3RwX2JpbmQocywg
KHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkg
PCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9iaW5kIik7CisJfQorCisJbWVtc2V0KCZzY29ubiwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5fZmFtaWx5ID0g
QUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9wb3J0ID0gaHRv
bnMoNTAwMSk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZDsKKwlpZiAodXNyc2N0cF9jb25uZWN0
KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29u
bikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfY29ubmVjdCIpOworCX0KKwltZW1zZXQoYnVm
ZmVyLCAnQScsIEJVRkZFUl9TSVpFKTsKKwlzbmRpbmZvLnNuZF9zaWQgPSAxOworCXNuZGluZm8u
c25kX2ZsYWdzID0gMDsKKwlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoRElTQ0FSRF9QUElEKTsK
KwlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKKwlzbmRpbmZvLnNuZF9hc3NvY19pZCA9IDA7CisJ
aWYgKHVzcnNjdHBfc2VuZHYocywgYnVmZmVyLCBCVUZGRVJfU0laRSwgTlVMTCwgMCwgKHZvaWQg
Kikmc25kaW5mbywKKwkgICAgICAgICAgICAgICAgICAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qg
c2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZPLCAwKSA8IDApIHsKKwkJcGVycm9yKCJ1
c3JzY3RwX3NlbmR2Iik7CisJfQorCisJdXNyc2N0cF9zaHV0ZG93bihzLCBTSFVUX1dSKTsKKwl3
aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAwKSB7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEw
MDApOworI2Vsc2UKKwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9CisjaWZkZWYgX1dJTjMyCisJVGVy
bWluYXRlVGhyZWFkKHRpZCwgMCk7CisJV2FpdEZvclNpbmdsZU9iamVjdCh0aWQsIElORklOSVRF
KTsKKwlpZiAoY2xvc2Vzb2NrZXQoZmQpID09IFNPQ0tFVF9FUlJPUikgeworCQlmcHJpbnRmKHN0
ZGVyciwgImNsb3Nlc29ja2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0
RXJyb3IoKSk7CisJfQorCVdTQUNsZWFudXAoKTsKKyNlbHNlCisJcHRocmVhZF9jYW5jZWwodGlk
KTsKKwlwdGhyZWFkX2pvaW4odGlkLCBOVUxMKTsKKwlpZiAoY2xvc2UoZmQpIDwgMCkgeworCQlw
ZXJyb3IoImNsb3NlIik7CisJfQorI2VuZGlmCisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9sb29wLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3JfbG9v
cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY1ZmRiNGE3MDNkM2Y3NzM2NjU5ZWExZThkNDNiOWM4NmZhNmMxNTcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3JfbG9vcC5jCkBAIC0wLDAg
KzEsNjY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTWljaGFlbCBUdWV4ZW4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVD
VCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
UFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICovCisKKy8qCisgKiBVc2FnZTogZWtyX2xvb3AgW2NsaWVudF9wb3J0XSBbc2VydmVyX3BvcnRd
IFtjcmMzMmMgb2ZmbG9hZGluZyA8MC8xPl0KKyAqLworCisjaWZkZWYgX1dJTjMyCisjZGVmaW5l
IF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5o
PgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxzeXMv
c29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5o
PgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHVu
aXN0ZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlw
Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+CisjaW5jbHVkZSAicHJvZ3JhbXNfaGVs
cGVyLmgiCisKKyNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFICgxPDwxNikKKyNkZWZpbmUgTElORV9M
RU5HVEggKDE8PDIwKQorI2RlZmluZSBESVNDQVJEX1BQSUQgMzkKKyNkZWZpbmUgTlVNQkVSX09G
X1NURVBTIDEwCisKK3N0YXRpYyB1aW50OF90IGNyYzMyY19vZmZsb2FkaW5nID0gMDsKKworI2lm
ZGVmIF9XSU4zMgorc3RhdGljIERXT1JEIFdJTkFQSQorI2Vsc2UKK3N0YXRpYyB2b2lkICoKKyNl
bmRpZgoraGFuZGxlX3BhY2tldHModm9pZCAqYXJnKQoreworI2lmZGVmIF9XSU4zMgorCVNPQ0tF
VCAqZmRwOworI2Vsc2UKKwlpbnQgKmZkcDsKKyNlbmRpZgorCWNoYXIgKmR1bXBfYnVmOworCXN0
cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIgKmhkcjsKKwlzc2l6ZV90IGxlbmd0aDsKKwljaGFyIGJ1
ZltNQVhfUEFDS0VUX1NJWkVdOworCXVpbnQzMl90IHJlY2VpdmVkX2NyYzMyYywgY29tcHV0ZWRf
Y3JjMzJjOworCisjaWZkZWYgX1dJTjMyCisJZmRwID0gKFNPQ0tFVCAqKWFyZzsKKyNlbHNlCisJ
ZmRwID0gKGludCAqKWFyZzsKKyNlbmRpZgorCWZvciAoOzspIHsKKyNpZiBkZWZpbmVkKF9fTmV0
QlNEX18pCisJCXB0aHJlYWRfdGVzdGNhbmNlbCgpOworI2VuZGlmCisJCWxlbmd0aCA9IHJlY3Yo
KmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJWkUsIDApOworCQlpZiAobGVuZ3RoID4gMCkgeworCQkJ
aWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tldChidWYsIChzaXplX3QpbGVuZ3RoLCBT
Q1RQX0RVTVBfSU5CT1VORCkpICE9IE5VTEwpIHsKKwkJCQkvKiBkZWJ1Z19wcmludGZfY2xlYW4o
IiVzIiwgZHVtcF9idWYpOyAqLworCQkJCXVzcnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYp
OworCQkJfQorCisJCQlpZiAoY3JjMzJjX29mZmxvYWRpbmcpIHsKKwkJCQlpZiAoKHNpemVfdCls
ZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIpKSB7CisJCQkJCWhkciA9
IChzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyICopYnVmOworCQkJCQlyZWNlaXZlZF9jcmMzMmMg
PSBoZHItPmNyYzMyYzsKKwkJCQkJaGRyLT5jcmMzMmMgPSBodG9ubCgwKTsKKwkJCQkJY29tcHV0
ZWRfY3JjMzJjID0gdXNyc2N0cF9jcmMzMmMoYnVmLCAoc2l6ZV90KWxlbmd0aCk7CisJCQkJCWhk
ci0+Y3JjMzJjID0gcmVjZWl2ZWRfY3JjMzJjOworCQkJCQlpZiAocmVjZWl2ZWRfY3JjMzJjID09
IGNvbXB1dGVkX2NyYzMyYykgeworCQkJCQkJdXNyc2N0cF9jb25uaW5wdXQoZmRwLCBidWYsIChz
aXplX3QpbGVuZ3RoLCAwKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWRlYnVnX3ByaW50ZigiV3Jv
bmcgQ1JDMzJjOiBleHBlY3RlZCAlMDh4IHJlY2VpdmVkICUwOHhcbiIsCisJCQkJCQkgICAgICAg
ICAgICAgbnRvaGwoY29tcHV0ZWRfY3JjMzJjKSwgbnRvaGwocmVjZWl2ZWRfY3JjMzJjKSk7CisJ
CQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlkZWJ1Z19wcmludGYoIlBhY2tldCB0b28gc2hvcnQ6
IGxlbmd0aCAlemQiLCBsZW5ndGgpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdXNyc2N0cF9j
b25uaW5wdXQoZmRwLCBidWYsIChzaXplX3QpbGVuZ3RoLCAwKTsKKwkJCX0KKwkJfQorCX0KKyNp
ZmRlZiBfV0lOMzIKKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIChOVUxMKTsKKyNlbmRpZgor
fQorCitzdGF0aWMgaW50Citjb25uX291dHB1dCh2b2lkICphZGRyLCB2b2lkICpidWYsIHNpemVf
dCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZikKK3sKKwljaGFyICpkdW1wX2J1
ZjsKKwlzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyICpoZHI7CisjaWZkZWYgX1dJTjMyCisJU09D
S0VUICpmZHA7CisjZWxzZQorCWludCAqZmRwOworI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKwlm
ZHAgPSAoU09DS0VUICopYWRkcjsKKyNlbHNlCisJZmRwID0gKGludCAqKWFkZHI7CisjZW5kaWYK
KwlpZiAoY3JjMzJjX29mZmxvYWRpbmcgJiYgbGVuZ3RoID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9j
b21tb25faGVhZGVyKSkgeworCQloZHIgPSAoc3RydWN0IHNjdHBfY29tbW9uX2hlYWRlciAqKWJ1
ZjsKKwkJaGRyLT5jcmMzMmMgPSB1c3JzY3RwX2NyYzMyYyhidWYsIChzaXplX3QpbGVuZ3RoKTsK
Kwl9CisKKwlpZiAoKGR1bXBfYnVmID0gdXNyc2N0cF9kdW1wcGFja2V0KGJ1ZiwgbGVuZ3RoLCBT
Q1RQX0RVTVBfT1VUQk9VTkQpKSAhPSBOVUxMKSB7CisJCS8qIGRlYnVnX3ByaW50Zl9jbGVhbigi
JXMiLCBkdW1wX2J1Zik7ICovCisJCXVzcnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOwor
CX0KKyNpZmRlZiBfV0lOMzIKKwlpZiAoc2VuZCgqZmRwLCBidWYsIChpbnQpbGVuZ3RoLCAwKSA9
PSBTT0NLRVRfRVJST1IpIHsKKwkJcmV0dXJuIChXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQor
CWlmIChzZW5kKCpmZHAsIGJ1ZiwgbGVuZ3RoLCAwKSA8IDApIHsKKwkJcmV0dXJuIChlcnJubyk7
CisjZW5kaWYKKwl9IGVsc2UgeworCQlyZXR1cm4gKDApOworCX0KK30KKworc3RhdGljIGludAor
cmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRy
LCB2b2lkICpkYXRhLAorICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2
aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7CisJZGVidWdfcHJpbnRmKCJN
U0cgUkNWOiAlcCByZWNlaXZlZCBvbiBzb2NrID0gJXAuXG4iLCBkYXRhLCAodm9pZCAqKXNvY2sp
OworCWlmIChkYXRhKSB7CisJCWlmICgoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSA9PSAwKSB7
CisJCQlkZWJ1Z19wcmludGYoIk1TRyBSQ1Y6IGxlbmd0aCAlZCwgYWRkciAlcDoldSwgc3RyZWFt
ICV1LCBTU04gJXUsIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldSwgJXMlcy5cbiIsCisJCQkg
ICAgICAgKGludClkYXRhbGVuLAorCQkJICAgICAgIGFkZHIuc2Nvbm4uc2Nvbm5fYWRkciwKKwkJ
CSAgICAgICBudG9ocyhhZGRyLnNjb25uLnNjb25uX3BvcnQpLAorCQkJICAgICAgIHJjdi5yY3Zf
c2lkLAorCQkJICAgICAgIHJjdi5yY3Zfc3NuLAorCQkJICAgICAgIHJjdi5yY3ZfdHNuLAorCQkJ
ICAgICAgIG50b2hsKHJjdi5yY3ZfcHBpZCksCisJCQkgICAgICAgcmN2LnJjdl9jb250ZXh0LAor
CQkJICAgICAgIChyY3YucmN2X2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpID8gInVub3JkZXJlZCIg
OiAib3JkZXJlZCIsCisJCQkJICAgKGZsYWdzICYgTVNHX0VPUikgPyAiLCBFT1IiIDogIiIpOwor
CQl9CisJCWZyZWUoZGF0YSk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJl
c3ModWxwX2luZm8pOworCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCX0KKwlyZXR1cm4gKDEpOwor
fQorCitzdGF0aWMgdm9pZAorcHJpbnRfYWRkcmVzc2VzKHN0cnVjdCBzb2NrZXQgKnNvY2spCit7
CisJaW50IGksIG47CisJc3RydWN0IHNvY2thZGRyICphZGRycywgKmFkZHI7CisjaWYgIWRlZmlu
ZWQoSEFWRV9TQV9MRU4pCisJaW50IHNhX2xlbjsKKyNlbmRpZgorCisJZGVidWdfcHJpbnRmKCJB
ZGRyZXNzZXM6ICIpOworCW4gPSB1c3JzY3RwX2dldGxhZGRycyhzb2NrLCAwLCAmYWRkcnMpOwor
CWFkZHIgPSBhZGRyczsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN3aXRjaCAoYWRk
ci0+c2FfZmFtaWx5KSB7CisJCWNhc2UgQUZfSU5FVDoKKwkJeworCQkJc3RydWN0IHNvY2thZGRy
X2luICpzaW47CisJCQljaGFyIGJ1ZltJTkVUX0FERFJTVFJMRU5dOworCQkJY29uc3QgY2hhciAq
bmFtZTsKKworCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQluYW1lID0g
aW5ldF9udG9wKEFGX0lORVQsICZzaW4tPnNpbl9hZGRyLCBidWYsIElORVRfQUREUlNUUkxFTik7
CisJCQlkZWJ1Z19wcmludGZfY2xlYW4oIiVzOiVkIiwgbmFtZSwgbnRvaHMoc2luLT5zaW5fcG9y
dCkpOworI2lmICFkZWZpbmVkKEhBVkVfU0FfTEVOKQorCQkJc2FfbGVuID0gKGludClzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBBRl9J
TkVUNjoKKwkJeworCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwkJCWNoYXIgYnVmW0lO
RVQ2X0FERFJTVFJMRU5dOworCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJc2luNiA9IChzdHJ1
Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZz
aW42LT5zaW42X2FkZHIsIGJ1ZiwgSU5FVDZfQUREUlNUUkxFTik7CisJCQlkZWJ1Z19wcmludGZf
Y2xlYW4oIiVzOiVkIiwgbmFtZSwgbnRvaHMoc2luNi0+c2luNl9wb3J0KSk7CisjaWYgIWRlZmlu
ZWQoSEFWRV9TQV9MRU4pCisJCQlzYV9sZW4gPSAoaW50KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW42KTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBBRl9DT05OOgorCQl7CisJCQlz
dHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisKKwkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRk
cl9jb25uICopYWRkcjsKKwkJCWRlYnVnX3ByaW50Zl9jbGVhbigiJXA6JWQiLCBzY29ubi0+c2Nv
bm5fYWRkciwgbnRvaHMoc2Nvbm4tPnNjb25uX3BvcnQpKTsKKyNpZiAhZGVmaW5lZChIQVZFX1NB
X0xFTikKKwkJCXNhX2xlbiA9IChpbnQpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNl
bmRpZgorCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCWRlYnVnX3ByaW50Zl9jbGVhbigi
VW5rbm93biBmYW1pbHk6ICVkIiwgYWRkci0+c2FfZmFtaWx5KTsKKyNpZiAhZGVmaW5lZChIQVZF
X1NBX0xFTikKKwkJCXNhX2xlbiA9IChpbnQpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcik7CisjZW5k
aWYKKwkJCWJyZWFrOworCQl9CisjaWYgIWRlZmluZWQoSEFWRV9TQV9MRU4pCisJCWFkZHIgPSAo
c3RydWN0IHNvY2thZGRyICopKChjaGFyICopYWRkciArIHNhX2xlbik7CisjZWxzZQorCQlhZGRy
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2FfbGVuKTsKKyNl
bmRpZgorCQlpZiAoaSAhPSBuIC0gMSkgeworCQkJZGVidWdfcHJpbnRmX2NsZWFuKCIsIik7CisJ
CX0KKwl9CisJaWYgKG4gPiAwKSB7CisJCXVzcnNjdHBfZnJlZWxhZGRycyhhZGRycyk7CisJfQor
CWRlYnVnX3ByaW50Zl9jbGVhbigiPC0+Iik7CisJbiA9IHVzcnNjdHBfZ2V0cGFkZHJzKHNvY2ss
IDAsICZhZGRycyk7CisJYWRkciA9IGFkZHJzOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsK
KwkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKwkJY2FzZSBBRl9JTkVUOgorCQl7CisJCQlz
dHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwkJCWNoYXIgYnVmW0lORVRfQUREUlNUUkxFTl07CisJ
CQljb25zdCBjaGFyICpuYW1lOworCisJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRk
cjsKKwkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVCwgJnNpbi0+c2luX2FkZHIsIGJ1ZiwgSU5F
VF9BRERSU1RSTEVOKTsKKwkJCWRlYnVnX3ByaW50Zl9jbGVhbigiJXM6JWQiLCBuYW1lLCBudG9o
cyhzaW4tPnNpbl9wb3J0KSk7CisjaWYgIWRlZmluZWQoSEFWRV9TQV9MRU4pCisJCQlzYV9sZW4g
PSAoaW50KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCQlicmVhazsKKwkJ
fQorCQljYXNlIEFGX0lORVQ2OgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42Owor
CQkJY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07CisJCQljb25zdCBjaGFyICpuYW1lOworCisJ
CQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQkJbmFtZSA9IGluZXRfbnRv
cChBRl9JTkVUNiwgJnNpbjYtPnNpbjZfYWRkciwgYnVmLCBJTkVUNl9BRERSU1RSTEVOKTsKKwkJ
CWRlYnVnX3ByaW50Zl9jbGVhbigiJXM6JWQiLCBuYW1lLCBudG9ocyhzaW42LT5zaW42X3BvcnQp
KTsKKyNpZiAhZGVmaW5lZChIQVZFX1NBX0xFTikKKwkJCXNhX2xlbiA9IChpbnQpc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCQljYXNlIEFGX0NP
Tk46CisJCXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCQkJc2Nvbm4gPSAo
c3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQkJZGVidWdfcHJpbnRmX2NsZWFuKCIlcDol
ZCIsIHNjb25uLT5zY29ubl9hZGRyLCBudG9ocyhzY29ubi0+c2Nvbm5fcG9ydCkpOworI2lmICFk
ZWZpbmVkKEhBVkVfU0FfTEVOKQorCQkJc2FfbGVuID0gKGludClzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2Nvbm4pOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OgorCQkJZGVidWdf
cHJpbnRmX2NsZWFuKCJVbmtub3duIGZhbWlseTogJWQiLCBhZGRyLT5zYV9mYW1pbHkpOworI2lm
ICFkZWZpbmVkKEhBVkVfU0FfTEVOKQorCQkJc2FfbGVuID0gKGludClzaXplb2Yoc3RydWN0IHNv
Y2thZGRyKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKyNpZiAhZGVmaW5lZChIQVZFX1NBX0xF
TikKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNoYXIgKilhZGRyICsgc2FfbGVuKTsK
KyNlbHNlCisJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBhZGRy
LT5zYV9sZW4pOworI2VuZGlmCisJCWlmIChpICE9IG4gLSAxKSB7CisJCQlkZWJ1Z19wcmludGZf
Y2xlYW4oIiwiKTsKKwkJfQorCX0KKwlpZiAobiA+IDApIHsKKwkJdXNyc2N0cF9mcmVlcGFkZHJz
KGFkZHJzKTsKKwl9CisJZGVidWdfcHJpbnRmX2NsZWFuKCJcbiIpOworfQorCitpbnQKK21haW4o
aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3MsIHNp
bl9jOworCXN0cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOworCXN0cnVjdCBzY3RwX3BhZGRycGFy
YW1zIHBhZGRycGFyYW1zOworI2lmZGVmIF9XSU4zMgorCVNPQ0tFVCBmZF9jLCBmZF9zOworI2Vs
c2UKKwlpbnQgZmRfYywgZmRfcywgcmM7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0ICpzX2MsICpz
X3MsICpzX2w7CisjaWZkZWYgX1dJTjMyCisJSEFORExFIHRpZF9jLCB0aWRfczsKKyNlbHNlCisJ
cHRocmVhZF90IHRpZF9jLCB0aWRfczsKKyNlbmRpZgorCWludCBpLCBqLCBjdXJfYnVmX3NpemUs
IHNuZF9idWZfc2l6ZSwgcmN2X2J1Zl9zaXplLCBzZW5kdl9yZXRyaWVzX2xlZnQ7CisJc29ja2xl
bl90IG9wdF9sZW47CisJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOworCWNoYXIgKmxpbmU7
CisjaWZkZWYgX1dJTjMyCisJV1NBREFUQSB3c2FEYXRhOworI2VuZGlmCisJdWludDE2X3QgY2xp
ZW50X3BvcnQgPSA5OTAwOworCXVpbnQxNl90IHNlcnZlcl9wb3J0ID0gOTkwMTsKKworCWlmIChh
cmdjID4gMSkgeworCQljbGllbnRfcG9ydCA9IGF0b2koYXJndlsxXSk7CisJfQorCisJaWYgKGFy
Z2MgPiAyKSB7CisJCXNlcnZlcl9wb3J0ID0gYXRvaShhcmd2WzJdKTsKKwl9CisKKwlpZiAoYXJn
YyA+IDMpIHsKKwkJY3JjMzJjX29mZmxvYWRpbmcgPSBhdG9pKGFyZ3ZbM10pOworCX0KKworCWRl
YnVnX3ByaW50ZigiU3RhcnRpbmcgcHJvZ3JhbVxuIik7CisJZGVidWdfcHJpbnRmKCJDb25maWc6
XG5cdENsaWVudCBQb3J0Olx0JWRcblx0U2VydmVyIFBvcnQ6XHQlZFxuXHRDUkMzMkMgQ2FsYzpc
dCVzXG4iLCBjbGllbnRfcG9ydCwgc2VydmVyX3BvcnQsIGNyYzMyY19vZmZsb2FkaW5nID8gIm9m
ZmxvYWRlZCIgOiAiTk9UIG9mZmxvYWRlZCIpOworCisjaWZkZWYgX1dJTjMyCisJaWYgKFdTQVN0
YXJ0dXAoTUFLRVdPUkQoMiwyKSwgJndzYURhdGEpICE9IDApIHsKKwkJZGVidWdfcHJpbnRmKCJX
U0FTdGFydHVwIGZhaWxlZFxuIik7CisJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlm
CisJdXNyc2N0cF9pbml0KDAsIGNvbm5fb3V0cHV0LCBkZWJ1Z19wcmludGZfc3RhY2spOworCisj
aWZkZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBf
REVCVUdfTk9ORSk7CisjZW5kaWYKKworCWlmIChjcmMzMmNfb2ZmbG9hZGluZykgeworCQl1c3Jz
Y3RwX2VuYWJsZV9jcmMzMmNfb2ZmbG9hZCgpOworCX0KKworCS8qIHNldCB1cCBhIGNvbm5lY3Rl
ZCBVRFAgc29ja2V0ICovCisjaWZkZWYgX1dJTjMyCisJaWYgKChmZF9jID0gc29ja2V0KEFGX0lO
RVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkJZGVi
dWdfcHJpbnRmKCJzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RF
cnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoKGZkX3MgPSBzb2NrZXQo
QUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgewor
CQlkZWJ1Z19wcmludGYoInNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0
TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoKGZk
X2MgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKKwkJ
cGVycm9yKCJzb2NrZXQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoKGZkX3Mg
PSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKKwkJcGVy
cm9yKCJzb2NrZXQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCW1lbXNl
dCgmc2luX2MsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlzaW5fYy5zaW5fZmFt
aWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW5fYy5zaW5fbGVuID0gc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlzaW5fYy5zaW5fcG9ydCA9IGh0b25z
KGNsaWVudF9wb3J0KTsKKwlzaW5fYy5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9P
UEJBQ0spOworCW1lbXNldCgmc2luX3MsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsK
KwlzaW5fcy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW5f
cy5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlzaW5fcy5z
aW5fcG9ydCA9IGh0b25zKHNlcnZlcl9wb3J0KTsKKwlzaW5fcy5zaW5fYWRkci5zX2FkZHIgPSBo
dG9ubChJTkFERFJfTE9PUEJBQ0spOworI2lmZGVmIF9XSU4zMgorCWlmIChiaW5kKGZkX2MsIChz
dHJ1Y3Qgc29ja2FkZHIgKikmc2luX2MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBT
T0NLRVRfRVJST1IpIHsKKwkJZGVidWdfcHJpbnRmKCJiaW5kKCkgZmFpbGVkIHdpdGggZXJyb3I6
ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJ
aWYgKGJpbmQoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlkZWJ1Z19wcmludGYoImJpbmQoKSBm
YWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElU
X0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKGJpbmQoZmRfYywgKHN0cnVjdCBzb2NrYWRkciAq
KSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3IoImJp
bmQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoYmluZChmZF9zLCAoc3RydWN0
IHNvY2thZGRyICopJnNpbl9zLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJ
CXBlcnJvcigiYmluZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisjaWZk
ZWYgX1dJTjMyCisJaWYgKGNvbm5lY3QoZmRfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlkZWJ1Z19w
cmludGYoImNvbm5lY3QoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJv
cigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoY29ubmVjdChmZF9zLCAoc3Ry
dWN0IHNvY2thZGRyICopJnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09D
S0VUX0VSUk9SKSB7CisJCWRlYnVnX3ByaW50ZigiY29ubmVjdCgpIGZhaWxlZCB3aXRoIGVycm9y
OiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQor
I2Vsc2UKKwlpZiAoY29ubmVjdChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigiY29ubmVjdCIpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChjb25uZWN0KGZkX3MsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2luX2MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJcGVycm9y
KCJjb25uZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBf
V0lOMzIKKwlpZiAoKHRpZF9jID0gQ3JlYXRlVGhyZWFkKE5VTEwsIDAsICZoYW5kbGVfcGFja2V0
cywgKHZvaWQgKikmZmRfYywgMCwgTlVMTCkpID09IE5VTEwpIHsKKwkJZGVidWdfcHJpbnRmKCJD
cmVhdGVUaHJlYWQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIEdldExhc3RFcnJvcigpKTsK
KwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoKHRpZF9zID0gQ3JlYXRlVGhyZWFkKE5V
TEwsIDAsICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmRfcywgMCwgTlVMTCkpID09IE5VTEwp
IHsKKwkJZGVidWdfcHJpbnRmKCJDcmVhdGVUaHJlYWQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRc
biIsIEdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJ
aWYgKChyYyA9IHB0aHJlYWRfY3JlYXRlKCZ0aWRfYywgTlVMTCwgJmhhbmRsZV9wYWNrZXRzLCAo
dm9pZCAqKSZmZF9jKSkgIT0gMCkgeworCQlkZWJ1Z19wcmludGZfY2xlYW4oInB0aHJlYWRfY3Jl
YXRlIHRpZF9jOiAlc1xuIiwgc3RyZXJyb3IocmMpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOwor
CX0KKworCWlmICgocmMgPSBwdGhyZWFkX2NyZWF0ZSgmdGlkX3MsIE5VTEwsICZoYW5kbGVfcGFj
a2V0cywgKHZvaWQgKikmZmRfcykpICE9IDApIHsKKwkJZGVidWdfcHJpbnRmX2NsZWFuKCJwdGhy
ZWFkX2NyZWF0ZSB0aWRfczogJXNcbiIsIHN0cmVycm9yKHJjKSk7CisJCWV4aXQoRVhJVF9GQUlM
VVJFKTsKKwl9OworI2VuZGlmCisKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9lY25fZW5hYmxl
KDApOworCXVzcnNjdHBfcmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZmZF9jKTsKKwl1c3JzY3Rw
X3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmRfcyk7CisJaWYgKChzX2MgPSB1c3JzY3RwX3Nv
Y2tldChBRl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxM
LCAwLCAmZmRfYykpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCW9wdF9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQp
OworCWN1cl9idWZfc2l6ZSA9IDA7CisJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzX2MsIFNPTF9T
T0NLRVQsIFNPX1NOREJVRiwgJmN1cl9idWZfc2l6ZSwgJm9wdF9sZW4pIDwgMCkgeworCQlwZXJy
b3IoInVzcnNjdHBfZ2V0c29ja29wdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWRl
YnVnX3ByaW50ZigiQ2hhbmdlIHNlbmQgc29ja2V0IGJ1ZmZlciBzaXplIGZyb20gJWQgIiwgY3Vy
X2J1Zl9zaXplKTsKKwlzbmRfYnVmX3NpemUgPSAxPDwyMjsgLyogNCBNQiAqLworCWlmICh1c3Jz
Y3RwX3NldHNvY2tvcHQoc19jLCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZzbmRfYnVmX3NpemUs
IHNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQiKTsKKwkJ
ZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlvcHRfbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50
KTsKKwljdXJfYnVmX3NpemUgPSAwOworCWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc19jLCBTT0xf
U09DS0VULCBTT19TTkRCVUYsICZjdXJfYnVmX3NpemUsICZvcHRfbGVuKSA8IDApIHsKKwkJcGVy
cm9yKCJ1c3JzY3RwX2dldHNvY2tvcHQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlk
ZWJ1Z19wcmludGZfY2xlYW4oInRvICVkLlxuIiwgY3VyX2J1Zl9zaXplKTsKKwltZW1zZXQoJnBh
ZGRycGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMpKTsKKwlwYWRkcnBh
cmFtcy5zcHBfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5f
TEVOCisJcGFkZHJwYXJhbXMuc3BwX2FkZHJlc3Muc3NfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9jb25uKTsKKyNlbmRpZgorCXBhZGRycGFyYW1zLnNwcF9mbGFncyA9IFNQUF9QTVRVRF9E
SVNBQkxFOworCXBhZGRycGFyYW1zLnNwcF9wYXRobXR1ID0gOTAwMDsKKwlpZiAodXNyc2N0cF9z
ZXRzb2Nrb3B0KHNfYywgSVBQUk9UT19TQ1RQLCBTQ1RQX1BFRVJfQUREUl9QQVJBTVMsICZwYWRk
cnBhcmFtcywgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhZGRycGFyYW1zKSkgPCAwKSB7CisJCXBlcnJv
cigidXNyc2N0cF9zZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYg
KChzX2wgPSB1c3JzY3RwX3NvY2tldChBRl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQ
LCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmZmRfcykpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3Jz
Y3RwX3NvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCW9wdF9sZW4gPSAoc29j
a2xlbl90KXNpemVvZihpbnQpOworCWN1cl9idWZfc2l6ZSA9IDA7CisJaWYgKHVzcnNjdHBfZ2V0
c29ja29wdChzX2wsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJmN1cl9idWZfc2l6ZSwgJm9wdF9s
ZW4pIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfZ2V0c29ja29wdCIpOworCQlleGl0KEVYSVRf
RkFJTFVSRSk7CisJfQorCWRlYnVnX3ByaW50ZigiQ2hhbmdlIHJlY2VpdmUgc29ja2V0IGJ1ZmZl
ciBzaXplIGZyb20gJWQgIiwgY3VyX2J1Zl9zaXplKTsKKwlyY3ZfYnVmX3NpemUgPSAxPDwxNjsg
LyogNjQgS0IgKi8KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09f
UkNWQlVGLCAmcmN2X2J1Zl9zaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCXBlcnJvcigidXNy
c2N0cF9zZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJb3B0X2xlbiA9
IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7CisJY3VyX2J1Zl9zaXplID0gMDsKKwlpZiAodXNyc2N0
cF9nZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmY3VyX2J1Zl9zaXplLCAm
b3B0X2xlbikgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0Iik7CisJCWV4aXQo
RVhJVF9GQUlMVVJFKTsKKwl9CisJZGVidWdfcHJpbnRmX2NsZWFuKCJ0byAlZC5cbiIsIGN1cl9i
dWZfc2l6ZSk7CisJLyogQmluZCB0aGUgY2xpZW50IHNpZGUuICovCisJbWVtc2V0KCZzY29ubiwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5fZmFtaWx5ID0g
QUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9wb3J0ID0gaHRv
bnMoNTAwMSk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZF9jOworCWlmICh1c3JzY3RwX2JpbmQo
c19jLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nv
bm4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX0KKwkvKiBCaW5kIHRoZSBzZXJ2ZXIgc2lkZS4gKi8KKwltZW1zZXQoJnNjb25uLCAw
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9mYW1pbHkgPSBB
Rl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3BvcnQgPSBodG9u
cyg1MDAxKTsKKwlzY29ubi5zY29ubl9hZGRyID0gJmZkX3M7CisJaWYgKHVzcnNjdHBfYmluZChz
X2wsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29u
bikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCQlleGl0KEVYSVRfRkFJTFVS
RSk7CisJfQorCS8qIE1ha2Ugc2VydmVyIHNpZGUgcGFzc2l2ZS4uLiAqLworCWlmICh1c3JzY3Rw
X2xpc3RlbihzX2wsIDEpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJLyogSW5pdGlhdGUgdGhlIGhhbmRzaGFrZSAqLworCW1l
bXNldCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNj
b25uX2ZhbWlseSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29u
bl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nv
bm5fcG9ydCA9IGh0b25zKDUwMDEpOworCXNjb25uLnNjb25uX2FkZHIgPSAmZmRfYzsKKwlpZiAo
dXNyc2N0cF9jb25uZWN0KHNfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9jb25uKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9jb25uZWN0Iik7
CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKChzX3MgPSB1c3JzY3RwX2FjY2VwdChz
X2wsIE5VTEwsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9hY2NlcHQiKTsK
KwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwl1c3JzY3RwX2Nsb3NlKHNfbCk7CisJcHJpbnRf
YWRkcmVzc2VzKHNfcyk7CisKKwlpZiAoKGxpbmUgPSBtYWxsb2MoTElORV9MRU5HVEgpKSA9PSBO
VUxMKSB7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJbWVtc2V0KGxpbmUsICdBJywgTElO
RV9MRU5HVEgpOworCXNuZGluZm8uc25kX3NpZCA9IDE7CisJc25kaW5mby5zbmRfcHBpZCA9IGh0
b25sKERJU0NBUkRfUFBJRCk7CisJc25kaW5mby5zbmRfY29udGV4dCA9IDA7CisJc25kaW5mby5z
bmRfYXNzb2NfaWQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9PRl9TVEVQUzsgaSsr
KSB7CisJCWlmIChpICUgMikgeworCQkJc25kaW5mby5zbmRfZmxhZ3MgPSBTQ1RQX1VOT1JERVJF
RDsKKwkJfSBlbHNlIHsKKwkJCXNuZGluZm8uc25kX2ZsYWdzID0gMDsKKwkJfQorCQlmb3IgKGog
PSAwOyBqIDwgMjsgaisrKSB7CisJCQkvKiBTZW5kIGEgMSBNQiBtZXNzYWdlICovCisJCQlzZW5k
dl9yZXRyaWVzX2xlZnQgPSAxMjA7CisJCQlkZWJ1Z19wcmludGYoInVzcnNjcF9zZW5kdiAtIHN0
ZXAgJWQgLSBjYWxsICVkIGZsYWdzICV4XG4iLCBpLCBqICsgMSwgc25kaW5mby5zbmRfZmxhZ3Mp
OworCQkJd2hpbGUgKHVzcnNjdHBfc2VuZHYoc19jLCBsaW5lLCBMSU5FX0xFTkdUSCwgTlVMTCwg
MCwgKHZvaWQgKikmc25kaW5mbywKKwkJCQkJIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3Rw
X3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgeworCQkJCWRlYnVnX3ByaW50
ZigidXNyc2N0cF9zZW5kdiAtIGVycm5vOiAlZCAtICVzXG4iLCBlcnJubywgc3RyZXJyb3IoZXJy
bm8pKTsKKwkJCQlpZiAoZXJybm8gIT0gRVdPVUxEQkxPQ0sgfHwgIXNlbmR2X3JldHJpZXNfbGVm
dCkgeworCQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQkJfQorCQkJCXNlbmR2X3JldHJpZXNf
bGVmdC0tOworI2lmZGVmIF9XSU4zMgorCQkJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJCQlzbGVl
cCgxKTsKKyNlbmRpZgorCQkJfQorCQl9CisJCWRlYnVnX3ByaW50ZigiU2VuZGluZyBkb25lLCBz
bGVlcGluZ1xuIik7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJc2xl
ZXAoMSk7CisjZW5kaWYKKwl9CisJZnJlZShsaW5lKTsKKwl1c3JzY3RwX3NodXRkb3duKHNfYywg
U0hVVF9XUik7CisKKwl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAwKSB7CisJCWRlYnVnX3By
aW50ZigiV2FpdGluZyBmb3IgdXNyc2N0cF9maW5pc2goKVxuIik7CisjaWZkZWYgX1dJTjMyCisJ
CVNsZWVwKDEwMDApOworI2Vsc2UKKwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9CisjaWZkZWYgX1dJ
TjMyCisJVGVybWluYXRlVGhyZWFkKHRpZF9jLCAwKTsKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRp
ZF9jLCBJTkZJTklURSk7CisJVGVybWluYXRlVGhyZWFkKHRpZF9zLCAwKTsKKwlXYWl0Rm9yU2lu
Z2xlT2JqZWN0KHRpZF9zLCBJTkZJTklURSk7CisJaWYgKGNsb3Nlc29ja2V0KGZkX2MpID09IFNP
Q0tFVF9FUlJPUikgeworCQlkZWJ1Z19wcmludGYoImNsb3Nlc29ja2V0KCkgZmFpbGVkIHdpdGgg
ZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsK
Kwl9CisJaWYgKGNsb3Nlc29ja2V0KGZkX3MpID09IFNPQ0tFVF9FUlJPUikgeworCQlkZWJ1Z19w
cmludGYoImNsb3Nlc29ja2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0
RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJV1NBQ2xlYW51cCgpOworI2Vs
c2UKKwlwdGhyZWFkX2NhbmNlbCh0aWRfYyk7CisJcHRocmVhZF9qb2luKHRpZF9jLCBOVUxMKTsK
KwlwdGhyZWFkX2NhbmNlbCh0aWRfcyk7CisJcHRocmVhZF9qb2luKHRpZF9zLCBOVUxMKTsKKwlp
ZiAoY2xvc2UoZmRfYykgPCAwKSB7CisJCXBlcnJvcigiY2xvc2UiKTsKKwkJZXhpdChFWElUX0ZB
SUxVUkUpOworCX0KKwlpZiAoY2xvc2UoZmRfcykgPCAwKSB7CisJCXBlcnJvcigiY2xvc2UiKTsK
KwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3JfbG9vcF91cGNhbGwuYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3By
b2dyYW1zL2Vrcl9sb29wX3VwY2FsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkYjQ4MGE3MjljMzRiZjJlMWQ4
YzgzMWY0OTEzNDhlOTFmYzk0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFt
cy9la3JfbG9vcF91cGNhbGwuYwpAQCAtMCwwICsxLDcyOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDEzIE1pY2hhZWwgVHVleGVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBG
ZWxpeCBXZWlucmFuaworICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVW
RU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFVzYWdlOiBla3JfbG9vcCBbY2xpZW50X3BvcnRd
IFtzZXJ2ZXJfcG9ydF0gW2NyYzMyYyBvZmZsb2FkaW5nIDwwLzE+XQorICovCisKKyNpZmRlZiBf
V0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j
bHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgor
I2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVk
ZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZWxzZQorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5j
bHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHVzcnNjdHAuaD4KKyNpbmNsdWRl
ICJwcm9ncmFtc19oZWxwZXIuaCIKKworI2RlZmluZSBNQVhfUEFDS0VUX1NJWkUgKDE8PDE2KQor
I2RlZmluZSBMSU5FX0xFTkdUSCAoMTw8MjApCisjZGVmaW5lIERJU0NBUkRfUFBJRCAzOQorI2Rl
ZmluZSBOVU1CRVJfT0ZfU1RFUFMgMTAKKworc3RhdGljIHVpbnQ4X3QgY3JjMzJjX29mZmxvYWRp
bmcgPSAwOworCitzdHJ1Y3QgdXBjYWxsX21ldGEgeworCXVpbnQ4X3Qgc2VuZGVyOworCXZvaWQq
IGFkZHI7Cit9OworCisjaWZkZWYgX1dJTjMyCitzdGF0aWMgRFdPUkQgV0lOQVBJCisjZWxzZQor
c3RhdGljIHZvaWQgKgorI2VuZGlmCitoYW5kbGVfcGFja2V0cyh2b2lkICphcmcpCit7CisjaWZk
ZWYgX1dJTjMyCisJU09DS0VUICpmZHA7CisjZWxzZQorCWludCAqZmRwOworI2VuZGlmCisJY2hh
ciAqZHVtcF9idWY7CisJc3RydWN0IHNjdHBfY29tbW9uX2hlYWRlciAqaGRyOworCXNzaXplX3Qg
bGVuZ3RoOworCWNoYXIgYnVmW01BWF9QQUNLRVRfU0laRV07CisJdWludDMyX3QgcmVjZWl2ZWRf
Y3JjMzJjLCBjb21wdXRlZF9jcmMzMmM7CisKKyNpZmRlZiBfV0lOMzIKKwlmZHAgPSAoU09DS0VU
ICopYXJnOworI2Vsc2UKKwlmZHAgPSAoaW50ICopYXJnOworI2VuZGlmCisJZm9yICg7Oykgewor
I2lmIGRlZmluZWQoX19OZXRCU0RfXykKKwkJcHRocmVhZF90ZXN0Y2FuY2VsKCk7CisjZW5kaWYK
KwkJbGVuZ3RoID0gcmVjdigqZmRwLCBidWYsIE1BWF9QQUNLRVRfU0laRSwgMCk7CisJCWlmIChs
ZW5ndGggPiAwKSB7CisJCQlpZiAoKGR1bXBfYnVmID0gdXNyc2N0cF9kdW1wcGFja2V0KGJ1Ziwg
KHNpemVfdClsZW5ndGgsIFNDVFBfRFVNUF9JTkJPVU5EKSkgIT0gTlVMTCkgeworCQkJCS8vZGVi
dWdfcHJpbnRmX2NsZWFuKCIlc1xuIiwgZHVtcF9idWYpOworCQkJCXVzcnNjdHBfZnJlZWR1bXBi
dWZmZXIoZHVtcF9idWYpOworCQkJfQorCisJCQlpZiAoY3JjMzJjX29mZmxvYWRpbmcpIHsKKwkJ
CQlpZiAoKHNpemVfdClsZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIp
KSB7CisJCQkJCWhkciA9IChzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyICopYnVmOworCQkJCQly
ZWNlaXZlZF9jcmMzMmMgPSBoZHItPmNyYzMyYzsKKwkJCQkJaGRyLT5jcmMzMmMgPSBodG9ubCgw
KTsKKwkJCQkJY29tcHV0ZWRfY3JjMzJjID0gdXNyc2N0cF9jcmMzMmMoYnVmLCAoc2l6ZV90KWxl
bmd0aCk7CisJCQkJCWhkci0+Y3JjMzJjID0gcmVjZWl2ZWRfY3JjMzJjOworCQkJCQlpZiAocmVj
ZWl2ZWRfY3JjMzJjID09IGNvbXB1dGVkX2NyYzMyYykgeworCQkJCQkJdXNyc2N0cF9jb25uaW5w
dXQoZmRwLCBidWYsIChzaXplX3QpbGVuZ3RoLCAwKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWRl
YnVnX3ByaW50ZigiV3JvbmcgQ1JDMzJjOiBleHBlY3RlZCAlMDh4IHJlY2VpdmVkICUwOHhcbiIs
CisJCQkJCQkgICAgICAgICAgICAgbnRvaGwoY29tcHV0ZWRfY3JjMzJjKSwgbnRvaGwocmVjZWl2
ZWRfY3JjMzJjKSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlkZWJ1Z19wcmludGYoIlBh
Y2tldCB0b28gc2hvcnQ6IGxlbmd0aCAlemQiLCBsZW5ndGgpOworCQkJCX0KKwkJCX0gZWxzZSB7
CisJCQkJdXNyc2N0cF9jb25uaW5wdXQoZmRwLCBidWYsIChzaXplX3QpbGVuZ3RoLCAwKTsKKwkJ
CX0KKwkJfQorCX0KKyNpZmRlZiBfV0lOMzIKKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIChO
VUxMKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50Citjb25uX291dHB1dCh2b2lkICphZGRyLCB2
b2lkICpidWYsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZikKK3sK
KwljaGFyICpkdW1wX2J1ZjsKKwlzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyICpoZHI7CisjaWZk
ZWYgX1dJTjMyCisJU09DS0VUICpmZHA7CisjZWxzZQorCWludCAqZmRwOworI2VuZGlmCisKKyNp
ZmRlZiBfV0lOMzIKKwlmZHAgPSAoU09DS0VUICopYWRkcjsKKyNlbHNlCisJZmRwID0gKGludCAq
KWFkZHI7CisjZW5kaWYKKwlpZiAoY3JjMzJjX29mZmxvYWRpbmcgJiYgbGVuZ3RoID49IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyKSkgeworCQloZHIgPSAoc3RydWN0IHNjdHBfY29t
bW9uX2hlYWRlciAqKWJ1ZjsKKwkJaGRyLT5jcmMzMmMgPSB1c3JzY3RwX2NyYzMyYyhidWYsIChz
aXplX3QpbGVuZ3RoKTsKKwl9CisKKwlpZiAoKGR1bXBfYnVmID0gdXNyc2N0cF9kdW1wcGFja2V0
KGJ1ZiwgbGVuZ3RoLCBTQ1RQX0RVTVBfT1VUQk9VTkQpKSAhPSBOVUxMKSB7CisJCS8vZGVidWdf
cHJpbnRmX2NsZWFuKCIlc1xuIiwgZHVtcF9idWYpOworCQl1c3JzY3RwX2ZyZWVkdW1wYnVmZmVy
KGR1bXBfYnVmKTsKKwl9CisjaWZkZWYgX1dJTjMyCisJaWYgKHNlbmQoKmZkcCwgYnVmLCAoaW50
KWxlbmd0aCwgMCkgPT0gU09DS0VUX0VSUk9SKSB7CisJCXJldHVybiAoV1NBR2V0TGFzdEVycm9y
KCkpOworI2Vsc2UKKwlpZiAoc2VuZCgqZmRwLCBidWYsIGxlbmd0aCwgMCkgPCAwKSB7CisJCXJl
dHVybiAoZXJybm8pOworI2VuZGlmCisJfSBlbHNlIHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisK
K3N0YXRpYyB2b2lkCitoYW5kbGVfdXBjYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHZvaWQgKmRh
dGEsIGludCBmbGdzKQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgZXZlbnRzOworCXN0cnVjdCB1cGNh
bGxfbWV0YSAqbWV0YTsKKworCW1ldGEgPSBkYXRhOworCWJ1ZiA9IG1hbGxvYyhNQVhfUEFDS0VU
X1NJWkUpOworCisJd2hpbGUgKChldmVudHMgPSB1c3JzY3RwX2dldF9ldmVudHMoc29jaykpICYm
IChldmVudHMgJiBTQ1RQX0VWRU5UX1JFQUQpKSB7CisJCXN0cnVjdCBzY3RwX3JlY3Z2X3JuIHJu
OworCQlzc2l6ZV90IG47CisJCXVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHI7CisJCWludCBmbGFn
cyA9IDA7CisJCXNvY2tsZW5fdCBsZW4gPSAoc29ja2xlbl90KXNpemVvZihhZGRyKTsKKwkJdW5z
aWduZWQgaW50IGluZm90eXBlID0gMDsKKwkJc29ja2xlbl90IGluZm9sZW4gPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfcmVjdnZfcm4pOworCQltZW1zZXQoJnJuLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBf
cmVjdnZfcm4pKTsKKwkJbiA9IHVzcnNjdHBfcmVjdnYoc29jaywgYnVmLCBNQVhfUEFDS0VUX1NJ
WkUsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsICZsZW4sICh2b2lkICopJnJuLCAmaW5mb2xl
biwgJmluZm90eXBlLCAmZmxhZ3MpOworCQlpZiAobiA8IDApIHsKKwkJCXBlcnJvcigidXNyc2N0
cF9yZWN2diIpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAobiA+IDApIHsKKwkJCWlmIChmbGFn
cyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJCQlkZWJ1Z19wcmludGYoIk1TRyBSQ1Y6IE5vdGlm
aWNhdGlvbiBvZiBsZW5ndGggJWQgcmVjZWl2ZWQuXG4iLCAoaW50KW4pOworCQkJfSBlbHNlIHsK
KwkJCQlkZWJ1Z19wcmludGYoIk1TRyBSQ1Y6IERhdGEgbGVuZ3RoICVkLCBhZGRyICVwOiV1LCBz
dHJlYW0gJXUsIFNTTiAldSwgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LCAlcyVzLlxuIiwK
KwkJCQkgICAgICAgKGludCluLAorCQkJCSAgICAgICBhZGRyLnNjb25uLnNjb25uX2FkZHIsCisJ
CQkJICAgICAgIG50b2hzKGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCksCisJCQkJICAgICAgIHJuLnJl
Y3Z2X3JjdmluZm8ucmN2X3NpZCwKKwkJCQkgICAgICAgcm4ucmVjdnZfcmN2aW5mby5yY3Zfc3Nu
LAorCQkJCSAgICAgICBybi5yZWN2dl9yY3ZpbmZvLnJjdl90c24sCisJCQkJICAgICAgIG50b2hs
KHJuLnJlY3Z2X3JjdmluZm8ucmN2X3BwaWQpLAorCQkJCSAgICAgICBybi5yZWN2dl9yY3ZpbmZv
LnJjdl9jb250ZXh0LAorCQkJCSAgICAgICAocm4ucmVjdnZfcmN2aW5mby5yY3ZfZmxhZ3MgJiBT
Q1RQX1VOT1JERVJFRCkgPyAidW5vcmRlcmVkIiA6ICJvcmRlcmVkIiwKKwkJCQkgICAgICAgKGZs
YWdzICYgTVNHX0VPUikgPyAiLCBFT1IiIDogIiIpOworCQkJfQorCQl9IGVsc2UgeworCQkJZGVi
dWdfcHJpbnRmKCJDb25uZWN0aW9uIGNsb3NlZCFcbiIpOworCQkJdXNyc2N0cF9kZXJlZ2lzdGVy
X2FkZHJlc3MobWV0YS0+YWRkcik7CisJCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCQkJYnJlYWs7
CisJCX0KKwl9CisJZnJlZShidWYpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorcHJp
bnRfYWRkcmVzc2VzKHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJaW50IGksIG47CisJc3RydWN0
IHNvY2thZGRyICphZGRycywgKmFkZHI7CisjaWYgIWRlZmluZWQoSEFWRV9TQV9MRU4pCisJaW50
IHNhX2xlbjsKKyNlbmRpZgorCisJZGVidWdfcHJpbnRmKCJBZGRyZXNzZXM6ICIpOworCW4gPSB1
c3JzY3RwX2dldGxhZGRycyhzb2NrLCAwLCAmYWRkcnMpOworCWFkZHIgPSBhZGRyczsKKwlmb3Ig
KGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisJCWNh
c2UgQUZfSU5FVDoKKwkJeworCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJCQljaGFyIGJ1
ZltJTkVUX0FERFJTVFJMRU5dOworCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJc2luID0gKHN0
cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQsICZz
aW4tPnNpbl9hZGRyLCBidWYsIElORVRfQUREUlNUUkxFTik7CisJCQlkZWJ1Z19wcmludGZfY2xl
YW4oIiVzOiVkIiwgbmFtZSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOworI2lmICFkZWZpbmVkKEhB
VkVfU0FfTEVOKQorCQkJc2FfbGVuID0gKGludClzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsK
KyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBBRl9JTkVUNjoKKwkJeworCQkJc3RydWN0
IHNvY2thZGRyX2luNiAqc2luNjsKKwkJCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJMRU5dOworCQkJ
Y29uc3QgY2hhciAqbmFtZTsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRk
cjsKKwkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2FkZHIsIGJ1Ziwg
SU5FVDZfQUREUlNUUkxFTik7CisJCQlkZWJ1Z19wcmludGZfY2xlYW4oIiVzOiVkIiwgbmFtZSwg
bnRvaHMoc2luNi0+c2luNl9wb3J0KSk7CisjaWYgIWRlZmluZWQoSEFWRV9TQV9MRU4pCisJCQlz
YV9sZW4gPSAoaW50KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQkJYnJl
YWs7CisJCX0KKwkJY2FzZSBBRl9DT05OOgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAq
c2Nvbm47CisKKwkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKKwkJCWRl
YnVnX3ByaW50Zl9jbGVhbigiJXA6JWQiLCBzY29ubi0+c2Nvbm5fYWRkciwgbnRvaHMoc2Nvbm4t
PnNjb25uX3BvcnQpKTsKKyNpZiAhZGVmaW5lZChIQVZFX1NBX0xFTikKKwkJCXNhX2xlbiA9IChp
bnQpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0K
KwkJZGVmYXVsdDoKKwkJCWRlYnVnX3ByaW50Zl9jbGVhbigiVW5rbm93biBmYW1pbHk6ICVkIiwg
YWRkci0+c2FfZmFtaWx5KTsKKyNpZiAhZGVmaW5lZChIQVZFX1NBX0xFTikKKwkJCXNhX2xlbiA9
IChpbnQpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcik7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9Cisj
aWYgIWRlZmluZWQoSEFWRV9TQV9MRU4pCisJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChj
aGFyICopYWRkciArIHNhX2xlbik7CisjZWxzZQorCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAq
KSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2FfbGVuKTsKKyNlbmRpZgorCQlpZiAoaSAhPSBuIC0g
MSkgeworCQkJZGVidWdfcHJpbnRmX2NsZWFuKCIsIik7CisJCX0KKwl9CisJaWYgKG4gPiAwKSB7
CisJCXVzcnNjdHBfZnJlZWxhZGRycyhhZGRycyk7CisJfQorCWRlYnVnX3ByaW50Zl9jbGVhbigi
PC0+Iik7CisJbiA9IHVzcnNjdHBfZ2V0cGFkZHJzKHNvY2ssIDAsICZhZGRycyk7CisJYWRkciA9
IGFkZHJzOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3dpdGNoIChhZGRyLT5zYV9m
YW1pbHkpIHsKKwkJY2FzZSBBRl9JTkVUOgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNp
bjsKKwkJCWNoYXIgYnVmW0lORVRfQUREUlNUUkxFTl07CisJCQljb25zdCBjaGFyICpuYW1lOwor
CisJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJCW5hbWUgPSBpbmV0X250
b3AoQUZfSU5FVCwgJnNpbi0+c2luX2FkZHIsIGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCWRl
YnVnX3ByaW50Zl9jbGVhbigiJXM6JWQiLCBuYW1lLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7Cisj
aWYgIWRlZmluZWQoSEFWRV9TQV9MRU4pCisJCQlzYV9sZW4gPSAoaW50KXNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCQljYXNlIEFGX0lORVQ2Ogor
CQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCQkJY2hhciBidWZbSU5FVDZfQURE
UlNUUkxFTl07CisJCQljb25zdCBjaGFyICpuYW1lOworCisJCQlzaW42ID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbjYgKilhZGRyOworCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjYtPnNp
bjZfYWRkciwgYnVmLCBJTkVUNl9BRERSU1RSTEVOKTsKKwkJCWRlYnVnX3ByaW50Zl9jbGVhbigi
JXM6JWQiLCBuYW1lLCBudG9ocyhzaW42LT5zaW42X3BvcnQpKTsKKyNpZiAhZGVmaW5lZChIQVZF
X1NBX0xFTikKKwkJCXNhX2xlbiA9IChpbnQpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwor
I2VuZGlmCisJCQlicmVhazsKKwkJfQorCQljYXNlIEFGX0NPTk46CisJCXsKKwkJCXN0cnVjdCBz
b2NrYWRkcl9jb25uICpzY29ubjsKKworCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4g
KilhZGRyOworCQkJZGVidWdfcHJpbnRmX2NsZWFuKCIlcDolZCIsIHNjb25uLT5zY29ubl9hZGRy
LCBudG9ocyhzY29ubi0+c2Nvbm5fcG9ydCkpOworI2lmICFkZWZpbmVkKEhBVkVfU0FfTEVOKQor
CQkJc2FfbGVuID0gKGludClzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJ
CQlicmVhazsKKwkJfQorCQlkZWZhdWx0OgorCQkJZGVidWdfcHJpbnRmX2NsZWFuKCJVbmtub3du
IGZhbWlseTogJWQiLCBhZGRyLT5zYV9mYW1pbHkpOworI2lmICFkZWZpbmVkKEhBVkVfU0FfTEVO
KQorCQkJc2FfbGVuID0gKGludClzaXplb2Yoc3RydWN0IHNvY2thZGRyKTsKKyNlbmRpZgorCQkJ
YnJlYWs7CisJCX0KKyNpZiAhZGVmaW5lZChIQVZFX1NBX0xFTikKKwkJYWRkciA9IChzdHJ1Y3Qg
c29ja2FkZHIgKikoKGNoYXIgKilhZGRyICsgc2FfbGVuKTsKKyNlbHNlCisJCWFkZHIgPSAoc3Ry
dWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBhZGRyLT5zYV9sZW4pOworI2VuZGlmCisJ
CWlmIChpICE9IG4gLSAxKSB7CisJCQlkZWJ1Z19wcmludGZfY2xlYW4oIiwiKTsKKwkJfQorCX0K
KwlpZiAobiA+IDApIHsKKwkJdXNyc2N0cF9mcmVlcGFkZHJzKGFkZHJzKTsKKwl9CisJZGVidWdf
cHJpbnRmX2NsZWFuKCJcbiIpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb
XSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3MsIHNpbl9jOworCXN0cnVjdCBzb2NrYWRk
cl9jb25uIHNjb25uOworCXN0cnVjdCBzY3RwX3BhZGRycGFyYW1zIHBhZGRycGFyYW1zOworI2lm
ZGVmIF9XSU4zMgorCVNPQ0tFVCBmZF9jLCBmZF9zOworI2Vsc2UKKwlpbnQgZmRfYywgZmRfcywg
cmM7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0ICpzX2MsICpzX3MsICpzX2w7CisjaWZkZWYgX1dJ
TjMyCisJSEFORExFIHRpZF9jLCB0aWRfczsKKyNlbHNlCisJcHRocmVhZF90IHRpZF9jLCB0aWRf
czsKKyNlbmRpZgorCWludCBpLCBqLCBjdXJfYnVmX3NpemUsIHNuZF9idWZfc2l6ZSwgcmN2X2J1
Zl9zaXplLCBzZW5kdl9yZXRyaWVzX2xlZnQsIG9uOworCXNvY2tsZW5fdCBvcHRfbGVuOworCXN0
cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKKwljaGFyICpsaW5lOworI2lmZGVmIF9XSU4zMgor
CVdTQURBVEEgd3NhRGF0YTsKKyNlbmRpZgorCXVpbnQxNl90IGNsaWVudF9wb3J0ID0gOTkwMDsK
Kwl1aW50MTZfdCBzZXJ2ZXJfcG9ydCA9IDk5MDE7CisKKworCXN0cnVjdCB1cGNhbGxfbWV0YSB1
cGNhbGxfbWV0YV9jbGllbnQ7CisJc3RydWN0IHVwY2FsbF9tZXRhIHVwY2FsbF9tZXRhX3NlcnZl
cjsKKworI2lmZGVmIE9VVFBVVF9UT19MT0dGSUxFCisJRklMRSAqbG9nZmlsZTsKKwlsb2dmaWxl
ID0gZm9wZW4oImVrcl9sb29wX3VwY2FsbC5sb2ciLCAiYSsiKTsKKwlpZiAobG9nZmlsZSA9PSBO
VUxMKSB7CisJCWRlYnVnX3ByaW50ZigiRmFpbGVkIGNyZWF0aW5nIGxvZ2ZpbGVcbiIpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWRlYnVnX3NldF90YXJnZXQobG9nZmlsZSk7CisjZW5k
aWYKKworCWlmIChhcmdjID4gMSkgeworCQljbGllbnRfcG9ydCA9IGF0b2koYXJndlsxXSk7CisJ
fQorCisJaWYgKGFyZ2MgPiAyKSB7CisJCXNlcnZlcl9wb3J0ID0gYXRvaShhcmd2WzJdKTsKKwl9
CisKKwlpZiAoYXJnYyA+IDMpIHsKKwkJY3JjMzJjX29mZmxvYWRpbmcgPSBhdG9pKGFyZ3ZbM10p
OworCX0KKworCWRlYnVnX3ByaW50ZigiU3RhcnRpbmcgcHJvZ3JhbVxuIik7CisJZGVidWdfcHJp
bnRmKCJDb25maWc6XG5cdENsaWVudCBQb3J0Olx0JWRcblx0U2VydmVyIFBvcnQ6XHQlZFxuXHRD
UkMzMkMgQ2FsYzpcdCVzXG4iLCBjbGllbnRfcG9ydCwgc2VydmVyX3BvcnQsIGNyYzMyY19vZmZs
b2FkaW5nID8gIm9mZmxvYWRlZCIgOiAiTk9UIG9mZmxvYWRlZCIpOworCisjaWZkZWYgX1dJTjMy
CisJaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwyKSwgJndzYURhdGEpICE9IDApIHsKKwkJZGVi
dWdfcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxlZFxuIik7CisJCWV4aXQgKEVYSVRfRkFJTFVSRSk7
CisJfQorI2VuZGlmCisJdXNyc2N0cF9pbml0KDAsIGNvbm5fb3V0cHV0LCBkZWJ1Z19wcmludGZf
c3RhY2spOworCisjaWZkZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2Rl
YnVnX29uKFNDVFBfREVCVUdfTk9ORSk7CisjZW5kaWYgLy8gU0NUUF9ERUJVRworCisJaWYgKGNy
YzMyY19vZmZsb2FkaW5nKSB7CisJCXVzcnNjdHBfZW5hYmxlX2NyYzMyY19vZmZsb2FkKCk7CisJ
fQorCisJLyogc2V0IHVwIGEgY29ubmVjdGVkIFVEUCBzb2NrZXQgKi8KKyNpZmRlZiBfV0lOMzIK
KwlpZiAoKGZkX2MgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA9
PSBJTlZBTElEX1NPQ0tFVCkgeworCQlkZWJ1Z19wcmludGYoInNvY2tldCgpIGZhaWxlZCB3aXRo
IGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7
CisJfQorCWlmICgoZmRfcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VE
UCkpID09IElOVkFMSURfU09DS0VUKSB7CisJCWRlYnVnX3ByaW50Zigic29ja2V0KCkgZmFpbGVk
IHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlM
VVJFKTsKKwl9CisjZWxzZQorCWlmICgoZmRfYyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFN
LCBJUFBST1RPX1VEUCkpIDwgMCkgeworCQlwZXJyb3IoInNvY2tldCIpOworCQlleGl0KEVYSVRf
RkFJTFVSRSk7CisJfQorCWlmICgoZmRfcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJ
UFBST1RPX1VEUCkpIDwgMCkgeworCQlwZXJyb3IoInNvY2tldCIpOworCQlleGl0KEVYSVRfRkFJ
TFVSRSk7CisJfQorI2VuZGlmCisJbWVtc2V0KCZzaW5fYywgMCwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpOworCXNpbl9jLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lO
X0xFTgorCXNpbl9jLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRp
ZgorCXNpbl9jLnNpbl9wb3J0ID0gaHRvbnMoY2xpZW50X3BvcnQpOworCXNpbl9jLnNpbl9hZGRy
LnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CisJbWVtc2V0KCZzaW5fcywgMCwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCXNpbl9zLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwor
I2lmZGVmIEhBVkVfU0lOX0xFTgorCXNpbl9zLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKTsKKyNlbmRpZgorCXNpbl9zLnNpbl9wb3J0ID0gaHRvbnMoc2VydmVyX3BvcnQpOwor
CXNpbl9zLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CisjaWZkZWYg
X1dJTjMyCisJaWYgKGJpbmQoZmRfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlkZWJ1Z19wcmludGYo
ImJpbmQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJ
ZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoYmluZChmZF9zLCAoc3RydWN0IHNvY2thZGRy
ICopJnNpbl9zLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7
CisJCWRlYnVnX3ByaW50ZigiYmluZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0
TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoYmlu
ZChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKSkgPCAwKSB7CisJCXBlcnJvcigiYmluZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJ
fQorCWlmIChiaW5kKGZkX3MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJiaW5kIik7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBfV0lOMzIKKwlpZiAoY29ubmVjdChmZF9jLCAo
c3RydWN0IHNvY2thZGRyICopJnNpbl9zLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0g
U09DS0VUX0VSUk9SKSB7CisJCWRlYnVnX3ByaW50ZigiY29ubmVjdCgpIGZhaWxlZCB3aXRoIGVy
cm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJ
fQorCWlmIChjb25uZWN0KGZkX3MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX2MsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJZGVidWdfcHJpbnRmKCJj
b25uZWN0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJ
CWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChjb25uZWN0KGZkX2MsIChzdHJ1
Y3Qgc29ja2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsK
KwkJcGVycm9yKCJjb25uZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKGNv
bm5lY3QoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3IoImNvbm5lY3QiKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX0KKyNlbmRpZgorI2lmZGVmIF9XSU4zMgorCWlmICgodGlkX2MgPSBDcmVhdGVUaHJl
YWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZF9jLCAwLCBOVUxMKSkgPT0g
TlVMTCkgeworCQlkZWJ1Z19wcmludGYoIkNyZWF0ZVRocmVhZCgpIGZhaWxlZCB3aXRoIGVycm9y
OiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlm
ICgodGlkX3MgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAq
KSZmZF9zLCAwLCBOVUxMKSkgPT0gTlVMTCkgeworCQlkZWJ1Z19wcmludGYoIkNyZWF0ZVRocmVh
ZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVY
SVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoKHJjID0gcHRocmVhZF9jcmVhdGUoJnRpZF9j
LCBOVUxMLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkX2MpKSAhPSAwKSB7CisJCWRlYnVn
X3ByaW50ZigicHRocmVhZF9jcmVhdGUgdGlkX2M6ICVzXG4iLCBzdHJlcnJvcihyYykpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJaWYgKChyYyA9IHB0aHJlYWRfY3JlYXRlKCZ0aWRf
cywgTlVMTCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZF9zKSkgIT0gMCkgeworCQlkZWJ1
Z19wcmludGYoInB0aHJlYWRfY3JlYXRlIHRpZF9zOiAlc1xuIiwgc3RyZXJyb3IocmMpKTsKKwkJ
ZXhpdChFWElUX0ZBSUxVUkUpOworCX07CisjZW5kaWYKKworCXVzcnNjdHBfc3lzY3RsX3NldF9z
Y3RwX2Vjbl9lbmFibGUoMCk7CisJdXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKCh2b2lkICopJmZk
X2MpOworCXVzcnNjdHBfcmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZmZF9zKTsKKwlpZiAoKHNf
YyA9IHVzcnNjdHBfc29ja2V0KEFGX0NPTk4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIE5V
TEwsIE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQi
KTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXVwY2FsbF9tZXRhX2NsaWVudC5hZGRy
ID0gJmZkX2M7CisJdXBjYWxsX21ldGFfY2xpZW50LnNlbmRlciA9IDE7CisJdXNyc2N0cF9zZXRf
dXBjYWxsKHNfYywgaGFuZGxlX3VwY2FsbCwgJnVwY2FsbF9tZXRhX2NsaWVudCk7CisKKwlvcHRf
bGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKKwljdXJfYnVmX3NpemUgPSAwOworCWlmICh1
c3JzY3RwX2dldHNvY2tvcHQoc19jLCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZjdXJfYnVmX3Np
emUsICZvcHRfbGVuKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tvcHQiKTsKKwkJ
ZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlkZWJ1Z19wcmludGYoIkNoYW5nZSBzZW5kIHNvY2tl
dCBidWZmZXIgc2l6ZSBmcm9tICVkICIsIGN1cl9idWZfc2l6ZSk7CisJc25kX2J1Zl9zaXplID0g
MTw8MjI7IC8qIDQgTUIgKi8KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNfYywgU09MX1NPQ0tF
VCwgU09fU05EQlVGLCAmc25kX2J1Zl9zaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCXBlcnJv
cigidXNyc2N0cF9zZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJb3B0
X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7CisJY3VyX2J1Zl9zaXplID0gMDsKKwlpZiAo
dXNyc2N0cF9nZXRzb2Nrb3B0KHNfYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmY3VyX2J1Zl9z
aXplLCAmb3B0X2xlbikgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0Iik7CisJ
CWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJZGVidWdfcHJpbnRmX2NsZWFuKCJ0byAlZC5cbiIs
IGN1cl9idWZfc2l6ZSk7CisJbWVtc2V0KCZwYWRkcnBhcmFtcywgMCwgc2l6ZW9mKHN0cnVjdCBz
Y3RwX3BhZGRycGFyYW1zKSk7CisJcGFkZHJwYXJhbXMuc3BwX2FkZHJlc3Muc3NfZmFtaWx5ID0g
QUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXBhZGRycGFyYW1zLnNwcF9hZGRyZXNz
LnNzX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlwYWRkcnBh
cmFtcy5zcHBfZmxhZ3MgPSBTUFBfUE1UVURfRElTQUJMRTsKKwlwYWRkcnBhcmFtcy5zcHBfcGF0
aG10dSA9IDkwMDA7CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzX2MsIElQUFJPVE9fU0NUUCwg
U0NUUF9QRUVSX0FERFJfUEFSQU1TLCAmcGFkZHJwYXJhbXMsIHNpemVvZihzdHJ1Y3Qgc2N0cF9w
YWRkcnBhcmFtcykpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCIpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmICgoc19sID0gdXNyc2N0cF9zb2NrZXQoQUZfQ09O
TiwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgTlVMTCwgTlVMTCwgMCwgTlVMTCkpID09IE5V
TEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7
CisJfQorCW9wdF9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOworCWN1cl9idWZfc2l6ZSA9
IDA7CisJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzX2wsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwg
JmN1cl9idWZfc2l6ZSwgJm9wdF9sZW4pIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfZ2V0c29j
a29wdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWRlYnVnX3ByaW50ZigiQ2hhbmdl
IHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplIGZyb20gJWQgIiwgY3VyX2J1Zl9zaXplKTsKKwly
Y3ZfYnVmX3NpemUgPSAxPDwxNjsgLyogNjQgS0IgKi8KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0
KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmcmN2X2J1Zl9zaXplLCBzaXplb2YoaW50KSkg
PCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlM
VVJFKTsKKwl9CisJb3B0X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7CisJY3VyX2J1Zl9z
aXplID0gMDsKKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNW
QlVGLCAmY3VyX2J1Zl9zaXplLCAmb3B0X2xlbikgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9n
ZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJZGVidWdfcHJpbnRmX2Ns
ZWFuKCJ0byAlZC5cbiIsIGN1cl9idWZfc2l6ZSk7CisKKwlvbiA9IDE7CisJaWYgKHVzcnNjdHBf
c2V0c29ja29wdChzX2wsIElQUFJPVE9fU0NUUCwgU0NUUF9SRUNWUkNWSU5GTywgJm9uLCBzaXpl
b2YoaW50KSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0Iik7CisJCWV4aXQo
RVhJVF9GQUlMVVJFKTsKKwl9CisKKwkvKiBCaW5kIHRoZSBjbGllbnQgc2lkZS4gKi8KKwltZW1z
ZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29u
bl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5f
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25u
X3BvcnQgPSBodG9ucyg1MDAxKTsKKwlzY29ubi5zY29ubl9hZGRyID0gJmZkX2M7CisJaWYgKHVz
cnNjdHBfYmluZChzX2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfY29ubikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCQlleGl0
KEVYSVRfRkFJTFVSRSk7CisJfQorCS8qIEJpbmQgdGhlIHNlcnZlciBzaWRlLiAqLworCW1lbXNl
dCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25u
X2ZhbWlseSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5f
cG9ydCA9IGh0b25zKDUwMDEpOworCXNjb25uLnNjb25uX2FkZHIgPSAmZmRfczsKKwlpZiAodXNy
c2N0cF9iaW5kKHNfbCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9jb25uKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9iaW5kIik7CisJCWV4aXQo
RVhJVF9GQUlMVVJFKTsKKwl9CisJLyogTWFrZSBzZXJ2ZXIgc2lkZSBwYXNzaXZlLi4uICovCisJ
aWYgKHVzcnNjdHBfbGlzdGVuKHNfbCwgMSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9saXN0
ZW4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwkvKiBJbml0aWF0ZSB0aGUgaGFuZHNo
YWtlICovCisJbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7
CisJc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgor
CXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYK
KwlzY29ubi5zY29ubl9wb3J0ID0gaHRvbnMoNTAwMSk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICZm
ZF9jOworCWlmICh1c3JzY3RwX2Nvbm5lY3Qoc19jLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25u
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3Rw
X2Nvbm5lY3QiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoKHNfcyA9IHVzcnNj
dHBfYWNjZXB0KHNfbCwgTlVMTCwgTlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3Rw
X2FjY2VwdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJdXBjYWxsX21ldGFfc2Vy
dmVyLmFkZHIgCT0gJmZkX3M7CisJdXBjYWxsX21ldGFfc2VydmVyLnNlbmRlciAJPSAwOworCXVz
cnNjdHBfc2V0X3VwY2FsbChzX3MsIGhhbmRsZV91cGNhbGwsICZ1cGNhbGxfbWV0YV9zZXJ2ZXIp
OworCisJdXNyc2N0cF9jbG9zZShzX2wpOworCXByaW50X2FkZHJlc3NlcyhzX3MpOworCisJaWYg
KChsaW5lID0gbWFsbG9jKExJTkVfTEVOR1RIKSkgPT0gTlVMTCkgeworCQlleGl0KEVYSVRfRkFJ
TFVSRSk7CisJfQorCW1lbXNldChsaW5lLCAnQScsIExJTkVfTEVOR1RIKTsKKwlzbmRpbmZvLnNu
ZF9zaWQgPSAxOworCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubChESVNDQVJEX1BQSUQpOworCXNu
ZGluZm8uc25kX2NvbnRleHQgPSAwOworCXNuZGluZm8uc25kX2Fzc29jX2lkID0gMDsKKworCWZv
ciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfU1RFUFM7IGkrKykgeworCQlpZiAoaSAlIDIpIHsKKwkJ
CXNuZGluZm8uc25kX2ZsYWdzID0gU0NUUF9VTk9SREVSRUQ7CisJCX0gZWxzZSB7CisJCQlzbmRp
bmZvLnNuZF9mbGFncyA9IDA7CisJCX0KKwkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgeworCQkJ
LyogU2VuZCBhIDEgTUIgbWVzc2FnZSAqLworCQkJc2VuZHZfcmV0cmllc19sZWZ0ID0gMTIwOwor
CQkJZGVidWdfcHJpbnRmKCJ1c3JzY3Bfc2VuZHYgLSBzdGVwICVkIC0gY2FsbCAlZCBmbGFncyAl
eFxuIiwgaSwgaiArIDEsIHNuZGluZm8uc25kX2ZsYWdzKTsKKwkJCXdoaWxlICh1c3JzY3RwX3Nl
bmR2KHNfYywgbGluZSwgTElORV9MRU5HVEgsIE5VTEwsIDAsICh2b2lkICopJnNuZGluZm8sCisJ
CQkJCSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9T
TkRJTkZPLCAwKSA8IDApIHsKKwkJCQlkZWJ1Z19wcmludGYoInVzcnNjdHBfc2VuZHYgLSBlcnJu
bzogJWQgLSAlc1xuIiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisJCQkJaWYgKGVycm5vICE9
IEVXT1VMREJMT0NLIHx8ICFzZW5kdl9yZXRyaWVzX2xlZnQpIHsKKwkJCQkJZXhpdChFWElUX0ZB
SUxVUkUpOworCQkJCX0KKwkJCQlzZW5kdl9yZXRyaWVzX2xlZnQtLTsKKyNpZmRlZiBfV0lOMzIK
KwkJCQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJCQkJc2xlZXAoMSk7CisjZW5kaWYKKwkJCX0KKwkJ
fQorCQlkZWJ1Z19wcmludGYoIlNlbmRpbmcgZG9uZSwgc2xlZXBpbmdcbiIpOworI2lmZGVmIF9X
SU4zMgorCQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJCXNsZWVwKDEpOworI2VuZGlmCisJfQorCWZy
ZWUobGluZSk7CisJdXNyc2N0cF9zaHV0ZG93bihzX2MsIFNIVVRfV1IpOworCisJd2hpbGUgKHVz
cnNjdHBfZmluaXNoKCkgIT0gMCkgeworCQlkZWJ1Z19wcmludGYoIldhaXRpbmcgZm9yIHVzcnNj
dHBfZmluaXNoKClcbiIpOworI2lmZGVmIF9XSU4zMgorCQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJ
CXNsZWVwKDEpOworI2VuZGlmCisJfQorI2lmZGVmIF9XSU4zMgorCVRlcm1pbmF0ZVRocmVhZCh0
aWRfYywgMCk7CisJV2FpdEZvclNpbmdsZU9iamVjdCh0aWRfYywgSU5GSU5JVEUpOworCVRlcm1p
bmF0ZVRocmVhZCh0aWRfcywgMCk7CisJV2FpdEZvclNpbmdsZU9iamVjdCh0aWRfcywgSU5GSU5J
VEUpOworCWlmIChjbG9zZXNvY2tldChmZF9jKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJZGVidWdf
cHJpbnRmKCJjbG9zZXNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFz
dEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChjbG9zZXNvY2tldChm
ZF9zKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJZGVidWdfcHJpbnRmKCJjbG9zZXNvY2tldCgpIGZh
aWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRf
RkFJTFVSRSk7CisJfQorCVdTQUNsZWFudXAoKTsKKyNlbHNlCisJcHRocmVhZF9jYW5jZWwodGlk
X2MpOworCXB0aHJlYWRfam9pbih0aWRfYywgTlVMTCk7CisJcHRocmVhZF9jYW5jZWwodGlkX3Mp
OworCXB0aHJlYWRfam9pbih0aWRfcywgTlVMTCk7CisJaWYgKGNsb3NlKGZkX2MpIDwgMCkgewor
CQlwZXJyb3IoImNsb3NlIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKGNsb3Nl
KGZkX3MpIDwgMCkgeworCQlwZXJyb3IoImNsb3NlIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsK
Kwl9CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3Jh
bXMvZWtyX3BlZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9wZWVyLmMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NmVkNTExMzMzY2ZkOWZiMzk1OThjZTU3MWRkYzFhN2RiODA3Y2U3OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9wZWVyLmMKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9q
ZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
CisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9X
SU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5jbHVkZSA8
c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5l
dGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgor
I2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjaW5jbHVk
ZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjaW5jbHVkZSA8
dXNyc2N0cC5oPgorI2luY2x1ZGUgInByb2dyYW1zX2hlbHBlci5oIgorCisjZGVmaW5lIE1BWF9Q
QUNLRVRfU0laRSAoMTw8MTYpCisjZGVmaW5lIExJTkVfTEVOR1RIIDgwCisjZGVmaW5lIERJU0NB
UkRfUFBJRCAzOQorCisjaWZkZWYgX1dJTjMyCitzdGF0aWMgRFdPUkQgV0lOQVBJCisjZWxzZQor
c3RhdGljIHZvaWQgKgorI2VuZGlmCitoYW5kbGVfcGFja2V0cyh2b2lkICphcmcpCit7CisjaWZk
ZWYgX1dJTjMyCisJU09DS0VUICpmZHA7CisjZWxzZQorCWludCAqZmRwOworI2VuZGlmCisJc3Np
emVfdCBsZW5ndGg7CisJY2hhciBidWZbTUFYX1BBQ0tFVF9TSVpFXTsKKworI2lmZGVmIF9XSU4z
MgorCWZkcCA9IChTT0NLRVQgKilhcmc7CisjZWxzZQorCWZkcCA9IChpbnQgKilhcmc7CisjZW5k
aWYKKwlmb3IgKDs7KSB7CisjaWYgZGVmaW5lZChfX05ldEJTRF9fKQorCQlwdGhyZWFkX3Rlc3Rj
YW5jZWwoKTsKKyNlbmRpZgorCQlsZW5ndGggPSByZWN2KCpmZHAsIGJ1ZiwgTUFYX1BBQ0tFVF9T
SVpFLCAwKTsKKwkJaWYgKGxlbmd0aCA+IDApIHsKKwkJCXVzcnNjdHBfY29ubmlucHV0KGZkcCwg
YnVmLCAoc2l6ZV90KWxlbmd0aCwgMCk7CisJCX0KKwl9CisjaWZkZWYgX1dJTjMyCisJcmV0dXJu
IDA7CisjZWxzZQorCXJldHVybiAoTlVMTCk7CisjZW5kaWYKK30KKworc3RhdGljIGludAorY29u
bl9vdXRwdXQodm9pZCAqYWRkciwgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90
IHRvcywgdWludDhfdCBzZXRfZGYpCit7CisjaWZkZWYgX1dJTjMyCisJU09DS0VUICpmZHA7Cisj
ZWxzZQorCWludCAqZmRwOworI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKwlmZHAgPSAoU09DS0VU
ICopYWRkcjsKKyNlbHNlCisJZmRwID0gKGludCAqKWFkZHI7CisjZW5kaWYKKyNpZmRlZiBfV0lO
MzIKKwlpZiAoc2VuZCgqZmRwLCBidWZmZXIsIChpbnQpbGVuZ3RoLCAwKSA9PSBTT0NLRVRfRVJS
T1IpIHsKKwkJcmV0dXJuIChXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCWlmIChzZW5kKCpm
ZHAsIGJ1ZmZlciwgbGVuZ3RoLCAwKSA8IDApIHsKKwkJcmV0dXJuIChlcnJubyk7CisjZW5kaWYK
Kwl9IGVsc2UgeworCQlyZXR1cm4gKDApOworCX0KK30KKworc3RhdGljIGludAorcmVjZWl2ZV9j
YihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpk
YXRhLAorICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3Ys
IGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7CisJaWYgKGRhdGEpIHsKKwkJaWYgKGZsYWdz
ICYgTVNHX05PVElGSUNBVElPTikgeworCQkJaGFuZGxlX25vdGlmaWNhdGlvbigodW5pb24gc2N0
cF9ub3RpZmljYXRpb24gKilkYXRhLCBkYXRhbGVuKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50Zigi
TXNnIG9mIGxlbmd0aCAlZCByZWNlaXZlZCB2aWEgJXA6JXUgb24gc3RyZWFtICV1IHdpdGggU1NO
ICV1IGFuZCBUU04gJXUsIFBQSUQgJXUsIGNvbnRleHQgJXUuXG4iLAorCQkJICAgICAgIChpbnQp
ZGF0YWxlbiwKKwkJCSAgICAgICBhZGRyLnNjb25uLnNjb25uX2FkZHIsCisJCQkgICAgICAgbnRv
aHMoYWRkci5zY29ubi5zY29ubl9wb3J0KSwKKwkJCSAgICAgICByY3YucmN2X3NpZCwKKwkJCSAg
ICAgICByY3YucmN2X3NzbiwKKwkJCSAgICAgICByY3YucmN2X3RzbiwKKwkJCSAgICAgICAodWlu
dDMyX3QpbnRvaGwocmN2LnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOwor
CQl9CisJCWZyZWUoZGF0YSk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJl
c3ModWxwX2luZm8pOworCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCX0KKwlyZXR1cm4gKDEpOwor
fQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gc2luOworCXN0cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOworCXN0cnVjdCBzY3RwX2V2
ZW50IGV2ZW50OworCXVpbnQxNl90IGV2ZW50X3R5cGVzW10gPSB7U0NUUF9BU1NPQ19DSEFOR0Us
CisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BFRVJfQUREUl9DSEFOR0UsCisJICAg
ICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NFTkRfRkFJTEVEX0VWRU5UfTsKKwl1bnNpZ25l
ZCBpbnQgaTsKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgZmQ7CisjZWxzZQorCWludCBmZCwgcmM7
CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0ICpzOworI2lmZGVmIF9XSU4zMgorCUhBTkRMRSB0aWQ7
CisjZWxzZQorCXB0aHJlYWRfdCB0aWQ7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNu
ZGluZm87CisJY2hhciBsaW5lW0xJTkVfTEVOR1RIXTsKKyNpZmRlZiBfV0lOMzIKKwlXU0FEQVRB
IHdzYURhdGE7CisjZW5kaWYKKworCWlmIChhcmdjIDwgNCkgeworCQlwcmludGYoImVycm9yOiB0
aGlzIHByb2dyYW0gcmVxdWlyZXMgNCBhcmd1bWVudHMhXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX0KKworI2lmZGVmIF9XSU4zMgorCWlmIChXU0FTdGFydHVwKE1BS0VXT1JEKDIsMiks
ICZ3c2FEYXRhKSAhPSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiV1NBU3RhcnR1cCBmYWlsZWRc
biIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJdXNyc2N0cF9pbml0KDAs
IGNvbm5fb3V0cHV0LCBkZWJ1Z19wcmludGZfc3RhY2spOworCS8qIHNldCB1cCBhIGNvbm5lY3Rl
ZCBVRFAgc29ja2V0ICovCisjaWZkZWYgX1dJTjMyCisJaWYgKChmZCA9IHNvY2tldChBRl9JTkVU
LCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpID09IElOVkFMSURfU09DS0VUKSB7CisJCWZwcmlu
dGYoc3RkZXJyLCAic29ja2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0
RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmICgoZmQgPSBz
b2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKKwkJcGVycm9y
KCJzb2NrZXQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCW1lbXNldCgm
c2luLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJc2luLnNpbl9mYW1pbHkgPSBB
Rl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCXNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlzaW4uc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3Zb
Ml0pKTsKKwlpZiAoIWluZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmc2luLnNpbl9hZGRyLnNf
YWRkcikpeworCQlwcmludGYoImVycm9yOiBpbnZhbGlkIGFkZHJlc3NcbiIpOworCQlleGl0KEVY
SVRfRkFJTFVSRSk7CisJfQorI2lmZGVmIF9XSU4zMgorCWlmIChiaW5kKGZkLCAoc3RydWN0IHNv
Y2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJP
UikgeworCQlmcHJpbnRmKHN0ZGVyciwgImJpbmQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIs
IFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJ
aWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigiYmluZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7
CisJfQorI2VuZGlmCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
KTsKKwlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc2lu
LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNpbi5zaW5f
cG9ydCA9IGh0b25zKGF0b2koYXJndls0XSkpOworCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFy
Z3ZbM10sICZzaW4uc2luX2FkZHIuc19hZGRyKSl7CisJCXByaW50ZigiZXJyb3I6IGludmFsaWQg
YWRkcmVzc1xuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjaWZkZWYgX1dJTjMyCisJ
aWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY29ubmVj
dCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0
KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoY29ubmVjdChmZCwgKHN0cnVjdCBzb2Nr
YWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJcGVycm9y
KCJjb25uZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBf
V0lOMzIKKwlpZiAoKHRpZCA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCAmaGFuZGxlX3BhY2tldHMs
ICh2b2lkICopJmZkLCAwLCBOVUxMKSkgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNy
ZWF0ZVRocmVhZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlbHVcbiIsIEdldExhc3RFcnJvcigpKTsK
KwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKChyYyA9IHB0aHJlYWRfY3Jl
YXRlKCZ0aWQsIE5VTEwsICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmQpKSAhPSAwKSB7CisJ
CWZwcmludGYoc3RkZXJyLCAicHRocmVhZF9jcmVhdGU6ICVzXG4iLCBzdHJlcnJvcihyYykpOwor
CQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisjaWZkZWYgU0NUUF9ERUJVRworCXVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9ORSk7CisjZW5kaWYK
Kwl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmQpOworCXVzcnNjdHBfc3lzY3Rs
X3NldF9zY3RwX2Vjbl9lbmFibGUoMCk7CisJaWYgKChzID0gdXNyc2N0cF9zb2NrZXQoQUZfQ09O
TiwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgcmVjZWl2ZV9jYiwgTlVMTCwgMCwgJmZkKSkg
PT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJfQorCS8qIEVuYWJsZSB0
aGUgZXZlbnRzIG9mIGludGVyZXN0LiAqLworCWlmICh1c3JzY3RwX3NldF9ub25fYmxvY2tpbmco
cywgMSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZXRfbm9uX2Jsb2NraW5nIik7CisJfQor
CW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZihldmVudCkpOworCWV2ZW50LnNlX2Fzc29jX2lkID0g
U0NUUF9BTExfQVNTT0M7CisJZXZlbnQuc2Vfb24gPSAxOworCWZvciAoaSA9IDA7IGkgPCBzaXpl
b2YoZXZlbnRfdHlwZXMpL3NpemVvZih1aW50MTZfdCk7IGkrKykgeworCQlldmVudC5zZV90eXBl
ID0gZXZlbnRfdHlwZXNbaV07CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQocywgSVBQUk9UT19T
Q1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVvZihldmVudCkpIDwgMCkgeworCQkJcGVycm9y
KCJzZXRzb2Nrb3B0IFNDVFBfRVZFTlQiKTsKKwkJfQorCX0KKwltZW1zZXQoJnNjb25uLCAwLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9D
T05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3BvcnQgPSBodG9ucyhh
dG9pKGFyZ3ZbNV0pKTsKKwlzY29ubi5zY29ubl9hZGRyID0gJmZkOworCWlmICh1c3JzY3RwX2Jp
bmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9j
b25uKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9iaW5kIik7CisJfQorCW1lbXNldCgmc2Nv
bm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25uX2ZhbWls
eSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5fcG9ydCA9
IGh0b25zKGF0b2koYXJndls2XSkpOworCXNjb25uLnNjb25uX2FkZHIgPSAmZmQ7CisJaWYgKHVz
cnNjdHBfY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKKwl9
CisJZm9yICg7OykgeworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX01JTkdXMzJf
XykKKwkJaWYgKGdldHNfcyhsaW5lLCBMSU5FX0xFTkdUSCkgPT0gTlVMTCkgeworI2Vsc2UKKwkJ
aWYgKGZnZXRzKGxpbmUsIExJTkVfTEVOR1RILCBzdGRpbikgPT0gTlVMTCkgeworI2VuZGlmCisJ
CQlpZiAodXNyc2N0cF9zaHV0ZG93bihzLCBTSFVUX1dSKSA8IDApIHsKKwkJCQlwZXJyb3IoInVz
cnNjdHBfc2h1dGRvd24iKTsKKwkJCX0KKwkJCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDAp
IHsKKyNpZmRlZiBfV0lOMzIKKwkJCQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJCQkJc2xlZXAoMSk7
CisjZW5kaWYKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCXNuZGluZm8uc25kX3NpZCA9IDE7CisJ
CXNuZGluZm8uc25kX2ZsYWdzID0gMDsKKwkJc25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERJU0NB
UkRfUFBJRCk7CisJCXNuZGluZm8uc25kX2NvbnRleHQgPSAwOworCQlzbmRpbmZvLnNuZF9hc3Nv
Y19pZCA9IDA7CisJCWlmICh1c3JzY3RwX3NlbmR2KHMsIGxpbmUsIHN0cmxlbihsaW5lKSwgTlVM
TCwgMCwgKHZvaWQgKikmc25kaW5mbywKKwkJICAgICAgICAgICAgICAgICAgKHNvY2tsZW5fdClz
aXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7
CisJCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsKKwkJfQorCX0KKwl3aGlsZSAodXNyc2N0cF9m
aW5pc2goKSAhPSAwKSB7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJ
c2xlZXAoMSk7CisjZW5kaWYKKwl9CisjaWZkZWYgX1dJTjMyCisJVGVybWluYXRlVGhyZWFkKHRp
ZCwgMCk7CisJV2FpdEZvclNpbmdsZU9iamVjdCh0aWQsIElORklOSVRFKTsKKwlpZiAoY2xvc2Vz
b2NrZXQoZmQpID09IFNPQ0tFVF9FUlJPUikgeworCQlmcHJpbnRmKHN0ZGVyciwgImNsb3Nlc29j
a2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJfQor
CVdTQUNsZWFudXAoKTsKKyNlbHNlCisJcHRocmVhZF9jYW5jZWwodGlkKTsKKwlwdGhyZWFkX2pv
aW4odGlkLCBOVUxMKTsKKwlpZiAoY2xvc2UoZmQpIDwgMCkgeworCQlwZXJyb3IoImNsb3NlIik7
CisJfQorI2VuZGlmCisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dy
YW1zL2Vrcl9zZXJ2ZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9zZXJ2ZXIuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hOWRkODVlZGQ3Y2FhYzMyM2M0YWRjY2ZjMTg4ODM5ZDI1ODY1NDE2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX3NlcnZlci5jCkBAIC0wLDAgKzEsMjgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorCisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpZm5kZWYg
X1dJTjMyCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4K
KyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHB0
aHJlYWQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjaW5jbHVkZSA8d2luc29jazIu
aD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgor
I2luY2x1ZGUgInByb2dyYW1zX2hlbHBlci5oIgorCisjZGVmaW5lIFBPUlQgNTAwMQorI2RlZmlu
ZSBNQVhfUEFDS0VUX1NJWkUgKDE8PDE2KQorI2RlZmluZSBTTEVFUCAxCisKKyNpZmRlZiBfV0lO
MzIKK3N0YXRpYyBEV09SRCBXSU5BUEkKKyNlbHNlCitzdGF0aWMgdm9pZCAqCisjZW5kaWYKK2hh
bmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKK3sKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsK
KyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKwljaGFyIGJ1ZltNQVhfUEFDS0VUX1NJWkVdOwor
CWNoYXIgKmR1bXBfYnVmOworCXNzaXplX3QgbGVuZ3RoOworCisjaWZkZWYgX1dJTjMyCisJZmRw
ID0gKFNPQ0tFVCAqKWFyZzsKKyNlbHNlCisJZmRwID0gKGludCAqKWFyZzsKKyNlbmRpZgorCWZv
ciAoOzspIHsKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisJCXB0aHJlYWRfdGVzdGNhbmNlbCgp
OworI2VuZGlmCisJCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJWkUsIDAp
OworCQlpZiAobGVuZ3RoID4gMCkgeworCQkJaWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVtcHBh
Y2tldChidWYsIChzaXplX3QpbGVuZ3RoLCBTQ1RQX0RVTVBfSU5CT1VORCkpICE9IE5VTEwpIHsK
KwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgZHVtcF9idWYpOworCQkJCXVzcnNjdHBfZnJlZWR1
bXBidWZmZXIoZHVtcF9idWYpOworCQkJfQorCQkJdXNyc2N0cF9jb25uaW5wdXQoZmRwLCBidWYs
IChzaXplX3QpbGVuZ3RoLCAwKTsKKwkJfQorCX0KKyNpZmRlZiBfV0lOMzIKKwlyZXR1cm4gMDsK
KyNlbHNlCisJcmV0dXJuIChOVUxMKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50Citjb25uX291
dHB1dCh2b2lkICphZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1
aW50OF90IHNldF9kZikKK3sKKwljaGFyICpkdW1wX2J1ZjsKKyNpZmRlZiBfV0lOMzIKKwlTT0NL
RVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorCWZk
cCA9IChTT0NLRVQgKilhZGRyOworI2Vsc2UKKwlmZHAgPSAoaW50ICopYWRkcjsKKyNlbmRpZgor
CWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmLCBsZW5ndGgsIFNDVFBfRFVN
UF9PVVRCT1VORCkpICE9IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIGR1bXBfYnVm
KTsKKwkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1Zik7CisJfQorI2lmZGVmIF9XSU4z
MgorCWlmIChzZW5kKCpmZHAsIGJ1ZiwgKGludClsZW5ndGgsIDApID09IFNPQ0tFVF9FUlJPUikg
eworCQlyZXR1cm4gKFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJaWYgKHNlbmQoKmZkcCwg
YnVmLCBsZW5ndGgsIDApIDwgMCkgeworCQlyZXR1cm4gKGVycm5vKTsKKyNlbmRpZgorCX0gZWxz
ZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitzdGF0aWMgaW50CityZWNlaXZlX2NiKHN0cnVj
dCBzb2NrZXQgKnMsIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAg
ICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdz
LCB2b2lkICp1bHBfaW5mbykKK3sKKworCWlmIChkYXRhKSB7CisJCWlmIChmbGFncyAmIE1TR19O
T1RJRklDQVRJT04pIHsKKwkJCXByaW50ZigiTm90aWZpY2F0aW9uIG9mIGxlbmd0aCAlZCByZWNl
aXZlZC5cbiIsIChpbnQpZGF0YWxlbik7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIk1zZyBvZiBs
ZW5ndGggJWQgcmVjZWl2ZWQgdmlhICVwOiV1IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAldSBhbmQg
VFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LlxuIiwKKwkJCSAgICAgICAoaW50KWRhdGFsZW4s
CisJCQkgICAgICAgYWRkci5zY29ubi5zY29ubl9hZGRyLAorCQkJICAgICAgIG50b2hzKGFkZHIu
c2Nvbm4uc2Nvbm5fcG9ydCksCisJCQkgICAgICAgcmN2LnJjdl9zaWQsCisJCQkgICAgICAgcmN2
LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJCQkgICAgICAgKHVpbnQzMl90KW50
b2hsKHJjdi5yY3ZfcHBpZCksCisJCQkgICAgICAgcmN2LnJjdl9jb250ZXh0KTsKKwkJfQorCQlm
cmVlKGRhdGEpOworCX0gZWxzZSB7CisJCXVzcnNjdHBfY2xvc2Uocyk7CisJfQorCXJldHVybiAo
MSk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBz
b2NrYWRkcl9pbiBzaW47CisJc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47CisjaWZkZWYgX1dJ
TjMyCisJU09DS0VUIGZkOworI2Vsc2UKKwlpbnQgZmQsIHJjOworI2VuZGlmCisJc3RydWN0IHNv
Y2tldCAqczsKKyNpZmRlZiBfV0lOMzIKKwlIQU5ETEUgdGlkOworI2Vsc2UKKwlwdGhyZWFkX3Qg
dGlkOworI2VuZGlmCisjaWZkZWYgX1dJTjMyCisJV1NBREFUQSB3c2FEYXRhOworI2VuZGlmCisK
KwlpZiAoYXJnYyA8IDQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogdGhpcyBwcm9ncmFt
IHJlcXVpcmVzIDQgYXJndW1lbnRzIVxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisK
KyNpZmRlZiBfV0lOMzIKKwlpZiAoV1NBU3RhcnR1cChNQUtFV09SRCgyLDIpLCAmd3NhRGF0YSkg
IT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIldTQVN0YXJ0dXAgZmFpbGVkXG4iKTsKKwkJZXhp
dCAoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKwl1c3JzY3RwX2luaXQoMCwgY29ubl9vdXRw
dXQsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJLyogc2V0IHVwIGEgY29ubmVjdGVkIFVEUCBzb2Nr
ZXQgKi8KKyNpZmRlZiBfV0lOMzIKKwlpZiAoKGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdS
QU0sIElQUFJPVE9fVURQKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkJZnByaW50ZihzdGRlcnIs
ICJzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsK
KwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKChmZCA9IHNvY2tldChBRl9J
TkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpIDwgMCkgeworCQlwZXJyb3IoInNvY2tldCIp
OworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJbWVtc2V0KCZzaW4sIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Cisj
aWZkZWYgSEFWRV9TSU5fTEVOCisJc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKTsKKyNlbmRpZgorCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCWlm
ICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbMV0sICZzaW4uc2luX2FkZHIuc19hZGRyKSl7CisJ
CWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7CisJCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKKwl9CisjaWZkZWYgX1dJTjMyCisJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9S
KSB7CisJCWZwcmludGYoc3RkZXJyLCAiYmluZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwg
V1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlp
ZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJiaW5kIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsK
Kwl9CisjZW5kaWYKKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikp
OworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW4u
c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJc2luLnNpbl9w
b3J0ID0gaHRvbnMoYXRvaShhcmd2WzRdKSk7CisJaWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJn
dlszXSwgJnNpbi5zaW5fYWRkci5zX2FkZHIpKXsKKwkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBh
ZGRyZXNzXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNpZmRlZiBfV0lOMzIKKwlp
ZiAoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJZnByaW50ZihzdGRlcnIsICJjb25uZWN0
KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQo
RVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2th
ZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3Io
ImNvbm5lY3QiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorI2lmZGVmIFND
VFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05P
TkUpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZSgwKTsKKwl1
c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmQpOworI2lmZGVmIF9XSU4zMgorCWlm
ICgodGlkID0gQ3JlYXRlVGhyZWFkKE5VTEwsIDAsICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikm
ZmQsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ3JlYXRlVGhyZWFk
KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVsdVxuIiwgR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVY
SVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoKHJjID0gcHRocmVhZF9jcmVhdGUoJnRpZCwg
TlVMTCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZCkpICE9IDApIHsKKwkJZnByaW50Zihz
dGRlcnIsICJwdGhyZWFkX2NyZWF0ZTogJXNcbiIsIHN0cmVycm9yKHJjKSk7CisJCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKwlpZiAoKHMgPSB1c3JzY3RwX3NvY2tldChBRl9DT05O
LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCBOVUxMKSkg
PT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJfQorCW1lbXNldCgmc2Nv
bm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25uX2ZhbWls
eSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5fcG9ydCA9
IGh0b25zKFBPUlQpOworCXNjb25uLnNjb25uX2FkZHIgPSAodm9pZCAqKSZmZDsKKwlpZiAodXNy
c2N0cF9iaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfY29ubikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCX0KKwlpZiAo
dXNyc2N0cF9saXN0ZW4ocywgMSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsK
Kwl9CisJd2hpbGUgKDEpIHsKKwkJaWYgKHVzcnNjdHBfYWNjZXB0KHMsIE5VTEwsIE5VTEwpID09
IE5VTEwpIHsKKwkJCXBlcnJvcigidXNyc2N0cF9hY2NlcHQiKTsKKwkJfQorCX0KKwlyZXR1cm4g
KDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvaHR0cF9jbGllbnQuYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3Byb2dyYW1zL2h0dHBfY2xpZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNjOTI4NjBhNzZhZWEw
ZGVkMDA2N2E2N2Q5YzU2NTYzNGVlMWQ2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3By
b2dyYW1zL2h0dHBfY2xpZW50LmMKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBGZWxpeCBXZWlucmFuaworICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM
QUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFVzYWdlOiBodHRwX2Ns
aWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBbbG9jYWxfcG9ydF0gW2xvY2FsX2VuY2Fwc19w
b3J0XSBbcmVtb3RlX2VuY2Fwc19wb3J0XSBbdXJpXQorICoKKyAqIEV4YW1wbGUKKyAqIENsaWVu
dDogJCAuL2h0dHBfY2xpZW50IDIxMi4yMDEuMTIxLjEwMCA4MCAwIDk4OTkgOTg5OSAvY2dpLWJp
bi9oZQorICogICAgICAgICAgIC4vaHR0cF9jbGllbnQgMmEwMjpjNmEwOjQwMTU6MTA6OjEwMCA4
MCAwIDk4OTkgOTg5OSAvY2dpLWJpbi9oZQorICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUg
X0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+
CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8
c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8
c3lzL3RpbWUuaD4KKyNlbHNlCisjaW5jbHVkZSA8aW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHVzcnNjdHAuaD4K
KyNpbmNsdWRlICJwcm9ncmFtc19oZWxwZXIuaCIKKworI2RlZmluZSBSRVRWQUxfQ0FUQ0hBTEwg
ICAgIDUwCisjZGVmaW5lIFJFVFZBTF9USU1FT1VUICAgICAgNjAKKyNkZWZpbmUgUkVUVkFMX0VD
T05OUkVGVVNFRCA2MQorCitpbnQgZG9uZSA9IDA7CitzdGF0aWMgY29uc3QgY2hhciAqcmVxdWVz
dF9wcmVmaXggPSAiR0VUIjsKK3N0YXRpYyBjb25zdCBjaGFyICpyZXF1ZXN0X3Bvc3RmaXggPSAi
SFRUUC8xLjBcclxuVXNlci1hZ2VudDogbGlidXNyc2N0cFxyXG5Db25uZWN0aW9uOiBjbG9zZVxy
XG5cclxuIjsKK2NoYXIgcmVxdWVzdFs1MTJdOworCisjaWZkZWYgX1dJTjMyCit0eXBlZGVmIGNo
YXIqIGNhZGRyX3Q7CisjZW5kaWYKKworc3RhdGljIGludAorcmVjZWl2ZV9jYihzdHJ1Y3Qgc29j
a2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAg
ICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywg
dm9pZCAqdWxwX2luZm8pCit7CisJaWYgKGRhdGEgPT0gTlVMTCkgeworCQlkb25lID0gMTsKKwkJ
dXNyc2N0cF9jbG9zZShzb2NrKTsKKwl9IGVsc2UgeworCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJ
Q0FUSU9OKSB7CisJCQloYW5kbGVfbm90aWZpY2F0aW9uKCh1bmlvbiBzY3RwX25vdGlmaWNhdGlv
biAqKWRhdGEsIGRhdGFsZW4pOworCQl9IGVsc2UgeworI2lmZGVmIF9XSU4zMgorCQlfd3JpdGUo
X2ZpbGVubyhzdGRvdXQpLCBkYXRhLCAodW5zaWduZWQgaW50KWRhdGFsZW4pOworI2Vsc2UKKwkJ
aWYgKHdyaXRlKGZpbGVubyhzdGRvdXQpLCBkYXRhLCBkYXRhbGVuKSA8IDApIHsKKwkJCXBlcnJv
cigid3JpdGUiKTsKKwkJfQorI2VuZGlmCisJCX0KKwkJZnJlZShkYXRhKTsKKwl9CisJcmV0dXJu
ICgxKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0
IHNvY2tldCAqc29jazsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisJc29ja2xlbl90IGFkZHJf
bGVuOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyNDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFk
ZHI2OworCXN0cnVjdCBzb2NrYWRkcl9pbiBiaW5kNDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGJp
bmQ2OworCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyBlbmNhcHM7CisJc3RydWN0IHNjdHBfc25kaW5m
byBzbmRpbmZvOworCXN0cnVjdCBzY3RwX3J0b2luZm8gcnRvaW5mbzsKKwlzdHJ1Y3Qgc2N0cF9p
bml0bXNnIGluaXRtc2c7CisJc3RydWN0IHNjdHBfZXZlbnQgZXZlbnQ7CisJaW50IHJlc3VsdCA9
IDA7CisJdW5zaWduZWQgaW50IGk7CisJdWludDhfdCBhZGRyZXNzX2ZhbWlseSA9IDA7CisJdWlu
dDE2X3QgZXZlbnRfdHlwZXNbXSA9IHtTQ1RQX0FTU09DX0NIQU5HRSwKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfUEVFUl9BRERSX0NIQU5HRSwKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNDVFBfU0VORF9GQUlMRURfRVZFTlQsCisgCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgU0NUUF9SRU1PVEVfRVJST1IsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NI
VVRET1dOX0VWRU5ULAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9BREFQVEFUSU9O
X0lORElDQVRJT04sCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJQUxfREVM
SVZFUllfRVZFTlQKKwkgICAgICAgICAgICAgICAgICAgICAgICB9OworCisJaWYgKGFyZ2MgPCAz
KSB7CisJCXByaW50ZigiVXNhZ2U6IGh0dHBfY2xpZW50IHJlbW90ZV9hZGRyIHJlbW90ZV9wb3J0
IFtsb2NhbF9wb3J0XSBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdIFt1
cmldXG4iKTsKKwkJcmV0dXJuKEVYSVRfRkFJTFVSRSk7CisJfQorCisJbWVtc2V0KCh2b2lkICop
JmFkZHI0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJbWVtc2V0KCh2b2lkICop
JmFkZHI2LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCisJaWYgKGluZXRfcHRv
bihBRl9JTkVULCBhcmd2WzFdLCAmYWRkcjQuc2luX2FkZHIpID09IDEpIHsKKwkJYWRkcmVzc19m
YW1pbHkgPSBBRl9JTkVUOworCisJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI0Owor
CQlhZGRyX2xlbiA9IHNpemVvZihhZGRyNCk7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCWFkZHI0
LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQlhZGRyNC5z
aW5fZmFtaWx5ID0gQUZfSU5FVDsKKwkJYWRkcjQuc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3Zb
Ml0pKTsKKwl9IGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgYXJndlsxXSwgJmFkZHI2LnNp
bjZfYWRkcikgPT0gMSkgeworCQlhZGRyZXNzX2ZhbWlseSA9IEFGX0lORVQ2OworCisJCWFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI2OworCQlhZGRyX2xlbiA9IHNpemVvZihhZGRyNik7
CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQlhZGRyNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQlhZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owor
CQlhZGRyNi5zaW42X3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwl9IGVsc2UgeworCQlw
cmludGYoIlVuc3VwcG9ydGVkIGRlc3RpbmF0aW9uIGFkZHJlc3MgLSB1c2UgSVB2NCBvciBJUHY2
IGFkZHJlc3NcbiIpOworCQlyZXN1bHQgPSBSRVRWQUxfQ0FUQ0hBTEw7CisJCWdvdG8gb3V0Owor
CX0KKworCWlmIChhcmdjID4gNCkgeworCQl1c3JzY3RwX2luaXQoYXRvaShhcmd2WzRdKSwgTlVM
TCwgZGVidWdfcHJpbnRmX3N0YWNrKTsKKwl9IGVsc2UgeworCQl1c3JzY3RwX2luaXQoOTg5OSwg
TlVMTCwgZGVidWdfcHJpbnRmX3N0YWNrKTsKKwl9CisKKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNy
c2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19BTEwpOworI2VuZGlmCisK
Kwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUoMik7CisJdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfbm9fY3N1bV9vbl9sb29wYmFjaygwKTsKKworCWlmICgoc29jayA9IHVzcnNjdHBf
c29ja2V0KGFkZHJlc3NfZmFtaWx5LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZl
X2NiLCBOVUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0
Iik7CisJCXJlc3VsdCA9IFJFVFZBTF9DQVRDSEFMTDsKKwkJZ290byBvdXQ7CisJfQorCisJbWVt
c2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisJZXZlbnQuc2VfYXNzb2NfaWQgPSBTQ1RQ
X0FMTF9BU1NPQzsKKwlldmVudC5zZV9vbiA9IDE7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihl
dmVudF90eXBlcykgLyBzaXplb2YodWludDE2X3QpOyBpKyspIHsKKwkJZXZlbnQuc2VfdHlwZSA9
IGV2ZW50X3R5cGVzW2ldOworCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9f
U0NUUCwgU0NUUF9FVkVOVCwgJmV2ZW50LCBzaXplb2YoZXZlbnQpKSA8IDApIHsKKwkJCXBlcnJv
cigic2V0c29ja29wdCBTQ1RQX0VWRU5UIik7CisJCX0KKwl9CisKKwlydG9pbmZvLnNydG9fYXNz
b2NfaWQgPSAwOworCXJ0b2luZm8uc3J0b19pbml0aWFsID0gMTAwMDsKKwlydG9pbmZvLnNydG9f
bWluID0gMTAwMDsKKwlydG9pbmZvLnNydG9fbWF4ID0gODAwMDsKKwlpZiAodXNyc2N0cF9zZXRz
b2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SVE9JTkZPLCAoY29uc3Qgdm9pZCAqKSZy
dG9pbmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9ydG9pbmZvKSkgPCAwKSB7CisJ
CXBlcnJvcigic2V0c29ja29wdCIpOworCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCQlyZXN1bHQg
PSBSRVRWQUxfQ0FUQ0hBTEw7CisJCWdvdG8gb3V0OworCX0KKwlpbml0bXNnLnNpbml0X251bV9v
c3RyZWFtcyA9IDE7CisJaW5pdG1zZy5zaW5pdF9tYXhfaW5zdHJlYW1zID0gMTsKKwlpbml0bXNn
LnNpbml0X21heF9hdHRlbXB0cyA9IDU7CisJaW5pdG1zZy5zaW5pdF9tYXhfaW5pdF90aW1lbyA9
IDQwMDA7CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBf
SU5JVE1TRywgKGNvbnN0IHZvaWQgKikmaW5pdG1zZywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0
IHNjdHBfaW5pdG1zZykpIDwgMCkgeworCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKKwkJdXNyc2N0
cF9jbG9zZShzb2NrKTsKKwkJcmVzdWx0ID0gUkVUVkFMX0NBVENIQUxMOworCQlnb3RvIG91dDsK
Kwl9CisKKwlpZiAoYXJnYyA+IDMpIHsKKworCQlpZiAoYWRkcmVzc19mYW1pbHkgPT0gQUZfSU5F
VCkgeworCQkJbWVtc2V0KCh2b2lkICopJmJpbmQ0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKSk7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCQliaW5kNC5zaW5fbGVuID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJCQliaW5kNC5zaW5fZmFtaWx5ID0gQUZfSU5F
VDsKKwkJCWJpbmQ0LnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzNdKSk7CisJCQliaW5kNC5z
aW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKworCQkJaWYgKHVzcnNjdHBfYmlu
ZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmJpbmQ0LCBzaXplb2YoYmluZDQpKSA8IDApIHsK
KwkJCQlwZXJyb3IoImJpbmQiKTsKKwkJCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCQkJCXJlc3Vs
dCA9IFJFVFZBTF9DQVRDSEFMTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJ
CW1lbXNldCgodm9pZCAqKSZiaW5kNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsK
KyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCQliaW5kNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQkJYmluZDYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsK
KwkJCWJpbmQ2LnNpbjZfcG9ydCA9IGh0b25zKGF0b2koYXJndlszXSkpOworCQkJYmluZDYuc2lu
Nl9hZGRyID0gaW42YWRkcl9hbnk7CisJCQlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qg
c29ja2FkZHIgKikmYmluZDYsIHNpemVvZihiaW5kNikpIDwgMCkgeworCQkJCXBlcnJvcigiYmlu
ZCIpOworCQkJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJCQkJcmVzdWx0ID0gUkVUVkFMX0NBVENI
QUxMOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCisJaWYgKGFyZ2MgPiA1KSB7CisJ
CW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7CisJCWVu
Y2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBhZGRyZXNzX2ZhbWlseTsKKwkJZW5jYXBzLnN1
ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzVdKSk7CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQo
c29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQsIChjb25zdCB2
b2lkICopJmVuY2FwcywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkg
PCAwKSB7CisJCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKKwkJCXVzcnNjdHBfY2xvc2Uoc29jayk7
CisJCQlyZXN1bHQgPSBSRVRWQUxfQ0FUQ0hBTEw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwor
CWlmIChhcmdjID4gNikgeworI2lmZGVmIF9XSU4zMgorCQlpZiAoX3NucHJpbnRmKHJlcXVlc3Qs
IHNpemVvZihyZXF1ZXN0KSwgIiVzICVzICVzIiwgcmVxdWVzdF9wcmVmaXgsIGFyZ3ZbNl0sIHJl
cXVlc3RfcG9zdGZpeCkgPCAwKSB7CisjZWxzZQorCQlpZiAoc25wcmludGYocmVxdWVzdCwgc2l6
ZW9mKHJlcXVlc3QpLCAiJXMgJXMgJXMiLCByZXF1ZXN0X3ByZWZpeCwgYXJndls2XSwgcmVxdWVz
dF9wb3N0Zml4KSA8IDApIHsKKyNlbmRpZgorCQkJcmVxdWVzdFswXSA9ICdcMCc7CisJCX0KKwl9
IGVsc2UgeworI2lmZGVmIF9XSU4zMgorCQlpZiAoX3NucHJpbnRmKHJlcXVlc3QsIHNpemVvZihy
ZXF1ZXN0KSwgIiVzICVzICVzIiwgcmVxdWVzdF9wcmVmaXgsICIvIiwgcmVxdWVzdF9wb3N0Zml4
KSA8IDApIHsKKyNlbHNlCisJCWlmIChzbnByaW50ZihyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCks
ICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCAiLyIsIHJlcXVlc3RfcG9zdGZpeCkgPCAwKSB7
CisjZW5kaWYKKwkJCXJlcXVlc3RbMF0gPSAnXDAnOworCQl9CisJfQorCisJcHJpbnRmKCJcbkhU
VFAgcmVxdWVzdDpcbiVzXG4iLCByZXF1ZXN0KTsKKwlwcmludGYoIlxuSFRUUCByZXNwb25zZTpc
biIpOworCisJaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCBhZGRyLCBhZGRyX2xlbikgPCAwKSB7
CisJCWlmIChlcnJubyA9PSBFQ09OTlJFRlVTRUQpIHsKKwkJCXJlc3VsdCA9IFJFVFZBTF9FQ09O
TlJFRlVTRUQ7CisJCX0gZWxzZSBpZiAoZXJybm8gPT0gRVRJTUVET1VUKSB7CisJCQlyZXN1bHQg
PSBSRVRWQUxfVElNRU9VVDsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCA9IFJFVFZBTF9DQVRDSEFM
TDsKKwkJfQorCQlwZXJyb3IoInVzcnNjdHBfY29ubmVjdCIpOworCQl1c3JzY3RwX2Nsb3NlKHNv
Y2spOworCisJCWdvdG8gb3V0OworCX0KKworCW1lbXNldCgmc25kaW5mbywgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3NuZGluZm8pKTsKKwlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoNjMpOyAvKiBQ
UElEIGZvciBIVFRQL1NDVFAgKi8KKwkvKiBzZW5kIEdFVCByZXF1ZXN0ICovCisJaWYgKHVzcnNj
dHBfc2VuZHYoc29jaywgcmVxdWVzdCwgc3RybGVuKHJlcXVlc3QpLCBOVUxMLCAwLCAmc25kaW5m
bywgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwg
MCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsKKwkJdXNyc2N0cF9jbG9zZShzb2NrKTsK
KwkJcmVzdWx0ID0gUkVUVkFMX0NBVENIQUxMOworCQlnb3RvIG91dDsKKwl9CisKKwl3aGlsZSAo
IWRvbmUpIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMSoxMDAwKTsKKyNlbHNlCisJCXNsZWVw
KDEpOworI2VuZGlmCisJfQorb3V0OgorCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsK
KyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMTAwMCk7CisjZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRp
ZgorCX0KKwlwcmludGYoIkZpbmlzaGVkLCByZXR1cm5pbmcgd2l0aCAlZFxuIiwgcmVzdWx0KTsK
KwlyZXR1cm4gKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9odHRw
X2NsaWVudF91cGNhbGwuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2h0dHBfY2xpZW50X3VwY2FsbC5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA0MjIxYzI1OTM4MTIzNjZkODUzZTA1NTViMzc5YWI4N2NlMDc3NDAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9odHRwX2NsaWVudF91cGNhbGwuYwpA
QCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEZlbGl4IFdl
aW5yYW5rCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqLworCisvKgorICogVXNhZ2U6IGh0dHBfY2xpZW50X3VwY2FsbCByZW1vdGVfYWRk
ciByZW1vdGVfcG9ydCBbbG9jYWxfcG9ydF0gW2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2Vu
Y2Fwc19wb3J0XSBbdXJpXQorICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNV
UkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Rk
bGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaWZuZGVm
IF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUu
aD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWViLmg+
CisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHVzcnNjdHAuaD4KKyNpbmNsdWRl
ICJwcm9ncmFtc19oZWxwZXIuaCIKKworCisjZGVmaW5lIFJFVFZBTF9DQVRDSEFMTCAgICAgNTAK
KyNkZWZpbmUgUkVUVkFMX1RJTUVPVVQgICAgICA2MAorI2RlZmluZSBSRVRWQUxfRUNPTk5SRUZV
U0VEIDYxCisKK2ludCBkb25lID0gMDsKK2ludCB3cml0ZVBlbmRpbmcgPSAxOworaW50IHJlc3Vs
dCA9IDA7CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZXF1ZXN0X3ByZWZpeCA9ICJHRVQiOworc3Rh
dGljIGNvbnN0IGNoYXIgKnJlcXVlc3RfcG9zdGZpeCA9ICJIVFRQLzEuMFxyXG5Vc2VyLWFnZW50
OiBsaWJ1c3JzY3RwXHJcbkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4iOworY2hhciByZXF1ZXN0
WzUxMl07CisKKyNpZmRlZiBfV0lOMzIKK3R5cGVkZWYgY2hhciogY2FkZHJfdDsKKyNlbmRpZgor
CisjZGVmaW5lIEJVRkZFUlNJWkUgKDE8PDE2KQorCitzdGF0aWMgdm9pZCBoYW5kbGVfdXBjYWxs
KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHZvaWQgKmFyZywgaW50IGZsZ3MpCit7CisJaW50IGV2ZW50
cyA9IHVzcnNjdHBfZ2V0X2V2ZW50cyhzb2NrKTsKKwlzc2l6ZV90IGJ5dGVzU2VudDsKKwljaGFy
ICpidWY7CisKKwlpZiAoKGV2ZW50cyAmIFNDVFBfRVZFTlRfUkVBRCkgJiYgIWRvbmUpIHsKKwkJ
c3RydWN0IHNjdHBfcmVjdnZfcm4gcm47CisJCXNzaXplX3QgbjsKKwkJc3RydWN0IHNvY2thZGRy
X2luIGFkZHI7CisJCWJ1ZiA9IG1hbGxvYyhCVUZGRVJTSVpFKTsKKwkJaW50IGZsYWdzID0gMDsK
KwkJc29ja2xlbl90IGxlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisJCXVuc2lnbmVkIGludCBpbmZvdHlwZSA9IDA7CisJCXNvY2tsZW5fdCBpbmZvbGVuID0gc2l6
ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3JuKTsKKworCQltZW1zZXQoJnJuLCAwLCBzaXplb2Yoc3Ry
dWN0IHNjdHBfcmVjdnZfcm4pKTsKKwkJbiA9IHVzcnNjdHBfcmVjdnYoc29jaywgYnVmLCBCVUZG
RVJTSVpFLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmbGVuLCAodm9pZCAqKSZybiwKKwkJ
ICAgICAgICAgICAgICAgICAgJmluZm9sZW4sICZpbmZvdHlwZSwgJmZsYWdzKTsKKworCQlpZiAo
biA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFQ09OTlJFRlVTRUQpIHsKKwkJCQlyZXN1bHQgPSBS
RVRWQUxfRUNPTk5SRUZVU0VEOworCQkJfSBlbHNlIGlmIChlcnJubyA9PSBFVElNRURPVVQpIHsK
KwkJCQlyZXN1bHQgPSBSRVRWQUxfVElNRU9VVDsKKwkJCX0gZWxzZSB7CisJCQkJcmVzdWx0ID0g
UkVUVkFMX0NBVENIQUxMOworCQkJfQorCQkJcGVycm9yKCJ1c3JzY3RwX3JlY3Z2Iik7CisJCX0K
KworCQlpZiAobiA8PSAwKSB7CisJCQlkb25lID0gMTsKKwkJCXVzcnNjdHBfY2xvc2Uoc29jayk7
CisJCX0gZWxzZSB7CisjaWZkZWYgX1dJTjMyCisJCQlfd3JpdGUoX2ZpbGVubyhzdGRvdXQpLCBi
dWYsICh1bnNpZ25lZCBpbnQpbik7CisjZWxzZQorCQkJaWYgKHdyaXRlKGZpbGVubyhzdGRvdXQp
LCBidWYsIG4pIDwgMCkgeworCQkJCXBlcnJvcigid3JpdGUiKTsKKwkJCX0KKyNlbmRpZgorCQl9
CisJCWZyZWUoYnVmKTsKKwl9CisKKwlpZiAoKGV2ZW50cyAmIFNDVFBfRVZFTlRfV1JJVEUpICYm
IHdyaXRlUGVuZGluZyAmJiAhZG9uZSkgeworCQl3cml0ZVBlbmRpbmcgPSAwOworCQlwcmludGYo
IlxuSFRUUCByZXF1ZXN0OlxuJXNcbiIsIHJlcXVlc3QpOworCQlwcmludGYoIlxuSFRUUCByZXNw
b25zZTpcbiIpOworCisJCS8qIHNlbmQgR0VUIHJlcXVlc3QgKi8KKwkJYnl0ZXNTZW50ID0gdXNy
c2N0cF9zZW5kdihzb2NrLCByZXF1ZXN0LCBzdHJsZW4ocmVxdWVzdCksIE5VTEwsIDAsIE5VTEws
IDAsIFNDVFBfU0VORFZfTk9JTkZPLCAwKTsKKwkJaWYgKGJ5dGVzU2VudCA8IDApIHsKKwkJCXBl
cnJvcigidXNyc2N0cF9zZW5kdiIpOworCQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJfSBlbHNl
IHsKKwkJCXByaW50ZigiJXpkIGJ5dGVzIHNlbnRcbiIsIGJ5dGVzU2VudCk7CisJCX0KKwl9Cit9
CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrZXQg
KnNvY2s7CisJc3RydWN0IHNvY2thZGRyICphZGRyOworCXNvY2tsZW5fdCBhZGRyX2xlbjsKKwlz
dHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjQ7CisJc3RydWN0IHNvY2thZGRyX2luNiBhZGRyNjsKKwlz
dHJ1Y3Qgc29ja2FkZHJfaW4gYmluZDQ7CisJc3RydWN0IHNvY2thZGRyX2luNiBiaW5kNjsKKwlz
dHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBzOworCXN0cnVjdCBzY3RwX3J0b2luZm8gcnRvaW5m
bzsKKwlzdHJ1Y3Qgc2N0cF9pbml0bXNnIGluaXRtc2c7CisJdWludDhfdCBhZGRyZXNzX2ZhbWls
eSA9IDA7CisKKwlpZiAoYXJnYyA8IDMpIHsKKwkJcHJpbnRmKCJVc2FnZTogaHR0cF9jbGllbnRf
dXBjYWxsIHJlbW90ZV9hZGRyIHJlbW90ZV9wb3J0IFtsb2NhbF9wb3J0XSBbbG9jYWxfZW5jYXBz
X3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdIFt1cmldXG4iKTsKKwkJcmV0dXJuKEVYSVRfRkFJ
TFVSRSk7CisJfQorCisJbWVtc2V0KCh2b2lkICopJmFkZHI0LCAwLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKSk7CisJbWVtc2V0KCh2b2lkICopJmFkZHI2LCAwLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNikpOworCisJaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmYWRkcjQu
c2luX2FkZHIpID09IDEpIHsKKwkJYWRkcmVzc19mYW1pbHkgPSBBRl9JTkVUOworCisJCWFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI0OworCQlhZGRyX2xlbiA9IHNpemVvZihhZGRyNCk7
CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCWFkZHI0LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKTsKKyNlbmRpZgorCQlhZGRyNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwkJYWRk
cjQuc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwl9IGVsc2UgaWYgKGluZXRfcHRv
bihBRl9JTkVUNiwgYXJndlsxXSwgJmFkZHI2LnNpbjZfYWRkcikgPT0gMSkgeworCQlhZGRyZXNz
X2ZhbWlseSA9IEFGX0lORVQ2OworCisJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI2
OworCQlhZGRyX2xlbiA9IHNpemVvZihhZGRyNik7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQlh
ZGRyNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQlh
ZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCQlhZGRyNi5zaW42X3BvcnQgPSBodG9ucyhh
dG9pKGFyZ3ZbMl0pKTsKKwl9IGVsc2UgeworCQlwcmludGYoIlVuc3VwcG9ydGVkIGRlc3RpbmF0
aW9uIGFkZHJlc3MgLSB1c2UgSVB2NCBvciBJUHY2IGFkZHJlc3NcbiIpOworCQlyZXN1bHQgPSBS
RVRWQUxfQ0FUQ0hBTEw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhcmdjID4gNCkgeworCQl1
c3JzY3RwX2luaXQoYXRvaShhcmd2WzRdKSwgTlVMTCwgZGVidWdfcHJpbnRmX3N0YWNrKTsKKwl9
IGVsc2UgeworCQl1c3JzY3RwX2luaXQoOTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmX3N0YWNrKTsK
Kwl9CisKKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdf
b24oU0NUUF9ERUJVR19BTEwpOworI2VuZGlmCisKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9i
bGFja2hvbGUoMik7CisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbm9fY3N1bV9vbl9sb29wYmFj
aygwKTsKKworCWlmICgoc29jayA9IHVzcnNjdHBfc29ja2V0KGFkZHJlc3NfZmFtaWx5LCBTT0NL
X1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBOVUxMLCBOVUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkgewor
CQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJCXJlc3VsdCA9IFJFVFZBTF9DQVRDSEFMTDsK
KwkJZ290byBvdXQ7CisJfQorCisJLyogdXNyc2N0cF9zZXRfbm9uX2Jsb2NraW5nKHNvY2ssIDEp
OyAqLworCisJcnRvaW5mby5zcnRvX2Fzc29jX2lkID0gMDsKKwlydG9pbmZvLnNydG9faW5pdGlh
bCA9IDEwMDA7CisJcnRvaW5mby5zcnRvX21pbiA9IDEwMDA7CisJcnRvaW5mby5zcnRvX21heCA9
IDgwMDA7CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBf
UlRPSU5GTywgKGNvbnN0IHZvaWQgKikmcnRvaW5mbywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0
IHNjdHBfcnRvaW5mbykpIDwgMCkgeworCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKKwkJdXNyc2N0
cF9jbG9zZShzb2NrKTsKKwkJcmVzdWx0ID0gUkVUVkFMX0NBVENIQUxMOworCQlnb3RvIG91dDsK
Kwl9CisJaW5pdG1zZy5zaW5pdF9udW1fb3N0cmVhbXMgPSAxOworCWluaXRtc2cuc2luaXRfbWF4
X2luc3RyZWFtcyA9IDE7CisJaW5pdG1zZy5zaW5pdF9tYXhfYXR0ZW1wdHMgPSA1OworCWluaXRt
c2cuc2luaXRfbWF4X2luaXRfdGltZW8gPSA0MDAwOworCWlmICh1c3JzY3RwX3NldHNvY2tvcHQo
c29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0lOSVRNU0csIChjb25zdCB2b2lkICopJmluaXRtc2cs
IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRtc2cpKSA8IDApIHsKKwkJcGVycm9y
KCJzZXRzb2Nrb3B0Iik7CisJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJCXJlc3VsdCA9IFJFVFZB
TF9DQVRDSEFMTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGFyZ2MgPiAzKSB7CisKKwkJaWYg
KGFkZHJlc3NfZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJCW1lbXNldCgodm9pZCAqKSZiaW5kNCwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQkJ
YmluZDQuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQkJ
YmluZDQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJCQliaW5kNC5zaW5fcG9ydCA9IGh0b25zKGF0
b2koYXJndlszXSkpOworCQkJYmluZDQuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FO
WSk7CisKKwkJCWlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZiaW5k
NCwgc2l6ZW9mKGJpbmQ0KSkgPCAwKSB7CisJCQkJcGVycm9yKCJiaW5kIik7CisJCQkJdXNyc2N0
cF9jbG9zZShzb2NrKTsKKwkJCQlyZXN1bHQgPSBSRVRWQUxfQ0FUQ0hBTEw7CisJCQkJZ290byBv
dXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQltZW1zZXQoKHZvaWQgKikmYmluZDYsIDAsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQkJYmluZDYu
c2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJCWJpbmQ2
LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJCQliaW5kNi5zaW42X3BvcnQgPSBodG9ucyhhdG9p
KGFyZ3ZbM10pKTsKKwkJCWJpbmQ2LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworCQkJaWYgKHVz
cnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmJpbmQ2LCBzaXplb2YoYmluZDYp
KSA8IDApIHsKKwkJCQlwZXJyb3IoImJpbmQiKTsKKwkJCQl1c3JzY3RwX2Nsb3NlKHNvY2spOwor
CQkJCXJlc3VsdCA9IFJFVFZBTF9DQVRDSEFMTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQor
CX0KKworCWlmIChhcmdjID4gNSkgeworCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVj
dCBzY3RwX3VkcGVuY2FwcykpOworCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gYWRk
cmVzc19mYW1pbHk7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJndls1XSkpOwor
CQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVf
VURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCAqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9m
KHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7
CisJCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCQkJcmVzdWx0ID0gUkVUVkFMX0NBVENIQUxMOwor
CQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoYXJnYyA+IDYpIHsKKyNpZmRlZiBfV0lOMzIK
KwkJaWYgKF9zbnByaW50ZihyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJl
cXVlc3RfcHJlZml4LCBhcmd2WzZdLCByZXF1ZXN0X3Bvc3RmaXgpIDwgMCkgeworI2Vsc2UKKwkJ
aWYgKHNucHJpbnRmKHJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgIiVzICVzICVzIiwgcmVxdWVz
dF9wcmVmaXgsIGFyZ3ZbNl0sIHJlcXVlc3RfcG9zdGZpeCkgPCAwKSB7CisjZW5kaWYKKwkJCXJl
cXVlc3RbMF0gPSAnXDAnOworCQl9CisJfSBlbHNlIHsKKyNpZmRlZiBfV0lOMzIKKwkJaWYgKF9z
bnByaW50ZihyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJl
Zml4LCAiLyIsIHJlcXVlc3RfcG9zdGZpeCkgPCAwKSB7CisjZWxzZQorCQlpZiAoc25wcmludGYo
cmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpLCAiJXMgJXMgJXMiLCByZXF1ZXN0X3ByZWZpeCwgIi8i
LCByZXF1ZXN0X3Bvc3RmaXgpIDwgMCkgeworI2VuZGlmCisJCQlyZXF1ZXN0WzBdID0gJ1wwJzsK
KwkJfQorCX0KKworCXByaW50ZigiXG5IVFRQIHJlcXVlc3Q6XG4lc1xuIiwgcmVxdWVzdCk7CisJ
cHJpbnRmKCJcbkhUVFAgcmVzcG9uc2U6XG4iKTsKKworCisJdXNyc2N0cF9zZXRfdXBjYWxsKHNv
Y2ssIGhhbmRsZV91cGNhbGwsIE5VTEwpOworCXVzcnNjdHBfc2V0X25vbl9ibG9ja2luZyhzb2Nr
LCAxKTsKKworCWlmICh1c3JzY3RwX2Nvbm5lY3Qoc29jaywgYWRkciwgYWRkcl9sZW4pIDwgMCkg
eworCQlpZiAoZXJybm8gIT0gRUlOUFJPR1JFU1MpIHsKKwkJCWlmIChlcnJubyA9PSBFQ09OTlJF
RlVTRUQpIHsKKwkJCQlyZXN1bHQgPSBSRVRWQUxfRUNPTk5SRUZVU0VEOworCQkJfSBlbHNlIGlm
IChlcnJubyA9PSBFVElNRURPVVQpIHsKKwkJCQlyZXN1bHQgPSBSRVRWQUxfVElNRU9VVDsKKwkJ
CX0gZWxzZSB7CisJCQkJcmVzdWx0ID0gUkVUVkFMX0NBVENIQUxMOworCQkJfQorCQkJcGVycm9y
KCJ1c3JzY3RwX2Nvbm5lY3QiKTsKKwkJfQorCX0KKworCXdoaWxlICghZG9uZSkgeworI2lmZGVm
IF9XSU4zMgorCQlTbGVlcCgxKjEwMDApOworI2Vsc2UKKwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9
CitvdXQ6CisJd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgor
CQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJCXNsZWVwKDEpOworI2VuZGlmCisJfQorCisJcHJpbnRm
KCJGaW5pc2hlZCwgcmV0dXJuaW5nIHdpdGggJWRcbiIsIHJlc3VsdCk7CisJcmV0dXJuIChyZXN1
bHQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvbWVzb24uYnVpbGQgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9wcm9ncmFtcy9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNjI5YTQ0YmNkMjVjNTZhMWQ1
YTNiOWIzZGJmNDYwZjRjZDRiYjFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3Jh
bXMvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwyOCBAQAorIyBIZWxwZXIgc291cmNlcyBmb3IgYWxs
IHByb2dyYW1zCitwcm9ncmFtc19oZWxwZXJfc291cmNlcyA9IGZpbGVzKCdwcm9ncmFtc19oZWxw
ZXIuYycpCisKKyMgUHJvZ3JhbXMgYW5kIHRoZWlyIHNvdXJjZXMKK3Byb2dyYW1zID0geworICAg
ICdjaGFyZ2VuX3NlcnZlcl91cGNhbGwnOiBmaWxlcygnY2hhcmdlbl9zZXJ2ZXJfdXBjYWxsLmMn
KSwKKyAgICAnY2xpZW50JzogZmlsZXMoJ2NsaWVudC5jJyksCisgICAgJ3N0X2NsaWVudCc6IGZp
bGVzKCdzdF9jbGllbnQuYycpLAorICAgICdjbGllbnRfdXBjYWxsJzogZmlsZXMoJ2NsaWVudF91
cGNhbGwuYycpLAorICAgICdkYXl0aW1lX3NlcnZlcic6IGZpbGVzKCdkYXl0aW1lX3NlcnZlci5j
JyksCisgICAgJ2RheXRpbWVfc2VydmVyX3VwY2FsbCc6IGZpbGVzKCdkYXl0aW1lX3NlcnZlcl91
cGNhbGwuYycpLAorICAgICdkaXNjYXJkX3NlcnZlcic6IGZpbGVzKCdkaXNjYXJkX3NlcnZlci5j
JyksCisgICAgJ2Rpc2NhcmRfc2VydmVyX3VwY2FsbCc6IGZpbGVzKCdkaXNjYXJkX3NlcnZlcl91
cGNhbGwuYycpLAorICAgICdlY2hvX3NlcnZlcic6IGZpbGVzKCdlY2hvX3NlcnZlci5jJyksCisg
ICAgJ2VjaG9fc2VydmVyX3VwY2FsbCc6IGZpbGVzKCdlY2hvX3NlcnZlcl91cGNhbGwuYycpLAor
ICAgICdla3JfY2xpZW50JzogZmlsZXMoJ2Vrcl9jbGllbnQuYycpLAorICAgICdla3JfbG9vcCc6
IGZpbGVzKCdla3JfbG9vcC5jJyksCisgICAgJ2Vrcl9sb29wX3VwY2FsbCc6IGZpbGVzKCdla3Jf
bG9vcF91cGNhbGwuYycpLAorICAgICdla3JfcGVlcic6IGZpbGVzKCdla3JfcGVlci5jJyksCisg
ICAgJ2Vrcl9zZXJ2ZXInOiBmaWxlcygnZWtyX3NlcnZlci5jJyksCisgICAgJ2h0dHBfY2xpZW50
JzogZmlsZXMoJ2h0dHBfY2xpZW50LmMnKSwKKyAgICAnaHR0cF9jbGllbnRfdXBjYWxsJzogZmls
ZXMoJ2h0dHBfY2xpZW50X3VwY2FsbC5jJyksCisgICAgJ3J0Y3dlYic6IGZpbGVzKCdydGN3ZWIu
YycpLAorICAgICd0ZXN0X2xpYm1nbXQnOiBmaWxlcygndGVzdF9saWJtZ210LmMnKSwKKyAgICAn
dGVzdF90aW1lcic6IGZpbGVzKCd0ZXN0X3RpbWVyLmMnKSwKKyAgICAndHNjdHAnOiBmaWxlcygn
dHNjdHAuYycpLAorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9wcm9ncmFtc19o
ZWxwZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Byb2dyYW1zX2hlbHBlci5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY2MWE1YjU2NDVkMmM4ZTI5ZGM4NmM0NmVmODdlYThiM2YwMjFlNDgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9wcm9ncmFtc19oZWxwZXIuYwpAQCAtMCwwICsxLDQ4NiBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgLTIwMjAgRmVsaXggV2VpbnJhbmsKKyAqCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisg
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor
ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9T
RUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl
IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx1c3JzY3RwLmg+CisK
KyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxhcnBhL2lu
ZXQuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWVi
Lmg+CisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAicHJvZ3JhbXNfaGVscGVy
LmgiCisKKyNkZWZpbmUgREVGQVVMVF9UQVJHRVQgc3Rkb3V0OworCitzdGF0aWMgRklMRSAqZGVi
dWdfdGFyZ2V0ID0gTlVMTDsKKworI2lmZGVmIF9XSU4zMgorc3RhdGljIHZvaWQKK2dldHRpbWVv
ZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHZvaWQgKmlnbm9yZSkKK3sKKwlGSUxFVElNRSBmaWxl
dGltZTsKKwlVTEFSR0VfSU5URUdFUiB1bGFyZ2U7CisKKwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGlt
ZSgmZmlsZXRpbWUpOworCXVsYXJnZS5Mb3dQYXJ0ID0gZmlsZXRpbWUuZHdMb3dEYXRlVGltZTsK
Kwl1bGFyZ2UuSGlnaFBhcnQgPSBmaWxldGltZS5kd0hpZ2hEYXRlVGltZTsKKwkvKiBDaGFuZ2Ug
YmFzZSBmcm9tIEphbiAxIDE2MDEgMDA6MDA6MDAgdG8gSmFuIDEgMTk3MCAwMDowMDowMCAqLwor
I2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisJdWxhcmdlLlF1YWRQYXJ0IC09IDExNjQ0NDczNjAw
MDAwMDAwMFVMTDsKKyNlbHNlCisJdWxhcmdlLlF1YWRQYXJ0IC09IDExNjQ0NDczNjAwMDAwMDAw
MFVJNjQ7CisjZW5kaWYKKwkvKgorCSAqIHVsYXJnZS5RdWFkUGFydCBpcyBub3cgdGhlIG51bWJl
ciBvZiAxMDAtbmFub3NlY29uZCBpbnRlcnZhbHMKKwkgKiBzaW5jZSBKYW4gMSAxOTcwIDAwOjAw
OjAwLgorCSAqLworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisJdHYtPnR2X3NlYyA9IChsb25n
KSh1bGFyZ2UuUXVhZFBhcnQgLyAxMDAwMDAwMFVMTCk7CisJdHYtPnR2X3VzZWMgPSAobG9uZyko
KHVsYXJnZS5RdWFkUGFydCAlIDEwMDAwMDAwVUxMKSAvIDEwVUxMKTsKKyNlbHNlCisJdHYtPnR2
X3NlYyA9IChsb25nKSh1bGFyZ2UuUXVhZFBhcnQgLyAxMDAwMDAwMFVJNjQpOworCXR2LT50dl91
c2VjID0gKGxvbmcpKCh1bGFyZ2UuUXVhZFBhcnQgJSAxMDAwMDAwMFVJNjQpIC8gMTBVSTY0KTsK
KyNlbmRpZgorfQorI2VuZGlmCisKK3ZvaWQKK2RlYnVnX3NldF90YXJnZXQoRklMRSAqZnApIHsK
KwlkZWJ1Z190YXJnZXQgPSBmcDsKK30KKwordm9pZAorZGVidWdfcHJpbnRmX2NsZWFuKGNvbnN0
IGNoYXIgKmZvcm1hdCwgLi4uKSB7CisJY2hhciBjaGFyYnVmWzEwMjRdOworCXZhX2xpc3QgYXA7
CisKKwlpZiAoZGVidWdfdGFyZ2V0ID09IE5VTEwpIHsKKwkJZGVidWdfdGFyZ2V0ID0gREVGQVVM
VF9UQVJHRVQ7CisJfQorCisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJaWYgKHZzbnByaW50Zihj
aGFyYnVmLCAxMDI0LCBmb3JtYXQsIGFwKSA8IDApIHsKKwkJY2hhcmJ1ZlswXSA9ICdcMCc7CisJ
fQorCXZhX2VuZChhcCk7CisKKwlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIiVzIiwgY2hhcmJ1Zik7
CisJZmZsdXNoKGRlYnVnX3RhcmdldCk7Cit9CisKK3ZvaWQKK2RlYnVnX3ByaW50Zihjb25zdCBj
aGFyICpmb3JtYXQsIC4uLikgeworCXZhX2xpc3QgYXA7CisJY2hhciBjaGFyYnVmWzEwMjRdOwor
CXN0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1lX21haW47CisJc3RydWN0IHRpbWV2YWwgdGltZV9u
b3c7CisJc3RydWN0IHRpbWV2YWwgdGltZV9kZWx0YTsKKworCWlmIChkZWJ1Z190YXJnZXQgPT0g
TlVMTCkgeworCQlkZWJ1Z190YXJnZXQgPSBERUZBVUxUX1RBUkdFVDsKKwl9CisKKwlpZiAodGlt
ZV9tYWluLnR2X3NlYyA9PSAwICAmJiB0aW1lX21haW4udHZfdXNlYyA9PSAwKSB7CisJCWdldHRp
bWVvZmRheSgmdGltZV9tYWluLCBOVUxMKTsKKwl9CisKKwlnZXR0aW1lb2ZkYXkoJnRpbWVfbm93
LCBOVUxMKTsKKwl0aW1lcnN1YigmdGltZV9ub3csICZ0aW1lX21haW4sICZ0aW1lX2RlbHRhKTsK
KworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCWlmICh2c25wcmludGYoY2hhcmJ1ZiwgMTAyNCwg
Zm9ybWF0LCBhcCkgPCAwKSB7CisJCWNoYXJidWZbMF0gPSAnXDAnOworCX0KKwl2YV9lbmQoYXAp
OworCisJZnByaW50ZihkZWJ1Z190YXJnZXQsICJbUF1bJXUuJTAzdV0gJXMiLCAodW5zaWduZWQg
aW50KSB0aW1lX2RlbHRhLnR2X3NlYywgKHVuc2lnbmVkIGludCkgdGltZV9kZWx0YS50dl91c2Vj
IC8gMTAwMCwgY2hhcmJ1Zik7CisJZmZsdXNoKGRlYnVnX3RhcmdldCk7Cit9CisKK3ZvaWQKK2Rl
YnVnX3ByaW50Zl9zdGFjayhjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFw
OworCWNoYXIgY2hhcmJ1ZlsxMDI0XTsKKwlzdGF0aWMgc3RydWN0IHRpbWV2YWwgdGltZV9tYWlu
OworCXN0cnVjdCB0aW1ldmFsIHRpbWVfbm93OworCXN0cnVjdCB0aW1ldmFsIHRpbWVfZGVsdGE7
CisKKwlpZiAoZGVidWdfdGFyZ2V0ID09IE5VTEwpIHsKKwkJZGVidWdfdGFyZ2V0ID0gREVGQVVM
VF9UQVJHRVQ7CisJfQorCisJaWYgKHRpbWVfbWFpbi50dl9zZWMgPT0gMCAgJiYgdGltZV9tYWlu
LnR2X3VzZWMgPT0gMCkgeworCQlnZXR0aW1lb2ZkYXkoJnRpbWVfbWFpbiwgTlVMTCk7CisJfQor
CisJZ2V0dGltZW9mZGF5KCZ0aW1lX25vdywgTlVMTCk7CisJdGltZXJzdWIoJnRpbWVfbm93LCAm
dGltZV9tYWluLCAmdGltZV9kZWx0YSk7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwlpZiAo
dnNucHJpbnRmKGNoYXJidWYsIDEwMjQsIGZvcm1hdCwgYXApIDwgMCkgeworCQljaGFyYnVmWzBd
ID0gJ1wwJzsKKwl9CisJdmFfZW5kKGFwKTsKKworCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiW1Nd
WyV1LiUwM3VdICVzIiwgKHVuc2lnbmVkIGludCkgdGltZV9kZWx0YS50dl9zZWMsICh1bnNpZ25l
ZCBpbnQpIHRpbWVfZGVsdGEudHZfdXNlYyAvIDEwMDAsIGNoYXJidWYpOworCWZmbHVzaChkZWJ1
Z190YXJnZXQpOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX2Fzc29jaWF0aW9uX2NoYW5nZV9l
dmVudChzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgKnNhYykKK3sKKwl1bnNpZ25lZCBpbnQgaSwg
bjsKKworCWlmIChkZWJ1Z190YXJnZXQgPT0gTlVMTCkgeworCQlkZWJ1Z190YXJnZXQgPSBERUZB
VUxUX1RBUkdFVDsKKwl9CisKKwlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIkFzc29jaWF0aW9uIGNo
YW5nZSAiKTsKKwlzd2l0Y2ggKHNhYy0+c2FjX3N0YXRlKSB7CisJY2FzZSBTQ1RQX0NPTU1fVVA6
CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiU0NUUF9DT01NX1VQIik7CisJCWJyZWFrOworCWNh
c2UgU0NUUF9DT01NX0xPU1Q6CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiU0NUUF9DT01NX0xP
U1QiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1JFU1RBUlQ6CisJCWZwcmludGYoZGVidWdfdGFy
Z2V0LCAiU0NUUF9SRVNUQVJUIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9TSFVURE9XTl9DT01Q
OgorCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIlNDVFBfU0hVVERPV05fQ09NUCIpOworCQlicmVh
azsKKwljYXNlIFNDVFBfQ0FOVF9TVFJfQVNTT0M6CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAi
U0NUUF9DQU5UX1NUUl9BU1NPQyIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmcHJpbnRmKGRl
YnVnX3RhcmdldCwgIlVOS05PV04iKTsKKwkJYnJlYWs7CisJfQorCWZwcmludGYoZGVidWdfdGFy
Z2V0LCAiLCBzdHJlYW1zIChpbi9vdXQpID0gKCV1LyV1KSIsCisJICAgICAgIHNhYy0+c2FjX2lu
Ym91bmRfc3RyZWFtcywgc2FjLT5zYWNfb3V0Ym91bmRfc3RyZWFtcyk7CisJbiA9IHNhYy0+c2Fj
X2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpOworCWlmICgoKHNhYy0+
c2FjX3N0YXRlID09IFNDVFBfQ09NTV9VUCkgfHwKKwkgICAgIChzYWMtPnNhY19zdGF0ZSA9PSBT
Q1RQX1JFU1RBUlQpKSAmJiAobiA+IDApKSB7CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiLCBz
dXBwb3J0cyIpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlzd2l0Y2ggKHNhYy0+
c2FjX2luZm9baV0pIHsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19QUjoKKwkJCQlmcHJp
bnRmKGRlYnVnX3RhcmdldCwgIiBQUiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTQ1RQX0FTU09D
X1NVUFBPUlRTX0FVVEg6CisJCQkJZnByaW50ZihkZWJ1Z190YXJnZXQsICIgQVVUSCIpOworCQkJ
CWJyZWFrOworCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FTQ09ORjoKKwkJCQlmcHJpbnRm
KGRlYnVnX3RhcmdldCwgIiBBU0NPTkYiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0NUUF9BU1NP
Q19TVVBQT1JUU19NVUxUSUJVRjoKKwkJCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIiBNVUxUSUJV
RiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX1JFX0NPTkZJRzoK
KwkJCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIiBSRS1DT05GSUciKTsKKwkJCQlicmVhazsKKwkJ
CWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19JTlRFUkxFQVZJTkc6CisJCQkJZnByaW50ZihkZWJ1
Z190YXJnZXQsICIgSU5URVJMRUFWSU5HIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJ
CWZwcmludGYoZGVidWdfdGFyZ2V0LCAiIFVOS05PV04oMHglMDJ4KSIsIHNhYy0+c2FjX2luZm9b
aV0pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIGlmICgoKHNhYy0+c2FjX3N0YXRl
ID09IFNDVFBfQ09NTV9MT1NUKSB8fAorCSAgICAgICAgICAgIChzYWMtPnNhY19zdGF0ZSA9PSBT
Q1RQX0NBTlRfU1RSX0FTU09DKSkgJiYgKG4gPiAwKSkgeworCQlmcHJpbnRmKGRlYnVnX3Rhcmdl
dCwgIiwgQUJPUlQgPSIpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlmcHJpbnRm
KGRlYnVnX3RhcmdldCwgIiAweCUwMngiLCBzYWMtPnNhY19pbmZvW2ldKTsKKwkJfQorCX0KKwlm
cHJpbnRmKGRlYnVnX3RhcmdldCwgIi5cbiIpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQK
K2hhbmRsZV9wZWVyX2FkZHJlc3NfY2hhbmdlX2V2ZW50KHN0cnVjdCBzY3RwX3BhZGRyX2NoYW5n
ZSAqc3BjKQoreworCWNoYXIgYWRkcl9idWZbSU5FVDZfQUREUlNUUkxFTl07CisJY29uc3QgY2hh
ciAqYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICpzaW42OworCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCWlmIChkZWJ1Z190YXJn
ZXQgPT0gTlVMTCkgeworCQlkZWJ1Z190YXJnZXQgPSBERUZBVUxUX1RBUkdFVDsKKwl9CisKKwlz
d2l0Y2ggKHNwYy0+c3BjX2FhZGRyLnNzX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJc2lu
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzcGMtPnNwY19hYWRkcjsKKwkJYWRkciA9IGluZXRf
bnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYWRkcl9idWYsIElORVRfQUREUlNUUkxFTik7
CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2lu
NiAqKSZzcGMtPnNwY19hYWRkcjsKKwkJYWRkciA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjYt
PnNpbjZfYWRkciwgYWRkcl9idWYsIElORVQ2X0FERFJTVFJMRU4pOworCQlicmVhazsKKwljYXNl
IEFGX0NPTk46CisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopJnNwYy0+c3BjX2Fh
ZGRyOworI2lmZGVmIF9XSU4zMgorCQlpZiAoX3NucHJpbnRmKGFkZHJfYnVmLCBJTkVUNl9BRERS
U1RSTEVOLCAiJXAiLCBzY29ubi0+c2Nvbm5fYWRkcikgPCAwKSB7CisjZWxzZQorCQlpZiAoc25w
cmludGYoYWRkcl9idWYsIElORVQ2X0FERFJTVFJMRU4sICIlcCIsIHNjb25uLT5zY29ubl9hZGRy
KSA8IDApIHsKKyNlbmRpZgorCQkJYWRkcl9idWZbMF0gPSAnXDAnOworCQl9CisJCWFkZHIgPSBh
ZGRyX2J1ZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKyNpZmRlZiBfV0lOMzIKKwkJaWYgKF9zbnBy
aW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIlVua25vd24gZmFtaWx5ICVkIiwgc3Bj
LT5zcGNfYWFkZHIuc3NfZmFtaWx5KSA8IDApIHsKKyNlbHNlCisJCWlmIChzbnByaW50ZihhZGRy
X2J1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIlVua25vd24gZmFtaWx5ICVkIiwgc3BjLT5zcGNfYWFk
ZHIuc3NfZmFtaWx5KSA8IDApIHsKKyNlbmRpZgorCQkJYWRkcl9idWZbMF0gPSAnXDAnOworCQl9
CisJCWFkZHIgPSBhZGRyX2J1ZjsKKwkJYnJlYWs7CisJfQorCWZwcmludGYoZGVidWdfdGFyZ2V0
LCAiUGVlciBhZGRyZXNzICVzIGlzIG5vdyAiLCBhZGRyKTsKKwlzd2l0Y2ggKHNwYy0+c3BjX3N0
YXRlKSB7CisJY2FzZSBTQ1RQX0FERFJfQVZBSUxBQkxFOgorCQlmcHJpbnRmKGRlYnVnX3Rhcmdl
dCwgIlNDVFBfQUREUl9BVkFJTEFCTEUiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FERFJfVU5S
RUFDSEFCTEU6CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiU0NUUF9BRERSX1VOUkVBQ0hBQkxF
Iik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX1JFTU9WRUQ6CisJCWZwcmludGYoZGVidWdf
dGFyZ2V0LCAiU0NUUF9BRERSX1JFTU9WRUQiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FERFJf
QURERUQ6CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiU0NUUF9BRERSX0FEREVEIik7CisJCWJy
ZWFrOworCWNhc2UgU0NUUF9BRERSX01BREVfUFJJTToKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQs
ICJTQ1RQX0FERFJfTUFERV9QUklNIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX0NPTkZJ
Uk1FRDoKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQX0FERFJfQ09ORklSTUVEIik7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiVU5LTk9XTiIpOwor
CQlicmVhazsKKwl9CisJZnByaW50ZihkZWJ1Z190YXJnZXQsICIgKGVycm9yID0gMHglMDh4KS5c
biIsIHNwYy0+c3BjX2Vycm9yKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVf
c2VuZF9mYWlsZWRfZXZlbnQoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQgKnNzZmUpCit7
CisJc2l6ZV90IGksIG47CisKKwlpZiAoZGVidWdfdGFyZ2V0ID09IE5VTEwpIHsKKwkJZGVidWdf
dGFyZ2V0ID0gREVGQVVMVF9UQVJHRVQ7CisJfQorCisJaWYgKHNzZmUtPnNzZmVfZmxhZ3MgJiBT
Q1RQX0RBVEFfVU5TRU5UKSB7CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiVW5zZW50ICIpOwor
CX0KKwlpZiAoc3NmZS0+c3NmZV9mbGFncyAmIFNDVFBfREFUQV9TRU5UKSB7CisJCWZwcmludGYo
ZGVidWdfdGFyZ2V0LCAiU2VudCAiKTsKKwl9CisJaWYgKHNzZmUtPnNzZmVfZmxhZ3MgJiB+KFND
VFBfREFUQV9TRU5UIHwgU0NUUF9EQVRBX1VOU0VOVCkpIHsKKwkJZnByaW50ZihkZWJ1Z190YXJn
ZXQsICIoZmxhZ3MgPSAleCkgIiwgc3NmZS0+c3NmZV9mbGFncyk7CisJfQorCWZwcmludGYoZGVi
dWdfdGFyZ2V0LCAibWVzc2FnZSB3aXRoIFBQSUQgPSAldSwgU0lEID0gJXUsIGZsYWdzOiAweCUw
NHggZHVlIHRvIGVycm9yID0gMHglMDh4IiwKKwkgICAgICAgKHVpbnQzMl90KW50b2hsKHNzZmUt
PnNzZmVfaW5mby5zbmRfcHBpZCksIHNzZmUtPnNzZmVfaW5mby5zbmRfc2lkLAorCSAgICAgICBz
c2ZlLT5zc2ZlX2luZm8uc25kX2ZsYWdzLCBzc2ZlLT5zc2ZlX2Vycm9yKTsKKwluID0gc3NmZS0+
c3NmZV9sZW5ndGggLSBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQpOworCWZv
ciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICIgMHglMDJ4
Iiwgc3NmZS0+c3NmZV9kYXRhW2ldKTsKKwl9CisJZnByaW50ZihkZWJ1Z190YXJnZXQsICIuXG4i
KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfYWRhcHRhdGlvbl9pbmRpY2F0
aW9uKHN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgKnNhaSkKK3sKKwlpZiAoZGVidWdfdGFy
Z2V0ID09IE5VTEwpIHsKKwkJZGVidWdfdGFyZ2V0ID0gREVGQVVMVF9UQVJHRVQ7CisJfQorCisJ
ZnByaW50ZihkZWJ1Z190YXJnZXQsICJBZGFwdGF0aW9uIGluZGljYXRpb246ICV4LlxuIiwgc2Fp
LT4gc2FpX2FkYXB0YXRpb25faW5kKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5k
bGVfc2h1dGRvd25fZXZlbnQoc3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQgKnNzZSkKK3sKKwlp
ZiAoZGVidWdfdGFyZ2V0ID09IE5VTEwpIHsKKwkJZGVidWdfdGFyZ2V0ID0gREVGQVVMVF9UQVJH
RVQ7CisJfQorCisJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTaHV0ZG93biBldmVudC5cbiIpOwor
CS8qIFhYWDogbm90aWZ5IGFsbCBjaGFubmVscy4gKi8KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2
b2lkCitoYW5kbGVfc3RyZWFtX3Jlc2V0X2V2ZW50KHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9l
dmVudCAqc3RycnN0KQoreworCXVpbnQzMl90IG4sIGk7CisKKwlpZiAoZGVidWdfdGFyZ2V0ID09
IE5VTEwpIHsKKwkJZGVidWdfdGFyZ2V0ID0gREVGQVVMVF9UQVJHRVQ7CisJfQorCisJbiA9IChz
dHJyc3QtPnN0cnJlc2V0X2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRf
ZXZlbnQpKSAvIHNpemVvZih1aW50MTZfdCk7CisJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTdHJl
YW0gcmVzZXQgZXZlbnQ6IGZsYWdzID0gJXgsICIsIHN0cnJzdC0+c3RycmVzZXRfZmxhZ3MpOwor
CWlmIChzdHJyc3QtPnN0cnJlc2V0X2ZsYWdzICYgU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkdf
U1NOKSB7CisJCWlmIChzdHJyc3QtPnN0cnJlc2V0X2ZsYWdzICYgU0NUUF9TVFJFQU1fUkVTRVRf
T1VUR09JTkdfU1NOKSB7CisJCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgImluY29taW5nLyIpOwor
CQl9CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiaW5jb21pbmcgIik7CisJfQorCWlmIChzdHJy
c3QtPnN0cnJlc2V0X2ZsYWdzICYgU0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkdfU1NOKSB7CisJ
CWZwcmludGYoZGVidWdfdGFyZ2V0LCAib3V0Z29pbmcgIik7CisJfQorCWZwcmludGYoZGVidWdf
dGFyZ2V0LCAic3RyZWFtIGlkcyA9ICIpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJ
aWYgKGkgPiAwKSB7CisJCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIiwgIik7CisJCX0KKwkJZnBy
aW50ZihkZWJ1Z190YXJnZXQsICIlZCIsIHN0cnJzdC0+c3RycmVzZXRfc3RyZWFtX2xpc3RbaV0p
OworCX0KKwlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIi5cbiIpOworCXJldHVybjsKK30KKworc3Rh
dGljIHZvaWQKK2hhbmRsZV9zdHJlYW1fY2hhbmdlX2V2ZW50KHN0cnVjdCBzY3RwX3N0cmVhbV9j
aGFuZ2VfZXZlbnQgKnN0cmNoZykKK3sKKwlpZiAoZGVidWdfdGFyZ2V0ID09IE5VTEwpIHsKKwkJ
ZGVidWdfdGFyZ2V0ID0gREVGQVVMVF9UQVJHRVQ7CisJfQorCisJZnByaW50ZihkZWJ1Z190YXJn
ZXQsICJTdHJlYW0gY2hhbmdlIGV2ZW50OiBzdHJlYW1zIChpbi9vdXQpID0gKCV1LyV1KSwgZmxh
Z3MgPSAleC5cbiIsCisJICAgICAgIHN0cmNoZy0+c3RyY2hhbmdlX2luc3RybXMsIHN0cmNoZy0+
c3RyY2hhbmdlX291dHN0cm1zLCBzdHJjaGctPnN0cmNoYW5nZV9mbGFncyk7CisJcmV0dXJuOwor
fQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3JlbW90ZV9lcnJvcl9ldmVudChzdHJ1Y3Qgc2N0cF9y
ZW1vdGVfZXJyb3IgKnNyZSkKK3sKKwlzaXplX3QgaSwgbjsKKworCWlmIChkZWJ1Z190YXJnZXQg
PT0gTlVMTCkgeworCQlkZWJ1Z190YXJnZXQgPSBERUZBVUxUX1RBUkdFVDsKKwl9CisKKwluID0g
c3JlLT5zcmVfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvcik7CisJZnBy
aW50ZihkZWJ1Z190YXJnZXQsICJSZW1vdGUgRXJyb3IgKGVycm9yID0gMHglMDR4KTogIiwgc3Jl
LT5zcmVfZXJyb3IpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJZnByaW50ZihkZWJ1
Z190YXJnZXQsICIgMHglMDJ4Iiwgc3JlLT4gc3JlX2RhdGFbaV0pOworCX0KKwlmcHJpbnRmKGRl
YnVnX3RhcmdldCwgIi5cbiIpOworCXJldHVybjsKK30KKwordm9pZAoraGFuZGxlX25vdGlmaWNh
dGlvbih1bmlvbiBzY3RwX25vdGlmaWNhdGlvbiAqbm90aWYsIHNpemVfdCBuKQoreworCWlmIChu
b3RpZi0+c25faGVhZGVyLnNuX2xlbmd0aCAhPSAodWludDMyX3QpbikgeworCQlyZXR1cm47CisJ
fQorCisJaWYgKGRlYnVnX3RhcmdldCA9PSBOVUxMKSB7CisJCWRlYnVnX3RhcmdldCA9IERFRkFV
TFRfVEFSR0VUOworCX0KKworCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiaGFuZGxlX25vdGlmaWNh
dGlvbiA6ICIpOworCisJc3dpdGNoIChub3RpZi0+c25faGVhZGVyLnNuX3R5cGUpIHsKKwljYXNl
IFNDVFBfQVNTT0NfQ0hBTkdFOgorCQlmcHJpbnRmKGRlYnVnX3RhcmdldCwgIlNDVFBfQVNTT0Nf
Q0hBTkdFXG4iKTsKKwkJaGFuZGxlX2Fzc29jaWF0aW9uX2NoYW5nZV9ldmVudCgmKG5vdGlmLT5z
bl9hc3NvY19jaGFuZ2UpKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1BFRVJfQUREUl9DSEFOR0U6
CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiU0NUUF9QRUVSX0FERFJfQ0hBTkdFXG4iKTsKKwkJ
aGFuZGxlX3BlZXJfYWRkcmVzc19jaGFuZ2VfZXZlbnQoJihub3RpZi0+c25fcGFkZHJfY2hhbmdl
KSk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9SRU1PVEVfRVJST1I6CisJCWZwcmludGYoZGVidWdf
dGFyZ2V0LCAiU0NUUF9SRU1PVEVfRVJST1JcbiIpOworCQloYW5kbGVfcmVtb3RlX2Vycm9yX2V2
ZW50KCYobm90aWYtPnNuX3JlbW90ZV9lcnJvcikpOworCQlicmVhazsKKwljYXNlIFNDVFBfU0hV
VERPV05fRVZFTlQ6CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiU0NUUF9TSFVURE9XTl9FVkVO
VFxuIik7CisJCWhhbmRsZV9zaHV0ZG93bl9ldmVudCgmKG5vdGlmLT5zbl9zaHV0ZG93bl9ldmVu
dCkpOworCQlicmVhazsKKwljYXNlIFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OOgorCQlmcHJp
bnRmKGRlYnVnX3RhcmdldCwgIlNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OXG4iKTsKKwkJaGFu
ZGxlX2FkYXB0YXRpb25faW5kaWNhdGlvbigmKG5vdGlmLT5zbl9hZGFwdGF0aW9uX2V2ZW50KSk7
CisJCWJyZWFrOworCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5UOgorCQlmcHJpbnRm
KGRlYnVnX3RhcmdldCwgIlNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVFxuIik7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVDoKKwkJZnByaW50ZihkZWJ1Z190YXJn
ZXQsICJTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5UXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X1NFTkRFUl9EUllfRVZFTlQ6CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiU0NUUF9TRU5ERVJf
RFJZX0VWRU5UXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX05PVElGSUNBVElPTlNfU1RPUFBF
RF9FVkVOVDoKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQX05PVElGSUNBVElPTlNfU1RP
UFBFRF9FVkVOVFxuIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDoK
KwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQX1NFTkRfRkFJTEVEX0VWRU5UXG4iKTsKKwkJ
aGFuZGxlX3NlbmRfZmFpbGVkX2V2ZW50KCYobm90aWYtPnNuX3NlbmRfZmFpbGVkX2V2ZW50KSk7
CisJCWJyZWFrOworCWNhc2UgU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQ6CisJCWZwcmludGYoZGVi
dWdfdGFyZ2V0LCAiU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlRcbiIpOworCQloYW5kbGVfc3RyZWFt
X3Jlc2V0X2V2ZW50KCYobm90aWYtPnNuX3N0cnJlc2V0X2V2ZW50KSk7CisJCWJyZWFrOworCWNh
c2UgU0NUUF9BU1NPQ19SRVNFVF9FVkVOVDoKKwkJZnByaW50ZihkZWJ1Z190YXJnZXQsICJTQ1RQ
X0FTU09DX1JFU0VUX0VWRU5UXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NUUkVBTV9DSEFO
R0VfRVZFTlQ6CisJCWZwcmludGYoZGVidWdfdGFyZ2V0LCAiU0NUUF9TVFJFQU1fQ0hBTkdFX0VW
RU5UXG4iKTsKKwkJaGFuZGxlX3N0cmVhbV9jaGFuZ2VfZXZlbnQoJihub3RpZi0+c25fc3RyY2hh
bmdlX2V2ZW50KSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Byb2dyYW1zX2hlbHBlci5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJv
Z3JhbXMvcHJvZ3JhbXNfaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdhNDcxMDE3ZmZmYTFmNWRmZWVi
NDQ5MTQ2ZTE4Y2YxZjVmZTBlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1z
L3Byb2dyYW1zX2hlbHBlci5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAyMDIwIEZlbGl4IFdlaW5yYW5rCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIF9fUFJPR1JBTVNfSEVMUEVSX0hfXworI2RlZmluZSBfX1BST0dSQU1TX0hFTFBFUl9I
X18KKworI2lmbmRlZiBfV0lOMzIKKyNkZWZpbmUgU0NUUF9QQUNLRUQgX19hdHRyaWJ1dGVfXygo
cGFja2VkKSkKKyNlbHNlCisjcHJhZ21hIHBhY2sgKHB1c2gsIDEpCisjZGVmaW5lIFNDVFBfUEFD
S0VECisjZW5kaWYKKworc3RydWN0IHNjdHBfY2h1bmtfaGVhZGVyIHsKKwl1aW50OF90IGNodW5r
X3R5cGU7CS8qIGNodW5rIHR5cGUgKi8KKwl1aW50OF90IGNodW5rX2ZsYWdzOwkvKiBjaHVuayBm
bGFncyAqLworCXVpbnQxNl90IGNodW5rX2xlbmd0aDsJLyogY2h1bmsgbGVuZ3RoICovCisJLyog
b3B0aW9uYWwgcGFyYW1zIGZvbGxvdyAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBf
aW5pdF9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtfaGVhZGVyIGNoOworCXVpbnQzMl90IGlu
aXRpYXRlX3RhZzsJLyogaW5pdGlhdGUgdGFnICovCisJdWludDMyX3QgYV9yd25kOwkvKiBhX3J3
bmQgKi8KKwl1aW50MTZfdCBudW1fb3V0Ym91bmRfc3RyZWFtczsJLyogT1MgKi8KKwl1aW50MTZf
dCBudW1faW5ib3VuZF9zdHJlYW1zOwkvKiBNSVMgKi8KKwl1aW50MzJfdCBpbml0aWFsX3RzbjsJ
LyogSS1UU04gKi8KKwkvKiBvcHRpb25hbCBwYXJhbSdzIGZvbGxvdyAqLworfSBTQ1RQX1BBQ0tF
RDsKKworI2lmZGVmIF9XSU4zMgorI3ByYWdtYSBwYWNrKHBvcCkKKyNlbmRpZgorCisjdW5kZWYg
U0NUUF9QQUNLRUQKKwordm9pZAoraGFuZGxlX25vdGlmaWNhdGlvbih1bmlvbiBzY3RwX25vdGlm
aWNhdGlvbiAqbm90aWYsIHNpemVfdCBuKTsKKyNpZm5kZWYgdGltZXJzdWIKKyNkZWZpbmUgdGlt
ZXJzdWIodHZwLCB1dnAsIHZ2cCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KwlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorCQkodnZwKS0+dHZfc2VjID0gKHR2cCktPnR2X3NlYyAtICh1dnApLT50dl9zZWM7ICAg
IFwKKwkJKHZ2cCktPnR2X3VzZWMgPSAodHZwKS0+dHZfdXNlYyAtICh1dnApLT50dl91c2VjOyBc
CisJCWlmICgodnZwKS0+dHZfdXNlYyA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAor
CQkJKHZ2cCktPnR2X3NlYy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJKHZ2cCkt
PnR2X3VzZWMgKz0gMTAwMDAwMDsgICAgICAgICAgICAgICAgXAorCQl9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9IHdoaWxlICgwKQorI2VuZGlm
CisKK3ZvaWQKK2RlYnVnX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKK3ZvaWQK
K2RlYnVnX3ByaW50Zl9jbGVhbihjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKK3ZvaWQKK2Rl
YnVnX3ByaW50Zl9zdGFjayhjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKK3ZvaWQKK2RlYnVn
X3NldF90YXJnZXQoRklMRSAqZnApOworCisjZGVmaW5lIEZVWlpFUl9BU1NFUlQoeCkgaWYgKCEo
eCkpIHsgcHJpbnRmKCJVU1JTQ1RQIGFzc2VydGlvbiBmYWlsZWQ6IGZ1bmN0aW9uICVzLCBmaWxl
ICVzLCBsaW5lICVkLlxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9f
KTsgYWJvcnQoKTsgfQorIAorCisjZW5kaWYgLyogX19QUk9HUkFNU19IRUxQRVJfSF9fICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9ydGN3ZWIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1z
L3J0Y3dlYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0OWVjZmEwNGRiZjk5NWZlYzQ2M2U5MDA0YTFlYmZmZmYw
NjBkMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9ydGN3ZWIuYwpAQCAt
MCwwICsxLDE1MjkgQEAKKy8qLQorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgTWljaGFlbCBU
dWV4ZW4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIElyZW5lIFJ1ZW5nZWxlcgorICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m
IHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNU
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICog
JElkOiBydGN3ZWIuYyx2IDEuMjYgMjAxMi0wNy0xNyAxMzo1MDowMiB0dWV4ZW4gRXhwICQKKyAq
LworCisvKgorICogZ2NjIC1XYWxsIC1zdGQ9Yzk5IC1wZWRhbnRpYyAtbyBydGN3ZWIgcnRjd2Vi
LmMgLWx1c3JzY3RwCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIF9XSU4z
MgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2luY2x1ZGUgPHdpbnNvY2syLmg+
CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNpbmNsdWRlIDxjcnRkYmcuaD4KKyNlbHNlCisjaW5j
bHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8cHRocmVhZC5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaW5j
bHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVzcnNj
dHAuaD4KKyNpbmNsdWRlICJwcm9ncmFtc19oZWxwZXIuaCIKKworI2RlZmluZSBMSU5FX0xFTkdU
SCAoMTAyNCkKKyNkZWZpbmUgQlVGRkVSX1NJWkUgKDE8PDE2KQorI2RlZmluZSBOVU1CRVJfT0Zf
Q0hBTk5FTFMgKDEwMCkKKyNkZWZpbmUgTlVNQkVSX09GX1NUUkVBTVMgKDEwMCkKKworI2RlZmlu
ZSBEQVRBX0NIQU5ORUxfUFBJRF9DT05UUk9MICAgNTAKKyNkZWZpbmUgREFUQV9DSEFOTkVMX1BQ
SURfRE9NU1RSSU5HIDUxCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9QUElEX0JJTkFSWSAgICA1Mgor
CisjZGVmaW5lIERBVEFfQ0hBTk5FTF9DTE9TRUQgICAgIDAKKyNkZWZpbmUgREFUQV9DSEFOTkVM
X0NPTk5FQ1RJTkcgMQorI2RlZmluZSBEQVRBX0NIQU5ORUxfT1BFTiAgICAgICAyCisjZGVmaW5l
IERBVEFfQ0hBTk5FTF9DTE9TSU5HICAgIDMKKworI2RlZmluZSBEQVRBX0NIQU5ORUxfRkxBR1Nf
U0VORF9SRVEgMHgwMDAwMDAwMQorI2RlZmluZSBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SU1Ag
MHgwMDAwMDAwMgorI2RlZmluZSBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9BQ0sgMHgwMDAwMDAw
NAorCitzdHJ1Y3QgY2hhbm5lbCB7CisJdWludDMyX3QgaWQ7CisJdWludDMyX3QgcHJfdmFsdWU7
CisJdWludDE2X3QgcHJfcG9saWN5OworCXVpbnQxNl90IGlfc3RyZWFtOworCXVpbnQxNl90IG9f
c3RyZWFtOworCXVpbnQ4X3QgdW5vcmRlcmVkOworCXVpbnQ4X3Qgc3RhdGU7CisJdWludDMyX3Qg
ZmxhZ3M7Cit9OworCitzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uIHsKKwlzdHJ1Y3QgY2hhbm5lbCBj
aGFubmVsc1tOVU1CRVJfT0ZfQ0hBTk5FTFNdOworCXN0cnVjdCBjaGFubmVsICppX3N0cmVhbV9j
aGFubmVsW05VTUJFUl9PRl9TVFJFQU1TXTsKKwlzdHJ1Y3QgY2hhbm5lbCAqb19zdHJlYW1fY2hh
bm5lbFtOVU1CRVJfT0ZfU1RSRUFNU107CisJdWludDE2X3Qgb19zdHJlYW1fYnVmZmVyW05VTUJF
Ul9PRl9TVFJFQU1TXTsKKwl1aW50MzJfdCBvX3N0cmVhbV9idWZmZXJfY291bnRlcjsKKyNpZmRl
ZiBfV0lOMzIKKwlDUklUSUNBTF9TRUNUSU9OIG11dGV4OworI2Vsc2UKKwlwdGhyZWFkX211dGV4
X3QgbXV0ZXg7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworfSBwZWVyX2Nvbm5lY3Rp
b247CisKKyNkZWZpbmUgREFUQV9DSEFOTkVMX09QRU5fUkVRVUVTVCAgMAorI2RlZmluZSBEQVRB
X0NIQU5ORUxfT1BFTl9SRVNQT05TRSAxCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9BQ0sgICAgICAg
ICAgIDIKKworI2RlZmluZSBEQVRBX0NIQU5ORUxfUkVMSUFCTEUgICAgICAgICAgICAgICAgMAor
I2RlZmluZSBEQVRBX0NIQU5ORUxfUkVMSUFCTEVfU1RSRUFNICAgICAgICAgMQorI2RlZmluZSBE
QVRBX0NIQU5ORUxfVU5SRUxJQUJMRSAgICAgICAgICAgICAgMgorI2RlZmluZSBEQVRBX0NIQU5O
RUxfUEFSVElBTF9SRUxJQUJMRV9SRVhNSVQgMworI2RlZmluZSBEQVRBX0NIQU5ORUxfUEFSVElB
TF9SRUxJQUJMRV9USU1FRCAgNAorCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFHX09VVF9PRl9P
UkRFUl9BTExPV0VEIDB4MDAwMQorCisjaWZuZGVmIF9XSU4zMgorI2RlZmluZSBTQ1RQX1BBQ0tF
RCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2Vsc2UKKyNwcmFnbWEgcGFjayAocHVzaCwgMSkK
KyNkZWZpbmUgU0NUUF9QQUNLRUQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFk
ZWZpbmVkKF9fTUlOR1czMl9fKQorI3ByYWdtYSB3YXJuaW5nKCBwdXNoICkKKyNwcmFnbWEgd2Fy
bmluZyggZGlzYWJsZSA6IDQyMDAgKQorI2VuZGlmIC8qIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVm
aW5lZChfX01JTkdXMzJfXykgKi8KK3N0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1
ZXN0IHsKKwl1aW50OF90IG1zZ190eXBlOyAvKiBEQVRBX0NIQU5ORUxfT1BFTl9SRVFVRVNUICov
CisJdWludDhfdCBjaGFubmVsX3R5cGU7CisJdWludDE2X3QgZmxhZ3M7CisJdWludDE2X3QgcmVs
aWFiaWxpdHlfcGFyYW1zOworCWludDE2X3QgcHJpb3JpdHk7CisJY2hhciBsYWJlbFtdOworfSBT
Q1RQX1BBQ0tFRDsKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19NSU5HVzMyX18p
CisjcHJhZ21hIHdhcm5pbmcoIHBvcCApCisjZW5kaWYgLyogZGVmaW5lZChfV0lOMzIpICYmICFk
ZWZpbmVkKF9fTUlOR1czMl9fKSAqLworCitzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5f
cmVzcG9uc2UgeworCXVpbnQ4X3QgIG1zZ190eXBlOyAvKiBEQVRBX0NIQU5ORUxfT1BFTl9SRVNQ
T05TRSAqLworCXVpbnQ4X3QgIGVycm9yOworCXVpbnQxNl90IGZsYWdzOworCXVpbnQxNl90IHJl
dmVyc2Vfc3RyZWFtOworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5l
bF9hY2sgeworCXVpbnQ4X3QgIG1zZ190eXBlOyAvKiBEQVRBX0NIQU5ORUxfQUNLICovCit9IFND
VFBfUEFDS0VEOworCisjaWZkZWYgX1dJTjMyCisjcHJhZ21hIHBhY2socG9wKQorI2VuZGlmCisK
KyN1bmRlZiBTQ1RQX1BBQ0tFRAorCitzdGF0aWMgdm9pZAorbG9ja19wZWVyX2Nvbm5lY3Rpb24o
c3RydWN0IHBlZXJfY29ubmVjdGlvbiAqKTsKKworc3RhdGljIHZvaWQKK3VubG9ja19wZWVyX2Nv
bm5lY3Rpb24oc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqKTsKKworc3RhdGljIHZvaWQKK2luaXRf
cGVlcl9jb25uZWN0aW9uKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQoreworCXVpbnQzMl90
IGk7CisJc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7CisKKyNpZmRlZiBfV0lOMzIKKwlJbml0aWFs
aXplQ3JpdGljYWxTZWN0aW9uKCYocGMtPm11dGV4KSk7CisjZWxzZQorCXB0aHJlYWRfbXV0ZXhf
aW5pdCgmcGMtPm11dGV4LCBOVUxMKTsKKyNlbmRpZgorCWxvY2tfcGVlcl9jb25uZWN0aW9uKHBj
KTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NIQU5ORUxTOyBpKyspIHsKKwkJY2hhbm5l
bCA9ICYocGMtPmNoYW5uZWxzW2ldKTsKKwkJY2hhbm5lbC0+aWQgPSBpOworCQljaGFubmVsLT5z
dGF0ZSA9IERBVEFfQ0hBTk5FTF9DTE9TRUQ7CisJCWNoYW5uZWwtPnByX3BvbGljeSA9IFNDVFBf
UFJfU0NUUF9OT05FOworCQljaGFubmVsLT5wcl92YWx1ZSA9IDA7CisJCWNoYW5uZWwtPmlfc3Ry
ZWFtID0gMDsKKwkJY2hhbm5lbC0+b19zdHJlYW0gPSAwOworCQljaGFubmVsLT51bm9yZGVyZWQg
PSAwOworCQljaGFubmVsLT5mbGFncyA9IDA7CisJfQorCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJf
T0ZfU1RSRUFNUzsgaSsrKSB7CisJCXBjLT5pX3N0cmVhbV9jaGFubmVsW2ldID0gTlVMTDsKKwkJ
cGMtPm9fc3RyZWFtX2NoYW5uZWxbaV0gPSBOVUxMOworCQlwYy0+b19zdHJlYW1fYnVmZmVyW2ld
ID0gMDsKKwl9CisJcGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyID0gMDsKKwlwYy0+c29jayA9
IE5VTEw7CisJdW5sb2NrX3BlZXJfY29ubmVjdGlvbihwYyk7Cit9CisKK3N0YXRpYyB2b2lkCits
b2NrX3BlZXJfY29ubmVjdGlvbihzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykKK3sKKyNpZmRl
ZiBfV0lOMzIKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmKHBjLT5tdXRleCkpOworI2Vsc2UKKwlw
dGhyZWFkX211dGV4X2xvY2soJnBjLT5tdXRleCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQK
K3VubG9ja19wZWVyX2Nvbm5lY3Rpb24oc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMpCit7Cisj
aWZkZWYgX1dJTjMyCisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJihwYy0+bXV0ZXgpKTsKKyNlbHNl
CisJcHRocmVhZF9tdXRleF91bmxvY2soJnBjLT5tdXRleCk7CisjZW5kaWYKK30KKworc3RhdGlj
IHN0cnVjdCBjaGFubmVsICoKK2ZpbmRfY2hhbm5lbF9ieV9pX3N0cmVhbShzdHJ1Y3QgcGVlcl9j
b25uZWN0aW9uICpwYywgdWludDE2X3QgaV9zdHJlYW0pCit7CisJaWYgKGlfc3RyZWFtIDwgTlVN
QkVSX09GX1NUUkVBTVMpIHsKKwkJcmV0dXJuIChwYy0+aV9zdHJlYW1fY2hhbm5lbFtpX3N0cmVh
bV0pOworCX0gZWxzZSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0
IGNoYW5uZWwgKgorZmluZF9jaGFubmVsX2J5X29fc3RyZWFtKHN0cnVjdCBwZWVyX2Nvbm5lY3Rp
b24gKnBjLCB1aW50MTZfdCBvX3N0cmVhbSkKK3sKKwlpZiAob19zdHJlYW0gPCBOVU1CRVJfT0Zf
U1RSRUFNUykgeworCQlyZXR1cm4gKHBjLT5vX3N0cmVhbV9jaGFubmVsW29fc3RyZWFtXSk7CisJ
fSBlbHNlIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hhbm5l
bCAqCitmaW5kX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykKK3sKKwl1
aW50MzJfdCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9PRl9DSEFOTkVMUzsgaSsrKSB7
CisJCWlmIChwYy0+Y2hhbm5lbHNbaV0uc3RhdGUgPT0gREFUQV9DSEFOTkVMX0NMT1NFRCkgewor
CQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkgPT0gTlVNQkVSX09GX0NIQU5ORUxTKSB7CisJCXJl
dHVybiAoTlVMTCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgmKHBjLT5jaGFubmVsc1tpXSkpOwor
CX0KK30KKworc3RhdGljIHVpbnQxNl90CitmaW5kX2ZyZWVfb19zdHJlYW0oc3RydWN0IHBlZXJf
Y29ubmVjdGlvbiAqcGMpCit7CisJc3RydWN0IHNjdHBfc3RhdHVzIHN0YXR1czsKKwl1aW50MzJf
dCBpLCBsaW1pdDsKKwlzb2NrbGVuX3QgbGVuOworCisJbGVuID0gKHNvY2tsZW5fdClzaXplb2Yo
c3RydWN0IHNjdHBfc3RhdHVzKTsKKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHBjLT5zb2NrLCBJ
UFBST1RPX1NDVFAsIFNDVFBfU1RBVFVTLCAmc3RhdHVzLCAmbGVuKSA8IDApIHsKKwkJcGVycm9y
KCJnZXRzb2Nrb3B0Iik7CisJCXJldHVybiAoMCk7CisJfQorCWlmIChzdGF0dXMuc3N0YXRfb3V0
c3RybXMgPCBOVU1CRVJfT0ZfU1RSRUFNUykgeworCQlsaW1pdCA9IHN0YXR1cy5zc3RhdF9vdXRz
dHJtczsKKwl9IGVsc2UgeworCQlsaW1pdCA9IE5VTUJFUl9PRl9TVFJFQU1TOworCX0KKwkvKiBz
dHJlYW0gaWQgMCBpcyByZXNlcnZlZCAqLworCWZvciAoaSA9IDE7IGkgPCBsaW1pdDsgaSsrKSB7
CisJCWlmIChwYy0+b19zdHJlYW1fY2hhbm5lbFtpXSA9PSBOVUxMKSB7CisJCQlicmVhazsKKwkJ
fQorCX0KKwlpZiAoaSA9PSBsaW1pdCkgeworCQlyZXR1cm4gKDApOworCX0gZWxzZSB7CisJCXJl
dHVybiAoKHVpbnQxNl90KWkpOworCX0KK30KKworc3RhdGljIHZvaWQKK3JlcXVlc3RfbW9yZV9v
X3N0cmVhbXMoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMpCit7CisJc3RydWN0IHNjdHBfc3Rh
dHVzIHN0YXR1czsKKwlzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyBzYXM7CisJdWludDMyX3QgaSwg
b19zdHJlYW1zX25lZWRlZDsKKwlzb2NrbGVuX3QgbGVuOworCisJb19zdHJlYW1zX25lZWRlZCA9
IDA7CisJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9PRl9DSEFOTkVMUzsgaSsrKSB7CisJCWlmICgo
cGMtPmNoYW5uZWxzW2ldLnN0YXRlID09IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HKSAmJgorCQkg
ICAgKHBjLT5jaGFubmVsc1tpXS5vX3N0cmVhbSA9PSAwKSkgeworCQkJb19zdHJlYW1zX25lZWRl
ZCsrOworCQl9CisJfQorCWxlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXR1
cyk7CisJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChwYy0+c29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQ
X1NUQVRVUywgJnN0YXR1cywgJmxlbikgPCAwKSB7CisJCXBlcnJvcigiZ2V0c29ja29wdCIpOwor
CQlyZXR1cm47CisJfQorCWlmIChzdGF0dXMuc3N0YXRfb3V0c3RybXMgKyBvX3N0cmVhbXNfbmVl
ZGVkID4gTlVNQkVSX09GX1NUUkVBTVMpIHsKKwkJb19zdHJlYW1zX25lZWRlZCA9IE5VTUJFUl9P
Rl9TVFJFQU1TIC0gc3RhdHVzLnNzdGF0X291dHN0cm1zOworCX0KKwlpZiAob19zdHJlYW1zX25l
ZWRlZCA9PSAwKSB7CisJCXJldHVybjsKKwl9CisJbWVtc2V0KCZzYXMsIDAsIHNpemVvZihzdHJ1
Y3Qgc2N0cF9hZGRfc3RyZWFtcykpOworCXNhcy5zYXNfaW5zdHJtcyA9IDA7CisJc2FzLnNhc19v
dXRzdHJtcyA9ICh1aW50MTZfdClvX3N0cmVhbXNfbmVlZGVkOyAvKiBYWFggZXJvciBoYW5kbGlu
ZyAqLworCWlmICh1c3JzY3RwX3NldHNvY2tvcHQocGMtPnNvY2ssIElQUFJPVE9fU0NUUCwgU0NU
UF9BRERfU1RSRUFNUywgJnNhcywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfYWRkX3N0
cmVhbXMpKSA8IDApIHsKKwkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7CisJfQorCXJldHVybjsKK30K
Kworc3RhdGljIGludAorc2VuZF9vcGVuX3JlcXVlc3RfbWVzc2FnZShzdHJ1Y3Qgc29ja2V0ICpz
b2NrLCB1aW50MTZfdCBvX3N0cmVhbSwgdWludDhfdCB1bm9yZGVyZWQsIHVpbnQxNl90IHByX3Bv
bGljeSwgdWludDMyX3QgcHJfdmFsdWUpCit7CisJLyogWFhYOiBUaGlzIHNob3VsZCBiZSBlbmNv
ZGVkIGluIGEgYmV0dGVyIHdheSAqLworCXN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9y
ZXF1ZXN0IHJlcTsKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87CisKKwltZW1zZXQoJnJl
cSwgMCwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0KSk7CisJ
cmVxLm1zZ190eXBlID0gREFUQV9DSEFOTkVMX09QRU5fUkVRVUVTVDsKKwlzd2l0Y2ggKHByX3Bv
bGljeSkgeworCWNhc2UgU0NUUF9QUl9TQ1RQX05PTkU6CisJCS8qIFhYWDogV2hhdCBhYm91dCBE
QVRBX0NIQU5ORUxfUkVMSUFCTEVfU1RSRUFNICovCisJCXJlcS5jaGFubmVsX3R5cGUgPSBEQVRB
X0NIQU5ORUxfUkVMSUFCTEU7CisJCWJyZWFrOworCWNhc2UgU0NUUF9QUl9TQ1RQX1RUTDoKKwkJ
LyogWFhYOiBXaGF0IGFib3V0IERBVEFfQ0hBTk5FTF9VTlJFTElBQkxFICovCisJCXJlcS5jaGFu
bmVsX3R5cGUgPSBEQVRBX0NIQU5ORUxfUEFSVElBTF9SRUxJQUJMRV9USU1FRDsKKwkJYnJlYWs7
CisJY2FzZSBTQ1RQX1BSX1NDVFBfUlRYOgorCQlyZXEuY2hhbm5lbF90eXBlID0gREFUQV9DSEFO
TkVMX1BBUlRJQUxfUkVMSUFCTEVfUkVYTUlUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1
cm4gKDApOworCX0KKwlyZXEuZmxhZ3MgPSBodG9ucygwKTsKKwlpZiAodW5vcmRlcmVkKSB7CisJ
CXJlcS5mbGFncyB8PSBodG9ucyhEQVRBX0NIQU5ORUxfRkxBR19PVVRfT0ZfT1JERVJfQUxMT1dF
RCk7CisJfQorCXJlcS5yZWxpYWJpbGl0eV9wYXJhbXMgPSBodG9ucygodWludDE2X3QpcHJfdmFs
dWUpOyAvKiBYWFggV2h5IDE2LWJpdCAqLworCXJlcS5wcmlvcml0eSA9IGh0b25zKDApOyAvKiBY
WFg6IGFkZCBzdXBwb3J0ICovCisJbWVtc2V0KCZzbmRpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHNj
dHBfc25kaW5mbykpOworCXNuZGluZm8uc25kX3NpZCA9IG9fc3RyZWFtOworCXNuZGluZm8uc25k
X2ZsYWdzID0gU0NUUF9FT1I7CisJc25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERBVEFfQ0hBTk5F
TF9QUElEX0NPTlRST0wpOworCWlmICh1c3JzY3RwX3NlbmR2KHNvY2ssCisJICAgICAgICAgICAg
ICAgICAgJnJlcSwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0
KSwKKwkgICAgICAgICAgICAgICAgICBOVUxMLCAwLAorCSAgICAgICAgICAgICAgICAgICZzbmRp
bmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwKKwkgICAgICAgICAg
ICAgICAgICBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgeworCQlwZXJyb3IoInNjdHBfc2Vu
ZHYiKTsKKwkJcmV0dXJuICgwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKDEpOworCX0KK30KKwor
c3RhdGljIGludAorc2VuZF9vcGVuX3Jlc3BvbnNlX21lc3NhZ2Uoc3RydWN0IHNvY2tldCAqc29j
aywgdWludDE2X3Qgb19zdHJlYW0sIHVpbnQxNl90IGlfc3RyZWFtKQoreworCS8qIFhYWDogVGhp
cyBzaG91bGQgYmUgZW5jb2RlZCBpbiBhIGJldHRlciB3YXkgKi8KKwlzdHJ1Y3QgcnRjd2ViX2Rh
dGFjaGFubmVsX29wZW5fcmVzcG9uc2UgcnNwOworCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5m
bzsKKworCW1lbXNldCgmcnNwLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9v
cGVuX3Jlc3BvbnNlKSk7CisJcnNwLm1zZ190eXBlID0gREFUQV9DSEFOTkVMX09QRU5fUkVTUE9O
U0U7CisJcnNwLmVycm9yID0gMDsKKwlyc3AuZmxhZ3MgPSBodG9ucygwKTsKKwlyc3AucmV2ZXJz
ZV9zdHJlYW0gPSBodG9ucyhpX3N0cmVhbSk7CisJbWVtc2V0KCZzbmRpbmZvLCAwLCBzaXplb2Yo
c3RydWN0IHNjdHBfc25kaW5mbykpOworCXNuZGluZm8uc25kX3NpZCA9IG9fc3RyZWFtOworCXNu
ZGluZm8uc25kX2ZsYWdzID0gU0NUUF9FT1I7CisJc25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERB
VEFfQ0hBTk5FTF9QUElEX0NPTlRST0wpOworCWlmICh1c3JzY3RwX3NlbmR2KHNvY2ssCisJICAg
ICAgICAgICAgICAgICAgJnJzcCwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Bl
bl9yZXNwb25zZSksCisJICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKwkgICAgICAgICAgICAg
ICAgICAmc25kaW5mbywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksCisJ
ICAgICAgICAgICAgICAgICAgU0NUUF9TRU5EVl9TTkRJTkZPLCAwKSA8IDApIHsKKwkJcGVycm9y
KCJzY3RwX3NlbmR2Iik7CisJCXJldHVybiAoMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgxKTsK
Kwl9Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRfb3Blbl9hY2tfbWVzc2FnZShzdHJ1Y3Qgc29ja2V0
ICpzb2NrLCB1aW50MTZfdCBvX3N0cmVhbSkKK3sKKwkvKiBYWFg6IFRoaXMgc2hvdWxkIGJlIGVu
Y29kZWQgaW4gYSBiZXR0ZXIgd2F5ICovCisJc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2sg
YWNrOworCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKKworCW1lbXNldCgmYWNrLCAwLCBz
aXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2spKTsKKwlhY2subXNnX3R5cGUgPSBE
QVRBX0NIQU5ORUxfQUNLOworCW1lbXNldCgmc25kaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X3NuZGluZm8pKTsKKwlzbmRpbmZvLnNuZF9zaWQgPSBvX3N0cmVhbTsKKwlzbmRpbmZvLnNuZF9m
bGFncyA9IFNDVFBfRU9SOworCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubChEQVRBX0NIQU5ORUxf
UFBJRF9DT05UUk9MKTsKKwlpZiAodXNyc2N0cF9zZW5kdihzb2NrLAorCSAgICAgICAgICAgICAg
ICAgICZhY2ssIHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX2FjayksCisJICAgICAg
ICAgICAgICAgICAgTlVMTCwgMCwKKwkgICAgICAgICAgICAgICAgICAmc25kaW5mbywgKHNvY2ts
ZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksCisJICAgICAgICAgICAgICAgICAgU0NU
UF9TRU5EVl9TTkRJTkZPLCAwKSA8IDApIHsKKwkJcGVycm9yKCJzY3RwX3NlbmR2Iik7CisJCXJl
dHVybiAoMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk
CitzZW5kX2RlZmVycmVkX21lc3NhZ2VzKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQorewor
CXVpbnQzMl90IGk7CisJc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7CisKKwlmb3IgKGkgPSAwOyBp
IDwgTlVNQkVSX09GX0NIQU5ORUxTOyBpKyspIHsKKwkJY2hhbm5lbCA9ICYocGMtPmNoYW5uZWxz
W2ldKTsKKwkJaWYgKGNoYW5uZWwtPmZsYWdzICYgREFUQV9DSEFOTkVMX0ZMQUdTX1NFTkRfUkVR
KSB7CisJCQlpZiAoc2VuZF9vcGVuX3JlcXVlc3RfbWVzc2FnZShwYy0+c29jaywgY2hhbm5lbC0+
b19zdHJlYW0sIGNoYW5uZWwtPnVub3JkZXJlZCwgY2hhbm5lbC0+cHJfcG9saWN5LCBjaGFubmVs
LT5wcl92YWx1ZSkpIHsKKwkJCQljaGFubmVsLT5mbGFncyAmPSB+REFUQV9DSEFOTkVMX0ZMQUdT
X1NFTkRfUkVROworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZXJybm8gIT0gRUFHQUlOKSB7CisJCQkJ
CS8qIFhYWDogZXJyb3IgaGFuZGxpbmcgKi8KKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGNoYW5u
ZWwtPmZsYWdzICYgREFUQV9DSEFOTkVMX0ZMQUdTX1NFTkRfUlNQKSB7CisJCQlpZiAoc2VuZF9v
cGVuX3Jlc3BvbnNlX21lc3NhZ2UocGMtPnNvY2ssIGNoYW5uZWwtPm9fc3RyZWFtLCBjaGFubmVs
LT5pX3N0cmVhbSkpIHsKKwkJCQljaGFubmVsLT5mbGFncyAmPSB+REFUQV9DSEFOTkVMX0ZMQUdT
X1NFTkRfUlNQOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZXJybm8gIT0gRUFHQUlOKSB7CisJCQkJ
CS8qIFhYWDogZXJyb3IgaGFuZGxpbmcgKi8KKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGNoYW5u
ZWwtPmZsYWdzICYgREFUQV9DSEFOTkVMX0ZMQUdTX1NFTkRfQUNLKSB7CisJCQlpZiAoc2VuZF9v
cGVuX2Fja19tZXNzYWdlKHBjLT5zb2NrLCBjaGFubmVsLT5vX3N0cmVhbSkpIHsKKwkJCQljaGFu
bmVsLT5mbGFncyAmPSB+REFUQV9DSEFOTkVMX0ZMQUdTX1NFTkRfQUNLOworCQkJfSBlbHNlIHsK
KwkJCQlpZiAoZXJybm8gIT0gRUFHQUlOKSB7CisJCQkJCS8qIFhYWDogZXJyb3IgaGFuZGxpbmcg
Ki8KKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IGNo
YW5uZWwgKgorb3Blbl9jaGFubmVsKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLCB1aW50OF90
IHVub3JkZXJlZCwgdWludDE2X3QgcHJfcG9saWN5LCB1aW50MzJfdCBwcl92YWx1ZSkKK3sKKwlz
dHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKwl1aW50MTZfdCBvX3N0cmVhbTsKKworCWlmICgocHJf
cG9saWN5ICE9IFNDVFBfUFJfU0NUUF9OT05FKSAmJgorCSAgICAocHJfcG9saWN5ICE9IFNDVFBf
UFJfU0NUUF9UVEwpICYmCisJICAgIChwcl9wb2xpY3kgIT0gU0NUUF9QUl9TQ1RQX1JUWCkpIHsK
KwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKCh1bm9yZGVyZWQgIT0gMCkgJiYgKHVub3JkZXJl
ZCAhPSAxKSkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoKHByX3BvbGljeSA9PSBTQ1RQ
X1BSX1NDVFBfTk9ORSkgJiYgKHByX3ZhbHVlICE9IDApKSB7CisJCXJldHVybiAoTlVMTCk7CisJ
fQorCWlmICgoY2hhbm5lbCA9IGZpbmRfZnJlZV9jaGFubmVsKHBjKSkgPT0gTlVMTCkgeworCQly
ZXR1cm4gKE5VTEwpOworCX0KKwlvX3N0cmVhbSA9IGZpbmRfZnJlZV9vX3N0cmVhbShwYyk7CisJ
Y2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORzsKKwljaGFubmVsLT51bm9y
ZGVyZWQgPSB1bm9yZGVyZWQ7CisJY2hhbm5lbC0+cHJfcG9saWN5ID0gcHJfcG9saWN5OworCWNo
YW5uZWwtPnByX3ZhbHVlID0gcHJfdmFsdWU7CisJY2hhbm5lbC0+b19zdHJlYW0gPSBvX3N0cmVh
bTsKKwljaGFubmVsLT5mbGFncyA9IDA7CisJaWYgKG9fc3RyZWFtID09IDApIHsKKwkJcmVxdWVz
dF9tb3JlX29fc3RyZWFtcyhwYyk7CisJfSBlbHNlIHsKKwkJaWYgKHNlbmRfb3Blbl9yZXF1ZXN0
X21lc3NhZ2UocGMtPnNvY2ssIG9fc3RyZWFtLCB1bm9yZGVyZWQsIHByX3BvbGljeSwgcHJfdmFs
dWUpKSB7CisJCQlwYy0+b19zdHJlYW1fY2hhbm5lbFtvX3N0cmVhbV0gPSBjaGFubmVsOworCQl9
IGVsc2UgeworCQkJaWYgKGVycm5vID09IEVBR0FJTikgeworCQkJCXBjLT5vX3N0cmVhbV9jaGFu
bmVsW29fc3RyZWFtXSA9IGNoYW5uZWw7CisJCQkJY2hhbm5lbC0+ZmxhZ3MgfD0gREFUQV9DSEFO
TkVMX0ZMQUdTX1NFTkRfUkVROworCQkJfSBlbHNlIHsKKwkJCQljaGFubmVsLT5zdGF0ZSA9IERB
VEFfQ0hBTk5FTF9DTE9TRUQ7CisJCQkJY2hhbm5lbC0+dW5vcmRlcmVkID0gMDsKKwkJCQljaGFu
bmVsLT5wcl9wb2xpY3kgPSAwOworCQkJCWNoYW5uZWwtPnByX3ZhbHVlID0gMDsKKwkJCQljaGFu
bmVsLT5vX3N0cmVhbSA9IDA7CisJCQkJY2hhbm5lbC0+ZmxhZ3MgPSAwOworCQkJCWNoYW5uZWwg
PSBOVUxMOworCQkJfQorCQl9CisJfQorCXJldHVybiAoY2hhbm5lbCk7Cit9CisKK3N0YXRpYyBp
bnQKK3NlbmRfdXNlcl9tZXNzYWdlKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLCBzdHJ1Y3Qg
Y2hhbm5lbCAqY2hhbm5lbCwgY2hhciAqbWVzc2FnZSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1
Y3Qgc2N0cF9zZW5kdl9zcGEgc3BhOworCisJaWYgKGNoYW5uZWwgPT0gTlVMTCkgeworCQlyZXR1
cm4gKDApOworCX0KKwlpZiAoKGNoYW5uZWwtPnN0YXRlICE9IERBVEFfQ0hBTk5FTF9PUEVOKSAm
JgorCSAgICAoY2hhbm5lbC0+c3RhdGUgIT0gREFUQV9DSEFOTkVMX0NPTk5FQ1RJTkcpKSB7CisJ
CS8qIFhYWDogV2hhdCB0byBkbyBpbiBvdGhlciBzdGF0ZXMgKi8KKwkJcmV0dXJuICgwKTsKKwl9
CisKKwltZW1zZXQoJnNwYSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSkpOworCXNw
YS5zZW5kdl9zbmRpbmZvLnNuZF9zaWQgPSBjaGFubmVsLT5vX3N0cmVhbTsKKwlpZiAoKGNoYW5u
ZWwtPnN0YXRlID09IERBVEFfQ0hBTk5FTF9PUEVOKSAmJgorCSAgICAoY2hhbm5lbC0+dW5vcmRl
cmVkKSkgeworCQlzcGEuc2VuZHZfc25kaW5mby5zbmRfZmxhZ3MgPSBTQ1RQX0VPUiB8IFNDVFBf
VU5PUkRFUkVEOworCX0gZWxzZSB7CisJCXNwYS5zZW5kdl9zbmRpbmZvLnNuZF9mbGFncyA9IFND
VFBfRU9SOworCX0KKwlzcGEuc2VuZHZfc25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERBVEFfQ0hB
Tk5FTF9QUElEX0RPTVNUUklORyk7CisJc3BhLnNlbmR2X2ZsYWdzID0gU0NUUF9TRU5EX1NORElO
Rk9fVkFMSUQ7CisJaWYgKChjaGFubmVsLT5wcl9wb2xpY3kgPT0gU0NUUF9QUl9TQ1RQX1RUTCkg
fHwKKwkgICAgKGNoYW5uZWwtPnByX3BvbGljeSA9PSBTQ1RQX1BSX1NDVFBfUlRYKSkgeworCQlz
cGEuc2VuZHZfcHJpbmZvLnByX3BvbGljeSA9IGNoYW5uZWwtPnByX3BvbGljeTsKKwkJc3BhLnNl
bmR2X3ByaW5mby5wcl92YWx1ZSA9IGNoYW5uZWwtPnByX3ZhbHVlOworCQlzcGEuc2VuZHZfZmxh
Z3MgfD0gU0NUUF9TRU5EX1BSSU5GT19WQUxJRDsKKwl9CisJaWYgKHVzcnNjdHBfc2VuZHYocGMt
PnNvY2ssCisJICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgbGVuZ3RoLAorCSAgICAgICAgICAg
ICAgICAgIE5VTEwsIDAsCisJICAgICAgICAgICAgICAgICAgJnNwYSwgKHNvY2tsZW5fdClzaXpl
b2Yoc3RydWN0IHNjdHBfc2VuZHZfc3BhKSwKKwkgICAgICAgICAgICAgICAgICBTQ1RQX1NFTkRW
X1NQQSwgMCkgPCAwKSB7CisJCXBlcnJvcigic2N0cF9zZW5kdiIpOworCQlyZXR1cm4gKDApOwor
CX0gZWxzZSB7CisJCXJldHVybiAoMSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcmVzZXRfb3V0
Z29pbmdfc3RyZWFtKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLCB1aW50MTZfdCBvX3N0cmVh
bSkKK3sKKwl1aW50MzJfdCBpOworCisJZm9yIChpID0gMDsgaSA8IHBjLT5vX3N0cmVhbV9idWZm
ZXJfY291bnRlcjsgaSsrKSB7CisJCWlmIChwYy0+b19zdHJlYW1fYnVmZmVyW2ldID09IG9fc3Ry
ZWFtKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisJcGMtPm9fc3RyZWFtX2J1ZmZlcltwYy0+b19z
dHJlYW1fYnVmZmVyX2NvdW50ZXIrK10gPSBvX3N0cmVhbTsKKwlyZXR1cm47Cit9CisKK3N0YXRp
YyB2b2lkCitzZW5kX291dGdvaW5nX3N0cmVhbV9yZXNldChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9u
ICpwYykKK3sKKwlzdHJ1Y3Qgc2N0cF9yZXNldF9zdHJlYW1zICpzcnM7CisJdWludDMyX3QgaTsK
KwlzaXplX3QgbGVuOworCisJaWYgKHBjLT5vX3N0cmVhbV9idWZmZXJfY291bnRlciA9PSAwKSB7
CisJCXJldHVybjsKKwl9CisJbGVuID0gc2l6ZW9mKHNjdHBfYXNzb2NfdCkgKyAoMiArIHBjLT5v
X3N0cmVhbV9idWZmZXJfY291bnRlcikgKiBzaXplb2YodWludDE2X3QpOworCXNycyA9IChzdHJ1
Y3Qgc2N0cF9yZXNldF9zdHJlYW1zICopbWFsbG9jKGxlbik7CisJaWYgKHNycyA9PSBOVUxMKSB7
CisJCXJldHVybjsKKwl9CisJbWVtc2V0KHNycywgMCwgbGVuKTsKKwlzcnMtPnNyc19mbGFncyA9
IFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HOworCXNycy0+c3JzX251bWJlcl9zdHJlYW1zID0g
cGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyOworCWZvciAoaSA9IDA7IGkgPCBwYy0+b19zdHJl
YW1fYnVmZmVyX2NvdW50ZXI7IGkrKykgeworCQlzcnMtPnNyc19zdHJlYW1fbGlzdFtpXSA9IHBj
LT5vX3N0cmVhbV9idWZmZXJbaV07CisJfQorCWlmICh1c3JzY3RwX3NldHNvY2tvcHQocGMtPnNv
Y2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRVNFVF9TVFJFQU1TLCBzcnMsIChzb2NrbGVuX3QpbGVu
KSA8IDApIHsKKwkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7CisJfSBlbHNlIHsKKwkJZm9yIChpID0g
MDsgaSA8IHBjLT5vX3N0cmVhbV9idWZmZXJfY291bnRlcjsgaSsrKSB7CisJCQlzcnMtPnNyc19z
dHJlYW1fbGlzdFtpXSA9IDA7CisJCX0KKwkJcGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyID0g
MDsKKwl9CisJZnJlZShzcnMpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlX2No
YW5uZWwoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsIHN0cnVjdCBjaGFubmVsICpjaGFubmVs
KQoreworCWlmIChjaGFubmVsID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoY2hhbm5l
bC0+c3RhdGUgIT0gREFUQV9DSEFOTkVMX09QRU4pIHsKKwkJcmV0dXJuOworCX0KKwlyZXNldF9v
dXRnb2luZ19zdHJlYW0ocGMsIGNoYW5uZWwtPm9fc3RyZWFtKTsKKwlzZW5kX291dGdvaW5nX3N0
cmVhbV9yZXNldChwYyk7CisJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfQ0xPU0lORzsK
KwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfb3Blbl9yZXF1ZXN0X21lc3NhZ2Uo
c3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVlc3QgKnJlcSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQxNl90IGlfc3RyZWFtKQoreworCXN0cnVjdCBjaGFubmVsICpjaGFubmVsOworCXVp
bnQzMl90IHByX3ZhbHVlOworCXVpbnQxNl90IHByX3BvbGljeTsKKwl1aW50MTZfdCBvX3N0cmVh
bTsKKwl1aW50OF90IHVub3JkZXJlZDsKKworCWlmICgoY2hhbm5lbCA9IGZpbmRfY2hhbm5lbF9i
eV9pX3N0cmVhbShwYywgaV9zdHJlYW0pKSkgeworCQlwcmludGYoImhhbmRsZV9vcGVuX3JlcXVl
c3RfbWVzc2FnZTogY2hhbm5lbCAldSBpcyBpbiBzdGF0ZSAldSBpbnN0ZWFkIG9mIENMT1NFRC5c
biIsCisJCSAgICAgICBjaGFubmVsLT5pZCwgY2hhbm5lbC0+c3RhdGUpOworCQkvKiBYWFg6IHNv
bWUgZXJyb3IgaGFuZGxpbmcgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAoKGNoYW5uZWwgPSBmaW5k
X2ZyZWVfY2hhbm5lbChwYykpID09IE5VTEwpIHsKKwkJLyogWFhYOiBzb21lIGVycm9yIGhhbmRs
aW5nICovCisJCXJldHVybjsKKwl9CisJc3dpdGNoIChyZXEtPmNoYW5uZWxfdHlwZSkgeworCWNh
c2UgREFUQV9DSEFOTkVMX1JFTElBQkxFOgorCQlwcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfTk9O
RTsKKwkJYnJlYWs7CisJLyogWFhYIERvZXNuJ3QgbWFrZSBzZW5zZSAqLworCWNhc2UgREFUQV9D
SEFOTkVMX1JFTElBQkxFX1NUUkVBTToKKwkJcHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7
CisJCWJyZWFrOworCS8qIFhYWCBEb2Vzbid0IG1ha2Ugc2Vuc2UgKi8KKwljYXNlIERBVEFfQ0hB
Tk5FTF9VTlJFTElBQkxFOgorCQlwcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfVFRMOworCQlicmVh
azsKKwljYXNlIERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JFTElBQkxFX1JFWE1JVDoKKwkJcHJfcG9s
aWN5ID0gU0NUUF9QUl9TQ1RQX1JUWDsKKwkJYnJlYWs7CisJY2FzZSBEQVRBX0NIQU5ORUxfUEFS
VElBTF9SRUxJQUJMRV9USU1FRDoKKwkJcHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX1RUTDsKKwkJ
YnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7CisJCS8q
IFhYWCBlcnJvciBoYW5kbGluZyAqLworCQlicmVhazsKKwl9CisJcHJfdmFsdWUgPSBudG9ocyhy
ZXEtPnJlbGlhYmlsaXR5X3BhcmFtcyk7CisJaWYgKG50b2hzKHJlcS0+ZmxhZ3MpICYgREFUQV9D
SEFOTkVMX0ZMQUdfT1VUX09GX09SREVSX0FMTE9XRUQpIHsKKwkJdW5vcmRlcmVkID0gMTsKKwl9
IGVsc2UgeworCQl1bm9yZGVyZWQgPSAwOworCX0KKwlvX3N0cmVhbSA9IGZpbmRfZnJlZV9vX3N0
cmVhbShwYyk7CisJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORzsKKwlj
aGFubmVsLT51bm9yZGVyZWQgPSB1bm9yZGVyZWQ7CisJY2hhbm5lbC0+cHJfcG9saWN5ID0gcHJf
cG9saWN5OworCWNoYW5uZWwtPnByX3ZhbHVlID0gcHJfdmFsdWU7CisJY2hhbm5lbC0+aV9zdHJl
YW0gPSBpX3N0cmVhbTsKKwljaGFubmVsLT5vX3N0cmVhbSA9IG9fc3RyZWFtOworCWNoYW5uZWwt
PmZsYWdzID0gMDsKKwlwYy0+aV9zdHJlYW1fY2hhbm5lbFtpX3N0cmVhbV0gPSBjaGFubmVsOwor
CWlmIChvX3N0cmVhbSA9PSAwKSB7CisJCXJlcXVlc3RfbW9yZV9vX3N0cmVhbXMocGMpOworCX0g
ZWxzZSB7CisJCWlmIChzZW5kX29wZW5fcmVzcG9uc2VfbWVzc2FnZShwYy0+c29jaywgb19zdHJl
YW0sIGlfc3RyZWFtKSkgeworCQkJcGMtPm9fc3RyZWFtX2NoYW5uZWxbb19zdHJlYW1dID0gY2hh
bm5lbDsKKwkJfSBlbHNlIHsKKwkJCWlmIChlcnJubyA9PSBFQUdBSU4pIHsKKwkJCQljaGFubmVs
LT5mbGFncyB8PSBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SU1A7CisJCQkJcGMtPm9fc3RyZWFt
X2NoYW5uZWxbb19zdHJlYW1dID0gY2hhbm5lbDsKKwkJCX0gZWxzZSB7CisJCQkJLyogWFhYOiBT
aWduYWwgZXJyb3IgdG8gdGhlIG90aGVyIGVuZC4gKi8KKwkJCQlwYy0+aV9zdHJlYW1fY2hhbm5l
bFtpX3N0cmVhbV0gPSBOVUxMOworCQkJCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX0NM
T1NFRDsKKwkJCQljaGFubmVsLT51bm9yZGVyZWQgPSAwOworCQkJCWNoYW5uZWwtPnByX3BvbGlj
eSA9IDA7CisJCQkJY2hhbm5lbC0+cHJfdmFsdWUgPSAwOworCQkJCWNoYW5uZWwtPmlfc3RyZWFt
ID0gMDsKKwkJCQljaGFubmVsLT5vX3N0cmVhbSA9IDA7CisJCQkJY2hhbm5lbC0+ZmxhZ3MgPSAw
OworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX29wZW5fcmVzcG9uc2Vf
bWVzc2FnZShzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jlc3BvbnNlICpyc3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsIHVpbnQxNl90IGlfc3Ry
ZWFtKQoreworCXVpbnQxNl90IG9fc3RyZWFtOworCXN0cnVjdCBjaGFubmVsICpjaGFubmVsOwor
CisJb19zdHJlYW0gPSBudG9ocyhyc3AtPnJldmVyc2Vfc3RyZWFtKTsKKwljaGFubmVsID0gZmlu
ZF9jaGFubmVsX2J5X29fc3RyZWFtKHBjLCBvX3N0cmVhbSk7CisJaWYgKGNoYW5uZWwgPT0gTlVM
TCkgeworCQkvKiBYWFg6IGltcHJvdmUgZXJyb3IgaGFuZGxpbmcgKi8KKwkJcHJpbnRmKCJoYW5k
bGVfb3Blbl9yZXNwb25zZV9tZXNzYWdlOiBDYW4ndCBmaW5kIGNoYW5uZWwgZm9yIG91dGdvaW5n
IHN0ZWFtICVkLlxuIiwgb19zdHJlYW0pOworCQlyZXR1cm47CisJfQorCWlmIChjaGFubmVsLT5z
dGF0ZSAhPSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORykgeworCQkvKiBYWFg6IGltcHJvdmUgZXJy
b3IgaGFuZGxpbmcgKi8KKwkJcHJpbnRmKCJoYW5kbGVfb3Blbl9yZXNwb25zZV9tZXNzYWdlOiBD
aGFubmVsIHdpdGggaWQgJXUgZm9yIG91dGdvaW5nIHN0ZWFtICV1IGlzIGluIHN0YXRlICV1Llxu
IiwgY2hhbm5lbC0+aWQsIG9fc3RyZWFtLCBjaGFubmVsLT5zdGF0ZSk7CisJCXJldHVybjsKKwl9
CisJaWYgKGZpbmRfY2hhbm5lbF9ieV9pX3N0cmVhbShwYywgaV9zdHJlYW0pKSB7CisJCS8qIFhY
WDogaW1wcm92ZSBlcnJvciBoYW5kbGluZyAqLworCQlwcmludGYoImhhbmRsZV9vcGVuX3Jlc3Bv
bnNlX21lc3NhZ2U6IENoYW5uZWwgY29sbGlzaW9uIGZvciBjaGFubmVsIHdpdGggaWQgJXUgYW5k
IHN0cmVhbXMgKGluL291dCkgPSAoJXUvJXUpLlxuIiwgY2hhbm5lbC0+aWQsIGlfc3RyZWFtLCBv
X3N0cmVhbSk7CisJCXJldHVybjsKKwl9CisJY2hhbm5lbC0+aV9zdHJlYW0gPSBpX3N0cmVhbTsK
KwljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9PUEVOOworCXBjLT5pX3N0cmVhbV9jaGFu
bmVsW2lfc3RyZWFtXSA9IGNoYW5uZWw7CisJaWYgKHNlbmRfb3Blbl9hY2tfbWVzc2FnZShwYy0+
c29jaywgb19zdHJlYW0pKSB7CisJCWNoYW5uZWwtPmZsYWdzID0gMDsKKwl9IGVsc2UgeworCQlj
aGFubmVsLT5mbGFncyB8PSBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9BQ0s7CisJfQorCXJldHVy
bjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9vcGVuX2Fja19tZXNzYWdlKHN0cnVjdCBwZWVy
X2Nvbm5lY3Rpb24gKnBjLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0Y3dlYl9k
YXRhY2hhbm5lbF9hY2sgKmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5n
dGgsIHVpbnQxNl90IGlfc3RyZWFtKQoreworCXN0cnVjdCBjaGFubmVsICpjaGFubmVsOworCisJ
Y2hhbm5lbCA9IGZpbmRfY2hhbm5lbF9ieV9pX3N0cmVhbShwYywgaV9zdHJlYW0pOworCWlmIChj
aGFubmVsID09IE5VTEwpIHsKKwkJLyogWFhYOiBzb21lIGVycm9yIGhhbmRsaW5nICovCisJCXJl
dHVybjsKKwl9CisJaWYgKGNoYW5uZWwtPnN0YXRlID09IERBVEFfQ0hBTk5FTF9PUEVOKSB7CisJ
CXJldHVybjsKKwl9CisJaWYgKGNoYW5uZWwtPnN0YXRlICE9IERBVEFfQ0hBTk5FTF9DT05ORUNU
SU5HKSB7CisJCS8qIFhYWDogZXJyb3IgaGFuZGxpbmcgKi8KKwkJcmV0dXJuOworCX0KKwljaGFu
bmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9PUEVOOworCXJldHVybjsKK30KKworc3RhdGljIHZv
aWQKK2hhbmRsZV91bmtub3duX21lc3NhZ2UoY2hhciAqbXNnLCBzaXplX3QgbGVuZ3RoLCB1aW50
MTZfdCBpX3N0cmVhbSkKK3sKKwkvKiBYWFg6IFNlbmQgYW4gZXJyb3IgbWVzc2FnZSAqLworCXJl
dHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9kYXRhX21lc3NhZ2Uoc3RydWN0IHBlZXJf
Y29ubmVjdGlvbiAqcGMsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90
IGxlbmd0aCwgdWludDE2X3QgaV9zdHJlYW0pCit7CisJc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7
CisKKwljaGFubmVsID0gZmluZF9jaGFubmVsX2J5X2lfc3RyZWFtKHBjLCBpX3N0cmVhbSk7CisJ
aWYgKGNoYW5uZWwgPT0gTlVMTCkgeworCQkvKiBYWFg6IFNvbWUgZXJyb3IgaGFuZGxpbmcgKi8K
KwkJcmV0dXJuOworCX0KKwlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gREFUQV9DSEFOTkVMX0NPTk5F
Q1RJTkcpIHsKKwkJLyogSW1wbGljaXQgQUNLICovCisJCWNoYW5uZWwtPnN0YXRlID0gREFUQV9D
SEFOTkVMX09QRU47CisJfQorCWlmIChjaGFubmVsLT5zdGF0ZSAhPSBEQVRBX0NIQU5ORUxfT1BF
TikgeworCQkvKiBYWFg6IFdoYXQgYWJvdXQgb3RoZXIgc3RhdGVzPyAqLworCQkvKiBYWFg6IFNv
bWUgZXJyb3IgaGFuZGxpbmcgKi8KKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCS8qIEFzc3VtaW5n
IERBVEFfQ0hBTk5FTF9QUElEX0RPTVNUUklORyAqLworCQkvKiBYWFg6IFByb3RlY3QgZm9yIG5v
biAwIHRlcm1pbmF0ZWQgYnVmZmVyICovCisJCXByaW50ZigiTWVzc2FnZSByZWNlaXZlZCBvZiBs
ZW5ndGggJXp1IG9uIGNoYW5uZWwgd2l0aCBpZCAldTogJS4qc1xuIiwKKwkJICAgICAgIGxlbmd0
aCwgY2hhbm5lbC0+aWQsIChpbnQpbGVuZ3RoLCBidWZmZXIpOworCX0KKwlyZXR1cm47Cit9CisK
K3N0YXRpYyB2b2lkCitoYW5kbGVfbWVzc2FnZShzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywg
Y2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCB1aW50MzJfdCBwcGlkLCB1aW50MTZfdCBpX3N0
cmVhbSkKK3sKKwlzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVxdWVzdCAqcmVxOwor
CXN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXNwb25zZSAqcnNwOworCXN0cnVjdCBy
dGN3ZWJfZGF0YWNoYW5uZWxfYWNrICphY2ssICptc2c7CisKKwlzd2l0Y2ggKHBwaWQpIHsKKwlj
YXNlIERBVEFfQ0hBTk5FTF9QUElEX0NPTlRST0w6CisJCWlmIChsZW5ndGggPCBzaXplb2Yoc3Ry
dWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2spKSB7CisJCQlyZXR1cm47CisJCX0KKwkJbXNnID0g
KHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNrICopYnVmZmVyOworCQlzd2l0Y2ggKG1zZy0+
bXNnX3R5cGUpIHsKKwkJY2FzZSBEQVRBX0NIQU5ORUxfT1BFTl9SRVFVRVNUOgorCQkJaWYgKGxl
bmd0aCA8IHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVxdWVzdCkpIHsK
KwkJCQkvKiBYWFg6IGVycm9yIGhhbmRsaW5nPyAqLworCQkJCXJldHVybjsKKwkJCX0KKwkJCXJl
cSA9IChzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVxdWVzdCAqKWJ1ZmZlcjsKKwkJ
CWhhbmRsZV9vcGVuX3JlcXVlc3RfbWVzc2FnZShwYywgcmVxLCBsZW5ndGgsIGlfc3RyZWFtKTsK
KwkJCWJyZWFrOworCQljYXNlIERBVEFfQ0hBTk5FTF9PUEVOX1JFU1BPTlNFOgorCQkJaWYgKGxl
bmd0aCA8IHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVzcG9uc2UpKSB7
CisJCQkJLyogWFhYOiBlcnJvciBoYW5kbGluZz8gKi8KKwkJCQlyZXR1cm47CisJCQl9CisJCQly
c3AgPSAoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jlc3BvbnNlICopYnVmZmVyOwor
CQkJaGFuZGxlX29wZW5fcmVzcG9uc2VfbWVzc2FnZShwYywgcnNwLCBsZW5ndGgsIGlfc3RyZWFt
KTsKKwkJCWJyZWFrOworCQljYXNlIERBVEFfQ0hBTk5FTF9BQ0s6CisJCQlpZiAobGVuZ3RoIDwg
c2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNrKSkgeworCQkJCS8qIFhYWDogZXJy
b3IgaGFuZGxpbmc/ICovCisJCQkJcmV0dXJuOworCQkJfQorCQkJYWNrID0gKHN0cnVjdCBydGN3
ZWJfZGF0YWNoYW5uZWxfYWNrICopYnVmZmVyOworCQkJaGFuZGxlX29wZW5fYWNrX21lc3NhZ2Uo
cGMsIGFjaywgbGVuZ3RoLCBpX3N0cmVhbSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWhh
bmRsZV91bmtub3duX21lc3NhZ2UoYnVmZmVyLCBsZW5ndGgsIGlfc3RyZWFtKTsKKwkJCWJyZWFr
OworCQl9CisJCWJyZWFrOworCWNhc2UgREFUQV9DSEFOTkVMX1BQSURfRE9NU1RSSU5HOgorCWNh
c2UgREFUQV9DSEFOTkVMX1BQSURfQklOQVJZOgorCQloYW5kbGVfZGF0YV9tZXNzYWdlKHBjLCBi
dWZmZXIsIGxlbmd0aCwgaV9zdHJlYW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYo
Ik1lc3NhZ2Ugb2YgbGVuZ3RoICV6dSwgUFBJRCAldSBvbiBzdHJlYW0gJXUgcmVjZWl2ZWQuXG4i
LAorCQkgICAgICAgbGVuZ3RoLCBwcGlkLCBpX3N0cmVhbSk7CisJCWJyZWFrOworCX0KK30KKwor
c3RhdGljIHZvaWQKK2hhbmRsZV9hc3NvY2lhdGlvbl9jaGFuZ2VfZXZlbnQoc3RydWN0IHNjdHBf
YXNzb2NfY2hhbmdlICpzYWMpCit7CisJdW5zaWduZWQgaW50IGksIG47CisKKwlwcmludGYoIkFz
c29jaWF0aW9uIGNoYW5nZSAiKTsKKwlzd2l0Y2ggKHNhYy0+c2FjX3N0YXRlKSB7CisJY2FzZSBT
Q1RQX0NPTU1fVVA6CisJCXByaW50ZigiU0NUUF9DT01NX1VQIik7CisJCWJyZWFrOworCWNhc2Ug
U0NUUF9DT01NX0xPU1Q6CisJCXByaW50ZigiU0NUUF9DT01NX0xPU1QiKTsKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX1JFU1RBUlQ6CisJCXByaW50ZigiU0NUUF9SRVNUQVJUIik7CisJCWJyZWFrOwor
CWNhc2UgU0NUUF9TSFVURE9XTl9DT01QOgorCQlwcmludGYoIlNDVFBfU0hVVERPV05fQ09NUCIp
OworCQlicmVhazsKKwljYXNlIFNDVFBfQ0FOVF9TVFJfQVNTT0M6CisJCXByaW50ZigiU0NUUF9D
QU5UX1NUUl9BU1NPQyIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIlVOS05PV04i
KTsKKwkJYnJlYWs7CisJfQorCXByaW50ZigiLCBzdHJlYW1zIChpbi9vdXQpID0gKCV1LyV1KSIs
CisJICAgICAgIHNhYy0+c2FjX2luYm91bmRfc3RyZWFtcywgc2FjLT5zYWNfb3V0Ym91bmRfc3Ry
ZWFtcyk7CisJbiA9IHNhYy0+c2FjX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19j
aGFuZ2UpOworCWlmICgoKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfQ09NTV9VUCkgfHwKKwkgICAg
IChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX1JFU1RBUlQpKSAmJiAobiA+IDApKSB7CisJCXByaW50
ZigiLCBzdXBwb3J0cyIpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlzd2l0Y2gg
KHNhYy0+c2FjX2luZm9baV0pIHsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19QUjoKKwkJ
CQlwcmludGYoIiBQUiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRT
X0FVVEg6CisJCQkJcHJpbnRmKCIgQVVUSCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTQ1RQX0FT
U09DX1NVUFBPUlRTX0FTQ09ORjoKKwkJCQlwcmludGYoIiBBU0NPTkYiKTsKKwkJCQlicmVhazsK
KwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19NVUxUSUJVRjoKKwkJCQlwcmludGYoIiBNVUxU
SUJVRiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX1JFX0NPTkZJ
RzoKKwkJCQlwcmludGYoIiBSRS1DT05GSUciKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0NUUF9B
U1NPQ19TVVBQT1JUU19JTlRFUkxFQVZJTkc6CisJCQkJcHJpbnRmKCIgSU5URVJMRUFWSU5HIik7
CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZigiIFVOS05PV04oMHglMDJ4KSIs
IHNhYy0+c2FjX2luZm9baV0pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIGlmICgo
KHNhYy0+c2FjX3N0YXRlID09IFNDVFBfQ09NTV9MT1NUKSB8fAorCSAgICAgICAgICAgIChzYWMt
PnNhY19zdGF0ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09DKSkgJiYgKG4gPiAwKSkgeworCQlwcmlu
dGYoIiwgQUJPUlQgPSIpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlwcmludGYo
IiAweCUwMngiLCBzYWMtPnNhY19pbmZvW2ldKTsKKwkJfQorCX0KKwlwcmludGYoIi5cbiIpOwor
CWlmICgoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9DQU5UX1NUUl9BU1NPQykgfHwKKwkgICAgKHNh
Yy0+c2FjX3N0YXRlID09IFNDVFBfU0hVVERPV05fQ09NUCkgfHwKKwkgICAgKHNhYy0+c2FjX3N0
YXRlID09IFNDVFBfQ09NTV9MT1NUKSkgeworCQlleGl0KDApOworCX0KKwlyZXR1cm47Cit9CisK
K3N0YXRpYyB2b2lkCitoYW5kbGVfcGVlcl9hZGRyZXNzX2NoYW5nZV9ldmVudChzdHJ1Y3Qgc2N0
cF9wYWRkcl9jaGFuZ2UgKnNwYykKK3sKKwljaGFyIGFkZHJfYnVmW0lORVQ2X0FERFJTVFJMRU5d
OworCWNvbnN0IGNoYXIgKmFkZHI7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJc3RydWN0
IHNvY2thZGRyX2luNiAqc2luNjsKKworCXN3aXRjaCAoc3BjLT5zcGNfYWFkZHIuc3NfZmFtaWx5
KSB7CisJY2FzZSBBRl9JTkVUOgorCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJnNwYy0+
c3BjX2FhZGRyOworCQlhZGRyID0gaW5ldF9udG9wKEFGX0lORVQsICZzaW4tPnNpbl9hZGRyLCBh
ZGRyX2J1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJ
c2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnNwYy0+c3BjX2FhZGRyOworCQlhZGRyID0g
aW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBhZGRyX2J1ZiwgSU5FVDZfQURE
UlNUUkxFTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisjaWZkZWYgX1dJTjMyCisJCWlmIChfc25w
cmludGYoYWRkcl9idWYsIElORVQ2X0FERFJTVFJMRU4sICJVbmtub3duIGZhbWlseSAlZCIsIHNw
Yy0+c3BjX2FhZGRyLnNzX2ZhbWlseSkgPCAwKSB7CisjZWxzZQorCQlpZiAoc25wcmludGYoYWRk
cl9idWYsIElORVQ2X0FERFJTVFJMRU4sICJVbmtub3duIGZhbWlseSAlZCIsIHNwYy0+c3BjX2Fh
ZGRyLnNzX2ZhbWlseSkgPCAwKSB7CisjZW5kaWYKKwkJCWFkZHJfYnVmWzBdID0gJ1wwJzsKKwkJ
fQorCQlhZGRyID0gYWRkcl9idWY7CisJCWJyZWFrOworCX0KKwlwcmludGYoIlBlZXIgYWRkcmVz
cyAlcyBpcyBub3cgIiwgYWRkcik7CisJc3dpdGNoIChzcGMtPnNwY19zdGF0ZSkgeworCWNhc2Ug
U0NUUF9BRERSX0FWQUlMQUJMRToKKwkJcHJpbnRmKCJTQ1RQX0FERFJfQVZBSUxBQkxFIik7CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9BRERSX1VOUkVBQ0hBQkxFOgorCQlwcmludGYoIlNDVFBfQURE
Ul9VTlJFQUNIQUJMRSIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQUREUl9SRU1PVkVEOgorCQlw
cmludGYoIlNDVFBfQUREUl9SRU1PVkVEIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX0FE
REVEOgorCQlwcmludGYoIlNDVFBfQUREUl9BRERFRCIpOworCQlicmVhazsKKwljYXNlIFNDVFBf
QUREUl9NQURFX1BSSU06CisJCXByaW50ZigiU0NUUF9BRERSX01BREVfUFJJTSIpOworCQlicmVh
azsKKwljYXNlIFNDVFBfQUREUl9DT05GSVJNRUQ6CisJCXByaW50ZigiU0NUUF9BRERSX0NPTkZJ
Uk1FRCIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIlVOS05PV04iKTsKKwkJYnJl
YWs7CisJfQorCXByaW50ZigiIChlcnJvciA9IDB4JTA4eCkuXG4iLCBzcGMtPnNwY19lcnJvcik7
CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX2FkYXB0YXRpb25faW5kaWNhdGlv
bihzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50ICpzYWkpCit7CisJcHJpbnRmKCJBZGFwdGF0
aW9uIGluZGljYXRpb246ICV4LlxuIiwgc2FpLT4gc2FpX2FkYXB0YXRpb25faW5kKTsKKwlyZXR1
cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfc2h1dGRvd25fZXZlbnQoc3RydWN0IHNjdHBf
c2h1dGRvd25fZXZlbnQgKnNzZSkKK3sKKwlwcmludGYoIlNodXRkb3duIGV2ZW50LlxuIik7CisJ
LyogWFhYOiBub3RpZnkgYWxsIGNoYW5uZWxzLiAqLworCXJldHVybjsKK30KKworc3RhdGljIHZv
aWQKK2hhbmRsZV9zdHJlYW1fcmVzZXRfZXZlbnQoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMs
IHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCAqc3RycnN0KQoreworCXVpbnQzMl90IG4s
IGk7CisJc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7CisKKwluID0gKHN0cnJzdC0+c3RycmVzZXRf
bGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCkpIC8gc2l6ZW9m
KHVpbnQxNl90KTsKKwlwcmludGYoIlN0cmVhbSByZXNldCBldmVudDogZmxhZ3MgPSAleCwgIiwg
c3RycnN0LT5zdHJyZXNldF9mbGFncyk7CisJaWYgKHN0cnJzdC0+c3RycmVzZXRfZmxhZ3MgJiBT
Q1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlOR19TU04pIHsKKwkJaWYgKHN0cnJzdC0+c3RycmVzZXRf
ZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19TU04pIHsKKwkJCXByaW50ZigiaW5j
b21pbmcvIik7CisJCX0KKwkJcHJpbnRmKCJpbmNvbWluZyAiKTsKKwl9CisJaWYgKHN0cnJzdC0+
c3RycmVzZXRfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19TU04pIHsKKwkJcHJp
bnRmKCJvdXRnb2luZyAiKTsKKwl9CisJcHJpbnRmKCJzdHJlYW0gaWRzID0gIik7CisJZm9yIChp
ID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAoaSA+IDApIHsKKwkJCXByaW50ZigiLCAiKTsKKwkJ
fQorCQlwcmludGYoIiVkIiwgc3RycnN0LT5zdHJyZXNldF9zdHJlYW1fbGlzdFtpXSk7CisJfQor
CXByaW50ZigiLlxuIik7CisJaWYgKCEoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RS
RUFNX1JFU0VUX0RFTklFRCkgJiYKKwkgICAgIShzdHJyc3QtPnN0cnJlc2V0X2ZsYWdzICYgU0NU
UF9TVFJFQU1fUkVTRVRfRkFJTEVEKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJ
CQlpZiAoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFNX1JFU0VUX0lOQ09NSU5H
X1NTTikgeworCQkJCWNoYW5uZWwgPSBmaW5kX2NoYW5uZWxfYnlfaV9zdHJlYW0ocGMsIHN0cnJz
dC0+c3RycmVzZXRfc3RyZWFtX2xpc3RbaV0pOworCQkJCWlmIChjaGFubmVsICE9IE5VTEwpIHsK
KwkJCQkJcGMtPmlfc3RyZWFtX2NoYW5uZWxbY2hhbm5lbC0+aV9zdHJlYW1dID0gTlVMTDsKKwkJ
CQkJY2hhbm5lbC0+aV9zdHJlYW0gPSAwOworCQkJCQlpZiAoY2hhbm5lbC0+b19zdHJlYW0gPT0g
MCkgeworCQkJCQkJY2hhbm5lbC0+cHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7CisJCQkJ
CQljaGFubmVsLT5wcl92YWx1ZSA9IDA7CisJCQkJCQljaGFubmVsLT51bm9yZGVyZWQgPSAwOwor
CQkJCQkJY2hhbm5lbC0+ZmxhZ3MgPSAwOworCQkJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NI
QU5ORUxfQ0xPU0VEOworCQkJCQl9IGVsc2UgeworCQkJCQkJaWYgKGNoYW5uZWwtPnN0YXRlID09
IERBVEFfQ0hBTk5FTF9PUEVOKSB7CisJCQkJCQkJcmVzZXRfb3V0Z29pbmdfc3RyZWFtKHBjLCBj
aGFubmVsLT5vX3N0cmVhbSk7CisJCQkJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxf
Q0xPU0lORzsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLyogWFhYOiBXaGF0IHRvIGRvPyAqLwor
CQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkJaWYgKHN0cnJzdC0+c3RycmVzZXRfZmxh
Z3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19TU04pIHsKKwkJCQljaGFubmVsID0gZmlu
ZF9jaGFubmVsX2J5X29fc3RyZWFtKHBjLCBzdHJyc3QtPnN0cnJlc2V0X3N0cmVhbV9saXN0W2ld
KTsKKwkJCQlpZiAoY2hhbm5lbCAhPSBOVUxMKSB7CisJCQkJCXBjLT5vX3N0cmVhbV9jaGFubmVs
W2NoYW5uZWwtPm9fc3RyZWFtXSA9IE5VTEw7CisJCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0gMDsK
KwkJCQkJaWYgKGNoYW5uZWwtPmlfc3RyZWFtID09IDApIHsKKwkJCQkJCWNoYW5uZWwtPnByX3Bv
bGljeSA9IFNDVFBfUFJfU0NUUF9OT05FOworCQkJCQkJY2hhbm5lbC0+cHJfdmFsdWUgPSAwOwor
CQkJCQkJY2hhbm5lbC0+dW5vcmRlcmVkID0gMDsKKwkJCQkJCWNoYW5uZWwtPmZsYWdzID0gMDsK
KwkJCQkJCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX0NMT1NFRDsKKwkJCQkJfQorCQkJ
CX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfc3Ry
ZWFtX2NoYW5nZV9ldmVudChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgc3RydWN0IHNjdHBf
c3RyZWFtX2NoYW5nZV9ldmVudCAqc3RyY2hnKQoreworCXVpbnQxNl90IG9fc3RyZWFtOworCXVp
bnQzMl90IGk7CisJc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7CisKKwlwcmludGYoIlN0cmVhbSBj
aGFuZ2UgZXZlbnQ6IHN0cmVhbXMgKGluL291dCkgPSAoJXUvJXUpLCBmbGFncyA9ICV4LlxuIiwK
KwkgICAgICAgc3RyY2hnLT5zdHJjaGFuZ2VfaW5zdHJtcywgc3RyY2hnLT5zdHJjaGFuZ2Vfb3V0
c3RybXMsIHN0cmNoZy0+c3RyY2hhbmdlX2ZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVS
X09GX0NIQU5ORUxTOyBpKyspIHsKKwkJY2hhbm5lbCA9ICYocGMtPmNoYW5uZWxzW2ldKTsKKwkJ
aWYgKChjaGFubmVsLT5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORykgJiYKKwkJICAg
IChjaGFubmVsLT5vX3N0cmVhbSA9PSAwKSkgeworCQkJaWYgKChzdHJjaGctPnN0cmNoYW5nZV9m
bGFncyAmIFNDVFBfU1RSRUFNX0NIQU5HRV9ERU5JRUQpIHx8CisJCQkgICAgKHN0cmNoZy0+c3Ry
Y2hhbmdlX2ZsYWdzICYgU0NUUF9TVFJFQU1fQ0hBTkdFX0ZBSUxFRCkpIHsKKwkJCQkvKiBYWFg6
IFNpZ25hbCB0byB0aGUgb3RoZXIgZW5kLiAqLworCQkJCWlmIChjaGFubmVsLT5pX3N0cmVhbSAh
PSAwKSB7CisJCQkJCXBjLT5pX3N0cmVhbV9jaGFubmVsW2NoYW5uZWwtPmlfc3RyZWFtXSA9IE5V
TEw7CisJCQkJfQorCQkJCWNoYW5uZWwtPnVub3JkZXJlZCA9IDA7CisJCQkJY2hhbm5lbC0+cHJf
cG9saWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7CisJCQkJY2hhbm5lbC0+cHJfdmFsdWUgPSAwOwor
CQkJCWNoYW5uZWwtPmlfc3RyZWFtID0gMDsKKwkJCQljaGFubmVsLT5vX3N0cmVhbSA9IDA7CisJ
CQkJY2hhbm5lbC0+ZmxhZ3MgPSAwOworCQkJCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVM
X0NMT1NFRDsKKwkJCX0gZWxzZSB7CisJCQkJb19zdHJlYW0gPSBmaW5kX2ZyZWVfb19zdHJlYW0o
cGMpOworCQkJCWlmIChvX3N0cmVhbSAhPSAwKSB7CisJCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0g
b19zdHJlYW07CisJCQkJCXBjLT5vX3N0cmVhbV9jaGFubmVsW29fc3RyZWFtXSA9IGNoYW5uZWw7
CisJCQkJCWlmIChjaGFubmVsLT5pX3N0cmVhbSA9PSAwKSB7CisJCQkJCQljaGFubmVsLT5mbGFn
cyB8PSBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SRVE7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlj
aGFubmVsLT5mbGFncyB8PSBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SU1A7CisJCQkJCX0KKwkJ
CQl9IGVsc2UgeworCQkJCQkvKiBXZSB3aWxsIG5vdCBmaW5kIG1vcmUgLi4uICovCisJCQkJCWJy
ZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCito
YW5kbGVfcmVtb3RlX2Vycm9yX2V2ZW50KHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvciAqc3JlKQor
eworCXNpemVfdCBpLCBuOworCisJbiA9IHNyZS0+c3JlX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qg
c2N0cF9yZW1vdGVfZXJyb3IpOworCXByaW50ZigiUmVtb3RlIEVycm9yIChlcnJvciA9IDB4JTA0
eCk6ICIsIHNyZS0+c3JlX2Vycm9yKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXBy
aW50ZigiIDB4JTAyeCIsIHNyZS0+IHNyZV9kYXRhW2ldKTsKKwl9CisJcHJpbnRmKCIuXG4iKTsK
KwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfc2VuZF9mYWlsZWRfZXZlbnQoc3Ry
dWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQgKnNzZmUpCit7CisJc2l6ZV90IGksIG47CisKKwlp
ZiAoc3NmZS0+c3NmZV9mbGFncyAmIFNDVFBfREFUQV9VTlNFTlQpIHsKKwkJcHJpbnRmKCJVbnNl
bnQgIik7CisJfQorCWlmIChzc2ZlLT5zc2ZlX2ZsYWdzICYgU0NUUF9EQVRBX1NFTlQpIHsKKwkJ
cHJpbnRmKCJTZW50ICIpOworCX0KKwlpZiAoc3NmZS0+c3NmZV9mbGFncyAmIH4oU0NUUF9EQVRB
X1NFTlQgfCBTQ1RQX0RBVEFfVU5TRU5UKSkgeworCQlwcmludGYoIihmbGFncyA9ICV4KSAiLCBz
c2ZlLT5zc2ZlX2ZsYWdzKTsKKwl9CisJcHJpbnRmKCJtZXNzYWdlIHdpdGggUFBJRCA9ICV1LCBT
SUQgPSAldSwgZmxhZ3M6IDB4JTA0eCBkdWUgdG8gZXJyb3IgPSAweCUwOHgiLAorCSAgICAgICAo
dWludDMyX3QpbnRvaGwoc3NmZS0+c3NmZV9pbmZvLnNuZF9wcGlkKSwgc3NmZS0+c3NmZV9pbmZv
LnNuZF9zaWQsCisJICAgICAgIHNzZmUtPnNzZmVfaW5mby5zbmRfZmxhZ3MsIHNzZmUtPnNzZmVf
ZXJyb3IpOworCW4gPSBzc2ZlLT5zc2ZlX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5k
X2ZhaWxlZF9ldmVudCk7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlwcmludGYoIiAw
eCUwMngiLCBzc2ZlLT5zc2ZlX2RhdGFbaV0pOworCX0KKwlwcmludGYoIi5cbiIpOworCXJldHVy
bjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9ub3RpZmljYXRpb25fcnRjd2ViKHN0cnVjdCBw
ZWVyX2Nvbm5lY3Rpb24gKnBjLCB1bmlvbiBzY3RwX25vdGlmaWNhdGlvbiAqbm90aWYsIHNpemVf
dCBuKQoreworCWlmIChub3RpZi0+c25faGVhZGVyLnNuX2xlbmd0aCAhPSAodWludDMyX3Qpbikg
eworCQlyZXR1cm47CisJfQorCXN3aXRjaCAobm90aWYtPnNuX2hlYWRlci5zbl90eXBlKSB7CisJ
Y2FzZSBTQ1RQX0FTU09DX0NIQU5HRToKKwkJaGFuZGxlX2Fzc29jaWF0aW9uX2NoYW5nZV9ldmVu
dCgmKG5vdGlmLT5zbl9hc3NvY19jaGFuZ2UpKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1BFRVJf
QUREUl9DSEFOR0U6CisJCWhhbmRsZV9wZWVyX2FkZHJlc3NfY2hhbmdlX2V2ZW50KCYobm90aWYt
PnNuX3BhZGRyX2NoYW5nZSkpOworCQlicmVhazsKKwljYXNlIFNDVFBfUkVNT1RFX0VSUk9SOgor
CQloYW5kbGVfcmVtb3RlX2Vycm9yX2V2ZW50KCYobm90aWYtPnNuX3JlbW90ZV9lcnJvcikpOwor
CQlicmVhazsKKwljYXNlIFNDVFBfU0hVVERPV05fRVZFTlQ6CisJCWhhbmRsZV9zaHV0ZG93bl9l
dmVudCgmKG5vdGlmLT5zbl9zaHV0ZG93bl9ldmVudCkpOworCQlicmVhazsKKwljYXNlIFNDVFBf
QURBUFRBVElPTl9JTkRJQ0FUSU9OOgorCQloYW5kbGVfYWRhcHRhdGlvbl9pbmRpY2F0aW9uKCYo
bm90aWYtPnNuX2FkYXB0YXRpb25fZXZlbnQpKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1BBUlRJ
QUxfREVMSVZFUllfRVZFTlQ6CisJCWJyZWFrOworCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTl9F
VkVOVDoKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQ6CisJCWJyZWFrOwor
CWNhc2UgU0NUUF9OT1RJRklDQVRJT05TX1NUT1BQRURfRVZFTlQ6CisJCWJyZWFrOworCWNhc2Ug
U0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDoKKwkJaGFuZGxlX3NlbmRfZmFpbGVkX2V2ZW50KCYobm90
aWYtPnNuX3NlbmRfZmFpbGVkX2V2ZW50KSk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9TVFJFQU1f
UkVTRVRfRVZFTlQ6CisJCWhhbmRsZV9zdHJlYW1fcmVzZXRfZXZlbnQocGMsICYobm90aWYtPnNu
X3N0cnJlc2V0X2V2ZW50KSk7CisJCXNlbmRfZGVmZXJyZWRfbWVzc2FnZXMocGMpOworCQlzZW5k
X291dGdvaW5nX3N0cmVhbV9yZXNldChwYyk7CisJCXJlcXVlc3RfbW9yZV9vX3N0cmVhbXMocGMp
OworCQlicmVhazsKKwljYXNlIFNDVFBfQVNTT0NfUkVTRVRfRVZFTlQ6CisJCWJyZWFrOworCWNh
c2UgU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UOgorCQloYW5kbGVfc3RyZWFtX2NoYW5nZV9ldmVu
dChwYywgJihub3RpZi0+c25fc3RyY2hhbmdlX2V2ZW50KSk7CisJCXNlbmRfZGVmZXJyZWRfbWVz
c2FnZXMocGMpOworCQlzZW5kX291dGdvaW5nX3N0cmVhbV9yZXNldChwYyk7CisJCXJlcXVlc3Rf
bW9yZV9vX3N0cmVhbXMocGMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9
CisKK3N0YXRpYyB2b2lkCitwcmludF9zdGF0dXMoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMp
Cit7CisJc3RydWN0IHNjdHBfc3RhdHVzIHN0YXR1czsKKwlzb2NrbGVuX3QgbGVuOworCXVpbnQz
Ml90IGk7CisJc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7CisKKwlsZW4gPSAoc29ja2xlbl90KXNp
emVvZihzdHJ1Y3Qgc2N0cF9zdGF0dXMpOworCWlmICh1c3JzY3RwX2dldHNvY2tvcHQocGMtPnNv
Y2ssIElQUFJPVE9fU0NUUCwgU0NUUF9TVEFUVVMsICZzdGF0dXMsICZsZW4pIDwgMCkgeworCQlw
ZXJyb3IoImdldHNvY2tvcHQiKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIkFzc29jaWF0aW9u
IHN0YXRlOiAiKTsKKwlzd2l0Y2ggKHN0YXR1cy5zc3RhdF9zdGF0ZSkgeworCWNhc2UgU0NUUF9D
TE9TRUQ6CisJCXByaW50ZigiQ0xPU0VEXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0JPVU5E
OgorCQlwcmludGYoIkJPVU5EXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0xJU1RFTjoKKwkJ
cHJpbnRmKCJMSVNURU5cbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQ09PS0lFX1dBSVQ6CisJ
CXByaW50ZigiQ09PS0lFX1dBSVRcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQ09PS0lFX0VD
SE9FRDoKKwkJcHJpbnRmKCJDT09LSUVfRUNIT0VEXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X0VTVEFCTElTSEVEOgorCQlwcmludGYoIkVTVEFCTElTSEVEXG4iKTsKKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX1NIVVRET1dOX1BFTkRJTkc6CisJCXByaW50ZigiU0hVVERPV05fUEVORElOR1xuIik7
CisJCWJyZWFrOworCWNhc2UgU0NUUF9TSFVURE9XTl9TRU5UOgorCQlwcmludGYoIlNIVVRET1dO
X1NFTlRcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfU0hVVERPV05fUkVDRUlWRUQ6CisJCXBy
aW50ZigiU0hVVERPV05fUkVDRUlWRURcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfU0hVVERP
V05fQUNLX1NFTlQ6CisJCXByaW50ZigiU0hVVERPV05fQUNLX1NFTlRcbiIpOworCQlicmVhazsK
KwlkZWZhdWx0OgorCQlwcmludGYoIlVOS05PV05cbiIpOworCQlicmVhazsKKwl9CisJcHJpbnRm
KCJOdW1iZXIgb2Ygc3RyZWFtcyAoaS9vKSA9ICgldS8ldSlcbiIsCisJICAgICAgIHN0YXR1cy5z
c3RhdF9pbnN0cm1zLCBzdGF0dXMuc3N0YXRfb3V0c3RybXMpOworCWZvciAoaSA9IDA7IGkgPCBO
VU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykgeworCQljaGFubmVsID0gJihwYy0+Y2hhbm5lbHNbaV0p
OworCQlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gREFUQV9DSEFOTkVMX0NMT1NFRCkgeworCQkJY29u
dGludWU7CisJCX0KKwkJcHJpbnRmKCJDaGFubmVsIHdpdGggaWQgPSAldTogc3RhdGUgIiwgY2hh
bm5lbC0+aWQpOworCQlzd2l0Y2ggKGNoYW5uZWwtPnN0YXRlKSB7CisJCWNhc2UgREFUQV9DSEFO
TkVMX0NMT1NFRDoKKwkJCXByaW50ZigiQ0xPU0VEIik7CisJCQlicmVhazsKKwkJY2FzZSBEQVRB
X0NIQU5ORUxfQ09OTkVDVElORzoKKwkJCXByaW50ZigiQ09OTkVDVElORyIpOworCQkJYnJlYWs7
CisJCWNhc2UgREFUQV9DSEFOTkVMX09QRU46CisJCQlwcmludGYoIk9QRU4iKTsKKwkJCWJyZWFr
OworCQljYXNlIERBVEFfQ0hBTk5FTF9DTE9TSU5HOgorCQkJcHJpbnRmKCJDTE9TSU5HIik7CisJ
CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ZigiVU5LTk9XTiglZCkiLCBjaGFubmVsLT5z
dGF0ZSk7CisJCQlicmVhazsKKwkJfQorCQlwcmludGYoIiwgZmxhZ3MgPSAweCUwOHgsIHN0cmVh
bSBpZCAoaW4vb3V0KTogKCV1LyV1KSwgIiwKKwkJICAgICAgIGNoYW5uZWwtPmZsYWdzLAorCQkg
ICAgICAgY2hhbm5lbC0+aV9zdHJlYW0sCisJCSAgICAgICBjaGFubmVsLT5vX3N0cmVhbSk7CisJ
CWlmIChjaGFubmVsLT51bm9yZGVyZWQpIHsKKwkJCXByaW50ZigidW5vcmRlcmVkLCAiKTsKKwkJ
fSBlbHNlIHsKKwkJCXByaW50Zigib3JkZXJlZCwgIik7CisJCX0KKwkJc3dpdGNoIChjaGFubmVs
LT5wcl9wb2xpY3kpIHsKKwkJY2FzZSBTQ1RQX1BSX1NDVFBfTk9ORToKKwkJCXByaW50ZigicmVs
aWFibGUuXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfUFJfU0NUUF9UVEw6CisJCQlwcmlu
dGYoInVucmVsaWFibGUgKHRpbWVvdXQgJXVtcykuXG4iLCBjaGFubmVsLT5wcl92YWx1ZSk7CisJ
CQlicmVhazsKKwkJY2FzZSBTQ1RQX1BSX1NDVFBfUlRYOgorCQkJcHJpbnRmKCJ1bnJlbGlhYmxl
IChtYXguICV1IHJ0eCkuXG4iLCBjaGFubmVsLT5wcl92YWx1ZSk7CisJCQlicmVhazsKKwkJZGVm
YXVsdDoKKwkJCXByaW50ZigidW5rbm93biBwb2xpY3kgJXUuXG4iLCBjaGFubmVsLT5wcl9wb2xp
Y3kpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQKK3JlY2VpdmVfY2Ioc3Ry
dWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwK
KyAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2LCBpbnQg
ZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQoreworCXN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjOwor
CisJcGMgPSAoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqKXVscF9pbmZvOworCisJaWYgKGRhdGEp
IHsKKwkJbG9ja19wZWVyX2Nvbm5lY3Rpb24ocGMpOworCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJ
Q0FUSU9OKSB7CisJCQloYW5kbGVfbm90aWZpY2F0aW9uX3J0Y3dlYihwYywgKHVuaW9uIHNjdHBf
bm90aWZpY2F0aW9uICopZGF0YSwgZGF0YWxlbik7CisJCX0gZWxzZSB7CisJCQloYW5kbGVfbWVz
c2FnZShwYywgZGF0YSwgZGF0YWxlbiwgbnRvaGwocmN2LnJjdl9wcGlkKSwgcmN2LnJjdl9zaWQp
OworCQl9CisJCXVubG9ja19wZWVyX2Nvbm5lY3Rpb24ocGMpOworCX0KKwlyZXR1cm4gKDEpOwor
fQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qgc29ja2V0
ICpzb2NrOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXNvY2tsZW5fdCBhZGRyX2xlbjsK
KwljaGFyIGxpbmVbTElORV9MRU5HVEggKyAxXTsKKwl1bnNpZ25lZCBpbnQgdW5vcmRlcmVkLCBw
b2xpY3ksIHZhbHVlLCBpZCwgc2Vjb25kczsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgY2hh
bm5lbCAqY2hhbm5lbDsKKwljb25zdCBpbnQgb24gPSAxOworCXN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlIGF2OworCXN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OworCXN0cnVjdCBzY3RwX3VkcGVuY2Fw
cyBlbmNhcHM7CisJc3RydWN0IHNjdHBfaW5pdG1zZyBpbml0bXNnOworCXVpbnQxNl90IGV2ZW50
X3R5cGVzW10gPSB7U0NUUF9BU1NPQ19DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAgICAg
ICBTQ1RQX1BFRVJfQUREUl9DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQ
X1JFTU9URV9FUlJPUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0hVVERPV05f
RVZFTlQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FEQVBUQVRJT05fSU5ESUNB
VElPTiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0VORF9GQUlMRURfRVZFTlQs
CisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVCwKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVH07CisJY2hh
ciBhZGRyYnVmW0lORVRfQUREUlNUUkxFTl07CisKKwlpZiAoYXJnYyA+IDEpIHsKKwkJdXNyc2N0
cF9pbml0KGF0b2koYXJndlsxXSksIE5VTEwsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJfSBlbHNl
IHsKKwkJdXNyc2N0cF9pbml0KDk4OTksIE5VTEwsIGRlYnVnX3ByaW50Zl9zdGFjayk7CisJfQor
I2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQ
X0RFQlVHX05PTkUpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xl
KDIpOworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX25vX2NzdW1fb25fbG9vcGJhY2soMCk7CisK
KwlpZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9U
T19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmcGVlcl9jb25uZWN0aW9uKSkgPT0gTlVMTCkg
eworCQlwZXJyb3IoInNvY2tldCIpOworCX0KKwlpbml0X3BlZXJfY29ubmVjdGlvbigmcGVlcl9j
b25uZWN0aW9uKTsKKwlpZiAoYXJnYyA+IDIpIHsKKwkJbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWls
eSA9IEFGX0lORVQ2OworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsK
KwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVNT1RF
X1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9m
KHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7
CisJCX0KKwl9CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFND
VFBfUkVDVlJDVklORk8sICZvbiwgc2l6ZW9mKGludCkpIDwgMCkgeworCQlwZXJyb3IoInNldHNv
Y2tvcHQgU0NUUF9SRUNWUkNWSU5GTyIpOworCX0KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNv
Y2ssIElQUFJPVE9fU0NUUCwgU0NUUF9FWFBMSUNJVF9FT1IsICZvbiwgc2l6ZW9mKGludCkpIDwg
MCkgeworCQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9FWFBMSUNJVF9FT1IiKTsKKwl9CisJLyog
QWxsb3cgcmVzZXR0aW5nIHN0cmVhbXMuICovCisJYXYuYXNzb2NfaWQgPSBTQ1RQX0FMTF9BU1NP
QzsKKwlhdi5hc3NvY192YWx1ZSA9IFNDVFBfRU5BQkxFX1JFU0VUX1NUUkVBTV9SRVEgfCBTQ1RQ
X0VOQUJMRV9DSEFOR0VfQVNTT0NfUkVROworCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywg
SVBQUk9UT19TQ1RQLCBTQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQsICZhdiwgc2l6ZW9mKHN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlKSkgPCAwKSB7CisJCXBlcnJvcigic2V0c29ja29wdCBTQ1RQX0VO
QUJMRV9TVFJFQU1fUkVTRVQiKTsKKwl9CisJLyogRW5hYmxlIHRoZSBldmVudHMgb2YgaW50ZXJl
c3QuICovCisJbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisJZXZlbnQuc2VfYXNz
b2NfaWQgPSBTQ1RQX0FMTF9BU1NPQzsKKwlldmVudC5zZV9vbiA9IDE7CisJZm9yIChpID0gMDsg
aSA8IHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVpbnQxNl90KTsgaSsrKSB7CisJCWV2ZW50
LnNlX3R5cGUgPSBldmVudF90eXBlc1tpXTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2Nr
LCBJUFBST1RPX1NDVFAsIFNDVFBfRVZFTlQsICZldmVudCwgc2l6ZW9mKGV2ZW50KSkgPCAwKSB7
CisJCQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9FVkVOVCIpOworCQl9CisJfQorCW1lbXNldCgm
aW5pdG1zZywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRtc2cpKTsKKwlpbml0bXNnLnNpbml0
X251bV9vc3RyZWFtcyA9IDU7CisJaW5pdG1zZy5zaW5pdF9tYXhfaW5zdHJlYW1zID0gNjU1MzU7
CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfSU5JVE1T
RywgJmluaXRtc2csIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0bXNnKSkgPCAwKSB7CisJCXBlcnJv
cigic2V0c29ja29wdCBTQ1RQX0lOSVRNU0ciKTsKKwl9CisKKwlpZiAoYXJnYyA9PSA1KSB7CisJ
CS8qIG9wZXJhdGluZyBhcyBjbGllbnQgKi8KKwkJbWVtc2V0KCZhZGRyLCAwLCBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luKSk7CisJCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYg
SEFWRV9TSU5fTEVOCisJCWFkZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
OworI2VuZGlmCisJCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbM10sICZhZGRyLnNpbl9h
ZGRyLnNfYWRkcikpeworCQkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBhZGRyZXNzXG4iKTsKKwkJ
CWV4aXQoMSk7CisJCX0KKwkJYWRkci5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndls0XSkpOwor
CQlpZiAodXNyc2N0cF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQkJcGVycm9yKCJjb25uZWN0Iik7CisJ
CX0KKworCQlwcmludGYoIkNvbm5lY3RlZCB0byAlczolZC5cbiIsIGluZXRfbnRvcChBRl9JTkVU
LCAmKGFkZHIuc2luX2FkZHIpLCBhZGRyYnVmLCBJTkVUX0FERFJTVFJMRU4pLCBudG9ocyhhZGRy
LnNpbl9wb3J0KSk7CisJfSBlbHNlIGlmIChhcmdjID09IDQpIHsKKwkJc3RydWN0IHNvY2tldCAq
Y29ubl9zb2NrOworCisJCS8qIG9wZXJhdGluZyBhcyBzZXJ2ZXIgKi8KKwkJbWVtc2V0KCZhZGRy
LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCWFkZHIuc2luX2ZhbWlseSA9IEFG
X0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCWFkZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCWFkZHIuc2luX2FkZHIuc19hZGRyID0gSU5BRERS
X0FOWTsKKwkJYWRkci5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlszXSkpOworCQlpZiAodXNy
c2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpIDwgMCkgeworCQkJcGVycm9yKCJiaW5kIik7CisJCX0KKwkJaWYgKHVzcnNj
dHBfbGlzdGVuKHNvY2ssIDEpIDwgMCkgeworCQkJcGVycm9yKCJsaXN0ZW4iKTsKKwkJfQorCQlh
ZGRyX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCW1lbXNl
dCgmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCQlpZiAoKGNvbm5fc29j
ayA9IHVzcnNjdHBfYWNjZXB0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgJmFkZHJf
bGVuKSkgPT0gTlVMTCkgeworCQkJcGVycm9yKCJhY2NlcHQiKTsKKwkJfQorCQl1c3JzY3RwX2Ns
b3NlKHNvY2spOworCQlzb2NrID0gY29ubl9zb2NrOworCQlwcmludGYoIkNvbm5lY3RlZCB0byAl
czolZC5cbiIsIGluZXRfbnRvcChBRl9JTkVULCAmKGFkZHIuc2luX2FkZHIpLCBhZGRyYnVmLCBJ
TkVUX0FERFJTVFJMRU4pLCBudG9ocyhhZGRyLnNpbl9wb3J0KSk7CisJfSBlbHNlIHsKKwkJcHJp
bnRmKCJVc2FnZTogJXMgbG9jYWxfdWRwX3BvcnQgcmVtb3RlX3VkcF9wb3J0IGxvY2FsX3BvcnQg
d2hlbiBvcGVyYXRpbmcgYXMgc2VydmVyXG4iCisJCSAgICAgICAiICAgICAgICVzIGxvY2FsX3Vk
cF9wb3J0IHJlbW90ZV91ZHBfcG9ydCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCB3aGVuIG9wZXJh
dGluZyBhcyBjbGllbnRcbiIsCisJCSAgICAgICBhcmd2WzBdLCBhcmd2WzBdKTsKKwkJcmV0dXJu
ICgwKTsKKwl9CisKKwlsb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKwlw
ZWVyX2Nvbm5lY3Rpb24uc29jayA9IHNvY2s7CisJdW5sb2NrX3BlZXJfY29ubmVjdGlvbigmcGVl
cl9jb25uZWN0aW9uKTsKKworCWZvciAoOzspIHsKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRl
ZmluZWQoX19NSU5HVzMyX18pCisJCWlmIChnZXRzX3MobGluZSwgTElORV9MRU5HVEgpID09IE5V
TEwpIHsKKyNlbHNlCisJCWlmIChmZ2V0cyhsaW5lLCBMSU5FX0xFTkdUSCwgc3RkaW4pID09IE5V
TEwpIHsKKyNlbmRpZgorCQkJaWYgKHVzcnNjdHBfc2h1dGRvd24oc29jaywgU0hVVF9XUikgPCAw
KSB7CisJCQkJcGVycm9yKCJ1c3JzY3RwX3NodXRkb3duIik7CisJCQl9CisJCQl3aGlsZSAodXNy
c2N0cF9maW5pc2goKSAhPSAwKSB7CisjaWZkZWYgX1dJTjMyCisJCQkJU2xlZXAoMTAwMCk7Cisj
ZWxzZQorCQkJCXNsZWVwKDEpOworI2VuZGlmCisJCQl9CisJCQlicmVhazsKKwkJfQorCQlpZiAo
c3RybmNtcChsaW5lLCAiPyIsIHN0cmxlbigiPyIpKSA9PSAwIHx8CisJCSAgICBzdHJuY21wKGxp
bmUsICJoZWxwIiwgc3RybGVuKCJoZWxwIikpID09IDApIHsKKwkJCXByaW50ZigiQ29tbWFuZHM6
XG4iCisJCQkgICAgICAgIm9wZW4gdW5vcmRlcmVkIHByX3BvbGljeSBwcl92YWx1ZSAtIG9wZW5z
IGEgY2hhbm5lbFxuIgorCQkJICAgICAgICJjbG9zZSBjaGFubmVsIC0gY2xvc2VzIHRoZSBjaGFu
bmVsXG4iCisJCQkgICAgICAgInNlbmQgY2hhbm5lbDpzdHJpbmcgLSBzZW5kcyBzdHJpbmcgdXNp
bmcgY2hhbm5lbFxuIgorCQkJICAgICAgICJzdGF0dXMgLSBwcmludHMgdGhlIHN0YXR1c1xuIgor
CQkJICAgICAgICJzbGVlcCBuIC0gc2xlZXAgZm9yIG4gc2Vjb25kc1xuIgorCQkJICAgICAgICJo
ZWxwIC0gdGhpcyBtZXNzYWdlXG4iKTsKKwkJfSBlbHNlIGlmIChzdHJuY21wKGxpbmUsICJzdGF0
dXMiLCBzdHJsZW4oInN0YXR1cyIpKSA9PSAwKSB7CisJCQlsb2NrX3BlZXJfY29ubmVjdGlvbigm
cGVlcl9jb25uZWN0aW9uKTsKKwkJCXByaW50X3N0YXR1cygmcGVlcl9jb25uZWN0aW9uKTsKKwkJ
CXVubG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7CisJCX0gZWxzZSBpZiAo
c3RybmNtcChsaW5lLCAicXVpdCIsIHN0cmxlbigicXVpdCIpKSA9PSAwKSB7CisJCQlpZiAodXNy
c2N0cF9zaHV0ZG93bihzb2NrLCBTSFVUX1dSKSA8IDApIHsKKwkJCQlwZXJyb3IoInVzcnNjdHBf
c2h1dGRvd24iKTsKKwkJCX0KKwkJCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNp
ZmRlZiBfV0lOMzIKKwkJCQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJCQkJc2xlZXAoMSk7CisjZW5k
aWYKKwkJCX0KKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHNzY2FuZihsaW5lLCAib3BlbiAldSAl
dSAldSIsICZ1bm9yZGVyZWQsICZwb2xpY3ksICZ2YWx1ZSkgPT0gMykgeworCQkJbG9ja19wZWVy
X2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7CisJCQljaGFubmVsID0gb3Blbl9jaGFubmVs
KCZwZWVyX2Nvbm5lY3Rpb24sICh1aW50OF90KXVub3JkZXJlZCwgKHVpbnQxNl90KXBvbGljeSwg
KHVpbnQzMl90KXZhbHVlKTsKKwkJCXVubG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVj
dGlvbik7CisJCQlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCQkJcHJpbnRmKCJDcmVhdGluZyBj
aGFubmVsIGZhaWxlZC5cbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGYoIkNoYW5uZWwgd2l0
aCBpZCAldSBjcmVhdGVkLlxuIiwgY2hhbm5lbC0+aWQpOworCQkJfQorCQl9IGVsc2UgaWYgKHNz
Y2FuZihsaW5lLCAiY2xvc2UgJXUiLCAmaWQpID09IDEpIHsKKwkJCWlmIChpZCA8IE5VTUJFUl9P
Rl9DSEFOTkVMUykgeworCQkJCWxvY2tfcGVlcl9jb25uZWN0aW9uKCZwZWVyX2Nvbm5lY3Rpb24p
OworCQkJCWNsb3NlX2NoYW5uZWwoJnBlZXJfY29ubmVjdGlvbiwgJnBlZXJfY29ubmVjdGlvbi5j
aGFubmVsc1tpZF0pOworCQkJCXVubG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlv
bik7CisJCQl9CisJCX0gZWxzZSBpZiAoc3NjYW5mKGxpbmUsICJzZW5kICV1IiwgJmlkKSA9PSAx
KSB7CisJCQlpZiAoaWQgPCBOVU1CRVJfT0ZfQ0hBTk5FTFMpIHsKKwkJCQljaGFyICptc2c7CisK
KwkJCQltc2cgPSBzdHJzdHIobGluZSwgIjoiKTsKKwkJCQlpZiAobXNnKSB7CisJCQkJCW1zZysr
OworCQkJCQlsb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKyNpZmRlZiBf
V0lOMzIKKwkJCQkJaWYgKHNlbmRfdXNlcl9tZXNzYWdlKCZwZWVyX2Nvbm5lY3Rpb24sICZwZWVy
X2Nvbm5lY3Rpb24uY2hhbm5lbHNbaWRdLCBtc2csIHN0cmxlbihtc2cpKSkgeworI2Vsc2UKKwkJ
CQkJaWYgKHNlbmRfdXNlcl9tZXNzYWdlKCZwZWVyX2Nvbm5lY3Rpb24sICZwZWVyX2Nvbm5lY3Rp
b24uY2hhbm5lbHNbaWRdLCBtc2csIHN0cmxlbihtc2cpIC0gMSkpIHsKKyNlbmRpZgorCQkJCQkJ
cHJpbnRmKCJNZXNzYWdlIHNlbnQuXG4iKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXByaW50Zigi
TWVzc2FnZSBzZW5kaW5nIGZhaWxlZC5cbiIpOworCQkJCQl9CisJCQkJCXVubG9ja19wZWVyX2Nv
bm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKHNz
Y2FuZihsaW5lLCAic2xlZXAgJXUiLCAmc2Vjb25kcykgPT0gMSkgeworI2lmZGVmIF9XSU4zMgor
CQkJU2xlZXAoc2Vjb25kcyAqIDEwMDApOworI2Vsc2UKKwkJCXNsZWVwKHNlY29uZHMpOworI2Vu
ZGlmCisJCX0gZWxzZSB7CisJCQlwcmludGYoIlVua25vd24gY29tbWFuZDogJXMiLCBsaW5lKTsK
KwkJfQorCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMv
c3RfY2xpZW50LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9zdF9jbGllbnQuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
ZWY2ZDUyNzI0Yjg4Y2QyNmYwMjQxZWExODBhNTcxMzY0MjFmZWExCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvcHJvZ3JhbXMvc3RfY2xpZW50LmMKQEAgLTAsMCArMSwzOTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTUgQ29saW4gQ2F1Z2hpZQorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgRmVs
aXggV2VpbnJhbmsKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisKKy8qCisgKiBVc2FnZTogc3RfY2xpZW50IGxvY2FsX2FkZHIgbG9j
YWxfcG9ydCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCByZW1vdGVfc2N0cF9wb3J0CisgKi8KKwor
I2lmZGVmIF9XSU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZm5kZWYg
X1dJTjMyCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUg
PGVycm5vLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2Vs
c2UKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYK
KyNpbmNsdWRlIDx1c3JzY3RwLmg+CisjaW5jbHVkZSAicHJvZ3JhbXNfaGVscGVyLmgiCisKKyNk
ZWZpbmUgTUFYX1BBQ0tFVF9TSVpFICgxPDwxNikKKyNkZWZpbmUgQlVGRkVSX1NJWkUgODAKKyNk
ZWZpbmUgRElTQ0FSRF9QUElEIDM5CisjZGVmaW5lIEhUVFBfUFBJRCA2MworCisjZGVmaW5lIFRJ
TUVSX0lOVEVSVkFMX01TRUNTIDEwCisKK3N0YXRpYyBpbnQgY29ubmVjdGluZyA9IDA7CitzdGF0
aWMgaW50IGZpbmlzaCA9IDA7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2dldF9taWxsaXNlY29u
ZHNfY291bnQodm9pZCkKK3sKKyNpZmRlZiBfV0lOMzIKKwkvLyBvYnRhaW4gbnVtYmVyIG9mIG1p
bGxpc2Vjb25kcyBzaW5jZSBzeXN0ZW0gc3RhcnRlZAorCXJldHVybiBHZXRUaWNrQ291bnQoKTsK
KyNlbHNlCisJc3RydWN0IHRpbWV2YWwgdHY7CisJdW5zaWduZWQgaW50IG1pbGxpc2Vjb25kczsK
KworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOyAvKiBnZXQgY3VycmVudCB0aW1lICovCisJbWls
bGlzZWNvbmRzID0gdHYudHZfc2VjKjEwMDBMTCArIHR2LnR2X3VzZWMvMTAwMDsgLyogY2FsY3Vs
YXRlIG1pbGxpc2Vjb25kcyAqLworCXJldHVybiAobWlsbGlzZWNvbmRzKTsKKyNlbmRpZgorfQor
CitzdGF0aWMgdm9pZAorI2lmZGVmIF9XSU4zMgoraGFuZGxlX2V2ZW50cyhTT0NLRVQgc29jaywg
c3RydWN0IHNvY2tldCogcywgdm9pZCogc2Nvbm5fYWRkcikKKyNlbHNlCitoYW5kbGVfZXZlbnRz
KGludCBzb2NrLCBzdHJ1Y3Qgc29ja2V0KiBzLCB2b2lkKiBzY29ubl9hZGRyKQorI2VuZGlmCit7
CisJY2hhciAqZHVtcF9idWY7CisJc3NpemVfdCBsZW5ndGg7CisJY2hhciBidWZbTUFYX1BBQ0tF
VF9TSVpFXTsKKworCWZkX3NldCByZmRzOworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJdW5zaWdu
ZWQgbmV4dF9maXJlX3RpbWUgPSBnZXRfbWlsbGlzZWNvbmRzX2NvdW50KCk7CisJdW5zaWduZWQg
bGFzdF9maXJlX3RpbWUgPSBuZXh0X2ZpcmVfdGltZTsKKwl1bnNpZ25lZCBub3cgPSBnZXRfbWls
bGlzZWNvbmRzX2NvdW50KCk7CisJaW50IHdhaXRfdGltZTsKKworCXdoaWxlICghZmluaXNoKSB7
CisJCWlmICgoaW50KSAobm93IC0gbmV4dF9maXJlX3RpbWUpID4gMCkgeworCQkJdXNyc2N0cF9o
YW5kbGVfdGltZXJzKG5vdyAtIGxhc3RfZmlyZV90aW1lKTsKKwkJCWxhc3RfZmlyZV90aW1lID0g
bm93OworCQkJbmV4dF9maXJlX3RpbWUgPSBub3cgKyBUSU1FUl9JTlRFUlZBTF9NU0VDUzsKKwkJ
fQorCisJCXdhaXRfdGltZSA9IG5leHRfZmlyZV90aW1lIC0gbm93OworCQl0di50dl9zZWMgPSB3
YWl0X3RpbWUgLyAxMDAwOworCQl0di50dl91c2VjID0gKHdhaXRfdGltZSAlIDEwMDApICogMTAw
MDsKKworCQlGRF9aRVJPKCZyZmRzKTsKKwkJRkRfU0VUKHNvY2ssICZyZmRzKTsKKworI2lmZGVm
IF9XSU4zMgorCQlzZWxlY3QoMCAvKiBpZ25vcmVkICovLCAmcmZkcywgTlVMTCwgTlVMTCwgJnR2
KTsKKyNlbHNlCisJCXNlbGVjdChzb2NrICsgMSwgJnJmZHMsIE5VTEwsIE5VTEwsICZ0dik7Cisj
ZW5kaWYKKworCQlpZiAoRkRfSVNTRVQoc29jaywgJnJmZHMpKSB7CisJCQlsZW5ndGggPSByZWN2
KHNvY2ssIGJ1ZiwgTUFYX1BBQ0tFVF9TSVpFLCAwKTsKKworCQkJaWYgKGxlbmd0aCA+IDApIHsK
KwkJCQlpZiAoKGR1bXBfYnVmID0gdXNyc2N0cF9kdW1wcGFja2V0KGJ1ZiwgKHNpemVfdClsZW5n
dGgsIFNDVFBfRFVNUF9JTkJPVU5EKSkgIT0gTlVMTCkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwg
IiVzIiwgZHVtcF9idWYpOworCQkJCQl1c3JzY3RwX2ZyZWVkdW1wYnVmZmVyKGR1bXBfYnVmKTsK
KwkJCQl9CisJCQkJdXNyc2N0cF9jb25uaW5wdXQoc2Nvbm5fYWRkciwgYnVmLCAoc2l6ZV90KWxl
bmd0aCwgMCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitvbl9jb25uZWN0KHN0
cnVjdCBzb2NrZXQqIHMpCit7CisJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOworCWNoYXIg
YnVmZmVyW0JVRkZFUl9TSVpFXTsKKwlpbnQgYnVmZmVybGVuOworCisJLyogbWVtc2V0KGJ1ZmZl
ciwgJ0EnLCBCVUZGRVJfU0laRSk7ICovCisJLyogYnVmZmVybGVuID0gQlVGRkVSX1NJWkU7ICov
CisJYnVmZmVybGVuID0gc25wcmludGYoYnVmZmVyLCBCVUZGRVJfU0laRSwgIkdFVCAvIEhUVFAv
MS4wXHJcblVzZXItYWdlbnQ6IGxpYnVzcnNjdHBcclxuQ29ubmVjdGlvbjogY2xvc2VcclxuXHJc
biIpOworCWlmIChidWZmZXJsZW4gPCAwKSB7CisJCXJldHVybjsKKwl9CisJc25kaW5mby5zbmRf
c2lkID0gMDsKKwlzbmRpbmZvLnNuZF9mbGFncyA9IDA7CisJc25kaW5mby5zbmRfcHBpZCA9IGh0
b25sKERJU0NBUkRfUFBJRCk7CisJc25kaW5mby5zbmRfY29udGV4dCA9IDA7CisJc25kaW5mby5z
bmRfYXNzb2NfaWQgPSAwOworCWlmICh1c3JzY3RwX3NlbmR2KHMsIGJ1ZmZlciwgYnVmZmVybGVu
LCBOVUxMLCAwLCAodm9pZCAqKSZzbmRpbmZvLAorCSAgICAgICAgICAgICAgICAgIChzb2NrbGVu
X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwg
MCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitv
bl9zb2NrZXRfcmVhZGFibGUoc3RydWN0IHNvY2tldCogcykgeworCWNoYXIgYnVmZmVyW0JVRkZF
Ul9TSVpFXTsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyOworCXNvY2tsZW5fdCBmcm9tbGVu
ID0gc2l6ZW9mKGFkZHIpOworCXN0cnVjdCBzY3RwX3JjdmluZm8gcmN2X2luZm87CisJc29ja2xl
bl90IGluZm9sZW4gPSBzaXplb2YocmN2X2luZm8pOworCXVuc2lnbmVkIGludCBpbmZvdHlwZSA9
IDA7CisJaW50IGZsYWdzID0gMDsKKwlzc2l6ZV90IHJldHZhbDsKKworCS8qIEtlZXAgcmVhZGlu
ZyB1bnRpbCB0aGVyZSBpcyBubyBtb3JlIGRhdGEgKi8KKwlmb3IgKDs7KSB7CisJCXJldHZhbCA9
IHVzcnNjdHBfcmVjdnYocywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgKHN0cnVjdCBzb2NrYWRk
ciopICZhZGRyLAorCQkgICAgICAgICAgICAgICAgICAgICAgICZmcm9tbGVuLCAmcmN2X2luZm8s
ICZpbmZvbGVuLCAmaW5mb3R5cGUsICZmbGFncyk7CisKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJ
CWlmIChlcnJubyAhPSBFV09VTERCTE9DSykgeworCQkJCXBlcnJvcigidXNyc2N0cF9yZWN2diIp
OworCQkJCWZpbmlzaCA9IDE7CisJCQl9CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAocmV0dmFs
ID09IDApIHsKKwkJCXByaW50Zigic29ja2V0IHdhcyBkaXNjb25uZWN0ZWRcbiIpOworCQkJZmlu
aXNoID0gMTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJ
T04pIHsKKwkJCXByaW50ZigiTm90aWZpY2F0aW9uIG9mIGxlbmd0aCAlZCByZWNlaXZlZC5cbiIs
IChpbnQpcmV0dmFsKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiTXNnIG9mIGxlbmd0aCAlZCBy
ZWNlaXZlZCB2aWEgJXA6JXUgb24gc3RyZWFtICVkIHdpdGggU1NOICV1IGFuZCBUU04gJXUsIFBQ
SUQgJXUsIGNvbnRleHQgJXUuXG4iLAorCQkJICAgICAgIChpbnQpcmV0dmFsLAorCQkJICAgICAg
IGFkZHIuc2Nvbm4uc2Nvbm5fYWRkciwKKwkJCSAgICAgICBudG9ocyhhZGRyLnNjb25uLnNjb25u
X3BvcnQpLAorCQkJICAgICAgIHJjdl9pbmZvLnJjdl9zaWQsCisJCQkgICAgICAgcmN2X2luZm8u
cmN2X3NzbiwKKwkJCSAgICAgICByY3ZfaW5mby5yY3ZfdHNuLAorCQkJICAgICAgICh1aW50MzJf
dCludG9obChyY3ZfaW5mby5yY3ZfcHBpZCksCisJCQkgICAgICAgcmN2X2luZm8ucmN2X2NvbnRl
eHQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3VwY2FsbChzdHJ1Y3Qgc29j
a2V0ICpzLCB2b2lkICphcmcsIGludCBmbGFncykKK3sKKwlpbnQgZXZlbnRzID0gdXNyc2N0cF9n
ZXRfZXZlbnRzKHMpOworCisJaWYgKGNvbm5lY3RpbmcpIHsKKwkJaWYgKGV2ZW50cyAmIFNDVFBf
RVZFTlRfRVJST1IpIHsKKwkJCWNvbm5lY3RpbmcgPSAwOworCQkJZmluaXNoID0gMTsKKwkJfSBl
bHNlIGlmIChldmVudHMgJiBTQ1RQX0VWRU5UX1dSSVRFKSB7CisJCQljb25uZWN0aW5nID0gMDsK
KwkJCW9uX2Nvbm5lY3Qocyk7CisJCX0KKworCQlyZXR1cm47CisJfQorCisJaWYgKGV2ZW50cyAm
IFNDVFBfRVZFTlRfUkVBRCkgeworCQlvbl9zb2NrZXRfcmVhZGFibGUocyk7CisJfQorfQorCitz
dGF0aWMgaW50Citjb25uX291dHB1dCh2b2lkICphZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW5n
dGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZikKK3sKKwljaGFyICpkdW1wX2J1ZjsKKyNp
ZmRlZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKwor
I2lmZGVmIF9XSU4zMgorCWZkcCA9IChTT0NLRVQgKilhZGRyOworI2Vsc2UKKwlmZHAgPSAoaW50
ICopYWRkcjsKKyNlbmRpZgorCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVm
LCBsZW5ndGgsIFNDVFBfRFVNUF9PVVRCT1VORCkpICE9IE5VTEwpIHsKKwkJZnByaW50ZihzdGRl
cnIsICIlcyIsIGR1bXBfYnVmKTsKKwkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1Zik7
CisJfQorI2lmZGVmIF9XSU4zMgorCWlmIChzZW5kKCpmZHAsIGJ1ZiwgKGludClsZW5ndGgsIDAp
ID09IFNPQ0tFVF9FUlJPUikgeworCQlyZXR1cm4gKFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNl
CisJaWYgKHNlbmQoKmZkcCwgYnVmLCBsZW5ndGgsIDApIDwgMCkgeworCQlyZXR1cm4gKGVycm5v
KTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCisvKiBVc2FnZTog
c3RfY2xpZW50IGxvY2FsX2FkZHIgbG9jYWxfcG9ydCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBy
ZW1vdGVfc2N0cF9wb3J0ICovCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sK
KwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworCXN0cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOwor
I2lmZGVmIF9XSU4zMgorCVNPQ0tFVCBmZDsKKyNlbHNlCisJaW50IGZkOworI2VuZGlmCisJc3Ry
dWN0IHNvY2tldCAqczsKKwlpbnQgcmV0dmFsOworI2lmZGVmIF9XSU4zMgorCVdTQURBVEEgd3Nh
RGF0YTsKKyNlbmRpZgorCWNvbnN0IGludCBvbiA9IDE7CisKKwlpZiAoYXJnYyA8IDYpIHsKKwkJ
cHJpbnRmKCJVc2FnZTogc3RfY2xpZW50IGxvY2FsX2FkZHIgbG9jYWxfcG9ydCByZW1vdGVfYWRk
ciByZW1vdGVfcG9ydCByZW1vdGVfc2N0cF9wb3J0XG4iKTsKKwkJcmV0dXJuICgtMSk7CisJfQor
CisjaWZkZWYgX1dJTjMyCisJaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwyKSwgJndzYURhdGEp
ICE9IDApIHsKKwkJcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxlZFxuIik7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisjZW5kaWYKKwl1c3JzY3RwX2luaXRfbm90aHJlYWRzKDAsIGNvbm5fb3V0
cHV0LCBkZWJ1Z19wcmludGZfc3RhY2spOworCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBVRFAgc29j
a2V0ICovCisjaWZkZWYgX1dJTjMyCisJaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RH
UkFNLCBJUFBST1RPX1VEUCkpID09IElOVkFMSURfU09DS0VUKSB7CisJCXByaW50Zigic29ja2V0
KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQo
RVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09D
S19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKKwkJcGVycm9yKCJzb2NrZXQiKTsKKwkJZXhp
dChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luKSk7CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhB
VkVfU0lOX0xFTgorCXNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Cisj
ZW5kaWYKKwlzaW4uc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwlpZiAoIWluZXRf
cHRvbihBRl9JTkVULCBhcmd2WzFdLCAmc2luLnNpbl9hZGRyLnNfYWRkcikpeworCQlwcmludGYo
ImVycm9yOiBpbnZhbGlkIGFkZHJlc3NcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQor
I2lmZGVmIF9XSU4zMgorCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlwcmludGYoImJp
bmQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhp
dChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigi
YmluZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJbWVtc2V0KCZzaW4s
IDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlzaW4uc2luX2ZhbWlseSA9IEFGX0lO
RVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKTsKKyNlbmRpZgorCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndls0XSkp
OworCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbM10sICZzaW4uc2luX2FkZHIuc19hZGRy
KSl7CisJCXByaW50ZigiZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisjaWZkZWYgX1dJTjMyCisJaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9S
KSB7CisJCXByaW50ZigiY29ubmVjdCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0
TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoY29u
bmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pKSA8IDApIHsKKwkJcGVycm9yKCJjb25uZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsK
Kwl9CisjZW5kaWYKKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
ZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsKKyNlbmRpZgorCXVzcnNjdHBfc3lzY3RsX3NldF9z
Y3RwX2Vjbl9lbmFibGUoMCk7CisJdXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKCh2b2lkICopJmZk
KTsKKworCWlmICgocyA9IHVzcnNjdHBfc29ja2V0KEFGX0NPTk4sIFNPQ0tfU1RSRUFNLCBJUFBS
T1RPX1NDVFAsIE5VTEwsIE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNy
c2N0cF9zb2NrZXQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXVzcnNjdHBfc2V0
c29ja29wdChzLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVDVlJDVklORk8sICZvbiwgc2l6ZW9mKGlu
dCkpOworCXVzcnNjdHBfc2V0X25vbl9ibG9ja2luZyhzLCAxKTsKKwl1c3JzY3RwX3NldF91cGNh
bGwocywgaGFuZGxlX3VwY2FsbCwgTlVMTCk7CisKKwltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOwor
I2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3BvcnQgPSBodG9ucygwKTsKKwlz
Y29ubi5zY29ubl9hZGRyID0gTlVMTDsKKwlpZiAodXNyc2N0cF9iaW5kKHMsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkgeworCQlw
ZXJyb3IoInVzcnNjdHBfYmluZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJbWVt
c2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nv
bm5fZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25u
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlzY29ubi5zY29u
bl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzVdKSk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZDsK
KworCXJldHZhbCA9IHVzcnNjdHBfY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25u
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKworCWlmIChyZXR2YWwgPCAwICYmIGVy
cm5vICE9IEVXT1VMREJMT0NLICYmIGVycm5vICE9IEVJTlBST0dSRVNTKSB7CisJCXBlcnJvcigi
dXNyc2N0cF9jb25uZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwljb25uZWN0
aW5nID0gMTsKKworCWhhbmRsZV9ldmVudHMoZmQsIHMsIHNjb25uLnNjb25uX2FkZHIpOworCisJ
cmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Rlc3RfbGlibWdt
dC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdGVzdF9saWJtZ210LmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGU1ZTBm
MDJhODBkZmJkOWQxMjQ0NzVhMjY1ZmI2YWQ0MzgzMzRmNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3Byb2dyYW1zL3Rlc3RfbGlibWdtdC5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiAgICAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfV0lO
MzIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgInVzcnNjdHAuaCIKKwor
aW50CittYWluKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkr
KykgeworCQl1c3JzY3RwX2luaXQoMCwgTlVMTCwgTlVMTCk7CisJCXdoaWxlICh1c3JzY3RwX2Zp
bmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJ
CXNsZWVwKDEpOworI2VuZGlmCisJCX0KKwl9CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3Byb2dyYW1zL3Rlc3RfdGltZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Rlc3Rf
dGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MGE5M2M4NDVhNWE0MDkzZDY1ZWY5Zjc0YjkzMDZkYzc2Zjcy
OTg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdGVzdF90aW1lci5jCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWljaGFlbCBUdWV4ZW4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVD
VCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
UFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg
PHN0ZGFyZy5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgor
I2luY2x1ZGUgPHVzcnNjdHAuaD4KKworaW50CittYWluKHZvaWQpIAoreworCXVuc2lnbmVkIGlu
dCBpOworCisJdXNyc2N0cF9pbml0KDAsIE5VTEwsIE5VTEwpOworCXByaW50ZigiRW50ZXJpbmcg
dGhlIGxvb3BcbiIpOworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDAwOyBpKyspIHsKKwkJdXNyc2N0
cF9yZWdpc3Rlcl9hZGRyZXNzKE5VTEwpOworCQl1c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVzcyhO
VUxMKTsKKwl9CisJcHJpbnRmKCJFeGl0ZWQgdGhlIGxvb3BcbiIpOworCXdoaWxlICh1c3JzY3Rw
X2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMTAwMCk7CisjZWxzZQor
CQlzbGVlcCgxKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvcHJvZ3JhbXMvdHNjdHAuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3RzY3RwLmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTk1NTg2ODNkYjBhNTkyZTAxMDQ0N2EyODlkYTNjNDQ3YjA0MmNhNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3RzY3RwLmMKQEAgLTAsMCArMSw5NTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTMgSXJlbmUgUnVlbmdlbGVyCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT
Q0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CisjaWZkZWYgX1dJTjMyCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0
Y3BpcC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGNydGRiZy5oPgorI2luY2x1
ZGUgPHN5cy90aW1lYi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPHN5cy90
aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlm
CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRl
IDxlcnJuby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBMSU5VWAorI2luY2x1ZGUgPGdl
dG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgorI2luY2x1ZGUgInByb2dyYW1z
X2hlbHBlci5oIgorCisvKiBnbG9iYWwgZm9yIHRoZSBzZW5kIGNhbGxiYWNrLCBidXQgdXNlZCBp
biBrZXJuZWwgdmVyc2lvbiBhcyB3ZWxsICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1iZXJf
b2ZfbWVzc2FnZXM7CitzdGF0aWMgY2hhciAqYnVmZmVyOworc3RhdGljIGludCBsZW5ndGg7Citz
dGF0aWMgc3RydWN0IHNvY2thZGRyX2luIHJlbW90ZV9hZGRyOworc3RhdGljIGludCB1bm9yZGVy
ZWQ7Cit1aW50MzJfdCBvcHR2YWwgPSAxOworc3RydWN0IHNvY2tldCAqcHNvY2sgPSBOVUxMOwor
CitzdGF0aWMgc3RydWN0IHRpbWV2YWwgc3RhcnRfdGltZTsKK3Vuc2lnbmVkIGludCBydW50aW1l
ID0gMDsKK3N0YXRpYyBpbnQgcG9saWN5ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGltZXRv
bGl2ZSA9IDA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjYl9tZXNzYWdlcyA9IDA7CitzdGF0aWMg
dW5zaWduZWQgbG9uZyBsb25nIGNiX2ZpcnN0X2xlbmd0aCA9IDA7CitzdGF0aWMgdW5zaWduZWQg
bG9uZyBsb25nIGNiX3N1bSA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHVzZV9jYiA9IDA7CisK
KyNpZmRlZiBfV0lOMzIKK3N0YXRpYyB2b2lkCitnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwg
KnR2LCB2b2lkICppZ25vcmUpCit7CisJRklMRVRJTUUgZmlsZXRpbWU7CisJVUxBUkdFX0lOVEVH
RVIgdWxhcmdlOworCisJR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZpbGV0aW1lKTsKKwl1bGFy
Z2UuTG93UGFydCA9IGZpbGV0aW1lLmR3TG93RGF0ZVRpbWU7CisJdWxhcmdlLkhpZ2hQYXJ0ID0g
ZmlsZXRpbWUuZHdIaWdoRGF0ZVRpbWU7CisJLyogQ2hhbmdlIGJhc2UgZnJvbSBKYW4gMSAxNjAx
IDAwOjAwOjAwIHRvIEphbiAxIDE5NzAgMDA6MDA6MDAgKi8KKyNpZiBkZWZpbmVkKF9fTUlOR1cz
Ml9fKQorCXVsYXJnZS5RdWFkUGFydCAtPSAxMTY0NDQ3MzYwMDAwMDAwMDBVTEw7CisjZWxzZQor
CXVsYXJnZS5RdWFkUGFydCAtPSAxMTY0NDQ3MzYwMDAwMDAwMDBVSTY0OworI2VuZGlmCisJLyoK
KwkgKiB1bGFyZ2UuUXVhZFBhcnQgaXMgbm93IHRoZSBudW1iZXIgb2YgMTAwLW5hbm9zZWNvbmQg
aW50ZXJ2YWxzCisJICogc2luY2UgSmFuIDEgMTk3MCAwMDowMDowMC4KKwkgKi8KKyNpZiBkZWZp
bmVkKF9fTUlOR1czMl9fKQorCXR2LT50dl9zZWMgPSAobG9uZykodWxhcmdlLlF1YWRQYXJ0IC8g
MTAwMDAwMDBVTEwpOworCXR2LT50dl91c2VjID0gKGxvbmcpKCh1bGFyZ2UuUXVhZFBhcnQgJSAx
MDAwMDAwMFVMTCkgLyAxMFVMTCk7CisjZWxzZQorCXR2LT50dl9zZWMgPSAobG9uZykodWxhcmdl
LlF1YWRQYXJ0IC8gMTAwMDAwMDBVSTY0KTsKKwl0di0+dHZfdXNlYyA9IChsb25nKSgodWxhcmdl
LlF1YWRQYXJ0ICUgMTAwMDAwMDBVSTY0KSAvIDEwVUk2NCk7CisjZW5kaWYKK30KKyNlbmRpZgor
CisKK2NoYXIgVXNhZ2VbXSA9CisiVXNhZ2U6IHRzY3RwIFtvcHRpb25zXSBbYWRkcmVzc11cbiIK
KyJPcHRpb25zOlxuIgorIiAgICAgICAgLWEgICAgICAgICAgICAgc2V0IGFkYXB0YXRpb24gbGF5
ZXIgaW5kaWNhdGlvblxuIgorIiAgICAgICAgLWMgICAgICAgICAgICAgdXNlIGNhbGxiYWNrIEFQ
SVxuIgorIiAgICAgICAgLWQgICAgICAgICAgICAgdGltZSBpbiBzZWNvbmRzIGFmdGVyIHdoaWNo
IGEgc3RhdHVzIHVwZGF0ZSBpcyBwcmludGVkXG4iCisiICAgICAgICAtRCAgICAgICAgICAgICB0
dXJucyBOYWdsZSBvZmZcbiIKKyIgICAgICAgIC1FICAgICAgICAgICAgIGxvY2FsIFVEUCBlbmNh
cHN1bGF0aW9uIHBvcnQgKGRlZmF1bHQgOTg5OSlcbiIKKyIgICAgICAgIC1mICAgICAgICAgICAg
IGZyYWdtZW50YXRpb24gcG9pbnRcbiIKKyIgICAgICAgIC1sICAgICAgICAgICAgIG1lc3NhZ2Ug
bGVuZ3RoXG4iCisiICAgICAgICAtTCAgICAgICAgICAgICBiaW5kIHRvIGxvY2FsIElQIChkZWZh
dWx0IElOQUREUl9BTlkpXG4iCisiICAgICAgICAtbiAgICAgICAgICAgICBudW1iZXIgb2YgbWVz
c2FnZXMgc2VudCAoMCBtZWFucyBpbmZpbml0ZSkvcmVjZWl2ZWRcbiIKKyIgICAgICAgIC1wICAg
ICAgICAgICAgIHBvcnQgbnVtYmVyXG4iCisiICAgICAgICAtUCAgICAgICAgICAgICBwYXJ0aWFs
IHJlbGlhYmlsaXR5IHBvbGljeSB0byB1c2UgKDA9bm9uZSAoZGVmYXVsdCksIDE9dHRsLCAyPXJ0
eCwgMz1idWYpXG4iCisiICAgICAgICAtUiAgICAgICAgICAgICBzb2NrZXQgcmVjdiBidWZmZXJc
biIKKyIgICAgICAgIC1TICAgICAgICAgICAgIHNvY2tldCBzZW5kIGJ1ZmZlclxuIgorIiAgICAg
ICAgLXQgICAgICAgICAgICAgYmFzZWQgb24gLVAgdGhlIHRpbWUgdG8gbGl2ZSwgbnVtYmVyIG9m
IHJldHJhbnNtaXNzaW9ucywgb3IgcHJpb3JpdHkgZm9yIG1lc3NhZ2VzXG4iCisiICAgICAgICAt
VCAgICAgICAgICAgICB0aW1lIHRvIHNlbmQgbWVzc2FnZXNcbiIKKyIgICAgICAgIC11ICAgICAg
ICAgICAgIHVzZSB1bm9yZGVyZWQgdXNlciBtZXNzYWdlc1xuIgorIiAgICAgICAgLVUgICAgICAg
ICAgICAgcmVtb3RlIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnRcbiIKKyIgICAgICAgIC12ICAgICAg
ICAgICAgIHZlcmJvc2VcbiIKKyIgICAgICAgIC1WICAgICAgICAgICAgIHZlcnkgdmVyYm9zZVxu
IgorOworCisjZGVmaW5lIERFRkFVTFRfTEVOR1RIICAgICAgICAgICAgIDEwMjQKKyNkZWZpbmUg
REVGQVVMVF9OVU1CRVJfT0ZfTUVTU0FHRVMgMTAyNAorI2RlZmluZSBERUZBVUxUX1BPUlQgICAg
ICAgICAgICAgICA1MDAxCisjZGVmaW5lIEJVRkZFUlNJWkUgICAgICAgICAgICAgICAgICgxPDwx
NikKKworc3RhdGljIGludCB2ZXJib3NlLCB2ZXJ5X3ZlcmJvc2U7CitzdGF0aWMgdW5zaWduZWQg
aW50IGRvbmU7CitzdGF0aWMgdW5zaWduZWQgaW50IHJvdW5kX2R1cmF0aW9uOworCit2b2lkIHN0
b3Bfc2VuZGVyKGludCBzaWcpCit7CisJZG9uZSA9IDE7Cit9CisKK3N0YXRpYyB0aW1lX3QgY2Fs
Y19yb3VuZF90aW1lb3V0KHN0cnVjdCB0aW1ldmFsIHJvdW5kX3N0YXJ0KQoreworCXRpbWVfdCBy
b3VuZF90aW1lb3V0ID0gcm91bmRfc3RhcnQudHZfc2VjICsgcm91bmRfZHVyYXRpb247CisJaWYg
KHJvdW5kX3N0YXJ0LnR2X3VzZWMgPj0gNTAwMDAwKSB7CisJCXJvdW5kX3RpbWVvdXQrKzsKKwl9
CisJcmV0dXJuIHJvdW5kX3RpbWVvdXQ7Cit9CisKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBEV09S
RCBXSU5BUEkKKyNlbHNlCitzdGF0aWMgdm9pZCAqCisjZW5kaWYKK2hhbmRsZV9jb25uZWN0aW9u
KHZvaWQgKmFyZykKK3sKKwlzc2l6ZV90IG47CisJY2hhciAqYnVmOworCisjaWYgIWRlZmluZWQo
X1dJTjMyKQorCXB0aHJlYWRfdCB0aWQ7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0ICpjb25uX3Nv
Y2s7CisJc3RydWN0IHRpbWV2YWwgdGltZV9zdGFydCwgdGltZV9ub3csIHRpbWVfZGlmZjsKKwlk
b3VibGUgc2Vjb25kczsKKwl1bnNpZ25lZCBsb25nIHJlY3ZfY2FsbHMgPSAwOworCXVuc2lnbmVk
IGxvbmcgbm90aWZpY2F0aW9ucyA9IDA7CisJaW50IGZsYWdzOworCXN0cnVjdCBzb2NrYWRkcl9p
biBhZGRyOworCXNvY2tsZW5fdCBsZW47CisJdW5pb24gc2N0cF9ub3RpZmljYXRpb24gKnNucDsK
KwlzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgKnNwYzsKKwlzdHJ1Y3QgdGltZXZhbCBub3RlX3Rp
bWU7CisJdW5zaWduZWQgaW50IGluZm90eXBlOworCXN0cnVjdCBzY3RwX3JlY3Z2X3JuIHJuOwor
CXNvY2tsZW5fdCBpbmZvbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3JuKTsKKwl1bnNp
Z25lZCBsb25nIG1lc3NhZ2VzID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZmlyc3RfbGVuZ3Ro
ID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3VtID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcg
cm91bmRfYnl0ZXMgPSAwOworCXN0cnVjdCB0aW1ldmFsIHJvdW5kX3N0YXJ0ID0gKHN0cnVjdCB0
aW1ldmFsKXswfTsKKwl0aW1lX3Qgcm91bmRfdGltZW91dCA9IDA7CisKKwljb25uX3NvY2sgPSAq
KHN0cnVjdCBzb2NrZXQgKiopYXJnOworCisjaWYgIWRlZmluZWQoX1dJTjMyKQorCXRpZCA9IHB0
aHJlYWRfc2VsZigpOworCXB0aHJlYWRfZGV0YWNoKHRpZCk7CisjZW5kaWYKKworCWJ1ZiA9IG1h
bGxvYyhCVUZGRVJTSVpFKTsKKwlmbGFncyA9IDA7CisJbGVuID0gKHNvY2tsZW5fdClzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKTsKKwlpbmZvdHlwZSA9IDA7CisJbWVtc2V0KCZybiwgMCwgc2l6
ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3JuKSk7CisJbiA9IHVzcnNjdHBfcmVjdnYoY29ubl9zb2Nr
LCBidWYsIEJVRkZFUlNJWkUsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsICZsZW4sICh2b2lk
ICopJnJuLAorCSAgICAgICAgICAgICAgICAgJmluZm9sZW4sICZpbmZvdHlwZSwgJmZsYWdzKTsK
KworCWdldHRpbWVvZmRheSgmdGltZV9zdGFydCwgTlVMTCk7CisJaWYgKHJvdW5kX2R1cmF0aW9u
ID4gMCkgeworCQlnZXR0aW1lb2ZkYXkoJnJvdW5kX3N0YXJ0LCBOVUxMKTsKKwkJcm91bmRfdGlt
ZW91dCA9IGNhbGNfcm91bmRfdGltZW91dChyb3VuZF9zdGFydCk7CisJfQorCisJd2hpbGUgKG4g
PiAwKSB7CisJCXJlY3ZfY2FsbHMrKzsKKwkJaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikg
eworCQkJbm90aWZpY2F0aW9ucysrOworCQkJZ2V0dGltZW9mZGF5KCZub3RlX3RpbWUsIE5VTEwp
OworCQkJcHJpbnRmKCJub3RpZmljYXRpb24gYXJyaXZlZCBhdCAlZlxuIiwgbm90ZV90aW1lLnR2
X3NlYysoZG91YmxlKW5vdGVfdGltZS50dl91c2VjLzEwMDAwMDAuMCk7CisJCQlzbnAgPSAodW5p
b24gc2N0cF9ub3RpZmljYXRpb24gKilidWY7CisJCQlpZiAoc25wLT5zbl9oZWFkZXIuc25fdHlw
ZSA9PSBTQ1RQX1BFRVJfQUREUl9DSEFOR0UpIHsKKwkJCQlzcGMgPSAmc25wLT5zbl9wYWRkcl9j
aGFuZ2U7CisJCQkJcHJpbnRmKCJTQ1RQX1BFRVJfQUREUl9DSEFOR0U6IHN0YXRlPSV1LCBlcnJv
cj0ldVxuIixzcGMtPnNwY19zdGF0ZSwgc3BjLT5zcGNfZXJyb3IpOworCQkJfQorCQl9IGVsc2Ug
eworCQkJaWYgKHZlcnlfdmVyYm9zZSkgeworCQkJCXByaW50ZigiTWVzc2FnZSByZWNlaXZlZFxu
Iik7CisJCQl9CisJCQlzdW0gKz0gbjsKKwkJCWlmIChmbGFncyAmIE1TR19FT1IpIHsKKwkJCQlt
ZXNzYWdlcysrOworCQkJCWlmIChmaXJzdF9sZW5ndGggPT0gMCkgeworCQkJCQlmaXJzdF9sZW5n
dGggPSBzdW07CisJCQkJfQorCQkJCWlmIChyb3VuZF9kdXJhdGlvbiA+IDApIHsKKwkJCQkJcm91
bmRfYnl0ZXMgKz0gZmlyc3RfbGVuZ3RoOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAocm91bmRf
ZHVyYXRpb24gPiAwICYmIHJvdW5kX3RpbWVvdXQgPD0gdGltZShOVUxMKSkgeworCQkJZ2V0dGlt
ZW9mZGF5KCZ0aW1lX25vdywgTlVMTCk7CisJCQl0aW1lcnN1YigmdGltZV9ub3csICZyb3VuZF9z
dGFydCwgJnRpbWVfZGlmZik7CisJCQlzZWNvbmRzID0gdGltZV9kaWZmLnR2X3NlYyArIChkb3Vi
bGUpdGltZV9kaWZmLnR2X3VzZWMvMTAwMDAwMC4wOworCQkJZnByaW50ZihzdGRvdXQsICJ0aHJv
dWdocHV0IGZvciB0aGUgbGFzdCAlZiBzZWNvbmRzOiAlZiBCL3NcbiIsIHNlY29uZHMsIChkb3Vi
bGUpcm91bmRfYnl0ZXMgLyBzZWNvbmRzKTsKKworCQkJcm91bmRfYnl0ZXMgPSAwOworCQkJZ2V0
dGltZW9mZGF5KCZyb3VuZF9zdGFydCwgTlVMTCk7CisJCQlyb3VuZF90aW1lb3V0ID0gY2FsY19y
b3VuZF90aW1lb3V0KHJvdW5kX3N0YXJ0KTsKKwkJfQorCQlmbGFncyA9IDA7CisJCWxlbiA9IChz
b2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCWluZm9sZW4gPSBzaXplb2Yo
c3RydWN0IHNjdHBfcmVjdnZfcm4pOworCQlpbmZvdHlwZSA9IDA7CisJCW1lbXNldCgmcm4sIDAs
IHNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2dl9ybikpOworCQluID0gdXNyc2N0cF9yZWN2dihjb25u
X3NvY2ssICh2b2lkICopIGJ1ZiwgQlVGRkVSU0laRSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRk
ciwgJmxlbiwgKHZvaWQgKikmcm4sCisJCSAgICAgICAgICAgICAgICAgICZpbmZvbGVuLCAmaW5m
b3R5cGUsICZmbGFncyk7CisJfQorCWlmIChuIDwgMCkgeworCQlwZXJyb3IoInNjdHBfcmVjdnYi
KTsKKwl9CisJZ2V0dGltZW9mZGF5KCZ0aW1lX25vdywgTlVMTCk7CisJdGltZXJzdWIoJnRpbWVf
bm93LCAmdGltZV9zdGFydCwgJnRpbWVfZGlmZik7CisJc2Vjb25kcyA9IHRpbWVfZGlmZi50dl9z
ZWMgKyAoZG91YmxlKXRpbWVfZGlmZi50dl91c2VjLzEwMDAwMDAuMDsKKwlwcmludGYoIiVsbHUs
ICVsdSwgJWx1LCAlbGx1LCAlZiwgJWYsICVsdVxuIiwKKwkgICAgICAgIGZpcnN0X2xlbmd0aCwg
bWVzc2FnZXMsIHJlY3ZfY2FsbHMsIHN1bSwgc2Vjb25kcywgKGRvdWJsZSlmaXJzdF9sZW5ndGgg
KiAoZG91YmxlKW1lc3NhZ2VzIC8gc2Vjb25kcywgbm90aWZpY2F0aW9ucyk7CisJZmZsdXNoKHN0
ZG91dCk7CisJdXNyc2N0cF9jbG9zZShjb25uX3NvY2spOworCWZyZWUoYnVmKTsKKyNpZmRlZiBf
V0lOMzIKKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIChOVUxMKTsKKyNlbmRpZgorfQorCitz
dGF0aWMgaW50CitzZW5kX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVpbnQzMl90IHNiX2ZyZWUs
IHZvaWQgKnVscF9pbmZvKSB7CisJc3RydWN0IHNjdHBfc2VuZHZfc3BhIHNlbmR2X3NwYTsKKwor
CWlmICgoY2JfbWVzc2FnZXMgPT0gMCkgJiYgdmVyYm9zZSkgeworCQlwcmludGYoIlN0YXJ0IHNl
bmRpbmcgIik7CisJCWlmIChudW1iZXJfb2ZfbWVzc2FnZXMgPiAwKSB7CisJCQlwcmludGYoIiVs
ZCBtZXNzYWdlcyAiLCAobG9uZyludW1iZXJfb2ZfbWVzc2FnZXMpOworCQl9CisJCWlmIChydW50
aW1lID4gMCkgeworCQkJcHJpbnRmKCJmb3IgJXUgc2Vjb25kcyAuLi4iLCBydW50aW1lKTsKKwkJ
fQorCQlwcmludGYoIlxuIik7CisJCWZmbHVzaChzdGRvdXQpOworCX0KKworCXNlbmR2X3NwYS5z
ZW5kdl9mbGFncyA9IFNDVFBfU0VORF9TTkRJTkZPX1ZBTElEIHwgU0NUUF9TRU5EX1BSSU5GT19W
QUxJRDsKKworCXNlbmR2X3NwYS5zZW5kdl9zbmRpbmZvLnNuZF9zaWQgPSAwOworCXNlbmR2X3Nw
YS5zZW5kdl9zbmRpbmZvLnNuZF9mbGFncyA9IDA7CisJaWYgKHVub3JkZXJlZCAhPSAwKSB7CisJ
CXNlbmR2X3NwYS5zZW5kdl9zbmRpbmZvLnNuZF9mbGFncyB8PSBTQ1RQX1VOT1JERVJFRDsKKwl9
CisJc2VuZHZfc3BhLnNlbmR2X3NuZGluZm8uc25kX3BwaWQgPSAwOworCXNlbmR2X3NwYS5zZW5k
dl9zbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKKwlzZW5kdl9zcGEuc2VuZHZfc25kaW5mby5zbmRf
YXNzb2NfaWQgPSAwOworCisJc2VuZHZfc3BhLnNlbmR2X3ByaW5mby5wcl9wb2xpY3kgPSAwOwor
CXN3aXRjaCAocG9saWN5KSB7CisjaWZkZWYgU0NUUF9QUl9TQ1RQX05PTkUKKwljYXNlIDA6CisJ
CXNlbmR2X3NwYS5zZW5kdl9wcmluZm8ucHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7CisJ
CWJyZWFrOworI2VuZGlmCisjaWZkZWYgU0NUUF9QUl9TQ1RQX1RUTAorCWNhc2UgMToKKwkJc2Vu
ZHZfc3BhLnNlbmR2X3ByaW5mby5wcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfVFRMOworCQlicmVh
azsKKyNlbmRpZgorI2lmZGVmIFNDVFBfUFJfU0NUUF9SVFgKKwljYXNlIDI6CisJCXNlbmR2X3Nw
YS5zZW5kdl9wcmluZm8ucHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX1JUWDsKKwkJYnJlYWs7Cisj
ZW5kaWYKKyNpZmRlZiBTQ1RQX1BSX1NDVFBfQlVGCisJY2FzZSAzOgorCQlzZW5kdl9zcGEuc2Vu
ZHZfcHJpbmZvLnByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9CVUY7CisJCWJyZWFrOworI2VuZGlm
CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJVbmtub3duIFBSLVNDVFAgcG9saWN5LlxuIik7CisJCWJy
ZWFrOworCX0KKwlzZW5kdl9zcGEuc2VuZHZfcHJpbmZvLnByX3ZhbHVlID0gdGltZXRvbGl2ZTsK
KworCXdoaWxlICghZG9uZSAmJiAoKG51bWJlcl9vZl9tZXNzYWdlcyA9PSAwKSB8fCAoY2JfbWVz
c2FnZXMgPCAobnVtYmVyX29mX21lc3NhZ2VzIC0gMSkpKSkgeworCQlpZiAodmVyeV92ZXJib3Nl
KSB7CisJCQlwcmludGYoIlNlbmRpbmcgbWVzc2FnZSBudW1iZXIgJWx1LlxuIiwgY2JfbWVzc2Fn
ZXMgKyAxKTsKKwkJfQorCisJCWlmICh1c3JzY3RwX3NlbmR2KHBzb2NrLCBidWZmZXIsIGxlbmd0
aCwKKwkJICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAmcmVtb3RlX2FkZHIs
IDEsCisJCSAgICAgICAgICAgICAgICAgICh2b2lkICopJnNlbmR2X3NwYSwgKHNvY2tsZW5fdClz
aXplb2Yoc3RydWN0IHNjdHBfc2VuZHZfc3BhKSwgU0NUUF9TRU5EVl9TUEEsCisJCSAgICAgICAg
ICAgICAgICAgIDApIDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVXT1VMREJMT0NLICYmIGVycm5v
ICE9IEVBR0FJTikgeworCQkJCXBlcnJvcigidXNyc2N0cF9zZW5kdiAoY2IpIik7CisJCQkJZXhp
dCgxKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHZlcnlfdmVyYm9zZSl7CisJCQkJCXByaW50Zigi
RVdPVUxEQkxPQ0sgb3IgRUFHQUlOIGZvciBtZXNzYWdlIG51bWJlciAlbHUgLSB3aWxsIHJldHJ5
XG4iLCBjYl9tZXNzYWdlcyArIDEpOworCQkJCX0KKwkJCQkvKiBzZW5kIHVudGlsIEVXT1VMREJM
T0NLIHRoZW4gZXhpdCBjYWxsYmFjay4gKi8KKwkJCQlyZXR1cm4gKDEpOworCQkJfQorCQl9CisJ
CWNiX21lc3NhZ2VzKys7CisJfQorCWlmICgoZG9uZSA9PSAxKSB8fCAoY2JfbWVzc2FnZXMgPT0g
KG51bWJlcl9vZl9tZXNzYWdlcyAtIDEpKSkgeworCQlpZiAodmVyeV92ZXJib3NlKSB7CisJCQlw
cmludGYoIlNlbmRpbmcgZmluYWwgbWVzc2FnZSBudW1iZXIgJWx1LlxuIiwgY2JfbWVzc2FnZXMg
KyAxKTsKKwkJfQorCisJCXNlbmR2X3NwYS5zZW5kdl9zbmRpbmZvLnNuZF9mbGFncyB8PSBTQ1RQ
X0VPRjsKKwkJaWYgKHVzcnNjdHBfc2VuZHYocHNvY2ssIGJ1ZmZlciwgbGVuZ3RoLCAoc3RydWN0
IHNvY2thZGRyICopICZyZW1vdGVfYWRkciwgMSwKKwkJICAgICAgICAgICAgICAgICAgKHZvaWQg
Kikmc2VuZHZfc3BhLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEpLCBT
Q1RQX1NFTkRWX1NQQSwKKwkJICAgICAgICAgICAgICAgICAgMCkgPCAwKSB7CisJCQlpZiAoZXJy
bm8gIT0gRVdPVUxEQkxPQ0sgJiYgZXJybm8gIT0gRUFHQUlOKSB7CisJCQkJcGVycm9yKCJ1c3Jz
Y3RwX3NlbmR2IChjYikiKTsKKwkJCQlleGl0KDEpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAodmVy
eV92ZXJib3NlKXsKKwkJCQkJcHJpbnRmKCJFV09VTERCTE9DSyBvciBFQUdBSU4gZm9yIGZpbmFs
IG1lc3NhZ2UgbnVtYmVyICVsdSAtIHdpbGwgcmV0cnlcbiIsIGNiX21lc3NhZ2VzICsgMSk7CisJ
CQkJfQorCQkJCS8qIHNlbmQgdW50aWwgRVdPVUxEQkxPQ0sgdGhlbiBleGl0IGNhbGxiYWNrLiAq
LworCQkJCXJldHVybiAoMSk7CisJCQl9CisJCX0KKwkJY2JfbWVzc2FnZXMrKzsKKwkJZG9uZSA9
IDI7CisJfQorCisJcmV0dXJuICgxKTsKK30KKworc3RhdGljIGludAorc2VydmVyX3JlY2VpdmVf
Y2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAq
ZGF0YSwKKyAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2
LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdywgZGlm
Zl90aW1lOworCWRvdWJsZSBzZWNvbmRzOworCisJaWYgKGRhdGEgPT0gTlVMTCkgeworCQlnZXR0
aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisJCXRpbWVyc3ViKCZub3csICZzdGFydF90aW1lLCAmZGlm
Zl90aW1lKTsKKwkJc2Vjb25kcyA9IGRpZmZfdGltZS50dl9zZWMgKyAoZG91YmxlKWRpZmZfdGlt
ZS50dl91c2VjIC8gMTAwMDAwMC4wOworCQlwcmludGYoIiVsbHUsICVsdSwgJWxsdSwgJWYsICVm
XG4iLAorCQkJY2JfZmlyc3RfbGVuZ3RoLCBjYl9tZXNzYWdlcywgY2Jfc3VtLCBzZWNvbmRzLCAo
ZG91YmxlKWNiX2ZpcnN0X2xlbmd0aCAqIChkb3VibGUpY2JfbWVzc2FnZXMgLyBzZWNvbmRzKTsK
KwkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJY2JfZmlyc3RfbGVuZ3RoID0gMDsKKwkJY2Jfc3Vt
ID0gMDsKKwkJY2JfbWVzc2FnZXMgPSAwOworCQlyZXR1cm4gKDEpOworCX0KKwlpZiAoY2JfZmly
c3RfbGVuZ3RoID09IDApIHsKKwkJY2JfZmlyc3RfbGVuZ3RoID0gKHVuc2lnbmVkIGludClkYXRh
bGVuOworCQlnZXR0aW1lb2ZkYXkoJnN0YXJ0X3RpbWUsIE5VTEwpOworCX0KKwljYl9zdW0gKz0g
ZGF0YWxlbjsKKwljYl9tZXNzYWdlcysrOworCisJZnJlZShkYXRhKTsKKwlyZXR1cm4gKDEpOwor
fQorCitzdGF0aWMgaW50CitjbGllbnRfcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1
bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAgICBzaXplX3Qg
ZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2lu
Zm8pCit7CisJZnJlZShkYXRhKTsKKwlyZXR1cm4gKDEpOworfQorCitpbnQgbWFpbihpbnQgYXJn
YywgY2hhciAqKmFyZ3YpCit7CisjaWZuZGVmIF9XSU4zMgorCWludCBjLCByYzsKKyNlbmRpZgor
CXNvY2tsZW5fdCBhZGRyX2xlbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9jYWxfYWRkcjsKKwlz
dHJ1Y3QgdGltZXZhbCB0aW1lX3N0YXJ0LCB0aW1lX25vdywgdGltZV9kaWZmOworCWludCBjbGll
bnQ7CisJdWludDE2X3QgbG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQsIHBvcnQsIGxvY2FsX3VkcF9w
b3J0LCByZW1vdGVfdWRwX3BvcnQ7CisJaW50IHJjdmJ1ZnNpemU9MCwgc25kYnVmc2l6ZT0wLCBt
eXJjdmJ1ZnNpemUsIG15c25kYnVmc2l6ZTsKKwlzb2NrbGVuX3QgaW50bGVuOworCWRvdWJsZSBz
ZWNvbmRzOworCWRvdWJsZSB0aHJvdWdocHV0OworCWludCBub2RlbGF5ID0gMDsKKwlzdHJ1Y3Qg
c2N0cF9hc3NvY192YWx1ZSBhdjsKKwlzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBzOworCXN0
cnVjdCBzY3RwX3NlbmR2X3NwYSBzZW5kdl9zcGE7CisJdW5zaWduZWQgbG9uZyBtZXNzYWdlcyA9
IDA7CisjaWZkZWYgX1dJTjMyCisJdW5zaWduZWQgbG9uZyBzcmNBZGRyOworCUhBTkRMRSB0aWQ7
CisjZWxzZQorCWluX2FkZHJfdCBzcmNBZGRyOworCXB0aHJlYWRfdCB0aWQ7CisjZW5kaWYKKwlp
bnQgZnJhZ3BvaW50ID0gMDsKKwlzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGF0aW9uIGluZCA9IHswfTsK
KyNpZmRlZiBfV0lOMzIKKwljaGFyICpvcHQ7CisJaW50IG9wdGluZDsKKyNlbmRpZgorCXVub3Jk
ZXJlZCA9IDA7CisKKwlsZW5ndGggPSBERUZBVUxUX0xFTkdUSDsKKwludW1iZXJfb2ZfbWVzc2Fn
ZXMgPSBERUZBVUxUX05VTUJFUl9PRl9NRVNTQUdFUzsKKwlwb3J0ID0gREVGQVVMVF9QT1JUOwor
CXJlbW90ZV91ZHBfcG9ydCA9IDA7CisJbG9jYWxfdWRwX3BvcnQgPSA5ODk5OworCXZlcmJvc2Ug
PSAwOworCXZlcnlfdmVyYm9zZSA9IDA7CisJc3JjQWRkciA9IGh0b25sKElOQUREUl9BTlkpOwor
CXJvdW5kX2R1cmF0aW9uID0gMDsKKworCW1lbXNldCgodm9pZCAqKSAmcmVtb3RlX2FkZHIsIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwltZW1zZXQoKHZvaWQgKikgJmxvY2FsX2Fk
ZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKworI2lmbmRlZiBfV0lOMzIKKwl3
aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgImE6Y2Q6REU6ZjpsOkw6bjpwOlA6UjpTOnQ6
VDp1VTp2ViIpKSAhPSAtMSkKKwkJc3dpdGNoKGMpIHsKKwkJCWNhc2UgJ2EnOgorCQkJCWluZC5z
c2JfYWRhcHRhdGlvbl9pbmQgPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdj
JzoKKwkJCQl1c2VfY2IgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAnZCc6CisJCQkJcm91bmRf
ZHVyYXRpb24gPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdEJzoKKwkJCQlu
b2RlbGF5ID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2wnOgorCQkJCWxlbmd0aCA9IGF0b2ko
b3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCW51bWJlcl9vZl9tZXNzYWdl
cyA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3AnOgorCQkJCXBvcnQgPSBh
dG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdQJzoKKwkJCQlwb2xpY3kgPSBhdG9p
KG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdFJzoKKwkJCQlsb2NhbF91ZHBfcG9ydCA9
IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2YnOgorCQkJCWZyYWdwb2ludCA9
IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJCWlmIChpbmV0X3B0
b24oQUZfSU5FVCwgb3B0YXJnLCAmc3JjQWRkcikgIT0gMSkgeworCQkJCQlwcmludGYoIkNhbid0
IHBhcnNlICVzXG4iLCBvcHRhcmcpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgJ1InOgor
CQkJCXJjdmJ1ZnNpemUgPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdTJzoK
KwkJCQlzbmRidWZzaXplID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAndCc6
CisJCQkJdGltZXRvbGl2ZSA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1Qn
OgorCQkJCXJ1bnRpbWUgPSBhdG9pKG9wdGFyZyk7CisJCQkJbnVtYmVyX29mX21lc3NhZ2VzID0g
MDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3UnOgorCQkJCXVub3JkZXJlZCA9IDE7CisJCQkJYnJl
YWs7CisJCQljYXNlICdVJzoKKwkJCQlyZW1vdGVfdWRwX3BvcnQgPSBhdG9pKG9wdGFyZyk7CisJ
CQkJYnJlYWs7CisJCQljYXNlICd2JzoKKwkJCQl2ZXJib3NlID0gMTsKKwkJCQlicmVhazsKKwkJ
CWNhc2UgJ1YnOgorCQkJCXZlcmJvc2UgPSAxOworCQkJCXZlcnlfdmVyYm9zZSA9IDE7CisJCQkJ
YnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWZwcmludGYoc3RkZXJyLCAiJXMiLCBVc2FnZSk7CisJ
CQkJZXhpdCgxKTsKKwkJfQorI2Vsc2UKKwlmb3IgKG9wdGluZCA9IDE7IG9wdGluZCA8IGFyZ2M7
IG9wdGluZCsrKSB7CisJCWlmIChhcmd2W29wdGluZF1bMF0gPT0gJy0nKSB7CisJCQlzd2l0Y2gg
KGFyZ3Zbb3B0aW5kXVsxXSkgeworCQkJCWNhc2UgJ2EnOgorCQkJCQlpZiAoKytvcHRpbmQgPj0g
YXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJ
CX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJCQlpbmQuc3NiX2FkYXB0YXRpb25faW5k
ID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdjJzoKKwkJCQkJdXNlX2NiID0g
MTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnbCc6CisJCQkJCWlmICgrK29wdGluZCA+PSBhcmdj
KSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQor
CQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCWxlbmd0aCA9IGF0b2kob3B0KTsKKwkJCQkJ
YnJlYWs7CisJCQkJY2FzZSAncCc6CisJCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7CisJCQkJ
CQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQlvcHQg
PSBhcmd2W29wdGluZF07CisJCQkJCXBvcnQgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJ
CWNhc2UgJ1AnOgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIl
cyIsIFVzYWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRp
bmRdOworCQkJCQlwb2xpY3kgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ24n
OgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdl
KTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJ
CQludW1iZXJfb2ZfbWVzc2FnZXMgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2Ug
J2YnOgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVz
YWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOwor
CQkJCQlmcmFncG9pbnQgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ0wnOgor
CQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsK
KwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJCQlp
bmV0X3B0b24oQUZfSU5FVCwgb3B0LCAmc3JjQWRkcik7CisJCQkJCWJyZWFrOworCQkJCWNhc2Ug
J1UnOgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVz
YWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOwor
CQkJCQlyZW1vdGVfdWRwX3BvcnQgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2Ug
J0UnOgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVz
YWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOwor
CQkJCQlsb2NhbF91ZHBfcG9ydCA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAn
Uic6CisJCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNh
Z2UpOworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJ
CQkJCXJjdmJ1ZnNpemUgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ1MnOgor
CQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsK
KwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJCQlz
bmRidWZzaXplID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICd0JzoKKwkJCQkJ
aWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJ
CQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJdGltZXRv
bGl2ZSA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnVCc6CisJCQkJCWlmICgr
K29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhp
dCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCXJ1bnRpbWUgPSBh
dG9pKG9wdCk7CisJCQkJCW51bWJlcl9vZl9tZXNzYWdlcyA9IDA7CisJCQkJCWJyZWFrOworCQkJ
CWNhc2UgJ3UnOgorCQkJCQl1bm9yZGVyZWQgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlICd2
JzoKKwkJCQkJdmVyYm9zZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ1YnOgorCQkJCQl2
ZXJib3NlID0gMTsKKwkJCQkJdmVyeV92ZXJib3NlID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2Fz
ZSAnRCc6CisJCQkJCW5vZGVsYXkgPSAxOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJ
CQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQlleGl0KDEpOworCQkJfQorCQl9IGVsc2Ugewor
CQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYKKwlpZiAob3B0aW5kID09IGFyZ2MpIHsKKwkJY2xp
ZW50ID0gMDsKKwkJbG9jYWxfcG9ydCA9IHBvcnQ7CisJCXJlbW90ZV9wb3J0ID0gMDsKKwl9IGVs
c2UgeworCQljbGllbnQgPSAxOworCQlsb2NhbF9wb3J0ID0gMDsKKwkJcmVtb3RlX3BvcnQgPSBw
b3J0OworCX0KKwlsb2NhbF9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVf
U0lOX0xFTgorCWxvY2FsX2FkZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
OworI2VuZGlmCisJbG9jYWxfYWRkci5zaW5fcG9ydCA9IGh0b25zKGxvY2FsX3BvcnQpOworCWxv
Y2FsX2FkZHIuc2luX2FkZHIuc19hZGRyID0gc3JjQWRkcjsKKworCXVzcnNjdHBfaW5pdChsb2Nh
bF91ZHBfcG9ydCwgTlVMTCwgZGVidWdfcHJpbnRmX3N0YWNrKTsKKyNpZmRlZiBTQ1RQX0RFQlVH
CisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19BTEwpOworI2Vu
ZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCXVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX25vX2NzdW1fb25fbG9vcGJhY2soMCk7CisJdXNyc2N0cF9zeXNjdGxfc2V0
X3NjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkoMSk7CisKKwlpZiAoY2xpZW50KSB7CisJCWlm
ICh1c2VfY2IpIHsKKwkJCWlmICghKHBzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVCwgU09D
S19TVFJFQU0sIElQUFJPVE9fU0NUUCwgY2xpZW50X3JlY2VpdmVfY2IsIHNlbmRfY2IsIGxlbmd0
aCwgTlVMTCkpKSB7CisJCQkJcGVycm9yKCJ1c2VyX3NvY2tldCIpOworCQkJCWV4aXQoMSk7CisJ
CQl9CisJCX0gZWxzZSB7CisJCQlpZiAoIShwc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQs
IFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIE5VTEwsIE5VTEwsIDAsIE5VTEwpKSkgeworCQkJ
CXBlcnJvcigidXNlcl9zb2NrZXQiKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQl9CisJfSBlbHNl
IHsKKwkJaWYgKHVzZV9jYikgeworCQkJaWYgKCEocHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9J
TkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBzZXJ2ZXJfcmVjZWl2ZV9jYiwgTlVMTCwg
MCwgTlVMTCkpKSB7CisJCQkJcGVycm9yKCJ1c2VyX3NvY2tldCIpOworCQkJCWV4aXQoMSk7CisJ
CQl9CisJCX0gZWxzZSB7CisJCQlpZiAoIShwc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQs
IFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIE5VTEwsIE5VTEwsIDAsIE5VTEwpKSkgeworCQkJ
CXBlcnJvcigidXNlcl9zb2NrZXQiKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQl9CisJfQorCisJ
aWYgKHVzcnNjdHBfYmluZChwc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZsb2NhbF9hZGRyLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gLTEpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2Jp
bmQiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBJ
UFBST1RPX1NDVFAsIFNDVFBfQURBUFRBVElPTl9MQVlFUiwgKGNvbnN0IHZvaWQqKSZpbmQsIChz
b2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NldGFkYXB0YXRpb24pKSA8IDApIHsKKwkJcGVy
cm9yKCJzZXRzb2Nrb3B0Iik7CisJfQorCisJaWYgKCFjbGllbnQpIHsKKwkJaWYgKHJjdmJ1ZnNp
emUpIHsKKwkJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JD
VkJVRiwgJnJjdmJ1ZnNpemUsIHNpemVvZihpbnQpKSA8IDApIHsKKwkJCQlwZXJyb3IoInNldHNv
Y2tvcHQ6IHJjdmJ1ZiIpOworCQkJfQorCQl9CisJCWlmICh2ZXJib3NlKSB7CisJCQlpbnRsZW4g
PSBzaXplb2YoaW50KTsKKwkJCWlmICh1c3JzY3RwX2dldHNvY2tvcHQocHNvY2ssIFNPTF9TT0NL
RVQsIFNPX1JDVkJVRiwgJm15cmN2YnVmc2l6ZSwgKHNvY2tsZW5fdCAqKSZpbnRsZW4pIDwgMCkg
eworCQkJCXBlcnJvcigiZ2V0c29ja29wdDogcmN2YnVmIik7CisJCQl9IGVsc2UgeworCQkJCWZw
cmludGYoc3Rkb3V0LCJSZWNlaXZlIGJ1ZmZlciBzaXplOiAlZC5cbiIsIG15cmN2YnVmc2l6ZSk7
CisJCQl9CisJCX0KKworCQlpZiAodXNyc2N0cF9saXN0ZW4ocHNvY2ssIDEpIDwgMCkgeworCQkJ
cGVycm9yKCJ1c3JzY3RwX2xpc3RlbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCXdoaWxlICgx
KSB7CisJCQltZW1zZXQoJnJlbW90ZV9hZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KSk7CisJCQlhZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCQkJaWYgKHVz
ZV9jYikgeworCQkJCXN0cnVjdCBzb2NrZXQgKmNvbm5fc29jazsKKworCQkJCWlmICgoY29ubl9z
b2NrID0gdXNyc2N0cF9hY2NlcHQocHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90ZV9h
ZGRyLCAmYWRkcl9sZW4pKSA9PSBOVUxMKSB7CisJCQkJCXBlcnJvcigidXNyc2N0cF9hY2NlcHQi
KTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3Qgc29ja2V0
ICoqY29ubl9zb2NrOworCisJCQkJY29ubl9zb2NrID0gKHN0cnVjdCBzb2NrZXQgKiopIG1hbGxv
YyhzaXplb2Yoc3RydWN0IHNvY2tldCAqKSk7CisJCQkJaWYgKCgqY29ubl9zb2NrID0gdXNyc2N0
cF9hY2NlcHQocHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90ZV9hZGRyLCAmYWRkcl9s
ZW4pKSA9PSBOVUxMKSB7CisJCQkJCXBlcnJvcigidXNyc2N0cF9hY2NlcHQiKTsKKwkJCQkJY29u
dGludWU7CisJCQkJfQorI2lmZGVmIF9XSU4zMgorCQkJCWlmICgodGlkID0gQ3JlYXRlVGhyZWFk
KE5VTEwsIDAsICZoYW5kbGVfY29ubmVjdGlvbiwgKHZvaWQgKiljb25uX3NvY2ssIDAsIE5VTEwp
KSA9PSBOVUxMKSB7CisJCQkJCWZwcmludGYoc3RkZXJyLCAiQ3JlYXRlVGhyZWFkKCkgZmFpbGVk
IHdpdGggZXJyb3I6ICVsdVxuIiwgR2V0TGFzdEVycm9yKCkpOworI2Vsc2UKKwkJCQlpZiAoKHJj
ID0gcHRocmVhZF9jcmVhdGUoJnRpZCwgTlVMTCwgJmhhbmRsZV9jb25uZWN0aW9uLCAodm9pZCAq
KWNvbm5fc29jaykpICE9IDApIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsICJwdGhyZWFkX2NyZWF0
ZTogJXNcbiIsIHN0cmVycm9yKHJjKSk7CisjZW5kaWYKKwkJCQkJdXNyc2N0cF9jbG9zZSgqY29u
bl9zb2NrKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJaWYgKHZlcmJvc2UpIHsK
KwkJCQkvKiBjb25zdCBjaGFyICppbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNo
YXIgKmRzdCwgc29ja2xlbl90IHNpemUpCisJCQkJaW5ldF9udG9hKHJlbW90ZV9hZGRyLnNpbl9h
ZGRyKSAqLworCQkJCWNoYXIgYWRkcmJ1ZltJTkVUX0FERFJTVFJMRU5dOworCQkJCXByaW50Zigi
Q29ubmVjdGlvbiBhY2NlcHRlZCBmcm9tICVzOiVkXG4iLCBpbmV0X250b3AoQUZfSU5FVCwgJihy
ZW1vdGVfYWRkci5zaW5fYWRkciksIGFkZHJidWYsIElORVRfQUREUlNUUkxFTiksIG50b2hzKHJl
bW90ZV9hZGRyLnNpbl9wb3J0KSk7CisJCQl9CisJCX0KKwkJLyogdXNyc2N0cF9jbG9zZShwc29j
ayk7ICB1bnJlYWNoYWJsZSAqLworCX0gZWxzZSB7CisJCW1lbXNldCgmZW5jYXBzLCAwLCBzaXpl
b2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7CisJCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1p
bHkgPSBBRl9JTkVUOworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhyZW1vdGVfdWRwX3BvcnQp
OworCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVN
T1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6
ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJzZXRzb2Nrb3B0
Iik7CisJCX0KKworCQlyZW1vdGVfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBI
QVZFX1NJTl9MRU4KKwkJcmVtb3RlX2FkZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pOworI2VuZGlmCisJCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3Zbb3B0aW5kXSwg
JnJlbW90ZV9hZGRyLnNpbl9hZGRyLnNfYWRkcikpeworCQkJcHJpbnRmKCJlcnJvcjogaW52YWxp
ZCBkZXN0aW5hdGlvbiBhZGRyZXNzXG4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJcmVtb3RlX2Fk
ZHIuc2luX3BvcnQgPSBodG9ucyhyZW1vdGVfcG9ydCk7CisKKwkJLyogVE9ETyBmcmFncG9pbnQg
c3R1ZmYgKi8KKwkJaWYgKG5vZGVsYXkgPT0gMSkgeworCQkJb3B0dmFsID0gMTsKKwkJfSBlbHNl
IHsKKwkJCW9wdHZhbCA9IDA7CisJCX0KKwkJdXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBJUFBS
T1RPX1NDVFAsIFNDVFBfTk9ERUxBWSwgJm9wdHZhbCwgc2l6ZW9mKGludCkpOworCisJCWlmIChm
cmFncG9pbnQpIHsKKwkJCWF2LmFzc29jX2lkID0gMDsKKwkJCWF2LmFzc29jX3ZhbHVlID0gZnJh
Z3BvaW50OworCQkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgSVBQUk9UT19TQ1RQLCBT
Q1RQX01BWFNFRywgJmF2LCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8IDApIHsK
KwkJCQlwZXJyb3IoInNldHNvY2tvcHQ6IFNDVFBfTUFYU0VHIik7CisJCQl9CisJCX0KKworCQlp
ZiAoc25kYnVmc2l6ZSkgeworCQkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgU09MX1NP
Q0tFVCwgU09fU05EQlVGLCAmc25kYnVmc2l6ZSwgc2l6ZW9mKGludCkpIDwgMCkgeworCQkJCXBl
cnJvcigic2V0c29ja29wdDogc25kYnVmIik7CisJCQl9CisJCX0KKwkJaWYgKHZlcmJvc2UpIHsK
KwkJCWludGxlbiA9IHNpemVvZihpbnQpOworCQkJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChwc29j
aywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmbXlzbmRidWZzaXplLCAoc29ja2xlbl90ICopJmlu
dGxlbikgPCAwKSB7CisJCQkJcGVycm9yKCJzZXRzb2Nrb3B0OiBTT19TTkRCVUYiKTsKKwkJCX0g
ZWxzZSB7CisJCQkJZnByaW50ZihzdGRvdXQsIlNlbmQgYnVmZmVyIHNpemU6ICVkLlxuIiwgbXlz
bmRidWZzaXplKTsKKwkJCX0KKwkJfQorCisJCWJ1ZmZlciA9IG1hbGxvYyhsZW5ndGgpOworCQlt
ZW1zZXQoYnVmZmVyLCAnYicsIGxlbmd0aCk7CisKKwkJaWYgKHVzcnNjdHBfY29ubmVjdChwc29j
aywgKHN0cnVjdCBzb2NrYWRkciAqKSAmcmVtb3RlX2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKSA9PSAtMSApIHsKKwkJCXBlcnJvcigidXNyc2N0cF9jb25uZWN0Iik7CisJCQlleGl0
KDEpOworCQl9CisKKwkJZ2V0dGltZW9mZGF5KCZ0aW1lX3N0YXJ0LCBOVUxMKTsKKworCQlkb25l
ID0gMDsKKworCQlpZiAocnVudGltZSA+IDApIHsKKyNpZm5kZWYgX1dJTjMyCisJCQlzaWduYWwo
U0lHQUxSTSwgc3RvcF9zZW5kZXIpOworCQkJYWxhcm0ocnVudGltZSk7CisjZWxzZQorCQkJZnBy
aW50ZihzdGRlcnIsICJZb3UgY2Fubm90IHNldCB0aGUgcnVudGltZSBpbiBXaW5kb3dzIHlldFxu
Iik7CisJCQlleGl0KC0xKTsKKyNlbmRpZgorCQl9CisKKwkJaWYgKHVzZV9jYikgeworCQkJd2hp
bGUgKGRvbmUgPCAyICYmIChjYl9tZXNzYWdlcyA8IChudW1iZXJfb2ZfbWVzc2FnZXMgLSAxKSkp
IHsKKyNpZmRlZiBfV0lOMzIKKwkJCQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJCQkJc2xlZXAoMSk7
CisjZW5kaWYKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNlbmR2X3NwYS5zZW5kdl9mbGFncyA9IFND
VFBfU0VORF9TTkRJTkZPX1ZBTElEIHwgU0NUUF9TRU5EX1BSSU5GT19WQUxJRDsKKworCQkJc2Vu
ZHZfc3BhLnNlbmR2X3NuZGluZm8uc25kX3NpZCA9IDA7CisJCQlzZW5kdl9zcGEuc2VuZHZfc25k
aW5mby5zbmRfZmxhZ3MgPSAwOworCQkJaWYgKHVub3JkZXJlZCAhPSAwKSB7CisJCQkJc2VuZHZf
c3BhLnNlbmR2X3NuZGluZm8uc25kX2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOworCQkJfQorCQkJ
c2VuZHZfc3BhLnNlbmR2X3NuZGluZm8uc25kX3BwaWQgPSAwOworCQkJc2VuZHZfc3BhLnNlbmR2
X3NuZGluZm8uc25kX2NvbnRleHQgPSAwOworCQkJc2VuZHZfc3BhLnNlbmR2X3NuZGluZm8uc25k
X2Fzc29jX2lkID0gMDsKKworCQkJc2VuZHZfc3BhLnNlbmR2X3ByaW5mby5wcl9wb2xpY3kgPSAw
OworCQkJc3dpdGNoIChwb2xpY3kpIHsKKyNpZmRlZiBTQ1RQX1BSX1NDVFBfTk9ORQorCQkJY2Fz
ZSAwOgorCQkJCXNlbmR2X3NwYS5zZW5kdl9wcmluZm8ucHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQ
X05PTkU7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBTQ1RQX1BSX1NDVFBfVFRMCisJCQlj
YXNlIDE6CisJCQkJc2VuZHZfc3BhLnNlbmR2X3ByaW5mby5wcl9wb2xpY3kgPSBTQ1RQX1BSX1ND
VFBfVFRMOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgU0NUUF9QUl9TQ1RQX1JUWAorCQkJ
Y2FzZSAyOgorCQkJCXNlbmR2X3NwYS5zZW5kdl9wcmluZm8ucHJfcG9saWN5ID0gU0NUUF9QUl9T
Q1RQX1JUWDsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIFNDVFBfUFJfU0NUUF9CVUYKKwkJ
CWNhc2UgMzoKKwkJCQlzZW5kdl9zcGEuc2VuZHZfcHJpbmZvLnByX3BvbGljeSA9IFNDVFBfUFJf
U0NUUF9CVUY7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRmKCJV
bmtub3duIFBSLVNDVFAgcG9saWN5LlxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzZW5kdl9z
cGEuc2VuZHZfcHJpbmZvLnByX3ZhbHVlID0gdGltZXRvbGl2ZTsKKworCQkJaWYgKHZlcmJvc2Up
IHsKKwkJCQlwcmludGYoIlN0YXJ0IHNlbmRpbmcgIik7CisJCQkJaWYgKG51bWJlcl9vZl9tZXNz
YWdlcyA+IDApIHsKKwkJCQkJcHJpbnRmKCIlbGQgbWVzc2FnZXMgIiwgKGxvbmcpbnVtYmVyX29m
X21lc3NhZ2VzKTsKKwkJCQl9CisJCQkJaWYgKHJ1bnRpbWUgPiAwKSB7CisJCQkJCXByaW50Zigi
Zm9yICV1IHNlY29uZHMgLi4uIiwgcnVudGltZSk7CisJCQkJfQorCQkJCXByaW50ZigiXG4iKTsK
KwkJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCX0KKwkJCXdoaWxlICghZG9uZSAmJiAoKG51bWJlcl9v
Zl9tZXNzYWdlcyA9PSAwKSB8fCAobWVzc2FnZXMgPCAobnVtYmVyX29mX21lc3NhZ2VzIC0gMSkp
KSkgeworCQkJCWlmICh2ZXJ5X3ZlcmJvc2UpIHsKKwkJCQkJcHJpbnRmKCJTZW5kaW5nIG1lc3Nh
Z2UgbnVtYmVyICVsdS5cbiIsIG1lc3NhZ2VzICsgMSk7CisJCQkJfQorCisJCQkJaWYgKHVzcnNj
dHBfc2VuZHYocHNvY2ssIGJ1ZmZlciwgbGVuZ3RoLCAoc3RydWN0IHNvY2thZGRyICopICZyZW1v
dGVfYWRkciwgMSwKKwkJCQkgICAgICAgICAgICAgICAgICAodm9pZCAqKSZzZW5kdl9zcGEsIChz
b2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSksIFNDVFBfU0VORFZfU1BBLAor
CQkJCSAgICAgICAgICAgICAgICAgIDApIDwgMCkgeworCQkJCQlwZXJyb3IoInVzcnNjdHBfc2Vu
ZHYiKTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9CisJCQkJbWVzc2FnZXMrKzsKKwkJCX0KKwkJCWlm
ICh2ZXJ5X3ZlcmJvc2UpIHsKKwkJCQlwcmludGYoIlNlbmRpbmcgbWVzc2FnZSBudW1iZXIgJWx1
LlxuIiwgbWVzc2FnZXMgKyAxKTsKKwkJCX0KKworCQkJc2VuZHZfc3BhLnNlbmR2X3NuZGluZm8u
c25kX2ZsYWdzIHw9IFNDVFBfRU9GOworCQkJaWYgKHVzcnNjdHBfc2VuZHYocHNvY2ssIGJ1ZmZl
ciwgbGVuZ3RoLCAoc3RydWN0IHNvY2thZGRyICopICZyZW1vdGVfYWRkciwgMSwKKwkJCSAgICAg
ICAgICAgICAgICAgICh2b2lkICopJnNlbmR2X3NwYSwgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0
IHNjdHBfc2VuZHZfc3BhKSwgU0NUUF9TRU5EVl9TUEEsCisJCQkgICAgICAgICAgICAgICAgICAw
KSA8IDApIHsKKwkJCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsKKwkJCQlleGl0KDEpOworCQkJ
fQorCQkJbWVzc2FnZXMrKzsKKwkJfQorCQlmcmVlIChidWZmZXIpOworCisJCWlmICh2ZXJib3Nl
KSB7CisJCQlwcmludGYoIkNsb3Npbmcgc29ja2V0LlxuIik7CisJCX0KKworCQl1c3JzY3RwX2Ns
b3NlKHBzb2NrKTsKKwkJZ2V0dGltZW9mZGF5KCZ0aW1lX25vdywgTlVMTCk7CisJCXRpbWVyc3Vi
KCZ0aW1lX25vdywgJnRpbWVfc3RhcnQsICZ0aW1lX2RpZmYpOworCQlzZWNvbmRzID0gdGltZV9k
aWZmLnR2X3NlYyArIChkb3VibGUpdGltZV9kaWZmLnR2X3VzZWMvMTAwMDAwMDsKKwkJcHJpbnRm
KCIlcyBvZiAlbHUgbWVzc2FnZXMgb2YgbGVuZ3RoICVkIHRvb2sgJWYgc2Vjb25kcy5cbiIsCisJ
CSAgICAgICAiU2VuZGluZyIsIG1lc3NhZ2VzLCBsZW5ndGgsIHNlY29uZHMpOworCQl0aHJvdWdo
cHV0ID0gKGRvdWJsZSltZXNzYWdlcyAqIChkb3VibGUpbGVuZ3RoIC8gc2Vjb25kczsKKwkJcHJp
bnRmKCJUaHJvdWdocHV0IHdhcyAlZiBCeXRlL3NlYy5cbiIsIHRocm91Z2hwdXQpOworCX0KKwor
CXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAo
MTAwMCk7CisjZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3RzY3RwX3VwY2FsbC5jIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJv
Z3JhbXMvdHNjdHBfdXBjYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDBjYzQ4MzcyMDgyYTA5Y2FkYWE2NWU0
MjlmMDE0NjFhM2U4MTY1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Rz
Y3RwX3VwY2FsbC5jCkBAIC0wLDAgKzEsNzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1
LTIwMTMgTWljaGFlbCBUdWV4ZW4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIElyZW5lIFJ1
ZW5nZWxlcgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgRmVsaXggV2VpbnJhbmsKKyAqCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBv
ZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp
cyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVD
VCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBfV0lOMzIKKyNpbmNsdWRlIDx3aW5zb2Nr
Mi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk
ZSA8Y3J0ZGJnLmg+CisjaW5jbHVkZSA8c3lzL3RpbWViLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5
cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0
Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDxwdGhyZWFkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg
PHNpZ25hbC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNp
ZmRlZiBMSU5VWAorI2luY2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0
cC5oPgorI2luY2x1ZGUgInByb2dyYW1zX2hlbHBlci5oIgorCisjZGVmaW5lIFRTQ1RQX0NMSUVO
VCAxCisjZGVmaW5lIFRTQ1RQX1NFUlZFUiAyCisKKyNkZWZpbmUgREVGQVVMVF9MRU5HVEggICAg
ICAgICAgICAgMTAyNAorI2RlZmluZSBERUZBVUxUX05VTUJFUl9PRl9NRVNTQUdFUyAxMDI0Cisj
ZGVmaW5lIERFRkFVTFRfUE9SVCAgICAgICAgICAgICAgIDUwMDEKKyNkZWZpbmUgQlVGRkVSU0la
RSAgICAgICAgICAgICAgICAgKDE8PDE2KQorCitzdGF0aWMgaW50IHBhcl92ZXJib3NlID0gMDsK
K3N0YXRpYyBpbnQgcGFyX3ZlcnlfdmVyYm9zZSA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IGRv
bmUgPSAwOworCitzdHJ1Y3QgdHNjdHBfbWV0YSB7CisJdWludDhfdCBwYXJfcm9sZTsKKwl1aW50
OF90IHBhcl9zdGF0c19odW1hbjsKKwl1aW50OF90IHBhcl9vcmRlcmVkOworCXVpbnQ2NF90IHBh
cl9tZXNzYWdlczsKKwl1aW50NjRfdCBwYXJfbWVzc2FnZV9sZW5ndGg7CisJdWludDY0X3QgcGFy
X3J1bnRpbWU7CisKKwl1aW50NjRfdCBzdGF0X21lc3NhZ2VzOworCXVpbnQ2NF90IHN0YXRfbWVz
c2FnZV9sZW5ndGg7CisJdWludDY0X3Qgc3RhdF9ub3RpZmljYXRpb25zOworCXVpbnQ2NF90IHN0
YXRfcmVjdl9jYWxsczsKKwlzdHJ1Y3QgdGltZXZhbCBzdGF0X3N0YXJ0OworCisJdWludDY0X3Qg
c3RhdF9mcmFnbWVudF9zdW07CisKKwljaGFyICpidWZmZXI7Cit9OworCisjaWZuZGVmIHRpbWVy
c3ViCisjZGVmaW5lIHRpbWVyc3ViKHR2cCwgdXZwLCB2dnApICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKwkJKHZ2cCktPnR2X3NlYyA9ICh0dnApLT50dl9zZWMgLSAo
dXZwKS0+dHZfc2VjOyAgICBcCisJCSh2dnApLT50dl91c2VjID0gKHR2cCktPnR2X3VzZWMgLSAo
dXZwKS0+dHZfdXNlYzsgXAorCQlpZiAoKHZ2cCktPnR2X3VzZWMgPCAwKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKwkJCSh2dnApLT50dl9zZWMtLTsgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKwkJCSh2dnApLT50dl91c2VjICs9IDEwMDAwMDA7ICAgICAgICAgICAgICAgIFwKKwkJ
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSB3
aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCitzdGF0aWMgdm9pZAorZ2V0dGltZW9m
ZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgdm9pZCAqaWdub3JlKQoreworCUZJTEVUSU1FIGZpbGV0
aW1lOworCVVMQVJHRV9JTlRFR0VSIHVsYXJnZTsKKworCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1l
KCZmaWxldGltZSk7CisJdWxhcmdlLkxvd1BhcnQgPSBmaWxldGltZS5kd0xvd0RhdGVUaW1lOwor
CXVsYXJnZS5IaWdoUGFydCA9IGZpbGV0aW1lLmR3SGlnaERhdGVUaW1lOworCS8qIENoYW5nZSBi
YXNlIGZyb20gSmFuIDEgMTYwMSAwMDowMDowMCB0byBKYW4gMSAxOTcwIDAwOjAwOjAwICovCisj
aWYgZGVmaW5lZChfX01JTkdXMzJfXykKKwl1bGFyZ2UuUXVhZFBhcnQgLT0gMTE2NDQ0NzM2MDAw
MDAwMDAwVUxMOworI2Vsc2UKKwl1bGFyZ2UuUXVhZFBhcnQgLT0gMTE2NDQ0NzM2MDAwMDAwMDAw
VUk2NDsKKyNlbmRpZgorCS8qCisJICogdWxhcmdlLlF1YWRQYXJ0IGlzIG5vdyB0aGUgbnVtYmVy
IG9mIDEwMC1uYW5vc2Vjb25kIGludGVydmFscworCSAqIHNpbmNlIEphbiAxIDE5NzAgMDA6MDA6
MDAuCisJICovCisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKwl0di0+dHZfc2VjID0gKGxvbmcp
KHVsYXJnZS5RdWFkUGFydCAvIDEwMDAwMDAwVUxMKTsKKwl0di0+dHZfdXNlYyA9IChsb25nKSgo
dWxhcmdlLlF1YWRQYXJ0ICUgMTAwMDAwMDBVTEwpIC8gMTBVTEwpOworI2Vsc2UKKwl0di0+dHZf
c2VjID0gKGxvbmcpKHVsYXJnZS5RdWFkUGFydCAvIDEwMDAwMDAwVUk2NCk7CisJdHYtPnR2X3Vz
ZWMgPSAobG9uZykoKHVsYXJnZS5RdWFkUGFydCAlIDEwMDAwMDAwVUk2NCkgLyAxMFVJNjQpOwor
I2VuZGlmCit9CisjZW5kaWYKKworCitjaGFyIFVzYWdlW10gPQorIlVzYWdlOiB0c2N0cCBbb3B0
aW9uc10gW2FkZHJlc3NdXG4iCisiT3B0aW9uczpcbiIKKyIgICAgICAgIC1hICAgICAgICAgICAg
IHNldCBhZGFwdGF0aW9uIGxheWVyIGluZGljYXRpb25cbiIKKyIgICAgICAgIC1FICAgICAgICAg
ICAgIGxvY2FsIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnQgKGRlZmF1bHQgOTg5OSlcbiIKKyIgICAg
ICAgIC1mICAgICAgICAgICAgIGZyYWdtZW50YXRpb24gcG9pbnRcbiIKKyIgICAgICAgIC1IICAg
ICAgICAgICAgIGh1bWFuIHJlYWRhYmxlIHN0YXRpc3RpY3MiCisiICAgICAgICAtbCAgICAgICAg
ICAgICBtZXNzYWdlIGxlbmd0aFxuIgorIiAgICAgICAgLUwgICAgICAgICAgICAgYmluZCB0byBs
b2NhbCBJUCAoZGVmYXVsdCBJTkFERFJfQU5ZKVxuIgorIiAgICAgICAgLW4gICAgICAgICAgICAg
bnVtYmVyIG9mIG1lc3NhZ2VzIHNlbnQgKDAgbWVhbnMgaW5maW5pdGUpL3JlY2VpdmVkXG4iCisi
ICAgICAgICAtRCAgICAgICAgICAgICB0dXJucyBOYWdsZSBvZmZcbiIKKyIgICAgICAgIC1SICAg
ICAgICAgICAgIHNvY2tldCByZWN2IGJ1ZmZlclxuIgorIiAgICAgICAgLVMgICAgICAgICAgICAg
c29ja2V0IHNlbmQgYnVmZmVyXG4iCisiICAgICAgICAtVCAgICAgICAgICAgICB0aW1lIHRvIHNl
bmQgbWVzc2FnZXNcbiIKKyIgICAgICAgIC11ICAgICAgICAgICAgIHVzZSB1bm9yZGVyZWQgdXNl
ciBtZXNzYWdlc1xuIgorIiAgICAgICAgLVUgICAgICAgICAgICAgcmVtb3RlIFVEUCBlbmNhcHN1
bGF0aW9uIHBvcnRcbiIKKyIgICAgICAgIC12ICAgICAgICAgICAgIHZlcmJvc2VcbiIKKyIgICAg
ICAgIC1WICAgICAgICAgICAgIHZlcnkgdmVyYm9zZVxuIgorOworCitzdGF0aWMgdm9pZCBoYW5k
bGVfdXBjYWxsKHN0cnVjdCBzb2NrZXQgKnVwY2FsbF9zb2NrZXQsIHZvaWQgKnVwY2FsbF9kYXRh
LCBpbnQgdXBjYWxsX2ZsYWdzKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmJ5dGVzMmh1bWFuKHVp
bnQ2NF90IGJ5dGVzKQoreworCWNoYXIgKnN1ZmZpeFtdID0geyIiLCAiSyIsICJNIiwgIkciLCAi
VCJ9OworCWNoYXIgc3VmZml4X2xlbmd0aCA9IHNpemVvZihzdWZmaXgpIC8gc2l6ZW9mKHN1ZmZp
eFswXSk7CisJaW50IGkgPSAwOworCWRvdWJsZSBodW1hbl9zaXplID0gYnl0ZXM7CisJc3RhdGlj
IGNoYXIgb3V0cHV0WzIwMF07CisKKwlpZiAoYnl0ZXMgPiAxMDI0KSB7CisJCWZvciAoaSA9IDA7
IChieXRlcyAvIDEwMjQpID4gMCAmJiBpIDwgc3VmZml4X2xlbmd0aCAtIDE7IGkrKykgeworCQkJ
aHVtYW5fc2l6ZSA9IGJ5dGVzIC8gMTAyNC4wOworCQkJYnl0ZXMgLz0gMTAyNDsKKwkJfQorCX0K
KworCWlmIChzbnByaW50ZihvdXRwdXQsIHNpemVvZihvdXRwdXQpLCAiJS4wMmxmICVzIiwgaHVt
YW5fc2l6ZSwgc3VmZml4W2ldKSA8IDApIHsKKwkJb3V0cHV0WzBdID0gJ1wwJzsKKwl9CisJcmV0
dXJuIG91dHB1dDsKK30KKworCitzdGF0aWMgdm9pZAoraGFuZGxlX2FjY2VwdChzdHJ1Y3Qgc29j
a2V0ICp1cGNhbGxfc29ja2V0LCB2b2lkICp1cGNhbGxfZGF0YSwgaW50IHVwY2FsbF9mbGFncykK
K3sKKwlzdHJ1Y3Qgc29ja2V0ICpjb25uX3NvY2s7CisJc3RydWN0IHNvY2thZGRyX2luIHJlbW90
ZV9hZGRyOworCXNvY2tsZW5fdCBhZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
OworCXN0cnVjdCB0c2N0cF9tZXRhICptZXRhX2xpc3RlbmluZywgKm1ldGFfYWNjZXB0ZWQ7CisJ
Y2hhciBhZGRyYnVmW0lORVRfQUREUlNUUkxFTl07CisKKwltZXRhX2xpc3RlbmluZyA9IChzdHJ1
Y3QgdHNjdHBfbWV0YSAqKSB1cGNhbGxfZGF0YTsKKworCW1lbXNldCgmcmVtb3RlX2FkZHIsIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlpZiAoKChjb25uX3NvY2sgPSB1c3JzY3Rw
X2FjY2VwdCh1cGNhbGxfc29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopICZyZW1vdGVfYWRkciwg
JmFkZHJfbGVuKSkgPT0gTlVMTCkgJiYgKGVycm5vICE9IEVJTlBST0dSRVNTKSkgeworCQlwZXJy
b3IoInVzcnNjdHBfYWNjZXB0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlpZiAo
cGFyX3ZlcmJvc2UpIHsKKwkJcHJpbnRmKCJDb25uZWN0aW9uIGFjY2VwdGVkIGZyb20gJXM6JWRc
biIsIGluZXRfbnRvcChBRl9JTkVULCAmKHJlbW90ZV9hZGRyLnNpbl9hZGRyKSwgYWRkcmJ1Ziwg
SU5FVF9BRERSU1RSTEVOKSwgbnRvaHMocmVtb3RlX2FkZHIuc2luX3BvcnQpKTsKKwl9CisKKwlt
ZXRhX2FjY2VwdGVkID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHNjdHBfbWV0YSkpOworCWlmICgh
bWV0YV9hY2NlcHRlZCkgeworCQlwcmludGYoIm1hbGxvYygpIGZhaWxlZCFcbiIpOworCQlleGl0
KEVYSVRfRkFJTFVSRSk7CisJfQorCisJbWVtc2V0KG1ldGFfYWNjZXB0ZWQsIDAsIHNpemVvZihz
dHJ1Y3QgdHNjdHBfbWV0YSkpOworCisJbWV0YV9hY2NlcHRlZC0+cGFyX3JvbGUgPSBtZXRhX2xp
c3RlbmluZy0+cGFyX3JvbGU7CisJbWV0YV9hY2NlcHRlZC0+cGFyX3N0YXRzX2h1bWFuID0gbWV0
YV9saXN0ZW5pbmctPnBhcl9zdGF0c19odW1hbjsKKwltZXRhX2FjY2VwdGVkLT5idWZmZXIgPSBt
YWxsb2MoQlVGRkVSU0laRSk7CisKKwlpZiAoIW1ldGFfYWNjZXB0ZWQtPmJ1ZmZlcikgeworCQlw
cmludGYoIm1hbGxvYygpIGZhaWxlZCFcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQor
CisJdXNyc2N0cF9zZXRfdXBjYWxsKGNvbm5fc29jaywgaGFuZGxlX3VwY2FsbCwgbWV0YV9hY2Nl
cHRlZCk7Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfdXBjYWxsKHN0cnVjdCBzb2NrZXQgKnVw
Y2FsbF9zb2NrZXQsIHZvaWQgKnVwY2FsbF9kYXRhLCBpbnQgdXBjYWxsX2ZsYWdzKQoreworCWlu
dCBldmVudHMgPSB1c3JzY3RwX2dldF9ldmVudHModXBjYWxsX3NvY2tldCk7CisJc3RydWN0IHRz
Y3RwX21ldGEqIHRzY3RwX21ldGEgPSAoc3RydWN0IHRzY3RwX21ldGEqKSB1cGNhbGxfZGF0YTsK
KworCXN0cnVjdCBzY3RwX3JlY3Z2X3JuIHJuOworCXNzaXplX3QgbjsKKwlzdHJ1Y3Qgc29ja2Fk
ZHJfc3RvcmFnZSBhZGRyOworCWludCByZWN2X2ZsYWdzID0gMDsKKwlzb2NrbGVuX3QgbGVuID0g
KHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpOworCXVuc2lnbmVkIGlu
dCBpbmZvdHlwZSA9IDA7CisJc29ja2xlbl90IGluZm9sZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBf
cmVjdnZfcm4pOworCXN0cnVjdCBzY3RwX3JjdmluZm8gKnJjdmluZm8gPSAoc3RydWN0IHNjdHBf
cmN2aW5mbyAqKSAmcm47CisJbWVtc2V0KCZybiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2
X3JuKSk7CisJc3RydWN0IHRpbWV2YWwgbm90ZV90aW1lOworCXVuaW9uIHNjdHBfbm90aWZpY2F0
aW9uICpzbnA7CisJc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlICpzcGM7CisJc3RydWN0IHRpbWV2
YWwgdGltZV9ub3c7CisJc3RydWN0IHRpbWV2YWwgdGltZV9kaWZmOworCWZsb2F0IHNlY29uZHM7
CisJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRfaW5mbzsKKworCWlmIChldmVudHMgJiBTQ1RQX0VW
RU5UX1JFQUQpIHsKKwkJd2hpbGUgKChuID0gdXNyc2N0cF9yZWN2dih1cGNhbGxfc29ja2V0LCB0
c2N0cF9tZXRhLT5idWZmZXIsIEJVRkZFUlNJWkUsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIs
ICZsZW4sICh2b2lkICopJnJuLCAmaW5mb2xlbiwgJmluZm90eXBlLCAmcmVjdl9mbGFncykpID4g
MCkgeworCisJCQlpZiAoIXRzY3RwX21ldGEtPnN0YXRfcmVjdl9jYWxscykgeworCQkJCWdldHRp
bWVvZmRheSgmdHNjdHBfbWV0YS0+c3RhdF9zdGFydCwgTlVMTCk7CisJCQl9CisJCQl0c2N0cF9t
ZXRhLT5zdGF0X3JlY3ZfY2FsbHMrKzsKKworCQkJaWYgKHJlY3ZfZmxhZ3MgJiBNU0dfTk9USUZJ
Q0FUSU9OKSB7CisJCQkJdHNjdHBfbWV0YS0+c3RhdF9ub3RpZmljYXRpb25zKys7CisJCQkJZ2V0
dGltZW9mZGF5KCZub3RlX3RpbWUsIE5VTEwpOworCQkJCWlmIChwYXJfdmVyYm9zZSkgeworCQkJ
CQlwcmludGYoIm5vdGlmaWNhdGlvbiBhcnJpdmVkIGF0ICVmXG4iLCBub3RlX3RpbWUudHZfc2Vj
ICsgKGRvdWJsZSlub3RlX3RpbWUudHZfdXNlYyAvIDEwMDAwMDAuMCk7CisKKwkJCQkJc25wID0g
KHVuaW9uIHNjdHBfbm90aWZpY2F0aW9uICopdHNjdHBfbWV0YS0+YnVmZmVyOworCQkJCQlpZiAo
c25wLT5zbl9oZWFkZXIuc25fdHlwZSA9PSBTQ1RQX1BFRVJfQUREUl9DSEFOR0UpIHsKKwkJCQkJ
CXNwYyA9ICZzbnAtPnNuX3BhZGRyX2NoYW5nZTsKKwkJCQkJCXByaW50ZigiU0NUUF9QRUVSX0FE
RFJfQ0hBTkdFOiBzdGF0ZT0ldSwgZXJyb3I9JXVcbiIsc3BjLT5zcGNfc3RhdGUsIHNwYy0+c3Bj
X2Vycm9yKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKHBhcl92ZXJ5X3Zl
cmJvc2UpIHsKKwkJCQkJaWYgKGluZm90eXBlID09IFNDVFBfUkVDVlZfUkNWSU5GTykgeworCQkJ
CQkJcHJpbnRmKCJNZXNzYWdlIHJlY2VpdmVkIC0gJXpkIGJ5dGVzIC0gJXMgLSBzaWQgJXUgLSB0
c24gJXUgJXNcbiIsCisJCQkJCQkJbiwKKwkJCQkJCQkocmN2aW5mby0+cmN2X2ZsYWdzICYgU0NU
UF9VTk9SREVSRUQpID8gInVub3JkZXJlZCIgOiAib3JkZXJlZCIsCisJCQkJCQkJcmN2aW5mby0+
cmN2X3NpZCwKKwkJCQkJCQlyY3ZpbmZvLT5yY3ZfdHNuLAorCQkJCQkJCShyZWN2X2ZsYWdzICYg
TVNHX0VPUikgPyAiLSBFT1IiIDogIiIKKwkJCQkJCSk7CisKKwkJCQkJfSBlbHNlIHsKKwkJCQkJ
CXByaW50ZigiTWVzc2FnZSByZWNlaXZlZCAtICV6ZCBieXRlcyAlc1xuIiwgbiwgKHJlY3ZfZmxh
Z3MgJiBNU0dfRU9SKSA/ICItIEVPUiIgOiAiIik7CisJCQkJCX0KKwkJCQl9CisJCQkJdHNjdHBf
bWV0YS0+c3RhdF9mcmFnbWVudF9zdW0gKz0gbjsKKwkJCQlpZiAocmVjdl9mbGFncyAmIE1TR19F
T1IpIHsKKwkJCQkJdHNjdHBfbWV0YS0+c3RhdF9tZXNzYWdlcysrOworCQkJCQlpZiAodHNjdHBf
bWV0YS0+c3RhdF9tZXNzYWdlX2xlbmd0aCA9PSAwKSB7CisJCQkJCQl0c2N0cF9tZXRhLT5zdGF0
X21lc3NhZ2VfbGVuZ3RoID0gdHNjdHBfbWV0YS0+c3RhdF9mcmFnbWVudF9zdW07CisJCQkJCX0K
KwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAobiA8IDAgJiYgZXJybm8gIT0gRUFHQUlOICYmIGVy
cm5vICE9IEVXT1VMREJMT0NLKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfcmVjdnYiKTsKKwkJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCisJCWlmIChuID09IDApIHsKKwkJCWRvbmUgPSAxOwor
CisJCQlnZXR0aW1lb2ZkYXkoJnRpbWVfbm93LCBOVUxMKTsKKwkJCXRpbWVyc3ViKCZ0aW1lX25v
dywgJnRzY3RwX21ldGEtPnN0YXRfc3RhcnQsICZ0aW1lX2RpZmYpOworCQkJc2Vjb25kcyA9IHRp
bWVfZGlmZi50dl9zZWMgKyAoZG91YmxlKXRpbWVfZGlmZi50dl91c2VjIC8gMTAwMDAwMC4wOwor
CisJCQlpZiAodHNjdHBfbWV0YS0+cGFyX3N0YXRzX2h1bWFuKSB7CisJCQkJcHJpbnRmKCJDb25u
ZWN0aW9uIGNsb3NlZCAtIHN0YXRpc3RpY3NcbiIpOworCisJCQkJcHJpbnRmKCJcdG1lc3NhZ2Ug
c2l6ZSAgOiAlIiBQUkl1NjQgIlxuIiwgdHNjdHBfbWV0YS0+c3RhdF9tZXNzYWdlX2xlbmd0aCk7
CisJCQkJcHJpbnRmKCJcdG1lc3NhZ2VzICAgICAgOiAlIiBQUkl1NjQgIlxuIiwgdHNjdHBfbWV0
YS0+c3RhdF9tZXNzYWdlcyk7CisJCQkJcHJpbnRmKCJcdHJlY3YoKSBjYWxscyAgOiAlIiBQUkl1
NjQgIlxuIiwgdHNjdHBfbWV0YS0+c3RhdF9yZWN2X2NhbGxzKTsKKwkJCQlwcmludGYoIlx0bm90
aWZpY2F0aW9ucyA6ICUiIFBSSXU2NCAiXG4iLCB0c2N0cF9tZXRhLT5zdGF0X25vdGlmaWNhdGlv
bnMpOworCQkJCXByaW50ZigiXHR0cmFuc2ZlcnJlZCAgIDogJXNCeXRlXG4iLCBieXRlczJodW1h
bih0c2N0cF9tZXRhLT5zdGF0X21lc3NhZ2VfbGVuZ3RoICogdHNjdHBfbWV0YS0+c3RhdF9tZXNz
YWdlcykpOworCQkJCXByaW50ZigiXHRydW50aW1lICAgICAgIDogJS4yZiBzXG4iLCBzZWNvbmRz
KTsKKwkJCQlwcmludGYoIlx0Z29vZHB1dCAgICAgICA6ICVzQml0L3NcbiIsIGJ5dGVzMmh1bWFu
KChkb3VibGUpIHRzY3RwX21ldGEtPnN0YXRfbWVzc2FnZV9sZW5ndGggKiAoZG91YmxlKSB0c2N0
cF9tZXRhLT5zdGF0X21lc3NhZ2VzIC8gc2Vjb25kcyAqIDgpKTsKKworCQkJfSBlbHNlIHsKKwkJ
CQlwcmludGYoIiUiIFBSSXU2NCAiLCAlIiBQUkl1NjQgIiwgJSIgUFJJdTY0ICIsICUiIFBSSXU2
NCAiLCAlZiwgJWYsICUiIFBSSXU2NCAiXG4iLAorCQkJCQkJdHNjdHBfbWV0YS0+c3RhdF9tZXNz
YWdlX2xlbmd0aCwKKwkJCQkJCXRzY3RwX21ldGEtPnN0YXRfbWVzc2FnZXMsCisJCQkJCQl0c2N0
cF9tZXRhLT5zdGF0X3JlY3ZfY2FsbHMsCisJCQkJCQl0c2N0cF9tZXRhLT5zdGF0X21lc3NhZ2Vf
bGVuZ3RoICogdHNjdHBfbWV0YS0+c3RhdF9tZXNzYWdlcywKKwkJCQkJCXNlY29uZHMsCisJCQkJ
CQkoZG91YmxlKSB0c2N0cF9tZXRhLT5zdGF0X21lc3NhZ2VfbGVuZ3RoICogKGRvdWJsZSkgdHNj
dHBfbWV0YS0+c3RhdF9tZXNzYWdlcyAvIHNlY29uZHMsCisJCQkJCQl0c2N0cF9tZXRhLT5zdGF0
X25vdGlmaWNhdGlvbnMpOworCQkJfQorCQkJZmZsdXNoKHN0ZG91dCk7CisJCQl1c3JzY3RwX2Ns
b3NlKHVwY2FsbF9zb2NrZXQpOworCisJCQlmcmVlKHRzY3RwX21ldGEtPmJ1ZmZlcik7CisJCQlm
cmVlKHRzY3RwX21ldGEpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKChldmVudHMgJiBT
Q1RQX0VWRU5UX1dSSVRFKSAmJiB0c2N0cF9tZXRhLT5wYXJfcm9sZSA9PSBUU0NUUF9DTElFTlQg
JiYgIWRvbmUpIHsKKworCQltZW1zZXQoJnNuZF9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBf
c25kaW5mbykpOworCQlpZiAodHNjdHBfbWV0YS0+cGFyX29yZGVyZWQgPT0gMCkgeworCQkJc25k
X2luZm8uc25kX2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOworCQl9CisKKwkJd2hpbGUgKChuID0g
dXNyc2N0cF9zZW5kdih1cGNhbGxfc29ja2V0LCB0c2N0cF9tZXRhLT5idWZmZXIsIHRzY3RwX21l
dGEtPnBhcl9tZXNzYWdlX2xlbmd0aCwgTlVMTCwgMCwgJnNuZF9pbmZvLCAoc29ja2xlbl90KXNp
emVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZPLCAwKSkgPiAwKSB7
CisJCQlpZiAodHNjdHBfbWV0YS0+c3RhdF9tZXNzYWdlcyA9PSAwKSB7CisJCQkJZ2V0dGltZW9m
ZGF5KCZ0c2N0cF9tZXRhLT5zdGF0X3N0YXJ0LCBOVUxMKTsKKwkJCX0KKwkJCXRzY3RwX21ldGEt
PnN0YXRfbWVzc2FnZXMrKzsKKworCQkJaWYgKHBhcl92ZXJ5X3ZlcmJvc2UpIHsKKwkJCQlwcmlu
dGYoIk1lc3NhZ2UgIyUiIFBSSXU2NCAiIHNlbnRcbiIsIHRzY3RwX21ldGEtPnN0YXRfbWVzc2Fn
ZXMpOworCQkJfQorCisJCQlpZiAodHNjdHBfbWV0YS0+cGFyX21lc3NhZ2VzICYmIHRzY3RwX21l
dGEtPnBhcl9tZXNzYWdlcyA9PSB0c2N0cF9tZXRhLT5zdGF0X21lc3NhZ2VzKSB7CisJCQkJYnJl
YWs7CisJCQl9CisJCX0KKworCQlpZiAoZXJybm8gIT0gRUFHQUlOICYmIGVycm5vICE9IEVXT1VM
REJMT0NLKSB7CisJCQlkb25lID0gMTsKKwkJCXVzcnNjdHBfY2xvc2UodXBjYWxsX3NvY2tldCk7
CisJCQlwcmludGYoImNsaWVudCBzb2NrZXQgJXAgY2xvc2VkXG4iLCAodm9pZCAqKXVwY2FsbF9z
b2NrZXQpOworCQkJZnJlZSh0c2N0cF9tZXRhLT5idWZmZXIpOworCQkJZnJlZSh0c2N0cF9tZXRh
KTsKKwkJCXJldHVybjsKKwkJfQorCisJCWdldHRpbWVvZmRheSgmdGltZV9ub3csIE5VTEwpOwor
CQl0aW1lcnN1YigmdGltZV9ub3csICZ0c2N0cF9tZXRhLT5zdGF0X3N0YXJ0LCAmdGltZV9kaWZm
KTsKKwkJc2Vjb25kcyA9IHRpbWVfZGlmZi50dl9zZWMgKyAoZG91YmxlKXRpbWVfZGlmZi50dl91
c2VjIC8gMTAwMDAwMC4wOworCisJCWlmICgodHNjdHBfbWV0YS0+cGFyX21lc3NhZ2VzICYmIHRz
Y3RwX21ldGEtPnBhcl9tZXNzYWdlcyA9PSB0c2N0cF9tZXRhLT5zdGF0X21lc3NhZ2VzKSB8fAor
CQkJKHRzY3RwX21ldGEtPnBhcl9ydW50aW1lICYmIHRzY3RwX21ldGEtPnBhcl9ydW50aW1lIDw9
IHNlY29uZHMpKSB7CisKKwkJCWlmIChwYXJfdmVyYm9zZSkgeworCQkJCXByaW50ZigiUnVudGlt
ZSBvciBtYXggbWVzc2FnZXMgcmVhY2hlZCAtIGZpbmlzaGluZy4uLlxuIik7CisJCQl9CisKKwkJ
CWRvbmUgPSAxOworCQkJdXNyc2N0cF9jbG9zZSh1cGNhbGxfc29ja2V0KTsKKwkJCWZyZWUodHNj
dHBfbWV0YS0+YnVmZmVyKTsKKwkJCWZyZWUodHNjdHBfbWV0YSk7CisJCQlyZXR1cm47CisJCX0K
Kwl9CisKKwlyZXR1cm47Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sK
KyNpZm5kZWYgX1dJTjMyCisJaW50IGM7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0ICpwc29jayA9
IE5VTEw7CisJc3RydWN0IHNvY2thZGRyX2luIGxvY2FsX2FkZHI7CisJc3RydWN0IHNvY2thZGRy
X2luIHJlbW90ZV9hZGRyOworCWludCBvcHR2YWw7CisJdWludDE2X3QgbG9jYWxfcG9ydDsKKwl1
aW50MTZfdCByZW1vdGVfcG9ydDsKKwl1aW50MTZfdCBsb2NhbF91ZHBfcG9ydDsKKwl1aW50MTZf
dCByZW1vdGVfdWRwX3BvcnQ7CisJaW50IHJjdmJ1ZnNpemUgPSAwOworCWludCBzbmRidWZzaXpl
ID0gMDsKKwlzb2NrbGVuX3QgaW50bGVuOworCWludCBub2RlbGF5ID0gMDsKKwlzdHJ1Y3Qgc2N0
cF9hc3NvY192YWx1ZSBhdjsKKwlzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBzOworCXN0cnVj
dCB0c2N0cF9tZXRhICptZXRhOworCisJdWludDE2X3QgcGFyX3BvcnQgPSBERUZBVUxUX1BPUlQ7
CisJdWludDhfdCBwYXJfc3RhdHNfaHVtYW4gPSAwOworCWludCBwYXJfb3JkZXJlZCA9IDE7CisJ
aW50IHBhcl9tZXNzYWdlX2xlbmd0aCA9IERFRkFVTFRfTEVOR1RIOworCWludCBwYXJfbWVzc2Fn
ZXMgPSBERUZBVUxUX05VTUJFUl9PRl9NRVNTQUdFUzsKKwlpbnQgcGFyX3J1bnRpbWUgPSAwOwor
CisjaWZkZWYgX1dJTjMyCisJdW5zaWduZWQgbG9uZyBzcmNfYWRkcjsKKyNlbHNlCisJaW5fYWRk
cl90IHNyY19hZGRyOworI2VuZGlmCisJaW50IGZyYWdwb2ludCA9IDA7CisJc3RydWN0IHNjdHBf
c2V0YWRhcHRhdGlvbiBpbmQgPSB7MH07CisjaWZkZWYgX1dJTjMyCisJY2hhciAqb3B0OworCWlu
dCBvcHRpbmQ7CisjZW5kaWYKKworCXJlbW90ZV91ZHBfcG9ydCA9IDA7CisJbG9jYWxfdWRwX3Bv
cnQgPSA5ODk5OworCXNyY19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisKKwltZW1zZXQoKHZv
aWQgKikgJnJlbW90ZV9hZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJbWVt
c2V0KCh2b2lkICopICZsb2NhbF9hZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7
CisKKyNpZm5kZWYgX1dJTjMyCisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJhOkRF
OmY6SGw6TDpuOnA6UjpTOlQ6dVU6dlYiKSkgIT0gLTEpCisJCXN3aXRjaChjKSB7CisJCQljYXNl
ICdhJzoKKwkJCQlpbmQuc3NiX2FkYXB0YXRpb25faW5kID0gYXRvaShvcHRhcmcpOworCQkJCWJy
ZWFrOworCQkJY2FzZSAnRCc6CisJCQkJbm9kZWxheSA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNl
ICdFJzoKKwkJCQlsb2NhbF91ZHBfcG9ydCA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJ
CWNhc2UgJ2YnOgorCQkJCWZyYWdwb2ludCA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJ
CWNhc2UgJ0gnOgorCQkJCXBhcl9zdGF0c19odW1hbiA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNl
ICdsJzoKKwkJCQlwYXJfbWVzc2FnZV9sZW5ndGggPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7
CisJCQljYXNlICdMJzoKKwkJCQlpZiAoaW5ldF9wdG9uKEFGX0lORVQsIG9wdGFyZywgJnNyY19h
ZGRyKSAhPSAxKSB7CisJCQkJCXByaW50ZigiQ2FuJ3QgcGFyc2UgJXNcbiIsIG9wdGFyZyk7CisJ
CQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoK
KwkJCQlwYXJfbWVzc2FnZXMgPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdw
JzoKKwkJCQlwYXJfcG9ydCA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1In
OgorCQkJCXJjdmJ1ZnNpemUgPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdT
JzoKKwkJCQlzbmRidWZzaXplID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAn
VCc6CisJCQkJcGFyX3J1bnRpbWUgPSBhdG9pKG9wdGFyZyk7CisJCQkJcGFyX21lc3NhZ2VzID0g
MDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3UnOgorCQkJCXBhcl9vcmRlcmVkID0gMDsKKwkJCQli
cmVhazsKKwkJCWNhc2UgJ1UnOgorCQkJCXJlbW90ZV91ZHBfcG9ydCA9IGF0b2kob3B0YXJnKTsK
KwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCXBhcl92ZXJib3NlID0gMTsKKwkJCQlicmVh
azsKKwkJCWNhc2UgJ1YnOgorCQkJCXBhcl92ZXJib3NlID0gMTsKKwkJCQlwYXJfdmVyeV92ZXJi
b3NlID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZnByaW50ZihzdGRlcnIsICIl
cyIsIFVzYWdlKTsKKwkJCQlleGl0KDEpOworCQl9CisjZWxzZQorCWZvciAob3B0aW5kID0gMTsg
b3B0aW5kIDwgYXJnYzsgb3B0aW5kKyspIHsKKwkJaWYgKGFyZ3Zbb3B0aW5kXVswXSA9PSAnLScp
IHsKKwkJCXN3aXRjaCAoYXJndltvcHRpbmRdWzFdKSB7CisJCQkJY2FzZSAnYSc6CisJCQkJCWlm
ICgrK29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJ
ZXhpdCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCWluZC5zc2Jf
YWRhcHRhdGlvbl9pbmQgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ0QnOgor
CQkJCQlub2RlbGF5ID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnRSc6CisJCQkJCWlmICgr
K29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhp
dCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCWxvY2FsX3VkcF9w
b3J0ID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdmJzoKKwkJCQkJaWYgKCsr
b3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQlleGl0
KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJZnJhZ3BvaW50ID0g
YXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdIJzoKKwkJCQkJcGFyX3N0YXRzX2h1
bWFuID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnbCc6CisJCQkJCWlmICgrK29wdGluZCA+
PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhpdCgxKTsKKwkJ
CQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCXBhcl9tZXNzYWdlX2xlbmd0aCA9
IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnTCc6CisJCQkJCWlmICgrK29wdGlu
ZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhpdCgxKTsK
KwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCWluZXRfcHRvbihBRl9JTkVU
LCBvcHQsICZzcmNfYWRkcik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ24nOgorCQkJCQlpZiAo
KytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKKwkJCQkJCWV4
aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJCQlwYXJfbWVzc2Fn
ZXMgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ3AnOgorCQkJCQlpZiAoKytv
cHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKKwkJCQkJCWV4aXQo
MSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJCQlwYXJfcG9ydCA9IGF0
b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnUic6CisJCQkJCWlmICgrK29wdGluZCA+
PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhpdCgxKTsKKwkJ
CQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCXJjdmJ1ZnNpemUgPSBhdG9pKG9w
dCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ1MnOgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJn
YykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0K
KwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJCQlzbmRidWZzaXplID0gYXRvaShvcHQpOwor
CQkJCQlicmVhazsKKwkJCQljYXNlICdUJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsK
KwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJ
CW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJcGFyX3J1bnRpbWUgPSBhdG9pKG9wdCk7CisJCQkJ
CXBhcl9tZXNzYWdlcyA9IDA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ3UnOgorCQkJCQlwYXJf
b3JkZXJlZCA9IDA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ1UnOgorCQkJCQlpZiAoKytvcHRp
bmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKKwkJCQkJCWV4aXQoMSk7
CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJCQlyZW1vdGVfdWRwX3BvcnQg
PSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ3YnOgorCQkJCQlwYXJfdmVyYm9z
ZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ1YnOgorCQkJCQlwYXJfdmVyYm9zZSA9IDE7
CisJCQkJCXBhcl92ZXJ5X3ZlcmJvc2UgPSAxOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0Ogor
CQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQlleGl0KDEpOworCQkJfQorCQl9IGVsc2Ug
eworCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYKKworCW1ldGEgPSBtYWxsb2Moc2l6ZW9mKHN0
cnVjdCB0c2N0cF9tZXRhKSk7CisJaWYgKCFtZXRhKSB7CisJCXByaW50ZigibWFsbG9jKCkgZmFp
bGVkIVxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwltZW1zZXQobWV0YSwgMCwg
c2l6ZW9mKHN0cnVjdCB0c2N0cF9tZXRhKSk7CisKKwltZXRhLT5idWZmZXIgPSBtYWxsb2MoQlVG
RkVSU0laRSk7CisJaWYgKCFtZXRhLT5idWZmZXIpIHsKKwkJcHJpbnRmKCJtYWxsb2MoKSBmYWls
ZWQhXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCW1ldGEtPnBhcl9zdGF0c19o
dW1hbiA9IHBhcl9zdGF0c19odW1hbjsKKwltZXRhLT5wYXJfbWVzc2FnZV9sZW5ndGggPSBwYXJf
bWVzc2FnZV9sZW5ndGg7CisJbWV0YS0+cGFyX21lc3NhZ2VzID0gcGFyX21lc3NhZ2VzOworCW1l
dGEtPnBhcl9vcmRlcmVkID0gcGFyX29yZGVyZWQ7CisJbWV0YS0+cGFyX3J1bnRpbWUgPSBwYXJf
cnVudGltZTsKKworCWlmIChvcHRpbmQgPT0gYXJnYykgeworCQltZXRhLT5wYXJfcm9sZSA9IFRT
Q1RQX1NFUlZFUjsKKwkJbG9jYWxfcG9ydCA9IHBhcl9wb3J0OworCQlyZW1vdGVfcG9ydCA9IDA7
CisJfSBlbHNlIHsKKwkJbWV0YS0+cGFyX3JvbGUgPSBUU0NUUF9DTElFTlQ7CisJCWxvY2FsX3Bv
cnQgPSAwOworCQlyZW1vdGVfcG9ydCA9IHBhcl9wb3J0OworCX0KKwlsb2NhbF9hZGRyLnNpbl9m
YW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCWxvY2FsX2FkZHIuc2luX2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJbG9jYWxfYWRkci5zaW5f
cG9ydCA9IGh0b25zKGxvY2FsX3BvcnQpOworCWxvY2FsX2FkZHIuc2luX2FkZHIuc19hZGRyID0g
c3JjX2FkZHI7CisKKwl1c3JzY3RwX2luaXQobG9jYWxfdWRwX3BvcnQsIE5VTEwsIGRlYnVnX3By
aW50Zl9zdGFjayk7CisjaWZkZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3Rw
X2RlYnVnX29uKFNDVFBfREVCVUdfQUxMKTsKKyNlbmRpZgorCXVzcnNjdHBfc3lzY3RsX3NldF9z
Y3RwX2JsYWNraG9sZSgyKTsKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ub19jc3VtX29uX2xv
b3BiYWNrKDApOworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0
ZWx5KDEpOworCisJaWYgKCEocHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVULCBTT0NLX1NU
UkVBTSwgSVBQUk9UT19TQ1RQLCBOVUxMLCBOVUxMLCAwLCBOVUxMKSkpIHsKKwkJcGVycm9yKCJ1
c2VyX3NvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJb3B0dmFsID0gMTsK
KwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVDVlJD
VklORk8sICZvcHR2YWwsIHNpemVvZihvcHR2YWwpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3Rw
X3NldHNvY2tvcHQgU0NUUF9SRUNWUkNWSU5GTyIpOworCX0KKworCXVzcnNjdHBfc2V0X25vbl9i
bG9ja2luZyhwc29jaywgMSk7CisKKwlpZiAodXNyc2N0cF9iaW5kKHBzb2NrLCAoc3RydWN0IHNv
Y2thZGRyICopICZsb2NhbF9hZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gLTEp
IHsKKwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAodXNy
c2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfQURBUFRBVElPTl9MQVlF
UiwgKGNvbnN0IHZvaWQqKSZpbmQsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NldGFk
YXB0YXRpb24pKSA8IDApIHsKKwkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7CisJfQorCisJaWYgKG1l
dGEtPnBhcl9yb2xlID09IFRTQ1RQX1NFUlZFUikgeworCQlpZiAocmN2YnVmc2l6ZSkgeworCQkJ
aWYgKHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmcmN2
YnVmc2l6ZSwgc2l6ZW9mKGludCkpIDwgMCkgeworCQkJCXBlcnJvcigic2V0c29ja29wdDogcmN2
YnVmIik7CisJCQl9CisJCX0KKwkJaWYgKHBhcl92ZXJib3NlKSB7CisJCQlpbnRsZW4gPSBzaXpl
b2YoaW50KTsKKwkJCWlmICh1c3JzY3RwX2dldHNvY2tvcHQocHNvY2ssIFNPTF9TT0NLRVQsIFNP
X1JDVkJVRiwgJnJjdmJ1ZnNpemUsIChzb2NrbGVuX3QgKikmaW50bGVuKSA8IDApIHsKKwkJCQlw
ZXJyb3IoImdldHNvY2tvcHQ6IHJjdmJ1ZiIpOworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0
ZG91dCwgIlJlY2VpdmUgYnVmZmVyIHNpemU6ICVkLlxuIiwgcmN2YnVmc2l6ZSk7CisJCQl9CisJ
CX0KKworCQlpZiAodXNyc2N0cF9saXN0ZW4ocHNvY2ssIDEpIDwgMCkgeworCQkJcGVycm9yKCJ1
c3JzY3RwX2xpc3RlbiIpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisKKwkJdXNyc2N0
cF9zZXRfdXBjYWxsKHBzb2NrLCBoYW5kbGVfYWNjZXB0LCBtZXRhKTsKKworCQl3aGlsZSAoMSkg
eworI2lmZGVmIF9XSU4zMgorCQkJU2xlZXAoMTAwMCk7CisjZWxzZQorCQkJc2xlZXAoMSk7Cisj
ZW5kaWYKKwkJfQorCisJfSBlbHNlIHsKKwkJbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVvZihzdHJ1
Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9IEFG
X0lORVQ7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKHJlbW90ZV91ZHBfcG9ydCk7CisJCWlm
ICh1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQ
X0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCopJmVuY2FwcywgKHNvY2tsZW5fdClzaXplb2Yoc3Ry
dWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7CisJCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKKwkJ
fQorCisJCXJlbW90ZV9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lO
X0xFTgorCQlyZW1vdGVfYWRkci5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisjZW5kaWYKKwkJaWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndltvcHRpbmRdLCAmcmVtb3Rl
X2FkZHIuc2luX2FkZHIuc19hZGRyKSl7CisJCQlwcmludGYoImVycm9yOiBpbnZhbGlkIGRlc3Rp
bmF0aW9uIGFkZHJlc3NcbiIpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisJCXJlbW90
ZV9hZGRyLnNpbl9wb3J0ID0gaHRvbnMocmVtb3RlX3BvcnQpOworCisJCW1lbXNldChtZXRhLT5i
dWZmZXIsICdYJywgQlVGRkVSU0laRSk7CisKKwkJdXNyc2N0cF9zZXRfdXBjYWxsKHBzb2NrLCBo
YW5kbGVfdXBjYWxsLCBtZXRhKTsKKworCQl1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIElQUFJP
VE9fU0NUUCwgU0NUUF9OT0RFTEFZLCAmbm9kZWxheSwgc2l6ZW9mKG5vZGVsYXkpKTsKKworCQlp
ZiAoZnJhZ3BvaW50KSB7CisJCQlhdi5hc3NvY19pZCA9IDA7CisJCQlhdi5hc3NvY192YWx1ZSA9
IGZyYWdwb2ludDsKKwkJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIElQUFJPVE9fU0NU
UCwgU0NUUF9NQVhTRUcsICZhdiwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkgPCAw
KSB7CisJCQkJcGVycm9yKCJzZXRzb2Nrb3B0OiBTQ1RQX01BWFNFRyIpOworCQkJfQorCQl9CisK
KwkJaWYgKHNuZGJ1ZnNpemUpIHsKKwkJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIFNP
TF9TT0NLRVQsIFNPX1NOREJVRiwgJnNuZGJ1ZnNpemUsIHNpemVvZihpbnQpKSA8IDApIHsKKwkJ
CQlwZXJyb3IoInNldHNvY2tvcHQ6IHNuZGJ1ZiIpOworCQkJfQorCQl9CisKKwkJaWYgKHBhcl92
ZXJib3NlKSB7CisJCQlpbnRsZW4gPSBzaXplb2YoaW50KTsKKwkJCWlmICh1c3JzY3RwX2dldHNv
Y2tvcHQocHNvY2ssIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgJnNuZGJ1ZnNpemUsIChzb2NrbGVu
X3QgKikmaW50bGVuKSA8IDApIHsKKwkJCQlwZXJyb3IoInNldHNvY2tvcHQ6IFNPX1NOREJVRiIp
OworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZG91dCwiU2VuZCBidWZmZXIgc2l6ZTogJWQu
XG4iLCBzbmRidWZzaXplKTsKKwkJCX0KKwkJfQorCisJCWlmICh1c3JzY3RwX2Nvbm5lY3QocHNv
Y2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90ZV9hZGRyLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSkgPT0gLTEgKSB7CisJCQlpZiAoZXJybm8gIT0gRUlOUFJPR1JFU1MpIHsKKwkJCQlw
ZXJyb3IoInVzcnNjdHBfY29ubmVjdCIpOworCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCX0K
KwkJfQorCisJCXdoaWxlICghZG9uZSkgeworI2lmZGVmIF9XSU4zMgorCQkJU2xlZXAoMTAwMCk7
CisjZWxzZQorCQkJc2xlZXAoMSk7CisjZW5kaWYKKwkJfQorCisJCWlmIChwYXJfdmVyYm9zZSkg
eworCQkJcHJpbnRmKCJGaW5pc2hlZC4uLiBcbiIpOworCQl9CisJfQorCisJd2hpbGUgKHVzcnNj
dHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcCgxMDAwKTsKKyNlbHNl
CisJCXNsZWVwKDEpOworI2VuZGlmCisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9D
TWFrZUxpc3RzLnR4dAppbmRleCBiZDc0YTk5ZmE5MmVjMDMyNWJhZTQyMzEyMTlhYzJmNDU1OTI0
YTlkLi44NDU3NzJmYzRmMDZjMDI1MzQyODNiOTMxNDk5NmU4NTYyZGRhY2JhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvQ01ha2VMaXN0cy50eHQKQEAgLTM0LDIzICszNCwzNiBAQAogIyBJTkNMVURFIE1PRFVM
RVMgQU5EIFNFVFRJTkdTCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCiAKLXNldChWRVJTSU9OICIxLjAuMCIpCitzZXQoVkVSU0lPTiAiMC45LjUuMCIp
CisKKyMgU2hhcmVkIGxpYnJhcnkgQVBJIGFuZCBBQkkgdmVyc2lvbnMKKyMgTm90aWNlOiBzaGFy
ZWQgbGlicmFyeSB2ZXJzaW9uIG11c3QgYmUgaW4gWC5ZLlogZm9ybWF0IG9ubHkKK3NldChTT1ZF
UlNJT05fRlVMTCAiMi4wLjAiKQorc2V0KFNPVkVSU0lPTl9TSE9SVCAiMiIpCiAKIGluY2x1ZGUo
R05VSW5zdGFsbERpcnMpCi1zZXQocHJlZml4IAkJCQkJJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0p
Ci1zZXQoZXhlY19wcmVmaXggCQkJJHtwcmVmaXh9KQotc2V0KGxpYmRpciAJCQkJCSR7ZXhlY19w
cmVmaXh9LyR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9KQotc2V0KGluY2x1ZGVkaXIgCQkJCSR7cHJl
Zml4fS8ke0NNQUtFX0lOU1RBTExfSU5DTFVERURJUn0vdXNyc2N0cCkKK3NldChwcmVmaXggJHtD
TUFLRV9JTlNUQUxMX1BSRUZJWH0pCitzZXQoZXhlY19wcmVmaXggJHtwcmVmaXh9KQorc2V0KGxp
YmRpciAke2V4ZWNfcHJlZml4fS8ke0NNQUtFX0lOU1RBTExfTElCRElSfSkKK3NldChpbmNsdWRl
ZGlyICR7cHJlZml4fS8ke0NNQUtFX0lOU1RBTExfSU5DTFVERURJUn0pCiAKIHNldChDTUFLRV9S
RVFVSVJFRF9JTkNMVURFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0pCi1zZXQoQ01BS0Vf
TUFDT1NYX1JQQVRIIAkJMSkKK3NldChDTUFLRV9NQUNPU1hfUlBBVEggMSkKIAogaW5jbHVkZShD
aGVja0NDb21waWxlckZsYWcpCiAKKworb3B0aW9uKFNDVFBfVVNFX01CRURUTFNfU0hBMSAiQnVp
bGQgd2l0aCBtYmVkdGxzIHNoYTEgc3VwcG9ydC4iIE9GRikKKwogYWRkX2RlZmluaXRpb25zKC1E
X19Vc2Vyc3BhY2VfXykKIGFkZF9kZWZpbml0aW9ucygtRFNDVFBfU0lNUExFX0FMTE9DQVRPUikK
IGFkZF9kZWZpbml0aW9ucygtRFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUykKIAoraWYoU0NUUF9V
U0VfTUJFRFRMU19TSEExKQorCWFkZF9kZWZpbml0aW9ucygtRFNDVFBfVVNFX01CRURUTFNfU0hB
MSkKKwlmaW5kX3BhY2thZ2UoTWJlZFRMUyBSRVFVSVJFRCkKK2VuZGlmKCkKKwogCiAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIE9TIERFUEVOREVO
VApAQCAtMTcxLDEzICsxODQsMjIgQEAgYWRkX2xpYnJhcnkodXNyc2N0cCAke3VzcnNjdHBfc291
cmNlc30gJHt1c3JzY3RwX2hlYWRlcnN9KQogCiB0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyh1
c3JzY3RwIFBVQkxJQyAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0pCiAKK2lmKFNDVFBfVVNF
X01CRURUTFNfU0hBMSkKKwl0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyh1c3JzY3RwIFBSSVZB
VEUgJHtNQkVEVExTX0lOQ0xVREVfRElSU30pCitlbmRpZigpCisKIGlmIChXSU4zMikKIAltZXNz
YWdlKFNUQVRVUyAibGluayBsaWJyYXJ5OiB3czJfMzIiKQogCXRhcmdldF9saW5rX2xpYnJhcmll
cyh1c3JzY3RwIHdzMl8zMiBpcGhscGFwaSkKIGVuZGlmICgpCiAKK2lmKFNDVFBfVVNFX01CRURU
TFNfU0hBMSkKKwl0YXJnZXRfbGlua19saWJyYXJpZXModXNyc2N0cCBQUklWQVRFICR7TUJFRFRM
U19MSUJSQVJJRVN9KQorZW5kaWYoKQorCisKIHNldF90YXJnZXRfcHJvcGVydGllcyh1c3JzY3Rw
IFBST1BFUlRJRVMgSU1QT1JUX1NVRkZJWCAiX2ltcG9ydC5saWIiKQotc2V0X3RhcmdldF9wcm9w
ZXJ0aWVzKHVzcnNjdHAgUFJPUEVSVElFUyBTT1ZFUlNJT04gMSBWRVJTSU9OIDEuMC4wKQorc2V0
X3RhcmdldF9wcm9wZXJ0aWVzKHVzcnNjdHAgUFJPUEVSVElFUyBTT1ZFUlNJT04gJHtTT1ZFUlNJ
T05fU0hPUlR9IFZFUlNJT04gJHtTT1ZFUlNJT05fRlVMTH0pCiAKICMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgSU5TVEFMTCBMSUJSQVJZIEFORCBI
RUFERVIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvTWFrZWZpbGUuYW0gYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL01ha2VmaWxlLmFtCmluZGV4IDg1MjQwYjdjZWE4ZjY2YjA5YjM1ZWQw
N2I3ZDJmNmZlY2U5YzUxNzEuLmRjMDdjNmUxN2ZiY2I0OWI0MjQ0YTU1ZDVlOTFhMjk0MzdkMmFi
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvTWFrZWZpbGUuYW0KKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9NYWtlZmlsZS5hbQpAQCAtNzYsNiArNzYsNiBAQCBsaWJ1c3JzY3Rw
X2xhX1NPVVJDRVMgID0gdXNlcl9hdG9taWMuaCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV0aW5ldDYvc2N0cDZfdmFyLmggXAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQ2
L3NjdHA2X3VzcnJlcS5jCiBsaWJ1c3JzY3RwX2xhX0NGTEFHUyA9ICQoTElCQ0ZMQUdTKQotbGli
dXNyc2N0cF9sYV9MREZMQUdTID0gLXZlcnNpb24taW5mbyAxOjA6MAorbGlidXNyc2N0cF9sYV9M
REZMQUdTID0gLXZlcnNpb24taW5mbyAyOjA6MAogaW5jbHVkZV9IRUFERVJTID0gdXNyc2N0cC5o
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2JzZF9hZGRy
LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRkci5jCmluZGV4IGZh
N2I4Nzc2NmJkNDJhOWZjOTYyODc3MWM2MTQ0NTkzZGZlN2ZhODIuLjgzMjAxNzEyYTQ3M2ZiZmUw
NTQ1MjhmYTE5MTk2NmIzYzU5YzAzMWYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX2JzZF9hZGRyLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfYnNkX2FkZHIuYwpAQCAtMTk1LDcgKzE5NSw3IEBAIHNjdHBfc3RhcnR1cF9pdGVyYXRv
cih2b2lkKQogCWtwcm9jX2NyZWF0ZShzY3RwX2l0ZXJhdG9yX3RocmVhZCwKIAkgICAgICAgICAg
ICAgKHZvaWQgKilOVUxMLAogCSAgICAgICAgICAgICAmc2N0cF9pdF9jdGwudGhyZWFkX3Byb2Ms
Ci0JICAgICAgICAgICAgIFJGUFJPQywKKwkgICAgICAgICAgICAgMCwKIAkgICAgICAgICAgICAg
U0NUUF9LVEhSRUFEX1BBR0VTLAogCSAgICAgICAgICAgICBTQ1RQX0tUUkhFQURfTkFNRSk7CiAj
ZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfY29uc3RhbnRzLmgKaW5kZXggYjhlMmYyZDU4MWYzYjI2NjY1Njk0NjViMmFmNmQyZjBkYmY3
YjE2Ny4uYmUyMDI4ZWIyNzUxYTJmMWFhMGIyZDViMWQ0NWYxZGM5ZmFjYTViNyAxMDA3NTUKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY29uc3RhbnRzLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY29uc3RhbnRzLmgKQEAgLTM0LDcgKzM0LDcg
QEAKIAogI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25l
dGluZXQvc2N0cF9jb25zdGFudHMuaCAzNjUwNzEgMjAyMC0wOS0wMSAyMToxOToxNFogbWpnICQi
KTsKK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNlbmRpZgogCiAjaWZuZGVmIF9ORVRJTkVUX1ND
VFBfQ09OU1RBTlRTX0hfCkBAIC02MTAsNyArNjEwLDcgQEAgZXh0ZXJuIHZvaWQgZ2V0d2ludGlt
ZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dik7CiAKICNkZWZpbmUgU0NUUF9SVE9fVVBQRVJfQk9V
TkQJKDYwMDAwKQkvKiA2MCBzZWMgaW4gbXMgKi8KICNkZWZpbmUgU0NUUF9SVE9fTE9XRVJfQk9V
TkQJKDEwMDApCS8qIDEgc2VjIGlzIG1zICovCi0jZGVmaW5lIFNDVFBfUlRPX0lOSVRJQUwJKDMw
MDApCS8qIDMgc2VjIGluIG1zICovCisjZGVmaW5lIFNDVFBfUlRPX0lOSVRJQUwJKDEwMDApCS8q
IDEgc2VjIGluIG1zICovCiAKICNkZWZpbmUgU0NUUF9JTlBfS0lMTF9USU1FT1VUIDIwCS8qIG51
bWJlciBvZiBtcyB0byByZXRyeSBraWxsIG9mIGlucGNiICovCiAjZGVmaW5lIFNDVFBfQVNPQ19L
SUxMX1RJTUVPVVQgMTAJLyogbnVtYmVyIG9mIG1zIHRvIHJldHJ5IGtpbGwgb2YgaW5wY2IgKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5jIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5kYXRhLmMKaW5kZXggM2JjZTllOTlh
NjZhMDIzYjc3YjE0NTMzZjhkMzBiMWIwZTM0NTU3YS4uZmVkYzE0ZjBlMGIwNmZmYjZhNTVjNWZi
NWM0Y2NmYTNhYjJlZmM4YSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfaW5kYXRhLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5k
YXRhLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgi
JEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9pbmRhdGEuYyAzNjc1MjAgMjAyMC0xMS0w
OSAxMzoxMjowN1ogdHVleGVuICQiKTsKK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNlbmRpZgog
CiAjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CkBAIC04MzgsNyArODM4LDcgQEAgcmVzdGFy
dDoKIAkJCX0KIAkJCW1lbXNldChuYywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19y
ZWFkKSk7CiAJCQlUQUlMUV9SRU1PVkUoJmNvbnRyb2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7
Ci0JCQlzY3RwX2FkZF9jaGtfdG9fY29udHJvbChjb250cm9sLCBzdHJtLCBzdGNiLCBhc29jLCBj
aGssIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxEKTsKKwkJCXNjdHBfYWRkX2Noa190b19jb250cm9s
KGNvbnRyb2wsIHN0cm0sIHN0Y2IsIGFzb2MsIGNoaywgaW5wX3JlYWRfbG9ja19oZWxkKTsKIAkJ
CWZzbisrOwogCQkJY250X2FkZGVkKys7CiAJCQljaGsgPSBOVUxMOwpAQCAtOTI3LDcgKzkyNyw3
IEBAIHJlc3RhcnQ6CiAJfQogCWlmIChjbnRfYWRkZWQgJiYgc3RybS0+cGRfYXBpX3N0YXJ0ZWQp
IHsKICNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCXNjdHBfaW52b2tlX3JlY3ZfY2FsbGJh
Y2soc3RjYi0+c2N0cF9lcCwgc3RjYiwgY29udHJvbCwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQp
OworCQlzY3RwX2ludm9rZV9yZWN2X2NhbGxiYWNrKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNvbnRy
b2wsIGlucF9yZWFkX2xvY2tfaGVsZCk7CiAjZW5kaWYKIAkJc2N0cF93YWtldXBfdGhlX3JlYWRf
c29ja2V0KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CiAJfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmMKaW5kZXggMjg5YzY1YzYxZDdkMjZl
ODg3OTZmNzFlMWRmMDkzYTA1MWI5MDg2YS4uZmI2ZTRjMjNlYjgxMjM3MWJjZGFiYjg5ZDBkMWY4
NjI3NGNkNjBiYSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
aW5wdXQuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5jCkBA
IC0zNCw3ICszNCw3IEBACiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNE
OiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfaW5wdXQuYyAzNjg2MjIgMjAyMC0xMi0xMyAyMzo1MTo1
MVogdHVleGVuICQiKTsKK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNlbmRpZgogCiAjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX29zLmg+CkBAIC0xMDgsNTcgKzEwOCwxMiBAQCBzY3RwX2hhbmRsZV9p
bml0KHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogCWlmIChzdGNiID09
IE5VTEwpIHsKIAkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKIAl9Ci0JLyogdmFsaWRhdGUgbGVuZ3Ro
ICovCi0JaWYgKG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgpIDwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2luaXRfY2h1bmspKSB7Ci0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVT
RV9JTlZBTElEX1BBUkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBzdGNi
LCBtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCSAgICAgICAgICAgICAgICAgICAgICAg
bWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCQkJICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0J
CWlmIChzdGNiKQotCQkJKmFib3J0X25vX3VubG9jayA9IDE7Ci0JCWdvdG8gb3V0bm93OwotCX0K
LQkvKiB2YWxpZGF0ZSBwYXJhbWV0ZXJzICovCisJLyogVmFsaWRhdGUgcGFyYW1ldGVycyAqLwog
CWluaXQgPSAmY3AtPmluaXQ7Ci0JaWYgKGluaXQtPmluaXRpYXRlX3RhZyA9PSAwKSB7Ci0JCS8q
IHByb3RvY29sIGVycm9yLi4uIHNlbmQgYWJvcnQgKi8KLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0
ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICIiKTsKLQkJc2N0cF9hYm9ydF9hc3Nv
Y2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJICAgICAg
ICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJCQkgICAgICAg
dnJmX2lkLCBwb3J0KTsKLQkJaWYgKHN0Y2IpCi0JCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJ
Z290byBvdXRub3c7Ci0JfQotCWlmIChudG9obChpbml0LT5hX3J3bmQpIDwgU0NUUF9NSU5fUldO
RCkgewotCQkvKiBpbnZhbGlkIHBhcmFtZXRlci4uLiBzZW5kIGFib3J0ICovCi0JCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAiIik7Ci0JCXNj
dHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwg
b3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlm
Ci0JCQkJICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCWlmIChzdGNiKQotCQkJKmFib3J0X25vX3Vu
bG9jayA9IDE7Ci0JCWdvdG8gb3V0bm93OwotCX0KLQlpZiAoaW5pdC0+bnVtX2luYm91bmRfc3Ry
ZWFtcyA9PSAwKSB7Ci0JCS8qIHByb3RvY29sIGVycm9yLi4uIHNlbmQgYWJvcnQgKi8KLQkJb3Bf
ZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICIiKTsK
LQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwgc3JjLCBkc3Qs
IHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLQkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0j
ZW5kaWYKLQkJCQkgICAgICAgdnJmX2lkLCBwb3J0KTsKLQkJaWYgKHN0Y2IpCi0JCQkqYWJvcnRf
bm9fdW5sb2NrID0gMTsKLQkJZ290byBvdXRub3c7Ci0JfQotCWlmIChpbml0LT5udW1fb3V0Ym91
bmRfc3RyZWFtcyA9PSAwKSB7CisJaWYgKChudG9obChpbml0LT5pbml0aWF0ZV90YWcpID09IDAp
IHx8CisJICAgIChudG9obChpbml0LT5hX3J3bmQpIDwgU0NUUF9NSU5fUldORCkgfHwKKwkgICAg
KG50b2hzKGluaXQtPm51bV9pbmJvdW5kX3N0cmVhbXMpID09IDApIHx8CisJICAgIChudG9ocyhp
bml0LT5udW1fb3V0Ym91bmRfc3RyZWFtcykgPT0gMCkpIHsKIAkJLyogcHJvdG9jb2wgZXJyb3Iu
Li4gc2VuZCBhYm9ydCAqLwogCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FV
U0VfSU5WQUxJRF9QQVJBTSwgIiIpOwogCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgc3Rj
YiwgbSwgaXBobGVuLCBzcmMsIGRzdCwgc2gsIG9wX2VyciwKQEAgLTUxNCwyNiArNDY5LDM0IEBA
IHNjdHBfcHJvY2Vzc19pbml0X2FjayhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9m
ZnNldCwKIAlhc29jID0gJnN0Y2ItPmFzb2M7CiAJYXNvYy0+cGVlcl9zdXBwb3J0c19uYXQgPSAo
dWludDhfdCluYXRfZnJpZW5kbHk7CiAJLyogcHJvY2VzcyB0aGUgcGVlcidzIHBhcmFtZXRlcnMg
aW4gdGhlIElOSVQtQUNLICovCi0JcmV0dmFsID0gc2N0cF9wcm9jZXNzX2luaXQoKHN0cnVjdCBz
Y3RwX2luaXRfY2h1bmsgKiljcCwgc3RjYik7Ci0JaWYgKHJldHZhbCA8IDApIHsKKwlpZiAoc2N0
cF9wcm9jZXNzX2luaXQoKHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKiljcCwgc3RjYikgPCAwKSB7
CiAJCWlmIChvcF9lcnIgIT0gTlVMTCkgewogCQkJc2N0cF9tX2ZyZWVtKG9wX2Vycik7CiAJCX0K
LQkJcmV0dXJuIChyZXR2YWwpOworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBf
Q0FVU0VfT1VUX09GX1JFU0MsICIiKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwgInNj
dHBfcHJvY2Vzc19pbml0KCkgZmFpbGVkXG4iKTsKKwkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihz
dGNiLT5zY3RwX2VwLCBzdGNiLCBtLCBpcGhsZW4sCisJCSAgICAgICAgICAgICAgICAgICAgICAg
c3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1m
bG93aWQsCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9y
dCk7CisJCSphYm9ydF9ub191bmxvY2sgPSAxOworCQlyZXR1cm4gKC0xKTsKIAl9CiAJaW5pdGFj
a19saW1pdCA9IG9mZnNldCArIG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgpOwogCS8qIGxvYWQg
YWxsIGFkZHJlc3NlcyAqLwogCWlmICgocmV0dmFsID0gc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9t
X2luaXQoc3RjYiwgbSwKLQkgICAgKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2No
dW5rKSksIGluaXRhY2tfbGltaXQsCi0JICAgIHNyYywgZHN0LCBOVUxMLCBzdGNiLT5hc29jLnBv
cnQpKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLAorCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGFja19saW1pdCwgc3JjLCBkc3QsIE5VTEws
IHN0Y2ItPmFzb2MucG9ydCkpIDwgMCkgewogCQlpZiAob3BfZXJyICE9IE5VTEwpIHsKIAkJCXNj
dHBfbV9mcmVlbShvcF9lcnIpOwogCQl9CiAJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2Uo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKIAkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiUHJvYmxlbSB3aXRoIGFkZHJlc3MgcGFyYW1ldGVycyIpOwogCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQxLAotCQkJIkxvYWQgYWRkcmVzc2VzIGZyb20gSU5JVCBjYXVz
ZXMgYW4gYWJvcnQgJWRcbiIsCi0JCQlyZXR2YWwpOworCQkgICAgICAgICJMb2FkIGFkZHJlc3Nl
cyBmcm9tIElOSVQgY2F1c2VzIGFuIGFib3J0ICVkXG4iLAorCQkgICAgICAgIHJldHZhbCk7CiAJ
CXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgbSwgaXBobGVuLAog
CQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJyLAogI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCkBAIC0xNDIwLDU3ICsx
MzgzLDEyIEBAIHNjdHBfaGFuZGxlX2luaXRfYWNrKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVu
LCBpbnQgb2Zmc2V0LAogCQkJInNjdHBfaGFuZGxlX2luaXRfYWNrOiBUQ0IgaXMgbnVsbFxuIik7
CiAJCXJldHVybiAoLTEpOwogCX0KLQlpZiAobnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgPCBz
aXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmspKSB7Ci0JCS8qIEludmFsaWQgbGVuZ3Ro
ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BB
UkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwg
bSwgaXBobGVuLAotCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJy
LAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0J
CSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAg
ICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOwotCQkqYWJvcnRfbm9fdW5s
b2NrID0gMTsKLQkJcmV0dXJuICgtMSk7Ci0JfQogCWluaXRfYWNrID0gJmNwLT5pbml0OwotCS8q
IHZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KLQlpZiAoaW5pdF9hY2stPmluaXRpYXRlX3RhZyA9PSAw
KSB7Ci0JCS8qIHByb3RvY29sIGVycm9yLi4uIHNlbmQgYW4gYWJvcnQgKi8KLQkJb3BfZXJyID0g
c2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICIiKTsKLQkJc2N0
cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBtLCBpcGhsZW4sCi0JCSAg
ICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJICAgICAgICAgICAgICAg
ICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJICAgICAgICAgICAgICAgICAg
ICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7Ci0JCSphYm9ydF9ub191bmxvY2sgPSAxOwotCQlyZXR1
cm4gKC0xKTsKLQl9Ci0JaWYgKG50b2hsKGluaXRfYWNrLT5hX3J3bmQpIDwgU0NUUF9NSU5fUldO
RCkgewotCQkvKiBwcm90b2NvbCBlcnJvci4uLiBzZW5kIGFuIGFib3J0ICovCi0JCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAiIik7Ci0JCXNj
dHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgbSwgaXBobGVuLAotCQkg
ICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICAg
ICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOwotCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJcmV0
dXJuICgtMSk7Ci0JfQotCWlmIChpbml0X2Fjay0+bnVtX2luYm91bmRfc3RyZWFtcyA9PSAwKSB7
Ci0JCS8qIHByb3RvY29sIGVycm9yLi4uIHNlbmQgYW4gYWJvcnQgKi8KLQkJb3BfZXJyID0gc2N0
cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICIiKTsKLQkJc2N0cF9h
Ym9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBtLCBpcGhsZW4sCi0JCSAgICAg
ICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJICAgICAgICAgICAgICAgICAg
ICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJICAgICAgICAgICAgICAgICAgICAg
ICB2cmZfaWQsIG5ldC0+cG9ydCk7Ci0JCSphYm9ydF9ub191bmxvY2sgPSAxOwotCQlyZXR1cm4g
KC0xKTsKLQl9Ci0JaWYgKGluaXRfYWNrLT5udW1fb3V0Ym91bmRfc3RyZWFtcyA9PSAwKSB7CisJ
LyogVmFsaWRhdGUgcGFyYW1ldGVycy4gKi8KKwlpZiAoKG50b2hsKGluaXRfYWNrLT5pbml0aWF0
ZV90YWcpID09IDApIHx8CisJICAgIChudG9obChpbml0X2Fjay0+YV9yd25kKSA8IFNDVFBfTUlO
X1JXTkQpIHx8CisJICAgIChudG9ocyhpbml0X2Fjay0+bnVtX2luYm91bmRfc3RyZWFtcykgPT0g
MCkgfHwKKwkgICAgKG50b2hzKGluaXRfYWNrLT5udW1fb3V0Ym91bmRfc3RyZWFtcykgPT0gMCkp
IHsKIAkJLyogcHJvdG9jb2wgZXJyb3IuLi4gc2VuZCBhbiBhYm9ydCAqLwogCQlvcF9lcnIgPSBz
Y3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOwogCQlzY3Rw
X2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKQEAgLTE2
MjQsNiArMTU0Miw3IEBAIHNjdHBfcHJvY2Vzc19jb29raWVfZXhpc3Rpbmcoc3RydWN0IG1idWYg
Km0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCiAJCSAgICAgICAgICAgICAgICAgICB2cmZfaWQs
IG5ldC0+cG9ydCk7CiAJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkK
IAkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMjsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KIAkvKgpAQCAtMTYzOCw5ICsxNTU3LDExIEBAIHNj
dHBfcHJvY2Vzc19jb29raWVfZXhpc3Rpbmcoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGlu
dCBvZmZzZXQsCiAJCQkgICAgICAodWludDhfdCAqKSAmIGluaXRfYnVmKTsKIAlpZiAoaW5pdF9j
cCA9PSBOVUxMKSB7CiAJCS8qIGNvdWxkIG5vdCBwdWxsIGEgSU5JVCBjaHVuayBpbiBjb29raWUg
Ki8KKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KIAlpZiAo
aW5pdF9jcC0+Y2guY2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJQVRJT04pIHsKKwkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KIAkvKgpAQCAtMTY1Myw5ICsxNTc0
LDExIEBAIHNjdHBfcHJvY2Vzc19jb29raWVfZXhpc3Rpbmcoc3RydWN0IG1idWYgKm0sIGludCBp
cGhsZW4sIGludCBvZmZzZXQsCiAJCQkgICAgICAodWludDhfdCAqKSAmIGluaXRhY2tfYnVmKTsK
IAlpZiAoaW5pdGFja19jcCA9PSBOVUxMKSB7CiAJCS8qIGNvdWxkIG5vdCBwdWxsIElOSVQtQUNL
IGNodW5rIGluIGNvb2tpZSAqLworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CiAJCXJldHVybiAo
TlVMTCk7CiAJfQogCWlmIChpbml0YWNrX2NwLT5jaC5jaHVua190eXBlICE9IFNDVFBfSU5JVElB
VElPTl9BQ0spIHsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwogCQlyZXR1cm4gKE5VTEwpOwog
CX0KIAlpZiAoKG50b2hsKGluaXRhY2tfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSA9PSBhc29jLT5t
eV92dGFnKSAmJgpAQCAtMTY4MSw2ICsxNjA0LDcgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlz
dGluZyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKIAkJCSAqLwogCQkJ
aWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQogCQkJCWFzb2MtPmNvb2tp
ZV9ob3dbaG93X2luZHhdID0gMTc7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CiAJCQlyZXR1
cm4gKE5VTEwpOwogCQl9CiAJCXN3aXRjaCAoU0NUUF9HRVRfU1RBVEUoc3RjYikpIHsKQEAgLTE2
OTMsMTAgKzE2MTcsMTcgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKIAkJCQkgKiBoYXZlIHRoZSByaWdodCBzZXEg
bm8ncy4KIAkJCQkgKi8KIAkJCQkvKiBGaXJzdCB3ZSBtdXN0IHByb2Nlc3MgdGhlIElOSVQgISEg
Ki8KLQkJCQlyZXR2YWwgPSBzY3RwX3Byb2Nlc3NfaW5pdChpbml0X2NwLCBzdGNiKTsKLQkJCQlp
ZiAocmV0dmFsIDwgMCkgeworCQkJCWlmIChzY3RwX3Byb2Nlc3NfaW5pdChpbml0X2NwLCBzdGNi
KSA8IDApIHsKIAkJCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQog
CQkJCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAzOworCQkJCQlvcF9lcnIgPSBzY3Rw
X2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfT1VUX09GX1JFU0MsICIiKTsKKwkJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX0lOUFVUMSwgInNjdHBfcHJvY2Vzc19pbml0KCkgZmFpbGVkXG4iKTsKKwkJ
CQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBtLCBpcGhsZW4s
CisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJICAg
ICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJCQkJICAg
ICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7CiAJCQkJCXJldHVybiAoTlVM
TCk7CiAJCQkJfQogCQkJCS8qIHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlIElOSVQgc28g
bm8gcHJvYmxlbSAqLwpAQCAtMTc0MSw2ICsxNjcyLDcgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9l
eGlzdGluZyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKIAkJCQkJU0NU
UF9UQ0JfTE9DSyhzdGNiKTsKIAkJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250
LCAtMSk7CiAJCQkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09D
S0VUKSB7CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CiAJCQkJCQlTQ1RQX1NPQ0tFVF9V
TkxPQ0soc28sIDEpOwogCQkJCQkJcmV0dXJuIChOVUxMKTsKIAkJCQkJfQpAQCAtMTc3NiwxNiAr
MTcwOCwyMiBAQCBzY3RwX3Byb2Nlc3NfY29va2llX2V4aXN0aW5nKHN0cnVjdCBtYnVmICptLCBp
bnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogCQkJCWJyZWFrOwogCQl9CS8qIGVuZCBzd2l0Y2ggKi8K
IAkJc2N0cF9zdG9wX2FsbF9jb29raWVfdGltZXJzKHN0Y2IpOwotCQkvKgotCQkgKiBXZSBpZ25v
cmUgdGhlIHJldHVybiBjb2RlIGhlcmUuLiBub3Qgc3VyZSBpZiB3ZSBzaG91bGQKLQkJICogc29t
ZWhvdyBhYm9ydC4uIGJ1dCB3ZSBkbyBoYXZlIGFuIGV4aXN0aW5nIGFzb2MuIFRoaXMKLQkJICog
cmVhbGx5IHNob3VsZCBub3QgZmFpbC4KLQkJICovCi0JCWlmIChzY3RwX2xvYWRfYWRkcmVzc2Vz
X2Zyb21faW5pdChzdGNiLCBtLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X29m
ZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSwKLQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0LCBpbml0X3NyYywgc3RjYi0+YXNv
Yy5wb3J0KSkgeworCQlpZiAoKHJldHZhbCA9IHNjdHBfbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0
KHN0Y2IsIG0sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X29m
ZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSwKKwkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluaXRhY2tfb2Zmc2V0LCBzcmMsIGRzdCwgaW5pdF9zcmMs
IHN0Y2ItPmFzb2MucG9ydCkpIDwgMCkgewogCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2Mt
PmNvb2tpZV9ob3cpKQogCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gNDsKKwkJCW9w
X2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5m
b19jb2RlKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2JsZW0gd2l0aCBh
ZGRyZXNzIHBhcmFtZXRlcnMiKTsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCisJCQkg
ICAgICAgICJMb2FkIGFkZHJlc3NlcyBmcm9tIElOSVQgY2F1c2VzIGFuIGFib3J0ICVkXG4iLAor
CQkJICAgICAgICByZXR2YWwpOworCQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3Rw
X2VwLCBzdGNiLCBtLCBpcGhsZW4sCisJCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0
LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwK
KyNlbmRpZgorCQkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7CiAJ
CQlyZXR1cm4gKE5VTEwpOwogCQl9CiAJCS8qIHJlc3BvbmQgd2l0aCBhIENPT0tJRS1BQ0sgKi8K
QEAgLTE4MDUsNiArMTc0Myw3IEBAIHNjdHBfcHJvY2Vzc19jb29raWVfZXhpc3Rpbmcoc3RydWN0
IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCiAJCSAqLwogCQlpZiAoaG93X2luZHgg
PCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCiAJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4
XSA9IDY7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CiAJ
LyogSWYgbmF0IHN1cHBvcnQsIGFuZCB0aGUgYmVsb3cgYW5kIHN0Y2IgaXMgZXN0YWJsaXNoZWQs
CkBAIC0xODMwLDYgKzE3NjksNyBAQCBzY3RwX3Byb2Nlc3NfY29va2llX2V4aXN0aW5nKHN0cnVj
dCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogCQkgICAgICAgICAgICAgICAgbWZs
b3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKICNlbmRpZgogCQkgICAgICAgICAgICAgICAg
dnJmX2lkLCBwb3J0KTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwogCQlyZXR1cm4gKE5VTEwp
OwogCX0KIAlpZiAoKG50b2hsKGluaXRhY2tfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSA9PSBhc29j
LT5teV92dGFnKSAmJgpAQCAtMTg1OSw2ICsxNzk5LDcgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9l
eGlzdGluZyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKIAkJCWlmICho
b3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKIAkJCQlhc29jLT5jb29raWVfaG93
W2hvd19pbmR4XSA9IDc7CiAKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKIAkJCXJldHVybiAo
TlVMTCk7CiAJCX0KIAkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQpA
QCAtMTkwMSwxNyArMTg0MiwzNSBAQCBzY3RwX3Byb2Nlc3NfY29va2llX2V4aXN0aW5nKHN0cnVj
dCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAogCQkJfQogCQl9CiAJCS8qIHByb2Nl
c3MgdGhlIElOSVQgaW5mbyAocGVlcidzIGluZm8pICovCi0JCXJldHZhbCA9IHNjdHBfcHJvY2Vz
c19pbml0KGluaXRfY3AsIHN0Y2IpOwotCQlpZiAocmV0dmFsIDwgMCkgeworCQlpZiAoc2N0cF9w
cm9jZXNzX2luaXQoaW5pdF9jcCwgc3RjYikgPCAwKSB7CiAJCQlpZiAoaG93X2luZHggPCBzaXpl
b2YoYXNvYy0+Y29va2llX2hvdykpCiAJCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSA5
OworCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX09VVF9PRl9SRVND
LCAiIik7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAic2N0cF9wcm9jZXNzX2luaXQo
KSBmYWlsZWRcbiIpOworCQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBz
dGNiLCBtLCBpcGhsZW4sCisJCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwg
b3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRp
ZgorCQkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7CiAJCQlyZXR1
cm4gKE5VTEwpOwogCQl9Ci0JCWlmIChzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdGNi
LCBtLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9vZmZzZXQgKyBz
aXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayksCi0JCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbml0YWNrX29mZnNldCwgc3JjLCBkc3QsIGluaXRfc3JjLCBzdGNiLT5hc29j
LnBvcnQpKSB7CisJCWlmICgocmV0dmFsID0gc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQo
c3RjYiwgbSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bml0X29mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSwKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0YWNrX29mZnNldCwgc3JjLCBk
c3QsIGluaXRfc3JjLCBzdGNiLT5hc29jLnBvcnQpKSA8IDApIHsKIAkJCWlmIChob3dfaW5keCA8
IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKIAkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4
XSA9IDEwOworCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
UHJvYmxlbSB3aXRoIGFkZHJlc3MgcGFyYW1ldGVycyIpOworCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X0lOUFVUMSwKKwkJCSAgICAgICAgIkxvYWQgYWRkcmVzc2VzIGZyb20gSU5JVCBjYXVzZXMgYW4g
YWJvcnQgJWRcbiIsCisJCQkgICAgICAgIHJldHZhbCk7CisJCQlzY3RwX2Fib3J0X2Fzc29jaWF0
aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJCSAgICAgICAgICAgICAgICAg
ICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0
eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwg
bmV0LT5wb3J0KTsKIAkJCXJldHVybiAoTlVMTCk7CiAJCX0KIAkJaWYgKChTQ1RQX0dFVF9TVEFU
RShzdGNiKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fApAQCAtMTkzMyw2ICsxODkyLDcg
QEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxl
biwgaW50IG9mZnNldCwKIAkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwogCQkJCWF0b21pY19hZGRf
aW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOwogCQkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYg
U0NUUF9TVEFURV9DTE9TRURfU09DS0VUKSB7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
IAkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKIAkJCQkJcmV0dXJuIChOVUxMKTsKIAkJ
CQl9CkBAIC0xOTg1LDE5ICsxOTQ1LDI1IEBAIHNjdHBfcHJvY2Vzc19jb29raWVfZXhpc3Rpbmco
c3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCiAjZW5kaWYKIAogCQlpZiAo
YXNvYy0+cGVlcl9zdXBwb3J0c19uYXQpIHsKKwkJCXN0cnVjdCBzY3RwX3RjYiAqbG9jYWxfc3Rj
YjsKKwogCQkJLyogVGhpcyBpcyBhIGdyb3NzIGdyb3NzIGhhY2suCiAJCQkgKiBKdXN0IGNhbGwg
dGhlIGNvb2tpZV9uZXcgY29kZSBzaW5jZSB3ZQogCQkJICogYXJlIGFsbG93aW5nIGEgZHVwbGlj
YXRlIGFzc29jaWF0aW9uLgogCQkJICogSSBob3BlIHRoaXMgd29ya3MuLi4KIAkJCSAqLwotCQkJ
cmV0dXJuIChzY3RwX3Byb2Nlc3NfY29va2llX25ldyhtLCBpcGhsZW4sIG9mZnNldCwgc3JjLCBk
c3QsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBjb29raWUsIGNvb2tp
ZV9sZW4sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucCwgbmV0cCwgaW5p
dF9zcmMsbm90aWZpY2F0aW9uLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRoX3NraXBwZWQsIGF1dGhfb2Zmc2V0LCBhdXRoX2xlbiwKKwkJCWxvY2FsX3N0Y2IgPSBzY3Rw
X3Byb2Nlc3NfY29va2llX25ldyhtLCBpcGhsZW4sIG9mZnNldCwgc3JjLCBkc3QsCisJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2gsIGNvb2tpZSwgY29va2llX2xlbiwK
KwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAsIG5ldHAsIGluaXRf
c3JjLG5vdGlmaWNhdGlvbiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRoX3NraXBwZWQsIGF1dGhfb2Zmc2V0LCBhdXRoX2xlbiwKICNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAogI2VuZGlmCi0JCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCkpOworCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCQlpZiAobG9jYWxfc3Rj
YiA9PSBOVUxMKSB7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJfQorCQkJcmV0dXJu
IChsb2NhbF9zdGNiKTsKIAkJfQogCQkvKgogCQkgKiBjYXNlIEEgaW4gU2VjdGlvbiA1LjIuNCBU
YWJsZSAyOiBYWE1NIChwZWVyIHJlc3RhcnRlZCkKQEAgLTIwNzQsOSArMjA0MCw5IEBAIHNjdHBf
cHJvY2Vzc19jb29raWVfZXhpc3Rpbmcoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBv
ZmZzZXQsCiAJCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF9zZW50WzBdID0gMDsKIAkJCWFz
b2MtPnN0cm1vdXRbaV0uYWJhbmRvbmVkX3Vuc2VudFswXSA9IDA7CiAjZW5kaWYKLQkJCXN0Y2It
PmFzb2Muc3RybW91dFtpXS5zaWQgPSBpOwogCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRf
bWlkX29yZGVyZWQgPSAwOwogCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX3Vub3Jk
ZXJlZCA9IDA7CisJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc2lkID0gaTsKIAkJCXN0Y2ItPmFz
b2Muc3RybW91dFtpXS5sYXN0X21zZ19pbmNvbXBsZXRlID0gMDsKIAkJfQogCQlUQUlMUV9GT1JF
QUNIX1NBRkUoc3RycnN0LCAmYXNvYy0+cmVzZXRIZWFkLCBuZXh0X3Jlc3AsIG5zdHJyc3QpIHsK
QEAgLTIxNTcsMTEgKzIxMjMsMTcgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1
Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKIAkJYXNvYy0+dG90YWxfZmxpZ2h0
ID0gMDsKIAkJYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ID0gMDsKIAkJLyogcHJvY2VzcyB0aGUg
SU5JVCBpbmZvIChwZWVyJ3MgaW5mbykgKi8KLQkJcmV0dmFsID0gc2N0cF9wcm9jZXNzX2luaXQo
aW5pdF9jcCwgc3RjYik7Ci0JCWlmIChyZXR2YWwgPCAwKSB7CisJCWlmIChzY3RwX3Byb2Nlc3Nf
aW5pdChpbml0X2NwLCBzdGNiKSA8IDApIHsKIAkJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29j
LT5jb29raWVfaG93KSkKIAkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDEzOwotCisJ
CQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfT1VUX09GX1JFU0MsICIi
KTsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJzY3RwX3Byb2Nlc3NfaW5pdCgpIGZh
aWxlZFxuIik7CisJCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IG0sIGlwaGxlbiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9l
cnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJ
CQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKIAkJCXJldHVybiAo
TlVMTCk7CiAJCX0KIAkJLyoKQEAgLTIxNzAsMTIgKzIxNDIsMjIgQEAgc2N0cF9wcm9jZXNzX2Nv
b2tpZV9leGlzdGluZyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKIAkJ
ICovCiAJCW5ldC0+aGJfcmVzcG9uZGVkID0gMTsKIAotCQlpZiAoc2N0cF9sb2FkX2FkZHJlc3Nl
c19mcm9tX2luaXQoc3RjYiwgbSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluaXRfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLAotCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0LCBpbml0
X3NyYywgc3RjYi0+YXNvYy5wb3J0KSkgeworCQlpZiAoKHJldHZhbCA9IHNjdHBfbG9hZF9hZGRy
ZXNzZXNfZnJvbV9pbml0KHN0Y2IsIG0sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5pdF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVu
ayksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGFj
a19vZmZzZXQsIHNyYywgZHN0LCBpbml0X3NyYywgc3RjYi0+YXNvYy5wb3J0KSkgPCAwKSB7CiAJ
CQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCiAJCQkJYXNvYy0+Y29v
a2llX2hvd1tob3dfaW5keF0gPSAxNDsKLQorCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVz
ZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiUHJvYmxlbSB3aXRoIGFkZHJlc3MgcGFyYW1ldGVycyIpOworCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwKKwkJCSAgICAgICAgIkxvYWQgYWRkcmVzc2VzIGZy
b20gSU5JVCBjYXVzZXMgYW4gYWJvcnQgJWRcbiIsCisJCQkgICAgICAgIHJldHZhbCk7CisJCQlz
Y3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJ
CSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCSAgICAgICAgICAg
ICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkgICAgICAgICAgICAg
ICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKIAkJCXJldHVybiAoTlVMTCk7CiAJCX0KIAkJ
LyogcmVzcG9uZCB3aXRoIGEgQ09PS0lFLUFDSyAqLwpAQCAtMjE5MSw2ICsyMTczLDcgQEAgc2N0
cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50
IG9mZnNldCwKIAlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCiAJCWFz
b2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTY7CiAJLyogYWxsIG90aGVyIGNhc2VzLi4uICov
CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwogCXJldHVybiAoTlVMTCk7CiB9CiAKQEAgLTIzNjQs
OCArMjM0Nyw3IEBAIHNjdHBfcHJvY2Vzc19jb29raWVfbmV3KHN0cnVjdCBtYnVmICptLCBpbnQg
aXBobGVuLCBpbnQgb2Zmc2V0LAogCWFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50ID0gYXNv
Yy0+bGFzdF9hY2tlZF9zZXE7CiAKIAkvKiBwcm9jZXNzIHRoZSBJTklUIGluZm8gKHBlZXIncyBp
bmZvKSAqLwotCXJldHZhbCA9IHNjdHBfcHJvY2Vzc19pbml0KGluaXRfY3AsIHN0Y2IpOwotCWlm
IChyZXR2YWwgPCAwKSB7CisJaWYgKHNjdHBfcHJvY2Vzc19pbml0KGluaXRfY3AsIHN0Y2IpIDwg
MCkgewogI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQog
CQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwogCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CkBAIC0yMzgxLDkgKzIzNjMsOSBAQCBzY3RwX3Byb2Nlc3NfY29va2llX25ldyhz
dHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKIAkJcmV0dXJuIChOVUxMKTsK
IAl9CiAJLyogbG9hZCBhbGwgYWRkcmVzc2VzICovCi0JaWYgKHNjdHBfbG9hZF9hZGRyZXNzZXNf
ZnJvbV9pbml0KHN0Y2IsIG0sCi0JICAgIGluaXRfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2luaXRfY2h1bmspLCBpbml0YWNrX29mZnNldCwKLQkgICAgc3JjLCBkc3QsIGluaXRfc3JjLCBw
b3J0KSkgeworCWlmICgocmV0dmFsID0gc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQoc3Rj
YiwgbSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRf
b2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLAorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0LCBp
bml0X3NyYywgcG9ydCkpIDwgMCkgewogI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQogCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEp
OwogCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CkBAIC0yOTYwLDEyICsyOTQyLDE1IEBAIHNjdHBf
aGFuZGxlX2Nvb2tpZV9lY2hvKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0
LAogCQloYWRfYV9leGlzdGluZ190Y2IgPSAxOwogCQkqc3RjYiA9IHNjdHBfcHJvY2Vzc19jb29r
aWVfZXhpc3RpbmcobSwgaXBobGVuLCBvZmZzZXQsCiAJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsCi0JCQkJCQkgICAgIGNvb2tpZSwgY29va2llX2xl
biwgKmlucF9wLCAqc3RjYiwgbmV0cCwgdG8sCi0JCQkJCQkgICAgICZub3RpZmljYXRpb24sIGF1
dGhfc2tpcHBlZCwgYXV0aF9vZmZzZXQsIGF1dGhfbGVuLAorCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29va2llLCBjb29raWVfbGVuLCAqaW5wX3AsICpzdGNiLCBuZXRw
LCB0bywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZub3RpZmljYXRp
b24sIGF1dGhfc2tpcHBlZCwgYXV0aF9vZmZzZXQsIGF1dGhfbGVuLAogI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCiAJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCiAjZW5kaWYKIAkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCWlmICgqc3Rj
YiA9PSBOVUxMKSB7CisJCQkqbG9ja2VkX3RjYiA9IE5VTEw7CisJCX0KIAl9CiAKIAlpZiAoKnN0
Y2IgPT0gTlVMTCkgewpAQCAtMzg1MSwxOSArMzgzNiwxNiBAQCBzY3RwX2ZpbmRfc3RyZWFtX3Jl
c2V0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc2N0cF90bWl0
X2NodQogCWludCBsZW4sIGNsZW47CiAKIAlhc29jID0gJnN0Y2ItPmFzb2M7Ci0JaWYgKFRBSUxR
X0VNUFRZKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSkpIHsKLQkJYXNvYy0+c3RyZWFt
X3Jlc2V0X291dHN0YW5kaW5nID0gMDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKHN0Y2It
PmFzb2Muc3RyX3Jlc2V0ID09IE5VTEwpIHsKKwljaGsgPSBhc29jLT5zdHJfcmVzZXQ7CisJaWYg
KFRBSUxRX0VNUFRZKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUpIHx8CisJICAgIChjaGsgPT0g
TlVMTCkpIHsKIAkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nID0gMDsKIAkJcmV0dXJu
IChOVUxMKTsKIAl9Ci0JY2hrID0gc3RjYi0+YXNvYy5zdHJfcmVzZXQ7CiAJaWYgKGNoay0+ZGF0
YSA9PSBOVUxMKSB7CiAJCXJldHVybiAoTlVMTCk7CiAJfQotCWlmIChiY2hrKSB7CisJaWYgKGJj
aGsgIT0gTlVMTCkgewogCQkvKiBoZSB3YW50cyBhIGNvcHkgb2YgdGhlIGNoayBwb2ludGVyICov
CiAJCSpiY2hrID0gY2hrOwogCX0KQEAgLTQ4MDIsNiArNDc4NCw3IEBAIHNjdHBfcHJvY2Vzc19j
b250cm9sKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgKm9mZnNldCwgaW50IGxlbmd0
aCwKIAlpbnQgcmV0OwogCWludCBhYm9ydF9ub191bmxvY2sgPSAwOwogCWludCBlY25lX3NlZW4g
PSAwOworCWludCBhYm9ydF9mbGFnOwogCS8qCiAJICogSG93IGJpZyBzaG91bGQgdGhpcyBiZSwg
YW5kIHNob3VsZCBpdCBiZSBhbGxvYydkPyBMZXRzIHRyeSB0aGUKIAkgKiBkLW10dS1jZWlsaW5n
IGZvciBub3cgKDJrKSBhbmQgdGhhdCBzaG91bGQgaG9wZWZ1bGx5IHdvcmsgLi4uCkBAIC00OTY2
LDI5ICs0OTQ5LDYgQEAgc2N0cF9wcm9jZXNzX2NvbnRyb2woc3RydWN0IG1idWYgKm0sIGludCBp
cGhsZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVuZ3RoLAogCQkJCX0KIAkJCQlyZXR1cm4gKE5VTEwp
OwogCQkJfQotCQl9IGVsc2UgaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfU0hVVERPV05fQUNL
KSB7Ci0JCQlpZiAodnRhZ19pbiAhPSBhc29jLT5teV92dGFnKSB7Ci0JCQkJLyoKLQkJCQkgKiB0
aGlzIGNvdWxkIGJlIGEgc3RhbGUgU0hVVERPV04tQUNLIG9yIHRoZQotCQkJCSAqIHBlZXIgbmV2
ZXIgZ290IHRoZSBTSFVURE9XTi1DT01QTEVURSBhbmQKLQkJCQkgKiBpcyBzdGlsbCBodW5nOyB3
ZSBoYXZlIHN0YXJ0ZWQgYSBuZXcgYXNvYwotCQkJCSAqIGJ1dCBpdCB3b24ndCBjb21wbGV0ZSB1
bnRpbCB0aGUgc2h1dGRvd24KLQkJCQkgKiBpcyBjb21wbGV0ZWQKLQkJCQkgKi8KLQkJCQlpZiAo
c3RjYiAhPSBOVUxMKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQl9Ci0JCQkJ
U0NUUF9TTlBSSU5URihtc2csIHNpemVvZihtc2cpLCAiT09UQiwgJXM6JWQgYXQgJXMiLCBfX0ZJ
TEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKLQkJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2Nh
dXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCi0JCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtc2cpOwotCQkJCXNjdHBfaGFuZGxlX29vdGIobSwgaXBobGVu
LCAqb2Zmc2V0LCBzcmMsIGRzdCwKLQkJCQkgICAgICAgICAgICAgICAgIHNoLCBpbnAsIG9wX2Vy
ciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQot
CQkJCSAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCi0jZW5kaWYK
LQkJCQkgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCQkJcmV0dXJuIChOVUxMKTsK
LQkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIGZvciBhbGwgb3RoZXIgY2h1bmtzLCB2dGFnIG11c3Qg
bWF0Y2ggKi8KIAkJCWlmICh2dGFnX2luICE9IGFzb2MtPm15X3Z0YWcpIHsKQEAgLTUwNTEsMTAg
KzUwMTEsNyBAQCBzY3RwX3Byb2Nlc3NfY29udHJvbChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxl
biwgaW50ICpvZmZzZXQsIGludCBsZW5ndGgsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaHVua19idWYpOwogCQlpZiAoY2ggPT0gTlVMTCkgewogCQkJKm9m
ZnNldCA9IGxlbmd0aDsKLQkJCWlmIChzdGNiICE9IE5VTEwpIHsKLQkJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0JCQl9Ci0JCQlyZXR1cm4gKE5VTEwpOworCQkJcmV0dXJuIChzdGNiKTsKIAkJ
fQogCiAJCW51bV9jaHVua3MrKzsKQEAgLTUwODgsMTIgKzUwNDUsMTIgQEAgc2N0cF9wcm9jZXNz
X2NvbnRyb2woc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVu
Z3RoLAogCQkJLyogVGhlIElOSVQgY2h1bmsgbXVzdCBiZSB0aGUgb25seSBjaHVuay4gKi8KIAkJ
CWlmICgobnVtX2NodW5rcyA+IDEpIHx8CiAJCQkgICAgKGxlbmd0aCAtICpvZmZzZXQgPiAoaW50
KVNDVFBfU0laRTMyKGNoa19sZW5ndGgpKSkgewotCQkJCS8qIFJGQyA0OTYwIHJlcXVpcmVzIHRo
YXQgbm8gQUJPUlQgaXMgc2VudCAqLworCQkJCS8qCisJCQkJICogUkZDIDQ5NjBiaXMgcmVxdWly
ZXMgc3RvcHBpbmcgdGhlCisJCQkJICogcHJvY2Vzc2luZyBvZiB0aGUgcGFja2V0LgorCQkJCSAq
LwogCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJfQotCQkJCXJldHVybiAoTlVMTCk7CisJCQkJcmV0
dXJuIChzdGNiKTsKIAkJCX0KIAkJCS8qIEhvbm9yIG91ciByZXNvdXJjZSBsaW1pdC4gKi8KIAkJ
CWlmIChjaGtfbGVuZ3RoID4gU0NUUF9MQVJHRVNUX0lOSVRfQUNDRVBURUQpIHsKQEAgLTUzMDAs
MjAgKzUyNTcsMTkgQEAgc2N0cF9wcm9jZXNzX2NvbnRyb2woc3RydWN0IG1idWYgKm0sIGludCBp
cGhsZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVuZ3RoLAogCQkJaWYgKChzdGNiICE9IE5VTEwpICYm
IChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkgewogCQkJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX3JlY3ZoZWFydGJlYXQpOwogCQkJCXNjdHBfc2VuZF9oZWFydGJlYXRfYWNrKHN0Y2Is
IG0sICpvZmZzZXQsCi0JCQkJCQkJY2hrX2xlbmd0aCwgKm5ldHApOworCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgIGNoa19sZW5ndGgsICpuZXRwKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNl
IFNDVFBfSEVBUlRCRUFUX0FDSzoKIAkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQ
X0hFQVJUQkVBVF9BQ0tcbiIpOwogCQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChjaGtfbGVuZ3Ro
ICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmspKSkgewogCQkJCS8qIEl0cyBu
b3Qgb3VycyAqLwotCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJcmV0dXJuIChzdGNiKTsKKwkJ
CQlicmVhazsKIAkJCX0KIAkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZoZWFydGJlYXRhY2sp
OwogCQkJaWYgKChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkgewogCQkJCXNjdHBf
aGFuZGxlX2hlYXJ0YmVhdF9hY2soKHN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9jaHVuayAqKWNoLAot
CQkJCQkJCSAgc3RjYiwgKm5ldHApOworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rj
YiwgKm5ldHApOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgU0NUUF9BQk9SVF9BU1NPQ0lBVElP
TjoKQEAgLTUzMzQsMTQgKzUyOTAsMTIgQEAgc2N0cF9wcm9jZXNzX2NvbnRyb2woc3RydWN0IG1i
dWYgKm0sIGludCBpcGhsZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVuZ3RoLAogCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfU0hVVERPV04sIHN0Y2IgJXBcbiIsCiAJCQkJKHZvaWQg
KilzdGNiKTsKIAkJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoY2hrX2xlbmd0aCAhPSBzaXplb2Yo
c3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmspKSkgewotCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0J
CQkJcmV0dXJuIChzdGNiKTsKKwkJCQlicmVhazsKIAkJCX0KIAkJCWlmICgobmV0cCAhPSBOVUxM
KSAmJiAoKm5ldHAgIT0gTlVMTCkpIHsKLQkJCQlpbnQgYWJvcnRfZmxhZyA9IDA7Ci0KKwkJCQlh
Ym9ydF9mbGFnID0gMDsKIAkJCQlzY3RwX2hhbmRsZV9zaHV0ZG93bigoc3RydWN0IHNjdHBfc2h1
dGRvd25fY2h1bmsgKiljaCwKLQkJCQkJCSAgICAgc3RjYiwgKm5ldHAsICZhYm9ydF9mbGFnKTsK
KwkJCQkgICAgICAgICAgICAgICAgICAgICBzdGNiLCAqbmV0cCwgJmFib3J0X2ZsYWcpOwogCQkJ
CWlmIChhYm9ydF9mbGFnKSB7CiAJCQkJCSpvZmZzZXQgPSBsZW5ndGg7CiAJCQkJCXJldHVybiAo
TlVMTCk7CkBAIC01MzUwLDExICs1MzA0LDEyIEBAIHNjdHBfcHJvY2Vzc19jb250cm9sKHN0cnVj
dCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgKm9mZnNldCwgaW50IGxlbmd0aCwKIAkJCWJyZWFr
OwogCQljYXNlIFNDVFBfU0hVVERPV05fQUNLOgogCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVU
MywgIlNDVFBfU0hVVERPV05fQUNLLCBzdGNiICVwXG4iLCAodm9pZCAqKXN0Y2IpOwotCQkJaWYg
KChzdGNiICE9IE5VTEwpICYmIChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkgewor
CQkJaWYgKChjaGtfbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9hY2tfY2h1
bmspKSAmJgorCQkJICAgIChzdGNiICE9IE5VTEwpICYmIChuZXRwICE9IE5VTEwpICYmICgqbmV0
cCAhPSBOVUxMKSkgewogCQkJCXNjdHBfaGFuZGxlX3NodXRkb3duX2Fjaygoc3RydWN0IHNjdHBf
c2h1dGRvd25fYWNrX2NodW5rICopY2gsIHN0Y2IsICpuZXRwKTsKKwkJCQkqb2Zmc2V0ID0gbGVu
Z3RoOworCQkJCXJldHVybiAoTlVMTCk7CiAJCQl9Ci0JCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJ
cmV0dXJuIChOVUxMKTsKIAkJCWJyZWFrOwogCQljYXNlIFNDVFBfT1BFUkFUSU9OX0VSUk9SOgog
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfT1BfRVJSXG4iKTsKQEAgLTU0OTgs
NyArNTQ1Myw3IEBAIHNjdHBfcHJvY2Vzc19jb250cm9sKHN0cnVjdCBtYnVmICptLCBpbnQgaXBo
bGVuLCBpbnQgKm9mZnNldCwgaW50IGxlbmd0aCwKIAkJY2FzZSBTQ1RQX0NPT0tJRV9BQ0s6CiAJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9DT09LSUVfQUNLLCBzdGNiICVwXG4i
LCAodm9pZCAqKXN0Y2IpOwogCQkJaWYgKChzdGNiID09IE5VTEwpIHx8IGNoa19sZW5ndGggIT0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9hY2tfY2h1bmspKSB7Ci0JCQkJcmV0dXJuIChzdGNi
KTsKKwkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19TT0NLRVRfR09ORSkgewogCQkJCS8qIFdlIGFyZSBub3QgaW50ZXJlc3RlZCBhbnltb3Jl
ICovCkBAIC01NTI4LDI2ICs1NDgzLDI5IEBAIHNjdHBfcHJvY2Vzc19jb250cm9sKHN0cnVjdCBt
YnVmICptLCBpbnQgaXBobGVuLCBpbnQgKm9mZnNldCwgaW50IGxlbmd0aCwKIAkJCWJyZWFrOwog
CQljYXNlIFNDVFBfRUNOX0VDSE86CiAJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NU
UF9FQ05fRUNIT1xuIik7Ci0JCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGNoa19sZW5ndGggIT0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2VjbmVfY2h1bmspKSkgewotCQkJCS8qIEl0cyBub3Qgb3VycyAq
LwotCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJcmV0dXJuIChzdGNiKTsKKwkJCWlmIChzdGNi
ID09IE5VTEwpIHsKKwkJCQlicmVhazsKIAkJCX0KIAkJCWlmIChzdGNiLT5hc29jLmVjbl9zdXBw
b3J0ZWQgPT0gMCkgewogCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKIAkJCX0KKwkJCWlmIChjaGtf
bGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rKSkgeworCQkJCWJyZWFrOwor
CQkJfQogCQkJc2N0cF9oYW5kbGVfZWNuX2VjaG8oKHN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKilj
aCwgc3RjYik7CiAJCQllY25lX3NlZW4gPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgU0NUUF9FQ05f
Q1dSOgogCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfRUNOX0NXUlxuIik7Ci0J
CQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGNoa19sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X2N3cl9jaHVuaykpKSB7Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKHN0Y2Ip
OworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKHN0Y2It
PmFzb2MuZWNuX3N1cHBvcnRlZCA9PSAwKSB7CiAJCQkJZ290byB1bmtub3duX2NodW5rOwogCQkJ
fQorCQkJaWYgKGNoa19sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2N3cl9jaHVuaykpIHsK
KwkJCQlicmVhazsKKwkJCX0KIAkJCXNjdHBfaGFuZGxlX2Vjbl9jd3IoKHN0cnVjdCBzY3RwX2N3
cl9jaHVuayAqKWNoLCBzdGNiLCAqbmV0cCk7CiAJCQlicmVhazsKIAkJY2FzZSBTQ1RQX1NIVVRE
T1dOX0NPTVBMRVRFOgpAQCAtNTU1OCwxMiArNTUxNiwxMyBAQCBzY3RwX3Byb2Nlc3NfY29udHJv
bChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50ICpvZmZzZXQsIGludCBsZW5ndGgsCiAJ
CQkJKm9mZnNldCA9IGxlbmd0aDsKIAkJCQlyZXR1cm4gKHN0Y2IpOwogCQkJfQotCQkJaWYgKChz
dGNiICE9IE5VTEwpICYmIChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkgeworCQkJ
aWYgKChjaGtfbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jb21wbGV0ZV9j
aHVuaykpICYmCisJCQkgICAgKHN0Y2IgIT0gTlVMTCkgJiYgKG5ldHAgIT0gTlVMTCkgJiYgKCpu
ZXRwICE9IE5VTEwpKSB7CiAJCQkJc2N0cF9oYW5kbGVfc2h1dGRvd25fY29tcGxldGUoKHN0cnVj
dCBzY3RwX3NodXRkb3duX2NvbXBsZXRlX2NodW5rICopY2gsCi0JCQkJCQkJICAgICAgc3RjYiwg
Km5ldHApOworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0Y2IsICpuZXRwKTsK
KwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAoTlVMTCk7CiAJCQl9Ci0JCQkqb2Zm
c2V0ID0gbGVuZ3RoOwotCQkJcmV0dXJuIChOVUxMKTsKIAkJCWJyZWFrOwogCQljYXNlIFNDVFBf
QVNDT05GOgogCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfQVNDT05GXG4iKTsK
QEAgLTU1NzIsMzIgKzU1MzEsMzMgQEAgc2N0cF9wcm9jZXNzX2NvbnRyb2woc3RydWN0IG1idWYg
Km0sIGludCBpcGhsZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVuZ3RoLAogCQkJCQlnb3RvIHVua25v
d25fY2h1bms7CiAJCQkJfQogCQkJCXNjdHBfaGFuZGxlX2FzY29uZihtLCAqb2Zmc2V0LCBzcmMs
Ci0JCQkJCQkgICAoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rICopY2gsIHN0Y2IsIGFzY29uZl9j
bnQgPT0gMCk7CisJCQkJICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1
bmsgKiljaCwgc3RjYiwgYXNjb25mX2NudCA9PSAwKTsKIAkJCQlhc2NvbmZfY250Kys7CiAJCQl9
CiAJCQlicmVhazsKIAkJY2FzZSBTQ1RQX0FTQ09ORl9BQ0s6CiAJCQlTQ1RQREJHKFNDVFBfREVC
VUdfSU5QVVQzLCAiU0NUUF9BU0NPTkZfQUNLXG4iKTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsK
KwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPT0g
MCkgeworCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKKwkJCX0KIAkJCWlmIChjaGtfbGVuZ3RoIDwg
c2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1bmspKSB7Ci0JCQkJLyogSXRzIG5vdCBv
dXJzICovCi0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJCWJy
ZWFrOwogCQkJfQotCQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXRwICE9IE5VTEwpICYmICgq
bmV0cCAhPSBOVUxMKSkgewotCQkJCWlmIChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPT0g
MCkgewotCQkJCQlnb3RvIHVua25vd25fY2h1bms7Ci0JCQkJfQorCQkJaWYgKChuZXRwICE9IE5V
TEwpICYmICgqbmV0cCAhPSBOVUxMKSkgewogCQkJCS8qIEhlJ3MgYWxpdmUgc28gZ2l2ZSBoaW0g
Y3JlZGl0ICovCiAJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKIAkJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJF
U0hPTERfQ0xFQVIsCi0JCQkJCQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50
LAotCQkJCQkJICAgICAgIDAsCi0JCQkJCQkgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQsCi0J
CQkJCQkgICAgICAgX19MSU5FX18pOworCQkJCQkgICAgICAgICAgICAgICBzdGNiLT5hc29jLm92
ZXJhbGxfZXJyb3JfY291bnQsCisJCQkJCSAgICAgICAgICAgICAgIDAsCisJCQkJCSAgICAgICAg
ICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVULAorCQkJCQkgICAgICAgICAgICAgICBfX0xJTkVf
Xyk7CiAJCQkJfQogCQkJCXN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7CiAJCQkJ
c2N0cF9oYW5kbGVfYXNjb25mX2FjayhtLCAqb2Zmc2V0LAotCQkJCQkJICAgICAgIChzdHJ1Y3Qg
c2N0cF9hc2NvbmZfYWNrX2NodW5rICopY2gsIHN0Y2IsICpuZXRwLCAmYWJvcnRfbm9fdW5sb2Nr
KTsKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2No
dW5rICopY2gsIHN0Y2IsICpuZXRwLCAmYWJvcnRfbm9fdW5sb2NrKTsKIAkJCQlpZiAoYWJvcnRf
bm9fdW5sb2NrKQogCQkJCQlyZXR1cm4gKE5VTEwpOwogCQkJfQpAQCAtNTYwNiw3MiArNTU2Niw3
MCBAQCBzY3RwX3Byb2Nlc3NfY29udHJvbChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50
ICpvZmZzZXQsIGludCBsZW5ndGgsCiAJCWNhc2UgU0NUUF9JRk9SV0FSRF9DVU1fVFNOOgogCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIiVzXG4iLAogCQkJCWNoLT5jaHVua190eXBlID09
IFNDVFBfRk9SV0FSRF9DVU1fVFNOID8gIkZPUldBUkRfVFNOIiA6ICJJX0ZPUldBUkRfVFNOIik7
CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoc3RjYi0+
YXNvYy5wcnNjdHBfc3VwcG9ydGVkID09IDApIHsKKwkJCQlnb3RvIHVua25vd25fY2h1bms7CisJ
CQl9CiAJCQlpZiAoY2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9j
aHVuaykpIHsKLQkJCQkvKiBJdHMgbm90IG91cnMgKi8KLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwot
CQkJCXJldHVybiAoc3RjYik7CisJCQkJYnJlYWs7CiAJCQl9Ci0KLQkJCWlmIChzdGNiICE9IE5V
TEwpIHsKLQkJCQlpbnQgYWJvcnRfZmxhZyA9IDA7Ci0KLQkJCQlpZiAoc3RjYi0+YXNvYy5wcnNj
dHBfc3VwcG9ydGVkID09IDApIHsKLQkJCQkJZ290byB1bmtub3duX2NodW5rOwotCQkJCX0KLQkJ
CQlpZiAoKChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAxKSAmJiAoY2gtPmNodW5rX3R5
cGUgPT0gU0NUUF9GT1JXQVJEX0NVTV9UU04pKSB8fAotCQkJCSAgICAoKHN0Y2ItPmFzb2MuaWRh
dGFfc3VwcG9ydGVkID09IDApICYmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lGT1JXQVJEX0NV
TV9UU04pKSkgewotCQkJCQlpZiAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9GT1JXQVJEX0NVTV9U
U04pIHsKLQkJCQkJCVNDVFBfU05QUklOVEYobXNnLCBzaXplb2YobXNnKSwgIiVzIiwgIkZPUldB
UkQtVFNOIGNodW5rIHJlY2VpdmVkIHdoZW4gSS1GT1JXQVJELVRTTiB3YXMgbmVnb3RpYXRlZCIp
OwotCQkJCQl9IGVsc2UgewotCQkJCQkJU0NUUF9TTlBSSU5URihtc2csIHNpemVvZihtc2cpLCAi
JXMiLCAiSS1GT1JXQVJELVRTTiBjaHVuayByZWNlaXZlZCB3aGVuIEZPUldBUkQtVFNOIHdhcyBu
ZWdvdGlhdGVkIik7Ci0JCQkJCX0KLQkJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShT
Q1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKLQkJCQkJc2N0cF9hYm9ydF9hbl9h
c3NvY2lhdGlvbihpbnAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQkJ
Km9mZnNldCA9IGxlbmd0aDsKLQkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWlmICgoKHN0Y2ItPmFz
b2MuaWRhdGFfc3VwcG9ydGVkID09IDEpICYmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0ZPUldB
UkRfQ1VNX1RTTikpIHx8CisJCQkgICAgKChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAw
KSAmJiAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9JRk9SV0FSRF9DVU1fVFNOKSkpIHsKKwkJCQlp
ZiAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9GT1JXQVJEX0NVTV9UU04pIHsKKwkJCQkJU0NUUF9T
TlBSSU5URihtc2csIHNpemVvZihtc2cpLCAiJXMiLCAiRk9SV0FSRC1UU04gY2h1bmsgcmVjZWl2
ZWQgd2hlbiBJLUZPUldBUkQtVFNOIHdhcyBuZWdvdGlhdGVkIik7CisJCQkJfSBlbHNlIHsKKwkJ
CQkJU0NUUF9TTlBSSU5URihtc2csIHNpemVvZihtc2cpLCAiJXMiLCAiSS1GT1JXQVJELVRTTiBj
aHVuayByZWNlaXZlZCB3aGVuIEZPUldBUkQtVFNOIHdhcyBuZWdvdGlhdGVkIik7CiAJCQkJfQot
CQkJCSpmd2RfdHNuX3NlZW4gPSAxOwotCQkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19TT0NLRVRfR09ORSkgewotCQkJCQkvKiBXZSBhcmUgbm90IGludGVyZXN0ZWQgYW55
bW9yZSAqLworCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9U
T0NPTF9WSU9MQVRJT04sIG1zZyk7CisJCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihpbnAs
IHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkqb2Zmc2V0ID0gbGVuZ3Ro
OworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQkqZndkX3Rzbl9zZWVuID0gMTsKKwkJCWlm
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJCS8q
IFdlIGFyZSBub3QgaW50ZXJlc3RlZCBhbnltb3JlICovCiAjaWYgZGVmaW5lZChfX0FQUExFX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQkJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsK
LQkJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOwotCQkJCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJCQkJU0NU
UF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOworCQkJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKKwkJCQlhdG9taWNfYWRkX2lu
dCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJ
CWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKICNlbmRpZgotCQkJ
CQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAotCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18z
MSk7CisJCQkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJP
QywKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQ
X0xPQ18zMSk7CiAjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0JCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJCQkJU0NUUF9TT0NLRVRfVU5M
T0NLKHNvLCAxKTsKICNlbmRpZgotCQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCQlyZXR1cm4g
KE5VTEwpOwotCQkJCX0KLQkJCQkvKgotCQkJCSAqIEZvciBzZW5kaW5nIGEgU0FDSyB0aGlzIGxv
b2tzIGxpa2UgREFUQQotCQkJCSAqIGNodW5rcy4KLQkJCQkgKi8KLQkJCQlzdGNiLT5hc29jLmxh
c3RfZGF0YV9jaHVua19mcm9tID0gc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbTsK
LQkJCQlzY3RwX2hhbmRsZV9mb3J3YXJkX3RzbihzdGNiLAotCQkJCQkJCShzdHJ1Y3Qgc2N0cF9m
b3J3YXJkX3Rzbl9jaHVuayAqKWNoLCAmYWJvcnRfZmxhZywgbSwgKm9mZnNldCk7Ci0JCQkJaWYg
KGFib3J0X2ZsYWcpIHsKLQkJCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQkJcmV0dXJuIChOVUxM
KTsKLQkJCQl9CisJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJ
fQorCQkJLyoKKwkJCSAqIEZvciBzZW5kaW5nIGEgU0FDSyB0aGlzIGxvb2tzIGxpa2UgREFUQQor
CQkJICogY2h1bmtzLgorCQkJICovCisJCQlzdGNiLT5hc29jLmxhc3RfZGF0YV9jaHVua19mcm9t
ID0gc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbTsKKwkJCWFib3J0X2ZsYWcgPSAw
OworCQkJc2N0cF9oYW5kbGVfZm9yd2FyZF90c24oc3RjYiwKKwkJCSAgICAgICAgICAgICAgICAg
ICAgICAgIChzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuayAqKWNoLCAmYWJvcnRfZmxhZywg
bSwgKm9mZnNldCk7CisJCQlpZiAoYWJvcnRfZmxhZykgeworCQkJCSpvZmZzZXQgPSBsZW5ndGg7
CisJCQkJcmV0dXJuIChOVUxMKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFNDVFBfU1RSRUFN
X1JFU0VUOgogCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfU1RSRUFNX1JFU0VU
XG4iKTsKLQkJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoY2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1
Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfdHNuX3JlcSkpKSB7Ci0JCQkJLyogSXRzIG5vdCBvdXJzICov
Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJaWYgKHN0Y2Ig
PT0gTlVMTCkgeworCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKHN0Y2ItPmFzb2MucmVjb25maWdf
c3VwcG9ydGVkID09IDApIHsKIAkJCQlnb3RvIHVua25vd25fY2h1bms7CiAJCQl9CisJCQlpZiAo
Y2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfdHNuX3JlcSkpIHsK
KwkJCQlicmVhazsKKwkJCX0KIAkJCWlmIChzY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXQoc3RjYiwg
bSwgKm9mZnNldCwgY2gpKSB7CiAJCQkJLyogc3RvcCBwcm9jZXNzaW5nICovCiAJCQkJKm9mZnNl
dCA9IGxlbmd0aDsKQEAgLTU2ODAsMjAgKzU2MzgsMTkgQEAgc2N0cF9wcm9jZXNzX2NvbnRyb2wo
c3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVuZ3RoLAogCQkJ
YnJlYWs7CiAJCWNhc2UgU0NUUF9QQUNLRVRfRFJPUFBFRDoKIAkJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDMsICJTQ1RQX1BBQ0tFVF9EUk9QUEVEXG4iKTsKLQkJCS8qIHJlLWdldCBpdCBhbGwg
cGxlYXNlICovCisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlp
ZiAoc3RjYi0+YXNvYy5wa3Rkcm9wX3N1cHBvcnRlZCA9PSAwKSB7CisJCQkJZ290byB1bmtub3du
X2NodW5rOworCQkJfQogCQkJaWYgKGNoa19sZW5ndGggPCBzaXplb2Yoc3RydWN0IHNjdHBfcGt0
ZHJvcF9jaHVuaykpIHsKLQkJCQkvKiBJdHMgbm90IG91cnMgKi8KLQkJCQkqb2Zmc2V0ID0gbGVu
Z3RoOwotCQkJCXJldHVybiAoc3RjYik7CisJCQkJYnJlYWs7CiAJCQl9Ci0KLQkJCWlmICgoc3Rj
YiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkpIHsKLQkJCQlp
ZiAoc3RjYi0+YXNvYy5wa3Rkcm9wX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJCWdvdG8gdW5rbm93
bl9jaHVuazsKLQkJCQl9CisJCQlpZiAoKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwp
KSB7CiAJCQkJc2N0cF9oYW5kbGVfcGFja2V0X2Ryb3BwZWQoKHN0cnVjdCBzY3RwX3BrdGRyb3Bf
Y2h1bmsgKiljaCwKLQkJCQkJCQkgICBzdGNiLCAqbmV0cCwKLQkJCQkJCQkgICBtaW4oY2hrX2xl
bmd0aCwgY29udGlndW91cykpOworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0Y2Is
ICpuZXRwLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbihjaGtfbGVuZ3RoLCBj
b250aWd1b3VzKSk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBTQ1RQX0FVVEhFTlRJQ0FUSU9O
OgpAQCAtNTcwNiwyMSArNTY2MywyMSBAQCBzY3RwX3Byb2Nlc3NfY29udHJvbChzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IGlwaGxlbiwgaW50ICpvZmZzZXQsIGludCBsZW5ndGgsCiAJCQkJCWF1dGhfc2tp
cHBlZCA9IDE7CiAJCQkJfQogCQkJCS8qIHNraXAgdGhpcyBjaHVuayAodGVtcG9yYXJpbHkpICov
Ci0JCQkJZ290byBuZXh0X2NodW5rOworCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKHN0Y2ItPmFz
b2MuYXV0aF9zdXBwb3J0ZWQgPT0gMCkgewogCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKIAkJCX0K
IAkJCWlmICgoY2hrX2xlbmd0aCA8IChzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9jaHVuaykpKSB8
fAogCQkJICAgIChjaGtfbGVuZ3RoID4gKHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rKSAr
Ci0JCQkJCSAgIFNDVFBfQVVUSF9ESUdFU1RfTEVOX01BWCkpKSB7CisJCQkgICAgICAgICAgICAg
ICAgICBTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVgpKSkgewogCQkJCS8qIEl0cyBub3Qgb3VycyAq
LwogCQkJCSpvZmZzZXQgPSBsZW5ndGg7CiAJCQkJcmV0dXJuIChzdGNiKTsKIAkJCX0KIAkJCWlm
IChnb3RfYXV0aCA9PSAxKSB7CiAJCQkJLyogc2tpcCB0aGlzIGNodW5rLi4uIGl0J3MgYWxyZWFk
eSBhdXRoJ2QgKi8KLQkJCQlnb3RvIG5leHRfY2h1bms7CisJCQkJYnJlYWs7CiAJCQl9CiAJCQln
b3RfYXV0aCA9IDE7CiAJCQlpZiAoc2N0cF9oYW5kbGVfYXV0aChzdGNiLCAoc3RydWN0IHNjdHBf
YXV0aF9jaHVuayAqKWNoLCBtLCAqb2Zmc2V0KSkgewpAQCAtNTc4MSw3ICs1NzM4LDcgQEAgc2N0
cF9wcm9jZXNzX2NvbnRyb2woc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCAqb2Zmc2V0
LCBpbnQgbGVuZ3RoLAogCQkJYnJlYWs7CiAJCX0KIAkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmto
ZHIgKilzY3RwX21fZ2V0cHRyKG0sICpvZmZzZXQsCi0JCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2NodW5raGRyKSwgY2h1bmtfYnVmKTsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkciksIGNodW5rX2J1Zik7
CiAJCWlmIChjaCA9PSBOVUxMKSB7CiAJCQkqb2Zmc2V0ID0gbGVuZ3RoOwogCQkJcmV0dXJuIChz
dGNiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX29zX3Vz
ZXJzcGFjZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNl
LmgKaW5kZXggMTQ3NjY2MDU0MGM1Mzg0NGIzYTYyMTMxNzZhMWE0NTU5ZjBkMzI2Yy4uNDZiNjE4
MTEwYzM3YWQ4ODY0ZWIzODkzNjY2MjEwMmQ4ZjliNjY3MiAxMDA3NTUKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNlLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNlLmgKQEAgLTI4Myw5ICsyODMsMTMgQEAg
dHlwZWRlZiBjaGFyKiBjYWRkcl90OwogCiAjZWxzZSAvKiAhZGVmaW5lZChVc2Vyc3BhY2Vfb3Nf
V2luZG93cykgKi8KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWYgZGVmaW5lZChfX0RyYWdv
bkZseV9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fbGludXhfXykgfHwg
ZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9f
bmF0aXZlX2NsaWVudF9fKSB8fCBkZWZpbmVkKF9fRnVjaHNpYV9fKSB8fCBkZWZpbmVkKF9fRU1T
Q1JJUFRFTl9QVEhSRUFEU19fKQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworI2lmIGRlZmluZWQo
X19FTVNDUklQVEVOX18pICYmICFkZWZpbmVkKF9fRU1TQ1JJUFRFTl9QVEhSRUFEU19fKQorI2Vy
cm9yICJVbnN1cHBvcnRlZCBidWlsZCBjb25maWd1cmF0aW9uLiIKICNlbmRpZgorCisjaW5jbHVk
ZSA8cHRocmVhZC5oPgorCiB0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCB1c2VybGFuZF9tdXRleF90
OwogdHlwZWRlZiBwdGhyZWFkX2NvbmRfdCB1c2VybGFuZF9jb25kX3Q7CiB0eXBlZGVmIHB0aHJl
YWRfdCB1c2VybGFuZF90aHJlYWRfdDsKQEAgLTg4Miw3ICs4ODYsNyBAQCBpbnQgc2N0cF91c2Vy
c3BhY2VfZ2V0X210dV9mcm9tX2lmbih1aW50MzJfdCBpZl9pbmRleCwgaW50IGFmKTsKIAogI2Rl
ZmluZSBTQ1RQX0dBVEhFUl9NVFVfRlJPTV9ST1VURShzY3RwX2lmYSwgc2EsIHJ0KSAoKHJ0ICE9
IE5VTEwpID8gcnQtPnJ0X3JteC5ybXhfbXR1IDogMCkKIAotI2RlZmluZSBTQ1RQX0dBVEhFUl9N
VFVfRlJPTV9JTlRGQyhzY3RwX2lmbikgIHNjdHBfdXNlcnNwYWNlX2dldF9tdHVfZnJvbV9pZm4o
aWZfbmFtZXRvaW5kZXgoKChzdHJ1Y3QgaWZhZGRycyAqKSAoc2N0cF9pZm4pKS0+aWZhX25hbWUp
LCBBRl9JTkVUKQorI2RlZmluZSBTQ1RQX0dBVEhFUl9NVFVfRlJPTV9JTlRGQyhzY3RwX2lmbikg
KHNjdHBfaWZuLT5pZm5fbXR1KQogCiAjZGVmaW5lIFNDVFBfU0VUX01UVV9PRl9ST1VURShzYSwg
cnQsIG10dSkgZG8geyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJ0ICE9IE5VTEwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX291dHB1dC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
b3V0cHV0LmMKaW5kZXggNmE3ZGZmOTljMjQ5YWUxZmU2OTA1MTI5OGI0NTdmYTdmNDBmYzUwMS4u
ODAwZTEzNmNiNzY4YzNhOGI4MjEyM2IwODRlMjUyYWU2YjZiYzBjMiAxMDA3NTUKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKQEAgLTM3MzYsOSArMzczNiw4IEBAIHNjdHBf
cHJvY2Vzc19jbXNnc19mb3JfaW5pdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVm
ICpjb250cm9sLCBpbnQgKmVyCiAJCQkJCX0KIAkJCQkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFz
b2Muc3RyZWFtb3V0Y250OyBpKyspIHsKIAkJCQkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Muc3Ry
bW91dFtpXS5vdXRxdWV1ZSk7CisJCQkJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3Nz
X2luaXRfc3RyZWFtKHN0Y2IsICZzdGNiLT5hc29jLnN0cm1vdXRbaV0sIE5VTEwpOwogCQkJCQkJ
c3RjYi0+YXNvYy5zdHJtb3V0W2ldLmNodW5rc19vbl9xdWV1ZXMgPSAwOwotCQkJCQkJc3RjYi0+
YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX29yZGVyZWQgPSAwOwotCQkJCQkJc3RjYi0+YXNvYy5z
dHJtb3V0W2ldLm5leHRfbWlkX3Vub3JkZXJlZCA9IDA7CiAjaWYgZGVmaW5lZChTQ1RQX0RFVEFJ
TEVEX1NUUl9TVEFUUykKIAkJCQkJCWZvciAoaiA9IDA7IGogPCBTQ1RQX1BSX1NDVFBfTUFYICsg
MTsgaisrKSB7CiAJCQkJCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmFiYW5kb25lZF9zZW50W2pd
ID0gMDsKQEAgLTM3NDgsMTAgKzM3NDcsMTEgQEAgc2N0cF9wcm9jZXNzX2Ntc2dzX2Zvcl9pbml0
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKmNvbnRyb2wsIGludCAqZXIKIAkJ
CQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5hYmFuZG9uZWRfc2VudFswXSA9IDA7CiAJCQkJCQlz
dGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3Vuc2VudFswXSA9IDA7CiAjZW5kaWYKKwkJ
CQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5uZXh0X21pZF9vcmRlcmVkID0gMDsKKwkJCQkJCXN0
Y2ItPmFzb2Muc3RybW91dFtpXS5uZXh0X21pZF91bm9yZGVyZWQgPSAwOwogCQkJCQkJc3RjYi0+
YXNvYy5zdHJtb3V0W2ldLnNpZCA9IGk7CiAJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubGFz
dF9tc2dfaW5jb21wbGV0ZSA9IDA7CiAJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUg
PSBTQ1RQX1NUUkVBTV9PUEVOSU5HOwotCQkJCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0
cF9zc19pbml0X3N0cmVhbShzdGNiLCAmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLCBOVUxMKTsKIAkJ
CQkJfQogCQkJCX0KIAkJCQlicmVhazsKQEAgLTU2ODIsMjQgKzU2ODIsMjMgQEAgc2N0cF9hcmV0
aGVyZV91bnJlY29nbml6ZWRfcGFyYW1ldGVycyhzdHJ1Y3QgbWJ1ZiAqaW5faW5pdHBrdCwKIAly
ZXR1cm4gKG9wX2Vycik7CiB9CiAKLXN0YXRpYyBpbnQKKy8qCisgKiBHaXZlbiBhIElOSVQgY2h1
bmssIGxvb2sgdGhyb3VnaCB0aGUgcGFyYW1ldGVycyB0byB2ZXJpZnkgdGhhdCB0aGVyZQorICog
YXJlIG5vIG5ldyBhZGRyZXNzZXMuCisgKiBSZXR1cm4gdHJ1ZSwgaWYgdGhlcmUgaXMgYSBuZXcg
YWRkcmVzcyBvciB0aGVyZSBpcyBhIHByb2JsZW0gcGFyc2luZworICAgdGhlIHBhcmFtZXRlcnMu
IFByb3ZpZGUgYW4gb3B0aW9uYWwgZXJyb3IgY2F1c2UgdXNlZCB3aGVuIHNlbmRpbmcgYW4gQUJP
UlQuCisgKiBSZXR1cm4gZmFsc2UsIGlmIHRoZXJlIGFyZSBubyBuZXcgYWRkcmVzc2VzIGFuZCB0
aGVyZSBpcyBubyBwcm9ibGVtIGluCisgICBwYXJhbWV0ZXIgcHJvY2Vzc2luZy4KKyAqLworc3Rh
dGljIGJvb2wKIHNjdHBfYXJlX3RoZXJlX25ld19hZGRyZXNzZXMoc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MsCi0gICAgc3RydWN0IG1idWYgKmluX2luaXRwa3QsIGludCBvZmZzZXQsIHN0
cnVjdCBzb2NrYWRkciAqc3JjKQorICAgIHN0cnVjdCBtYnVmICppbl9pbml0cGt0LCBpbnQgb2Zm
c2V0LCBpbnQgbGltaXQsIHN0cnVjdCBzb2NrYWRkciAqc3JjLAorICAgIHN0cnVjdCBtYnVmICoq
b3BfZXJyKQogewotCS8qCi0JICogR2l2ZW4gYSBJTklUIHBhY2tldCwgbG9vayB0aHJvdWdoIHRo
ZSBwYWNrZXQgdG8gdmVyaWZ5IHRoYXQgdGhlcmUKLQkgKiBhcmUgTk8gbmV3IGFkZHJlc3Nlcy4g
QXMgd2UgZ28gdGhyb3VnaCB0aGUgcGFyYW1ldGVycyBhZGQgcmVwb3J0cwotCSAqIG9mIGFueSB1
bi11bmRlcnN0b29kIHBhcmFtZXRlcnMgdGhhdCByZXF1aXJlIGFuIGVycm9yLiAgQWxzbyB3ZQot
CSAqIG11c3QgcmV0dXJuICgxKSB0byBkcm9wIHRoZSBwYWNrZXQgaWYgd2Ugc2VlIGEgdW4tdW5k
ZXJzdG9vZAotCSAqIHBhcmFtZXRlciB0aGF0IHRlbGxzIHVzIHRvIGRyb3AgdGhlIGNodW5rLgot
CSAqLwogCXN0cnVjdCBzb2NrYWRkciAqc2FfdG91c2U7CiAJc3RydWN0IHNvY2thZGRyICpzYTsK
IAlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGhkciwgcGFyYW1zOwotCXVpbnQxNl90IHB0eXBlLCBw
bGVuOwotCXVpbnQ4X3QgZm5kOwogCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQlpbnQgY2hlY2tf
c3JjOwogI2lmZGVmIElORVQKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luNCwgKnNhNDsKICNlbmRp
ZgpAQCAtNTcwOSw3ICs1NzA4LDEwIEBAIHNjdHBfYXJlX3RoZXJlX25ld19hZGRyZXNzZXMoc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQog
CXN0cnVjdCBzb2NrYWRkcl9jb25uICpzYWM7CiAjZW5kaWYKKwl1aW50MTZfdCBwdHlwZSwgcGxl
bjsKKwlib29sIGZuZCwgY2hlY2tfc3JjOwogCisJKm9wX2VyciA9IE5VTEw7CiAjaWZkZWYgSU5F
VAogCW1lbXNldCgmc2luNCwgMCwgc2l6ZW9mKHNpbjQpKTsKIAlzaW40LnNpbl9mYW1pbHkgPSBB
Rl9JTkVUOwpAQCAtNTcyNSwyNiArNTcyNywyNiBAQCBzY3RwX2FyZV90aGVyZV9uZXdfYWRkcmVz
c2VzKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogI2VuZGlmCiAjZW5kaWYKIAkvKiBG
aXJzdCB3aGF0IGFib3V0IHRoZSBzcmMgYWRkcmVzcyBvZiB0aGUgcGt0ID8gKi8KLQljaGVja19z
cmMgPSAwOworCWNoZWNrX3NyYyA9IGZhbHNlOwogCXN3aXRjaCAoc3JjLT5zYV9mYW1pbHkpIHsK
ICNpZmRlZiBJTkVUCiAJY2FzZSBBRl9JTkVUOgogCQlpZiAoYXNvYy0+c2NvcGUuaXB2NF9hZGRy
X2xlZ2FsKSB7Ci0JCQljaGVja19zcmMgPSAxOworCQkJY2hlY2tfc3JjID0gdHJ1ZTsKIAkJfQog
CQlicmVhazsKICNlbmRpZgogI2lmZGVmIElORVQ2CiAJY2FzZSBBRl9JTkVUNjoKIAkJaWYgKGFz
b2MtPnNjb3BlLmlwdjZfYWRkcl9sZWdhbCkgewotCQkJY2hlY2tfc3JjID0gMTsKKwkJCWNoZWNr
X3NyYyA9IHRydWU7CiAJCX0KIAkJYnJlYWs7CiAjZW5kaWYKICNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCiAJY2FzZSBBRl9DT05OOgogCQlpZiAoYXNvYy0+c2NvcGUuY29ubl9hZGRyX2xlZ2Fs
KSB7Ci0JCQljaGVja19zcmMgPSAxOworCQkJY2hlY2tfc3JjID0gdHJ1ZTsKIAkJfQogCQlicmVh
azsKICNlbmRpZgpAQCAtNTc1Myw3ICs1NzU1LDcgQEAgc2N0cF9hcmVfdGhlcmVfbmV3X2FkZHJl
c3NlcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJYnJlYWs7CiAJfQogCWlmIChj
aGVja19zcmMpIHsKLQkJZm5kID0gMDsKKwkJZm5kID0gZmFsc2U7CiAJCVRBSUxRX0ZPUkVBQ0go
bmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CiAJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIg
KikmbmV0LT5yby5fbF9hZGRyOwogCQkJaWYgKHNhLT5zYV9mYW1pbHkgPT0gc3JjLT5zYV9mYW1p
bHkpIHsKQEAgLTU3NjQsNyArNTc2Niw3IEBAIHNjdHBfYXJlX3RoZXJlX25ld19hZGRyZXNzZXMo
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQkJCXNhNCA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKilzYTsKIAkJCQkJc3JjNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzcmM7CiAJCQkJ
CWlmIChzYTQtPnNpbl9hZGRyLnNfYWRkciA9PSBzcmM0LT5zaW5fYWRkci5zX2FkZHIpIHsKLQkJ
CQkJCWZuZCA9IDE7CisJCQkJCQlmbmQgPSB0cnVlOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJ
CQl9CkBAIC01Nzc2LDcgKzU3NzgsNyBAQCBzY3RwX2FyZV90aGVyZV9uZXdfYWRkcmVzc2VzKHN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJCQlzYTYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKXNhOwogCQkJCQlzcmM2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzcmM7CiAJCQkJ
CWlmIChTQ1RQNl9BUkVfQUREUl9FUVVBTChzYTYsIHNyYzYpKSB7Ci0JCQkJCQlmbmQgPSAxOwor
CQkJCQkJZm5kID0gdHJ1ZTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJfQpAQCAtNTc4OCwx
NiArNTc5MCwyMiBAQCBzY3RwX2FyZV90aGVyZV9uZXdfYWRkcmVzc2VzKHN0cnVjdCBzY3RwX2Fz
c29jaWF0aW9uICphc29jLAogCQkJCQlzYWMgPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilzYTsK
IAkJCQkJc3JjYyA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNyYzsKIAkJCQkJaWYgKHNhYy0+
c2Nvbm5fYWRkciA9PSBzcmNjLT5zY29ubl9hZGRyKSB7Ci0JCQkJCQlmbmQgPSAxOworCQkJCQkJ
Zm5kID0gdHJ1ZTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJfQogI2VuZGlmCiAJCQl9CiAJ
CX0KLQkJaWYgKGZuZCA9PSAwKSB7Ci0JCQkvKiBOZXcgYWRkcmVzcyBhZGRlZCEgbm8gbmVlZCB0
byBsb29rIGZ1cnRoZXIuICovCi0JCQlyZXR1cm4gKDEpOworCQlpZiAoIWZuZCkgeworCQkJLyoK
KwkJCSAqIElmIHNlbmRpbmcgYW4gQUJPUlQgaW4gY2FzZSBvZiBhbiBhZGRpdGlvbmFsIGFkZHJl
c3MsCisJCQkgKiBkb24ndCB1c2UgdGhlIG5ldyBhZGRyZXNzIGVycm9yIGNhdXNlLgorCQkJICog
VGhpcyBsb29rcyBubyBkaWZmZXJlbnQgdGhhbiBpZiBubyBsaXN0ZW5lciB3YXMKKwkJCSAqIHBy
ZXNlbnQuCisJCQkgKi8KKwkJCSpvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksICJBZGRyZXNzIGFkZGVkIik7CisJCQlyZXR1
cm4gKHRydWUpOwogCQl9CiAJfQogCS8qIE9rIHNvIGZhciBsZXRzIG11bmdlIHRocm91Z2ggdGhl
IHJlc3Qgb2YgdGhlIHBhY2tldCAqLwpAQCAtNTgwNyw2ICs1ODE1LDE0IEBAIHNjdHBfYXJlX3Ro
ZXJlX25ld19hZGRyZXNzZXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCXNhX3Rv
dXNlID0gTlVMTDsKIAkJcHR5cGUgPSBudG9ocyhwaGRyLT5wYXJhbV90eXBlKTsKIAkJcGxlbiA9
IG50b2hzKHBoZHItPnBhcmFtX2xlbmd0aCk7CisJCWlmIChvZmZzZXQgKyBwbGVuID4gbGltaXQp
IHsKKwkJCSpvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xf
VklPTEFUSU9OLCAiUGFydGlhbCBwYXJhbWV0ZXIiKTsKKwkJCXJldHVybiAodHJ1ZSk7CisJCX0K
KwkJaWYgKHBsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7CisJCQkqb3BfZXJy
ID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgIlBh
cmFtZXRlciBsZW5ndGggdG9vIHNtYWxsIik7CisJCQlyZXR1cm4gKHRydWUpOworCQl9CiAJCXN3
aXRjaCAocHR5cGUpIHsKICNpZmRlZiBJTkVUCiAJCWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6CkBA
IC01ODE0LDEyICs1ODMwLDE0IEBAIHNjdHBfYXJlX3RoZXJlX25ld19hZGRyZXNzZXMoc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAq
cDQsIHA0X2J1ZjsKIAogCQkJaWYgKHBsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRy
X3BhcmFtKSkgewotCQkJCXJldHVybiAoMSk7CisJCQkJKm9wX2VyciA9IHNjdHBfZ2VuZXJhdGVf
Y2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sICJQYXJhbWV0ZXIgbGVuZ3RoIGls
bGVnYWwiKTsKKwkJCQlyZXR1cm4gKHRydWUpOwogCQkJfQogCQkJcGhkciA9IHNjdHBfZ2V0X25l
eHRfcGFyYW0oaW5faW5pdHBrdCwgb2Zmc2V0LAogCQkJICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciAqKSZwNF9idWYsIHNpemVvZihwNF9idWYpKTsKIAkJCWlmIChwaGRyID09IE5VTEwpIHsKLQkJ
CQlyZXR1cm4gKDEpOworCQkJCSpvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FV
U0VfUFJPVE9DT0xfVklPTEFUSU9OLCAiIik7CisJCQkJcmV0dXJuICh0cnVlKTsKIAkJCX0KIAkJ
CWlmIChhc29jLT5zY29wZS5pcHY0X2FkZHJfbGVnYWwpIHsKIAkJCQlwNCA9IChzdHJ1Y3Qgc2N0
cF9pcHY0YWRkcl9wYXJhbSAqKXBoZHI7CkBAIC01ODM1LDEyICs1ODUzLDE0IEBAIHNjdHBfYXJl
X3RoZXJlX25ld19hZGRyZXNzZXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQlz
dHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqcDYsIHA2X2J1ZjsKIAogCQkJaWYgKHBsZW4gIT0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKSkgewotCQkJCXJldHVybiAoMSk7CisJ
CQkJKm9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9M
QVRJT04sICJQYXJhbWV0ZXIgbGVuZ3RoIGlsbGVnYWwiKTsKKwkJCQlyZXR1cm4gKHRydWUpOwog
CQkJfQogCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0oaW5faW5pdHBrdCwgb2Zmc2V0LAog
CQkJICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZwNl9idWYsIHNpemVvZihwNl9idWYpKTsK
IAkJCWlmIChwaGRyID09IE5VTEwpIHsKLQkJCQlyZXR1cm4gKDEpOworCQkJCSpvcF9lcnIgPSBz
Y3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCAiIik7CisJ
CQkJcmV0dXJuICh0cnVlKTsKIAkJCX0KIAkJCWlmIChhc29jLT5zY29wZS5pcHY2X2FkZHJfbGVn
YWwpIHsKIAkJCQlwNiA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqKXBoZHI7CkBAIC01
ODU3LDcgKzU4NzcsNyBAQCBzY3RwX2FyZV90aGVyZV9uZXdfYWRkcmVzc2VzKHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jLAogCQl9CiAJCWlmIChzYV90b3VzZSkgewogCQkJLyogb2ssIHNh
X3RvdXNlIHBvaW50cyB0byBvbmUgdG8gY2hlY2sgKi8KLQkJCWZuZCA9IDA7CisJCQlmbmQgPSBm
YWxzZTsKIAkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CiAJ
CQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkcjsKIAkJCQlpZiAoc2Et
PnNhX2ZhbWlseSAhPSBzYV90b3VzZS0+c2FfZmFtaWx5KSB7CkBAIC01ODY4LDcgKzU4ODgsNyBA
QCBzY3RwX2FyZV90aGVyZV9uZXdfYWRkcmVzc2VzKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jLAogCQkJCQlzYTQgPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7CiAJCQkJCWlmIChzYTQt
PnNpbl9hZGRyLnNfYWRkciA9PQogCQkJCQkgICAgc2luNC5zaW5fYWRkci5zX2FkZHIpIHsKLQkJ
CQkJCWZuZCA9IDE7CisJCQkJCQlmbmQgPSB0cnVlOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJ
CQl9CkBAIC01ODc4LDIxICs1ODk4LDMxIEBAIHNjdHBfYXJlX3RoZXJlX25ld19hZGRyZXNzZXMo
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQkJCXNhNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopc2E7CiAJCQkJCWlmIChTQ1RQNl9BUkVfQUREUl9FUVVBTCgKIAkJCQkJICAgIHNh
NiwgJnNpbjYpKSB7Ci0JCQkJCQlmbmQgPSAxOworCQkJCQkJZm5kID0gdHJ1ZTsKIAkJCQkJCWJy
ZWFrOwogCQkJCQl9CiAJCQkJfQogI2VuZGlmCiAJCQl9CiAJCQlpZiAoIWZuZCkgewotCQkJCS8q
IE5ldyBhZGRyIGFkZGVkISBubyBuZWVkIHRvIGxvb2sgZnVydGhlciAqLwotCQkJCXJldHVybiAo
MSk7CisJCQkJLyoKKwkJCQkgKiBJZiBzZW5kaW5nIGFuIEFCT1JUIGluIGNhc2Ugb2YgYW4gYWRk
aXRpb25hbAorCQkJCSAqIGFkZHJlc3MsIGRvbid0IHVzZSB0aGUgbmV3IGFkZHJlc3MgZXJyb3IK
KwkJCQkgKiBjYXVzZS4KKwkJCQkgKiBUaGlzIGxvb2tzIG5vIGRpZmZlcmVudCB0aGFuIGlmIG5v
IGxpc3RlbmVyCisJCQkJICogd2FzIHByZXNlbnQuCisJCQkJICovCisJCQkJKm9wX2VyciA9IHNj
dHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwg
IkFkZHJlc3MgYWRkZWQiKTsKKwkJCQlyZXR1cm4gKHRydWUpOwogCQkJfQogCQl9CiAJCW9mZnNl
dCArPSBTQ1RQX1NJWkUzMihwbGVuKTsKKwkJaWYgKG9mZnNldCA+PSBsaW1pdCkgeworCQkJYnJl
YWs7CisJCX0KIAkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0oaW5faW5pdHBrdCwgb2Zmc2V0
LCAmcGFyYW1zLCBzaXplb2YocGFyYW1zKSk7CiAJfQotCXJldHVybiAoMCk7CisJcmV0dXJuIChm
YWxzZSk7CiB9CiAKIC8qCkBAIC01OTA4LDcgKzU5MzgsNyBAQCBzY3RwX3NlbmRfaW5pdGlhdGVf
YWNrKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAq
ZHN0LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0cnVjdCBz
Y3RwX2luaXRfY2h1bmsgKmluaXRfY2hrLAogI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCSAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMy
X3QgbWZsb3dpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBtZmxvd3R5cGUsIHVp
bnQzMl90IG1mbG93aWQsCiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
dnJmX2lkLCB1aW50MTZfdCBwb3J0KQogewpAQCAtNTk1NSwxNiArNTk4NSwxMCBAQCBzY3RwX3Nl
bmRfaW5pdGlhdGVfYWNrKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKIAl9CiAJaWYgKChhc29jICE9IE5VTEwpICYmCiAJICAgIChTQ1RQX0dFVF9TVEFURShz
dGNiKSAhPSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSkgewotCQlpZiAoc2N0cF9hcmVfdGhlcmVf
bmV3X2FkZHJlc3Nlcyhhc29jLCBpbml0X3BrdCwgb2Zmc2V0LCBzcmMpKSB7CisJCWlmIChzY3Rw
X2FyZV90aGVyZV9uZXdfYWRkcmVzc2VzKGFzb2MsIGluaXRfcGt0LCBvZmZzZXQsIG9mZnNldCAr
IG50b2hzKGluaXRfY2hrLT5jaC5jaHVua19sZW5ndGgpLCBzcmMsICZvcF9lcnIpKSB7CiAJCQkv
KgogCQkJICogbmV3IGFkZHJlc3Nlcywgb3V0IG9mIGhlcmUgaW4gbm9uLWNvb2tpZS13YWl0IHN0
YXRlcwotCQkJICoKLQkJCSAqIFNlbmQgYW4gQUJPUlQsIHdpdGhvdXQgdGhlIG5ldyBhZGRyZXNz
IGVycm9yIGNhdXNlLgotCQkJICogVGhpcyBsb29rcyBubyBkaWZmZXJlbnQgdGhhbiBpZiBubyBs
aXN0ZW5lcgotCQkJICogd2FzIHByZXNlbnQuCiAJCQkgKi8KLQkJCW9wX2VyciA9IHNjdHBfZ2Vu
ZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKLQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkZHJlc3MgYWRkZWQiKTsKIAkJCXNjdHBfc2Vu
ZF9hYm9ydChpbml0X3BrdCwgaXBobGVuLCBzcmMsIGRzdCwgc2gsIDAsIG9wX2VyciwKICNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQogCQkJICAgICAg
ICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgaW5wLT5maWJudW0sCkBAIC0xMjkyOCwxNSAr
MTI5NTIsMjQgQEAgc2N0cF9zZW5kX3N0cl9yZXNldF9yZXEoc3RydWN0IHNjdHBfdGNiICpzdGNi
LAogCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2NsZWFyKHN0Y2IsICZzdGNiLT5h
c29jLCAwLCAxKTsKIAkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBp
KyspIHsKIAkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSk7CisJ
CQkvKiBGSVggTUUgRklYIE1FICovCisJCQkvKiBUaGlzIHNob3VsZCBiZSBhIFNTX0NPUFkgb3Bl
cmF0aW9uIEZJWCBNRSBTVFJFQU0gU0NIRURVTEVSIEVYUEVSVCAqLworCQkJc3RjYi0+YXNvYy5z
c19mdW5jdGlvbnMuc2N0cF9zc19pbml0X3N0cmVhbShzdGNiLCAmc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLCAmb2xkc3RyZWFtW2ldKTsKIAkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5jaHVua3Nfb25f
cXVldWVzID0gb2xkc3RyZWFtW2ldLmNodW5rc19vbl9xdWV1ZXM7CisjaWYgZGVmaW5lZChTQ1RQ
X0RFVEFJTEVEX1NUUl9TVEFUUykKKwkJCWZvciAoaiA9IDA7IGogPCBTQ1RQX1BSX1NDVFBfTUFY
ICsgMTsgaisrKSB7CisJCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmFiYW5kb25lZF9zZW50W2pd
ID0gb2xkc3RyZWFtW2ldLmFiYW5kb25lZF9zZW50W2pdOworCQkJCXN0Y2ItPmFzb2Muc3RybW91
dFtpXS5hYmFuZG9uZWRfdW5zZW50W2pdID0gb2xkc3RyZWFtW2ldLmFiYW5kb25lZF91bnNlbnRb
al07CisJCQl9CisjZWxzZQorCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmFiYW5kb25lZF9zZW50
WzBdID0gb2xkc3RyZWFtW2ldLmFiYW5kb25lZF9zZW50WzBdOworCQkJc3RjYi0+YXNvYy5zdHJt
b3V0W2ldLmFiYW5kb25lZF91bnNlbnRbMF0gPSBvbGRzdHJlYW1baV0uYWJhbmRvbmVkX3Vuc2Vu
dFswXTsKKyNlbmRpZgogCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX29yZGVyZWQg
PSBvbGRzdHJlYW1baV0ubmV4dF9taWRfb3JkZXJlZDsKIAkJCXN0Y2ItPmFzb2Muc3RybW91dFtp
XS5uZXh0X21pZF91bm9yZGVyZWQgPSBvbGRzdHJlYW1baV0ubmV4dF9taWRfdW5vcmRlcmVkOwog
CQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmxhc3RfbXNnX2luY29tcGxldGUgPSBvbGRzdHJlYW1b
aV0ubGFzdF9tc2dfaW5jb21wbGV0ZTsKIAkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5zaWQgPSBp
OwogCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0gb2xkc3RyZWFtW2ldLnN0YXRlOwot
CQkJLyogRklYIE1FIEZJWCBNRSAqLwotCQkJLyogVGhpcyBzaG91bGQgYmUgYSBTU19DT1BZIG9w
ZXJhdGlvbiBGSVggTUUgU1RSRUFNIFNDSEVEVUxFUiBFWFBFUlQgKi8KLQkJCXN0Y2ItPmFzb2Mu
c3NfZnVuY3Rpb25zLnNjdHBfc3NfaW5pdF9zdHJlYW0oc3RjYiwgJnN0Y2ItPmFzb2Muc3RybW91
dFtpXSwgJm9sZHN0cmVhbVtpXSk7CiAJCQkvKiBub3cgYW55dGhpbmcgb24gdGhvc2UgcXVldWVz
PyAqLwogCQkJVEFJTFFfRk9SRUFDSF9TQUZFKHNwLCAmb2xkc3RyZWFtW2ldLm91dHF1ZXVlLCBu
ZXh0LCBuc3ApIHsKIAkJCQlUQUlMUV9SRU1PVkUoJm9sZHN0cmVhbVtpXS5vdXRxdWV1ZSwgc3As
IG5leHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNi
LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuYwppbmRleCBjY2ViOWUz
ZDNmMjk2YjY4MmFmYzE2NTI1MjJlYjYzZDVlNmExMWU5Li5mMjFhYTEwZTIwZThjNThkYjhjNjQ0
YWIyYzE3ZGFlOGZhMzU5NTAxIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9wY2IuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2Iu
YwpAQCAtMzQsNyArMzQsNyBAQAogCiAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJl
ZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX3BjYi5jIDM2NjQ4MyAyMDIwLTEwLTA2IDExOjI5
OjA4WiB0dWV4ZW4gJCIpOworX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2VuZGlmCiAKICNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KQEAgLTUxODEsNiArNTE4MSwxMCBAQCBvdXQ6CiAJCS8q
IENsZWFyIG5ldCAqLwogCQlhc29jLT5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSA9IE5VTEw7CiAJ
fQorCWlmIChuZXQgPT0gYXNvYy0+bGFzdF9uZXRfY210X3NlbmRfc3RhcnRlZCkgeworCQkvKiBD
bGVhciBuZXQgKi8KKwkJYXNvYy0+bGFzdF9uZXRfY210X3NlbmRfc3RhcnRlZCA9IE5VTEw7CisJ
fQogCWlmIChuZXQgPT0gc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKIAkJc2N0cF9mcmVlX3JlbW90
ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKIAkJc3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBO
VUxMOwpAQCAtNjQ0OSw3ICs2NDUzLDcgQEAgc2N0cF9zdGFydHVwX21jb3JlX3RocmVhZHModm9p
ZCkKIAkJKHZvaWQpa3Byb2NfY3JlYXRlKHNjdHBfbWNvcmVfdGhyZWFkLAogCQkJCSAgICh2b2lk
ICopJnNjdHBfbWNvcmVfd29ya2Vyc1tjcHVdLAogCQkJCSAgICZzY3RwX21jb3JlX3dvcmtlcnNb
Y3B1XS50aHJlYWRfcHJvYywKLQkJCQkgICBSRlBST0MsCisJCQkJICAgMCwKIAkJCQkgICBTQ1RQ
X0tUSFJFQURfUEFHRVMsCiAJCQkJICAgU0NUUF9NQ09SRV9OQU1FKTsKIAl9CkBAIC02NzA0LDcg
KzY3MDgsNyBAQCBzY3RwX3BjYl9pbml0KHZvaWQpCiAjZW5kaWYKICNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCiAJbWJ1Zl9pbml0aWFsaXplKE5VTEwpOwotCS8vIFdlYktpdCBjaGFuZ2UsIHRo
aXMgY29uZmxpY3RzIHdpdGggYXRvbWljX2luaXQKKyAgICAvLyBXZWJLaXQgY2hhbmdlLCB0aGlz
IGNvbmZsaWN0cyB3aXRoIGF0b21pY19pbml0CiAJLy8gYXRvbWljX2luaXQoKTsKICNpZiBkZWZp
bmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCiAJaWYgKHN0YXJ0X3RocmVhZHMpCkBAIC03NTMw
LDcgKzc1MzQsNyBAQCBzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICptLAogCQkJYnJlYWs7CiAJCX0KIAkJcGhkciA9IHNjdHBf
Z2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LCAmcGFyYW1fYnVmLAotCQkJCQkgICBzaXplb2YocGFy
YW1fYnVmKSk7CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwYXJhbV9idWYp
KTsKIAl9CiAJLyogTm93IGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHB1cmdlIGFueSBhZGRy
ZXNzZXMgKi8KIAlUQUlMUV9GT1JFQUNIX1NBRkUobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3Rw
X25leHQsIG5uZXQpIHsKQEAgLTc1NDAsMTEgKzc1NDQsMTUgQEAgc2N0cF9sb2FkX2FkZHJlc3Nl
c19mcm9tX2luaXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3QgbWJ1ZiAqbSwKIAkJCS8q
IHJlbW92ZSBhbmQgZnJlZSBpdCAqLwogCQkJc3RjYi0+YXNvYy5udW1uZXRzLS07CiAJCQlUQUlM
UV9SRU1PVkUoJnN0Y2ItPmFzb2MubmV0cywgbmV0LCBzY3RwX25leHQpOwotCQkJc2N0cF9mcmVl
X3JlbW90ZV9hZGRyKG5ldCk7CisJCQlpZiAobmV0ID09IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7
CisJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKKwkJCQlz
dGNiLT5hc29jLmFsdGVybmF0ZSA9IE5VTEw7CisJCQl9CiAJCQlpZiAobmV0ID09IHN0Y2ItPmFz
b2MucHJpbWFyeV9kZXN0aW5hdGlvbikgewogCQkJCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbiA9IE5VTEw7CiAJCQkJc2N0cF9zZWxlY3RfcHJpbWFyeV9kZXN0aW5hdGlvbihzdGNiKTsK
IAkJCX0KKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihuZXQpOwogCQl9CiAJfQogCWlmICgoc3Rj
Yi0+YXNvYy5lY25fc3VwcG9ydGVkID09IDEpICYmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9zaGExLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9zaGExLmMKaW5kZXggZGIwZTc1MzNmZjZhYjc2NGYwNTE3OTBjMDA2ZDJhZDE1ZDQ5ZmJk
MS4uODQ3MmMzYTFjMGJkNDEzNTVjOWYwYmQyZThiZTU0ZmEwN2U4YjJkYyAxMDA3NTUKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc2hhMS5jCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuYwpAQCAtODAsNyArODAsMjUgQEAgc2N0cF9zaGEx
X2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpj
dHgpCiB7CiAJU0hBMV9GaW5hbChkaWdlc3QsICZjdHgtPnNoYV9jdHgpOwogfQorI2VsaWYgZGVm
aW5lZChTQ1RQX1VTRV9NQkVEVExTX1NIQTEpCit2b2lkCitzY3RwX3NoYTFfaW5pdChzdHJ1Y3Qg
c2N0cF9zaGExX2NvbnRleHQgKmN0eCkKK3sKKwltYmVkdGxzX3NoYTFfaW5pdCgmY3R4LT5zaGEx
X2N0eCk7CisJbWJlZHRsc19zaGExX3N0YXJ0c19yZXQoJmN0eC0+c2hhMV9jdHgpOworfQogCit2
b2lkCitzY3RwX3NoYTFfdXBkYXRlKHN0cnVjdCBzY3RwX3NoYTFfY29udGV4dCAqY3R4LCBjb25z
dCB1bnNpZ25lZCBjaGFyICpwdHIsIHVuc2lnbmVkIGludCBzaXopCit7CisJbWJlZHRsc19zaGEx
X3VwZGF0ZV9yZXQoJmN0eC0+c2hhMV9jdHgsIHB0ciwgc2l6KTsKK30KKwordm9pZAorc2N0cF9z
aGExX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0
ICpjdHgpCit7CisJbWJlZHRsc19zaGExX2ZpbmlzaF9yZXQoJmN0eC0+c2hhMV9jdHgsIGRpZ2Vz
dCk7Cit9CiAjZWxzZQogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zaGExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9zaGExLmgKaW5kZXggZDUzNWVlNDYzOTUxODgyNzExNzI2YjM0Zjg3M2FhZjJh
ZTI3MTI2OS4uOWZmNGZmN2JkYzJmNGVjMDY4ZWRkY2JhNmRjNTY5NjQ1Y2ZmNzkxYyAxMDA3NTUK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc2hhMS5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuaApAQCAtNDYsNiArNDYsOCBAQCBfX0ZC
U0RJRCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSA8cGsxMXB1Yi5oPgogI2VsaWYgZGVmaW5lZChT
Q1RQX1VTRV9PUEVOU1NMX1NIQTEpCiAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKyNlbGlmIGRl
ZmluZWQoU0NUUF9VU0VfTUJFRFRMU19TSEExKQorI2luY2x1ZGUgPG1iZWR0bHMvc2hhMS5oPgog
I2VuZGlmCiAKIHN0cnVjdCBzY3RwX3NoYTFfY29udGV4dCB7CkBAIC01Myw2ICs1NSw4IEBAIHN0
cnVjdCBzY3RwX3NoYTFfY29udGV4dCB7CiAJc3RydWN0IFBLMTFDb250ZXh0ICpwazExX2N0eDsK
ICNlbGlmIGRlZmluZWQoU0NUUF9VU0VfT1BFTlNTTF9TSEExKQogCVNIQV9DVFggc2hhX2N0eDsK
KyNlbGlmIGRlZmluZWQoU0NUUF9VU0VfTUJFRFRMU19TSEExKQorCW1iZWR0bHNfc2hhMV9jb250
ZXh0IHNoYTFfY3R4OwogI2Vsc2UKIAl1bnNpZ25lZCBpbnQgQTsKIAl1bnNpZ25lZCBpbnQgQjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9u
cy5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3NfZnVuY3Rpb25zLmMKaW5k
ZXggNDMxY2JmMjNhZTg0ZjhmNWYxZWQxZmZjZWNmMWQwZmVhZTdkZGZhMC4uYzIzZTE0MmVhNDRi
ODkwYjdmN2VjOTk0MjZkMjc1YTM4MWIyNDQ1ZiAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfc3NfZnVuY3Rpb25zLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfc3NfZnVuY3Rpb25zLmMKQEAgLTU4OSw3ICs1ODksNyBAQCBzY3RwX3Nz
X3ByaW9fc2V0X3ZhbHVlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MsCiAKIC8qCiAgKiBGYWlyIGJhbmR3aWR0aCBhbGdvcml0aG0uCi0gKiBNYWlu
dGFpbnMgYW4gZXF1YWwgdHJvdWdocHV0IHBlciBzdHJlYW0uCisgKiBNYWludGFpbnMgYW4gZXF1
YWwgdGhyb3VnaHB1dCBwZXIgc3RyZWFtLgogICovCiBzdGF0aWMgdm9pZAogc2N0cF9zc19mYl9j
bGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
LApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3RydWN0cy5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3RydWN0cy5oCmluZGV4IDcwOGFi
NzAyZjExOGUyY2ViMWFmNGJkNTFjNzEzNjZiOTVmNTRkNjMuLmMzY2U3NDk5MjJlMGU0OTZkYTAw
ZTFiZWYxZTkwN2U0YWU4OWMyMWQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3N0cnVjdHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9zdHJ1Y3RzLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZC
U0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9zdHJ1Y3RzLmggMzY1MDcxIDIw
MjAtMDktMDEgMjE6MTk6MTRaIG1qZyAkIik7CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjZW5k
aWYKIAogI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1NUUlVDVFNfSF8KQEAgLTU5OCw2ICs1OTgsMjAg
QEAgc3RydWN0IHNjdHBfc3RyZWFtX2luIHsKIFRBSUxRX0hFQUQoc2N0cHdoZWVsX2xpc3RoZWFk
LCBzY3RwX3N0cmVhbV9vdXQpOwogVEFJTFFfSEVBRChzY3RwbGlzdF9saXN0aGVhZCwgc2N0cF9z
dHJlYW1fcXVldWVfcGVuZGluZyk7CiAKKy8qCisgKiBUaGlzIHVuaW9uIGhvbGRzIGFsbCBkYXRh
IG5lY2Vzc2FyeSBmb3IKKyAqIGRpZmZlcmVudCBzdHJlYW0gc2NoZWR1bGVycy4KKyAqLworc3Ry
dWN0IHNjaGVkdWxpbmdfZGF0YSB7CisJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqbG9ja2VkX29u
X3NlbmRpbmc7CisJLyogY2lyY3VsYXIgbG9va2luZyBmb3Igb3V0cHV0IHNlbGVjdGlvbiAqLwor
CXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKmxhc3Rfb3V0X3N0cmVhbTsKKwl1bmlvbiB7CisJCXN0
cnVjdCBzY3Rwd2hlZWxfbGlzdGhlYWQgd2hlZWw7CisJCXN0cnVjdCBzY3RwbGlzdF9saXN0aGVh
ZCBsaXN0OworCX0gb3V0OworfTsKKwogLyogUm91bmQtcm9iaW4gc2NoZWR1bGVycyAqLwogc3Ry
dWN0IHNzX3JyIHsKIAkvKiBuZXh0IGxpbmsgaW4gd2hlZWwgKi8KQEAgLTYyMCwyMCArNjM0LDYg
QEAgc3RydWN0IHNzX2ZiIHsKIAlpbnQzMl90IHJvdW5kczsKIH07CiAKLS8qCi0gKiBUaGlzIHVu
aW9uIGhvbGRzIGFsbCBkYXRhIG5lY2Vzc2FyeSBmb3IKLSAqIGRpZmZlcmVudCBzdHJlYW0gc2No
ZWR1bGVycy4KLSAqLwotc3RydWN0IHNjaGVkdWxpbmdfZGF0YSB7Ci0Jc3RydWN0IHNjdHBfc3Ry
ZWFtX291dCAqbG9ja2VkX29uX3NlbmRpbmc7Ci0JLyogY2lyY3VsYXIgbG9va2luZyBmb3Igb3V0
cHV0IHNlbGVjdGlvbiAqLwotCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKmxhc3Rfb3V0X3N0cmVh
bTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBzY3Rwd2hlZWxfbGlzdGhlYWQgd2hlZWw7Ci0JCXN0cnVj
dCBzY3RwbGlzdF9saXN0aGVhZCBsaXN0OwotCX0gb3V0OwotfTsKLQogLyoKICAqIFRoaXMgdW5p
b24gaG9sZHMgYWxsIHBhcmFtZXRlcnMgcGVyIHN0cmVhbQogICogbmVjZXNzYXJ5IGZvciBkaWZm
ZXJlbnQgc3RyZWFtIHNjaGVkdWxlcnMuCkBAIC02NTEsOCArNjUxLDYgQEAgdW5pb24gc2NoZWR1
bGluZ19wYXJhbWV0ZXJzIHsKICNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORyAgICAw
eDAzCiAjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX0lOX0ZMSUdIVCAgMHgwNAogCi0jZGVmaW5l
IFNDVFBfTUFYX1NUUkVBTVNfQVRfT05DRV9SRVNFVCAyMDAKLQogLyogVGhpcyBzdHJ1Y3QgaXMg
dXNlZCB0byB0cmFjayB0aGUgdHJhZmZpYyBvbiBvdXRib3VuZCBzdHJlYW1zICovCiBzdHJ1Y3Qg
c2N0cF9zdHJlYW1fb3V0IHsKIAlzdHJ1Y3Qgc2N0cF9zdHJlYW1oZWFkIG91dHF1ZXVlOwpAQCAt
Njc2LDYgKzY3NCw4IEBAIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgewogCXVpbnQ4X3Qgc3RhdGU7
CiB9OwogCisjZGVmaW5lIFNDVFBfTUFYX1NUUkVBTVNfQVRfT05DRV9SRVNFVCAyMDAKKwogLyog
dXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBhZGRyZXNzZXMgeWV0IHRvIHRyeSB0byBhZGQvZGVs
ZXRlICovCiBUQUlMUV9IRUFEKHNjdHBfYXNjb25mX2FkZHJoZWFkLCBzY3RwX2FzY29uZl9hZGRy
KTsKIHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQv
c2N0cF90aW1lci5jCmluZGV4IGEwY2E0YWFiZjQ3NTJkZWU1ZGRlODdmZTZmODg4MjZmNjM5OGZk
YmMuLmYyNDgzMDVlMjdjNDgwNWE5YzFkM2ZjODVmYWFhOTI1YTFmOTgxZmYgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmMKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdGltZXIuYwpAQCAtMzQsNyArMzQsNyBAQAogCiAjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKICNpbmNsdWRl
IDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3Rw
X3RpbWVyLmMgMzY1MDcxIDIwMjAtMDktMDEgMjE6MTk6MTRaIG1qZyAkIik7CitfX0ZCU0RJRCgi
JEZyZWVCU0QkIik7CiAjZW5kaWYKIAogI2RlZmluZSBfSVBfVkhMCkBAIC0xNzEsOCArMTcxLDgg
QEAgc2N0cF90aHJlc2hvbGRfbWFuYWdlbWVudChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCiB9CiAKIC8qCi0gKiBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldCgp
IHJldHVybnMgYSBub24tTlVMTCBwb2ludGVyIGFzIGxvbmcKLSAqIHRoZSBhcmd1bWVudCBuZXQg
aXMgbm9uLU5VTEwuCisgKiBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldCgpIHJldHVybnMgYSBub24t
TlVMTCBwb2ludGVyIGFzIGxvbmcgYXMgdGhlcmUKKyAqIGV4aXN0cyBuZXRzLCB3aGljaCBhcmUg
bm90IGJlaW5nIGRlbGV0ZWQuCiAgKi8KIHN0cnVjdCBzY3RwX25ldHMgKgogc2N0cF9maW5kX2Fs
dGVybmF0ZV9uZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLApAQCAtMTgxLDEzICsxODEsMTMgQEAg
c2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLAogewogCS8qIEZp
bmQgYW5kIHJldHVybiBhbiBhbHRlcm5hdGUgbmV0d29yayBpZiBwb3NzaWJsZSAqLwogCXN0cnVj
dCBzY3RwX25ldHMgKmFsdCwgKm1uZXQsICptaW5fZXJyb3JzX25ldCA9IE5VTEwgLCAqbWF4X2N3
bmRfbmV0ID0gTlVMTDsKLQlpbnQgb25jZTsKKwlib29sIGxvb3BlZDsKIAkvKiBKUlMgNS8xNC8w
NyAtIEluaXRpYWxpemUgbWluX2Vycm9ycyB0byBhbiBpbXBvc3NpYmxlIHZhbHVlLiAqLwogCWlu
dCBtaW5fZXJyb3JzID0gLTE7CiAJdWludDMyX3QgbWF4X2N3bmQgPSAwOwogCiAJaWYgKHN0Y2It
PmFzb2MubnVtbmV0cyA9PSAxKSB7Ci0JCS8qIE5vIG90aGVycyBidXQgbmV0ICovCisJCS8qIE5v
IHNlbGVjdGlvbiBjYW4gYmUgbWFkZS4gKi8KIAkJcmV0dXJuIChUQUlMUV9GSVJTVCgmc3RjYi0+
YXNvYy5uZXRzKSk7CiAJfQogCS8qCkBAIC0zMjMsMjUgKzMyMywyMiBAQCBzY3RwX2ZpbmRfYWx0
ZXJuYXRlX25ldChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCiAJCQlyZXR1cm4gKG1heF9jd25kX25l
dCk7CiAJCX0KIAl9Ci0JbW5ldCA9IG5ldDsKLQlvbmNlID0gMDsKLQotCWlmIChtbmV0ID09IE5V
TEwpIHsKLQkJbW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOwotCQlpZiAobW5l
dCA9PSBOVUxMKSB7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9CisJLyogTG9vayBmb3IgYW4gYWx0
ZXJuYXRlIG5ldCwgd2hpY2ggaXMgYWN0aXZlLiAqLworCWlmICgobmV0ICE9IE5VTEwpICYmICgo
bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX0JFSU5HX0RFTEVURUQpID09IDApKSB7CisJCWFs
dCA9IFRBSUxRX05FWFQobmV0LCBzY3RwX25leHQpOzsKKwl9IGVsc2UgeworCQlhbHQgPSBUQUlM
UV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKIAl9CisJbG9vcGVkID0gZmFsc2U7CiAJZm9yICg7
OykgewotCQlhbHQgPSBUQUlMUV9ORVhUKG1uZXQsIHNjdHBfbmV4dCk7CiAJCWlmIChhbHQgPT0g
TlVMTCkgewotCQkJb25jZSsrOwotCQkJaWYgKG9uY2UgPiAxKSB7Ci0JCQkJYnJlYWs7CisJCQlp
ZiAoIWxvb3BlZCkgeworCQkJCWFsdCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOwor
CQkJCWxvb3BlZCA9IHRydWU7CiAJCQl9Ci0JCQlhbHQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNv
Yy5uZXRzKTsKKwkJCS8qIERlZmluaXRlbHkgb3V0IG9mIGNhbmRpZGF0ZXMuICovCiAJCQlpZiAo
YWx0ID09IE5VTEwpIHsKLQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCWJyZWFrOwogCQkJfQogCQl9
CiAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKQEAg
LTM2MSw0MyArMzU4LDU2IEBAIHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKICNlbHNlCiAJCSAgICAoYWx0LT5yby5yb19ydCAhPSBOVUxMKSAmJgogI2VuZGlm
Ci0JCSAgICAoIShhbHQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSkgewot
CQkJLyogRm91bmQgYSByZWFjaGFibGUgYWRkcmVzcyAqLworCQkgICAgKCEoYWx0LT5kZXN0X3N0
YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSkgJiYKKwkJICAgIChhbHQgIT0gbmV0KSkgewor
CQkJLyogRm91bmQgYW4gYWx0ZXJuYXRlIG5ldCwgd2hpY2ggaXMgcmVhY2hhYmxlLiAqLwogCQkJ
YnJlYWs7CiAJCX0KLQkJbW5ldCA9IGFsdDsKKwkJYWx0ID0gVEFJTFFfTkVYVChhbHQsIHNjdHBf
bmV4dCk7CiAJfQogCiAJaWYgKGFsdCA9PSBOVUxMKSB7Ci0JCS8qIENhc2Ugd2hlcmUgTk8gaW5z
diBuZXR3b3JrIGV4aXN0cyAoZG9ybWFudCBzdGF0ZSkgKi8KLQkJLyogd2Ugcm90YXRlIGRlc3Rp
bmF0aW9ucyAqLwotCQlvbmNlID0gMDsKLQkJbW5ldCA9IG5ldDsKKwkJLyoKKwkJICogSW4gY2Fz
ZSBubyBhY3RpdmUgYWx0ZXJuYXRlIG5ldCBoYXMgYmVlbiBmb3VuZCwgbG9vayBmb3IKKwkJICog
YW4gYWx0ZXJuYXRlIG5ldCwgd2hpY2ggaXMgY29uZmlybWVkLgorCQkgKi8KKwkJaWYgKChuZXQg
IT0gTlVMTCkgJiYgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfQkVJTkdfREVMRVRFRCkg
PT0gMCkpIHsKKwkJCWFsdCA9IFRBSUxRX05FWFQobmV0LCBzY3RwX25leHQpOzsKKwkJfSBlbHNl
IHsKKwkJCWFsdCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCQl9CisJCWxvb3Bl
ZCA9IGZhbHNlOwogCQlmb3IgKDs7KSB7Ci0JCQlpZiAobW5ldCA9PSBOVUxMKSB7Ci0JCQkJcmV0
dXJuIChUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKSk7Ci0JCQl9Ci0JCQlhbHQgPSBUQUlM
UV9ORVhUKG1uZXQsIHNjdHBfbmV4dCk7CiAJCQlpZiAoYWx0ID09IE5VTEwpIHsKLQkJCQlvbmNl
Kys7Ci0JCQkJaWYgKG9uY2UgPiAxKSB7Ci0JCQkJCWJyZWFrOworCQkJCWlmICghbG9vcGVkKSB7
CisJCQkJCWFsdCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCQkJCQlsb29wZWQg
PSB0cnVlOwogCQkJCX0KLQkJCQlhbHQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsK
KwkJCQkvKiBEZWZpbml0ZWx5IG91dCBvZiBjYW5kaWRhdGVzLiAqLwogCQkJCWlmIChhbHQgPT0g
TlVMTCkgewogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CiAJCQlpZiAoKCEoYWx0LT5kZXN0X3N0
YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSkgJiYKIAkJCSAgICAoYWx0ICE9IG5ldCkpIHsK
LQkJCQkvKiBGb3VuZCBhbiBhbHRlcm5hdGUgYWRkcmVzcyAqLworCQkJCS8qIEZvdW5kIGFuIGFs
dGVybmF0ZSBuZXQsIHdoaWNoIGlzIGNvbmZpcm1lZC4gKi8KIAkJCQlicmVhazsKIAkJCX0KLQkJ
CW1uZXQgPSBhbHQ7CisJCQlhbHQgPSBUQUlMUV9ORVhUKGFsdCwgc2N0cF9uZXh0KTsKIAkJfQog
CX0KIAlpZiAoYWx0ID09IE5VTEwpIHsKLQkJcmV0dXJuIChuZXQpOworCQkvKgorCQkgKiBJbiBj
YXNlIG5vIGNvbmZpcm1lZCBhbHRlcm5hdGUgbmV0IGhhcyBiZWVuIGZvdW5kLCBqdXN0CisJCSAq
IHJldHVybiBuZXQsIGlmIGl0IGlzIG5vdCBiZWluZyBkZWxldGVkLiBJbiB0aGUgb3RoZXIgY2Fz
ZQorCQkgKiBqdXN0IHJldHVybiB0aGUgZmlyc3QgbmV0LgorCQkgKi8KKwkJaWYgKChuZXQgIT0g
TlVMTCkgJiYgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfQkVJTkdfREVMRVRFRCkgPT0g
MCkpIHsKKwkJCWFsdCA9IG5ldDsKKwkJfQorCQlpZiAoYWx0ID09IE5VTEwpIHsKKwkJCWFsdCA9
IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCQl9CiAJfQogCXJldHVybiAoYWx0KTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzZXJzcGFj
ZS5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdXNlcnNwYWNlLmMKaW5kZXgg
YmE2NGFhZmY3NzBkZWVkMzk5ZjI1MjZkYjg4NTFlMjVhODhhOWExZC4uNDFhZmYxOWUwODg3ZWMy
Nzk3ODJmMDFiMjY5NGUzMjVlYjZmNWI5NiAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfdXNlcnNwYWNlLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfdXNlcnNwYWNlLmMKQEAgLTk4LDIzICs5OCw0MiBAQCBzY3RwX3VzZXJzcGFjZV9z
ZXRfdGhyZWFkbmFtZShjb25zdCBjaGFyICpuYW1lKQogaW50CiBzY3RwX3VzZXJzcGFjZV9nZXRf
bXR1X2Zyb21faWZuKHVpbnQzMl90IGlmX2luZGV4LCBpbnQgYWYpCiB7CisjaWYgZGVmaW5lZChJ
TkVUKSB8fCBkZWZpbmVkKElORVQ2KQogCXN0cnVjdCBpZnJlcSBpZnI7CiAJaW50IGZkOworI2Vu
ZGlmCisJaW50IG10dTsKIAotCW1lbXNldCgmaWZyLCAwLCBzaXplb2Yoc3RydWN0IGlmcmVxKSk7
Ci0JaWYgKGlmX2luZGV4dG9uYW1lKGlmX2luZGV4LCBpZnIuaWZyX25hbWUpICE9IE5VTEwpIHsK
LQkJLyogVE9ETyBjYW4gSSB1c2UgdGhlIHJhdyBzb2NrZXQgaGVyZSBhbmQgbm90IGhhdmUgdG8g
b3BlbiBhIG5ldyBvbmUgd2l0aCBlYWNoIHF1ZXJ5PyAqLwotCQlpZiAoKGZkID0gc29ja2V0KGFm
LCBTT0NLX0RHUkFNLCAwKSkgPCAwKQotCQkJcmV0dXJuICgwKTsKLQkJaWYgKGlvY3RsKGZkLCBT
SU9DR0lGTVRVLCAmaWZyKSA8IDApIHsKKwlzd2l0Y2ggKGFmKSB7CisjaWYgZGVmaW5lZChJTkVU
KQorCWNhc2UgQUZfSU5FVDoKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJY2FzZSBBRl9J
TkVUNjoKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwkJbWVt
c2V0KCZpZnIsIDAsIHNpemVvZihzdHJ1Y3QgaWZyZXEpKTsKKwkJbXR1ID0gMDsKKwkJaWYgKGlm
X2luZGV4dG9uYW1lKGlmX2luZGV4LCBpZnIuaWZyX25hbWUpICE9IE5VTEwpIHsKKwkJCS8qIFRP
RE8gY2FuIEkgdXNlIHRoZSByYXcgc29ja2V0IGhlcmUgYW5kIG5vdCBoYXZlIHRvIG9wZW4gYSBu
ZXcgb25lIHdpdGggZWFjaCBxdWVyeT8gKi8KKwkJCWlmICgoZmQgPSBzb2NrZXQoYWYsIFNPQ0tf
REdSQU0sIDApKSA8IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpb2N0bChmZCwgU0lP
Q0dJRk1UVSwgJmlmcikgPj0gMCkgeworCQkJCW10dSA9IGlmci5pZnJfbXR1OworCQkJfQogCQkJ
Y2xvc2UoZmQpOwotCQkJcmV0dXJuICgwKTsKIAkJfQotCQljbG9zZShmZCk7Ci0JCXJldHVybiBp
ZnIuaWZyX210dTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKDApOworCQlicmVhazsKKyNlbmRpZgor
CWNhc2UgQUZfQ09OTjoKKwkJbXR1ID0gMTI4MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbXR1
ID0gMDsKKwkJYnJlYWs7CiAJfQorCXJldHVybiAobXR1KTsKIH0KICNlbmRpZgogCkBAIC0xNDMs
NDEgKzE2Miw2MCBAQCB0aW1pbmdzYWZlX2JjbXAoY29uc3Qgdm9pZCAqYjEsIGNvbnN0IHZvaWQg
KmIyLCBzaXplX3QgbikKIGludAogc2N0cF91c2Vyc3BhY2VfZ2V0X210dV9mcm9tX2lmbih1aW50
MzJfdCBpZl9pbmRleCwgaW50IGFmKQogeworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKIAlQSVBfQURBUFRFUl9BRERSRVNTRVMgcEFkYXB0ZXJBZGRycywgcEFkYXB0OwogCURX
T1JEIEFkYXB0ZXJBZGRyc1NpemUsIEVycjsKLQlpbnQgcmV0OworI2VuZGlmCisJaW50IG10dTsK
IAotCXJldCA9IDA7Ci0JQWRhcHRlckFkZHJzU2l6ZSA9IDA7Ci0JcEFkYXB0ZXJBZGRycyA9IE5V
TEw7Ci0JaWYgKChFcnIgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9VTlNQRUMsIDAsIE5VTEws
IE5VTEwsICZBZGFwdGVyQWRkcnNTaXplKSkgIT0gMCkgewotCQlpZiAoKEVyciAhPSBFUlJPUl9C
VUZGRVJfT1ZFUkZMT1cpICYmIChFcnIgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikpIHsK
LQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJHZXRBZGFwdGVyc0FkZHJlc3NlcygpIHNpemlu
ZyBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkLCBBZGFwdGVyQWRkcnNTaXplID0gJWRcbiIsIEVy
ciwgQWRhcHRlckFkZHJzU2l6ZSk7Ci0JCQlyZXQgPSAtMTsKKwlzd2l0Y2ggKGFmKSB7CisjaWYg
ZGVmaW5lZChJTkVUKQorCWNhc2UgQUZfSU5FVDoKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYp
CisJY2FzZSBBRl9JTkVUNjoKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKKwkJbXR1ID0gMDsKKwkJQWRhcHRlckFkZHJzU2l6ZSA9IDA7CisJCXBBZGFwdGVyQWRk
cnMgPSBOVUxMOworCQlpZiAoKEVyciA9IEdldEFkYXB0ZXJzQWRkcmVzc2VzKEFGX1VOU1BFQywg
MCwgTlVMTCwgTlVMTCwgJkFkYXB0ZXJBZGRyc1NpemUpKSAhPSAwKSB7CisJCQlpZiAoKEVyciAh
PSBFUlJPUl9CVUZGRVJfT1ZFUkZMT1cpICYmIChFcnIgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JV
RkZFUikpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiR2V0QWRhcHRlcnNBZGRyZXNz
ZXMoKSBzaXppbmcgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZCwgQWRhcHRlckFkZHJzU2l6ZSA9
ICVkXG4iLCBFcnIsIEFkYXB0ZXJBZGRyc1NpemUpOworCQkJCW10dSA9IC0xOworCQkJCWdvdG8g
Y2xlYW51cDsKKwkJCX0KKwkJfQorCQlpZiAoKHBBZGFwdGVyQWRkcnMgPSAoUElQX0FEQVBURVJf
QUREUkVTU0VTKSBHbG9iYWxBbGxvYyhHUFRSLCBBZGFwdGVyQWRkcnNTaXplKSkgPT0gTlVMTCkg
eworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIVxu
Iik7CisJCQltdHUgPSAtMTsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQotCX0KLQlpZiAoKHBBZGFw
dGVyQWRkcnMgPSAoUElQX0FEQVBURVJfQUREUkVTU0VTKSBHbG9iYWxBbGxvYyhHUFRSLCBBZGFw
dGVyQWRkcnNTaXplKSkgPT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiTWVt
b3J5IGFsbG9jYXRpb24gZXJyb3IhXG4iKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gY2xlYW51cDsK
LQl9Ci0JaWYgKChFcnIgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9VTlNQRUMsIDAsIE5VTEws
IHBBZGFwdGVyQWRkcnMsICZBZGFwdGVyQWRkcnNTaXplKSkgIT0gRVJST1JfU1VDQ0VTUykgewot
CQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiR2V0QWRhcHRlcnNBZGRyZXNzZXMoKSBmYWlsZWQg
d2l0aCBlcnJvciBjb2RlICVkXG4iLCBFcnIpOwotCQlyZXQgPSAtMTsKLQkJZ290byBjbGVhbnVw
OwotCX0KLQlmb3IgKHBBZGFwdCA9IHBBZGFwdGVyQWRkcnM7IHBBZGFwdDsgcEFkYXB0ID0gcEFk
YXB0LT5OZXh0KSB7Ci0JCWlmIChwQWRhcHQtPklmSW5kZXggPT0gaWZfaW5kZXgpIHsKLQkJCXJl
dCA9IHBBZGFwdC0+TXR1OwotCQkJYnJlYWs7CisJCWlmICgoRXJyID0gR2V0QWRhcHRlcnNBZGRy
ZXNzZXMoQUZfVU5TUEVDLCAwLCBOVUxMLCBwQWRhcHRlckFkZHJzLCAmQWRhcHRlckFkZHJzU2l6
ZSkpICE9IEVSUk9SX1NVQ0NFU1MpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJHZXRB
ZGFwdGVyc0FkZHJlc3NlcygpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIEVycik7CisJ
CQltdHUgPSAtMTsKKwkJCWdvdG8gY2xlYW51cDsKIAkJfQorCQlmb3IgKHBBZGFwdCA9IHBBZGFw
dGVyQWRkcnM7IHBBZGFwdDsgcEFkYXB0ID0gcEFkYXB0LT5OZXh0KSB7CisJCQlpZiAocEFkYXB0
LT5JZkluZGV4ID09IGlmX2luZGV4KSB7CisJCQkJbXR1ID0gcEFkYXB0LT5NdHU7CisJCQkJYnJl
YWs7CisJCQl9CisJCX0KKwljbGVhbnVwOgorCQlpZiAocEFkYXB0ZXJBZGRycyAhPSBOVUxMKSB7
CisJCQlHbG9iYWxGcmVlKHBBZGFwdGVyQWRkcnMpOworCQl9CisJCWJyZWFrOworI2VuZGlmCisJ
Y2FzZSBBRl9DT05OOgorCQltdHUgPSAxMjgwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltdHUg
PSAwOworCQlicmVhazsKIAl9Ci1jbGVhbnVwOgotCWlmIChwQWRhcHRlckFkZHJzICE9IE5VTEwp
IHsKLQkJR2xvYmFsRnJlZShwQWRhcHRlckFkZHJzKTsKLQl9Ci0JcmV0dXJuIChyZXQpOworCXJl
dHVybiAobXR1KTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfdXNycmVxLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91
c3JyZXEuYwppbmRleCBlNWZiYTk2NzE3YjJhNGNhY2MwOWZmMmFhOGJlZGE2ZDkwZTFhMjJhLi5l
OGNmNzgwMTdhMDU4OTE0NzY2YjM1YmZlMDI5NjFjNjdmZTgyOTc1IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c3JyZXEuYworKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF91c3JyZXEuYwpAQCAtMzQsNyArMzQsNyBAQAogCiAjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKICNpbmNsdWRlIDxz
eXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX3Vz
cnJlcS5jIDM2Njc1MCAyMDIwLTEwLTE2IDEwOjQ0OjQ4WiB0dWV4ZW4gJCIpOworX19GQlNESUQo
IiRGcmVlQlNEJCIpOwogI2VuZGlmCiAKICNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KQEAg
LTk3NCwyOSArOTc0LDI5IEBAIHNjdHBfc2VuZG0oc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFn
cywgc3RydWN0IG1idWYgKm0sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKIAkgICAgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpIHx8CiAJICAgIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSkpIHsKIAkJZ290byBjb25uZWN0ZWRfdHlw
ZTsKLQl9IGVsc2UgaWYgKGFkZHIgPT0gTlVMTCkgeworCX0KKworCWVycm9yID0gMDsKKwlpZiAo
YWRkciA9PSBOVUxMKSB7CiAJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFREVTVEFERFJSRVEpOwogCQllcnJvciA9IEVE
RVNUQUREUlJFUTsKLQkJc2N0cF9tX2ZyZWVtKG0pOwotCQlpZiAoY29udHJvbCkgewotCQkJc2N0
cF9tX2ZyZWVtKGNvbnRyb2wpOwotCQkJY29udHJvbCA9IE5VTEw7Ci0JCX0KLQkJcmV0dXJuIChl
cnJvcik7CisJfSBlbHNlIGlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgeworCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUFGTk9TVVBQT1JUKTsKKwkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisjaWYgZGVmaW5l
ZChIQVZFX1NBX0xFTikKKwl9IGVsc2UgaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJZXJyb3IgPSBFSU5WQUw7
CisjZW5kaWYKIAl9Ci0jaWZkZWYgSU5FVDYKLQlpZiAoYWRkci0+c2FfZmFtaWx5ICE9IEFGX0lO
RVQpIHsKLQkJLyogbXVzdCBiZSBhIHY0IGFkZHJlc3MhICovCi0JCVNDVFBfTFRSQUNFX0VSUl9S
RVRfUEtUKG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFREVTVEFE
RFJSRVEpOworCWlmIChlcnJvciAhPSAwKSB7CiAJCXNjdHBfbV9mcmVlbShtKTsKIAkJaWYgKGNv
bnRyb2wpIHsKIAkJCXNjdHBfbV9mcmVlbShjb250cm9sKTsKIAkJCWNvbnRyb2wgPSBOVUxMOwog
CQl9Ci0JCWVycm9yID0gRURFU1RBRERSUkVROwogCQlyZXR1cm4gKGVycm9yKTsKIAl9Ci0jZW5k
aWYJCQkJLyogSU5FVDYgKi8KIGNvbm5lY3RlZF90eXBlOgogCS8qIG5vdyB3aGF0IGFib3V0IGNv
bnRyb2wgKi8KIAlpZiAoY29udHJvbCkgewpAQCAtNjExMiw2ICs2MTEyLDcgQEAgc2N0cF9zZXRv
cHQoc3RydWN0IHNvY2tldCAqc28sIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsIHNpemVfdCBv
cHRzaXplLAogCQkJcmV0dXJuIChFSU5WQUwpOwogCQl9CiAJCWlmICgocGFkZHJwLT5zcHBfZmxh
Z3MgJiBTUFBfUE1UVURfRElTQUJMRSkgJiYKKwkJICAgIChwYWRkcnAtPnNwcF9wYXRobXR1ID4g
MCkgJiYKIAkJICAgICgocGFkZHJwLT5zcHBfcGF0aG10dSA8IFNDVFBfU01BTExFU1RfUE1UVSkg
fHwKIAkJICAgICAocGFkZHJwLT5zcHBfcGF0aG10dSA+IFNDVFBfTEFSR0VTVF9QTVRVKSkpIHsK
IAkJCWlmIChzdGNiKQpAQCAtNjE1NiwyOCArNjE1NywzMCBAQCBzY3RwX3NldG9wdChzdHJ1Y3Qg
c29ja2V0ICpzbywgaW50IG9wdG5hbWUsIHZvaWQgKm9wdHZhbCwgc2l6ZV90IG9wdHNpemUsCiAJ
CQkJCQkJCVNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzExKTsKIAkJCQkJfQogCQkJ
CQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX05PX1BNVFVEOwotCQkJCQluZXQtPm10dSA9
IHBhZGRycC0+c3BwX3BhdGhtdHU7Ci0JCQkJCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNh
X2ZhbWlseSkgeworCQkJCQlpZiAocGFkZHJwLT5zcHBfcGF0aG10dSA+IDApIHsKKwkJCQkJCW5l
dC0+bXR1ID0gcGFkZHJwLT5zcHBfcGF0aG10dTsKKwkJCQkJCXN3aXRjaCAobmV0LT5yby5fbF9h
ZGRyLnNhLnNhX2ZhbWlseSkgewogI2lmZGVmIElORVQKLQkJCQkJY2FzZSBBRl9JTkVUOgotCQkJ
CQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7Ci0JCQkJCQlicmVhazsKKwkJCQkJ
CWNhc2UgQUZfSU5FVDoKKwkJCQkJCQluZXQtPm10dSArPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsK
KwkJCQkJCQlicmVhazsKICNlbmRpZgogI2lmZGVmIElORVQ2Ci0JCQkJCWNhc2UgQUZfSU5FVDY6
Ci0JCQkJCQluZXQtPm10dSArPSBTQ1RQX01JTl9PVkVSSEVBRDsKLQkJCQkJCWJyZWFrOworCQkJ
CQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJCQluZXQtPm10dSArPSBTQ1RQX01JTl9PVkVSSEVBRDsK
KwkJCQkJCQlicmVhazsKICNlbmRpZgogI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQkJ
Y2FzZSBBRl9DT05OOgotCQkJCQkJbmV0LT5tdHUgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsK
LQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBBRl9DT05OOgorCQkJCQkJCW5ldC0+bXR1ICs9IHNp
emVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQkJCQkJYnJlYWs7CiAjZW5kaWYKLQkJCQkJZGVmYXVs
dDoKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCWlmIChuZXQtPm10dSA8IHN0Y2ItPmFzb2Mu
c21hbGxlc3RfbXR1KSB7Ci0JCQkJCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQt
Pm10dSk7CisJCQkJCQlkZWZhdWx0OgorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJaWYg
KG5ldC0+bXR1IDwgc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUpIHsKKwkJCQkJCQlzY3RwX3BhdGht
dHVfYWRqdXN0bWVudChzdGNiLCBuZXQtPm10dSk7CisJCQkJCQl9CiAJCQkJCX0KIAkJCQl9CiAJ
CQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0VOQUJMRSkgewpAQCAtNjE4Niw3
ICs2MTg5LDcgQEAgc2N0cF9zZXRvcHQoc3RydWN0IHNvY2tldCAqc28sIGludCBvcHRuYW1lLCB2
b2lkICpvcHR2YWwsIHNpemVfdCBvcHRzaXplLAogCQkJCQl9CiAJCQkJCW5ldC0+ZGVzdF9zdGF0
ZSAmPSB+U0NUUF9BRERSX05PX1BNVFVEOwogCQkJCX0KLQkJCQlpZiAocGFkZHJwLT5zcHBfcGF0
aG1heHJ4dCkgeworCQkJCWlmIChwYWRkcnAtPnNwcF9wYXRobWF4cnh0ID4gMCkgewogCQkJCQlp
ZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSB7CiAJCQkJCQlpZiAobmV0LT5lcnJv
cl9jb3VudCA+IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQpIHsKIAkJCQkJCQluZXQtPmRlc3Rfc3Rh
dGUgJj0gflNDVFBfQUREUl9QRjsKQEAgLTYyMjksNyArNjIzMiw3IEBAIHNjdHBfc2V0b3B0KHN0
cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLCBzaXplX3Qgb3B0c2l6
ZSwKICNlbmRpZgogCQkJfSBlbHNlIHsKIAkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqQVNT
T0MgT05MWSAtLSBOTyBORVQgU1BFQ0lGSUMgU0VUICoqKioqKioqKioqKioqKioqKi8KLQkJCQlp
ZiAocGFkZHJwLT5zcHBfcGF0aG1heHJ4dCAhPSAwKSB7CisJCQkJaWYgKHBhZGRycC0+c3BwX3Bh
dGhtYXhyeHQgPiAwKSB7CiAJCQkJCXN0Y2ItPmFzb2MuZGVmX25ldF9mYWlsdXJlID0gcGFkZHJw
LT5zcHBfcGF0aG1heHJ4dDsKIAkJCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5l
dHMsIHNjdHBfbmV4dCkgewogCQkJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9Q
RikgewpAQCAtNjI2MSw3ICs2MjY0LDYgQEAgc2N0cF9zZXRvcHQoc3RydWN0IHNvY2tldCAqc28s
IGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsIHNpemVfdCBvcHRzaXplLAogCQkJCQkJbmV0LT5m
YWlsdXJlX3RocmVzaG9sZCA9IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQ7CiAJCQkJCX0KIAkJCQl9
Ci0KIAkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfRU5BQkxFKSB7CiAJCQkJCWlm
IChwYWRkcnAtPnNwcF9oYmludGVydmFsICE9IDApIHsKIAkJCQkJCXN0Y2ItPmFzb2MuaGVhcnRf
YmVhdF9kZWxheSA9IHBhZGRycC0+c3BwX2hiaW50ZXJ2YWw7CkBAIC02MzA0LDMxICs2MzA2LDM1
IEBAIHNjdHBfc2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0
dmFsLCBzaXplX3Qgb3B0c2l6ZSwKIAkJCQkJCQkJCVNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFND
VFBfTE9DXzE2KTsKIAkJCQkJCX0KIAkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJf
Tk9fUE1UVUQ7Ci0JCQkJCQluZXQtPm10dSA9IHBhZGRycC0+c3BwX3BhdGhtdHU7Ci0JCQkJCQlz
d2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKKwkJCQkJCWlmIChwYWRkcnAt
PnNwcF9wYXRobXR1ID4gMCkgeworCQkJCQkJCW5ldC0+bXR1ID0gcGFkZHJwLT5zcHBfcGF0aG10
dTsKKwkJCQkJCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKICNpZmRl
ZiBJTkVUCi0JCQkJCQljYXNlIEFGX0lORVQ6Ci0JCQkJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5f
VjRfT1ZFUkhFQUQ7Ci0JCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSBBRl9JTkVUOgorCQkJCQkJ
CQluZXQtPm10dSArPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKKwkJCQkJCQkJYnJlYWs7CiAjZW5k
aWYKICNpZmRlZiBJTkVUNgotCQkJCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkJCQluZXQtPm10dSAr
PSBTQ1RQX01JTl9PVkVSSEVBRDsKLQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIEFGX0lORVQ2
OgorCQkJCQkJCQluZXQtPm10dSArPSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQkJCQkJYnJlYWs7
CiAjZW5kaWYKICNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQkJCQljYXNlIEFGX0NPTk46
Ci0JCQkJCQkJbmV0LT5tdHUgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQkJCQkJCQlicmVh
azsKKwkJCQkJCQljYXNlIEFGX0NPTk46CisJCQkJCQkJCW5ldC0+bXR1ICs9IHNpemVvZihzdHJ1
Y3Qgc2N0cGhkcik7CisJCQkJCQkJCWJyZWFrOwogI2VuZGlmCi0JCQkJCQlkZWZhdWx0OgotCQkJ
CQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQkJaWYgKG5ldC0+bXR1IDwgc3RjYi0+YXNvYy5zbWFs
bGVzdF9tdHUpIHsKLQkJCQkJCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQtPm10
dSk7CisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJCWlm
IChuZXQtPm10dSA8IHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1KSB7CisJCQkJCQkJCXNjdHBfcGF0
aG10dV9hZGp1c3RtZW50KHN0Y2IsIG5ldC0+bXR1KTsKKwkJCQkJCQl9CiAJCQkJCQl9CiAJCQkJ
CX0KLQkJCQkJc3RjYi0+YXNvYy5kZWZhdWx0X210dSA9IHBhZGRycC0+c3BwX3BhdGhtdHU7CisJ
CQkJCWlmIChwYWRkcnAtPnNwcF9wYXRobXR1ID4gMCkgeworCQkJCQkJc3RjYi0+YXNvYy5kZWZh
dWx0X210dSA9IHBhZGRycC0+c3BwX3BhdGhtdHU7CisJCQkJCX0KIAkJCQkJc2N0cF9zdGNiX2Zl
YXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19ET19OT1RfUE1UVUQpOwogCQkJCX0K
IAkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfUE1UVURfRU5BQkxFKSB7CkBAIC02Mzc0
LDcgKzYzODAsNyBAQCBzY3RwX3NldG9wdChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IG9wdG5hbWUs
IHZvaWQgKm9wdHZhbCwgc2l6ZV90IG9wdHNpemUsCiAJCQkJICogRm9yIHRoZSBUT1MvRkxPV0xB
QkVMIHN0dWZmIHlvdSBzZXQgaXQKIAkJCQkgKiB3aXRoIHRoZSBvcHRpb25zIG9uIHRoZSBzb2Nr
ZXQKIAkJCQkgKi8KLQkJCQlpZiAocGFkZHJwLT5zcHBfcGF0aG1heHJ4dCAhPSAwKSB7CisJCQkJ
aWYgKHBhZGRycC0+c3BwX3BhdGhtYXhyeHQgPiAwKSB7CiAJCQkJCWlucC0+c2N0cF9lcC5kZWZf
bmV0X2ZhaWx1cmUgPSBwYWRkcnAtPnNwcF9wYXRobWF4cnh0OwogCQkJCX0KIApAQCAtNjQwMCw3
ICs2NDA2LDkgQEAgc2N0cF9zZXRvcHQoc3RydWN0IHNvY2tldCAqc28sIGludCBvcHRuYW1lLCB2
b2lkICpvcHR2YWwsIHNpemVfdCBvcHRzaXplLAogCQkJCQlpbnAtPnNjdHBfZXAuZGVmYXVsdF9t
dHUgPSAwOwogCQkJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fTk9U
X1BNVFVEKTsKIAkJCQl9IGVsc2UgaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0RJ
U0FCTEUpIHsKLQkJCQkJaW5wLT5zY3RwX2VwLmRlZmF1bHRfbXR1ID0gcGFkZHJwLT5zcHBfcGF0
aG10dTsKKwkJCQkJaWYgKHBhZGRycC0+c3BwX3BhdGhtdHUgPiAwKSB7CisJCQkJCQlpbnAtPnNj
dHBfZXAuZGVmYXVsdF9tdHUgPSBwYWRkcnAtPnNwcF9wYXRobXR1OworCQkJCQl9CiAJCQkJCXNj
dHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPX05PVF9QTVRVRCk7CiAJCQkJfQog
CQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9EU0NQKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwdXRpbC5jCmluZGV4IDQxOTEwZWM0OWQ0YjNjN2U5Mzg5ZWY3M2U0NTU1ZTE4
NTdjYjc2NzUuLjYzOWIzNmYzMDc5NWM5ZjRhODcxZmM2MjdhNTc5ZjI2MWM5ODA1YmMgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwdXRpbC5jCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwdXRpbC5jCkBAIC0zNCw3ICszNCw3IEBACiAKICNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQogI2luY2x1
ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3Nj
dHB1dGlsLmMgMzY2NDgyIDIwMjAtMTAtMDYgMTE6MDg6NTJaIHR1ZXhlbiAkIik7CitfX0ZCU0RJ
RCgiJEZyZWVCU0QkIik7CiAjZW5kaWYKIAogI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgpA
QCAtMTMzMyw5ICsxMzMzLDggQEAgc2N0cF9pbml0X2Fzb2Moc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAogCQkgKiB0aGF0IHdlcmUgZHJvcHBlZCBtdXN0IGJl
IG5vdGlmaWVkIHRvIHRoZSB1cHBlciBsYXllciBhcwogCQkgKiBmYWlsZWQgdG8gc2VuZC4KIAkJ
ICovCi0JCWFzb2MtPnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9IDA7Ci0JCWFzb2MtPnN0
cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsKIAkJVEFJTFFfSU5JVCgmYXNvYy0+c3Ry
bW91dFtpXS5vdXRxdWV1ZSk7CisJCWFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXRfc3Ry
ZWFtKHN0Y2IsICZhc29jLT5zdHJtb3V0W2ldLCBOVUxMKTsKIAkJYXNvYy0+c3RybW91dFtpXS5j
aHVua3Nfb25fcXVldWVzID0gMDsKICNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRT
KQogCQlmb3IgKGogPSAwOyBqIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7IGorKykgewpAQCAtMTM0
NiwxMCArMTM0NSwxMSBAQCBzY3RwX2luaXRfYXNvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCiAJCWFzb2MtPnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRb
MF0gPSAwOwogCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbMF0gPSAwOwogI2Vu
ZGlmCisJCWFzb2MtPnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9IDA7CisJCWFzb2MtPnN0
cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsKIAkJYXNvYy0+c3RybW91dFtpXS5zaWQg
PSBpOwogCQlhc29jLT5zdHJtb3V0W2ldLmxhc3RfbXNnX2luY29tcGxldGUgPSAwOwogCQlhc29j
LT5zdHJtb3V0W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1fT1BFTklORzsKLQkJYXNvYy0+c3NfZnVu
Y3Rpb25zLnNjdHBfc3NfaW5pdF9zdHJlYW0oc3RjYiwgJmFzb2MtPnN0cm1vdXRbaV0sIE5VTEwp
OwogCX0KIAlhc29jLT5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0KHN0Y2IsIGFzb2MsIDApOwog
CkBAIC0yMTE3LDE0ICsyMTE3LDEzIEBAIHNjdHBfdGltZW91dF9oYW5kbGVyKHZvaWQgKnQpCiAJ
CVNDVFBfU09DS0VUX1VOTE9DSyhTQ1RQX0lOUF9TTyhpbnApLCAxKTsKICNlbmRpZgogCQlpbnAg
PSBOVUxMOwotCQlnb3RvIG91dF9ub19kZWNyOworCQlnb3RvIG91dF9kZWNyOwogCWNhc2UgU0NU
UF9USU1FUl9UWVBFX0FTT0NLSUxMOgogCQlLQVNTRVJUKGlucCAhPSBOVUxMICYmIHN0Y2IgIT0g
TlVMTCAmJiBuZXQgPT0gTlVMTCwKIAkJICAgICAgICAoInRpbWVvdXQgb2YgdHlwZSAlZDogaW5w
ID0gJXAsIHN0Y2IgPSAlcCwgbmV0ID0gJXAiLAogCQkgICAgICAgICB0eXBlLCBpbnAsIHN0Y2Is
IG5ldCkpOwogCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190aW1vYXNzb2NraWxsKTsKIAkJLyogQ2Fu
IHdlIGZyZWUgaXQgeWV0PyAqLwotCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwogCQlzY3RwX3Rp
bWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0FTT0NLSUxMLCBpbnAsIHN0Y2IsIE5VTEwsCiAJCSAg
ICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18xKTsKICNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKQEAgLTIxNDUsNyArMjE0
NCw3IEBAIHNjdHBfdGltZW91dF9oYW5kbGVyKHZvaWQgKnQpCiAJCSAqIGR1cGxpY2F0ZSB1bmxv
Y2sgb3IgdW5sb2NrIG9mIGEgZnJlZSBtdHggOi0wCiAJCSAqLwogCQlzdGNiID0gTlVMTDsKLQkJ
Z290byBvdXRfbm9fZGVjcjsKKwkJZ290byBvdXRfZGVjcjsKIAljYXNlIFNDVFBfVElNRVJfVFlQ
RV9BRERSX1dROgogCQlLQVNTRVJUKGlucCA9PSBOVUxMICYmIHN0Y2IgPT0gTlVMTCAmJiBuZXQg
PT0gTlVMTCwKIAkJICAgICAgICAoInRpbWVvdXQgb2YgdHlwZSAlZDogaW5wID0gJXAsIHN0Y2Ig
PSAlcCwgbmV0ID0gJXAiLApAQCAtMjIxNCw3ICsyMjEzLDYgQEAgb3V0X2RlY3I6CiAJaWYgKG5l
dCAhPSBOVUxMKSB7CiAJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihuZXQpOwogCX0KLW91dF9ub19k
ZWNyOgogCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjIsICJUaW1lciB0eXBlICVkIGhhbmRsZXIg
ZmluaXNoZWQuXG4iLCB0eXBlKTsKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQogCUNVUlZORVRfUkVTVE9SRSgpOwpAQCAtMjM4NSwxNCArMjM4Mywy
MSBAQCBzY3RwX3RpbWVyX3N0YXJ0KGludCB0X3R5cGUsIHN0cnVjdCBzY3RwX2lucGNiICppbnAs
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKIAkJfQogCQlybmR2YWwgPSBzY3RwX3NlbGVjdF9pbml0
aWFsX1RTTigmaW5wLT5zY3RwX2VwKTsKIAkJaml0dGVyID0gcm5kdmFsICUgdG9fdGlja3M7Ci0J
CWlmIChqaXR0ZXIgPj0gKHRvX3RpY2tzID4+IDEpKSB7Ci0JCQl0b190aWNrcyA9IHRvX3RpY2tz
ICsgKGppdHRlciAtICh0b190aWNrcyA+PiAxKSk7CisJCWlmICh0b190aWNrcyA+IDEpIHsKKwkJ
CXRvX3RpY2tzID4+PSAxOworCQl9CisJCWlmIChqaXR0ZXIgPCAoVUlOVDMyX01BWCAtIHRvX3Rp
Y2tzKSkgeworCQkJdG9fdGlja3MgKz0gaml0dGVyOwogCQl9IGVsc2UgewotCQkJdG9fdGlja3Mg
PSB0b190aWNrcyAtIGppdHRlcjsKKwkJCXRvX3RpY2tzID0gVUlOVDMyX01BWDsKIAkJfQogCQlp
ZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpICYmCiAJCSAgICAh
KG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikpIHsKLQkJCXRvX3RpY2tzICs9IG5ldC0+
aGVhcnRfYmVhdF9kZWxheTsKKwkJCWlmIChuZXQtPmhlYXJ0X2JlYXRfZGVsYXkgPCAoVUlOVDMy
X01BWCAtIHRvX3RpY2tzKSkgeworCQkJCXRvX3RpY2tzICs9IG5ldC0+aGVhcnRfYmVhdF9kZWxh
eTsKKwkJCX0gZWxzZSB7CisJCQkJdG9fdGlja3MgPSBVSU5UMzJfTUFYOworCQkJfQogCQl9CiAJ
CS8qCiAJCSAqIE5vdyB3ZSBtdXN0IGNvbnZlcnQgdGhlIHRvX3RpY2tzIHRoYXQgYXJlIG5vdyBp
bgpAQCAtNDgzMiw3ICs0ODM3LDcgQEAgc2N0cF9oYW5kbGVfb290YihzdHJ1Y3QgbWJ1ZiAqbSwg
aW50IGlwaGxlbiwgaW50IG9mZnNldCwKICAqIGlmIHRoZXJlIGlzIHJldHVybiAxLCBlbHNlIHJl
dHVybiAwLgogICovCiBpbnQKLXNjdHBfaXNfdGhlcmVfYW5fYWJvcnRfaGVyZShzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IGlwaGxlbiwgdWludDMyX3QgKiB2dGFnZmlsbCkKK3NjdHBfaXNfdGhlcmVfYW5f
YWJvcnRfaGVyZShzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgdWludDMyX3QgKnZ0YWcpCiB7
CiAJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwogCXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmlu
aXRfY2hrLCBjaHVua19idWY7CkBAIC00ODUzLDEyICs0ODU4LDEzIEBAIHNjdHBfaXNfdGhlcmVf
YW5fYWJvcnRfaGVyZShzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgdWludDMyX3QgKiB2dGFn
ZmlsbCkKIAkJCS8qIHllcCwgdGVsbCB0aGVtICovCiAJCQlyZXR1cm4gKDEpOwogCQl9Ci0JCWlm
IChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lOSVRJQVRJT04pIHsKKwkJaWYgKChjaC0+Y2h1bmtf
dHlwZSA9PSBTQ1RQX0lOSVRJQVRJT04pIHx8CisJCSAgICAoY2gtPmNodW5rX3R5cGUgPT0gU0NU
UF9JTklUSUFUSU9OX0FDSykpIHsKIAkJCS8qIG5lZWQgdG8gdXBkYXRlIHRoZSBWdGFnICovCiAJ
CQlpbml0X2NoayA9IChzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICopc2N0cF9tX2dldHB0cihtLAot
CQkJICAgIG9mZnNldCwgc2l6ZW9mKCppbml0X2NoayksICh1aW50OF90ICopICYgY2h1bmtfYnVm
KTsKKwkJCSAgICBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSwgKHVpbnQ4
X3QgKikgJiBjaHVua19idWYpOwogCQkJaWYgKGluaXRfY2hrICE9IE5VTEwpIHsKLQkJCQkqdnRh
Z2ZpbGwgPSBudG9obChpbml0X2Noay0+aW5pdC5pbml0aWF0ZV90YWcpOworCQkJCSp2dGFnID0g
bnRvaGwoaW5pdF9jaGstPmluaXQuaW5pdGlhdGVfdGFnKTsKIAkJCX0KIAkJfQogCQkvKiBOb3Bl
LCBtb3ZlIHRvIHRoZSBuZXh0IGNodW5rICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQ2L3NjdHA2X3VzcnJlcS5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
Ni9zY3RwNl91c3JyZXEuYwppbmRleCA1YTkzMWRkNWEyZmNkYTI1NGZhN2NkNGRiNjJlYjczZTVh
OWU2ZWExLi5hYTBjMDA1MWE1ZTgxYWU4MDkxNjA2NzBmYzM2OWNkNjcyZWQxOGJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQ2L3NjdHA2X3VzcnJlcS5jCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdXNycmVxLmMKQEAgLTM0LDcgKzM0LDcg
QEAKIAogI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25l
dGluZXQ2L3NjdHA2X3VzcnJlcS5jIDM2NTA3MSAyMDIwLTA5LTAxIDIxOjE5OjE0WiBtamcgJCIp
OworX19GQlNESUQoIiRGcmVlQlNEJCIpOwogI2VuZGlmCiAKICNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfb3MuaD4KQEAgLTI1OSwxMyArMjU5LDE0IEBAIHNjdHA2X2lucHV0KHN0cnVjdCBtYnVmICoq
aV9wYWssIGludCAqb2ZmcCwgaW50IHByb3RvKQogCWlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1Qo
JmlwNi0+aXA2X2RzdCkpIHsKIAkJZ290byBvdXQ7CiAJfQotCWVjbl9iaXRzID0gKChudG9obChp
cDYtPmlwNl9mbG93KSA+PiAyMCkgJiAweDAwMDAwMGZmKTsKICNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQorCWVjbl9iaXRzID0gSVBWNl9UUkFGRklDX0NMQVNTKGlwNik7CiAJaWYgKG0tPm1fcGt0
aGRyLmNzdW1fZmxhZ3MgJiBDU1VNX1NDVFBfVkFMSUQpIHsKIAkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfcmVjdmh3Y3JjKTsKIAkJY29tcHV0ZV9jcmMgPSAwOwogCX0gZWxzZSB7CiAjZWxzZQorCWVj
bl9iaXRzID0gKChudG9obChpcDYtPmlwNl9mbG93KSA+PiAyMCkgJiAweDAwMDAwMGZmKTsKIAlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spICYmCiAJICAgIChJ
TjZfQVJFX0FERFJfRVFVQUwoJnNyYy5zaW42X2FkZHIsICZkc3Quc2luNl9hZGRyKSkpIHsKIAkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmh3Y3JjKTsKQEAgLTY1NCw5ICs2NTUsMTAgQEAgb3V0
OgogCXJldHVybiAoZXJyb3IpOwogfQogCi1TWVNDVExfUFJPQyhfbmV0X2luZXQ2X3NjdHA2LCBP
SURfQVVUTywgZ2V0Y3JlZCwgQ1RMVFlQRV9PUEFRVUUgfCBDVExGTEFHX1JXLAotICAgIDAsIDAs
Ci0gICAgc2N0cDZfZ2V0Y3JlZCwgIlMsdWNyZWQiLCAiR2V0IHRoZSB1Y3JlZCBvZiBhIFNDVFA2
IGNvbm5lY3Rpb24iKTsKK1NZU0NUTF9QUk9DKF9uZXRfaW5ldDZfc2N0cDYsIE9JRF9BVVRPLCBn
ZXRjcmVkLAorICAgIENUTFRZUEVfT1BBUVVFIHwgQ1RMRkxBR19SVyB8IENUTEZMQUdfTkVFREdJ
QU5ULAorICAgIDAsIDAsIHNjdHA2X2dldGNyZWQsICJTLHVjcmVkIiwKKyAgICAiR2V0IHRoZSB1
Y3JlZCBvZiBhIFNDVFA2IGNvbm5lY3Rpb24iKTsKICNlbmRpZgogCiAvKiBUaGlzIGlzIHRoZSBz
YW1lIGFzIHRoZSBzY3RwX2Fib3J0KCkgY291bGQgYmUgbWFkZSBjb21tb24gKi8KQEAgLTEwMDcs
NiArMTAwOSw0NiBAQCBzY3RwNl9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgZmxhZ3MsIHN0
cnVjdCBtYnVmICptLCBzdHJ1Y3QgbWJ1ZiAqbmFtLAogCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRURFU1RBRERSUkVRKTsKIAkJ
cmV0dXJuIChFREVTVEFERFJSRVEpOwogCX0KKwlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewor
I2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisjaWYgZGVmaW5lZChIQVZFX1NBX0xFTikKKwkJ
aWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQkJaWYg
KGNvbnRyb2wpIHsKKwkJCQlTQ1RQX1JFTEVBU0VfUEtUKGNvbnRyb2wpOworCQkJCWNvbnRyb2wg
PSBOVUxMOworCQkJfQorCQkJU0NUUF9SRUxFQVNFX1BLVChtKTsKKwkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwor
CQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRl
ZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisjaWYgZGVmaW5lZChIQVZFX1NBX0xFTikKKwkJaWYg
KGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKKwkJCWlmIChj
b250cm9sKSB7CisJCQkJU0NUUF9SRUxFQVNFX1BLVChjb250cm9sKTsKKwkJCQljb250cm9sID0g
TlVMTDsKKwkJCX0KKwkJCVNDVFBfUkVMRUFTRV9QS1QobSk7CisJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJ
CXJldHVybiAoRUlOVkFMKTsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVs
dDoKKwkJaWYgKGNvbnRyb2wpIHsKKwkJCVNDVFBfUkVMRUFTRV9QS1QoY29udHJvbCk7CisJCQlj
b250cm9sID0gTlVMTDsKKwkJfQorCQlTQ1RQX1JFTEVBU0VfUEtUKG0pOworCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFM
KTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KICNpZmRlZiBJTkVUCiAJc2luNiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW42ICopYWRkcjsKIAlpZiAoU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7CkBAIC0x
MDE1LDEwICsxMDU3LDIwIEBAIHNjdHA2X3NlbmQoc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFn
cywgc3RydWN0IG1idWYgKm0sIHN0cnVjdCBtYnVmICpuYW0sCiAJCSAqIHY0IGFkZHIgb3IgdjQt
bWFwcGVkIGFkZHIKIAkJICovCiAJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewor
CQkJaWYgKGNvbnRyb2wpIHsKKwkJCQlTQ1RQX1JFTEVBU0VfUEtUKGNvbnRyb2wpOworCQkJCWNv
bnRyb2wgPSBOVUxMOworCQkJfQorCQkJU0NUUF9SRUxFQVNFX1BLVChtKTsKIAkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5W
QUwpOwogCQkJcmV0dXJuIChFSU5WQUwpOwogCQl9CiAJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBF
RCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJaWYgKGNvbnRyb2wpIHsKKwkJCQlTQ1RQX1JFTEVB
U0VfUEtUKGNvbnRyb2wpOworCQkJCWNvbnRyb2wgPSBOVUxMOworCQkJfQorCQkJU0NUUF9SRUxF
QVNFX1BLVChtKTsKIAkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwogCQkJcmV0dXJuIChFSU5WQUwpOwogCQl9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvdXNlcl9lbnZpcm9ubWVudC5oCmluZGV4IGQ4OGZkYjc3ZTY2ZTlhMmFj
NjI5NDA1YTc3Zjc2Y2VkNWY0YTQxNTUuLmE1NDVhY2NiYTA3OTFmMjVhYTllZjIwYWU0YTEwM2Y4
Y2M4ZTE0NzQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9lbnZpcm9ubWVu
dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9lbnZpcm9ubWVudC5oCkBAIC05Miw3
ICs5Miw3IEBAIGV4dGVybiB1X3Nob3J0IGlwX2lkOwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCiAj
aWYgZGVmaW5lZChfV0lOMzIpCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBfX2RlY2xzcGVjKG5vcmV0dXJuKQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJp
YnV0ZV9fKChfX25vcmV0dXJuX18pKQogI2VuZGlmCg==
</data>
<flag name="commit-queue"
          id="451790"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>