<?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>50747</bug_id>
          
          <creation_ts>2010-12-09 03:24:18 -0800</creation_ts>
          <short_desc>[GTK] drop soup cache stuff, use versions from libsoup</short_desc>
          <delta_ts>2011-02-02 13:11:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>50675</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dan Winship">danw</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>319379</commentid>
    <comment_count>0</comment_count>
    <who name="Dan Winship">danw</who>
    <bug_when>2010-12-09 03:24:18 -0800</bug_when>
    <thetext>We&apos;re moving the request/cache code to libsoup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319381</commentid>
    <comment_count>1</comment_count>
      <attachid>76040</attachid>
    <who name="Dan Winship">danw</who>
    <bug_when>2010-12-09 03:29:33 -0800</bug_when>
    <thetext>Created attachment 76040
patch to remove request/cache stuff and use it from libsoup instead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326638</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-24 09:10:32 -0800</bug_when>
    <thetext>You should consider using --suggest-reviewers when using webkit-patch upload so that folks who might review the patch get CC&apos;d.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326820</commentid>
    <comment_count>3</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-12-25 11:55:23 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; You should consider using --suggest-reviewers when using webkit-patch upload so that folks who might review the patch get CC&apos;d.

We are pretty much waiting to have a EWS with the properly up do date libraries to move forward with this; I believe the plan is to stop using the ones generously provided by you guys and move to ones hosted by Collabora, and that Gustavo is taking care of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327306</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-28 12:09:16 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; You should consider using --suggest-reviewers when using webkit-patch upload so that folks who might review the patch get CC&apos;d.
&gt; 
&gt; We are pretty much waiting to have a EWS with the properly up do date libraries to move forward with this; I believe the plan is to stop using the ones generously provided by you guys and move to ones hosted by Collabora, and that Gustavo is taking care of that.

I&apos;m not sure what your&apos;e saying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327311</commentid>
    <comment_count>5</comment_count>
    <who name="Dan Winship">danw</who>
    <bug_when>2010-12-28 12:49:56 -0800</bug_when>
    <thetext>He was clarifying (in a roundabout way) that the reason the patch hasn&apos;t been reviewed is because it&apos;s blocking on real-world issues, not because the potential reviewers were unaware of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341583</commentid>
    <comment_count>6</comment_count>
      <attachid>76040</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-01-28 11:47:45 -0800</bug_when>
    <thetext>Comment on attachment 76040
patch to remove request/cache stuff and use it from libsoup instead

Trying to trigger the GTK+ EWS on this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342117</commentid>
    <comment_count>7</comment_count>
      <attachid>80568</attachid>
    <who name="Dan Winship">danw</who>
    <bug_when>2011-01-29 11:04:25 -0800</bug_when>
    <thetext>Created attachment 80568
updated patch (for source tree moves and some other stuff)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342118</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-29 11:08:28 -0800</bug_when>
    <thetext>Attachment 80568 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:59:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:60:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:171:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:182:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/network/ResourceHandleInternal.h:52:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 5 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342144</commentid>
    <comment_count>9</comment_count>
      <attachid>80574</attachid>
    <who name="Dan Winship">danw</who>
    <bug_when>2011-01-29 14:45:27 -0800</bug_when>
    <thetext>Created attachment 80574
updated again to (almost) pass check-webkit-style

The NULL-vs-0 warning from check-webkit-style is wrong. Apparently we could suppress it by squishing the entire g_object_set() call onto a single line, but I didn&apos;t do that because (a) it would be ugly, and (b) that code was already in ResourceHandleSoup.cpp anyway, I just moved it within the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342147</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-29 14:47:57 -0800</bug_when>
    <thetext>Attachment 80574 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:181:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342183</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-29 18:16:44 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=80574) [details]
&gt; updated again to (almost) pass check-webkit-style
&gt; 
&gt; The NULL-vs-0 warning from check-webkit-style is wrong. Apparently we could suppress it by squishing the entire g_object_set() call onto a single line, but I didn&apos;t do that because (a) it would be ugly, and (b) that code was already in ResourceHandleSoup.cpp anyway, I just moved it within the file.

It can also lead to crashes on 64-bit systems, so it&apos;s actively dangerous to use 0!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342184</commentid>
    <comment_count>12</comment_count>
      <attachid>80574</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-29 18:26:36 -0800</bug_when>
    <thetext>Comment on attachment 80574
updated again to (almost) pass check-webkit-style

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

Awesome! 

&gt; Source/WebCore/ChangeLog:20
&gt; +        * GNUmakefile.am:
&gt; +        * platform/network/ResourceHandleInternal.h:
&gt; +        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
&gt; +        * platform/network/soup/ResourceHandleSoup.cpp:
&gt; +        (WebCore::ensureSessionIsInitialized):
&gt; +        (WebCore::parseDataUrl):
&gt; +        (WebCore::sendRequestCallback):
&gt; +        (WebCore::startHttp):
&gt; +        (WebCore::ResourceHandle::platformSetDefersLoading):
&gt; +        (WebCore::readCallback):
&gt; +        (WebCore::startGio):

I think these should be filled with some brief information about what&apos;s changing. One comment probably covers quite a few of them.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:155
&gt; +#define MAX_CONNECTIONS_PER_HOST 6

These should probably be static const int instead of #defined. I know they weren&apos;t before, but since we&apos;re moving the entire block, we might as well fix the style issues now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342490</commentid>
    <comment_count>13</comment_count>
      <attachid>80574</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-01-31 00:27:06 -0800</bug_when>
    <thetext>Comment on attachment 80574
updated again to (almost) pass check-webkit-style

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

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:174
&gt; +    SoupRequester* requester = soup_requester_new();

I think you should add a check for existence of a SoupRequester in the session instead of directly creating it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344066</commentid>
    <comment_count>14</comment_count>
      <attachid>80933</attachid>
    <who name="Dan Winship">danw</who>
    <bug_when>2011-02-02 11:07:56 -0800</bug_when>
    <thetext>Created attachment 80933
updated with Martin&apos;s suggestion

(not tested yet... my machine is too slow)

I didn&apos;t make the change Sergio suggested, because unlike the situation with the cookie jar, there&apos;s no reason anyone else would want to override the default SoupRequester, since it doesn&apos;t have subclasses, so any other requester they set would just be identical to the one WebKit sets itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344068</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-02 11:09:15 -0800</bug_when>
    <thetext>Attachment 80933 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:59:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:60:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:171:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:182:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/network/ResourceHandleInternal.h:52:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 5 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344071</commentid>
    <comment_count>16</comment_count>
      <attachid>80933</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-02 11:13:15 -0800</bug_when>
    <thetext>Comment on attachment 80933
updated with Martin&apos;s suggestion

Seems good, though we need to fix the style issues before landing this one. I will do that before landing as well as verifying that this builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344126</commentid>
    <comment_count>17</comment_count>
    <who name="Dan Winship">danw</who>
    <bug_when>2011-02-02 12:19:04 -0800</bug_when>
    <thetext>doh, sorry. i somehow lost the check-webkit-style fixes from before...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344135</commentid>
    <comment_count>18</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-02 12:25:01 -0800</bug_when>
    <thetext>Committed r77399: &lt;http://trac.webkit.org/changeset/77399&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76040</attachid>
            <date>2010-12-09 03:29:33 -0800</date>
            <delta_ts>2011-01-29 11:04:25 -0800</delta_ts>
            <desc>patch to remove request/cache stuff and use it from libsoup instead</desc>
            <filename>0002-Use-libsoup-based-cache-requester-API.patch</filename>
            <type>text/plain</type>
            <size>183311</size>
            <attacher name="Dan Winship">danw</attacher>
            
              <data encoding="base64">RnJvbSBhNTY5YjI0MzMyMzU5MDQ2MjhmMjRiYzY1NDM0ZGI2YWVjNGVlM2M3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW4gV2luc2hpcCA8ZGFud0Bnbm9tZS5vcmc+CkRhdGU6IFdl
ZCwgOCBEZWMgMjAxMCAxMzozNDoyOSArMDEwMApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBVc2UgbGli
c291cC1iYXNlZCBjYWNoZS9yZXF1ZXN0ZXIgQVBJCgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOCArCiBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjEgKy0KIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmggIHwgICAgOSArLQogLi4uL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwICAgfCAgMTA0ICstCiAu
Li4vc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyAgICAgICB8ICAyMDAg
LS0tCiAuLi4vc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCAgICAgICB8
ICAgNjIgLQogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMg
ICAgfCAgOTIyIC0tLS0tLS0tLS0tCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1p
bnB1dC1zdHJlYW0uaCAgICB8ICAgNzcgLQogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZGF0YS5jICAgICAgICAgfCAgMTcwIC0tCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1kYXRhLmggICAgICAgICB8ICAgNTIgLQogLi4uL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtZmlsZS5jICAgICAgICAgfCAgMzMxIC0tLS0KIC4uLi9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuaCAgICAgICAgIHwgICA1NCAtCiAuLi4vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMgICAgICAgICB8ICAzNTYgLS0tLS0KIC4u
Li9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCAgICAgICAgIHwgICA1NCAt
CiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyB8ICAz
MTIgLS0tLQogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
LmggfCAgMTAwIC0tCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dGVyLmMgICB8ICAxODggLS0tCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdGVyLmggICB8ICAgODEgLQogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS1wcml2YXRlLmggfCAgIDQyIC0KIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0
L3NvdXAtY2FjaGUuYyAgICAgICAgIHwgMTY3NyAtLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL25l
dHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oICAgICAgICAgfCAgMTAyIC0tCiBX
ZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEg
KwogV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAzIC0KIDIzIGZpbGVzIGNoYW5nZWQsIDExMSBpbnNlcnRpb25zKCspLCA0ODU1IGRlbGV0aW9u
cygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3Ry
ZWFtLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtZGF0YS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtZmlsZS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmgKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93
ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCiBkZWxldGUgbW9k
ZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAt
Y2FjaGUuaAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggNjY0NDA3OS4uZGJiOTMxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0xMi0wOSAgRGFu
IFdpbnNoaXAgIDxkYW53QGdub21lLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVc2UgbGlic291cC1iYXNlZCBjYWNoZS9yZXF1ZXN0ZXIgQVBJ
CisKKyAgICAgICAgW0dUS10gZHJvcCBzb3VwIGNhY2hlIHN0dWZmLCB1c2UgdmVyc2lvbnMgZnJv
bSBsaWJzb3VwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MDc0NworCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUludGVybmFsOjpSZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlRGF0YVVybCk6CisgICAgICAgIChXZWJDb3JlOjpzZW5kUmVxdWVzdENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OnN0YXJ0SHR0cCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydEdpbyk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9y
eS1pbnB1dC1zdHJlYW0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1k
YXRhLmM6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1kYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmM6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmM6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1odHRwLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC5jOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJr
aXQvc291cC1jYWNoZS5jOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oOiBSZW1vdmVkLgorCiAyMDEwLTEyLTA4ICBEYW4g
V2luc2hpcCAgPGRhbndAZ25vbWUub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KaW5kZXggZjQxN2EyNC4uNTNjNzRmOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC04NCw5ICs4NCw3
IEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAotCS1JJChz
cmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwIFwKLQktSSQoc3JjZGlyKS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZSBcCi0JLUkkKHNyY2RpcikvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0CisJLUkkKHNyY2RpcikvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAKIAogd2ViY29yZV9idWlsdF9ub3NvdXJjZXMgKz0gXAogCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvdG9rZW5pemVyLmNwcApAQCAtMzczNSwyMyArMzczMyw2IEBA
IHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
U29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1NvdXBVUklVdGlscy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Nv
dXBVUklVdGlscy5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggXAotCVdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYyBcCi0JV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5oIFwK
LQlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5j
IFwKLQlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0
YS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZmlsZS5jIFwKLQlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QtZmlsZS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtaHR0cC5jIFwKLQlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtaHR0cC5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QuYyBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LmggXAotCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdGVyLmMgXAotCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdGVyLmggXAotCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtp
dC9zb3VwLWNhY2hlLmMgXAotCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dl
YmtpdC9zb3VwLWNhY2hlLmggXAotCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5EYXRhR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNw
cCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKaW5kZXggOWNjY2Vj
ZC4uMmJiOTkyYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlSW50ZXJuYWwuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oCkBAIC00Niw5ICs0NiwxMCBAQAogI2VuZGlmCiAKICNpZiBVU0UoU09V
UCkKLSNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgogI2luY2x1ZGUgPEdSZWZQdHIuaD4KICNp
bmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNkZWZpbmUgTElCU09VUF9VU0VfVU5TVEFCTEVfUkVR
VUVTVF9BUEkKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtcmVxdWVzdC5oPgogY2xhc3MgRnJhbWU7
CiAjZW5kaWYKIApAQCAtMTMxLDkgKzEzMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgIG1fdXNlciA9IHVybC51c2VyKCk7CiAgICAgICAgICAgICBtX3Bhc3MgPSB1cmwucGFz
cygpOwogICAgICAgICAgICAgbV9maXJzdFJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKLSNp
ZiBVU0UoU09VUCkKLSAgICAgICAgICAgIG1fcmVxdWVzdGVyID0gYWRvcHRQbGF0Zm9ybVJlZih3
ZWJraXRfc291cF9yZXF1ZXN0ZXJfbmV3KCkpOwotI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIH5SZXNvdXJjZUhhbmRsZUludGVybmFsKCk7CkBAIC0xODksOCArMTg3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0Zm9ybVJlZlB0cjxTb3VwTWVzc2FnZT4g
bV9zb3VwTWVzc2FnZTsKICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAg
ICAgICBib29sIG1fY2FuY2VsbGVkOwotICAgICAgICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXRTb3Vw
UmVxdWVzdD4gbV9zb3VwUmVxdWVzdDsKLSAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0U291
cFJlcXVlc3Rlcj4gbV9yZXF1ZXN0ZXI7CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPFNvdXBSZXF1
ZXN0PiBtX3NvdXBSZXF1ZXN0OwogICAgICAgICBQbGF0Zm9ybVJlZlB0cjxHSW5wdXRTdHJlYW0+
IG1faW5wdXRTdHJlYW07CiAgICAgICAgIFBsYXRmb3JtUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9j
YW5jZWxsYWJsZTsKICAgICAgICAgY2hhciogbV9idWZmZXI7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCBiNTg3ZmRl
Li4zN2RiZTA3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlSGFuZGxlU291cC5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZUludGVybmFsLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgiCiAjaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250
bC5oPgpAQCAtNTYsNiArNTUsMTAgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRl
IDx1bmlzdGQuaD4KIAorI2RlZmluZSBMSUJTT1VQX1VTRV9VTlNUQUJMRV9SRVFVRVNUX0FQSQor
I2luY2x1ZGUgPGxpYnNvdXAvc291cC1yZXF1ZXN0ZXIuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAtcmVxdWVzdC1odHRwLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2RlZmluZSBSRUFE
X0JVRkZFUl9TSVpFIDgxOTIKQEAgLTE0NCw2ICsxNDcsNDIgQEAgUmVzb3VyY2VIYW5kbGU6On5S
ZXNvdXJjZUhhbmRsZSgpCiAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKHRoaXMsIHRy
dWUpOwogfQogCisvLyBWYWx1ZXMgdGFrZW4gZnJvbSBodHRwOi8vc3RldmVzb3VkZXJzLmNvbS91
YS9pbmRleC5waHAgZm9sbG93aW5nCisvLyB0aGUgcnVsZSAiRG8gV2hhdCBFdmVyeSBPdGhlciBN
b2Rlcm4gQnJvd3NlciBJcyBEb2luZyIuIFRoZXkgc2VlbQorLy8gdG8gc2lnbmlmaWNhbnRseSBp
bXByb3ZlIHBhZ2UgbG9hZGluZyB0aW1lIGNvbXBhcmVkIHRvIHNvdXAncworLy8gZGVmYXVsdCB2
YWx1ZXMuCisjZGVmaW5lIE1BWF9DT05ORUNUSU9OUyAgICAgICAgICA2MAorI2RlZmluZSBNQVhf
Q09OTkVDVElPTlNfUEVSX0hPU1QgNgorCitzdGF0aWMgdm9pZCBlbnN1cmVTZXNzaW9uSXNJbml0
aWFsaXplZChTb3VwU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAgICBpZiAoZ19vYmplY3RfZ2V0X2Rh
dGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJ3ZWJraXQtaW5pdCIpKQorICAgICAgICByZXR1cm47CisK
KyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBTT1VQX0NPT0tJRV9KQVIoc291cF9zZXNzaW9uX2dl
dF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9DT09LSUVfSkFSKSk7CisgICAgaWYgKCFqYXIp
CisgICAgICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1NFU1NJT05f
RkVBVFVSRShkZWZhdWx0Q29va2llSmFyKCkpKTsKKyAgICBlbHNlCisgICAgICAgIHNldERlZmF1
bHRDb29raWVKYXIoamFyKTsKKworICAgIGlmICghc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNl
c3Npb24sIFNPVVBfVFlQRV9MT0dHRVIpICYmIExvZ05ldHdvcmsuc3RhdGUgPT0gV1RGTG9nQ2hh
bm5lbE9uKSB7CisgICAgICAgIFNvdXBMb2dnZXIqIGxvZ2dlciA9IHNvdXBfbG9nZ2VyX25ldyhz
dGF0aWNfY2FzdDxTb3VwTG9nZ2VyTG9nTGV2ZWw+KFNPVVBfTE9HR0VSX0xPR19CT0RZKSwgLTEp
OworCXNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1NFU1NJT05fRkVBVFVS
RShsb2dnZXIpKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobG9nZ2VyKTsKKyAgICB9CisKKyAg
ICBTb3VwUmVxdWVzdGVyKiByZXF1ZXN0ZXIgPSBzb3VwX3JlcXVlc3Rlcl9uZXcoKTsKKyAgICBz
b3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9TRVNTSU9OX0ZFQVRVUkUocmVx
dWVzdGVyKSk7CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdGVyKTsKKworICAgIGdfb2JqZWN0
X3NldChzZXNzaW9uLAorICAgICAgICAgICAgICAgICBTT1VQX1NFU1NJT05fTUFYX0NPTk5TLCBN
QVhfQ09OTkVDVElPTlMsCisgICAgICAgICAgICAgICAgIFNPVVBfU0VTU0lPTl9NQVhfQ09OTlNf
UEVSX0hPU1QsIE1BWF9DT05ORUNUSU9OU19QRVJfSE9TVCwKKyAgICAgICAgICAgICAgICAgTlVM
TCk7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChzZXNzaW9uKSwgIndlYmtpdC1p
bml0IiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHhkZWFkYmVlZikpOworfQorCiB2b2lkIFJl
c291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwgJnVybCkKIHsKICAgICBHT3du
UHRyPFNvdXBVUkk+IHNvdXBVUkkoc291cF91cmlfbmV3KHVybC5wcmV0dHlVUkwoKS51dGY4KCku
ZGF0YSgpKSk7CkBAIC0zNDgsMTUgKzM4NywxNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRh
VXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
U291cFNlc3Npb24qIHNlc3Npb24gPSBoYW5kbGUtPmRlZmF1bHRTZXNzaW9uKCk7CisgICAgZW5z
dXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoc2Vzc2lvbik7CisgICAgU291cFJlcXVlc3RlciogcmVx
dWVzdGVyID0gU09VUF9SRVFVRVNURVIoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24s
IFNPVVBfVFlQRV9SRVFVRVNURVIpKTsKICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAg
ZC0+bV9zb3VwUmVxdWVzdCA9IGFkb3B0UGxhdGZvcm1SZWYod2Via2l0X3NvdXBfcmVxdWVzdGVy
X3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc2Vzc2lvbiwgJmVycm9yLm91dFB0cigpKSk7Cisg
ICAgZC0+bV9zb3VwUmVxdWVzdCA9IGFkb3B0UGxhdGZvcm1SZWYoc291cF9yZXF1ZXN0ZXJfcmVx
dWVzdChyZXF1ZXN0ZXIsIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpKSk7CiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAg
IGQtPm1fc291cFJlcXVlc3QgPSAwOwogICAgICAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmco
aGFuZGxlLCAwKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGQtPm1faW5w
dXRTdHJlYW0gPSBhZG9wdFBsYXRmb3JtUmVmKHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZChkLT5t
X3NvdXBSZXF1ZXN0LmdldCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBkLT5tX2lucHV0
U3RyZWFtID0gYWRvcHRQbGF0Zm9ybVJlZihzb3VwX3JlcXVlc3Rfc2VuZChkLT5tX3NvdXBSZXF1
ZXN0LmdldCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpKTsKICAgICBpZiAoZXJyb3IpIHsKICAgICAg
ICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7CiAgICAgICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGlu
ZyhoYW5kbGUsIDApOwpAQCAtMzk0LDM4ICs0MzUsNiBAQCBzdGF0aWMgU291cFNlc3Npb24qIGNy
ZWF0ZVNvdXBTZXNzaW9uKCkKICAgICByZXR1cm4gc291cF9zZXNzaW9uX2FzeW5jX25ldygpOwog
fQogCi0vLyBWYWx1ZXMgdGFrZW4gZnJvbSBodHRwOi8vc3RldmVzb3VkZXJzLmNvbS91YS9pbmRl
eC5waHAgZm9sbG93aW5nCi0vLyB0aGUgcnVsZSAiRG8gV2hhdCBFdmVyeSBPdGhlciBNb2Rlcm4g
QnJvd3NlciBJcyBEb2luZyIuIFRoZXkgc2VlbQotLy8gdG8gc2lnbmlmaWNhbnRseSBpbXByb3Zl
IHBhZ2UgbG9hZGluZyB0aW1lIGNvbXBhcmVkIHRvIHNvdXAncwotLy8gZGVmYXVsdCB2YWx1ZXMu
Ci0jZGVmaW5lIE1BWF9DT05ORUNUSU9OUyAgICAgICAgICA2MAotI2RlZmluZSBNQVhfQ09OTkVD
VElPTlNfUEVSX0hPU1QgNgotCi1zdGF0aWMgdm9pZCBlbnN1cmVTZXNzaW9uSXNJbml0aWFsaXpl
ZChTb3VwU2Vzc2lvbiogc2Vzc2lvbikKLXsKLSAgICBpZiAoZ19vYmplY3RfZ2V0X2RhdGEoR19P
QkpFQ1Qoc2Vzc2lvbiksICJ3ZWJraXQtaW5pdCIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBT
b3VwQ29va2llSmFyKiBqYXIgPSByZWludGVycHJldF9jYXN0PFNvdXBDb29raWVKYXIqPihzb3Vw
X3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0NPT0tJRV9KQVIpKTsKLSAg
ICBpZiAoIWphcikKLSAgICAgICAgc291cF9zZXNzaW9uX2FkZF9mZWF0dXJlKHNlc3Npb24sIFNP
VVBfU0VTU0lPTl9GRUFUVVJFKGRlZmF1bHRDb29raWVKYXIoKSkpOwotICAgIGVsc2UKLSAgICAg
ICAgc2V0RGVmYXVsdENvb2tpZUphcihqYXIpOwotCi0gICAgaWYgKCFzb3VwX3Nlc3Npb25fZ2V0
X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0xPR0dFUikgJiYgTG9nTmV0d29yay5zdGF0ZSA9
PSBXVEZMb2dDaGFubmVsT24pIHsKLSAgICAgICAgU291cExvZ2dlciogbG9nZ2VyID0gc291cF9s
b2dnZXJfbmV3KHN0YXRpY19jYXN0PFNvdXBMb2dnZXJMb2dMZXZlbD4oU09VUF9MT0dHRVJfTE9H
X0JPRFkpLCAtMSk7Ci0gICAgICAgIHNvdXBfbG9nZ2VyX2F0dGFjaChsb2dnZXIsIHNlc3Npb24p
OwotICAgICAgICBnX29iamVjdF91bnJlZihsb2dnZXIpOwotICAgIH0KLQotICAgIGdfb2JqZWN0
X3NldChzZXNzaW9uLAotICAgICAgICAgICAgICAgICBTT1VQX1NFU1NJT05fTUFYX0NPTk5TLCBN
QVhfQ09OTkVDVElPTlMsCi0gICAgICAgICAgICAgICAgIFNPVVBfU0VTU0lPTl9NQVhfQ09OTlNf
UEVSX0hPU1QsIE1BWF9DT05ORUNUSU9OU19QRVJfSE9TVCwKLSAgICAgICAgICAgICAgICAgTlVM
TCk7Ci0KLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChzZXNzaW9uKSwgIndlYmtpdC1p
bml0IiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHhkZWFkYmVlZikpOwotfQotCiBzdGF0aWMg
dm9pZCBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
Ym9vbCBpc0Rlc3Ryb3lpbmcgPSBmYWxzZSkKIHsKICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFs
KiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwpAQCAtNDc5LDE0ICs0ODgsMTQgQEAgc3RhdGlj
IHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCog
cmVzLCBncG9pbnRlciB1c2UKICAgICB9CiAKICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7Ci0g
ICAgR0lucHV0U3RyZWFtKiBpbiA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9maW5pc2goZC0+
bV9zb3VwUmVxdWVzdC5nZXQoKSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIEdJbnB1dFN0
cmVhbSogaW4gPSBzb3VwX3JlcXVlc3Rfc2VuZF9maW5pc2goZC0+bV9zb3VwUmVxdWVzdC5nZXQo
KSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwogCiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIFNv
dXBNZXNzYWdlKiBzb3VwTXNnID0gZC0+bV9zb3VwTWVzc2FnZS5nZXQoKTsKICAgICAgICAgZ2Jv
b2xlYW4gaXNUcmFuc3BvcnRFcnJvciA9IGQtPm1fc291cE1lc3NhZ2UgJiYgU09VUF9TVEFUVVNf
SVNfVFJBTlNQT1JUX0VSUk9SKHNvdXBNc2ctPnN0YXR1c19jb2RlKTsKIAogICAgICAgICBpZiAo
aXNUcmFuc3BvcnRFcnJvciB8fCAoZXJyb3ItPmRvbWFpbiA9PSBHX0lPX0VSUk9SKSkgewotICAg
ICAgICAgICAgU291cFVSSSogdXJpID0gd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1f
c291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgU291cFVSSSogdXJpID0gc291cF9yZXF1
ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7CiAgICAgICAgICAgICBHT3duUHRy
PGNoYXI+IHVyaVN0cihzb3VwX3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSkpOwogICAgICAgICAg
ICAgZ2ludCBlcnJvckNvZGUgPSBpc1RyYW5zcG9ydEVycm9yID8gc3RhdGljX2Nhc3Q8Z2ludD4o
c291cE1zZy0+c3RhdHVzX2NvZGUpIDogZXJyb3ItPmNvZGU7CiAgICAgICAgICAgICBjb25zdCBn
Y2hhciogZXJyb3JNc2cgPSBpc1RyYW5zcG9ydEVycm9yID8gc291cE1zZy0+cmVhc29uX3BocmFz
ZSA6IGVycm9yLT5tZXNzYWdlOwpAQCAtNTM2LDggKzU0NSw4IEBAIHN0YXRpYyB2b2lkIHNlbmRS
ZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50
ZXIgdXNlCiAgICAgLy8gKGUuZy4gZmlsZSBhbmQgR0lPIGJhc2VkIHByb3RvY29sKS4KICAgICBp
ZiAoIWhhbmRsZS0+c2hvdWxkQ29udGVudFNuaWZmKCkgJiYgZC0+bV9yZXNwb25zZS5pc051bGwo
KSkgewogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChoYW5kbGUtPmZpcnN0UmVxdWVzdCgp
LnVybCgpKTsKLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZSh3ZWJraXRfc291cF9y
ZXF1ZXN0X2dldF9jb250ZW50X3R5cGUoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOwotICAgICAg
ICBkLT5tX3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aCh3ZWJraXRfc291cF9yZXF1
ZXN0X2dldF9jb250ZW50X2xlbmd0aChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgICAg
IGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUo
ZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEV4cGVj
dGVkQ29udGVudExlbmd0aChzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKGQtPm1fc291
cFJlcXVlc3QuZ2V0KCkpKTsKICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFu
ZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKIAogICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQp
IHsKQEAgLTU1OSw2ICs1NjgsNyBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSkKIAogICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5kZWZhdWx0
U2Vzc2lvbigpOwogICAgIGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKHNlc3Npb24pOworICAg
IFNvdXBSZXF1ZXN0ZXIqIHJlcXVlc3RlciA9IFNPVVBfUkVRVUVTVEVSKHNvdXBfc2Vzc2lvbl9n
ZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfUkVRVUVTVEVSKSk7CiAKICAgICBSZXNvdXJj
ZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwogCkBAIC01NjgsNyAr
NTc4LDcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAg
ICAgcmVxdWVzdC5zZXRVUkwodXJsKTsKIAogICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAg
ICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJraXRfc291cF9yZXF1ZXN0
ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rlci5nZXQoKSwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIHNlc3Npb24sICZlcnJvci5vdXRQdHIoKSkpOworICAgIGQtPm1fc291cFJlcXVlc3QgPSBh
ZG9wdFBsYXRmb3JtUmVmKHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QocmVxdWVzdGVyLCB1cmwuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpKSk7CiAgICAgaWYgKGVycm9yKSB7
CiAgICAgICAgIGQtPm1fc291cFJlcXVlc3QgPSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC01NzYsNyArNTg2LDcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUpCiAKICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0
LmdldCgpKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CiAKLSAgICBkLT5tX3NvdXBNZXNz
YWdlID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3Nh
Z2UoV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKSk7Cisg
ICAgZC0+bV9zb3VwTWVzc2FnZSA9IGFkb3B0UGxhdGZvcm1SZWYoc291cF9yZXF1ZXN0X2h0dHBf
Z2V0X21lc3NhZ2UoU09VUF9SRVFVRVNUX0hUVFAoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpKTsK
ICAgICBpZiAoIWQtPm1fc291cE1lc3NhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
NjYwLDcgKzY3MCw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFu
ZGxlKQogICAgIC8vIFNlbmQgdGhlIHJlcXVlc3Qgb25seSBpZiBpdCdzIG5vdCBiZWVuIGV4cGxp
Y2l0ZWx5IGRlZmVycmVkLgogICAgIGlmICghZC0+bV9kZWZlcnNMb2FkaW5nKSB7CiAgICAgICAg
IGQtPm1fY2FuY2VsbGFibGUgPSBhZG9wdFBsYXRmb3JtUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkp
OwotICAgICAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVxdWVz
dC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7
CisgICAgICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fc291cFJlcXVlc3QuZ2V0KCks
IGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIDApOwogICAgIH0K
IAogICAgIHJldHVybiB0cnVlOwpAQCAtNzQzLDcgKzc1Myw3IEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCiAKICAgICBp
ZiAoIWRlZmVyc0xvYWRpbmcgJiYgIWQtPm1fY2FuY2VsbGFibGUgJiYgZC0+bV9zb3VwUmVxdWVz
dC5nZXQoKSkgewogICAgICAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRQbGF0Zm9ybVJlZihn
X2NhbmNlbGxhYmxlX25ldygpKTsKLSAgICAgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2Fz
eW5jKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRS
ZXF1ZXN0Q2FsbGJhY2ssIDApOworICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhkLT5t
X3NvdXBSZXF1ZXN0LmdldCgpLCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLCBzZW5kUmVxdWVzdENh
bGxiYWNrLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODIzLDcgKzgzMyw3IEBA
IHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCog
YXN5bmNSZXN1bHQsIGdwb2ludGVyIGRhCiAKICAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1
dF9zdHJlYW1fcmVhZF9maW5pc2goZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgYXN5bmNSZXN1bHQs
ICZlcnJvci5vdXRQdHIoKSk7CiAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIFNvdXBVUkkqIHVy
aSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKTsK
KyAgICAgICAgU291cFVSSSogdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSk7CiAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0
cmluZyh1cmksIGZhbHNlKSk7CiAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihn
X3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwgZXJyb3ItPmNvZGUsIHVyaVN0ci5nZXQoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9t
VVRGOChlcnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7CkBAIC04NjgsNiArODc4LDggQEAgc3Rh
dGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5k
ZWZhdWx0U2Vzc2lvbigpOworICAgIGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKHNlc3Npb24p
OworICAgIFNvdXBSZXF1ZXN0ZXIqIHJlcXVlc3RlciA9IFNPVVBfUkVRVUVTVEVSKHNvdXBfc2Vz
c2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfUkVRVUVTVEVSKSk7CiAgICAgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKIAogICAgIC8v
IEdJTyBkb2Vzbid0IGtub3cgaG93IHRvIGhhbmRsZSByZWZzIGFuZCBxdWVyaWVzLCBzbyByZW1v
dmUgdGhlbQpAQCAtODc5LDcgKzg5MSw3IEBAIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKQogICAgIENTdHJpbmcgdXJsU3RyID0gdXJsLnN0cmlu
ZygpLnV0ZjgoKTsKIAogICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBkLT5tX3NvdXBS
ZXF1ZXN0ID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChk
LT5tX3JlcXVlc3Rlci5nZXQoKSwgdXJsU3RyLmRhdGEoKSwgc2Vzc2lvbiwgJmVycm9yLm91dFB0
cigpKSk7CisgICAgZC0+bV9zb3VwUmVxdWVzdCA9IGFkb3B0UGxhdGZvcm1SZWYoc291cF9yZXF1
ZXN0ZXJfcmVxdWVzdChyZXF1ZXN0ZXIsIHVybFN0ci5kYXRhKCksICZlcnJvci5vdXRQdHIoKSkp
OwogICAgIGlmIChlcnJvcikgewogICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gMDsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtODkxLDcgKzkwMyw3IEBAIHN0YXRpYyBib29sIHN0YXJ0R2lv
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKQogICAgIGhhbmRsZS0+cmVmKCk7CiAK
ICAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRQbGF0Zm9ybVJlZihnX2NhbmNlbGxhYmxlX25l
dygpKTsKLSAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVxdWVz
dC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7
CisgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+
bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGMxNDg2M2IuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsg
aW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEsIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRp
ZgotCi0jaW5jbHVkZSAic291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgiCi0KLSNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5o
PgotCi0jZGVmaW5lIElOSVRfU1RSSU5HICI8aHRtbD48aGVhZD48dGl0bGU+T01HITwvdGl0bGU+
PC9oZWFkPjxib2R5Pjx0YWJsZT4iCi0jZGVmaW5lIEVYSVRfU1RSSU5HICI8L3RhYmxlPjwvaHRt
bD4iCi0KLUdfREVGSU5FX1RZUEUgKFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSwgd2Vi
a2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbSwgR19UWVBFX0lOUFVUX1NUUkVBTSkKLQot
c3RhdGljIFNvdXBCdWZmZXIgKgotd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9w
YXJzZV9pbmZvIChXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKiBzdHJlYW0sCi0JCQkJ
CSAgICAgICBHRmlsZUluZm8gKiBpbmZvKQotewotCVNvdXBCdWZmZXIgKmJ1ZmZlcjsKLQlHU3Ry
aW5nICpzdHJpbmc7Ci0JY29uc3QgY2hhciAqczsKLQljaGFyICplc2NhcGVkLCAqcGF0aCwgKnht
bF9zdHJpbmc7Ci0KLQlpZiAoIWdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKSkKLQkJcmV0dXJu
IE5VTEw7Ci0KLQlzID0gZ19maWxlX2luZm9fZ2V0X2Rpc3BsYXlfbmFtZSAoaW5mbyk7Ci0JaWYg
KCFzKSB7Ci0JCXMgPSBnX2ZpbGVfaW5mb19nZXRfbmFtZSAoaW5mbyk7Ci0JCS8qIEZJWE1FOiBj
b252ZXJ0IHNvbWVob3c/ICovCi0JCWlmICghZ191dGY4X3ZhbGlkYXRlIChzLCAtMSwgTlVMTCkp
Ci0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0Jc3RyaW5nID0gZ19zdHJpbmdfbmV3ICgiPHRyPiIpOwot
Ci0JeG1sX3N0cmluZyA9IGdfbWFya3VwX2VzY2FwZV90ZXh0IChzLCAtMSk7Ci0JZXNjYXBlZCA9
IGdfdXJpX2VzY2FwZV9zdHJpbmcgKGdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKSwgTlVMTCwg
RkFMU0UpOwotCXBhdGggPSBnX3N0cmNvbmNhdCAoc3RyZWFtLT51cmksICIvIiwgZXNjYXBlZCwg
TlVMTCk7Ci0JZ19mcmVlIChlc2NhcGVkKTsKLQlnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHJp
bmcsICI8dGQ+PGEgaHJlZj1cIiVzXCI+JXM8L2E+PC90ZD4iLCBwYXRoLCB4bWxfc3RyaW5nKTsK
LQlnX2ZyZWUgKHBhdGgpOwotCWdfZnJlZSAoeG1sX3N0cmluZyk7Ci0JZ19zdHJpbmdfYXBwZW5k
IChzdHJpbmcsICI8L3RyPiIpOwotCi0JYnVmZmVyID0gc291cF9idWZmZXJfbmV3IChTT1VQX01F
TU9SWV9UQUtFLCBzdHJpbmctPnN0ciwgc3RyaW5nLT5sZW4pOwotCWdfc3RyaW5nX2ZyZWUgKHN0
cmluZywgRkFMU0UpOwotCi0JcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RhdGljIFNvdXBCdWZmZXIg
Kgotd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkX25leHRfZmlsZSAoV2Vi
S2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtICAqc3RyZWFtLAotCQkJCQkJICAgR0NhbmNlbGxh
YmxlICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCQkgICBHRXJyb3IgICAgICAgICAg
ICAgICAgICAgKiplcnJvcikKLXsKLQlHRmlsZUluZm8gKmluZm87Ci0JU291cEJ1ZmZlciAqYnVm
ZmVyOwotCUdFcnJvciAqZXJyID0gTlVMTDsKLQotCWRvIHsKLQkJaW5mbyA9IGdfZmlsZV9lbnVt
ZXJhdG9yX25leHRfZmlsZSAoc3RyZWFtLT5lbnVtZXJhdG9yLCBjYW5jZWxsYWJsZSwgJmVycik7
Ci0JCWlmIChpbmZvID09IE5VTEwpIHsKLQkJCWlmIChlcnIpIHsKLQkJCQlnX3Byb3BhZ2F0ZV9l
cnJvciAoZXJyb3IsIGVycik7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9IGVsc2UgaWYgKCFzdHJl
YW0tPmRvbmUpIHsKLQkJCQlzdHJlYW0tPmRvbmUgPSBUUlVFOwotCQkJCXJldHVybiBzb3VwX2J1
ZmZlcl9uZXcgKFNPVVBfTUVNT1JZX1NUQVRJQywKLQkJCQkJCQlFWElUX1NUUklORywKLQkJCQkJ
CQlzaXplb2YgKEVYSVRfU1RSSU5HKSk7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBOVUxMOwot
CQkJfQotCQl9Ci0KLQkJYnVmZmVyID0gd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVh
bV9wYXJzZV9pbmZvIChzdHJlYW0sIGluZm8pOwotCX0gd2hpbGUgKGJ1ZmZlciA9PSBOVUxMKTsK
LQotCXJldHVybiBidWZmZXI7Ci19Ci0KLXN0YXRpYyBnc3NpemUKLXdlYmtpdF9zb3VwX2RpcmVj
dG9yeV9pbnB1dF9zdHJlYW1fcmVhZCAoR0lucHV0U3RyZWFtICAqaW5wdXQsCi0JCQkJCSB2b2lk
ICAgICAgICAgICpidWZmZXIsCi0JCQkJCSBnc2l6ZSBjb3VudCwKLQkJCQkJIEdDYW5jZWxsYWJs
ZSAgKmNhbmNlbGxhYmxlLAotCQkJCQkgR0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0JV2ViS2l0
U291cERpcmVjdG9yeUlucHV0U3RyZWFtICpzdHJlYW0gPSBXRUJLSVRfU09VUF9ESVJFQ1RPUllf
SU5QVVRfU1RSRUFNIChpbnB1dCk7Ci0JZ3NpemUgdG90YWwsIHNpemU7Ci0KLQlmb3IgKHRvdGFs
ID0gMDsgdG90YWwgPCBjb3VudDsgdG90YWwgKz0gc2l6ZSkgewotCQlpZiAoc3RyZWFtLT5idWZm
ZXIgPT0gTlVMTCkgewotCQkJc3RyZWFtLT5idWZmZXIgPSB3ZWJraXRfc291cF9kaXJlY3Rvcnlf
aW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcik7
Ci0JCQlpZiAoc3RyZWFtLT5idWZmZXIgPT0gTlVMTCkgewotCQkJCS8qIEZJWE1FOiBJcyB0aGlz
IGNvcnJlY3Qgb3Igc2hvdWxkIHdlIGZvcndhcmQgdGhlIGVycm9yPyAqLwotCQkJCWlmICh0b3Rh
bCkKLQkJCQkJZ19jbGVhcl9lcnJvciAoZXJyb3IpOwotCQkJCXJldHVybiB0b3RhbDsKLQkJCX0K
LQkJfQotCi0JCXNpemUgPSBNSU4gKHN0cmVhbS0+YnVmZmVyLT5sZW5ndGgsIGNvdW50IC0gdG90
YWwpOwotCQltZW1jcHkgKChjaGFyICopYnVmZmVyICsgdG90YWwsIHN0cmVhbS0+YnVmZmVyLT5k
YXRhLCBzaXplKTsKLQkJaWYgKHNpemUgPT0gc3RyZWFtLT5idWZmZXItPmxlbmd0aCkgewotCQkJ
c291cF9idWZmZXJfZnJlZSAoc3RyZWFtLT5idWZmZXIpOwotCQkJc3RyZWFtLT5idWZmZXIgPSBO
VUxMOwotCQl9IGVsc2UgewotCQkJU291cEJ1ZmZlciAqc3ViID0gc291cF9idWZmZXJfbmV3X3N1
YmJ1ZmZlciAoc3RyZWFtLT5idWZmZXIsCi0JCQkJCQkJCSAgICAgc2l6ZSwKLQkJCQkJCQkJICAg
ICBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoIC0gc2l6ZSk7Ci0JCQlzb3VwX2J1ZmZlcl9mcmVlIChz
dHJlYW0tPmJ1ZmZlcik7Ci0JCQlzdHJlYW0tPmJ1ZmZlciA9IHN1YjsKLQkJfQotCX0KLQotCXJl
dHVybiB0b3RhbDsKLX0KLQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9kaXJlY3Rvcnlf
aW5wdXRfc3RyZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0gICppbnB1dCwKLQkJCQkJICBHQ2FuY2Vs
bGFibGUgICpjYW5jZWxsYWJsZSwKLQkJCQkJICBHRXJyb3IgICAgICAgKiplcnJvcikKLXsKLQlX
ZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSA9IFdFQktJVF9TT1VQX0RJUkVD
VE9SWV9JTlBVVF9TVFJFQU0gKGlucHV0KTsKLQlnYm9vbGVhbiByZXN1bHQ7Ci0KLQlpZiAoc3Ry
ZWFtLT5idWZmZXIpIHsKLQkJc291cF9idWZmZXJfZnJlZSAoc3RyZWFtLT5idWZmZXIpOwotCQlz
dHJlYW0tPmJ1ZmZlciA9IE5VTEw7Ci0JfQotCi0JcmVzdWx0ID0gZ19maWxlX2VudW1lcmF0b3Jf
Y2xvc2UgKHN0cmVhbS0+ZW51bWVyYXRvciwKLQkJCQkJICBjYW5jZWxsYWJsZSwKLQkJCQkJICBl
cnJvcik7Ci0JZ19vYmplY3RfdW5yZWYgKHN0cmVhbS0+ZW51bWVyYXRvcik7Ci0Jc3RyZWFtLT5l
bnVtZXJhdG9yID0gTlVMTDsKLQotCWdfZnJlZSAoc3RyZWFtLT51cmkpOwotCXN0cmVhbS0+dXJp
ID0gTlVMTDsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291
cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQgKFdlYktpdFNvdXBEaXJlY3RvcnlJ
bnB1dFN0cmVhbUNsYXNzICpzdHJlYW1fY2xhc3MpCi17Ci0JR0lucHV0U3RyZWFtQ2xhc3MgKmlu
cHV0c3RyZWFtX2NsYXNzID0gR19JTlBVVF9TVFJFQU1fQ0xBU1MgKHN0cmVhbV9jbGFzcyk7Ci0K
LQlpbnB1dHN0cmVhbV9jbGFzcy0+cmVhZF9mbiA9IHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1
dF9zdHJlYW1fcmVhZDsKLQlpbnB1dHN0cmVhbV9jbGFzcy0+Y2xvc2VfZm4gPSB3ZWJraXRfc291
cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0
X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9pbml0IChXZWJLaXRTb3VwRGlyZWN0b3J5SW5w
dXRTdHJlYW0gKnN0cmVhbSkKLXsKLQlzdHJlYW0tPmJ1ZmZlciA9IHNvdXBfYnVmZmVyX25ldyAo
U09VUF9NRU1PUllfU1RBVElDLAotCQkJCQkgIElOSVRfU1RSSU5HLAotCQkJCQkgIHNpemVvZiAo
SU5JVF9TVFJJTkcpKTsKLX0KLQotR0lucHV0U3RyZWFtICoKLXdlYmtpdF9zb3VwX2RpcmVjdG9y
eV9pbnB1dF9zdHJlYW1fbmV3IChHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3IsCi0JCQkJCVNv
dXBVUkkgICAgICAgICAqdXJpKQotewotCUdJbnB1dFN0cmVhbSAqc3RyZWFtOwotCi0JZ19yZXR1
cm5fdmFsX2lmX2ZhaWwgKEdfSVNfRklMRV9FTlVNRVJBVE9SIChlbnVtZXJhdG9yKSwgTlVMTCk7
Ci0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVyaSAhPSBOVUxMLCBOVUxMKTsKLQotCXN0cmVhbSA9
IGdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBO
VUxMKTsKLQotCVdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKHN0cmVhbSktPmVu
dW1lcmF0b3IgPSBnX29iamVjdF9yZWYgKGVudW1lcmF0b3IpOwotCVdFQktJVF9TT1VQX0RJUkVD
VE9SWV9JTlBVVF9TVFJFQU0gKHN0cmVhbSktPnVyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyAodXJp
LCBGQUxTRSk7Ci0KLQlyZXR1cm4gc3RyZWFtOwotfQotCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0
LXN0cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzViMGJlLi4wMDAwMDAw
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5
LWlucHV0LXN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyogLSotIE1v
ZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6
IDggLSotICovCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXRUJLSVRfU09VUF9ESVJFQ1RP
UllfSU5QVVRfU1RSRUFNX0gKLSNkZWZpbmUgV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NU
UkVBTV9IIDEKLQotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAt
dHlwZXMuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtbWVzc2FnZS1ib2R5Lmg+Ci0KLUdfQkVH
SU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJF
QU0gICAgICAgICAgICAod2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9nZXRfdHlw
ZSAoKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTShvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lUX1RZUEVf
U09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJl
YW0pKQotI2RlZmluZSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NP
VVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFt
Q2xhc3MpKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQ
RV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0pKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0pKQotI2Rl
ZmluZSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNU
T1JZX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MpKQot
Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtIFdlYktpdFNv
dXBEaXJlY3RvcnlJbnB1dFN0cmVhbTsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwRGlyZWN0
b3J5SW5wdXRTdHJlYW1DbGFzcyBXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzczsK
LQotc3RydWN0IF9XZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gewotCUdJbnB1dFN0cmVh
bSBwYXJlbnQ7Ci0KLQlHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3I7Ci0JY2hhciAqdXJpOwot
CVNvdXBCdWZmZXIgKmJ1ZmZlcjsKLQlnYm9vbGVhbiBkb25lOwotfTsKLQotc3RydWN0IF9XZWJL
aXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcyB7Ci0JR0lucHV0U3RyZWFtQ2xhc3MgcGFy
ZW50X2NsYXNzOwotfTsKLQotR1R5cGUgICAgICAgICAgd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lu
cHV0X3N0cmVhbV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdJbnB1dFN0cmVhbSAqd2Via2l0X3NvdXBf
ZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcgKEdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvciwK
LQkJCQkJCSAgICAgIFNvdXBVUkkgICAgICAgICAqdXJpKTsKLQotCi1HX0VORF9ERUNMUwotCi0j
ZW5kaWYgLyogV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9IICovCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQt
c3RyZWFtLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NWM0NTguLjAw
MDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRw
LWlucHV0LXN0cmVhbS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTIyICswLDAgQEAKLS8qIHNvdXAt
aW5wdXQtc3RyZWFtLmMsIGJhc2VkIG9uIGdzb2NrZXRpbnB1dHN0cmVhbS5jCi0gKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LTIwMDcgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSwgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAotICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5oPgot
Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2lv
L2dpby5oPgotCi0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0KLSNpbmNsdWRlICJzb3VwLWh0
dHAtaW5wdXQtc3RyZWFtLmgiCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQgKEdTZWVrYWJsZUlmYWNlICpzZWVrYWJsZV9pZmFj
ZSk7Ci0KLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFt
LCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbSwgR19UWVBFX0lOUFVUX1NUUkVBTSwKLQkJ
CSBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdfVFlQRV9TRUVLQUJMRSwKLQkJCQkJCXdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQpKQotCi10eXBlZGVmIHZv
aWQgKCpXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2spKEdJbnB1dFN0cmVhbSAqKTsK
LQotdHlwZWRlZiBzdHJ1Y3QgewotCVNvdXBTZXNzaW9uICpzZXNzaW9uOwotCUdNYWluQ29udGV4
dCAqYXN5bmNfY29udGV4dDsKLQlTb3VwTWVzc2FnZSAqbXNnOwotCWdib29sZWFuIGdvdF9oZWFk
ZXJzLCBmaW5pc2hlZDsKLQlnb2Zmc2V0IG9mZnNldDsKLQotCUdDYW5jZWxsYWJsZSAqY2FuY2Vs
bGFibGU7Ci0JR1NvdXJjZSAqY2FuY2VsX3dhdGNoOwotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJl
YW1DYWxsYmFjayBnb3RfaGVhZGVyc19jYjsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2Fs
bGJhY2sgZ290X2NodW5rX2NiOwotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBm
aW5pc2hlZF9jYjsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sgY2FuY2VsbGVk
X2NiOwotCi0JZ3VjaGFyICpsZWZ0b3Zlcl9idWZmZXI7Ci0JZ3NpemUgbGVmdG92ZXJfYnVmc2l6
ZSwgbGVmdG92ZXJfb2Zmc2V0OwotCi0JZ3VjaGFyICpjYWxsZXJfYnVmZmVyOwotCWdzaXplIGNh
bGxlcl9idWZzaXplLCBjYWxsZXJfbnJlYWQ7Ci0JR0FzeW5jUmVhZHlDYWxsYmFjayBvdXRzdGFu
ZGluZ19jYWxsYmFjazsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKLX0gV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbVByaXZhdGU7Ci0jZGVmaW5lIFdFQktJVF9TT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0dFVF9QUklWQVRFKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvKSwg
V0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbVByaXZhdGUpKQotCi0KLXN0YXRpYyBnc3NpemUgICB3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAotCQkJCQkJICAgIHZv
aWQgICAgICAgICAgICAgICAgICpidWZmZXIsCi0JCQkJCQkgICAgZ3NpemUgY291bnQsCi0JCQkJ
CQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkJICAgIEdFcnJv
ciAgICAgICAgICAgICAgKiplcnJvcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCi0JCQkJ
CQkgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJCSAgICAgR0Vy
cm9yICAgICAgICAgICAgICAqKmVycm9yKTsKLXN0YXRpYyB2b2lkICAgICB3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFt
LAotCQkJCQkJCSAgdm9pZCAgICAgICAgICAgICAgICAgKmJ1ZmZlciwKLQkJCQkJCQkgIGdzaXpl
IGNvdW50LAotCQkJCQkJCSAgaW50IGlvX3ByaW9yaXR5LAotCQkJCQkJCSAgR0NhbmNlbGxhYmxl
ICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkJCSAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxs
YmFjaywKLQkJCQkJCQkgIGdwb2ludGVyIGRhdGEpOwotc3RhdGljIGdzc2l6ZSAgIHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoIChHSW5wdXRTdHJlYW0gICAgICAgICAq
c3RyZWFtLAotCQkJCQkJCSAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCi0JCQkJCQkJ
ICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKLXN0YXRpYyB2b2lkICAgICB3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoR0lucHV0U3RyZWFtICAgICAgICAg
KnN0cmVhbSwKLQkJCQkJCQkgICBpbnQgaW9fcHJpb3JpdHksCi0JCQkJCQkJICAgR0NhbmNlbGxh
YmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkJCSAgIEdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCi0JCQkJCQkJICAgZ3BvaW50ZXIgZGF0YSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChHSW5wdXRTdHJlYW0gICAg
ICAgICAqc3RyZWFtLAotCQkJCQkJCSAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAot
CQkJCQkJCSAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwotCi1zdGF0aWMgZ29mZnNl
dCAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdGVsbCAoR1NlZWthYmxlICAgICAgICAg
ICAgKnNlZWthYmxlKTsKLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2Nhbl9zZWVrIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUpOwotc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWsgKEdTZWVrYWJsZSAg
ICAgICAgICAgICpzZWVrYWJsZSwKLQkJCQkJCSAgICBnb2Zmc2V0IG9mZnNldCwKLQkJCQkJCSAg
ICBHU2Vla1R5cGUgdHlwZSwKLQkJCQkJCSAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2Vs
bGFibGUsCi0JCQkJCQkgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKLQotc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0ZSAoR1Nl
ZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlKTsKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZSAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWth
YmxlLAotCQkJCQkJCWdvZmZzZXQgb2Zmc2V0LAotCQkJCQkJCUdDYW5jZWxsYWJsZSAgICAgICAg
ICpjYW5jZWxsYWJsZSwKLQkJCQkJCQlHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyAoU291
cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKTsKLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZl
ciAqY2h1bmssIGdwb2ludGVyIHN0cmVhbSk7Ci1zdGF0aWMgdm9pZCB3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9maW5pc2hlZCAoU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFt
KTsKLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmFsaXpl
IChHT2JqZWN0ICpvYmplY3QpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFt
ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKG9iamVjdCk7Ci0JV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVB
TV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQotCWdfb2JqZWN0X3VucmVmIChwcml2LT5zZXNzaW9u
KTsKLQotCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAocHJpdi0+bXNnLCBH
X0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyksIHN0
cmVhbSk7Ci0JZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChwcml2LT5tc2cs
IEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayksIHN0
cmVhbSk7Ci0JZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChwcml2LT5tc2cs
IEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkKSwgc3Ry
ZWFtKTsKLQlnX29iamVjdF91bnJlZiAocHJpdi0+bXNnKTsKLQlnX2ZyZWUgKHByaXYtPmxlZnRv
dmVyX2J1ZmZlcik7Ci0KLQlpZiAoR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKQotCQkoKkdfT0JKRUNUX0NMQVNTICh3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkob2Jq
ZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Ns
YXNzX2luaXQgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcyAqa2xhc3MpCi17Ci0JR09i
amVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLQlHSW5w
dXRTdHJlYW1DbGFzcyAqc3RyZWFtX2NsYXNzID0gR19JTlBVVF9TVFJFQU1fQ0xBU1MgKGtsYXNz
KTsKLQotCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUpKTsKLQotCWdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0g
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluYWxpemU7Ci0KLQlzdHJlYW1fY2xhc3Mt
PnJlYWRfZm4gPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkOwotCXN0cmVhbV9j
bGFzcy0+Y2xvc2VfZm4gPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZTsKLQlz
dHJlYW1fY2xhc3MtPnJlYWRfYXN5bmMgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9y
ZWFkX2FzeW5jOwotCXN0cmVhbV9jbGFzcy0+cmVhZF9maW5pc2ggPSB3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaDsKLQlzdHJlYW1fY2xhc3MtPmNsb3NlX2FzeW5jID0g
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmM7Ci0Jc3RyZWFtX2NsYXNz
LT5jbG9zZV9maW5pc2ggPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9maW5p
c2g7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVr
YWJsZV9pZmFjZV9pbml0IChHU2Vla2FibGVJZmFjZSAqc2Vla2FibGVfaWZhY2UpCi17Ci0Jc2Vl
a2FibGVfaWZhY2UtPnRlbGwgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90ZWxsOwot
CXNlZWthYmxlX2lmYWNlLT5jYW5fc2VlayA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X2Nhbl9zZWVrOwotCXNlZWthYmxlX2lmYWNlLT5zZWVrID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fc2VlazsKLQlzZWVrYWJsZV9pZmFjZS0+Y2FuX3RydW5jYXRlID0gd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlOwotCXNlZWthYmxlX2lmYWNlLT50cnVu
Y2F0ZV9mbiA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlOwotfQotCi1z
dGF0aWMgdm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1faW5pdCAoV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtKQotewotCTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21lc3NhZ2UgKFdlYktpdFNvdXBIVFRQSW5w
dXRTdHJlYW0gKnN0cmVhbSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAq
cHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0p
OwotCi0JcHJpdi0+Z290X2hlYWRlcnMgPSBwcml2LT5maW5pc2hlZCA9IEZBTFNFOwotCi0JLyog
QWRkIGFuIGV4dHJhIHJlZiBzaW5jZSBzb3VwX3Nlc3Npb25fcXVldWVfbWVzc2FnZSBzdGVhbHMg
b25lICovCi0JZ19vYmplY3RfcmVmIChwcml2LT5tc2cpOwotCXNvdXBfc2Vzc2lvbl9xdWV1ZV9t
ZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2csIE5VTEwsIE5VTEwpOwotfQotCi0vKioK
LSAqIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldzoKLSAqIEBzZXNzaW9uOiB0aGUg
I1NvdXBTZXNzaW9uIHRvIHVzZQotICogQG1zZzogdGhlICNTb3VwTWVzc2FnZSB3aG9zZSByZXNw
b25zZSB3aWxsIGJlIHN0cmVhbWVkCi0gKgotICogUHJlcGFyZXMgdG8gc2VuZCBAbXNnIG92ZXIg
QHNlc3Npb24sIGFuZCByZXR1cm5zIGEgI0dJbnB1dFN0cmVhbQotICogdGhhdCBjYW4gYmUgdXNl
ZCB0byByZWFkIHRoZSByZXNwb25zZS4KLSAqCi0gKiBAbXNnIG1heSBub3QgYmUgc2VudCB1bnRp
bCB0aGUgZmlyc3QgcmVhZCBjYWxsOyBpZiB5b3UgbmVlZCB0byBsb29rCi0gKiBhdCB0aGUgc3Rh
dHVzIGNvZGUgb3IgcmVzcG9uc2UgaGVhZGVycyBiZWZvcmUgcmVhZGluZyB0aGUgYm9keSwgeW91
Ci0gKiBjYW4gdXNlIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQoKSBvciB3ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jKCkKLSAqIHRvIGZvcmNlIHRoZSBt
ZXNzYWdlIHRvIGJlIHNlbnQgYW5kIHRoZSByZXNwb25zZSBoZWFkZXJzIHJlYWQuCi0gKgotICog
SWYgQG1zZyBnZXRzIGEgbm9uLTJ4eCByZXN1bHQsIHRoZSBmaXJzdCByZWFkIChvciBzZW5kKSB3
aWxsIHJldHVybgotICogYW4gZXJyb3Igd2l0aCB0eXBlICVXRUJLSVRfU09VUF9IVFRQX0lOUFVU
X1NUUkVBTV9IVFRQX0VSUk9SLgotICoKLSAqIEludGVybmFsbHksICNXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtIGlzIGltcGxlbWVudGVkIHVzaW5nIGFzeW5jaHJvbm91cyBJL08sCi0gKiBzbyBp
ZiB5b3UgYXJlIHVzaW5nIHRoZSBzeW5jaHJvbm91cyBBUEkgKGVnLAotICogZ19pbnB1dF9zdHJl
YW1fcmVhZCgpKSwgeW91IHNob3VsZCBjcmVhdGUgYSBuZXcgI0dNYWluQ29udGV4dCBhbmQKLSAq
IHNldCBpdCBhcyB0aGUgJVNPVVBfU0VTU0lPTl9BU1lOQ19DT05URVhUIHByb3BlcnR5IG9uIEBz
ZXNzaW9uLiAoSWYKLSAqIHlvdSBkb24ndCwgdGhlbiBzeW5jaHJvbm91cyAjR0lucHV0U3RyZWFt
IGNhbGxzIHdpbGwgY2F1c2UgdGhlIG1haW4KLSAqIGxvb3AgdG8gYmUgcnVuIHJlY3Vyc2l2ZWx5
LikgVGhlIGFzeW5jICNHSW5wdXRTdHJlYW0gQVBJIHdvcmtzIGZpbmUKLSAqIHdpdGggJVNPVVBf
U0VTU0lPTl9BU1lOQ19DT05URVhUIGVpdGhlciBzZXQgb3IgdW5zZXQuCi0gKgotICogUmV0dXJu
czogYSBuZXcgI0dJbnB1dFN0cmVhbS4KLSAqKi8KLVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0g
Kgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChTb3VwU2Vzc2lvbiAqc2Vzc2lv
biwgU291cE1lc3NhZ2UgKm1zZykKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpzdHJl
YW07Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXY7Ci0KLQlnX3JldHVy
bl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChtc2cpLCBOVUxMKTsKLQotCXN0cmVhbSA9
IGdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSwgTlVMTCk7
Ci0JcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJl
YW0pOwotCi0JcHJpdi0+c2Vzc2lvbiA9IGdfb2JqZWN0X3JlZiAoc2Vzc2lvbik7Ci0JcHJpdi0+
YXN5bmNfY29udGV4dCA9IHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dCAoc2Vzc2lvbik7
Ci0JcHJpdi0+bXNnID0gZ19vYmplY3RfcmVmIChtc2cpOwotCi0JZ19zaWduYWxfY29ubmVjdCAo
bXNnLCAiZ290X2hlYWRlcnMiLAotCQkJICBHX0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9nb3RfaGVhZGVycyksIHN0cmVhbSk7Ci0JZ19zaWduYWxfY29ubmVjdCAobXNn
LCAiZ290X2NodW5rIiwKLQkJCSAgR19DQUxMQkFDSyAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fZ290X2NodW5rKSwgc3RyZWFtKTsKLQlnX3NpZ25hbF9jb25uZWN0IChtc2csICJmaW5p
c2hlZCIsCi0JCQkgIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Zp
bmlzaGVkKSwgc3RyZWFtKTsKLQotCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVl
X21lc3NhZ2UgKHN0cmVhbSk7Ci0JcmV0dXJuIHN0cmVhbTsKLX0KLQotc3RhdGljIHZvaWQKLXdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzIChTb3VwTWVzc2FnZSAqbXNn
LCBncG9pbnRlciBzdHJlYW0pCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUg
KnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFt
KTsKLQotCS8qIElmIHRoZSBzdGF0dXMgaXMgdW5zdWNjZXNzZnVsLCB3ZSBqdXN0IGlnbm9yZSB0
aGUgc2lnbmFsIGFuZCBsZXQKLQkgKiBsaWJzb3VwIGtlZXAgZ29pbmcgKGV2ZW50dWFsbHkgZWl0
aGVyIGl0IHdpbGwgcmVxdWV1ZSB0aGUgcmVxdWVzdAotCSAqIChhZnRlciBoYW5kbGluZyBhdXRo
ZW50aWNhdGlvbi9yZWRpcmVjdGlvbiksIG9yIGVsc2UgdGhlCi0JICogImZpbmlzaGVkIiBoYW5k
bGVyIHdpbGwgcnVuKS4KLQkgKi8KLQlpZiAoIVNPVVBfU1RBVFVTX0lTX1NVQ0NFU1NGVUwgKG1z
Zy0+c3RhdHVzX2NvZGUpKQotCQlyZXR1cm47Ci0KLQlwcml2LT5nb3RfaGVhZGVycyA9IFRSVUU7
Ci0JaWYgKCFwcml2LT5jYWxsZXJfYnVmZmVyKSB7Ci0JCS8qIE5vdCByZWFkeSB0byByZWFkIHRo
ZSBib2R5IHlldCAqLwotCQlzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lv
biwgbXNnKTsKLQl9Ci0KLQlpZiAocHJpdi0+Z290X2hlYWRlcnNfY2IpCi0JCXByaXYtPmdvdF9o
ZWFkZXJzX2NiIChzdHJlYW0pOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fZ290X2NodW5rIChTb3VwTWVzc2FnZSAqbXNnLCBTb3VwQnVmZmVyICpjaHVu
a19idWZmZXIsCi0JCQkJCSBncG9pbnRlciBzdHJlYW0pCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRf
UFJJVkFURSAoc3RyZWFtKTsKLQljb25zdCBnY2hhciAqY2h1bmsgPSBjaHVua19idWZmZXItPmRh
dGE7Ci0JZ3NpemUgY2h1bmtfc2l6ZSA9IGNodW5rX2J1ZmZlci0+bGVuZ3RoOwotCi0JLyogV2Ug
b25seSBwYXkgYXR0ZW50aW9uIHRvIHRoZSBjaHVuayBpZiBpdCdzIHBhcnQgb2YgYSBzdWNjZXNz
ZnVsCi0JICogcmVzcG9uc2UuCi0JICovCi0JaWYgKCFTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVM
IChtc2ctPnN0YXR1c19jb2RlKSkKLQkJcmV0dXJuOwotCi0JLyogU2FuaXR5IGNoZWNrICovCi0J
aWYgKHByaXYtPmNhbGxlcl9idWZzaXplID09IDAgfHwgcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSAh
PSAwKQotCQlnX3dhcm5pbmcgKCJ3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1
bmsgY2FsbGVkIGFnYWluIGJlZm9yZSBwcmV2aW91cyBjaHVuayB3YXMgcHJvY2Vzc2VkIik7Ci0K
LQkvKiBDb3B5IHdoYXQgd2UgY2FuIGludG8gcHJpdi0+Y2FsbGVyX2J1ZmZlciAqLwotCWlmIChw
cml2LT5jYWxsZXJfYnVmc2l6ZSAtIHByaXYtPmNhbGxlcl9ucmVhZCA+IDApIHsKLQkJZ3NpemUg
bnJlYWQgPSBNSU4gKGNodW5rX3NpemUsIHByaXYtPmNhbGxlcl9idWZzaXplIC0gcHJpdi0+Y2Fs
bGVyX25yZWFkKTsKLQotCQltZW1jcHkgKHByaXYtPmNhbGxlcl9idWZmZXIgKyBwcml2LT5jYWxs
ZXJfbnJlYWQsIGNodW5rLCBucmVhZCk7Ci0JCXByaXYtPmNhbGxlcl9ucmVhZCArPSBucmVhZDsK
LQkJcHJpdi0+b2Zmc2V0ICs9IG5yZWFkOwotCQljaHVuayArPSBucmVhZDsKLQkJY2h1bmtfc2l6
ZSAtPSBucmVhZDsKLQl9Ci0KLQlpZiAoY2h1bmtfc2l6ZSA+IDApIHsKLQkJLyogQ29weSB0aGUg
cmVzdCBpbnRvIHByaXYtPmxlZnRvdmVyX2J1ZmZlci4gSWYKLQkJICogdGhlcmUncyBhbHJlYWR5
IHNvbWUgZGF0YSB0aGVyZSwgcmVhbGxvYyBhbmQKLQkJICogYXBwZW5kLiBPdGhlcndpc2UganVz
dCBjb3B5LgotCQkgKi8KLQkJaWYgKHByaXYtPmxlZnRvdmVyX2J1ZnNpemUpIHsKLQkJCXByaXYt
PmxlZnRvdmVyX2J1ZmZlciA9IGdfcmVhbGxvYyAocHJpdi0+bGVmdG92ZXJfYnVmZmVyLAotCQkJ
CQkJCSAgIHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgKyBjaHVua19zaXplKTsKLQkJCW1lbWNweSAo
cHJpdi0+bGVmdG92ZXJfYnVmZmVyICsgcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSwKLQkJCQljaHVu
aywgY2h1bmtfc2l6ZSk7Ci0JCQlwcml2LT5sZWZ0b3Zlcl9idWZzaXplICs9IGNodW5rX3NpemU7
Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT5sZWZ0b3Zlcl9idWZzaXplID0gY2h1bmtfc2l6ZTsKLQkJ
CXByaXYtPmxlZnRvdmVyX2J1ZmZlciA9IGdfbWVtZHVwIChjaHVuaywgY2h1bmtfc2l6ZSk7Ci0J
CQlwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPSAwOwotCQl9Ci0JfQotCi0Jc291cF9zZXNzaW9uX3Bh
dXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIG1zZyk7Ci0JaWYgKHByaXYtPmdvdF9jaHVua19j
YikKLQkJcHJpdi0+Z290X2NodW5rX2NiIChzdHJlYW0pOwotfQotCi1zdGF0aWMgdm9pZAotd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQgKFNvdXBNZXNzYWdlICptc2csIGdw
b2ludGVyIHN0cmVhbSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJp
diA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwot
Ci0JcHJpdi0+ZmluaXNoZWQgPSBUUlVFOwotCi0JaWYgKHByaXYtPmZpbmlzaGVkX2NiKQotCQlw
cml2LT5maW5pc2hlZF9jYiAoc3RyZWFtKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi13ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5jZWxsZWQgKEdJT0NoYW5uZWwgKmNoYW4sIEdJT0Nv
bmRpdGlvbiBjb25kaXRpb24sCi0JCQkJCSBncG9pbnRlciBzdHJlYW0pCi17Ci0JV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NU
UkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQotCXByaXYtPmNhbmNlbF93YXRjaCA9IE5VTEw7
Ci0KLQlzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNn
KTsKLQlpZiAocHJpdi0+Y2FuY2VsbGVkX2NiKQotCQlwcml2LT5jYW5jZWxsZWRfY2IgKHN0cmVh
bSk7Ci0KLQlyZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoR0lucHV0U3RyZWFtICpzdHJlYW0sCi0JCQkJ
CSAgICAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsCi0JCQkJCSAgICAgIGd1Y2hhciAgICAg
ICAqYnVmZmVyLAotCQkJCQkgICAgICBnc2l6ZSBjb3VudCkKLXsKLQlXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dF
VF9QUklWQVRFIChzdHJlYW0pOwotCWludCBjYW5jZWxfZmQ7Ci0KLQlwcml2LT5jYW5jZWxsYWJs
ZSA9IGNhbmNlbGxhYmxlOwotCWNhbmNlbF9mZCA9IGdfY2FuY2VsbGFibGVfZ2V0X2ZkIChjYW5j
ZWxsYWJsZSk7Ci0JaWYgKGNhbmNlbF9mZCAhPSAtMSkgewotCQlHSU9DaGFubmVsICpjaGFuID0g
Z19pb19jaGFubmVsX3VuaXhfbmV3IChjYW5jZWxfZmQpOwotCQlwcml2LT5jYW5jZWxfd2F0Y2gg
PSBzb3VwX2FkZF9pb193YXRjaCAocHJpdi0+YXN5bmNfY29udGV4dCwgY2hhbiwKLQkJCQkJCQlH
X0lPX0lOIHwgR19JT19FUlIgfCBHX0lPX0hVUCwKLQkJCQkJCQl3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9jYW5jZWxsZWQsCi0JCQkJCQkJc3RyZWFtKTsKLQkJZ19pb19jaGFubmVsX3Vu
cmVmIChjaGFuKTsKLQl9Ci0KLQlwcml2LT5jYWxsZXJfYnVmZmVyID0gYnVmZmVyOwotCXByaXYt
PmNhbGxlcl9idWZzaXplID0gY291bnQ7Ci0JcHJpdi0+Y2FsbGVyX25yZWFkID0gMDsKLQotCWlm
IChwcml2LT5nb3RfaGVhZGVycykKLQkJc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZSAocHJp
di0+c2Vzc2lvbiwgcHJpdi0+bXNnKTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKEdJbnB1dFN0cmVhbSAqc3RyZWFtKQotewotCVdlYktp
dFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBV
VF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0KLQlpZiAocHJpdi0+Y2FuY2VsX3dhdGNo
KSB7Ci0JCWdfc291cmNlX2Rlc3Ryb3kgKHByaXYtPmNhbmNlbF93YXRjaCk7Ci0JCXByaXYtPmNh
bmNlbF93YXRjaCA9IE5VTEw7Ci0JCWdfY2FuY2VsbGFibGVfcmVsZWFzZV9mZCAocHJpdi0+Y2Fu
Y2VsbGFibGUpOwotCX0KLQlwcml2LT5jYW5jZWxsYWJsZSA9IE5VTEw7Ci0KLQlwcml2LT5jYWxs
ZXJfYnVmZmVyID0gTlVMTDsKLQlwcml2LT5jYWxsZXJfYnVmc2l6ZSA9IDA7Ci19Ci0KLXN0YXRp
YyBnYm9vbGVhbgotc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChTb3VwTWVzc2FnZSAqbXNnLCBH
RXJyb3IgKiplcnJvcikKLXsKLQlpZiAoIVNPVVBfU1RBVFVTX0lTX1NVQ0NFU1NGVUwgKG1zZy0+
c3RhdHVzX2NvZGUpKSB7Ci0JCWdfc2V0X2Vycm9yX2xpdGVyYWwgKGVycm9yLCBTT1VQX0hUVFBf
RVJST1IsCi0JCQkJICAgICBtc2ctPnN0YXR1c19jb2RlLCBtc2ctPnJlYXNvbl9waHJhc2UpOwot
CQlyZXR1cm4gVFJVRTsKLQl9Ci0JcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ3NpemUKLXJl
YWRfZnJvbV9sZWZ0b3ZlciAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYs
Ci0JCSAgICBncG9pbnRlciBidWZmZXIsIGdzaXplIGJ1ZnNpemUpCi17Ci0JZ3NpemUgbnJlYWQ7
Ci0KLQlpZiAocHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSAtIHByaXYtPmxlZnRvdmVyX29mZnNldCA8
PSBidWZzaXplKSB7Ci0JCW5yZWFkID0gcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSAtIHByaXYtPmxl
ZnRvdmVyX29mZnNldDsKLQkJbWVtY3B5IChidWZmZXIsIHByaXYtPmxlZnRvdmVyX2J1ZmZlciAr
IHByaXYtPmxlZnRvdmVyX29mZnNldCwgbnJlYWQpOwotCi0JCWdfZnJlZSAocHJpdi0+bGVmdG92
ZXJfYnVmZmVyKTsKLQkJcHJpdi0+bGVmdG92ZXJfYnVmZmVyID0gTlVMTDsKLQkJcHJpdi0+bGVm
dG92ZXJfYnVmc2l6ZSA9IHByaXYtPmxlZnRvdmVyX29mZnNldCA9IDA7Ci0JfSBlbHNlIHsKLQkJ
bnJlYWQgPSBidWZzaXplOwotCQltZW1jcHkgKGJ1ZmZlciwgcHJpdi0+bGVmdG92ZXJfYnVmZmVy
ICsgcHJpdi0+bGVmdG92ZXJfb2Zmc2V0LCBucmVhZCk7Ci0JCXByaXYtPmxlZnRvdmVyX29mZnNl
dCArPSBucmVhZDsKLQl9Ci0KLQlwcml2LT5vZmZzZXQgKz0gbnJlYWQ7Ci0JcmV0dXJuIG5yZWFk
OwotfQotCi0vKiBUaGlzIGRvZXMgdGhlIHdvcmsgb2Ygd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fc2VuZCgpLCBhc3N1bWluZyB0aGF0IHRoZQotICogR0lucHV0U3RyZWFtIHBlbmRpbmcg
ZmxhZyBoYXMgYWxyZWFkeSBiZWVuIHNldC4gSXQgaXMgYWxzbyB1c2VkIGJ5Ci0gKiB3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jKCkgaW4gc29tZSBjaXJjdW1zdGFuY2Vz
LgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Nl
bmRfaW50ZXJuYWwgKEdJbnB1dFN0cmVhbSAgKnN0cmVhbSwKLQkJCQkJICAgICBHQ2FuY2VsbGFi
bGUgICpjYW5jZWxsYWJsZSwKLQkJCQkJICAgICBHRXJyb3IgICAgICAgKiplcnJvcikKLXsKLQlX
ZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCi0Jd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKHN0cmVhbSwgY2FuY2VsbGFibGUsIE5VTEwsIDAp
OwotCXdoaWxlICghcHJpdi0+ZmluaXNoZWQgJiYgIXByaXYtPmdvdF9oZWFkZXJzICYmCi0JICAg
ICAgICFnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoY2FuY2VsbGFibGUpKQotCQlnX21haW5f
Y29udGV4dF9pdGVyYXRpb24gKHByaXYtPmFzeW5jX2NvbnRleHQsIFRSVUUpOwotCXdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7Ci0KLQlpZiAoZ19jYW5jZWxs
YWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChjYW5jZWxsYWJsZSwgZXJyb3IpKQotCQlyZXR1
cm4gRkFMU0U7Ci0JZWxzZSBpZiAoc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2cs
IGVycm9yKSkKLQkJcmV0dXJuIEZBTFNFOwotCXJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9p
ZAotc2VuZF9zeW5jX2ZpbmlzaGVkIChHSW5wdXRTdHJlYW0gKnN0cmVhbSkKLXsKLQlXZWJLaXRT
b3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCUdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0J
aWYgKCFnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKHByaXYtPmNhbmNlbGxh
YmxlLCAmZXJyb3IpKQotCQlzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywgJmVy
cm9yKTsKLQotCXByaXYtPmdvdF9oZWFkZXJzX2NiID0gTlVMTDsKLQlwcml2LT5maW5pc2hlZF9j
YiA9IE5VTEw7Ci0KLQkvKiBXYWtlIHVwIHRoZSBtYWluIGNvbnRleHQgaXRlcmF0aW9uICovCi0J
Z19zb3VyY2VfYXR0YWNoIChnX2lkbGVfc291cmNlX25ldyAoKSwgTlVMTCk7Ci19Ci0KLS8qKgot
ICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZDoKLSAqIEBodHRwc3RyZWFtOiBh
ICNXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtCi0gKiBAY2FuY2VsbGFibGU6IG9wdGlvbmFsICNH
Q2FuY2VsbGFibGUgb2JqZWN0LCAlTlVMTCB0byBpZ25vcmUuCi0gKiBAZXJyb3I6IGxvY2F0aW9u
IHRvIHN0b3JlIHRoZSBlcnJvciBvY2N1cmluZywgb3IgJU5VTEwgdG8gaWdub3JlCi0gKgotICog
U3luY2hyb25vdXNseSBzZW5kcyB0aGUgSFRUUCByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBAc3Ry
ZWFtLCBhbmQKLSAqIHJlYWRzIHRoZSByZXNwb25zZSBoZWFkZXJzLiBDYWxsIHRoaXMgYWZ0ZXIg
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3KCkKLSAqIGFuZCBiZWZvcmUgdGhlIGZp
cnN0IGdfaW5wdXRfc3RyZWFtX3JlYWQoKSBpZiB5b3Ugd2FudCB0byBjaGVjayB0aGUKLSAqIEhU
VFAgc3RhdHVzIGNvZGUgYmVmb3JlIHlvdSBzdGFydCByZWFkaW5nLgotICoKLSAqIFJldHVybiB2
YWx1ZTogJVRSVUUgaWYgbXNnIGhhcyBhIHN1Y2Nlc3NmdWwgKDJ4eCkgc3RhdHVzLCAlRkFMU0Ug
aWYKLSAqIG5vdC4KLSAqKi8KLWdib29sZWFuCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICAqaHR0cHN0cmVhbSwKLQkJCQkgICAg
R0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCSAgICBHRXJyb3IgICAgICAg
ICAgICAgICoqZXJyb3IpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnBy
aXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoaHR0cHN0cmVh
bSk7Ci0JR0lucHV0U3RyZWFtICppc3RyZWFtID0gKEdJbnB1dFN0cmVhbSAqKWh0dHBzdHJlYW07
Ci0JZ2Jvb2xlYW4gcmVzdWx0OwotCi0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdFQktJVF9JU19T
T1VQX0hUVFBfSU5QVVRfU1RSRUFNIChodHRwc3RyZWFtKSwgRkFMU0UpOwotCi0JaWYgKCFnX2lu
cHV0X3N0cmVhbV9zZXRfcGVuZGluZyAoaXN0cmVhbSwgZXJyb3IpKQotCQlyZXR1cm4gRkFMU0U7
Ci0KLQlwcml2LT5nb3RfaGVhZGVyc19jYiA9IHNlbmRfc3luY19maW5pc2hlZDsKLQlwcml2LT5m
aW5pc2hlZF9jYiA9IHNlbmRfc3luY19maW5pc2hlZDsKLQotCXJlc3VsdCA9IHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfaW50ZXJuYWwgKGlzdHJlYW0sIGNhbmNlbGxhYmxlLCBl
cnJvcik7Ci0JZ19pbnB1dF9zdHJlYW1fY2xlYXJfcGVuZGluZyAoaXN0cmVhbSk7Ci0KLQlyZXR1
cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ3NzaXplCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0gKnN0cmVhbSwKLQkJCQkgICAgdm9pZCAgICAgICAgICpi
dWZmZXIsCi0JCQkJICAgIGdzaXplIGNvdW50LAotCQkJCSAgICBHQ2FuY2VsbGFibGUgKmNhbmNl
bGxhYmxlLAotCQkJCSAgICBHRXJyb3IgICAgICAqKmVycm9yKQotewotCVdlYktpdFNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1f
R0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0KLQlpZiAocHJpdi0+ZmluaXNoZWQpCi0JCXJldHVybiAw
OwotCi0JLyogSWYgdGhlcmUgaXMgZGF0YSBsZWZ0b3ZlciBmcm9tIGEgcHJldmlvdXMgcmVhZCwg
cmV0dXJuIGl0LiAqLwotCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplKQotCQlyZXR1cm4gcmVh
ZF9mcm9tX2xlZnRvdmVyIChwcml2LCBidWZmZXIsIGNvdW50KTsKLQotCS8qIE5vIGxlZnRvdmVy
IGRhdGEsIGFjY2VwdCBvbmUgY2h1bmsgZnJvbSB0aGUgbmV0d29yayAqLwotCXdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBi
dWZmZXIsIGNvdW50KTsKLQl3aGlsZSAoIXByaXYtPmZpbmlzaGVkICYmIHByaXYtPmNhbGxlcl9u
cmVhZCA9PSAwICYmCi0JICAgICAgICFnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoY2FuY2Vs
bGFibGUpKQotCQlnX21haW5fY29udGV4dF9pdGVyYXRpb24gKHByaXYtPmFzeW5jX2NvbnRleHQs
IFRSVUUpOwotCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7
Ci0KLQlpZiAocHJpdi0+Y2FsbGVyX25yZWFkID4gMCkKLQkJcmV0dXJuIHByaXYtPmNhbGxlcl9u
cmVhZDsKLQotCWlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKGNhbmNl
bGxhYmxlLCBlcnJvcikpCi0JCXJldHVybiAtMTsKLQllbHNlIGlmIChzZXRfZXJyb3JfaWZfaHR0
cF9mYWlsZWQgKHByaXYtPm1zZywgZXJyb3IpKQotCQlyZXR1cm4gLTE7Ci0JZWxzZQotCQlyZXR1
cm4gMDsKLX0KLQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9jbG9zZSAoR0lucHV0U3RyZWFtICpzdHJlYW0sCi0JCQkJICAgICBHQ2FuY2VsbGFibGUgKmNh
bmNlbGxhYmxlLAotCQkJCSAgICAgR0Vycm9yICAgICAgKiplcnJvcikKLXsKLQlXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RS
RUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCi0JaWYgKCFwcml2LT5maW5pc2hlZCkKLQkJc291
cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2csIFNPVVBf
U1RBVFVTX0NBTkNFTExFRCk7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLXdy
YXBwZXJfY2FsbGJhY2sgKEdPYmplY3QgKnNvdXJjZV9vYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVz
LAotCQkgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9IEdf
SU5QVVRfU1RSRUFNIChzb3VyY2Vfb2JqZWN0KTsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFt
UHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRF
IChzdHJlYW0pOwotCi0JZ19pbnB1dF9zdHJlYW1fY2xlYXJfcGVuZGluZyAoc3RyZWFtKTsKLQlp
ZiAocHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2spCi0JCSgqcHJpdi0+b3V0c3RhbmRpbmdfY2Fs
bGJhY2spKHNvdXJjZV9vYmplY3QsIHJlcywgdXNlcl9kYXRhKTsKLQlwcml2LT5vdXRzdGFuZGlu
Z19jYWxsYmFjayA9IE5VTEw7Ci0JZ19vYmplY3RfdW5yZWYgKHN0cmVhbSk7Ci19Ci0KLXN0YXRp
YyB2b2lkCi1zZW5kX2FzeW5jX3RocmVhZCAoR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXMsCi0JCSAg
IEdPYmplY3QgKm9iamVjdCwKLQkJICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSkKLXsKLQlH
RXJyb3IgKmVycm9yID0gTlVMTDsKLQlnYm9vbGVhbiBzdWNjZXNzOwotCi0Jc3VjY2VzcyA9IHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfaW50ZXJuYWwgKEdfSU5QVVRfU1RSRUFN
IChvYmplY3QpLAotCQkJCQkJCWNhbmNlbGxhYmxlLCAmZXJyb3IpOwotCWdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuIChyZXMsIHN1Y2Nlc3MpOwotCWlmIChlcnJvcikg
ewotCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlcywgZXJyb3IpOwot
CQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCAoR0lucHV0U3RyZWFtICAg
ICAgICAqc3RyZWFtLAotCQkJCQkJICAgIGludCBpb19wcmlvcml0eSwKLQkJCQkJCSAgICBHQ2Fu
Y2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJCSAgICBHQXN5bmNSZWFkeUNhbGxi
YWNrIGNhbGxiYWNrLAotCQkJCQkJICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHU2ltcGxl
QXN5bmNSZXN1bHQgKnJlczsKLQotCXJlcyA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdf
T0JKRUNUIChzdHJlYW0pLCBjYWxsYmFjaywgdXNlcl9kYXRhLAotCQkJCQkgd2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQpOwotCWdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9ydW5faW5fdGhyZWFkIChyZXMsIHNlbmRfYXN5bmNfdGhyZWFkLAotCQkJCQkgICAg
IGlvX3ByaW9yaXR5LCBjYW5jZWxsYWJsZSk7Ci0JZ19vYmplY3RfdW5yZWYgKHJlcyk7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1zZW5kX2FzeW5jX2ZpbmlzaGVkIChHSW5wdXRTdHJlYW0gKnN0cmVhbSkK
LXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQ
X0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCUdTaW1wbGVBc3luY1Jl
c3VsdCAqcmVzdWx0OwotCUdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0JaWYgKCFnX2NhbmNlbGxh
YmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKHByaXYtPmNhbmNlbGxhYmxlLCAmZXJyb3IpKQot
CQlzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywgJmVycm9yKTsKLQotCXByaXYt
PmdvdF9oZWFkZXJzX2NiID0gTlVMTDsKLQlwcml2LT5maW5pc2hlZF9jYiA9IE5VTEw7Ci0Jd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoc3RyZWFtKTsKLQotCXJlc3VsdCA9
IHByaXYtPnJlc3VsdDsKLQlwcml2LT5yZXN1bHQgPSBOVUxMOwotCi0JZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X3NldF9vcF9yZXNfZ2Jvb2xlYW4gKHJlc3VsdCwgZXJyb3IgPT0gTlVMTCk7Ci0JaWYg
KGVycm9yKSB7Ci0JCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVzdWx0
LCBlcnJvcik7Ci0JCWdfZXJyb3JfZnJlZSAoZXJyb3IpOwotCX0KLQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfY29tcGxldGUgKHJlc3VsdCk7Ci0JZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7Ci19Ci0K
LXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2lu
dGVybmFsIChHSW5wdXRTdHJlYW0gICAgICAgICpzdHJlYW0sCi0JCQkJCQkgICBpbnQgaW9fcHJp
b3JpdHksCi0JCQkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJ
CSAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkJCQkgICBncG9pbnRlciB1c2Vy
X2RhdGEpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJL
SVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQotCWdfb2Jq
ZWN0X3JlZiAoc3RyZWFtKTsKLQlwcml2LT5vdXRzdGFuZGluZ19jYWxsYmFjayA9IGNhbGxiYWNr
OwotCi0JLyogSWYgdGhlIHNlc3Npb24gdXNlcyB0aGUgZGVmYXVsdCBHTWFpbkNvbnRleHQsIHRo
ZW4gd2UgY2FuIGRvCi0JICogYXN5bmMgSS9PIGRpcmVjdGx5LiBCdXQgaWYgaXQgaGFzIGl0cyBv
d24gbWFpbiBjb250ZXh0LCBpdCdzCi0JICogZWFzaWVyIHRvIGp1c3QgcnVuIGl0IGluIGFub3Ro
ZXIgdGhyZWFkLgotCSAqLwotCWlmIChzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHBy
aXYtPnNlc3Npb24pKSB7Ci0JCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5
bmNfaW5fdGhyZWFkIChzdHJlYW0sIGlvX3ByaW9yaXR5LCBjYW5jZWxsYWJsZSwKLQkJCQkJCQkg
ICAgIHdyYXBwZXJfY2FsbGJhY2ssIHVzZXJfZGF0YSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcml2
LT5nb3RfaGVhZGVyc19jYiA9IHNlbmRfYXN5bmNfZmluaXNoZWQ7Ci0JcHJpdi0+ZmluaXNoZWRf
Y2IgPSBzZW5kX2FzeW5jX2ZpbmlzaGVkOwotCi0Jd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fcHJlcGFyZV9mb3JfaW8gKHN0cmVhbSwgY2FuY2VsbGFibGUsIE5VTEwsIDApOwotCXByaXYt
PnJlc3VsdCA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLAot
CQkJCQkJICB3cmFwcGVyX2NhbGxiYWNrLCB1c2VyX2RhdGEsCi0JCQkJCQkgIHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMpOwotfQotCi0vKioKLSAqIHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmM6Ci0gKiBAaHR0cHN0cmVhbTogYSAjV2ViS2l0
U291cEhUVFBJbnB1dFN0cmVhbQotICogQGlvX3ByaW9yaXR5OiB0aGUgaW8gcHJpb3JpdHkgb2Yg
dGhlIHJlcXVlc3QuCi0gKiBAY2FuY2VsbGFibGU6IG9wdGlvbmFsICNHQ2FuY2VsbGFibGUgb2Jq
ZWN0LCAlTlVMTCB0byBpZ25vcmUuCi0gKiBAY2FsbGJhY2s6IGNhbGxiYWNrIHRvIGNhbGwgd2hl
biB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKLSAqIEB1c2VyX2RhdGE6IHRoZSBkYXRhIHRvIHBh
c3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KLSAqCi0gKiBBc3luY2hyb25vdXNseSBzZW5kcyB0aGUg
SFRUUCByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBAc3RyZWFtLCBhbmQKLSAqIHJlYWRzIHRoZSBy
ZXNwb25zZSBoZWFkZXJzLiBDYWxsIHRoaXMgYWZ0ZXIgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fbmV3KCkKLSAqIGFuZCBiZWZvcmUgdGhlIGZpcnN0IGdfaW5wdXRfc3RyZWFtX3JlYWRf
YXN5bmMoKSBpZiB5b3Ugd2FudCB0bwotICogY2hlY2sgdGhlIEhUVFAgc3RhdHVzIGNvZGUgYmVm
b3JlIHlvdSBzdGFydCByZWFkaW5nLgotICoqLwotdm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fc2VuZF9hc3luYyAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVh
bSwKLQkJCQkJICBpbnQgaW9fcHJpb3JpdHksCi0JCQkJCSAgR0NhbmNlbGxhYmxlICAgICAgICAq
Y2FuY2VsbGFibGUsCi0JCQkJCSAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJ
ICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JR0lucHV0U3RyZWFtICppc3RyZWFtID0gKEdJbnB1
dFN0cmVhbSAqKWh0dHBzdHJlYW07Ci0JR0Vycm9yICplcnJvciA9IE5VTEw7Ci0KLQlnX3JldHVy
bl9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAoaHR0cHN0cmVhbSkp
OwotCi0JaWYgKCFnX2lucHV0X3N0cmVhbV9zZXRfcGVuZGluZyAoaXN0cmVhbSwgJmVycm9yKSkg
ewotCQlnX3NpbXBsZV9hc3luY19yZXBvcnRfZ2Vycm9yX2luX2lkbGUgKEdfT0JKRUNUIChodHRw
c3RyZWFtKSwKLQkJCQkJCSAgICAgIGNhbGxiYWNrLAotCQkJCQkJICAgICAgdXNlcl9kYXRhLAot
CQkJCQkJICAgICAgZXJyb3IpOwotCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLQkJcmV0dXJuOwot
CX0KLQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2ludGVybmFsIChp
c3RyZWFtLCBpb19wcmlvcml0eSwgY2FuY2VsbGFibGUsCi0JCQkJCQkgICAgY2FsbGJhY2ssIHVz
ZXJfZGF0YSk7Ci19Ci0KLS8qKgotICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vu
ZF9maW5pc2g6Ci0gKiBAaHR0cHN0cmVhbTogYSAjV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbQot
ICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0LgotICogQGVycm9yOiBhICNHRXJyb3IgbG9jYXRp
b24gdG8gc3RvcmUgdGhlIGVycm9yIG9jY3VyaW5nLCBvciAlTlVMTCB0bwotICogaWdub3JlLgot
ICoKLSAqIEZpbmlzaGVzIGEgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3lu
YygpIG9wZXJhdGlvbi4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIHRoZSBtZXNzYWdl
IHdhcyBzZW50IHN1Y2Nlc3NmdWxseSBhbmQKLSAqIHJlY2VpdmVkIGEgc3VjY2Vzc2Z1bCBzdGF0
dXMgY29kZSwgJUZBTFNFIGlmIG5vdC4KLSAqKi8KLWdib29sZWFuCi13ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaCAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAgKmh0
dHBzdHJlYW0sCi0JCQkJCSAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCi0JCQkJCSAg
IEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKLXsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnNp
bXBsZTsKLQotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1NJTVBMRV9BU1lOQ19SRVNVTFQg
KHJlc3VsdCksIEZBTFNFKTsKLQlzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3Vs
dCk7Ci0KLQlnX3JldHVybl92YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9z
b3VyY2VfdGFnIChzaW1wbGUpID09IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRf
YXN5bmMsIEZBTFNFKTsKLQotCWlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vy
cm9yIChzaW1wbGUsIGVycm9yKSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JcmV0dXJuIGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dib29sZWFuIChzaW1wbGUpOwotfQotCi1zdGF0aWMg
dm9pZAotcmVhZF9hc3luY19kb25lIChHSW5wdXRTdHJlYW0gKnN0cmVhbSkKLXsKLQlXZWJLaXRT
b3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0
OwotCUdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0JcmVzdWx0ID0gcHJpdi0+cmVzdWx0OwotCXBy
aXYtPnJlc3VsdCA9IE5VTEw7Ci0KLQlpZiAoZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2Fu
Y2VsbGVkIChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSB8fAotCSAgICBzZXRfZXJyb3JfaWZf
aHR0cF9mYWlsZWQgKHByaXYtPm1zZywgJmVycm9yKSkgewotCQlnX3NpbXBsZV9hc3luY19yZXN1
bHRfc2V0X2Zyb21fZXJyb3IgKHJlc3VsdCwgZXJyb3IpOwotCQlnX2Vycm9yX2ZyZWUgKGVycm9y
KTsKLQl9IGVsc2UKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplIChy
ZXN1bHQsIHByaXYtPmNhbGxlcl9ucmVhZCk7Ci0KLQlwcml2LT5nb3RfY2h1bmtfY2IgPSBOVUxM
OwotCXByaXYtPmZpbmlzaGVkX2NiID0gTlVMTDsKLQlwcml2LT5jYW5jZWxsZWRfY2IgPSBOVUxM
OwotCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7Ci0KLQln
X3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHJlc3VsdCk7Ci0JZ19vYmplY3RfdW5yZWYg
KHJlc3VsdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9yZWFkX2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgICpzdHJlYW0sCi0JCQkJCSAgdm9pZCAg
ICAgICAgICAgICAgICAqYnVmZmVyLAotCQkJCQkgIGdzaXplIGNvdW50LAotCQkJCQkgIGludCBp
b19wcmlvcml0eSwKLQkJCQkJICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJ
CQkJICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAotCQkJCQkgIGdwb2ludGVyIHVzZXJf
ZGF0YSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJ
VF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCUdTaW1wbGVB
c3luY1Jlc3VsdCAqcmVzdWx0OwotCi0JLyogSWYgdGhlIHNlc3Npb24gdXNlcyB0aGUgZGVmYXVs
dCBHTWFpbkNvbnRleHQsIHRoZW4gd2UgY2FuIGRvCi0JICogYXN5bmMgSS9PIGRpcmVjdGx5LiBC
dXQgaWYgaXQgaGFzIGl0cyBvd24gbWFpbiBjb250ZXh0LCB3ZSBmYWxsCi0JICogYmFjayB0byB0
aGUgYXN5bmMtdmlhLXN5bmMtaW4tYW5vdGhlci10aHJlYWQgaW1wbGVtZW50YXRpb24uCi0JICov
Ci0JaWYgKHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dCAocHJpdi0+c2Vzc2lvbikpIHsK
LQkJR19JTlBVVF9TVFJFQU1fQ0xBU1MgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Bh
cmVudF9jbGFzcyktPgotCQlyZWFkX2FzeW5jIChzdHJlYW0sIGJ1ZmZlciwgY291bnQsIGlvX3By
aW9yaXR5LAotCQkJICAgIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlcl9kYXRhKTsKLQkJcmV0
dXJuOwotCX0KLQotCXJlc3VsdCA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNU
IChzdHJlYW0pLAotCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSwKLQkJCQkJICAgIHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMpOwotCi0JaWYgKHByaXYtPmZpbmlz
aGVkKSB7Ci0JCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0
LCAwKTsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7
Ci0JCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHByaXYt
PmxlZnRvdmVyX2J1ZnNpemUpIHsKLQkJZ3NpemUgbnJlYWQgPSByZWFkX2Zyb21fbGVmdG92ZXIg
KHByaXYsIGJ1ZmZlciwgY291bnQpOwotCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jl
c19nc3NpemUgKHJlc3VsdCwgbnJlYWQpOwotCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxl
dGVfaW5faWRsZSAocmVzdWx0KTsKLQkJZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7Ci0JCXJldHVy
bjsKLQl9Ci0KLQlwcml2LT5yZXN1bHQgPSByZXN1bHQ7Ci0KLQlwcml2LT5nb3RfY2h1bmtfY2Ig
PSByZWFkX2FzeW5jX2RvbmU7Ci0JcHJpdi0+ZmluaXNoZWRfY2IgPSByZWFkX2FzeW5jX2RvbmU7
Ci0JcHJpdi0+Y2FuY2VsbGVkX2NiID0gcmVhZF9hc3luY19kb25lOwotCXdlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBidWZm
ZXIsIGNvdW50KTsKLX0KLQotc3RhdGljIGdzc2l6ZQotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fcmVhZF9maW5pc2ggKEdJbnB1dFN0cmVhbSAgKnN0cmVhbSwKLQkJCQkJICAgR0FzeW5j
UmVzdWx0ICAqcmVzdWx0LAotCQkJCQkgICBHRXJyb3IgICAgICAgKiplcnJvcikKLXsKLQlHU2lt
cGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKLQotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1NJ
TVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCksIC0xKTsKLQlzaW1wbGUgPSBHX1NJTVBMRV9BU1lO
Q19SRVNVTFQgKHJlc3VsdCk7Ci0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9nZXRfc291cmNlX3RhZyAoc2ltcGxlKSA9PSB3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9yZWFkX2FzeW5jLCAtMSk7Ci0KLQlyZXR1cm4gZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X2dldF9vcF9yZXNfZ3NzaXplIChzaW1wbGUpOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKEdJbnB1dFN0cmVhbSAgICAgICAqc3Ry
ZWFtLAotCQkJCQkgICBpbnQgaW9fcHJpb3JpdHksCi0JCQkJCSAgIEdDYW5jZWxsYWJsZSAgICAg
ICAqY2FuY2VsbGFibGUsCi0JCQkJCSAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0J
CQkJCSAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3Vs
dDsKLQlnYm9vbGVhbiBzdWNjZXNzOwotCUdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0JcmVzdWx0
ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHN0cmVhbSksCi0JCQkJCSAg
ICBjYWxsYmFjaywgdXNlcl9kYXRhLAotCQkJCQkgICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fY2xvc2VfYXN5bmMpOwotCXN1Y2Nlc3MgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9jbG9zZSAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgJmVycm9yKTsKLQlnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVhbiAocmVzdWx0LCBzdWNjZXNzKTsKLQlpZiAoZXJy
b3IpIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXN1bHQsIGVy
cm9yKTsKLQkJZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0JfQotCi0JZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7Ci0JZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xv
c2VfZmluaXNoIChHSW5wdXRTdHJlYW0gICpzdHJlYW0sCi0JCQkJCSAgICBHQXN5bmNSZXN1bHQg
ICpyZXN1bHQsCi0JCQkJCSAgICBHRXJyb3IgICAgICAgKiplcnJvcikKLXsKLQkvKiBGYWlsdXJl
cyBoYW5kbGVkIGluIGdlbmVyaWMgY2xvc2VfZmluaXNoIGNvZGUgKi8KLQlyZXR1cm4gVFJVRTsK
LX0KLQotc3RhdGljIGdvZmZzZXQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RlbGwg
KEdTZWVrYWJsZSAqc2Vla2FibGUpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZh
dGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc2Vl
a2FibGUpOwotCi0JcmV0dXJuIHByaXYtPm9mZnNldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi13
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fc2VlayAoR1NlZWthYmxlICpzZWVrYWJs
ZSkKLXsKLQlyZXR1cm4gVFJVRTsKLX0KLQotZXh0ZXJuIHZvaWQgc291cF9tZXNzYWdlX2lvX2Ns
ZWFudXAgKFNvdXBNZXNzYWdlICptc2cpOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlZWsgKEdTZWVrYWJsZSAgICAgKnNlZWthYmxlLAotCQkJCSAg
ICBnb2Zmc2V0IG9mZnNldCwKLQkJCQkgICAgR1NlZWtUeXBlIHR5cGUsCi0JCQkJICAgIEdDYW5j
ZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAotCQkJCSAgICBHRXJyb3IgICAgICAgKiplcnJvcikKLXsK
LQlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNIChzZWVrYWJsZSk7Ci0JV2Vi
S2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc2Vla2FibGUpOwotCWNoYXIgKnJhbmdlOwotCi0JaWYg
KHR5cGUgPT0gR19TRUVLX0VORCkgewotCQkvKiBGSVhNRTogd2UgY291bGQgc2VuZCAiYnl0ZXM9
LW9mZnNldCIsIGJ1dCB1bmxlc3Mgd2UKLQkJICoga25vdyB0aGUgQ29udGVudC1MZW5ndGgsIHdl
IHdvdWxkbid0IGJlIGFibGUgdG8KLQkJICogYW5zd2VyIGEgdGVsbCgpIHByb3Blcmx5LiBXZSBj
b3VsZCBmaW5kIHRoZQotCQkgKiBDb250ZW50LUxlbmd0aCBieSBkb2luZyBhIEhFQUQuLi4KLQkJ
ICovCi0KLQkJZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJS
T1JfTk9UX1NVUFBPUlRFRCwKLQkJCQkgICAgICJHX1NFRUtfRU5EIG5vdCBjdXJyZW50bHkgc3Vw
cG9ydGVkIik7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0KLQlpZiAoIWdfaW5wdXRfc3RyZWFtX3Nl
dF9wZW5kaW5nIChzdHJlYW0sIGVycm9yKSkKLQkJcmV0dXJuIEZBTFNFOwotCi0Jc291cF9zZXNz
aW9uX2NhbmNlbF9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2csIFNPVVBfU1RBVFVT
X0NBTkNFTExFRCk7Ci0Jc291cF9tZXNzYWdlX2lvX2NsZWFudXAgKHByaXYtPm1zZyk7Ci0KLQlz
d2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBHX1NFRUtfQ1VSOgotCQkJb2Zmc2V0ICs9IHByaXYtPm9m
ZnNldDsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0KLQkJY2FzZSBHX1NFRUtfU0VUOgotCQkJcmFu
Z2UgPSBnX3N0cmR1cF9wcmludGYgKCJieXRlcz0lIiBHX0dVSU5UNjRfRk9STUFUICItIiwgKGd1
aW50NjQpb2Zmc2V0KTsKLQkJCXByaXYtPm9mZnNldCA9IG9mZnNldDsKLQkJCWJyZWFrOwotCi0J
CWNhc2UgR19TRUVLX0VORDoKLQkJCXJhbmdlID0gTlVMTDsgLyoga2VlcCBjb21waWxlcnMgaGFw
cHkgKi8KLQkJCWdfcmV0dXJuX3ZhbF9pZl9yZWFjaGVkIChGQUxTRSk7Ci0JCQlicmVhazsKLQot
CQlkZWZhdWx0OgotCQkJZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQgKEZBTFNFKTsKLQl9Ci0KLQlz
b3VwX21lc3NhZ2VfaGVhZGVyc19yZW1vdmUgKHByaXYtPm1zZy0+cmVxdWVzdF9oZWFkZXJzLCAi
UmFuZ2UiKTsKLQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKHByaXYtPm1zZy0+cmVxdWVz
dF9oZWFkZXJzLCAiUmFuZ2UiLCByYW5nZSk7Ci0JZ19mcmVlIChyYW5nZSk7Ci0KLQl3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlIChXRUJLSVRfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTSAoc3RyZWFtKSk7Ci0KLQlnX2lucHV0X3N0cmVhbV9jbGVhcl9wZW5kaW5nIChz
dHJlYW0pOwotCXJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0ZSAoR1NlZWthYmxlICpzZWVrYWJsZSkKLXsK
LQlyZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fdHJ1bmNhdGUgKEdTZWVrYWJsZSAgICAgKnNlZWthYmxlLAotCQkJCQlnb2Zm
c2V0IG9mZnNldCwKLQkJCQkJR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCi0JCQkJCUdFcnJv
ciAgICAgICAqKmVycm9yKQotewotCWdfc2V0X2Vycm9yX2xpdGVyYWwgKGVycm9yLCBHX0lPX0VS
Uk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JURUQsCi0JCQkgICAgICJUcnVuY2F0ZSBub3QgYWxs
b3dlZCBvbiBpbnB1dCBzdHJlYW0iKTsKLQlyZXR1cm4gRkFMU0U7Ci19Ci0KLVNvdXBNZXNzYWdl
ICoKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF9tZXNzYWdlIChXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtKQotewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJl
YW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZB
VEUgKGh0dHBzdHJlYW0pOwotCXJldHVybiBwcml2LT5tc2cgPyBnX29iamVjdF9yZWYgKHByaXYt
Pm1zZykgOiBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2Yjk4NTU5Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaAorKysgL2Rldi9udWxsCkBA
IC0xLDc3ICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJz
LW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOSBSZWQgSGF0LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCi0gKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fV0VCS0lUX1NPVVBfSFRU
UF9JTlBVVF9TVFJFQU1fSF9fCi0jZGVmaW5lIF9fV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJF
QU1fSF9fCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLXR5
cGVzLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNICAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF90
eXBlICgpKQotI2RlZmluZSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTShvKSAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgobyksIFdFQktJVF9UWVBFX1NPVVBfSFRU
UF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0pKQotI2RlZmluZSBXRUJL
SVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9DTEFTUyhrKSAgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUICgoayksIFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0sIFdlYktpdFNv
dXBIVFRQSW5wdXRTdHJlYW1DbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX0hUVFBfSU5Q
VVRfU1RSRUFNKG8pICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvKSwgV0VC
S0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSkpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQ
X0hUVFBfSU5QVVRfU1RSRUFNX0NMQVNTKGspICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChr
KSwgV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSkpCi0jZGVmaW5lIFdFQktJVF9T
T1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9DTEFTUyhvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUyAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW07Ci10eXBlZGVmIHN0cnVjdCBXZWJL
aXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNsYXNz
OwotCi1zdHJ1Y3QgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSB7Ci0JR0lucHV0U3RyZWFtIHBh
cmVudDsKLX07Ci0KLXN0cnVjdCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MgewotCUdJ
bnB1dFN0cmVhbUNsYXNzIHBhcmVudF9jbGFzczsKLQotCS8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBl
eHBhbnNpb24gKi8KLQl2b2lkICgqX2dfcmVzZXJ2ZWQxKSh2b2lkKTsKLQl2b2lkICgqX2dfcmVz
ZXJ2ZWQyKSh2b2lkKTsKLQl2b2lkICgqX2dfcmVzZXJ2ZWQzKSh2b2lkKTsKLQl2b2lkICgqX2df
cmVzZXJ2ZWQ0KSh2b2lkKTsKLQl2b2lkICgqX2dfcmVzZXJ2ZWQ1KSh2b2lkKTsKLX07Ci0KLUdU
eXBlIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF90eXBlICh2b2lkKSBHX0dOVUNf
Q09OU1Q7Ci0KLVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKndlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX25ldyAoU291cFNlc3Npb24gICAgICAgICAqc2Vzc2lvbiwKLQkJCQkJCQkgICAg
ICBTb3VwTWVzc2FnZSAgICAgICAgICptc2cpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICB3ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFt
ICpodHRwc3RyZWFtLAotCQkJCQkJCSBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwK
LQkJCQkJCQkgR0Vycm9yICAgICAgICAgICAgICoqZXJyb3IpOwotCi12b2lkICAgICAgICAgICAg
ICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtLAotCQkJCQkJCSAgICAgICBpbnQgaW9fcHJpb3Jp
dHksCi0JCQkJCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJ
CQkJCSAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAotCQkJCQkJCSAgICAgICBn
cG9pbnRlciB1c2VyX2RhdGEpOwotZ2Jvb2xlYW4gICAgICAgICAgICAgd2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2ggKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0
dHBzdHJlYW0sCi0JCQkJCQkJCUdBc3luY1Jlc3VsdCAgICAgICAgKnJlc3VsdCwKLQkJCQkJCQkJ
R0Vycm9yICAgICAgICAgICAgICoqZXJyb3IpOwotCi1Tb3VwTWVzc2FnZSAgICAgICAgICp3ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfbWVzc2FnZSAoV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbSAqaHR0cHN0cmVhbSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX1dFQktJ
VF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuYyBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNlZDVjNGEuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuYworKysgL2Rldi9udWxsCkBA
IC0xLDE3MCArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFi
cy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBzb3VwLXJlcXVlc3Qt
ZGF0YS5jOiBkYXRhOiBVUkkgcmVxdWVzdCBvYmplY3QKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZk
ZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0jaW5jbHVkZSAi
c291cC1yZXF1ZXN0LWRhdGEuaCIKLQotI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCi0jaW5j
bHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgotCi1HX0RFRklO
RV9UWVBFIChXZWJLaXRTb3VwUmVxdWVzdERhdGEsIHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YSwg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUKQotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0RGF0
YVByaXZhdGUgewotCWdzaXplIGNvbnRlbnRfbGVuZ3RoOwotCWNoYXIgKmNvbnRlbnRfdHlwZTsK
LX07Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfaW5pdCAoV2ViS2l0
U291cFJlcXVlc3REYXRhICpkYXRhKQotewotCWRhdGEtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUgKGRhdGEsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBLCBXZWJLaXRT
b3VwUmVxdWVzdERhdGFQcml2YXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3Jl
cXVlc3RfZGF0YV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQotewotCVdlYktpdFNvdXBSZXF1
ZXN0RGF0YSAqZGF0YSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQSAob2JqZWN0KTsKLQotCWdf
ZnJlZSAoZGF0YS0+cHJpdi0+Y29udGVudF90eXBlKTsKLQotCUdfT0JKRUNUX0NMQVNTICh3ZWJr
aXRfc291cF9yZXF1ZXN0X2RhdGFfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19
Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2NoZWNrX3VyaSAo
V2ViS2l0U291cFJlcXVlc3QgICpyZXF1ZXN0LAotCQkJCSAgICBTb3VwVVJJICAgICAgKnVyaSwK
LQkJCQkgICAgR0Vycm9yICAgICAgKiplcnJvcikKLXsKLQlyZXR1cm4gdXJpLT5ob3N0ID09IE5V
TEw7Ci19Ci0KLXN0YXRpYyBHSW5wdXRTdHJlYW0gKgotd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRh
X3NlbmQgKFdlYktpdFNvdXBSZXF1ZXN0ICAgKnJlcXVlc3QsCi0JCQkgICAgICAgR0NhbmNlbGxh
YmxlICAqY2FuY2VsbGFibGUsCi0JCQkgICAgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0J
V2ViS2l0U291cFJlcXVlc3REYXRhICpkYXRhID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBIChy
ZXF1ZXN0KTsKLQlTb3VwVVJJICp1cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkgKHJl
cXVlc3QpOwotCUdJbnB1dFN0cmVhbSAqbWVtc3RyZWFtOwotCWNvbnN0IGNoYXIgKmNvbW1hLCAq
c2VtaSwgKnN0YXJ0LCAqZW5kOwotCWdib29sZWFuIGJhc2U2NCA9IEZBTFNFOwotCi0JZ2NoYXIg
KnVyaXN0ciA9IHNvdXBfdXJpX3RvX3N0cmluZyAodXJpLCBGQUxTRSk7Ci0JY29tbWEgPSBzdHJj
aHIgKHVyaXN0ciwgJywnKTsKLQlpZiAoY29tbWEgJiYgY29tbWEgIT0gdXJpc3RyKSB7Ci0JCS8q
IERlYWwgd2l0aCBNSU1FIHR5cGUgLyBwYXJhbXMgKi8KLQkJc2VtaSA9IG1lbWNociAodXJpc3Ry
LCAnOycsIGNvbW1hIC0gdXJpc3RyKTsKLQkJZW5kID0gc2VtaSA/IHNlbWkgOiBjb21tYTsKLQot
CQlpZiAoc2VtaSAmJiAhZ19hc2NpaV9zdHJuY2FzZWNtcCAoc2VtaSwgIjtiYXNlNjQiLCBNQVgg
KChzaXplX3QpIChjb21tYSAtIHNlbWkpLCBzdHJsZW4gKCI7YmFzZTY0IikpKSkKLQkJCWJhc2U2
NCA9IFRSVUU7Ci0KLQkJaWYgKGVuZCAhPSB1cmlzdHIpCi0JCQlpZiAoYmFzZTY0KQotCQkJCWRh
dGEtPnByaXYtPmNvbnRlbnRfdHlwZSA9IGdfc3RybmR1cCAodXJpc3RyLCBlbmQgLSB1cmlzdHIp
OwotCQkJZWxzZQotCQkJCWRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZSA9Ci0JCQkJCXdlYmtpdF9z
b3VwX3JlcXVlc3RfdXJpX2RlY29kZWRfY29weSAodXJpc3RyLCBlbmQgLSB1cmlzdHIpOwotCX0K
LQotCW1lbXN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXcgKCk7Ci0KLQlzdGFydCA9
IGNvbW1hID8gY29tbWEgKyAxIDogdXJpc3RyOwotCi0JaWYgKCpzdGFydCkgewotCQlndWNoYXIg
KmJ1ZjsKLQotCQlpZiAoYmFzZTY0KSB7Ci0JCQlpbnQgaW5sZW4sIHN0YXRlID0gMDsKLQkJCWd1
aW50IHNhdmUgPSAwOwotCi0JCQlpbmxlbiA9IHN0cmxlbiAoc3RhcnQpOwotCQkJYnVmID0gZ19t
YWxsb2MwIChpbmxlbiAqIDMgLyA0ICsgMyk7Ci0JCQlkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0
aCA9Ci0JCQkJZ19iYXNlNjRfZGVjb2RlX3N0ZXAgKHN0YXJ0LCBpbmxlbiwgYnVmLAotCQkJCQkJ
ICAgICAgJnN0YXRlLCAmc2F2ZSk7Ci0JCQlpZiAoc3RhdGUgIT0gMCkgewotCQkJCWdfZnJlZSAo
YnVmKTsKLQkJCQlnb3RvIGZhaWw7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBDYW5ub3QgdXNl
IGdfdXJpX3VuZXNjYXBlX3N0cmluZyBub3IKLQkJCSAgIHNvdXBfdXJpX2RlY29kZSBiZWNhdXNl
IHdlIGRvbid0IHdhbnQgdG8KLQkJCSAgIGZhaWwgZm9yIHRoaW5ncyBsaWtlICIlM0UlJTNDIiAt
PiAiPiU8IiAqLwotCQkJYnVmID0gKGd1Y2hhciAqKXdlYmtpdF9zb3VwX3JlcXVlc3RfdXJpX2Rl
Y29kZWRfY29weSAoc3RhcnQsIHN0cmxlbiAoc3RhcnQpKTsKLQkJCWlmICghYnVmKQotCQkJCWdv
dG8gZmFpbDsKLQkJCWRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoID0gc3RybGVuICgoY2hhciAq
KWJ1Zik7Ci0JCX0KLQotCQlnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEgKEdfTUVNT1JZ
X0lOUFVUX1NUUkVBTSAobWVtc3RyZWFtKSwKLQkJCQkJCWJ1ZiwgZGF0YS0+cHJpdi0+Y29udGVu
dF9sZW5ndGgsCi0JCQkJCQlnX2ZyZWUpOwotCX0KLQlnX2ZyZWUgKHVyaXN0cik7Ci0KLQlyZXR1
cm4gbWVtc3RyZWFtOwotCi0gZmFpbDoKLQlnX2ZyZWUgKHVyaXN0cik7Ci0JZ19zZXRfZXJyb3Ig
KGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfQkFEX1VSSSwKLQkJ
ICAgICBfICgiVW5hYmxlIHRvIGRlY29kZSBVUkk6ICVzIiksIHN0YXJ0KTsKLQlnX29iamVjdF91
bnJlZiAobWVtc3RyZWFtKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdvZmZzZXQKLXdl
YmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF9sZW5ndGggKFdlYktpdFNvdXBSZXF1
ZXN0ICpyZXF1ZXN0KQotewotCVdlYktpdFNvdXBSZXF1ZXN0RGF0YSAqZGF0YSA9IFdFQktJVF9T
T1VQX1JFUVVFU1RfREFUQSAocmVxdWVzdCk7Ci0KLQlyZXR1cm4gZGF0YS0+cHJpdi0+Y29udGVu
dF9sZW5ndGg7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICoKLXdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZGF0YV9nZXRfY29udGVudF90eXBlIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKLXsKLQlX
ZWJLaXRTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEEgKHJl
cXVlc3QpOwotCi0JcmV0dXJuIGRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZTsKLX0KLQotc3RhdGlj
IHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9jbGFzc19pbml0IChXZWJLaXRTb3VwUmVx
dWVzdERhdGFDbGFzcyAqcmVxdWVzdF9kYXRhX2NsYXNzKQotewotCUdPYmplY3RDbGFzcyAqb2Jq
ZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfZGF0YV9jbGFzcyk7Ci0JV2ViS2l0
U291cFJlcXVlc3RDbGFzcyAqcmVxdWVzdF9jbGFzcyA9Ci0JCVdFQktJVF9TT1VQX1JFUVVFU1Rf
Q0xBU1MgKHJlcXVlc3RfZGF0YV9jbGFzcyk7Ci0KLQlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUg
KHJlcXVlc3RfZGF0YV9jbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRl
KSk7Ci0KLQlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRh
X2ZpbmFsaXplOwotCi0JcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gd2Via2l0X3NvdXBfcmVx
dWVzdF9kYXRhX2NoZWNrX3VyaTsKLQlyZXF1ZXN0X2NsYXNzLT5zZW5kID0gd2Via2l0X3NvdXBf
cmVxdWVzdF9kYXRhX3NlbmQ7Ci0JcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfbGVuZ3RoID0g
d2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X2xlbmd0aDsKLQlyZXF1ZXN0X2Ns
YXNzLT5nZXRfY29udGVudF90eXBlID0gd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250
ZW50X3R5cGU7Ci19CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Yzk2MzFhNC4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtZGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyog
LSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1v
ZmZzZXQ6IDggLSotICovCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4K
LSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXRUJLSVRfU09VUF9S
RVFVRVNUX0RBVEFfSAotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEFfSCAxCi0KLSNp
bmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBICAgICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZGF0YV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBKG9iamVj
dCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmplY3QpLCBXRUJLSVRf
VFlQRV9TT1VQX1JFUVVFU1RfREFUQSwgV2ViS2l0U291cFJlcXVlc3REYXRhKSkKLSNkZWZpbmUg
V0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBLCBXZWJLaXRT
b3VwUmVxdWVzdERhdGFDbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfREFU
QShvYmplY3QpICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqZWN0KSwgV0VC
S0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEpKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFV
RVNUX0RBVEFfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFV
RVNUX0RBVEFfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2Jq
KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEsIFdlYktpdFNvdXBSZXF1ZXN0RGF0YUNs
YXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUgV2Vi
S2l0U291cFJlcXVlc3REYXRhUHJpdmF0ZTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCVdlYktpdFNv
dXBSZXF1ZXN0IHBhcmVudDsKLQotCVdlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUgKnByaXY7
Ci19IFdlYktpdFNvdXBSZXF1ZXN0RGF0YTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCVdlYktpdFNv
dXBSZXF1ZXN0Q2xhc3MgcGFyZW50OwotfSBXZWJLaXRTb3VwUmVxdWVzdERhdGFDbGFzczsKLQot
R1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRf
REVDTFMKLQotI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQV9IICovCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmls
ZS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZp
bGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRjY2IxMC4uMDAwMDAwMAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5j
CisrKyAvZGV2L251bGwKQEAgLTEsMzMxICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDOyB0YWItd2lk
dGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotLyoK
LSAqIHNvdXAtcmVxdWVzdC1maWxlLmM6IGZpbGU6IFVSSSByZXF1ZXN0IG9iamVjdAotICoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0j
ZW5kaWYKLQotI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1maWxlLmgiCi0jaW5jbHVkZSAic291cC1k
aXJlY3RvcnktaW5wdXQtc3RyZWFtLmgiCi0jaW5jbHVkZSAic291cC1yZXF1ZXN0ZXIuaCIKLSNp
bmNsdWRlIDxnbGliL2dpMThuLmg+Ci0KLUdfREVGSU5FX1RZUEUgKFdlYktpdFNvdXBSZXF1ZXN0
RmlsZSwgd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1Qp
Ci0KLXN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZSB7Ci0JR0ZpbGUgKmdmaWxl
OwotCi0JY2hhciAqbWltZV90eXBlOwotCWdvZmZzZXQgc2l6ZTsKLX07Ci0KLUdGaWxlICoKLXdl
YmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfZmlsZSAoV2ViS2l0U291cFJlcXVlc3RGaWxlICpm
aWxlKQotewotCXJldHVybiBnX29iamVjdF9yZWYgKGZpbGUtPnByaXYtPmdmaWxlKTsKLX0KLQot
c3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9pbml0IChXZWJLaXRTb3VwUmVx
dWVzdEZpbGUgKmZpbGUpCi17Ci0JZmlsZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJ
VkFURSAoZmlsZSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUsIFdlYktpdFNvdXBSZXF1
ZXN0RmlsZVByaXZhdGUpOwotCi0JZmlsZS0+cHJpdi0+c2l6ZSA9IC0xOwotfQotCi1zdGF0aWMg
dm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3Qp
Ci17Ci0JV2ViS2l0U291cFJlcXVlc3RGaWxlICpmaWxlID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9G
SUxFIChvYmplY3QpOwotCi0JaWYgKGZpbGUtPnByaXYtPmdmaWxlKQotCQlnX29iamVjdF91bnJl
ZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpOwotCWdfZnJlZSAoZmlsZS0+cHJpdi0+bWltZV90eXBlKTsK
LQotCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBf
cmVxdWVzdF9maWxlX2NoZWNrX3VyaSAoV2ViS2l0U291cFJlcXVlc3QgICpyZXF1ZXN0LAotCQkJ
CSAgICBTb3VwVVJJICAgICAgKnVyaSwKLQkJCQkgICAgR0Vycm9yICAgICAgKiplcnJvcikKLXsK
LQkvKiAiZmlsZTovZm9vIiBpcyBub3QgdmFsaWQgKi8KLQlpZiAoIXVyaS0+aG9zdCkKLQkJcmV0
dXJuIEZBTFNFOwotCi0JLyogYnV0IGl0IG11c3QgYmUgImZpbGU6Ly8vLi4uIiBvciAiZmlsZTov
L2xvY2FsaG9zdC8uLi4iICovCi0JaWYgKHVyaS0+c2NoZW1lID09IFNPVVBfVVJJX1NDSEVNRV9G
SUxFICYmCi0JICAgICp1cmktPmhvc3QgJiYKLQkgICAgZ19hc2NpaV9zdHJjYXNlY21wICh1cmkt
Pmhvc3QsICJsb2NhbGhvc3QiKSAhPSAwKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlyZXR1cm4gVFJV
RTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9mdHBfbWFpbl9s
b29wX3F1aXQgKEdPYmplY3QgICAgICAqb2JqZWN0LAotCQkJCQkgICAgIEdBc3luY1Jlc3VsdCAq
cmVzdWx0LAotCQkJCQkgICAgIGdwb2ludGVyIGxvb3ApCi17Ci0JZ19tYWluX2xvb3BfcXVpdCAo
bG9vcCk7Ci19Ci0KLS8qIFRoaXMgaXMgYSBzb21ld2hhdCBoYWNreSB3YXkgdG8gZ2V0IEZUUCB0
byBhbG1vc3Qgd29yay4gVGhlIHByb3BlciB3YXkgdG8KLSAqIGdldCBGVFAgdG8gX3JlYWxseV8g
d29yayBpbnZvbHZlcyBoYWNraW5nIEdJTyB0byBoYXZlIEFQSXMgdG8gaGFuZGxlCi0gKiBjYW5v
bmNpYWwgVVJMcy4KLSAqLwotc3RhdGljIEdGaWxlICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmls
ZV9lbnN1cmVfZmlsZV9mdHAgKFNvdXBVUkkgICAgICAgKnVyaSwKLQkJCQkJICBHQ2FuY2VsbGFi
bGUgICpjYW5jZWxsYWJsZSwKLQkJCQkJICBHRXJyb3IgICAgICAgKiplcnJvcikKLXsKLQlTb3Vw
VVJJICpob3N0OwotCWNoYXIgKnM7Ci0JR0ZpbGUgKmZpbGUsICpyZXN1bHQ7Ci0JR01vdW50ICpt
b3VudDsKLQotCWhvc3QgPSBzb3VwX3VyaV9jb3B5X2hvc3QgKHVyaSk7Ci0JcyA9IHNvdXBfdXJp
X3RvX3N0cmluZyAoaG9zdCwgRkFMU0UpOwotCWZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl91cmkgKHMp
OwotCXNvdXBfdXJpX2ZyZWUgKGhvc3QpOwotCWdfZnJlZSAocyk7Ci0KLQltb3VudCA9IGdfZmls
ZV9maW5kX2VuY2xvc2luZ19tb3VudCAoZmlsZSwgY2FuY2VsbGFibGUsIGVycm9yKTsKLQlpZiAo
bW91bnQgPT0gTlVMTCAmJiBnX2ZpbGVfc3VwcG9ydHNfdGhyZWFkX2NvbnRleHRzIChmaWxlKSkg
ewotCQlHTWFpbkNvbnRleHQgKmNvbnRleHQgPSBnX21haW5fY29udGV4dF9uZXcgKCk7Ci0JCUdN
YWluTG9vcCAqbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoY29udGV4dCwgRkFMU0UpOwotCi0JCWdf
Y2xlYXJfZXJyb3IgKGVycm9yKTsKLQkJZ19tYWluX2NvbnRleHRfcHVzaF90aHJlYWRfZGVmYXVs
dCAoY29udGV4dCk7Ci0JCWdfZmlsZV9tb3VudF9lbmNsb3Npbmdfdm9sdW1lIChmaWxlLAotCQkJ
CQkgICAgICAgR19NT1VOVF9NT1VOVF9OT05FLAotCQkJCQkgICAgICAgTlVMTCwgLyogRklYTUUh
ICovCi0JCQkJCSAgICAgICBjYW5jZWxsYWJsZSwKLQkJCQkJICAgICAgIHdlYmtpdF9zb3VwX3Jl
cXVlc3RfZmlsZV9mdHBfbWFpbl9sb29wX3F1aXQsCi0JCQkJCSAgICAgICBsb29wKTsKLQkJZ19t
YWluX2xvb3BfcnVuIChsb29wKTsKLQkJZ19tYWluX2NvbnRleHRfcG9wX3RocmVhZF9kZWZhdWx0
IChjb250ZXh0KTsKLQkJZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotCQlnX21haW5fY29udGV4
dF91bnJlZiAoY29udGV4dCk7Ci0JCW1vdW50ID0gZ19maWxlX2ZpbmRfZW5jbG9zaW5nX21vdW50
IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpOwotCX0KLQlpZiAobW91bnQgPT0gTlVMTCkKLQkJ
cmV0dXJuIE5VTEw7Ci0JZ19vYmplY3RfdW5yZWYgKGZpbGUpOwotCi0JZmlsZSA9IGdfbW91bnRf
Z2V0X2RlZmF1bHRfbG9jYXRpb24gKG1vdW50KTsKLQlnX29iamVjdF91bnJlZiAobW91bnQpOwot
Ci0JcyA9IGdfc3RyZHVwICh1cmktPnBhdGgpOwotCWlmIChzdHJjaHIgKHMsICc7JykpCi0JCSpz
dHJjaHIgKHMsICc7JykgPSAwOwotCi0JcmVzdWx0ID0gZ19maWxlX3Jlc29sdmVfcmVsYXRpdmVf
cGF0aCAoZmlsZSwgcyk7Ci0JZ19mcmVlIChzKTsKLQlnX29iamVjdF91bnJlZiAoZmlsZSk7Ci0K
LQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX3JlcXVl
c3RfZmlsZV9lbnN1cmVfZmlsZSAoV2ViS2l0U291cFJlcXVlc3RGaWxlICAqZmlsZSwKLQkJCQkg
ICAgICBHQ2FuY2VsbGFibGUgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkgICAgICBHRXJyb3IgICAg
ICAgICAgKiplcnJvcikKLXsKLQlTb3VwVVJJICp1cmk7Ci0KLQlpZiAoZmlsZS0+cHJpdi0+Z2Zp
bGUpCi0JCXJldHVybiBUUlVFOwotCi0JdXJpID0gd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdXJp
IChXRUJLSVRfU09VUF9SRVFVRVNUIChmaWxlKSk7Ci0JaWYgKHVyaS0+c2NoZW1lID09IFNPVVBf
VVJJX1NDSEVNRV9GSUxFKSB7Ci0JCS8qIFdlIGNhbm5vdCB1c2Ugc291cF91cmlfZGVjb2RlIGFz
IGl0IGluY29ycmVjdGx5Ci0JCSAqIHJldHVybnMgTlVMTCBmb3IgaW5jb3JyZWN0bHkgZW5jb2Rl
ZCBVUklzICh0aGF0Ci0JCSAqIGNvdWxkIGJlIHZhbGlkIGZpbGVuYW1lcykuIFRoaXMgd2lsbCBi
ZSBob3BlZnVsbHkKLQkJICogc2hpcHBlZCBpbiBsaWJzb3VwIDIuMzIuMSBidXQgd2Ugd2FudCB0
byBsYW5kIHRoaXMKLQkJICogZmlyc3QuIFRPRE86IHJlcGxhY2UgdXJpX2RlY29kZWRfY29weSBi
eQotCQkgKiBzb3VwX3VyaV9kZWNvZGUgd2hlbiB0aGUgcmVxdWlyZWQgbGlic291cCB2ZXJzaW9u
Ci0JCSAqIGlzIGJ1bXBlZCBvdXQgdG8gMi4zMi4xCi0JCSAqLwotCQlnY2hhciAqZGVjb2RlZF91
cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X3VyaV9kZWNvZGVkX2NvcHkgKHVyaS0+cGF0aCwgc3Ry
bGVuICh1cmktPnBhdGgpKTsKLQotCQlpZiAoZGVjb2RlZF91cmkpIHsKLQkJCS8qIERvIG5vdCB1
c2UgbmV3X2Zvcl91cmkoKSBhcyB0aGUgZGVjb2RlZCBVUkkKLQkJCSAqICBjb3VsZCBub3QgYmUg
YSB2YWxpZCBVUkkKLQkJCSAqLwotCQkJZmlsZS0+cHJpdi0+Z2ZpbGUgPSBnX2ZpbGVfbmV3X2Zv
cl9wYXRoIChkZWNvZGVkX3VyaSk7Ci0JCQlnX2ZyZWUgKGRlY29kZWRfdXJpKTsKLQkJfQotCi0J
CXJldHVybiBUUlVFOwotCX0gZWxzZSBpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklfU0NIRU1F
X0ZUUCkgewotCQlmaWxlLT5wcml2LT5nZmlsZSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9l
bnN1cmVfZmlsZV9mdHAgKHVyaSwKLQkJCQkJCQkJCSAgICAgIGNhbmNlbGxhYmxlLAotCQkJCQkJ
CQkJICAgICAgZXJyb3IpOwotCQlyZXR1cm4gZmlsZS0+cHJpdi0+Z2ZpbGUgIT0gTlVMTDsKLQl9
Ci0KLQlnX3NldF9lcnJvciAoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09VUF9F
UlJPUl9VTlNVUFBPUlRFRF9VUklfU0NIRU1FLAotCQkgICAgIF8gKCJVbnN1cHBvcnRlZCBVUkkg
c2NoZW1lICclcyciKSwgdXJpLT5zY2hlbWUpOwotCXJldHVybiBGQUxTRTsKLX0KLQotc3RhdGlj
IEdJbnB1dFN0cmVhbSAqCi13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZCAoV2ViS2l0U291
cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkgICAgICAgR0NhbmNlbGxhYmxlICAgICAg
ICAgKmNhbmNlbGxhYmxlLAotCQkJICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikK
LXsKLQlXZWJLaXRTb3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJ
TEUgKHJlcXVlc3QpOwotCUdJbnB1dFN0cmVhbSAqc3RyZWFtOwotCUdFcnJvciAqbXlfZXJyb3Ig
PSBOVUxMOwotCi0JaWYgKCF3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGUgKGZp
bGUsIGNhbmNlbGxhYmxlLCBlcnJvcikpCi0JCXJldHVybiBOVUxMOwotCi0Jc3RyZWFtID0gR19J
TlBVVF9TVFJFQU0gKGdfZmlsZV9yZWFkIChmaWxlLT5wcml2LT5nZmlsZSwKLQkJCQkJICAgICAg
Y2FuY2VsbGFibGUsICZteV9lcnJvcikpOwotCWlmIChzdHJlYW0gPT0gTlVMTCkgewotCQlpZiAo
Z19lcnJvcl9tYXRjaGVzIChteV9lcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9JU19ESVJF
Q1RPUlkpKSB7Ci0JCQlHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3I7Ci0JCQlnX2NsZWFyX2Vy
cm9yICgmbXlfZXJyb3IpOwotCQkJZW51bWVyYXRvciA9IGdfZmlsZV9lbnVtZXJhdGVfY2hpbGRy
ZW4gKGZpbGUtPnByaXYtPmdmaWxlLAotCQkJCQkJCQkiKiIsCi0JCQkJCQkJCUdfRklMRV9RVUVS
WV9JTkZPX05PTkUsCi0JCQkJCQkJCWNhbmNlbGxhYmxlLAotCQkJCQkJCQllcnJvcik7Ci0JCQlp
ZiAoZW51bWVyYXRvcikgewotCQkJCXN0cmVhbSA9IHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1
dF9zdHJlYW1fbmV3IChlbnVtZXJhdG9yLAotCQkJCQkJCQkJCSB3ZWJraXRfc291cF9yZXF1ZXN0
X2dldF91cmkgKHJlcXVlc3QpKTsKLQkJCQlnX29iamVjdF91bnJlZiAoZW51bWVyYXRvcik7Ci0J
CQkJZmlsZS0+cHJpdi0+bWltZV90eXBlID0gZ19zdHJkdXAgKCJ0ZXh0L2h0bWwiKTsKLQkJCX0K
LQkJfSBlbHNlIHsKLQkJCWdfcHJvcGFnYXRlX2Vycm9yIChlcnJvciwgbXlfZXJyb3IpOwotCQl9
Ci0JfSBlbHNlIHsKLQkJR0ZpbGVJbmZvICppbmZvID0gZ19maWxlX3F1ZXJ5X2luZm8gKGZpbGUt
PnByaXYtPmdmaWxlLAotCQkJCQkJICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX0NPTlRF
TlRfVFlQRSAiLCIKLQkJCQkJCSAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLAot
CQkJCQkJICAgICAwLCBjYW5jZWxsYWJsZSwgTlVMTCk7Ci0JCWlmIChpbmZvKSB7Ci0JCQljb25z
dCBjaGFyICpjb250ZW50X3R5cGU7Ci0JCQlmaWxlLT5wcml2LT5zaXplID0gZ19maWxlX2luZm9f
Z2V0X3NpemUgKGluZm8pOwotCQkJY29udGVudF90eXBlID0gZ19maWxlX2luZm9fZ2V0X2NvbnRl
bnRfdHlwZSAoaW5mbyk7Ci0KLQkJCWlmIChjb250ZW50X3R5cGUpCi0JCQkJZmlsZS0+cHJpdi0+
bWltZV90eXBlID0gZ19jb250ZW50X3R5cGVfZ2V0X21pbWVfdHlwZSAoY29udGVudF90eXBlKTsK
LQkJCWdfb2JqZWN0X3VucmVmIChpbmZvKTsKLQkJfQotCX0KLQotCXJldHVybiBzdHJlYW07Ci19
Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luY190aHJl
YWQgKEdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzLAotCQkJCQkgICAgR09iamVjdCAgICAgICAgICAg
ICpvYmplY3QsCi0JCQkJCSAgICBHQ2FuY2VsbGFibGUgICAgICAgKmNhbmNlbGxhYmxlKQotewot
CUdJbnB1dFN0cmVhbSAqc3RyZWFtOwotCVdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0OwotCUdF
cnJvciAqZXJyb3IgPSBOVUxMOwotCi0JcmVxdWVzdCA9IFdFQktJVF9TT1VQX1JFUVVFU1QgKG9i
amVjdCk7Ci0KLQlzdHJlYW0gPSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZCAocmVxdWVz
dCwgY2FuY2VsbGFibGUsICZlcnJvcik7Ci0KLQlpZiAoc3RyZWFtID09IE5VTEwpIHsKLQkJZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXMsIGVycm9yKTsKLQkJZ19lcnJv
cl9mcmVlIChlcnJvcik7Ci0JfSBlbHNlIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9v
cF9yZXNfZ3BvaW50ZXIgKHJlcywgc3RyZWFtLCBnX29iamVjdF91bnJlZik7Ci0JfQotfQotCi1z
dGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmMgKFdlYktpdFNv
dXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJCSAgICAgR0NhbmNlbGxhYmxlICAgICAg
ICAgKmNhbmNlbGxhYmxlLAotCQkJCSAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywK
LQkJCQkgICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnJl
czsKLQotCXJlcyA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChyZXF1ZXN0
KSwgY2FsbGJhY2ssIHVzZXJfZGF0YSwgd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5
bmMpOwotCi0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3J1bl9pbl90aHJlYWQgKHJlcywgd2Via2l0
X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmNfdGhyZWFkLCBHX1BSSU9SSVRZX0RFRkFVTFQs
IGNhbmNlbGxhYmxlKTsKLQlnX29iamVjdF91bnJlZiAocmVzKTsKLX0KLQotc3RhdGljIEdJbnB1
dFN0cmVhbSAqCi13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9maW5pc2ggKFdlYktpdFNv
dXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJCSAgICAgIEdBc3luY1Jlc3VsdCAgICAg
ICAgICpyZXN1bHQsCi0JCQkJICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQotewot
CUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1
bHQpOwotCi0JZ193YXJuX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNl
X3RhZyAoc2ltcGxlKSA9PSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyk7Ci0K
LQlpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJv
cikpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIGdfb2JqZWN0X3JlZiAoZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSkpOwotfQotCi1zdGF0aWMgZ29m
ZnNldAotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF9jb250ZW50X2xlbmd0aCAoV2ViS2l0
U291cFJlcXVlc3QgKnJlcXVlc3QpCi17Ci0JV2ViS2l0U291cFJlcXVlc3RGaWxlICpmaWxlID0g
V0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFIChyZXF1ZXN0KTsKLQotCXJldHVybiBmaWxlLT5wcml2
LT5zaXplOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi13ZWJraXRfc291cF9yZXF1ZXN0X2Zp
bGVfZ2V0X2NvbnRlbnRfdHlwZSAoV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCi17Ci0JV2Vi
S2l0U291cFJlcXVlc3RGaWxlICpmaWxlID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFIChyZXF1
ZXN0KTsKLQotCWlmICghZmlsZS0+cHJpdi0+bWltZV90eXBlKQotCQlyZXR1cm4gImFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbSI7Ci0KLQlyZXR1cm4gZmlsZS0+cHJpdi0+bWltZV90eXBlOwotfQot
Ci1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2NsYXNzX2luaXQgKFdlYktp
dFNvdXBSZXF1ZXN0RmlsZUNsYXNzICpyZXF1ZXN0X2ZpbGVfY2xhc3MpCi17Ci0JR09iamVjdENs
YXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdF9maWxlX2NsYXNzKTsK
LQlXZWJLaXRTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzID0KLQkJV0VCS0lUX1NPVVBf
UkVRVUVTVF9DTEFTUyAocmVxdWVzdF9maWxlX2NsYXNzKTsKLQotCWdfdHlwZV9jbGFzc19hZGRf
cHJpdmF0ZSAocmVxdWVzdF9maWxlX2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBSZXF1ZXN0Rmls
ZVByaXZhdGUpKTsKLQotCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9yZXF1
ZXN0X2ZpbGVfZmluYWxpemU7Ci0KLQlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSB3ZWJraXRf
c291cF9yZXF1ZXN0X2ZpbGVfY2hlY2tfdXJpOwotCXJlcXVlc3RfY2xhc3MtPnNlbmQgPSB3ZWJr
aXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZDsKLQlyZXF1ZXN0X2NsYXNzLT5zZW5kX2FzeW5jID0g
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmM7Ci0JcmVxdWVzdF9jbGFzcy0+c2Vu
ZF9maW5pc2ggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9maW5pc2g7Ci0JcmVxdWVz
dF9jbGFzcy0+Z2V0X2NvbnRlbnRfbGVuZ3RoID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dl
dF9jb250ZW50X2xlbmd0aDsKLQlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF90eXBlID0gd2Vi
a2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF9jb250ZW50X3R5cGU7Ci19CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU5ZTgyYS4uMDAwMDAwMAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsg
aW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEsIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2lmbmRlZiBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEVfSAotI2RlZmluZSBXRUJL
SVRfU09VUF9SRVFVRVNUX0ZJTEVfSCAxCi0KLSNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKLQot
R19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFICAg
ICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUg
V0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFKG9iamVjdCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QgKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2Vi
S2l0U291cFJlcXVlc3RGaWxlKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9U
WVBFX1NPVVBfUkVRVUVTVF9GSUxFLCBXZWJLaXRTb3VwUmVxdWVzdEZpbGVDbGFzcykpCi0jZGVm
aW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfRklMRShvYmplY3QpICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFICgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUp
KQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0ZJTEVfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJ
TEUpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEVfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNU
X0ZJTEUsIFdlYktpdFNvdXBSZXF1ZXN0RmlsZUNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFNvdXBSZXF1ZXN0RmlsZVByaXZhdGUgV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZTsK
LQotdHlwZWRlZiBzdHJ1Y3QgewotCVdlYktpdFNvdXBSZXF1ZXN0IHBhcmVudDsKLQotCVdlYktp
dFNvdXBSZXF1ZXN0RmlsZVByaXZhdGUgKnByaXY7Ci19IFdlYktpdFNvdXBSZXF1ZXN0RmlsZTsK
LQotdHlwZWRlZiBzdHJ1Y3QgewotCVdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50OwotfSBX
ZWJLaXRTb3VwUmVxdWVzdEZpbGVDbGFzczsKLQotR1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdF9m
aWxlX2dldF90eXBlICh2b2lkKTsKLQotR0ZpbGUgICp3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVf
Z2V0X2ZpbGUgKFdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSk7Ci0KLUdfRU5EX0RFQ0xTCi0K
LSNlbmRpZiAvKiBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYyBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3N2ZkNzIuLjAwMDAwMDAKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYworKysgL2Rl
di9udWxsCkBAIC0xLDM1NiArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBp
bmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBzb3Vw
LXJlcXVlc3QtaHR0cC5jOiBodHRwOiBVUkkgcmVxdWVzdCBvYmplY3QKLSAqCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwg
Uy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0K
LSNpbmNsdWRlIDxnbGliL2dpMThuLmg+Ci0KLSNpbmNsdWRlICJzb3VwLWNhY2hlLmgiCi0jaW5j
bHVkZSAic291cC1jYWNoZS1wcml2YXRlLmgiCi0jaW5jbHVkZSAic291cC1odHRwLWlucHV0LXN0
cmVhbS5oIgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgiCi0KLUdfREVGSU5FX1RZUEUg
KFdlYktpdFNvdXBSZXF1ZXN0SFRUUCwgd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwLCBXRUJLSVRf
VFlQRV9TT1VQX1JFUVVFU1QpCi0KLXN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RIVFRQUHJpdmF0
ZSB7Ci0JU291cE1lc3NhZ2UgKm1zZzsKLX07Ci0KLS8qKgotICogd2Via2l0X3NvdXBfcmVxdWVz
dF9odHRwX2dldF9tZXNzYWdlOgotICogQGh0dHA6IGEgI1dlYktpdFNvdXBSZXF1ZXN0SFRUUCBv
YmplY3QKLSAqCi0gKiBHZXRzIGEgbmV3IHJlZmVyZW5jZSB0byB0aGUgI1NvdXBNZXNzYWdlIGFz
c29jaWF0ZWQgdG8gdGhpcyBTb3VwUmVxdWVzdAotICoKLSAqIFJldHVybnM6IGEgbmV3IHJlZmVy
ZW5jZSB0byB0aGUgI1NvdXBNZXNzYWdlCi0gKiovCi1Tb3VwTWVzc2FnZSAqCi13ZWJraXRfc291
cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UgKFdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCkK
LXsKLQlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9IVFRQICho
dHRwKSwgTlVMTCk7Ci0KLQlyZXR1cm4gZ19vYmplY3RfcmVmIChodHRwLT5wcml2LT5tc2cpOwot
fQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2luaXQgKFdlYktpdFNv
dXBSZXF1ZXN0SFRUUCAqaHR0cCkKLXsKLQlodHRwLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFIChodHRwLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCwgV2ViS2l0U291
cFJlcXVlc3RIVFRQUHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBf
cmVxdWVzdF9odHRwX2NoZWNrX3VyaSAoV2ViS2l0U291cFJlcXVlc3QgICpyZXF1ZXN0LAotCQkJ
CSAgICBTb3VwVVJJICAgICAgKnVyaSwKLQkJCQkgICAgR0Vycm9yICAgICAgKiplcnJvcikKLXsK
LQlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAg
KHJlcXVlc3QpOwotCi0JaWYgKCFTT1VQX1VSSV9WQUxJRF9GT1JfSFRUUCAodXJpKSkKLQkJcmV0
dXJuIEZBTFNFOwotCi0JaHR0cC0+cHJpdi0+bXNnID0gc291cF9tZXNzYWdlX25ld19mcm9tX3Vy
aSAoU09VUF9NRVRIT0RfR0VULCB1cmkpOwotCXJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9p
ZAotd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCi17
Ci0JV2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQ
IChvYmplY3QpOwotCi0JaWYgKGh0dHAtPnByaXYtPm1zZykKLQkJZ19vYmplY3RfdW5yZWYgKGh0
dHAtPnByaXYtPm1zZyk7Ci0KLQlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfcmVxdWVzdF9o
dHRwX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgR0lucHV0
U3RyZWFtICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kIChXZWJLaXRTb3VwUmVxdWVz
dCAgICAgICAgICAqcmVxdWVzdCwKLQkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2Fu
Y2VsbGFibGUsCi0JCQkgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQotewotCVdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07Ci0JV2ViS2l0U291cFJlcXVlc3RI
VFRQICpodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKLQotCWh0dHBz
dHJlYW0gPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHdlYmtpdF9zb3VwX3Jl
cXVlc3RfZ2V0X3Nlc3Npb24gKHJlcXVlc3QpLCBodHRwLT5wcml2LT5tc2cpOwotCWlmICghd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoaHR0cHN0cmVhbSwgY2FuY2VsbGFibGUs
IGVycm9yKSkgewotCQlnX29iamVjdF91bnJlZiAoaHR0cHN0cmVhbSk7Ci0JCXJldHVybiBOVUxM
OwotCX0KLQlyZXR1cm4gKEdJbnB1dFN0cmVhbSAqKWh0dHBzdHJlYW07Ci19Ci0KLQotc3RhdGlj
IHZvaWQKLXNlbnRfYXN5bmMgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQs
IGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRw
c3RyZWFtID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKHNvdXJjZSk7Ci0JR1NpbXBs
ZUFzeW5jUmVzdWx0ICpzaW1wbGUgPSB1c2VyX2RhdGE7Ci0JR0Vycm9yICplcnJvciA9IE5VTEw7
Ci0KLQlpZiAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2ggKGh0dHBz
dHJlYW0sIHJlc3VsdCwgJmVycm9yKSkgewotCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29w
X3Jlc19ncG9pbnRlciAoc2ltcGxlLCBodHRwc3RyZWFtLCBnX29iamVjdF91bnJlZik7Ci0JfSBl
bHNlIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChzaW1wbGUsIGVy
cm9yKTsKLQkJZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0JCWdfb2JqZWN0X3VucmVmIChodHRwc3Ry
ZWFtKTsKLQl9Ci0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOwotCWdf
b2JqZWN0X3VucmVmIChzaW1wbGUpOwotfQotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRT
b3VwUmVxdWVzdEhUVFAgKnJlcTsKLQlTb3VwTWVzc2FnZSAqb3JpZ2luYWw7Ci0JR0NhbmNlbGxh
YmxlICpjYW5jZWxsYWJsZTsKLQlHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrOwotCWdwb2lu
dGVyIHVzZXJfZGF0YTsKLX0gQ29uZGl0aW9uYWxIZWxwZXI7Ci0KLQotc3RhdGljIHZvaWQKLWNv
bmRpdGlvbmFsX2dldF9yZWFkeV9jYiAoU291cFNlc3Npb24gKnNlc3Npb24sIFNvdXBNZXNzYWdl
ICptc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlDb25kaXRpb25hbEhlbHBlciAqaGVscGVy
ID0gKENvbmRpdGlvbmFsSGVscGVyICopdXNlcl9kYXRhOwotCUdTaW1wbGVBc3luY1Jlc3VsdCAq
c2ltcGxlOwotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07Ci0KLQlzaW1w
bGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoaGVscGVyLT5yZXEpLAot
CQkJCQkgICAgaGVscGVyLT5jYWxsYmFjaywgaGVscGVyLT51c2VyX2RhdGEsCi0JCQkJCSAgICBj
b25kaXRpb25hbF9nZXRfcmVhZHlfY2IpOwotCi0JaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09V
UF9TVEFUVVNfTk9UX01PRElGSUVEKSB7Ci0JCVdlYktpdFNvdXBDYWNoZSAqY2FjaGUgPSAoV2Vi
S2l0U291cENhY2hlICopc291cF9zZXNzaW9uX2dldF9mZWF0dXJlIChzZXNzaW9uLCBXRUJLSVRf
VFlQRV9TT1VQX0NBQ0hFKTsKLQotCQlodHRwc3RyZWFtID0gKFdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW0gKil3ZWJraXRfc291cF9jYWNoZV9zZW5kX3Jlc3BvbnNlIChjYWNoZSwgbXNnKTsKLQkJ
aWYgKGh0dHBzdHJlYW0pIHsKLQkJCWNvbnN0IGdjaGFyICpjb250ZW50X3R5cGU7Ci0KLQkJCWdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGh0dHBzdHJl
YW0sIGdfb2JqZWN0X3VucmVmKTsKLQotCQkJc291cF9tZXNzYWdlX2dvdF9oZWFkZXJzIChoZWxw
ZXItPm9yaWdpbmFsKTsKLQotCQkJLyogRklYTUU6IFVuY29tbWVudCB0aGlzIHdoZW4gdGhpcyBi
ZWNvbWVzIHBhcnQgb2YgbGlic291cAotCQkJICogaWYgKCFzb3VwX21lc3NhZ2VfZGlzYWJsZXNf
ZmVhdHVyZShoZWxwZXItPm9yaWdpbmFsLCBTT1VQX1RZUEVfQ09OVEVOVF9TTklGRkVSKSkgewot
CQkJICogCWNvbnN0IGdjaGFyICpjb250ZW50X3R5cGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19n
ZXRfY29udGVudF90eXBlIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwpOwotCQkJICogCXNv
dXBfbWVzc2FnZV9jb250ZW50X3NuaWZmZWQgKGhlbHBlci0+b3JpZ2luYWwsIGNvbnRlbnRfdHlw
ZSwgTlVMTCk7Ci0JCQkgKiB9Ci0JCQkgKi8KLQkJCWNvbnRlbnRfdHlwZSA9IHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgTlVMTCk7
Ci0JCQlzb3VwX21lc3NhZ2VfY29udGVudF9zbmlmZmVkIChoZWxwZXItPm9yaWdpbmFsLCBjb250
ZW50X3R5cGUsIE5VTEwpOwotCi0JCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHNp
bXBsZSk7Ci0KLQkJCXNvdXBfbWVzc2FnZV9maW5pc2hlZCAoaGVscGVyLT5vcmlnaW5hbCk7Ci0K
LQkJCWdfb2JqZWN0X3VucmVmIChzaW1wbGUpOwotCQl9IGVsc2UgewotCQkJLyogQXNrIGFnYWlu
IGZvciB0aGUgcmVzb3VyY2UsIHNvbWVob3cgdGhlIGNhY2hlIGNhbm5vdCBsb2NhdGUgaXQgKi8K
LQkJCWh0dHBzdHJlYW0gPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHNlc3Np
b24sIGhlbHBlci0+b3JpZ2luYWwpOwotCQkJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2VuZF9hc3luYyAoaHR0cHN0cmVhbSwgR19QUklPUklUWV9ERUZBVUxULAotCQkJCQkJCQkgIGhl
bHBlci0+Y2FuY2VsbGFibGUsIHNlbnRfYXN5bmMsIHNpbXBsZSk7Ci0JCX0KLQl9IGVsc2Ugewot
CQkvKiBJdCBpcyBpbiB0aGUgY2FjaGUgYnV0IGl0IHdhcyBtb2RpZmllZCByZW1vdGVseSAqLwot
CQlodHRwc3RyZWFtID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChzZXNzaW9u
LCBoZWxwZXItPm9yaWdpbmFsKTsKLQkJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vu
ZF9hc3luYyAoaHR0cHN0cmVhbSwgR19QUklPUklUWV9ERUZBVUxULAotCQkJCQkJCSAgaGVscGVy
LT5jYW5jZWxsYWJsZSwgc2VudF9hc3luYywgc2ltcGxlKTsKLQl9Ci0KLQlnX29iamVjdF91bnJl
ZiAoaGVscGVyLT5yZXEpOwotCWdfb2JqZWN0X3VucmVmIChoZWxwZXItPm9yaWdpbmFsKTsKLQln
X3NsaWNlX2ZyZWUgKENvbmRpdGlvbmFsSGVscGVyLCBoZWxwZXIpOwotfQotCi10eXBlZGVmIHN0
cnVjdCB7Ci0JV2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwOwotCUdBc3luY1JlYWR5Q2FsbGJh
Y2sgY2FsbGJhY2s7Ci0JZ3BvaW50ZXIgdXNlcl9kYXRhOwotCVdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW0gKmh0dHBzdHJlYW07Ci19IFNlbmRBc3luY0hlbHBlcjsKLQotc3RhdGljIHZvaWQgd2Vi
a2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAg
ICAgICpyZXF1ZXN0LAotCQkJCQkJIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwK
LQkJCQkJCSBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAotCQkJCQkJIGdwb2ludGVyIHVz
ZXJfZGF0YSk7Ci0KLXN0YXRpYyBnYm9vbGVhbgotc2VuZF9hc3luY19jYiAoZ3BvaW50ZXIgZGF0
YSkKLXsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKLQlTZW5kQXN5bmNIZWxwZXIgKmhl
bHBlciA9IChTZW5kQXN5bmNIZWxwZXIgKilkYXRhOwotCWNvbnN0IGdjaGFyICpjb250ZW50X3R5
cGU7Ci0KLQlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoaGVs
cGVyLT5odHRwKSwKLQkJCQkJICAgIGhlbHBlci0+Y2FsbGJhY2ssIGhlbHBlci0+dXNlcl9kYXRh
LAotCQkJCQkgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOwotCWdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGhlbHBlci0+aHR0
cHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOwotCi0JLyogVXBkYXRlIG1lc3NhZ2Ugc3RhdHVzICov
Ci0Jc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnLCBTT1VQ
X1NUQVRVU19PSyk7Ci0KLQkvKiBJc3N1ZSBzaWduYWxzICAqLwotCXNvdXBfbWVzc2FnZV9nb3Rf
aGVhZGVycyAoaGVscGVyLT5odHRwLT5wcml2LT5tc2cpOwotCi0JLyogRklYTUU6IFVuY29tbWVu
dCB0aGlzIHdoZW4gdGhpcyBiZWNvbWVzIHBhcnQgb2YgbGlic291cAotCSAqIGlmICghc291cF9t
ZXNzYWdlX2Rpc2FibGVzX2ZlYXR1cmUoaGVscGVyLT5odHRwLT5wcml2LT5tc2csIFNPVVBfVFlQ
RV9DT05URU5UX1NOSUZGRVIpKSB7Ci0JICoJY29uc3QgZ2NoYXIgKmNvbnRlbnRfdHlwZSA9IHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKGhlbHBlci0+aHR0cC0+cHJpdi0+
bXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKLQkgKglzb3VwX21lc3NhZ2VfY29udGVudF9z
bmlmZmVkIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZywgY29udGVudF90eXBlLCBOVUxMKTsKLQkg
KiB9Ci0JICovCi0JY29udGVudF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRl
bnRfdHlwZSAoaGVscGVyLT5odHRwLT5wcml2LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwp
OwotCXNvdXBfbWVzc2FnZV9jb250ZW50X3NuaWZmZWQgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNn
LCBjb250ZW50X3R5cGUsIE5VTEwpOwotCi0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRl
IChzaW1wbGUpOwotCi0Jc291cF9tZXNzYWdlX2ZpbmlzaGVkIChoZWxwZXItPmh0dHAtPnByaXYt
Pm1zZyk7Ci0KLQlnX29iamVjdF91bnJlZiAoc2ltcGxlKTsKLQotCWdfb2JqZWN0X3VucmVmICho
ZWxwZXItPmh0dHApOwotCWdfc2xpY2VfZnJlZSAoU2VuZEFzeW5jSGVscGVyLCBoZWxwZXIpOwot
Ci0JcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9o
dHRwX3NlbmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJ
CSAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCSAgICAgR0FzeW5j
UmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkgICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsK
LQlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAg
KHJlcXVlc3QpOwotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07Ci0JR1Np
bXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7Ci0JU291cFNlc3Npb24gKnNlc3Npb247Ci0JV2ViS2l0
U291cENhY2hlICpjYWNoZTsKLQotCXNlc3Npb24gPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9z
ZXNzaW9uIChyZXF1ZXN0KTsKLQljYWNoZSA9IChXZWJLaXRTb3VwQ2FjaGUgKilzb3VwX3Nlc3Np
b25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpOwotCi0JaWYg
KGNhY2hlKSB7Ci0JCVdlYktpdFNvdXBDYWNoZVJlc3BvbnNlIHJlc3BvbnNlOwotCi0JCXJlc3Bv
bnNlID0gd2Via2l0X3NvdXBfY2FjaGVfaGFzX3Jlc3BvbnNlIChjYWNoZSwgaHR0cC0+cHJpdi0+
bXNnKTsKLQkJaWYgKHJlc3BvbnNlID09IFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNI
KSB7Ci0JCQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOwotCi0JCQlodHRw
c3RyZWFtID0gKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKikKLQkJCQl3ZWJraXRfc291cF9j
YWNoZV9zZW5kX3Jlc3BvbnNlIChjYWNoZSwgU09VUF9NRVNTQUdFIChodHRwLT5wcml2LT5tc2cp
KTsKLQotCQkJLyogQ2FjaGVkIHJlc291cmNlIGZpbGUgY291bGQgaGF2ZSBiZWVuIGRlbGV0ZWQg
b3V0c2lkZQotCQkJICovCi0JCQlpZiAoaHR0cHN0cmVhbSkgewotCQkJCS8qIERvIHJldHVybiB0
aGUgc3RyZWFtIGFzeW5jaHJvbm91c2x5IGFzIGluCi0JCQkJICogdGhlIG90aGVyIGNhc2VzLiBJ
dCdzIG5vdCBlbm91Z2ggdG8gdXNlCi0JCQkJICogZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBs
ZXRlX2luX2lkbGUgYXMKLQkJCQkgKiB0aGUgc2lnbmFscyBtdXN0IGJlIGFsc28gZW1pdHRlZAot
CQkJCSAqIGFzeW5jaHJvbm91c2x5Ci0JCQkJICovCi0JCQkJU2VuZEFzeW5jSGVscGVyICpoZWxw
ZXIgPSBnX3NsaWNlX25ldyAoU2VuZEFzeW5jSGVscGVyKTsKLQkJCQloZWxwZXItPmh0dHAgPSBn
X29iamVjdF9yZWYgKGh0dHApOwotCQkJCWhlbHBlci0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKLQkJ
CQloZWxwZXItPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLQkJCQloZWxwZXItPmh0dHBzdHJlYW0g
PSBodHRwc3RyZWFtOwotCQkJCWdfdGltZW91dF9hZGQgKDAsIHNlbmRfYXN5bmNfY2IsIGhlbHBl
cik7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9IGVsc2UgaWYgKHJlc3BvbnNlID09IFdFQktJVF9T
T1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT04pIHsKLQkJCVNvdXBNZXNzYWdlICpj
b25kaXRpb25hbF9tc2c7Ci0JCQlDb25kaXRpb25hbEhlbHBlciAqaGVscGVyOwotCi0JCQljb25k
aXRpb25hbF9tc2cgPSB3ZWJraXRfc291cF9jYWNoZV9nZW5lcmF0ZV9jb25kaXRpb25hbF9yZXF1
ZXN0IChjYWNoZSwgaHR0cC0+cHJpdi0+bXNnKTsKLQotCQkJaGVscGVyID0gZ19zbGljZV9uZXcw
IChDb25kaXRpb25hbEhlbHBlcik7Ci0JCQloZWxwZXItPnJlcSA9IGdfb2JqZWN0X3JlZiAoaHR0
cCk7Ci0JCQloZWxwZXItPm9yaWdpbmFsID0gZ19vYmplY3RfcmVmIChodHRwLT5wcml2LT5tc2cp
OwotCQkJaGVscGVyLT5jYW5jZWxsYWJsZSA9IGNhbmNlbGxhYmxlOwotCQkJaGVscGVyLT5jYWxs
YmFjayA9IGNhbGxiYWNrOwotCQkJaGVscGVyLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0JCQlz
b3VwX3Nlc3Npb25fcXVldWVfbWVzc2FnZSAoc2Vzc2lvbiwgY29uZGl0aW9uYWxfbXNnLAotCQkJ
CQkJICAgIGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYiwKLQkJCQkJCSAgICBoZWxwZXIpOwotCQkJ
cmV0dXJuOwotCQl9Ci0JfQotCi0Jc2ltcGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAo
R19PQkpFQ1QgKGh0dHApLAotCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSwKLQkJCQkJICAg
IHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jKTsKLQlodHRwc3RyZWFtID0gd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3ICh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9z
ZXNzaW9uIChyZXF1ZXN0KSwKLQkJCQkJCQlodHRwLT5wcml2LT5tc2cpOwotCXdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKGh0dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVG
QVVMVCwKLQkJCQkJCSAgY2FuY2VsbGFibGUsIHNlbnRfYXN5bmMsIHNpbXBsZSk7Ci19Ci0KLXN0
YXRpYyBHSW5wdXRTdHJlYW0gKgotd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfZmluaXNo
IChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkgICAgICBHQXN5bmNS
ZXN1bHQgICAgICAgICAqcmVzdWx0LAotCQkJCSAgICAgIEdFcnJvciAgICAgICAgICAgICAgKipl
cnJvcikKLXsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKLQotCWdfcmV0dXJuX3ZhbF9p
Zl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfaXNfdmFsaWQgKHJlc3VsdCwgR19PQkpFQ1Qg
KHJlcXVlc3QpLCB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYykgfHwgZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JKRUNUIChyZXF1ZXN0KSwgY29u
ZGl0aW9uYWxfZ2V0X3JlYWR5X2NiKSwgTlVMTCk7Ci0KLQlzaW1wbGUgPSBHX1NJTVBMRV9BU1lO
Q19SRVNVTFQgKHJlc3VsdCk7Ci0JaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVf
ZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gZ19vYmplY3Rf
cmVmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlKSk7
Ci19Ci0KLXN0YXRpYyBnb2Zmc2V0Ci13ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRl
bnRfbGVuZ3RoIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKLXsKLQlXZWJLaXRTb3VwUmVx
dWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAgKHJlcXVlc3QpOwotCi0J
cmV0dXJuIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X2xlbmd0aCAoaHR0cC0+cHJp
di0+bXNnLT5yZXNwb25zZV9oZWFkZXJzKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotd2Vi
a2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X3R5cGUgKFdlYktpdFNvdXBSZXF1ZXN0
ICpyZXF1ZXN0KQotewotCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFdFQktJVF9TT1VQ
X1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7Ci0KLQlyZXR1cm4gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0X2NvbnRlbnRfdHlwZSAoaHR0cC0+cHJpdi0+bXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxM
KTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9jbGFzc19pbml0
IChXZWJLaXRTb3VwUmVxdWVzdEhUVFBDbGFzcyAqcmVxdWVzdF9odHRwX2NsYXNzKQotewotCUdP
YmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfaHR0cF9j
bGFzcyk7Ci0JV2ViS2l0U291cFJlcXVlc3RDbGFzcyAqcmVxdWVzdF9jbGFzcyA9Ci0JCVdFQktJ
VF9TT1VQX1JFUVVFU1RfQ0xBU1MgKHJlcXVlc3RfaHR0cF9jbGFzcyk7Ci0KLQlnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUgKHJlcXVlc3RfaHR0cF9jbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwUmVx
dWVzdEhUVFBQcml2YXRlKSk7Ci0KLQlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3Nv
dXBfcmVxdWVzdF9odHRwX2ZpbmFsaXplOwotCi0JcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0g
d2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2NoZWNrX3VyaTsKLQlyZXF1ZXN0X2NsYXNzLT5zZW5k
ID0gd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmQ7Ci0JcmVxdWVzdF9jbGFzcy0+c2VuZF9h
c3luYyA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jOwotCXJlcXVlc3RfY2xh
c3MtPnNlbmRfZmluaXNoID0gd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfZmluaXNoOwot
CXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rf
aHR0cF9nZXRfY29udGVudF9sZW5ndGg7Ci0JcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlw
ZSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF90eXBlOwotfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0
dHAuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1o
dHRwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNmE4MjEuLjAwMDAwMDAKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAu
aAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDOyB0YWItd2lk
dGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQX0gKLSNkZWZp
bmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQX0ggMQotCi0jaW5jbHVkZSAic291cC1yZXF1ZXN0
LmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1Rf
SFRUUCAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X3R5cGUgKCkpCi0j
ZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUChvYmplY3QpICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUICgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hU
VFAsIFdlYktpdFNvdXBSZXF1ZXN0SFRUUCkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1Rf
SFRUUF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBX
RUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCwgV2ViS2l0U291cFJlcXVlc3RIVFRQQ2xhc3Mp
KQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0hUVFAob2JqZWN0KSAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVT
VF9IVFRQKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9IVFRQX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVR
VUVTVF9IVFRQKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhUVFBDbGFzcykpCi0KLXR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlIFdlYktpdFNvdXBSZXF1ZXN0SFRUUFBy
aXZhdGU7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3VwUmVxdWVzdCBwYXJlbnQ7Ci0K
LQlXZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlICpwcml2OwotfSBXZWJLaXRTb3VwUmVxdWVz
dEhUVFA7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3VwUmVxdWVzdENsYXNzIHBhcmVu
dDsKLX0gV2ViS2l0U291cFJlcXVlc3RIVFRQQ2xhc3M7Ci0KLUdUeXBlIHdlYmtpdF9zb3VwX3Jl
cXVlc3RfaHR0cF9nZXRfdHlwZSAodm9pZCk7Ci0KLVNvdXBNZXNzYWdlICAqd2Via2l0X3NvdXBf
cmVxdWVzdF9odHRwX2dldF9tZXNzYWdlIChXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHApOwot
Ci1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQX0ggKi8K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YjlmNWEuLjAwMDAwMDAKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmMKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMTIgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsg
aW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogc291
cC1yZXF1ZXN0LmM6IFByb3RvY29sLWluZGVwZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0IGludGVy
ZmFjZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAsIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8
Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KLQotI2luY2x1ZGUg
InNvdXAtcmVxdWVzdC5oIgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCi0KLS8qKgotICog
U0VDVElPTjpzb3VwLXJlcXVlc3QKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUHJvdG9jb2wtaW5k
ZXBlbmRlbnQgc3RyZWFtaW5nIHJlcXVlc3QgaW50ZXJmYWNlCi0gKgotICogRklYTUUKLSAqKi8K
LQotLyoqCi0gKiBXZWJLaXRTb3VwUmVxdWVzdDoKLSAqCi0gKiBGSVhNRQotICoKLSAqIFNpbmNl
OiAyLjMwCi0gKiovCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFibGVf
aW50ZXJmYWNlX2luaXQgKEdJbml0YWJsZUlmYWNlICppbml0YWJsZV9pbnRlcmZhY2UpOwotCi1H
X0RFRklORV9UWVBFX1dJVEhfQ09ERSAoV2ViS2l0U291cFJlcXVlc3QsIHdlYmtpdF9zb3VwX3Jl
cXVlc3QsIEdfVFlQRV9PQkpFQ1QsCi0JCQkgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHX1RZUEVf
SU5JVEFCTEUsCi0JCQkJCQl3ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9p
bml0KSkKLQotZW51bSB7Ci0JUFJPUF8wLAotCVBST1BfVVJJLAotCVBST1BfU0VTU0lPTgotfTsK
LQotc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUgewotCVNvdXBVUkkgKnVyaTsKLQlT
b3VwU2Vzc2lvbiAqc2Vzc2lvbjsKLX07Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1
ZXN0X2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQotewotCXJlcXVlc3QtPnByaXYg
PSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHJlcXVlc3QsIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVCwgV2ViS2l0U291cFJlcXVlc3RQcml2YXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLXdl
YmtpdF9zb3VwX3JlcXVlc3RfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKLXsKLQlXZWJLaXRT
b3VwUmVxdWVzdCAqcmVxdWVzdCA9IFdFQktJVF9TT1VQX1JFUVVFU1QgKG9iamVjdCk7Ci0KLQlp
ZiAocmVxdWVzdC0+cHJpdi0+dXJpKQotCQlzb3VwX3VyaV9mcmVlIChyZXF1ZXN0LT5wcml2LT51
cmkpOwotCWlmIChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKQotCQlnX29iamVjdF91bnJlZiAocmVx
dWVzdC0+cHJpdi0+c2Vzc2lvbik7Ci0KLQlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfcmVx
dWVzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQK
LXdlYmtpdF9zb3VwX3JlcXVlc3Rfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICAgICAgKm9iamVjdCwK
LQkJCQkgIGd1aW50IHByb3BfaWQsCi0JCQkJICBjb25zdCBHVmFsdWUgKnZhbHVlLAotCQkJCSAg
R1BhcmFtU3BlYyAgICpwc3BlYykKLXsKLQlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCA9IFdF
QktJVF9TT1VQX1JFUVVFU1QgKG9iamVjdCk7Ci0KLQlzd2l0Y2ggKHByb3BfaWQpIHsKLQljYXNl
IFBST1BfVVJJOgotCQlpZiAocmVxdWVzdC0+cHJpdi0+dXJpKQotCQkJc291cF91cmlfZnJlZSAo
cmVxdWVzdC0+cHJpdi0+dXJpKTsKLQkJcmVxdWVzdC0+cHJpdi0+dXJpID0gZ192YWx1ZV9kdXBf
Ym94ZWQgKHZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUk9QX1NFU1NJT046Ci0JCWlmIChyZXF1
ZXN0LT5wcml2LT5zZXNzaW9uKQotCQkJZ19vYmplY3RfdW5yZWYgKHJlcXVlc3QtPnByaXYtPnNl
c3Npb24pOwotCQlyZXF1ZXN0LT5wcml2LT5zZXNzaW9uID0gZ192YWx1ZV9kdXBfb2JqZWN0ICh2
YWx1ZSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3Rh
dGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICAgICpv
YmplY3QsCi0JCQkJICBndWludCBwcm9wX2lkLAotCQkJCSAgR1ZhbHVlICAgICAqdmFsdWUsCi0J
CQkJICBHUGFyYW1TcGVjICpwc3BlYykKLXsKLQlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCA9
IFdFQktJVF9TT1VQX1JFUVVFU1QgKG9iamVjdCk7Ci0KLQlzd2l0Y2ggKHByb3BfaWQpIHsKLQlj
YXNlIFBST1BfVVJJOgotCQlnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHJlcXVlc3QtPnByaXYt
PnVyaSk7Ci0JCWJyZWFrOwotCWNhc2UgUFJPUF9TRVNTSU9OOgotCQlnX3ZhbHVlX3NldF9vYmpl
Y3QgKHZhbHVlLCByZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoK
LQkJR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBz
cGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX3Jl
cXVlc3RfaW5pdGFibGVfaW5pdCAoR0luaXRhYmxlICAgICAqaW5pdGFibGUsCi0JCQkJICAgR0Nh
bmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCi0JCQkJICAgR0Vycm9yICAgICAgICoqZXJyb3IpCi17
Ci0JV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUIChpbml0
YWJsZSk7Ci0JZ2Jvb2xlYW4gb2s7Ci0KLQlpZiAoIXJlcXVlc3QtPnByaXYtPnVyaSkgewotCQln
X3NldF9lcnJvciAoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09VUF9FUlJPUl9C
QURfVVJJLAotCQkJICAgICBfICgiTm8gVVJJIHByb3ZpZGVkIikpOwotCQlyZXR1cm4gRkFMU0U7
Ci0JfQotCi0Jb2sgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAoaW5pdGFibGUpLT4K
LQkJY2hlY2tfdXJpIChyZXF1ZXN0LCByZXF1ZXN0LT5wcml2LT51cmksIGVycm9yKTsKLQotCWlm
ICghb2sgJiYgZXJyb3IpIHsKLQkJY2hhciAqdXJpX3N0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmlu
ZyAocmVxdWVzdC0+cHJpdi0+dXJpLCBGQUxTRSk7Ci0JCWdfc2V0X2Vycm9yIChlcnJvciwgV0VC
S0lUX1NPVVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkksCi0JCQkgICAgIF8gKCJJ
bnZhbGlkICclcycgVVJJOiAlcyIpLAotCQkJICAgICByZXF1ZXN0LT5wcml2LT51cmktPnNjaGVt
ZSwKLQkJCSAgICAgdXJpX3N0cmluZyk7Ci0JCWdfZnJlZSAodXJpX3N0cmluZyk7Ci0JfQotCi0J
cmV0dXJuIG9rOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX3JlcXVlc3RfZGVm
YXVsdF9jaGVja191cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKLQkJCQkgICAgICAg
U291cFVSSSAgICAgICp1cmksCi0JCQkJICAgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCi17Ci0J
cmV0dXJuIFRSVUU7Ci19Ci0KLS8qIERlZmF1bHQgaW1wbGVtZW50YXRpb246IGFzc3VtZSB0aGUg
c3luYyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGJsb2NrICovCi1zdGF0aWMgdm9pZAotd2Via2l0
X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAg
ICAgICpyZXF1ZXN0LAotCQkJCQlHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCi0J
CQkJCUdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkJCWdwb2ludGVyIHVzZXJfZGF0
YSkKLXsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKLQotCXNpbXBsZSA9IGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChyZXF1ZXN0KSwKLQkJCQkJICAgIGNhbGxiYWNr
LCB1c2VyX2RhdGEsCi0JCQkJCSAgICB3ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9h
c3luYyk7Ci0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHNpbXBsZSk7
Ci0JZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7Ci19Ci0KLXN0YXRpYyBHSW5wdXRTdHJlYW0gKgot
d2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfZmluaXNoIChXZWJLaXRTb3VwUmVxdWVz
dCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkJIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQs
Ci0JCQkJCSBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCi17Ci0JZ19yZXR1cm5fdmFsX2lm
X2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAo
cmVxdWVzdCksIHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jKSwgTlVMTCk7
Ci0KLQlyZXR1cm4gd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kIChyZXF1ZXN0LCBOVUxMLCBlcnJv
cik7Ci19Ci0KLUdJbnB1dFN0cmVhbSAqCi13ZWJraXRfc291cF9yZXF1ZXN0X3NlbmQgKFdlYktp
dFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJICBHQ2FuY2VsbGFibGUgICAgICAg
ICAqY2FuY2VsbGFibGUsCi0JCQkgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKLXsKLQly
ZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT4KLQkJc2VuZCAo
cmVxdWVzdCwgY2FuY2VsbGFibGUsIGVycm9yKTsKLX0KLQotdm9pZAotd2Via2l0X3NvdXBfcmVx
dWVzdF9zZW5kX2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJ
CQlHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJR0FzeW5jUmVhZHlDYWxs
YmFjayBjYWxsYmFjaywKLQkJCQlncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JV0VCS0lUX1NPVVBf
UkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT4KLQkJc2VuZF9hc3luYyAocmVxdWVzdCwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyX2RhdGEpOwotfQotCi1HSW5wdXRTdHJlYW0gKgotd2Vi
a2l0X3NvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCi0JCQkJIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCi0JCQkJIEdFcnJv
ciAgICAgICAgICAgICAgKiplcnJvcikKLXsKLQlyZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVTVF9H
RVRfQ0xBU1MgKHJlcXVlc3QpLT4KLQkJc2VuZF9maW5pc2ggKHJlcXVlc3QsIHJlc3VsdCwgZXJy
b3IpOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9jbGFzc19pbml0IChX
ZWJLaXRTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzKQotewotCUdPYmplY3RDbGFzcyAq
b2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfY2xhc3MpOwotCi0JZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBSZXF1
ZXN0UHJpdmF0ZSkpOwotCi0JcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gd2Via2l0X3NvdXBf
cmVxdWVzdF9kZWZhdWx0X2NoZWNrX3VyaTsKLQlyZXF1ZXN0X2NsYXNzLT5zZW5kX2FzeW5jID0g
d2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmM7Ci0JcmVxdWVzdF9jbGFzcy0+
c2VuZF9maW5pc2ggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9maW5pc2g7Ci0K
LQlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maW5hbGl6ZTsK
LQlvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2V0X3By
b3BlcnR5OwotCW9iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBfcmVxdWVz
dF9nZXRfcHJvcGVydHk7Ci0KLQlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5ICgKLQkJ
IG9iamVjdF9jbGFzcywgUFJPUF9VUkksCi0JCSBnX3BhcmFtX3NwZWNfYm94ZWQgKFdFQktJVF9T
T1VQX1JFUVVFU1RfVVJJLAotCQkJCSAgICAgIlVSSSIsCi0JCQkJICAgICAiVGhlIHJlcXVlc3Qg
VVJJIiwKLQkJCQkgICAgIFNPVVBfVFlQRV9VUkksCi0JCQkJICAgICBHX1BBUkFNX1JFQURXUklU
RSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKLQlnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5ICgKLQkJIG9iamVjdF9jbGFzcywgUFJPUF9TRVNTSU9OLAotCQkgZ19wYXJhbV9zcGVj
X29iamVjdCAoV0VCS0lUX1NPVVBfUkVRVUVTVF9TRVNTSU9OLAotCQkJCSAgICAgICJTZXNzaW9u
IiwKLQkJCQkgICAgICAiVGhlIHJlcXVlc3QncyBzZXNzaW9uIiwKLQkJCQkgICAgICBTT1VQX1RZ
UEVfU0VTU0lPTiwKLQkJCQkgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RS
VUNUX09OTFkpKTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFi
bGVfaW50ZXJmYWNlX2luaXQgKEdJbml0YWJsZUlmYWNlICppbml0YWJsZV9pbnRlcmZhY2UpCi17
Ci0JaW5pdGFibGVfaW50ZXJmYWNlLT5pbml0ID0gd2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJs
ZV9pbml0OwotfQotCi1Tb3VwVVJJICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3VyaSAoV2Vi
S2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCi17Ci0JcmV0dXJuIHJlcXVlc3QtPnByaXYtPnVyaTsK
LX0KLQotU291cFNlc3Npb24gKgotd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAoV2Vi
S2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCi17Ci0JcmV0dXJuIHJlcXVlc3QtPnByaXYtPnNlc3Np
b247Ci19Ci0KLWdvZmZzZXQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3Ro
IChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKLXsKLQlyZXR1cm4gV0VCS0lUX1NPVVBfUkVR
VUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT5nZXRfY29udGVudF9sZW5ndGggKHJlcXVlc3QpOwot
fQotCi1jb25zdCBjaGFyICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZSAo
V2ViS2l0U291cFJlcXVlc3QgICpyZXF1ZXN0KQotewotCXJldHVybiBXRUJLSVRfU09VUF9SRVFV
RVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPmdldF9jb250ZW50X3R5cGUgKHJlcXVlc3QpOwotfQot
Ci0jZGVmaW5lIFhESUdJVChjKSAoKGMpIDw9ICc5JyA/IChjKSAtICcwJyA6ICgoYykgJiAweDRG
KSAtICdBJyArIDEwKQotI2RlZmluZSBIRVhDSEFSKHMpICgoWERJR0lUIChzWzFdKSA8PCA0KSAr
IFhESUdJVCAoc1syXSkpCi0KLS8qIENvcHkmcGFzdGVkIGZyb20gbGlic291cCdzIHNvdXAtdXJp
LmMgYWZ0ZXIgYXBwbHlpbmcgdGhlIHBhdGNoIGluCi0gKiBodHRwczovL2J1Z3ppbGxhLmdub21l
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMwNTQwLiBXZSBuZWVkIHRoaXMKLSAqIGluc3RlYWQgb2Yg
c291cF91cmlfZGVjb2RlKCkgYXMgaXQgaW5jb3JyZWN0bHkgcmV0dXJucyBOVUxMIGZvcgotICog
aW5jb3JyZWN0bHkgZW5jb2RlZCBVUkxzLiBUT0RPOiByZW1vdmUgdGhpcyB3aGVuIHJlcXVpcmVk
IGxpYnNvdXAKLSAqIHZlcnNpb24gaXMgYnVtcGVkIG91dCB0byAyLjMyLjEKLSAqLwotZ2NoYXIg
Kgotd2Via2l0X3NvdXBfcmVxdWVzdF91cmlfZGVjb2RlZF9jb3B5IChjb25zdCBjaGFyICpwYXJ0
LCBpbnQgbGVuZ3RoKQotewotCXVuc2lnbmVkIGNoYXIgKnMsICpkOwotICAgICAgICBjaGFyICpk
ZWNvZGVkID0gZ19zdHJuZHVwIChwYXJ0LCBsZW5ndGgpOwotCi0gICAgICAgIHMgPSBkID0gKHVu
c2lnbmVkIGNoYXIgKilkZWNvZGVkOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgaWYg
KCpzID09ICclJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnX2FzY2lpX2lzeGRp
Z2l0IChzWzFdKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICFnX2FzY2lpX2lzeGRp
Z2l0IChzWzJdKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZCsrID0gKnM7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgKmQrKyA9IEhFWENIQVIgKHMp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcyArPSAyOwotICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgKmQrKyA9ICpzOwotICAgICAgICB9IHdoaWxlICgq
cysrKTsKLQotICAgICAgICByZXR1cm4gZGVjb2RlZDsKLX0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDgzN2Q4ZjQuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAs
MCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsg
Yy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBI
YXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXRUJL
SVRfU09VUF9SRVFVRVNUX0gKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9IIDEKLQotI2lu
Y2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLQotR19CRUdJTl9E
RUNMUwotCi0jZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCAgICAgICAgICAgICh3ZWJr
aXRfc291cF9yZXF1ZXN0X2dldF90eXBlICgpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNU
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJL
SVRfVFlQRV9TT1VQX1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0KSkKLSNkZWZpbmUgV0VCS0lU
X1NPVVBfUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgo
a2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0Q2xhc3Mp
KQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QpKQotI2Rl
ZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkpCi0jZGVmaW5lIFdF
QktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNULCBXZWJLaXRTb3VwUmVxdWVzdENs
YXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0IFdlYktpdFNvdXBSZXF1
ZXN0OwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0UHJpdmF0ZSBXZWJLaXRTb3Vw
UmVxdWVzdFByaXZhdGU7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RDbGFzcyBX
ZWJLaXRTb3VwUmVxdWVzdENsYXNzOwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0IHsKLQlH
T2JqZWN0IHBhcmVudDsKLQotCVdlYktpdFNvdXBSZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKLX07Ci0K
LXN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RDbGFzcyB7Ci0JR09iamVjdENsYXNzIHBhcmVudDsK
LQotCWdib29sZWFuICgqY2hlY2tfdXJpKShXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVx
X2Jhc2UsCi0JCQkgICAgICBTb3VwVVJJICAgICAgICAgICAgICAqdXJpLAotCQkJICAgICAgR0Vy
cm9yICAgICAgICAgICAgICAqKmVycm9yKTsKLQotCUdJbnB1dFN0cmVhbSAqICgqc2VuZCkoV2Vi
S2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkgICAgICAgR0NhbmNlbGxhYmxl
ICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKipl
cnJvcik7Ci0Jdm9pZCAoKnNlbmRfYXN5bmMpKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpy
ZXF1ZXN0LAotCQkJICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJICAg
R0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCSAgIGdwb2ludGVyIHVzZXJfZGF0YSk7
Ci0JR0lucHV0U3RyZWFtICogKCpzZW5kX2ZpbmlzaCkoV2ViS2l0U291cFJlcXVlc3QgICAgICAg
ICAgKnJlcXVlc3QsCi0JCQkJICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKLQkJ
CQkgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwotCi0JZ29mZnNldCAoKmdldF9j
b250ZW50X2xlbmd0aCkoV2ViS2l0U291cFJlcXVlc3QgICAqcmVxdWVzdCk7Ci0JY29uc3QgY2hh
ciAqICAgKCpnZXRfY29udGVudF90eXBlKShXZWJLaXRTb3VwUmVxdWVzdCAgICpyZXF1ZXN0KTsK
LX07Ci0KLUdUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3R5cGUgKHZvaWQpOwotCi0jZGVm
aW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfVVJJICAgICAidXJpIgotI2RlZmluZSBXRUJLSVRfU09V
UF9SRVFVRVNUX1NFU1NJT04gInNlc3Npb24iCi0KLUdJbnB1dFN0cmVhbSAqd2Via2l0X3NvdXBf
cmVxdWVzdF9zZW5kIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkJ
R0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQlHRXJyb3IgICAgICAgICAg
ICAgICoqZXJyb3IpOwotdm9pZCAgICAgICAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5
bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJCQkgICAgICBHQ2Fu
Y2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCSAgICAgIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgY2FsbGJhY2ssCi0JCQkJCSAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci1HSW5wdXRT
dHJlYW0gKndlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9maW5pc2ggKFdlYktpdFNvdXBSZXF1ZXN0
ICAgICAgICAgICpyZXF1ZXN0LAotCQkJCQkgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJl
c3VsdCwKLQkJCQkJICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7Ci0KLVNvdXBV
UkkgICAgICAqd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAg
ICAgICAgICAqcmVxdWVzdCk7Ci1Tb3VwU2Vzc2lvbiAgKndlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0
X3Nlc3Npb24gKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0KTsKLQotZ29mZnNl
dCAgICAgICB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aCAoV2ViS2l0U291
cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOwotY29uc3QgY2hhciAgICp3ZWJraXRfc291cF9y
ZXF1ZXN0X2dldF9jb250ZW50X3R5cGUgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1
ZXN0KTsKLQotLyogVXNlZCBieSBXZWJLaXRTb3VwUmVxdWVzdEZpbGUgYW5kIFdlYktpdFNvdXBS
ZXF1ZXN0RGF0YS4gSWRlYWxseQotICogc2hvdWxkIGJlIGxvY2F0ZWQgaW4gc29tZSB1dGlsIGZp
bGUgYnV0IEknbGwgcGxhY2UgaXQgaGVyZSBhcyBpdAotICogd2lsbCBiZSByZW1vdmVkIHdpdGgg
bGlic291cCAyLjMyLjEgdGhhdCB3aWxsIHNoaXAgZml4ZWQgdmVyc2lvbnMKLSAqIG9mIHNvdXBf
dXJpX2RlY29kZS9ub3JtYWxpemUKLSAqLwotZ2NoYXIgKndlYmtpdF9zb3VwX3JlcXVlc3RfdXJp
X2RlY29kZWRfY29weSAoY29uc3QgY2hhciAqcGFydCwgaW50IGxlbmd0aCk7Ci0KLUdfRU5EX0RF
Q0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfU09VUF9SRVFVRVNUX0ggKi8KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDhhODYwLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMKKysrIC9kZXYvbnVsbApA
QCAtMSwxODggKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRh
YnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogc291cC1yZXF1ZXN0
ZXIuYzoKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBTLkwuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgotCi0jaW5jbHVkZSAic291cC1y
ZXF1ZXN0LWRhdGEuaCIKLSNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZmlsZS5oIgotI2luY2x1ZGUg
InNvdXAtcmVxdWVzdC1odHRwLmgiCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgotI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlIHsK
LQlHSGFzaFRhYmxlICpyZXF1ZXN0X3R5cGVzOwotfTsKLQotI2RlZmluZSBXRUJLSVRfU09VUF9S
RVFVRVNURVJfR0VUX1BSSVZBVEUobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8p
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiwgV2ViS2l0U291cFJlcXVlc3RlclByaXZhdGUp
KQotCi1HX0RFRklORV9UWVBFIChXZWJLaXRTb3VwUmVxdWVzdGVyLCB3ZWJraXRfc291cF9yZXF1
ZXN0ZXIsIEdfVFlQRV9PQkpFQ1QpCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3Rl
cl9pbml0IChXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIpCi17Ci0JcmVxdWVzdGVyLT5w
cml2ID0gV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0dFVF9QUklWQVRFIChyZXF1ZXN0ZXIpOwotCi0J
cmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzID0gMDsKLX0KLQotc3RhdGljIHZvaWQgZmlu
YWxpemUgKEdPYmplY3QgKm9iamVjdCkKLXsKLQlXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1ZXN0
ZXIgPSBXRUJLSVRfU09VUF9SRVFVRVNURVIgKG9iamVjdCk7Ci0KLQlpZiAocmVxdWVzdGVyLT5w
cml2LT5yZXF1ZXN0X3R5cGVzKQotCQlnX2hhc2hfdGFibGVfZGVzdHJveSAocmVxdWVzdGVyLT5w
cml2LT5yZXF1ZXN0X3R5cGVzKTsKLQotCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9yZXF1
ZXN0ZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9jbGFzc19pbml0IChXZWJLaXRTb3VwUmVxdWVzdGVyQ2xh
c3MgKnJlcXVlc3Rlcl9jbGFzcykKLXsKLQlHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdf
T0JKRUNUX0NMQVNTIChyZXF1ZXN0ZXJfY2xhc3MpOwotCi0JZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlIChyZXF1ZXN0ZXJfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cFJlcXVlc3RlclByaXZhdGUp
KTsKLQotCS8qIHZpcnR1YWwgbWV0aG9kIG92ZXJyaWRlICovCi0Jb2JqZWN0X2NsYXNzLT5maW5h
bGl6ZSA9IGZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCBpbml0X3JlcXVlc3RfdHlwZXMgKFdl
YktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlICpwcml2KQotewotCWlmIChwcml2LT5yZXF1ZXN0X3R5
cGVzKQotCQlyZXR1cm47Ci0KLQlwcml2LT5yZXF1ZXN0X3R5cGVzID0gZ19oYXNoX3RhYmxlX25l
d19mdWxsIChzb3VwX3N0cl9jYXNlX2hhc2gsCi0JCQkJCQkgICAgIHNvdXBfc3RyX2Nhc2VfZXF1
YWwsCi0JCQkJCQkgICAgIGdfZnJlZSwgMCk7Ci0JZ19oYXNoX3RhYmxlX2luc2VydCAocHJpdi0+
cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJmaWxlIiksCi0JCQkgICAgIEdTSVpFX1RPX1BPSU5U
RVIgKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFKSk7Ci0JZ19oYXNoX3RhYmxlX2luc2Vy
dCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJkYXRhIiksCi0JCQkgICAgIEdTSVpF
X1RPX1BPSU5URVIgKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBKSk7Ci0JZ19oYXNoX3Rh
YmxlX2luc2VydCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJodHRwIiksCi0JCQkg
ICAgIEdTSVpFX1RPX1BPSU5URVIgKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQKSk7Ci0J
Z19oYXNoX3RhYmxlX2luc2VydCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJodHRw
cyIpLAotCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1Rf
SFRUUCkpOwotCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3Ry
ZHVwICgiZnRwIiksCi0JCQkgICAgIEdTSVpFX1RPX1BPSU5URVIgKFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVF9GSUxFKSk7Ci19Ci0KLVdlYktpdFNvdXBSZXF1ZXN0ZXIgKndlYmtpdF9zb3VwX3Jl
cXVlc3Rlcl9uZXcgKHZvaWQpCi17Ci0JcmV0dXJuIChXZWJLaXRTb3VwUmVxdWVzdGVyICopZ19v
YmplY3RfbmV3IChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiwgTlVMTCk7Ci19Ci0KLVdlYktp
dFNvdXBSZXF1ZXN0ICp3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdCAoV2ViS2l0U291cFJl
cXVlc3RlciAqcmVxdWVzdGVyLCBjb25zdCBjaGFyICp1cmlTdHJpbmcsIFNvdXBTZXNzaW9uICpz
ZXNzaW9uLCBHRXJyb3IgKiplcnJvcikKLXsKLQlTb3VwVVJJICp1cmkgPSBOVUxMOwotCVdlYktp
dFNvdXBSZXF1ZXN0ICpyZXE7Ci0KLQl1cmkgPSBzb3VwX3VyaV9uZXcgKHVyaVN0cmluZyk7Ci0J
aWYgKCF1cmkpIHsKLQkJZ19zZXRfZXJyb3IgKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VC
S0lUX1NPVVBfRVJST1JfQkFEX1VSSSwKLQkJCSAgICAgXyAoIkNvdWxkIG5vdCBwYXJzZSBVUkkg
JyVzJyIpLCB1cmlTdHJpbmcpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXEgPSB3ZWJraXRfc291
cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKHJlcXVlc3RlciwgdXJpLCBzZXNzaW9uLCBlcnJvcik7
Ci0Jc291cF91cmlfZnJlZSAodXJpKTsKLQlyZXR1cm4gcmVxOwotfQotCi1XZWJLaXRTb3VwUmVx
dWVzdCAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3RfdXJpIChXZWJLaXRTb3VwUmVxdWVz
dGVyICpyZXF1ZXN0ZXIsIFNvdXBVUkkgKnVyaSwgU291cFNlc3Npb24gKnNlc3Npb24sIEdFcnJv
ciAqKmVycm9yKQotewotCUdUeXBlIHJlcXVlc3RUeXBlOwotCi0JZ19yZXR1cm5fdmFsX2lmX2Zh
aWwgKFdFQktJVF9JU19TT1VQX1JFUVVFU1RFUiAocmVxdWVzdGVyKSwgMCk7Ci0KLQlpbml0X3Jl
cXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+cHJpdik7Ci0JcmVxdWVzdFR5cGUgPSAoR1R5cGUpR1BP
SU5URVJfVE9fU0laRSAoZ19oYXNoX3RhYmxlX2xvb2t1cCAocmVxdWVzdGVyLT5wcml2LT5yZXF1
ZXN0X3R5cGVzLCB1cmktPnNjaGVtZSkpOwotCWlmICghcmVxdWVzdFR5cGUpIHsKLQkJZ19zZXRf
ZXJyb3IgKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfVU5TVVBQ
T1JURURfVVJJX1NDSEVNRSwKLQkJCSAgICAgXyAoIlVuc3VwcG9ydGVkIFVSSSBzY2hlbWUgJyVz
JyIpLCB1cmktPnNjaGVtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChnX3R5cGVfaXNfYSAo
cmVxdWVzdFR5cGUsIEdfVFlQRV9JTklUQUJMRSkpIHsKLQkJcmV0dXJuIChXZWJLaXRTb3VwUmVx
dWVzdCAqKWdfaW5pdGFibGVfbmV3IChyZXF1ZXN0VHlwZSwgMCwgZXJyb3IsCi0JCQkJCQkJICAg
ICJ1cmkiLCB1cmksCi0JCQkJCQkJICAgICJzZXNzaW9uIiwgc2Vzc2lvbiwKLQkJCQkJCQkgICAg
TlVMTCk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIChXZWJLaXRTb3VwUmVxdWVzdCAqKWdfb2JqZWN0
X25ldyAocmVxdWVzdFR5cGUsCi0JCQkJCQkJICAidXJpIiwgdXJpLAotCQkJCQkJCSAgInNlc3Np
b24iLCBzZXNzaW9uLAotCQkJCQkJCSAgTlVMTCk7Ci0JfQotfQotCi0vKiBSRkMgMjM5NiwgMy4x
ICovCi1zdGF0aWMgZ2Jvb2xlYW4KLXNvdXBfc2NoZW1lX2lzX3ZhbGlkIChjb25zdCBjaGFyICpz
Y2hlbWUpCi17Ci0JaWYgKHNjaGVtZSA9PSBOVUxMIHx8Ci0JICAgICFnX2FzY2lpX2lzYWxwaGEg
KCpzY2hlbWUpKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlzY2hlbWUrKzsKLQl3aGlsZSAoKnNjaGVt
ZSkgewotCQlpZiAoIWdfYXNjaWlfaXNhbHBoYSAoKnNjaGVtZSkgJiYKLQkJICAgICFnX2FzY2lp
X2lzZGlnaXQgKCpzY2hlbWUpICYmCi0JCSAgICAqc2NoZW1lICE9ICcrJyAmJgotCQkgICAgKnNj
aGVtZSAhPSAnLScgJiYKLQkJICAgICpzY2hlbWUgIT0gJy4nKQotCQkJcmV0dXJuIEZBTFNFOwot
CQlzY2hlbWUrKzsKLQl9Ci0JcmV0dXJuIFRSVUU7Ci19Ci0KLXZvaWQKLXdlYmtpdF9zb3VwX3Jl
cXVlc3Rlcl9hZGRfcHJvdG9jb2wgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKLQkJ
CQkgICAgY29uc3QgY2hhciAgKnNjaGVtZSwKLQkJCQkgICAgR1R5cGUgcmVxdWVzdF90eXBlKQot
ewotCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX1JFUVVFU1RFUiAocmVxdWVzdGVy
KSk7Ci0JZ19yZXR1cm5faWZfZmFpbCAoc291cF9zY2hlbWVfaXNfdmFsaWQgKHNjaGVtZSkpOwot
Ci0JaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0ZXItPnByaXYpOwotCWdfaGFzaF90YWJsZV9p
bnNlcnQgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKHNjaGVtZSks
Ci0JCQkgICAgIEdTSVpFX1RPX1BPSU5URVIgKHJlcXVlc3RfdHlwZSkpOwotfQotCi12b2lkCi13
ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVtb3ZlX3Byb3RvY29sIChXZWJLaXRTb3VwUmVxdWVzdGVy
ICpyZXF1ZXN0ZXIsCi0JCQkJICAgICAgIGNvbnN0IGNoYXIgICpzY2hlbWUpCi17Ci0JZ19yZXR1
cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfUkVRVUVTVEVSIChyZXF1ZXN0ZXIpKTsKLQlnX3Jl
dHVybl9pZl9mYWlsIChzb3VwX3NjaGVtZV9pc192YWxpZCAoc2NoZW1lKSk7Ci0KLQlpbml0X3Jl
cXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+cHJpdik7Ci0JZ19oYXNoX3RhYmxlX3JlbW92ZSAocmVx
dWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzLCBzY2hlbWUpOwotfQotCi1HUXVhcmsKLXdlYmtp
dF9zb3VwX2Vycm9yX3F1YXJrICh2b2lkKQotewotCXN0YXRpYyBHUXVhcmsgZXJyb3I7Ci0JaWYg
KCFlcnJvcikKLQkJZXJyb3IgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoIndlYmtpdF9z
b3VwX2Vycm9yX3F1YXJrIik7Ci0JcmV0dXJuIGVycm9yOwotfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDcxZmYxMDMuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDgxICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1v
ZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9TT1VQX1JFUVVFU1RFUl9ICi0jZGVmaW5lIFdF
QktJVF9TT1VQX1JFUVVFU1RFUl9IIDEKLQotI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgotI2lu
Y2x1ZGUgPGxpYnNvdXAvc291cC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lU
X1RZUEVfU09VUF9SRVFVRVNURVIgICAgICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdGVyX2dl
dF90eXBlICgpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNURVIob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVR
VUVTVEVSLCBXZWJLaXRTb3VwUmVxdWVzdGVyKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVT
VEVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdF
QktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSLCBXZWJLaXRTb3VwUmVxdWVzdGVyQ2xhc3MpKQotI2Rl
ZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNURVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSKSkKLSNkZWZp
bmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVEVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUikpCi0jZGVmaW5lIFdF
QktJVF9TT1VQX1JFUVVFU1RFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiwgV2ViS2l0U291cFJlcXVl
c3RlckNsYXNzKSkKLQotI2RlZmluZSBXRUJLSVRfU09VUF9FUlJPUiB3ZWJraXRfc291cF9lcnJv
cl9xdWFyayAoKQotCi10eXBlZGVmIGVudW0gewotCVdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkks
Ci0JV0VCS0lUX1NPVVBfRVJST1JfVU5TVVBQT1JURURfVVJJX1NDSEVNRQotfSBXZWJLaXRTb3Vw
RXJyb3I7Ci0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdGVyIFdlYktpdFNvdXBS
ZXF1ZXN0ZXI7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RlclByaXZhdGUgV2Vi
S2l0U291cFJlcXVlc3RlclByaXZhdGU7Ci0KLXN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RlciB7
Ci0JR09iamVjdCBwYXJlbnQ7Ci0KLQlXZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSAqcHJpdjsK
LX07Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfSBX
ZWJLaXRTb3VwUmVxdWVzdGVyQ2xhc3M7Ci0KLUdUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9n
ZXRfdHlwZSAodm9pZCk7Ci0KLVdlYktpdFNvdXBSZXF1ZXN0ZXIgKndlYmtpdF9zb3VwX3JlcXVl
c3Rlcl9uZXcgKHZvaWQpOwotCi1HUXVhcmsgd2Via2l0X3NvdXBfZXJyb3JfcXVhcmsgKHZvaWQp
OwotCi1XZWJLaXRTb3VwUmVxdWVzdCAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QgKFdl
YktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKLQkJCQkJCSAgY29uc3QgY2hhciAqdXJpU3Ry
aW5nLAotCQkJCQkJICBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCQkJCSAgR0Vycm9yICoqZXJy
b3IpOwotCi1XZWJLaXRTb3VwUmVxdWVzdCAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3Rf
dXJpIChXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCi0JCQkJCQkgICAgICBTb3VwVVJJ
ICp1cmksCi0JCQkJCQkgICAgICBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCQkJCSAgICAgIEdF
cnJvciAqKmVycm9yKTsKLQotdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29s
IChXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCi0JCQkJCSBjb25zdCBjaGFyICAqc2No
ZW1lLAotCQkJCQkgR1R5cGUgcmVxdWVzdF90eXBlKTsKLQotdm9pZCB3ZWJraXRfc291cF9yZXF1
ZXN0ZXJfcmVtb3ZlX3Byb3RvY29sIChXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCi0J
CQkJCSAgICBjb25zdCBjaGFyICAqc2NoZW1lKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8q
IFdFQktJVF9TT1VQX1JFUVVFU1RFUl9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZjhkZTIuLjAwMDAwMDAKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13
aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0v
KgotICogc291cC1jYWNoZS1wcml2YXRlLmg6Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSwgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9TT1VQX0NBQ0hFX1BSSVZBVEVfSAotI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9QUklWQVRFX0ggMQotCi0jaW5jbHVkZSAic291cC1jYWNoZS5oIgot
I2luY2x1ZGUgPGxpYnNvdXAvc291cC1tZXNzYWdlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotV2Vi
S2l0U291cENhY2hlUmVzcG9uc2Ugd2Via2l0X3NvdXBfY2FjaGVfaGFzX3Jlc3BvbnNlIChXZWJL
aXRTb3VwQ2FjaGUgICAqY2FjaGUsCi0JCQkJCQkJU291cE1lc3NhZ2UgKm1zZyk7Ci1HSW5wdXRT
dHJlYW0gKndlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAg
ICpjYWNoZSwKLQkJCQkJICAgICAgIFNvdXBNZXNzYWdlICptc2cpOwotV2ViS2l0U291cENhY2hl
YWJpbGl0eSAgd2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eSAoV2ViS2l0U291cENh
Y2hlICAgKmNhY2hlLAotCQkJCQkJCSAgICBTb3VwTWVzc2FnZSAqbXNnKTsKLVNvdXBNZXNzYWdl
ICp3ZWJraXRfc291cF9jYWNoZV9nZW5lcmF0ZV9jb25kaXRpb25hbF9yZXF1ZXN0IChXZWJLaXRT
b3VwQ2FjaGUgICAqY2FjaGUsCi0JCQkJCQkJICAgICBTb3VwTWVzc2FnZSAqb3JpZ2luYWwpOwot
Ci1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX1NPVVBfQ0FDSEVfUFJJVkFURV9IICov
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQv
c291cC1jYWNoZS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0
L3NvdXAtY2FjaGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk2NDI4ZC4uMDAw
MDAwMAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY3NyArMCwwIEBACi0vKiAtKi0gTW9kZTog
QzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAt
Ki0gKi8KLS8qCi0gKiBzb3VwLWNhY2hlLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotLyogVE9ETzoKLSAqIC0gTmVlZCB0byBob29rIHRoZSBmZWF0dXJlIGlu
IHRoZSBzeW5jIFNvdXBTZXNzaW9uLgotICogLSBOZWVkIG1vcmUgdGVzdHMuCi0gKi8KLQotI2lm
ZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVk
ZSAic291cC1jYWNoZS5oIgotI2luY2x1ZGUgInNvdXAtY2FjaGUtcHJpdmF0ZS5oIgotI2luY2x1
ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxzdGRs
aWIuaD4KLQotc3RhdGljIFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqd2Via2l0X3NvdXBf
Y2FjaGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZTsKLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3Vw
X2NhY2hlX3Nlc3Npb25fZmVhdHVyZV9pbml0IChTb3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2Ug
KmZlYXR1cmVfaW50ZXJmYWNlLCBncG9pbnRlciBpbnRlcmZhY2VfZGF0YSk7Ci0KLSNkZWZpbmUg
REVGQVVMVF9NQVhfU0laRSA1MCAqIDEwMjQgKiAxMDI0Ci0jZGVmaW5lIE1BWF9FTlRSWV9EQVRB
X1BFUkNFTlRBR0UgMTAgLyogUGVyY2VudGFnZSBvZiB0aGUgdG90YWwgc2l6ZQotCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNhY2hlIHRoYXQgY2FuIGJlCi0JICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsZWQgYnkgYSBzaW5nbGUgZW50cnkgKi8KLQot
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZUVudHJ5IHsKLQljaGFyICprZXk7Ci0JY2hh
ciAqZmlsZW5hbWU7Ci0JZ3VpbnQgZnJlc2huZXNzX2xpZmV0aW1lOwotCWdib29sZWFuIG11c3Rf
cmV2YWxpZGF0ZTsKLQlHU3RyaW5nICpkYXRhOwotCWdzaXplIHBvczsKLQlnc2l6ZSBsZW5ndGg7
Ci0JdGltZV90IGNvcnJlY3RlZF9pbml0aWFsX2FnZTsKLQl0aW1lX3QgcmVzcG9uc2VfdGltZTsK
LQlnYm9vbGVhbiB3cml0aW5nOwotCWdib29sZWFuIGRpcnR5OwotCWdib29sZWFuIGdvdF9ib2R5
OwotCWdib29sZWFuIGJlaW5nX3ZhbGlkYXRlZDsKLQlTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRl
cnM7Ci0JR091dHB1dFN0cmVhbSAqc3RyZWFtOwotCUdFcnJvciAqZXJyb3I7Ci0JZ3VpbnQgaGl0
czsKLQlHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlOwotfSBXZWJLaXRTb3VwQ2FjaGVFbnRyeTsK
LQotc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGVQcml2YXRlIHsKLQljaGFyICpjYWNoZV9kaXI7Ci0J
R0hhc2hUYWJsZSAqY2FjaGU7Ci0JZ3VpbnQgbl9wZW5kaW5nOwotCVNvdXBTZXNzaW9uICpzZXNz
aW9uOwotCVdlYktpdFNvdXBDYWNoZVR5cGUgY2FjaGVfdHlwZTsKLQlndWludCBzaXplOwotCWd1
aW50IG1heF9zaXplOwotCWd1aW50IG1heF9lbnRyeV9kYXRhX3NpemU7IC8qIENvbXB1dGVkIHZh
bHVlLiBIZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zICovCi0JR0xpc3QgKmxydV9zdGFydDsK
LX07Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlOwotCVdlYktp
dFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKLQlTb3VwTWVzc2FnZSAqbXNnOwotCWd1bG9uZyBnb3Rf
Y2h1bmtfaGFuZGxlcjsKLQlndWxvbmcgZ290X2JvZHlfaGFuZGxlcjsKLQlndWxvbmcgcmVzdGFy
dGVkX2hhbmRsZXI7Ci19IFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlOwotCi1lbnVtIHsK
LQlQUk9QXzAsCi0JUFJPUF9DQUNIRV9ESVIsCi0JUFJPUF9DQUNIRV9UWVBFCi19OwotCi0jZGVm
aW5lIFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUgKChvKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwgV2ViS2l0U291cENhY2hlUHJp
dmF0ZSkpCi0KLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChXZWJLaXRTb3VwQ2FjaGUsIHdlYmtp
dF9zb3VwX2NhY2hlLCBHX1RZUEVfT0JKRUNULAotCQkJIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAo
U09VUF9UWVBFX1NFU1NJT05fRkVBVFVSRSwKLQkJCQkJCXdlYmtpdF9zb3VwX2NhY2hlX3Nlc3Np
b25fZmVhdHVyZV9pbml0KSkKLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X3JlbW92ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgV2ViS2l0U291cENhY2hlRW50cnkg
KmVudHJ5KTsKLXN0YXRpYyB2b2lkIG1ha2Vfcm9vbV9mb3JfbmV3X2VudHJ5IChXZWJLaXRTb3Vw
Q2FjaGUgKmNhY2hlLCBndWludCBsZW5ndGhfdG9fYWRkKTsKLXN0YXRpYyBnYm9vbGVhbiBjYWNo
ZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQg
bGVuZ3RoX3RvX2FkZCk7Ci0KLXN0YXRpYyBXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5Ci1nZXRfY2Fj
aGVhYmlsaXR5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAqbXNnKQotewot
CVdlYktpdFNvdXBDYWNoZWFiaWxpdHkgY2FjaGVhYmlsaXR5OwotCWNvbnN0IGNoYXIgKmNhY2hl
X2NvbnRyb2w7Ci0KLQkvKiAxLiBUaGUgcmVxdWVzdCBtZXRob2QgbXVzdCBiZSBjYWNoZWFibGUg
Ki8KLQlpZiAobXNnLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfR0VUKQotCQljYWNoZWFiaWxpdHkg
PSBXRUJLSVRfU09VUF9DQUNIRV9DQUNIRUFCTEU7Ci0JZWxzZSBpZiAobXNnLT5tZXRob2QgPT0g
U09VUF9NRVRIT0RfSEVBRCB8fAotCQkgbXNnLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfVFJBQ0Ug
fHwKLQkJIG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0NPTk5FQ1QpCi0JCXJldHVybiBXRUJL
SVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKLQllbHNlCi0JCXJldHVybiAoV0VCS0lUX1NPVVBf
Q0FDSEVfVU5DQUNIRUFCTEUgfCBXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElEQVRFUyk7Ci0KLQlj
YWNoZV9jb250cm9sID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChtc2ctPnJlc3BvbnNlX2hl
YWRlcnMsICJDYWNoZS1Db250cm9sIik7Ci0JaWYgKGNhY2hlX2NvbnRyb2wpIHsKLQkJR0hhc2hU
YWJsZSAqaGFzaDsKLQkJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQ
X0NBQ0hFX0dFVF9QUklWQVRFIChjYWNoZSk7Ci0KLQkJaGFzaCA9IHNvdXBfaGVhZGVyX3BhcnNl
X3BhcmFtX2xpc3QgKGNhY2hlX2NvbnRyb2wpOwotCi0JCS8qIFNoYXJlZCBjYWNoZXMgTVVTVCBO
T1Qgc3RvcmUgcHJpdmF0ZSByZXNvdXJjZXMgKi8KLQkJaWYgKHByaXYtPmNhY2hlX3R5cGUgPT0g
V0VCS0lUX1NPVVBfQ0FDSEVfU0hBUkVEKSB7Ci0JCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9l
eHRlbmRlZCAoaGFzaCwgInByaXZhdGUiLCBOVUxMLCBOVUxMKSkgewotCQkJCXNvdXBfaGVhZGVy
X2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7Ci0JCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VO
Q0FDSEVBQkxFOwotCQkJfQotCQl9Ci0KLQkJLyogMi4gVGhlICduby1zdG9yZScgY2FjaGUgZGly
ZWN0aXZlIGRvZXMgbm90IGFwcGVhciBpbiB0aGUKLQkJICogaGVhZGVycwotCQkgKi8KLQkJaWYg
KGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJuby1zdG9yZSIsIE5VTEwsIE5V
TEwpKSB7Ci0JCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOwotCQkJcmV0dXJu
IFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOwotCQl9Ci0KLQkJLyogVGhpcyBkb2VzIG5v
dCBhcHBlYXIgaW4gc2VjdGlvbiAyLjEsIGJ1dCBJIHRoaW5rIGl0IG1ha2VzCi0JCSAqIHNlbnNl
IHRvIGNoZWNrIGl0IHRvbz8KLQkJICovCi0JCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVu
ZGVkIChoYXNoLCAibm8tY2FjaGUiLCBOVUxMLCBOVUxMKSkgewotCQkJc291cF9oZWFkZXJfZnJl
ZV9wYXJhbV9saXN0IChoYXNoKTsKLQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hF
QUJMRTsKLQkJfQotCi0JCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7Ci0JfQot
Ci0Jc3dpdGNoIChtc2ctPnN0YXR1c19jb2RlKSB7Ci0JY2FzZSBTT1VQX1NUQVRVU19QQVJUSUFM
X0NPTlRFTlQ6Ci0JCS8qIFdlIGRvbid0IGNhY2hlIHBhcnRpYWwgcmVzcG9uc2VzLCBidXQgdGhl
eSBvbmx5Ci0JCSAqIGludmFsaWRhdGUgY2FjaGVkIGZ1bGwgcmVzcG9uc2VzIGlmIHRoZSBoZWFk
ZXJzCi0JCSAqIGRvbid0IG1hdGNoLgotCQkgKi8KLQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NP
VVBfQ0FDSEVfVU5DQUNIRUFCTEU7Ci0JCWJyZWFrOwotCi0JY2FzZSBTT1VQX1NUQVRVU19OT1Rf
TU9ESUZJRUQ6Ci0JCS8qIEEgMzA0IHJlc3BvbnNlIHZhbGlkYXRlcyBhbiBleGlzdGluZyBjYWNo
ZSBlbnRyeSAqLwotCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9WQUxJREFURVM7
Ci0JCWJyZWFrOwotCi0JY2FzZSBTT1VQX1NUQVRVU19NVUxUSVBMRV9DSE9JQ0VTOgotCWNhc2Ug
U09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFk6Ci0JY2FzZSBTT1VQX1NUQVRVU19HT05FOgot
CQkvKiBGSVhNRTogY2FjaGVhYmxlIHVubGVzcyBpbmRpY2F0ZWQgb3RoZXJ3aXNlICovCi0JCWNh
Y2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOwotCQlicmVhazsKLQot
CWNhc2UgU09VUF9TVEFUVVNfRk9VTkQ6Ci0JY2FzZSBTT1VQX1NUQVRVU19URU1QT1JBUllfUkVE
SVJFQ1Q6Ci0JCS8qIEZJWE1FOiBjYWNoZWFibGUgaWYgZXhwbGljaXRseSBpbmRpY2F0ZWQgKi8K
LQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7Ci0JCWJyZWFr
OwotCi0JY2FzZSBTT1VQX1NUQVRVU19TRUVfT1RIRVI6Ci0JY2FzZSBTT1VQX1NUQVRVU19GT1JC
SURERU46Ci0JY2FzZSBTT1VQX1NUQVRVU19OT1RfRk9VTkQ6Ci0JY2FzZSBTT1VQX1NUQVRVU19N
RVRIT0RfTk9UX0FMTE9XRUQ6Ci0JCXJldHVybiAoV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFC
TEUgfCBXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElEQVRFUyk7Ci0KLQlkZWZhdWx0OgotCQkvKiBB
bnkgNXh4IHN0YXR1cyBvciBhbnkgNHh4IHN0YXR1cyBub3QgaGFuZGxlZCBhYm92ZQotCQkgKiBp
cyB1bmNhY2hlYWJsZSBidXQgZG9lc24ndCBicmVhayB0aGUgY2FjaGUuCi0JCSAqLwotCQlpZiAo
KG1zZy0+c3RhdHVzX2NvZGUgPj0gU09VUF9TVEFUVVNfQkFEX1JFUVVFU1QgJiYKLQkJICAgICBt
c2ctPnN0YXR1c19jb2RlIDw9IFNPVVBfU1RBVFVTX0ZBSUxFRF9ERVBFTkRFTkNZKSB8fAotCQkg
ICAgbXNnLT5zdGF0dXNfY29kZSA+PSBTT1VQX1NUQVRVU19JTlRFUk5BTF9TRVJWRVJfRVJST1Ip
Ci0JCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7Ci0KLQkJLyogQW4gdW5y
ZWNvZ25pemVkIDJ4eCwgM3h4LCBvciA0eHggcmVzcG9uc2UgYnJlYWtzCi0JCSAqIHRoZSBjYWNo
ZS4KLQkJICovCi0JCWlmICgobXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1BBUlRJQUxf
Q09OVEVOVCAmJgotCQkgICAgIG1zZy0+c3RhdHVzX2NvZGUgPCBTT1VQX1NUQVRVU19NVUxUSVBM
RV9DSE9JQ0VTKSB8fAotCQkgICAgKG1zZy0+c3RhdHVzX2NvZGUgPiBTT1VQX1NUQVRVU19URU1Q
T1JBUllfUkVESVJFQ1QgJiYKLQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFUVVNf
SU5URVJOQUxfU0VSVkVSX0VSUk9SKSkKLQkJCXJldHVybiAoV0VCS0lUX1NPVVBfQ0FDSEVfVU5D
QUNIRUFCTEUgfCBXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElEQVRFUyk7Ci0JCWJyZWFrOwotCX0K
LQotCXJldHVybiBjYWNoZWFiaWxpdHk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9j
YWNoZV9lbnRyeV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksIGdib29sZWFuIHB1
cmdlKQotewotCWlmIChwdXJnZSkgewotCQlHRmlsZSAqZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3Bh
dGggKGVudHJ5LT5maWxlbmFtZSk7Ci0JCWdfZmlsZV9kZWxldGUgKGZpbGUsIE5VTEwsIE5VTEwp
OwotCQlnX29iamVjdF91bnJlZiAoZmlsZSk7Ci0JfQotCi0JZ19mcmVlIChlbnRyeS0+ZmlsZW5h
bWUpOwotCWVudHJ5LT5maWxlbmFtZSA9IE5VTEw7Ci0JZ19mcmVlIChlbnRyeS0+a2V5KTsKLQll
bnRyeS0+a2V5ID0gTlVMTDsKLQotCWlmIChlbnRyeS0+aGVhZGVycykgewotCQlzb3VwX21lc3Nh
Z2VfaGVhZGVyc19mcmVlIChlbnRyeS0+aGVhZGVycyk7Ci0JCWVudHJ5LT5oZWFkZXJzID0gTlVM
TDsKLQl9Ci0KLQlpZiAoZW50cnktPmRhdGEpIHsKLQkJZ19zdHJpbmdfZnJlZSAoZW50cnktPmRh
dGEsIFRSVUUpOwotCQllbnRyeS0+ZGF0YSA9IE5VTEw7Ci0JfQotCWlmIChlbnRyeS0+ZXJyb3Ip
IHsKLQkJZ19lcnJvcl9mcmVlIChlbnRyeS0+ZXJyb3IpOwotCQllbnRyeS0+ZXJyb3IgPSBOVUxM
OwotCX0KLQlpZiAoZW50cnktPmNhbmNlbGxhYmxlKSB7Ci0JCWdfb2JqZWN0X3VucmVmIChlbnRy
eS0+Y2FuY2VsbGFibGUpOwotCQllbnRyeS0+Y2FuY2VsbGFibGUgPSBOVUxMOwotCX0KLQotCWdf
c2xpY2VfZnJlZSAoV2ViS2l0U291cENhY2hlRW50cnksIGVudHJ5KTsKLX0KLQotc3RhdGljIHZv
aWQKLWNvcHlfaGVhZGVycyAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIFNv
dXBNZXNzYWdlSGVhZGVycyAqaGVhZGVycykKLXsKLQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBl
bmQgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQKLXVwZGF0ZV9oZWFk
ZXJzIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgU291cE1lc3NhZ2VIZWFk
ZXJzICpoZWFkZXJzKQotewotCWlmIChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGhlYWRlcnMs
IG5hbWUpKQotCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlIChoZWFkZXJzLCBuYW1lLCB2
YWx1ZSk7Ci0JZWxzZQotCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKGhlYWRlcnMsIG5h
bWUsIHZhbHVlKTsKLX0KLQotc3RhdGljIGd1aW50Ci13ZWJraXRfc291cF9jYWNoZV9lbnRyeV9n
ZXRfY3VycmVudF9hZ2UgKFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSkKLXsKLQl0aW1lX3Qg
bm93ID0gdGltZSAoTlVMTCk7Ci0JdGltZV90IHJlc2lkZW50X3RpbWU7Ci0KLQlyZXNpZGVudF90
aW1lID0gbm93IC0gZW50cnktPnJlc3BvbnNlX3RpbWU7Ci0JcmV0dXJuIGVudHJ5LT5jb3JyZWN0
ZWRfaW5pdGlhbF9hZ2UgKyByZXNpZGVudF90aW1lOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X2lzX2ZyZXNoX2Vub3VnaCAoV2ViS2l0U291cENhY2hlRW50
cnkgKmVudHJ5LCBnaW50IG1pbl9mcmVzaCkKLXsKLQlndWludCBsaW1pdCA9IChtaW5fZnJlc2gg
PT0gLTEpID8gd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChlbnRyeSkg
OiAoZ3VpbnQpIG1pbl9mcmVzaDsKLQlyZXR1cm4gZW50cnktPmZyZXNobmVzc19saWZldGltZSA+
IGxpbWl0OwotfQotCi1zdGF0aWMgY2hhciAqCi1zb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAo
U291cE1lc3NhZ2UgKm1zZykKLXsKLQlTb3VwVVJJICp1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3Vy
aSAobXNnKTsKLQlyZXR1cm4gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZBTFNFKTsKLX0KLQot
c3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3NldF9mcmVzaG5lc3MgKFdlYktp
dFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291cENhY2hl
ICpjYWNoZSkKLXsKLQljb25zdCBjaGFyICpjYWNoZV9jb250cm9sOwotCWNvbnN0IGNoYXIgKmV4
cGlyZXMsICpkYXRlLCAqbGFzdF9tb2RpZmllZDsKLQotCWNhY2hlX2NvbnRyb2wgPSBzb3VwX21l
c3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOwotCWlm
IChjYWNoZV9jb250cm9sKSB7Ci0JCWNvbnN0IGNoYXIgKm1heF9hZ2UsICpzX21heGFnZTsKLQkJ
Z2ludDY0IGZyZXNobmVzc19saWZldGltZSA9IDA7Ci0JCUdIYXNoVGFibGUgKmhhc2g7Ci0JCVdl
YktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFU
RSAoY2FjaGUpOwotCi0JCWhhc2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNo
ZV9jb250cm9sKTsKLQotCQkvKiBTaG91bGQgd2UgcmUtdmFsaWRhdGUgdGhlIGVudHJ5IHdoZW4g
aXQgZ29lcyBzdGFsZSAqLwotCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRlID0gZ19oYXNoX3RhYmxl
X2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm11c3QtcmV2YWxpZGF0ZSIsIE5VTEwsIE5VTEwpOwot
Ci0JCS8qIFNlY3Rpb24gMi4zLjEgKi8KLQkJaWYgKHByaXYtPmNhY2hlX3R5cGUgPT0gV0VCS0lU
X1NPVVBfQ0FDSEVfU0hBUkVEKSB7Ci0JCQlzX21heGFnZSA9IGdfaGFzaF90YWJsZV9sb29rdXAg
KGhhc2gsICJzLW1heGFnZSIpOwotCQkJaWYgKHNfbWF4YWdlKSB7Ci0JCQkJZnJlc2huZXNzX2xp
ZmV0aW1lID0gZ19hc2NpaV9zdHJ0b2xsIChzX21heGFnZSwgTlVMTCwgMTApOwotCQkJCWlmIChm
cmVzaG5lc3NfbGlmZXRpbWUpIHsKLQkJCQkJLyogSW1wbGllcyBwcm94eS1yZXZhbGlkYXRlLiBU
T0RPOiBpcyBpdCB0cnVlPyAqLwotCQkJCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRlID0gVFJVRTsK
LQkJCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0IChoYXNoKTsKLQkJCQkJcmV0dXJuOwot
CQkJCX0KLQkJCX0KLQkJfQotCi0JCS8qIElmICdtYXgtYWdlJyBjYWNoZSBkaXJlY3RpdmUgaXMg
cHJlc2VudCwgdXNlIHRoYXQgKi8KLQkJbWF4X2FnZSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGhh
c2gsICJtYXgtYWdlIik7Ci0JCWlmIChtYXhfYWdlKQotCQkJZnJlc2huZXNzX2xpZmV0aW1lID0g
Z19hc2NpaV9zdHJ0b2xsIChtYXhfYWdlLCBOVUxMLCAxMCk7Ci0KLQkJaWYgKGZyZXNobmVzc19s
aWZldGltZSkgewotCQkJZW50cnktPmZyZXNobmVzc19saWZldGltZSA9IChndWludClNSU4gKGZy
ZXNobmVzc19saWZldGltZSwgR19NQVhVSU5UMzIpOwotCQkJc291cF9oZWFkZXJfZnJlZV9wYXJh
bV9saXN0IChoYXNoKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCXNvdXBfaGVhZGVyX2ZyZWVfcGFy
YW1fbGlzdCAoaGFzaCk7Ci0JfQotCi0JLyogSWYgdGhlICdFeHBpcmVzJyByZXNwb25zZSBoZWFk
ZXIgaXMgcHJlc2VudCwgdXNlIGl0cyB2YWx1ZQotCSAqIG1pbnVzIHRoZSB2YWx1ZSBvZiB0aGUg
J0RhdGUnIHJlc3BvbnNlIGhlYWRlcgotCSAqLwotCWV4cGlyZXMgPSBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRXhwaXJlcyIpOwotCWRhdGUgPSBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRGF0ZSIpOwotCWlmIChleHBpcmVzICYm
IGRhdGUpIHsKLQkJU291cERhdGUgKmV4cGlyZXNfZCwgKmRhdGVfZDsKLQkJdGltZV90IGV4cGly
ZXNfdCwgZGF0ZV90OwotCi0JCWV4cGlyZXNfZCA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9zdHJpbmcg
KGV4cGlyZXMpOwotCQlpZiAoZXhwaXJlc19kKSB7Ci0JCQlkYXRlX2QgPSBzb3VwX2RhdGVfbmV3
X2Zyb21fc3RyaW5nIChkYXRlKTsKLQotCQkJZXhwaXJlc190ID0gc291cF9kYXRlX3RvX3RpbWVf
dCAoZXhwaXJlc19kKTsKLQkJCWRhdGVfdCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKGRhdGVfZCk7
Ci0KLQkJCXNvdXBfZGF0ZV9mcmVlIChleHBpcmVzX2QpOwotCQkJc291cF9kYXRlX2ZyZWUgKGRh
dGVfZCk7Ci0KLQkJCWlmIChleHBpcmVzX3QgJiYgZGF0ZV90KSB7Ci0JCQkJZW50cnktPmZyZXNo
bmVzc19saWZldGltZSA9IChndWludClNQVggKGV4cGlyZXNfdCAtIGRhdGVfdCwgMCk7Ci0JCQkJ
cmV0dXJuOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogSWYgRXhwaXJlcyBpcyBub3QgYSB2YWxp
ZCBkYXRlIHdlIHNob3VsZAotCQkJICAgdHJlYXQgaXQgYXMgYWxyZWFkeSBleHBpcmVkLCBzZWUg
c2VjdGlvbgotCQkJICAgMy4zICovCi0JCQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsK
LQkJCXJldHVybjsKLQkJfQotCX0KLQotCS8qIE90aGVyd2lzZSBhbiBoZXVyaXN0aWMgbWF5IGJl
IHVzZWQgKi8KLQotCS8qIEhldXJpc3RpY3MgTVVTVCBOT1QgYmUgdXNlZCB3aXRoIHRoZXNlIHN0
YXR1cyBjb2RlcwotCSAgIChzZWN0aW9uIDIuMy4xLjEpICovCi0JaWYgKG1zZy0+c3RhdHVzX2Nv
ZGUgIT0gU09VUF9TVEFUVVNfT0sgJiYKLQkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NU
QVRVU19OT05fQVVUSE9SSVRBVElWRSAmJgotCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBf
U1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAmJgotCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBf
U1RBVFVTX01VTFRJUExFX0NIT0lDRVMgJiYKLQkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQ
X1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSAmJgotCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNP
VVBfU1RBVFVTX0dPTkUpCi0JCWdvdG8gZXhwaXJlOwotCi0JLyogVE9ETzogYXR0YWNoIHdhcm5p
bmcgMTEzIGlmIHJlc3BvbnNlJ3MgY3VycmVudF9hZ2UgaXMgbW9yZQotCSAgIHRoYW4gMjRoIChz
ZWN0aW9uIDIuMy4xLjEpIHdoZW4gdXNpbmcgaGV1cmlzdGljcyAqLwotCi0JLyogTGFzdC1Nb2Rp
ZmllZCBiYXNlZCBoZXVyaXN0aWMgKi8KLQlsYXN0X21vZGlmaWVkID0gc291cF9tZXNzYWdlX2hl
YWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkxhc3QtTW9kaWZpZWQiKTsKLQlpZiAobGFzdF9t
b2RpZmllZCkgewotCQlTb3VwRGF0ZSAqc291cF9kYXRlOwotCQl0aW1lX3Qgbm93LCBsYXN0X21v
ZGlmaWVkX3Q7Ci0KLQkJc291cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAobGFz
dF9tb2RpZmllZCk7Ci0JCWxhc3RfbW9kaWZpZWRfdCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKHNv
dXBfZGF0ZSk7Ci0JCW5vdyA9IHRpbWUgKE5VTEwpOwotCi0jZGVmaW5lIEhFVVJJU1RJQ19GQUNU
T1IgMC4xIC8qIEZyb20gU2VjdGlvbiAyLjMuMS4xICovCi0KLQkJZW50cnktPmZyZXNobmVzc19s
aWZldGltZSA9IE1BWCAoMCwgKG5vdyAtIGxhc3RfbW9kaWZpZWRfdCkgKiBIRVVSSVNUSUNfRkFD
VE9SKTsKLQkJc291cF9kYXRlX2ZyZWUgKHNvdXBfZGF0ZSk7Ci0JfQotCi0JcmV0dXJuOwotCi0g
ZXhwaXJlOgotCS8qIElmIGFsbCBlbHNlIGZhaWxzLCBtYWtlIHRoZSBlbnRyeSBleHBpcmUgaW1t
ZWRpYXRlbHkgKi8KLQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsKLX0KLQotc3RhdGlj
IFdlYktpdFNvdXBDYWNoZUVudHJ5ICoKLXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZywgdGltZV90IHJlcXVlc3RfdGlt
ZSwgdGltZV90IHJlc3BvbnNlX3RpbWUpCi17Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5
OwotCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVyczsKLQljb25zdCBjaGFyICpkYXRlOwotCWNo
YXIgKm1kNTsKLQotCWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSk7
Ci0JZW50cnktPmRpcnR5ID0gRkFMU0U7Ci0JZW50cnktPndyaXRpbmcgPSBGQUxTRTsKLQllbnRy
eS0+Z290X2JvZHkgPSBGQUxTRTsKLQllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7Ci0J
ZW50cnktPmRhdGEgPSBnX3N0cmluZ19uZXcgKE5VTEwpOwotCWVudHJ5LT5wb3MgPSAwOwotCWVu
dHJ5LT5lcnJvciA9IE5VTEw7Ci0KLQkvKiBrZXkgJiBmaWxlbmFtZSAqLwotCWVudHJ5LT5rZXkg
PSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKLQltZDUgPSBnX2NvbXB1dGVfY2hl
Y2tzdW1fZm9yX3N0cmluZyAoR19DSEVDS1NVTV9NRDUsIGVudHJ5LT5rZXksIC0xKTsKLQllbnRy
eS0+ZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChjYWNoZS0+cHJpdi0+Y2FjaGVfZGlyLCBt
ZDUsIE5VTEwpOwotCWdfZnJlZSAobWQ1KTsKLQotCS8qIEhlYWRlcnMgKi8KLQloZWFkZXJzID0g
c291cF9tZXNzYWdlX2hlYWRlcnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQT05TRSk7
Ci0Jc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAot
CQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyljb3B5X2hlYWRlcnMsCi0J
CQkJICAgICAgaGVhZGVycyk7Ci0JZW50cnktPmhlYWRlcnMgPSBoZWFkZXJzOwotCi0JLyogTFJV
IGxpc3QgKi8KLQllbnRyeS0+aGl0cyA9IDA7Ci0KLQkvKiBTZWN0aW9uIDIuMy4xLCBGcmVzaG5l
c3MgTGlmZXRpbWUgKi8KLQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9zZXRfZnJlc2huZXNzIChl
bnRyeSwgbXNnLCBjYWNoZSk7Ci0KLQkvKiBTZWN0aW9uIDIuMy4yLCBDYWxjdWxhdGluZyBBZ2Ug
Ki8KLQlkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkRh
dGUiKTsKLQotCWlmIChkYXRlKSB7Ci0JCVNvdXBEYXRlICpzb3VwX2RhdGU7Ci0JCWNvbnN0IGNo
YXIgKmFnZTsKLQkJdGltZV90IGRhdGVfdmFsdWUsIGFwcGFyZW50X2FnZSwgY29ycmVjdGVkX3Jl
Y2VpdmVkX2FnZSwgcmVzcG9uc2VfZGVsYXksIGFnZV92YWx1ZSA9IDA7Ci0KLQkJc291cF9kYXRl
ID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZGF0ZSk7Ci0JCWRhdGVfdmFsdWUgPSBzb3Vw
X2RhdGVfdG9fdGltZV90IChzb3VwX2RhdGUpOwotCQlzb3VwX2RhdGVfZnJlZSAoc291cF9kYXRl
KTsKLQotCQlhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAi
QWdlIik7Ci0JCWlmIChhZ2UpCi0JCQlhZ2VfdmFsdWUgPSBnX2FzY2lpX3N0cnRvbGwgKGFnZSwg
TlVMTCwgMTApOwotCi0JCWVudHJ5LT5yZXNwb25zZV90aW1lID0gcmVzcG9uc2VfdGltZTsKLQkJ
YXBwYXJlbnRfYWdlID0gTUFYICgwLCBlbnRyeS0+cmVzcG9uc2VfdGltZSAtIGRhdGVfdmFsdWUp
OwotCQljb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlID0gTUFYIChhcHBhcmVudF9hZ2UsIGFnZV92YWx1
ZSk7Ci0JCXJlc3BvbnNlX2RlbGF5ID0gZW50cnktPnJlc3BvbnNlX3RpbWUgLSByZXF1ZXN0X3Rp
bWU7Ci0JCWVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UgPSBjb3JyZWN0ZWRfcmVjZWl2ZWRf
YWdlICsgcmVzcG9uc2VfZGVsYXk7Ci0JfSBlbHNlIHsKLQkJLyogSXMgdGhpcyBjb3JyZWN0ID8g
Ki8KLQkJZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSA9IHRpbWUgKE5VTEwpOwotCX0KLQot
CXJldHVybiBlbnRyeTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX3dyaXRp
bmdfZml4dHVyZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkK
LXsKLQkvKiBGcmVlIGZpeHR1cmUuIEFuZCBkaXNjb25uZWN0IHNpZ25hbHMsIHdlIGRvbid0IHdh
bnQgdG8KLQkgICBsaXN0ZW4gdG8gbW9yZSBTb3VwTWVzc2FnZSBldmVudHMgYXMgd2UncmUgZmlu
aXNoZWQgd2l0aAotCSAgIHRoaXMgcmVzb3VyY2UgKi8KLQlpZiAoZ19zaWduYWxfaGFuZGxlcl9p
c19jb25uZWN0ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIpKQot
CQlnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290
X2NodW5rX2hhbmRsZXIpOwotCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4
dHVyZS0+bXNnLCBmaXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyKSkKLQkJZ19zaWduYWxfaGFuZGxl
cl9kaXNjb25uZWN0IChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPmdvdF9ib2R5X2hhbmRsZXIpOwot
CWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJl
LT5yZXN0YXJ0ZWRfaGFuZGxlcikpCi0JCWdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoZml4
dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcik7Ci0JZ19vYmplY3RfdW5yZWYg
KGZpeHR1cmUtPm1zZyk7Ci0JZ19vYmplY3RfdW5yZWYgKGZpeHR1cmUtPmNhY2hlKTsKLQlnX3Ns
aWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlLCBmaXh0dXJlKTsKLX0KLQot
c3RhdGljIHZvaWQKLWNsb3NlX3JlYWR5X2NiIChHT2JqZWN0ICpzb3VyY2UsIEdBc3luY1Jlc3Vs
dCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLQlX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKLQlXZWJLaXRTb3Vw
Q2FjaGUgKmNhY2hlID0gZml4dHVyZS0+Y2FjaGU7Ci0JR091dHB1dFN0cmVhbSAqc3RyZWFtID0g
R19PVVRQVVRfU1RSRUFNIChzb3VyY2UpOwotCWdvZmZzZXQgY29udGVudF9sZW5ndGg7Ci0KLQln
X3dhcm5faWZfZmFpbCAoZW50cnktPmVycm9yID09IE5VTEwpOwotCi0JLyogRklYTUU6IHdoYXQg
ZG8gd2UgZG8gb24gZXJyb3IgPyAqLwotCi0JaWYgKHN0cmVhbSkgewotCQlnX291dHB1dF9zdHJl
YW1fY2xvc2VfZmluaXNoIChzdHJlYW0sIHJlc3VsdCwgTlVMTCk7Ci0JCWdfb2JqZWN0X3VucmVm
IChzdHJlYW0pOwotCX0KLQllbnRyeS0+c3RyZWFtID0gTlVMTDsKLQotCWNvbnRlbnRfbGVuZ3Ro
ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVy
cyk7Ci0KLQkvKiBJZiB0aGUgcHJvY2VzcyB3YXMgY2FuY2VsbGVkLCB0aGVuIGRlbGV0ZSB0aGUg
ZW50cnkgZnJvbQotCSAgIHRoZSBjYWNoZS4gRG8gaXQgYWxzbyBpZiB0aGUgc2l6ZSBvZiBhIGNo
dW5rZWQgcmVzb3VyY2UgaXMKLQkgICB0b28gbXVjaCBmb3IgdGhlIGNhY2hlICovCi0JaWYgKGdf
Y2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7Ci0JCWVudHJ5
LT5kaXJ0eSA9IEZBTFNFOwotCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hl
LCBlbnRyeSk7Ci0JCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsK
LQkJZW50cnkgPSBOVUxMOwotCX0gZWxzZSBpZiAoKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9l
bmNvZGluZyAoZW50cnktPmhlYWRlcnMpID09IFNPVVBfRU5DT0RJTkdfQ0hVTktFRCkgfHwKLQkJ
ICAgZW50cnktPmxlbmd0aCAhPSAoZ3NpemUpIGNvbnRlbnRfbGVuZ3RoKSB7Ci0JCS8qKiBUd28g
b3B0aW9ucyBoZXJlOgotCQkgKgotCQkgKiAxLiAiY2h1bmtlZCIgZGF0YSwgZW50cnkgd2FzIHRl
bXBvcmFyaWx5IGFkZGVkIHRvCi0JCSAqIGNhY2hlIChhcyBjb250ZW50LWxlbmd0aCBpcyAwKSBh
bmQgbm93IHRoYXQgd2UgaGF2ZQotCQkgKiB0aGUgYWN0dWFsIHNpemUgd2UgaGF2ZSB0byBldmFs
dWF0ZSBpZiB3ZSB3YW50IGl0Ci0JCSAqIGluIHRoZSBjYWNoZSBvciBub3QKLQkJICoKLQkJICog
Mi4gQ29udGVudC1MZW5ndGggaGFzIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gYWN0dWFsCi0JCSAq
IGxlbmd0aCwgbWVhbnMgdGhhdCB0aGUgY29udGVudCB3YXMgZW5jb2RlZCBmb3IKLQkJICogdHJh
bnNtaXNzaW9uICh0eXBpY2FsbHkgY29tcHJlc3NlZCkgYW5kIHRodXMgd2UKLQkJICogaGF2ZSB0
byBzdWJzdHJhY3QgdGhlIGNvbnRlbnQtbGVuZ3RoIHZhbHVlIHRoYXQgd2FzCi0JCSAqIGFkZGVk
IHRvIHRoZSBjYWNoZSBhbmQgYWRkIHRoZSB1bmVuY29kZWQgbGVuZ3RoCi0JCSAqKi8KLQkJZ2lu
dCBsZW5ndGhfdG9fYWRkID0gZW50cnktPmxlbmd0aCAtIGNvbnRlbnRfbGVuZ3RoOwotCi0JCS8q
IE1ha2Ugcm9vbSBpbiBjYWNoZSBpZiBuZWVkZWQgKi8KLQkJaWYgKGNhY2hlX2FjY2VwdHNfZW50
cmllc19vZl9zaXplIChjYWNoZSwgbGVuZ3RoX3RvX2FkZCkpIHsKLQkJCW1ha2Vfcm9vbV9mb3Jf
bmV3X2VudHJ5IChjYWNoZSwgbGVuZ3RoX3RvX2FkZCk7Ci0KLQkJCWNhY2hlLT5wcml2LT5zaXpl
ICs9IGxlbmd0aF90b19hZGQ7Ci0JCX0gZWxzZSB7Ci0JCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsK
LQkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIGVudHJ5KTsKLQkJCXdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKLQkJCWVudHJ5ID0gTlVM
TDsKLQkJfQotCX0KLQotCWlmIChlbnRyeSkgewotCQkvKiBHZXQgcmlkIG9mIHRoZSBHU3RyaW5n
IGluIG1lbW9yeSBmb3IgdGhlIHJlc291cmNlIG5vdyAqLwotCQlpZiAoZW50cnktPmRhdGEpIHsK
LQkJCWdfc3RyaW5nX2ZyZWUgKGVudHJ5LT5kYXRhLCBUUlVFKTsKLQkJCWVudHJ5LT5kYXRhID0g
TlVMTDsKLQkJfQotCi0JCWVudHJ5LT5kaXJ0eSA9IEZBTFNFOwotCQllbnRyeS0+d3JpdGluZyA9
IEZBTFNFOwotCQllbnRyeS0+Z290X2JvZHkgPSBGQUxTRTsKLQkJZW50cnktPnBvcyA9IDA7Ci0K
LQkJZ19vYmplY3RfdW5yZWYgKGVudHJ5LT5jYW5jZWxsYWJsZSk7Ci0JCWVudHJ5LT5jYW5jZWxs
YWJsZSA9IE5VTEw7Ci0JfQotCi0JY2FjaGUtPnByaXYtPm5fcGVuZGluZy0tOwotCi0JLyogRnJl
ZXMgKi8KLQl3ZWJraXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoZml4dHVyZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkCi13cml0ZV9yZWFkeV9jYiAoR09iamVjdCAqc291cmNlLCBHQXN5
bmNSZXN1bHQgKnJlc3VsdCwgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUp
Ci17Ci0JR091dHB1dFN0cmVhbSAqc3RyZWFtID0gR19PVVRQVVRfU1RSRUFNIChzb3VyY2UpOwot
CUdFcnJvciAqZXJyb3IgPSBOVUxMOwotCWdzc2l6ZSB3cml0ZV9zaXplOwotCVdlYktpdFNvdXBD
YWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5OwotCi0JaWYgKGdfY2FuY2VsbGFibGVf
aXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7Ci0JCWdfb3V0cHV0X3N0cmVhbV9j
bG9zZV9hc3luYyAoc3RyZWFtLAotCQkJCQkgICAgIEdfUFJJT1JJVFlfTE9XLAotCQkJCQkgICAg
IGVudHJ5LT5jYW5jZWxsYWJsZSwKLQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9z
ZV9yZWFkeV9jYiwKLQkJCQkJICAgICBmaXh0dXJlKTsKLQkJcmV0dXJuOwotCX0KLQotCXdyaXRl
X3NpemUgPSBnX291dHB1dF9zdHJlYW1fd3JpdGVfZmluaXNoIChzdHJlYW0sIHJlc3VsdCwgJmVy
cm9yKTsKLQlpZiAod3JpdGVfc2l6ZSA8PSAwIHx8IGVycm9yKSB7Ci0JCWlmIChlcnJvcikKLQkJ
CWVudHJ5LT5lcnJvciA9IGVycm9yOwotCQlnX291dHB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKHN0
cmVhbSwKLQkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKLQkJCQkJICAgICBlbnRyeS0+Y2FuY2Vs
bGFibGUsCi0JCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCi0J
CQkJCSAgICAgZml4dHVyZSk7Ci0JCS8qIEZJWE1FOiBXZSBzaG91bGQgY29tcGxldGVseSBzdG9w
IGNhY2hpbmcgdGhlCi0JCSAgIHJlc291cmNlIGF0IHRoaXMgcG9pbnQgKi8KLQl9IGVsc2Ugewot
CQllbnRyeS0+cG9zICs9IHdyaXRlX3NpemU7Ci0KLQkJLyogQXJlIHdlIHN0aWxsIHdyaXRpbmcg
YW5kIGlzIHRoZXJlIG5ldyBkYXRhIHRvIHdyaXRlCi0JCSAgIGFscmVhZHkgPyAqLwotCQlpZiAo
ZW50cnktPmRhdGEgJiYgZW50cnktPnBvcyA8IGVudHJ5LT5kYXRhLT5sZW4pIHsKLQkJCWdfb3V0
cHV0X3N0cmVhbV93cml0ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKLQkJCQkJCSAgICAgZW50cnkt
PmRhdGEtPnN0ciArIGVudHJ5LT5wb3MsCi0JCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5sZW4gLSBl
bnRyeS0+cG9zLAotCQkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKLQkJCQkJCSAgICAgZW50cnkt
PmNhbmNlbGxhYmxlLAotCQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayl3cml0ZV9yZWFk
eV9jYiwKLQkJCQkJCSAgICAgZml4dHVyZSk7Ci0JCX0gZWxzZSB7Ci0JCQllbnRyeS0+d3JpdGlu
ZyA9IEZBTFNFOwotCi0JCQlpZiAoZW50cnktPmdvdF9ib2R5KSB7Ci0JCQkJLyogSWYgd2UgYWxy
ZWFkeSByZWNlaXZlZCAnZ290LWJvZHknCi0JCQkJICAgYW5kIHdlIGhhdmUgd3JpdHRlbiBhbGwg
dGhlIGRhdGEsCi0JCQkJICAgd2UgY2FuIGNsb3NlIHRoZSBzdHJlYW0gKi8KLQkJCQlnX291dHB1
dF9zdHJlYW1fY2xvc2VfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCi0JCQkJCQkJICAgICBHX1BSSU9S
SVRZX0xPVywKLQkJCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKLQkJCQkJCQkgICAgIChH
QXN5bmNSZWFkeUNhbGxiYWNrKWNsb3NlX3JlYWR5X2NiLAotCQkJCQkJCSAgICAgZml4dHVyZSk7
Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1tc2dfZ290X2NodW5rX2NiIChTb3Vw
TWVzc2FnZSAqbXNnLCBTb3VwQnVmZmVyICpjaHVuaywgV2ViS2l0U291cENhY2hlV3JpdGluZ0Zp
eHR1cmUgKmZpeHR1cmUpCi17Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVy
ZS0+ZW50cnk7Ci0KLQlnX3JldHVybl9pZl9mYWlsIChjaHVuay0+ZGF0YSAmJiBjaHVuay0+bGVu
Z3RoKTsKLQlnX3JldHVybl9pZl9mYWlsIChlbnRyeSk7Ci0KLQkvKiBJZ25vcmUgdGhpcyBpZiB0
aGUgd3JpdGluZyBvciBhcHBlbmRpbmcgd2FzIGNhbmNlbGxlZCAqLwotCWlmICghZ19jYW5jZWxs
YWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsKLQkJZ19zdHJpbmdfYXBw
ZW5kX2xlbiAoZW50cnktPmRhdGEsIGNodW5rLT5kYXRhLCBjaHVuay0+bGVuZ3RoKTsKLQkJZW50
cnktPmxlbmd0aCA9IGVudHJ5LT5kYXRhLT5sZW47Ci0KLQkJaWYgKCFjYWNoZV9hY2NlcHRzX2Vu
dHJpZXNfb2Zfc2l6ZSAoZml4dHVyZS0+Y2FjaGUsIGVudHJ5LT5sZW5ndGgpKSB7Ci0JCQkvKiBR
dWlja2x5IGNhbmNlbCB0aGUgY2FjaGluZyBvZiB0aGUgcmVzb3VyY2UgKi8KLQkJCWdfY2FuY2Vs
bGFibGVfY2FuY2VsIChlbnRyeS0+Y2FuY2VsbGFibGUpOwotCQl9Ci0JfQotCi0JLyogRklYTUU6
IHJlbW92ZSB0aGUgZXJyb3IgY2hlY2sgd2hlbiB3ZSBjYW5jZWwgdGhlIGNhY2hpbmcgYXQKLQkg
ICB0aGUgZmlyc3Qgd3JpdGUgZXJyb3IgKi8KLQkvKiBPbmx5IHdyaXRlIGlmIHRoZSBlbnRyeSBz
dHJlYW0gaXMgcmVhZHkgKi8KLQlpZiAoZW50cnktPndyaXRpbmcgPT0gRkFMU0UgJiYgZW50cnkt
PmVycm9yID09IE5VTEwgJiYgZW50cnktPnN0cmVhbSkgewotCQlHU3RyaW5nICpkYXRhID0gZW50
cnktPmRhdGE7Ci0JCWVudHJ5LT53cml0aW5nID0gVFJVRTsKLQkJZ19vdXRwdXRfc3RyZWFtX3dy
aXRlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAotCQkJCQkgICAgIGRhdGEtPnN0ciArIGVudHJ5LT5w
b3MsCi0JCQkJCSAgICAgZGF0YS0+bGVuIC0gZW50cnktPnBvcywKLQkJCQkJICAgICBHX1BSSU9S
SVRZX0xPVywKLQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCi0JCQkJCSAgICAgKEdBc3lu
Y1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCi0JCQkJCSAgICAgZml4dHVyZSk7Ci0JfQot
fQotCi1zdGF0aWMgdm9pZAotbXNnX2dvdF9ib2R5X2NiIChTb3VwTWVzc2FnZSAqbXNnLCBXZWJL
aXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLQlXZWJLaXRTb3VwQ2FjaGVF
bnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKLQlnX3JldHVybl9pZl9mYWlsIChlbnRyeSk7
Ci0KLQllbnRyeS0+Z290X2JvZHkgPSBUUlVFOwotCi0JaWYgKCFlbnRyeS0+c3RyZWFtICYmIGVu
dHJ5LT5wb3MgIT0gZW50cnktPmxlbmd0aCkKLQkJLyogVGhlIHN0cmVhbSBpcyBub3QgcmVhZHkg
dG8gYmUgd3JpdHRlbiBidXQgd2Ugc3RpbGwKLQkJICAgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3ZSds
bCB3cml0ZSBpdCB3aGVuIHRoZSBzdHJlYW0KLQkJICAgaXMgb3BlbmVkIGZvciB3cml0aW5nICov
Ci0JCXJldHVybjsKLQotCi0JaWYgKGVudHJ5LT5wb3MgIT0gZW50cnktPmxlbmd0aCkgewotCQkv
KiBJZiB3ZSBzdGlsbCBoYXZlIGRhdGEgdG8gd3JpdGUsIHdyaXRlIGl0LAotCQkgICB3cml0ZV9y
ZWFkeV9jYiB3aWxsIGNsb3NlIHRoZSBzdHJlYW0gKi8KLQkJaWYgKGVudHJ5LT53cml0aW5nID09
IEZBTFNFICYmIGVudHJ5LT5lcnJvciA9PSBOVUxMICYmIGVudHJ5LT5zdHJlYW0pIHsKLQkJCWdf
b3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKLQkJCQkJCSAgICAgZW50
cnktPmRhdGEtPnN0ciArIGVudHJ5LT5wb3MsCi0JCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5sZW4g
LSBlbnRyeS0+cG9zLAotCQkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKLQkJCQkJCSAgICAgZW50
cnktPmNhbmNlbGxhYmxlLAotCQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayl3cml0ZV9y
ZWFkeV9jYiwKLQkJCQkJCSAgICAgZml4dHVyZSk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWlm
IChlbnRyeS0+c3RyZWFtICYmICFlbnRyeS0+d3JpdGluZykKLQkJZ19vdXRwdXRfc3RyZWFtX2Ns
b3NlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAotCQkJCQkgICAgIEdfUFJJT1JJVFlfTE9XLAotCQkJ
CQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKLQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFj
ayljbG9zZV9yZWFkeV9jYiwKLQkJCQkJICAgICBmaXh0dXJlKTsKLX0KLQotc3RhdGljIGdib29s
ZWFuCi13ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKFdlYktpdFNvdXBDYWNoZSAqY2Fj
aGUsIFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSkKLXsKLQlHTGlzdCAqbHJ1X2l0ZW07Ci0K
LQkvKiBpZiAoZW50cnktPmRpcnR5ICYmICFnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoZW50
cnktPmNhbmNlbGxhYmxlKSkgeyAqLwotCWlmIChlbnRyeS0+ZGlydHkpIHsKLQkJZ19jYW5jZWxs
YWJsZV9jYW5jZWwgKGVudHJ5LT5jYW5jZWxsYWJsZSk7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci0K
LQlnX2Fzc2VydCAoIWVudHJ5LT5kaXJ0eSk7Ci0JZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNh
Y2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+
Y2FjaGUpKTsKLQotCS8qIFJlbW92ZSBmcm9tIGNhY2hlICovCi0JaWYgKCFnX2hhc2hfdGFibGVf
cmVtb3ZlIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGVudHJ5LT5rZXkpKQotCQlyZXR1cm4gRkFMU0U7
Ci0KLQkvKiBSZW1vdmUgZnJvbSBMUlUgKi8KLQlscnVfaXRlbSA9IGdfbGlzdF9maW5kIChjYWNo
ZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRyeSk7Ci0JY2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdf
bGlzdF9kZWxldGVfbGluayAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgbHJ1X2l0ZW0pOwotCi0J
LyogQWRqdXN0IGNhY2hlIHNpemUgKi8KLQljYWNoZS0+cHJpdi0+c2l6ZSAtPSBlbnRyeS0+bGVu
Z3RoOwotCi0JZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQp
ID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKLQotCXJldHVybiBU
UlVFOwotfQotCi1zdGF0aWMgZ2ludAotbHJ1X2NvbXBhcmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBh
LCBnY29uc3Rwb2ludGVyIGIpCi17Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5X2EgPSAo
V2ViS2l0U291cENhY2hlRW50cnkgKilhOwotCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeV9i
ID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopYjsKLQotCS8qKiBUaGUgcmF0aW9uYWxlIG9mIHRo
aXMgc29ydGluZyBmdW5jIGlzCi0JICoKLQkgKiAxLiBzb3J0IGJ5IGhpdHMgLT4gTFJVIGFsZ29y
aXRobSwgdGhlbgotCSAqCi0JICogMi4gc29ydCBieSBmcmVzaG5lc3MgbGlmZXRpbWUsIHdlIGJl
dHRlciBkaXNjYXJkIGZpcnN0Ci0JICogZW50cmllcyB0aGF0IGFyZSBjbG9zZSB0byBleHBpcmUK
LQkgKgotCSAqIDMuIHNvcnQgYnkgc2l6ZSwgcmVwbGFjZSBmaXJzdCBzbWFsbCBzaXplIHJlc291
cmNlcyBhcyB0aGV5Ci0JICogYXJlIGNoZWFwZXIgdG8gZG93bmxvYWQKLQkgKiovCi0KLQkvKiBT
b3J0IGJ5IGhpdHMgKi8KLQlpZiAoZW50cnlfYS0+aGl0cyAhPSBlbnRyeV9iLT5oaXRzKQotCQly
ZXR1cm4gZW50cnlfYS0+aGl0cyAtIGVudHJ5X2ItPmhpdHM7Ci0KLQkvKiBTb3J0IGJ5IGZyZXNo
bmVzc19saWZldGltZSAqLwotCWlmIChlbnRyeV9hLT5mcmVzaG5lc3NfbGlmZXRpbWUgIT0gZW50
cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1lKQotCQlyZXR1cm4gZW50cnlfYS0+ZnJlc2huZXNzX2xp
ZmV0aW1lIC0gZW50cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1lOwotCi0JLyogU29ydCBieSBzaXpl
ICovCi0JcmV0dXJuIGVudHJ5X2EtPmxlbmd0aCAtIGVudHJ5X2ItPmxlbmd0aDsKLX0KLQotc3Rh
dGljIGdib29sZWFuCi1jYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoV2ViS2l0U291cENh
Y2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkKLXsKLQkvKiBXZSBjb3VsZCBhZGQgaGVy
ZSBzb21lIG1vcmUgaGV1cmlzdGljcy4gVE9ETzogcmV2aWV3IGhvdwotCSAgIHRoaXMgaXMgZG9u
ZSBieSBvdGhlciBIVFRQIGNhY2hlcyAqLwotCi0JcmV0dXJuIGxlbmd0aF90b19hZGQgPD0gY2Fj
aGUtPnByaXYtPm1heF9lbnRyeV9kYXRhX3NpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tYWtlX3Jv
b21fZm9yX25ld19lbnRyeSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3Rv
X2FkZCkKLXsKLQlHTGlzdCAqbHJ1X2VudHJ5ID0gY2FjaGUtPnByaXYtPmxydV9zdGFydDsKLQot
CS8qIENoZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIHRoZSBuZXcgZW50cnkuIFRo
aXMgaXMKLQkgICBhbiBhcHByb3hpbWF0aW9uIGFzIHdlJ3JlIG5vdCB3b3JraW5nIG91dCB0aGUg
c2l6ZSBvZiB0aGUKLQkgICBjYWNoZSBmaWxlIG9yIHRoZSBzaXplIG9mIHRoZSBoZWFkZXJzIGZv
ciBwZXJmb3JtYW5jZQotCSAgIHJlYXNvbnMuIFRPRE86IGNoZWNrIGlmIHRoYXQgd291bGQgYmUg
cmVhbGx5IHRoYXQgZXhwZW5zaXZlICovCi0KLQl3aGlsZSAobHJ1X2VudHJ5ICYmCi0JICAgICAg
IChsZW5ndGhfdG9fYWRkICsgY2FjaGUtPnByaXYtPnNpemUgPiBjYWNoZS0+cHJpdi0+bWF4X3Np
emUpKSB7Ci0JCVdlYktpdFNvdXBDYWNoZUVudHJ5ICpvbGRfZW50cnkgPSAoV2ViS2l0U291cENh
Y2hlRW50cnkgKilscnVfZW50cnktPmRhdGE7Ci0KLQkJLyogRGlzY2FyZCBlbnRyaWVzLiBPbmNl
IGNhbmNlbGxlZCByZXNvdXJjZXMgd2lsbCBiZQotCQkgKiBmcmVlZCBpbiBjbG9zZV9yZWFkeV9j
YgotCQkgKi8KLQkJaWYgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIG9s
ZF9lbnRyeSkpIHsKLQkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKG9sZF9lbnRyeSwg
VFJVRSk7Ci0JCQlscnVfZW50cnkgPSBjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0OwotCQl9IGVsc2UK
LQkJCWxydV9lbnRyeSA9IGdfbGlzdF9uZXh0IChscnVfZW50cnkpOwotCX0KLX0KLQotc3RhdGlj
IGdib29sZWFuCi13ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pbnNlcnRfYnlfa2V5IChXZWJLaXRT
b3VwQ2FjaGUgKmNhY2hlLAotCQkJCSAgICAgICBjb25zdCBjaGFyICprZXksCi0JCQkJICAgICAg
IFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwKLQkJCQkgICAgICAgZ2Jvb2xlYW4gc29ydCkK
LXsKLQlndWludCBsZW5ndGhfdG9fYWRkID0gMDsKLQotCWlmIChzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXRfZW5jb2RpbmcgKGVudHJ5LT5oZWFkZXJzKSAhPSBTT1VQX0VOQ09ESU5HX0NIVU5LRUQp
Ci0JCWxlbmd0aF90b19hZGQgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5n
dGggKGVudHJ5LT5oZWFkZXJzKTsKLQotCS8qIENoZWNrIGlmIHdlIGFyZSBnb2luZyB0byBzdG9y
ZSB0aGUgcmVzb3VyY2UgZGVwZW5kaW5nIG9uIGl0cyBzaXplICovCi0JaWYgKGxlbmd0aF90b19h
ZGQpIHsKLQkJaWYgKCFjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0
aF90b19hZGQpKQotCQkJcmV0dXJuIEZBTFNFOwotCi0JCS8qIE1ha2Ugcm9vbSBmb3IgbmV3IGVu
dHJ5IGlmIG5lZWRlZCAqLwotCQltYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoY2FjaGUsIGxlbmd0
aF90b19hZGQpOwotCX0KLQotCWdfaGFzaF90YWJsZV9pbnNlcnQgKGNhY2hlLT5wcml2LT5jYWNo
ZSwgZ19zdHJkdXAgKGtleSksIGVudHJ5KTsKLQotCS8qIENvbXB1dGUgbmV3IGNhY2hlIHNpemUg
Ki8KLQljYWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5ndGhfdG9fYWRkOwotCi0JLyogVXBkYXRlIExS
VSAqLwotCWlmIChzb3J0KQotCQljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0X2luc2Vy
dF9zb3J0ZWQgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGVudHJ5LCBscnVfY29tcGFyZV9mdW5j
KTsKLQllbHNlCi0JCWNhY2hlLT5wcml2LT5scnVfc3RhcnQgPSBnX2xpc3RfcHJlcGVuZCAoY2Fj
aGUtPnByaXYtPmxydV9zdGFydCwgZW50cnkpOwotCi0JZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGgg
KGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJp
di0+Y2FjaGUpKTsKLQotCXJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotbXNnX3Jlc3Rh
cnRlZF9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQot
ewotCS8qIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlIGV4YWN0bHk/ICovCi19Ci0KLXN0
YXRpYyB2b2lkCi1hcHBlbmRfdG9fcmVhZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVz
dWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQotewot
CUdGaWxlICpmaWxlID0gKEdGaWxlICopc291cmNlOwotCUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsK
LQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKLQotCXN0cmVh
bSA9IChHT3V0cHV0U3RyZWFtICopZ19maWxlX2FwcGVuZF90b19maW5pc2ggKGZpbGUsIHJlc3Vs
dCwgJmVudHJ5LT5lcnJvcik7Ci0KLQlpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVu
dHJ5LT5jYW5jZWxsYWJsZSkgfHwgZW50cnktPmVycm9yKSB7Ci0JCWZpeHR1cmUtPmNhY2hlLT5w
cml2LT5uX3BlbmRpbmctLTsKLQkJZW50cnktPmRpcnR5ID0gRkFMU0U7Ci0JCXdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X3JlbW92ZSAoZml4dHVyZS0+Y2FjaGUsIGVudHJ5KTsKLQkJd2Via2l0X3Nv
dXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOwotCQl3ZWJraXRfc291cF9jYWNoZV93
cml0aW5nX2ZpeHR1cmVfZnJlZSAoZml4dHVyZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQllbnRyeS0+
c3RyZWFtID0gZ19vYmplY3RfcmVmIChzdHJlYW0pOwotCWdfb2JqZWN0X3VucmVmIChmaWxlKTsK
LQotCS8qIElmIHdlIGFscmVhZHkgZ290IGFsbCB0aGUgZGF0YSB3ZSBoYXZlIHRvIGluaXRpYXRl
IHRoZQotCSAgIHdyaXRpbmcgaGVyZSwgc2luY2Ugd2Ugd29uJ3QgZ2V0IG1vcmUgJ2dvdC1jaHVu
aycKLQkgICBzaWduYWxzICovCi0JaWYgKGVudHJ5LT5nb3RfYm9keSkgewotCQlHU3RyaW5nICpk
YXRhID0gZW50cnktPmRhdGE7Ci0KLQkJLyogSXQgY291bGQgaGFwcGVuIHRoYXQgcmVhZGluZyB0
aGUgZGF0YSBmcm9tIHNlcnZlcgotCQkgICB3YXMgY29tcGxldGVkIGJlZm9yZSB0aGlzIGhhcHBl
bnMuIEluIHRoYXQgY2FzZQotCQkgICB0aGVyZSBpcyBubyBkYXRhICovCi0JCWlmIChkYXRhKSB7
Ci0JCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7Ci0JCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5
bmMgKGVudHJ5LT5zdHJlYW0sCi0JCQkJCQkgICAgIGRhdGEtPnN0ciArIGVudHJ5LT5wb3MsCi0J
CQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsCi0JCQkJCQkgICAgIEdfUFJJT1JJVFlf
TE9XLAotCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCi0JCQkJCQkgICAgIChHQXN5bmNS
ZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAotCQkJCQkJICAgICBmaXh0dXJlKTsKLQkJfQot
CX0KLX0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXRpbWVfdCByZXF1ZXN0X3RpbWU7Ci0JU291cFNl
c3Npb25GZWF0dXJlICpmZWF0dXJlOwotCWd1bG9uZyBnb3RfaGVhZGVyc19oYW5kbGVyOwotfSBS
ZXF1ZXN0SGVscGVyOwotCi1zdGF0aWMgdm9pZAotbXNnX2dvdF9oZWFkZXJzX2NiIChTb3VwTWVz
c2FnZSAqbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JV2ViS2l0U291cENhY2hlICpjYWNo
ZTsKLQlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IGNhY2hlYWJsZTsKLQlSZXF1ZXN0SGVscGVyICpo
ZWxwZXI7Ci0JdGltZV90IHJlcXVlc3RfdGltZSwgcmVzcG9uc2VfdGltZTsKLQotCXJlc3BvbnNl
X3RpbWUgPSB0aW1lIChOVUxMKTsKLQotCWhlbHBlciA9IChSZXF1ZXN0SGVscGVyICopdXNlcl9k
YXRhOwotCWNhY2hlID0gV0VCS0lUX1NPVVBfQ0FDSEUgKGhlbHBlci0+ZmVhdHVyZSk7Ci0JcmVx
dWVzdF90aW1lID0gaGVscGVyLT5yZXF1ZXN0X3RpbWU7Ci0JZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jIChtc2csIG1zZ19nb3RfaGVhZGVyc19jYiwgdXNlcl9kYXRhKTsKLQln
X3NsaWNlX2ZyZWUgKFJlcXVlc3RIZWxwZXIsIGhlbHBlcik7Ci0KLQljYWNoZWFibGUgPSB3ZWJr
aXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChjYWNoZSwgbXNnKTsKLQotCWlmIChjYWNo
ZWFibGUgJiBXRUJLSVRfU09VUF9DQUNIRV9DQUNIRUFCTEUpIHsKLQkJV2ViS2l0U291cENhY2hl
RW50cnkgKmVudHJ5OwotCQljaGFyICprZXk7Ci0JCUdGaWxlICpmaWxlOwotCQlXZWJLaXRTb3Vw
Q2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZTsKLQotCQkvKiBDaGVjayBpZiB3ZSBhcmUgYWxy
ZWFkeSBjYWNoaW5nIHRoaXMgcmVzb3VyY2UgKi8KLQkJa2V5ID0gc291cF9tZXNzYWdlX2dldF9j
YWNoZV9rZXkgKG1zZyk7Ci0JCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnBy
aXYtPmNhY2hlLCBrZXkpOwotCQlnX2ZyZWUgKGtleSk7Ci0KLQkJaWYgKGVudHJ5ICYmIGVudHJ5
LT5kaXJ0eSkKLQkJCXJldHVybjsKLQotCQkvKiBDcmVhdGUgYSBuZXcgZW50cnksIGRlbGV0aW5n
IGFueSBvbGQgb25lIGlmIHByZXNlbnQgKi8KLQkJaWYgKGVudHJ5KSB7Ci0JCQl3ZWJraXRfc291
cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7Ci0JCQl3ZWJraXRfc291cF9jYWNo
ZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7Ci0JCX0KLQotCQllbnRyeSA9IHdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X25ldyAoY2FjaGUsIG1zZywgcmVxdWVzdF90aW1lLCByZXNwb25zZV90aW1l
KTsKLQkJZW50cnktPmhpdHMgPSAxOwotCi0JCS8qIERvIG5vdCBjb250aW51ZSBpZiBpdCBjYW4g
bm90IGJlIHN0b3JlZCAqLwotCQlpZiAoIXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9i
eV9rZXkgKGNhY2hlLCAoY29uc3QgZ2NoYXIgKillbnRyeS0+a2V5LCBlbnRyeSwgVFJVRSkpIHsK
LQkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKLQkJCXJldHVy
bjsKLQkJfQotCi0JCWZpeHR1cmUgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNoZVdyaXRp
bmdGaXh0dXJlKTsKLQkJZml4dHVyZS0+Y2FjaGUgPSBnX29iamVjdF9yZWYgKGNhY2hlKTsKLQkJ
Zml4dHVyZS0+ZW50cnkgPSBlbnRyeTsKLQkJZml4dHVyZS0+bXNnID0gZ19vYmplY3RfcmVmICht
c2cpOwotCi0JCS8qIFdlIGNvbm5lY3Qgbm93IHRvIHRoZXNlIHNpZ25hbHMgYW5kIGJ1ZmZlciB0
aGUgZGF0YQotCQkgICBpZiBpdCBjb21lcyBiZWZvcmUgdGhlIGZpbGUgaXMgcmVhZHkgZm9yIHdy
aXRpbmcgKi8KLQkJZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIgPQotCQkJZ19zaWduYWxfY29u
bmVjdCAobXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFDSyAobXNnX2dvdF9jaHVua19jYiksIGZp
eHR1cmUpOwotCQlmaXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyID0KLQkJCWdfc2lnbmFsX2Nvbm5l
Y3QgKG1zZywgImdvdC1ib2R5IiwgR19DQUxMQkFDSyAobXNnX2dvdF9ib2R5X2NiKSwgZml4dHVy
ZSk7Ci0JCWZpeHR1cmUtPnJlc3RhcnRlZF9oYW5kbGVyID0KLQkJCWdfc2lnbmFsX2Nvbm5lY3Qg
KG1zZywgInJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0sgKG1zZ19yZXN0YXJ0ZWRfY2IpLCBlbnRyeSk7
Ci0KLQkJLyogUHJlcGFyZSBlbnRyeSAqLwotCQlmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAo
ZW50cnktPmZpbGVuYW1lKTsKLQkJY2FjaGUtPnByaXYtPm5fcGVuZGluZysrOwotCi0JCWVudHJ5
LT5kaXJ0eSA9IFRSVUU7Ci0JCWVudHJ5LT5jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3
ICgpOwotCQlnX2ZpbGVfYXBwZW5kX3RvX2FzeW5jIChmaWxlLCAwLAotCQkJCQlHX1BSSU9SSVRZ
X0xPVywgZW50cnktPmNhbmNlbGxhYmxlLAotCQkJCQkoR0FzeW5jUmVhZHlDYWxsYmFjaylhcHBl
bmRfdG9fcmVhZHlfY2IsCi0JCQkJCWZpeHR1cmUpOwotCX0gZWxzZSBpZiAoY2FjaGVhYmxlICYg
V0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpIHsKLQkJY2hhciAqa2V5OwotCQlXZWJLaXRT
b3VwQ2FjaGVFbnRyeSAqZW50cnk7Ci0KLQkJa2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9r
ZXkgKG1zZyk7Ci0JCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNh
Y2hlLCBrZXkpOwotCQlnX2ZyZWUgKGtleSk7Ci0KLQkJaWYgKGVudHJ5KSB7Ci0JCQlpZiAod2Vi
a2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50cnkpKQotCQkJCXdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKLQkJfQotCX0gZWxzZSBpZiAoY2Fj
aGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfVkFMSURBVEVTKSB7Ci0JCWNoYXIgKmtleTsKLQkJ
V2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OwotCi0JCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRf
Y2FjaGVfa2V5IChtc2cpOwotCQllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5w
cml2LT5jYWNoZSwga2V5KTsKLQkJZ19mcmVlIChrZXkpOwotCi0JCS8qIEl0J3MgcG9zc2libGUg
dG8gZ2V0IGEgQ0FDSEVfVkFMSURBVEVTIHdpdGggbm8KLQkJICogZW50cnkgaW4gdGhlIGhhc2gg
dGFibGUuIFRoaXMgY291bGQgaGFwcGVuIGlmIGZvcgotCQkgKiBleGFtcGxlIHRoZSBzb3VwIGNs
aWVudCBpcyB0aGUgb25lIGNyZWF0aW5nIHRoZQotCQkgKiBjb25kaXRpb25hbCByZXF1ZXN0Lgot
CQkgKi8KLQkJaWYgKGVudHJ5KSB7Ci0JCQllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7
Ci0KLQkJCS8qIFdlIHVwZGF0ZSB0aGUgaGVhZGVycyBvZiB0aGUgZXhpc3RpbmcgY2FjaGUgaXRl
bSwKLQkJCSAgIHBsdXMgaXRzIGFnZSAqLwotCQkJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFj
aCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAotCQkJCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVy
c0ZvcmVhY2hGdW5jKXVwZGF0ZV9oZWFkZXJzLAotCQkJCQkJICAgICAgZW50cnktPmhlYWRlcnMp
OwotCQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoZW50cnksIG1zZywg
Y2FjaGUpOwotCQl9Ci0JfQotfQotCi1HSW5wdXRTdHJlYW0gKgotd2Via2l0X3NvdXBfY2FjaGVf
c2VuZF9yZXNwb25zZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZykK
LXsKLQljaGFyICprZXk7Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OwotCWNoYXIgKmN1
cnJlbnRfYWdlOwotCUdJbnB1dFN0cmVhbSAqc3RyZWFtID0gTlVMTDsKLQlHRmlsZSAqZmlsZTsK
LQotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9DQUNIRSAoY2FjaGUpLCBO
VUxMKTsKLQlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChtc2cpLCBOVUxM
KTsKLQotCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOwotCWVudHJ5ID0g
Z19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOwotCWdfZnJlZSAo
a2V5KTsKLQlnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnksIE5VTEwpOwotCi0JLyogSWYgd2Ug
YXJlIHRvbGQgdG8gc2VuZCBhIHJlc3BvbnNlIGZyb20gY2FjaGUgYW55IHZhbGlkYXRpb24KLQkg
ICBpbiBjb3Vyc2UgaXMgb3ZlciBieSBub3cgKi8KLQllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0g
RkFMU0U7Ci0KLQkvKiBIZWFkZXJzICovCi0Jc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAo
ZW50cnktPmhlYWRlcnMsCi0JCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5j
KXVwZGF0ZV9oZWFkZXJzLAotCQkJCSAgICAgIG1zZy0+cmVzcG9uc2VfaGVhZGVycyk7Ci0KLQkv
KiBBZGQgJ0FnZScgaGVhZGVyIHdpdGggdGhlIGN1cnJlbnQgYWdlICovCi0JY3VycmVudF9hZ2Ug
PSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJy
ZW50X2FnZSAoZW50cnkpKTsKLQlzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlIChtc2ctPnJl
c3BvbnNlX2hlYWRlcnMsCi0JCQkJICAgICAgIkFnZSIsCi0JCQkJICAgICAgY3VycmVudF9hZ2Up
OwotCWdfZnJlZSAoY3VycmVudF9hZ2UpOwotCi0JLyogVE9ETzogdGhlIG9yaWdpbmFsIGlkZWEg
d2FzIHRvIHNhdmUgcmVhZHMsIGJ1dCBjdXJyZW50IGNvZGUKLQkgICBhc3N1bWVzIHRoYXQgYSBz
dHJlYW0gaXMgYWx3YXlzIHJldHVybmVkLiBOZWVkIHRvIHJlYWNoCi0JICAgc29tZSBhZ3JlZW1l
bnQgaGVyZS4gQWxzbyB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUgc2l0dWF0aW9uCi0JICAgd2VyZSB0
aGUgZmlsZSB3YXMgbm8gbG9uZ2VyIHRoZXJlIChmb3IgZXhhbXBsZSBmaWxlcwotCSAgIHJlbW92
ZWQgd2l0aG91dCBub3RpZnlpbmcgdGhlIGNhY2hlICovCi0JZmlsZSA9IGdfZmlsZV9uZXdfZm9y
X3BhdGggKGVudHJ5LT5maWxlbmFtZSk7Ci0Jc3RyZWFtID0gKEdJbnB1dFN0cmVhbSAqKWdfZmls
ZV9yZWFkIChmaWxlLCBOVUxMLCBOVUxMKTsKLQotCXJldHVybiBzdHJlYW07Ci19Ci0KLXN0YXRp
YyB2b2lkCi1yZXF1ZXN0X3N0YXJ0ZWQgKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291
cFNlc3Npb24gKnNlc3Npb24sCi0JCSBTb3VwTWVzc2FnZSAqbXNnLCBTb3VwU29ja2V0ICpzb2Nr
ZXQpCi17Ci0JUmVxdWVzdEhlbHBlciAqaGVscGVyID0gZ19zbGljZV9uZXcwIChSZXF1ZXN0SGVs
cGVyKTsKLQloZWxwZXItPnJlcXVlc3RfdGltZSA9IHRpbWUgKE5VTEwpOwotCWhlbHBlci0+ZmVh
dHVyZSA9IGZlYXR1cmU7Ci0JaGVscGVyLT5nb3RfaGVhZGVyc19oYW5kbGVyID0gZ19zaWduYWxf
Y29ubmVjdCAobXNnLCAiZ290LWhlYWRlcnMiLAotCQkJCQkJCUdfQ0FMTEJBQ0sgKG1zZ19nb3Rf
aGVhZGVyc19jYiksCi0JCQkJCQkJaGVscGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0dGFjaCAo
U291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJlLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbikKLXsKLQlX
ZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gV0VCS0lUX1NPVVBfQ0FDSEUgKGZlYXR1cmUpOwotCWNh
Y2hlLT5wcml2LT5zZXNzaW9uID0gc2Vzc2lvbjsKLQotCXdlYmtpdF9zb3VwX2NhY2hlX2RlZmF1
bHRfZmVhdHVyZV9pbnRlcmZhY2UtPmF0dGFjaCAoZmVhdHVyZSwgc2Vzc2lvbik7Ci19Ci0KLXN0
YXRpYyB2b2lkCi13ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAoU291cFNl
c3Npb25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwKLQkJCQkJZ3BvaW50ZXIg
aW50ZXJmYWNlX2RhdGEpCi17Ci0Jd2Via2l0X3NvdXBfY2FjaGVfZGVmYXVsdF9mZWF0dXJlX2lu
dGVyZmFjZSA9Ci0JCWdfdHlwZV9kZWZhdWx0X2ludGVyZmFjZV9wZWVrIChTT1VQX1RZUEVfU0VT
U0lPTl9GRUFUVVJFKTsKLQotCWZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggPSBhdHRhY2g7Ci0J
ZmVhdHVyZV9pbnRlcmZhY2UtPnJlcXVlc3Rfc3RhcnRlZCA9IHJlcXVlc3Rfc3RhcnRlZDsKLX0K
LQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX2luaXQgKFdlYktpdFNvdXBDYWNoZSAq
Y2FjaGUpCi17Ci0JV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdjsKLQotCXByaXYgPSBjYWNo
ZS0+cHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFIChjYWNoZSk7Ci0KLQlwcml2
LT5jYWNoZSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoZ19zdHJfaGFzaCwKLQkJCQkJICAgICBn
X3N0cl9lcXVhbCwKLQkJCQkJICAgICAoR0Rlc3Ryb3lOb3RpZnkpZ19mcmVlLAotCQkJCQkgICAg
IE5VTEwpOwotCi0JLyogTFJVICovCi0JcHJpdi0+bHJ1X3N0YXJ0ID0gTlVMTDsKLQotCS8qICov
Ci0JcHJpdi0+bl9wZW5kaW5nID0gMDsKLQotCS8qIENhY2hlIHNpemUgKi8KLQlwcml2LT5tYXhf
c2l6ZSA9IERFRkFVTFRfTUFYX1NJWkU7Ci0JcHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6ZSA9IHBy
aXYtPm1heF9zaXplIC8gTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKLQlwcml2LT5zaXplID0g
MDsKLX0KLQotc3RhdGljIHZvaWQKLXJlbW92ZV9jYWNoZV9pdGVtIChncG9pbnRlciBkYXRhLAot
CQkgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JV2ViS2l0U291cENhY2hlICpjYWNoZSA9IChX
ZWJLaXRTb3VwQ2FjaGUgKikgdXNlcl9kYXRhOwotCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRy
eSA9IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqKSBkYXRhOwotCi0JaWYgKHdlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIGVudHJ5KSkKLQkJd2Via2l0X3NvdXBfY2FjaGVfZW50
cnlfZnJlZSAoZW50cnksIEZBTFNFKTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2Nh
Y2hlX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCi17Ci0JV2ViS2l0U291cENhY2hlUHJpdmF0
ZSAqcHJpdjsKLQlHTGlzdCAqZW50cmllczsKLQotCXByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAo
b2JqZWN0KS0+cHJpdjsKLQotCS8vIENhbm5vdCB1c2UgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggYXMg
Y2FsbGJhY2tzIG11c3Qgbm90IG1vZGlmeSB0aGUgaGFzaCB0YWJsZQotCWVudHJpZXMgPSBnX2hh
c2hfdGFibGVfZ2V0X3ZhbHVlcyAocHJpdi0+Y2FjaGUpOwotCWdfbGlzdF9mb3JlYWNoIChlbnRy
aWVzLCByZW1vdmVfY2FjaGVfaXRlbSwgb2JqZWN0KTsKLQlnX2xpc3RfZnJlZSAoZW50cmllcyk7
Ci0KLQlnX2hhc2hfdGFibGVfZGVzdHJveSAocHJpdi0+Y2FjaGUpOwotCWdfZnJlZSAocHJpdi0+
Y2FjaGVfZGlyKTsKLQotCWdfbGlzdF9mcmVlIChwcml2LT5scnVfc3RhcnQpOwotCXByaXYtPmxy
dV9zdGFydCA9IE5VTEw7Ci0KLQlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfY2FjaGVfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRf
c291cF9jYWNoZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKm9iamVjdCwgZ3VpbnQgcHJvcF9pZCwK
LQkJCQljb25zdCBHVmFsdWUgKnZhbHVlLCBHUGFyYW1TcGVjICpwc3BlYykKLXsKLQlXZWJLaXRT
b3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVjdCktPnByaXY7
Ci0KLQlzd2l0Y2ggKHByb3BfaWQpIHsKLQljYXNlIFBST1BfQ0FDSEVfRElSOgotCQlwcml2LT5j
YWNoZV9kaXIgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLQkJLyogQ3JlYXRlIGRpcmVj
dG9yeSBpZiBpdCBkb2VzIG5vdCBleGlzdCAoRklYTUU6IHNob3VsZCB3ZT8pICovCi0JCWlmICgh
Z19maWxlX3Rlc3QgKHByaXYtPmNhY2hlX2RpciwgR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxF
X1RFU1RfSVNfRElSKSkKLQkJCWdfbWtkaXJfd2l0aF9wYXJlbnRzIChwcml2LT5jYWNoZV9kaXIs
IDA3MDApOwotCQlicmVhazsKLQljYXNlIFBST1BfQ0FDSEVfVFlQRToKLQkJcHJpdi0+Y2FjaGVf
dHlwZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLQkJLyogVE9ETzogY2xlYXIgcHJpdmF0
ZSBlbnRyaWVzIGFuZCBpc3N1ZSBhIHdhcm5pbmcgaWYgbW92aW5nIHRvIHNoYXJlZD8gKi8KLQkJ
YnJlYWs7Ci0JZGVmYXVsdDoKLQkJR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChv
YmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAot
d2Via2l0X3NvdXBfY2FjaGVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICpvYmplY3QsIGd1aW50IHBy
b3BfaWQsCi0JCQkJR1ZhbHVlICp2YWx1ZSwgR1BhcmFtU3BlYyAqcHNwZWMpCi17Ci0JV2ViS2l0
U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2
OwotCi0Jc3dpdGNoIChwcm9wX2lkKSB7Ci0JY2FzZSBQUk9QX0NBQ0hFX0RJUjoKLQkJZ192YWx1
ZV9zZXRfc3RyaW5nICh2YWx1ZSwgcHJpdi0+Y2FjaGVfZGlyKTsKLQkJYnJlYWs7Ci0JY2FzZSBQ
Uk9QX0NBQ0hFX1RZUEU6Ci0JCWdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBwcml2LT5jYWNoZV90
eXBlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0
aWMgdm9pZAotd2Via2l0X3NvdXBfY2FjaGVfY29uc3RydWN0ZWQgKEdPYmplY3QgKm9iamVjdCkK
LXsKLQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OwotCi0JcHJpdiA9IFdFQktJVF9TT1VQ
X0NBQ0hFIChvYmplY3QpLT5wcml2OwotCi0JaWYgKCFwcml2LT5jYWNoZV9kaXIpIHsKLQkJLyog
U2V0IGEgZGVmYXVsdCBjYWNoZSBkaXIsIGRpZmZlcmVudCBmb3IgZWFjaCB1c2VyICovCi0JCXBy
aXYtPmNhY2hlX2RpciA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3VzZXJfY2FjaGVfZGlyICgp
LAotCQkJCQkJICAgICJodHRwY2FjaGUiLAotCQkJCQkJICAgIE5VTEwpOwotCQlpZiAoIWdfZmls
ZV90ZXN0IChwcml2LT5jYWNoZV9kaXIsIEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNU
X0lTX0RJUikpCi0JCQlnX21rZGlyX3dpdGhfcGFyZW50cyAocHJpdi0+Y2FjaGVfZGlyLCAwNzAw
KTsKLQl9Ci0KLQlpZiAoR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX2NhY2hlX3BhcmVudF9j
bGFzcyktPmNvbnN0cnVjdGVkKQotCQlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfY2FjaGVf
cGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQgKG9iamVjdCk7Ci19Ci0KLSNkZWZpbmUgV0VCS0lU
X1NPVVBfQ0FDSEVfVFlQRV9UWVBFICh3ZWJraXRfc291cF9jYWNoZV90eXBlX2dldF90eXBlICgp
KQotc3RhdGljIEdUeXBlCi13ZWJraXRfc291cF9jYWNoZV90eXBlX2dldF90eXBlICh2b2lkKQot
ewotCXN0YXRpYyBHVHlwZSBjYWNoZV90eXBlID0gMDsKLQotCXN0YXRpYyBjb25zdCBHRW51bVZh
bHVlIGNhY2hlX3R5cGVzW10gPSB7Ci0JCXsgV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VTRVIs
ICJTaW5nbGUgdXNlciBjYWNoZSIsICJ1c2VyIiB9LAotCQl7IFdFQktJVF9TT1VQX0NBQ0hFX1NI
QVJFRCwgIlNoYXJlZCBjYWNoZSIsICJzaGFyZWQiIH0sCi0JCXsgMCwgTlVMTCwgTlVMTCB9Ci0J
fTsKLQotCWlmICghY2FjaGVfdHlwZSkgewotCQljYWNoZV90eXBlID0gZ19lbnVtX3JlZ2lzdGVy
X3N0YXRpYyAoIldlYktpdFNvdXBDYWNoZVR5cGVUeXBlIiwgY2FjaGVfdHlwZXMpOwotCX0KLQly
ZXR1cm4gY2FjaGVfdHlwZTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX2Ns
YXNzX2luaXQgKFdlYktpdFNvdXBDYWNoZUNsYXNzICpjYWNoZV9jbGFzcykKLXsKLQlHT2JqZWN0
Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopY2FjaGVfY2xhc3M7Ci0KLQln
b2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2ZpbmFsaXplOwotCWdv
YmplY3RfY2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0X3NvdXBfY2FjaGVfY29uc3RydWN0ZWQ7
Ci0JZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBfY2FjaGVfc2V0X3By
b3BlcnR5OwotCWdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9zb3VwX2NhY2hl
X2dldF9wcm9wZXJ0eTsKLQotCWNhY2hlX2NsYXNzLT5nZXRfY2FjaGVhYmlsaXR5ID0gZ2V0X2Nh
Y2hlYWJpbGl0eTsKLQotCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3Rf
Y2xhc3MsIFBST1BfQ0FDSEVfRElSLAotCQkJCQkgZ19wYXJhbV9zcGVjX3N0cmluZyAoImNhY2hl
LWRpciIsCi0JCQkJCQkJICAgICAgIkNhY2hlIGRpcmVjdG9yeSIsCi0JCQkJCQkJICAgICAgIlRo
ZSBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGNhY2hlIGZpbGVzIiwKLQkJCQkJCQkgICAgICBOVUxM
LAotCQkJCQkJCSAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05M
WSkpOwotCi0JZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywg
UFJPUF9DQUNIRV9UWVBFLAotCQkJCQkgZ19wYXJhbV9zcGVjX2VudW0gKCJjYWNoZS10eXBlIiwK
LQkJCQkJCQkgICAgIkNhY2hlIHR5cGUiLAotCQkJCQkJCSAgICAiV2hldGhlciB0aGUgY2FjaGUg
aXMgcHJpdmF0ZSBvciBzaGFyZWQiLAotCQkJCQkJCSAgICBXRUJLSVRfU09VUF9DQUNIRV9UWVBF
X1RZUEUsCi0JCQkJCQkJICAgIFdFQktJVF9TT1VQX0NBQ0hFX1NJTkdMRV9VU0VSLAotCQkJCQkJ
CSAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKLQotCWdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoY2FjaGVfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cENh
Y2hlUHJpdmF0ZSkpOwotfQotCi0vKioKLSAqIHdlYmtpdF9zb3VwX2NhY2hlX25ldzoKLSAqIEBj
YWNoZV9kaXI6IHRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGNhY2hlZCBkYXRhLCBvciAlTlVM
TCB0byB1c2UgdGhlIGRlZmF1bHQgb25lCi0gKiBAY2FjaGVfdHlwZTogdGhlICNXZWJLaXRTb3Vw
Q2FjaGVUeXBlIG9mIHRoZSBjYWNoZQotICoKLSAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdFNvdXBD
YWNoZS4KLSAqCi0gKiBSZXR1cm5zOiBhIG5ldyAjV2ViS2l0U291cENhY2hlCi0gKgotICogU2lu
Y2U6IDIuMjgKLSAqKi8KLVdlYktpdFNvdXBDYWNoZSAqCi13ZWJraXRfc291cF9jYWNoZV9uZXcg
KGNvbnN0IGNoYXIgKmNhY2hlX2RpciwgV2ViS2l0U291cENhY2hlVHlwZSBjYWNoZV90eXBlKQot
ewotCXJldHVybiBnX29iamVjdF9uZXcgKFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsCi0JCQkgICAg
ICJjYWNoZS1kaXIiLCBjYWNoZV9kaXIsCi0JCQkgICAgICJjYWNoZS10eXBlIiwgY2FjaGVfdHlw
ZSwKLQkJCSAgICAgTlVMTCk7Ci19Ci0KLS8qKgotICogd2Via2l0X3NvdXBfY2FjaGVfaGFzX3Jl
c3BvbnNlOgotICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKLSAqIEBtc2c6IGEgI1NvdXBN
ZXNzYWdlCi0gKgotICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHdoZXRoZXIgdGhlIEBjYWNo
ZSBvYmplY3QgaGFzIGEgcHJvcGVyCi0gKiByZXNwb25zZSBmb3IgdGhlIHJlcXVlc3QgQG1zZyBn
aXZlbiB0aGUgZmxhZ3MgYm90aCBpbiB0aGUgcmVxdWVzdAotICogYW5kIHRoZSBjYWNoZWQgcmVw
bHkgYW5kIHRoZSB0aW1lIGVsbGFwc2VkIHNpbmNlIGl0IHdhcyBjYWNoZWQuCi0gKgotICogUmV0
dXJuczogd2hldGhlciBvciBub3QgdGhlIEBjYWNoZSBoYXMgYSB2YWxpZCByZXNwb25zZSBmb3Ig
QG1zZwotICoqLwotV2ViS2l0U291cENhY2hlUmVzcG9uc2UKLXdlYmtpdF9zb3VwX2NhY2hlX2hh
c19yZXNwb25zZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZykKLXsK
LQljaGFyICprZXk7Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OwotCWNvbnN0IGNoYXIg
KmNhY2hlX2NvbnRyb2w7Ci0JZ3BvaW50ZXIgdmFsdWU7Ci0JZ2Jvb2xlYW4gbXVzdF9yZXZhbGlk
YXRlOwotCWludCBtYXhfYWdlLCBtYXhfc3RhbGUsIG1pbl9mcmVzaDsKLQlHTGlzdCAqbHJ1X2l0
ZW0sICppdGVtOwotCi0Ja2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7Ci0J
ZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSk7Ci0J
Z19mcmVlIChrZXkpOwotCi0JLyogMS4gVGhlIHByZXNlbnRlZCBSZXF1ZXN0LVVSSSBhbmQgdGhh
dCBvZiBzdG9yZWQgcmVzcG9uc2UKLQkgKiBtYXRjaAotCSAqLwotCWlmICghZW50cnkpCi0JCXJl
dHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKLQotCS8qIEluY3JlYXNlIGhp
dCBjb3VudC4gVGFrZSBzb3J0aW5nIGludG8gYWNjb3VudCAqLwotCWVudHJ5LT5oaXRzKys7Ci0J
bHJ1X2l0ZW0gPSBnX2xpc3RfZmluZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnkpOwot
CWl0ZW0gPSBscnVfaXRlbTsKLQl3aGlsZSAoaXRlbS0+bmV4dCAmJiBscnVfY29tcGFyZV9mdW5j
IChpdGVtLT5kYXRhLCBpdGVtLT5uZXh0LT5kYXRhKSA+IDApCi0JCWl0ZW0gPSBnX2xpc3RfbmV4
dCAoaXRlbSk7Ci0KLQlpZiAoaXRlbSAhPSBscnVfaXRlbSkgewotCQljYWNoZS0+cHJpdi0+bHJ1
X3N0YXJ0ID0gZ19saXN0X3JlbW92ZV9saW5rIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBscnVf
aXRlbSk7Ci0JCWl0ZW0gPSBnX2xpc3RfaW5zZXJ0X3NvcnRlZCAoaXRlbSwgbHJ1X2l0ZW0tPmRh
dGEsIGxydV9jb21wYXJlX2Z1bmMpOwotCQlnX2xpc3RfZnJlZSAobHJ1X2l0ZW0pOwotCX0KLQot
CWlmIChlbnRyeS0+ZGlydHkgfHwgZW50cnktPmJlaW5nX3ZhbGlkYXRlZCkKLQkJcmV0dXJuIFdF
QktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOwotCi0JLyogMi4gVGhlIHJlcXVlc3QgbWV0
aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RvcmVkIHJlc3BvbnNlCi0JICogIGFsbG93cyBpdCB0
byBiZSB1c2VkIGZvciB0aGUgcHJlc2VudGVkIHJlcXVlc3QKLQkgKi8KLQotCS8qIEluIHByYWN0
aWNlIHRoaXMgbWVhbnMgd2Ugb25seSByZXR1cm4gb3VyIHJlc291cmNlIGZvciBHRVQsCi0JICog
Y2FjaGVhYmlsaXR5IGZvciBvdGhlciBtZXRob2RzIGlzIGEgVE9ETyBpbiB0aGUgUkZDCi0JICog
KFRPRE86IGFsdGhvdWdoIHdlIGNvdWxkIHJldHVybiB0aGUgaGVhZGVycyBmb3IgSEVBRAotCSAq
IHByb2JhYmx5KS4KLQkgKi8KLQlpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKQot
CQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7Ci0KLQkvKiAzLiBTZWxl
Y3RpbmcgcmVxdWVzdC1oZWFkZXJzIG5vbWluYXRlZCBieSB0aGUgc3RvcmVkCi0JICogcmVzcG9u
c2UgKGlmIGFueSkgbWF0Y2ggdGhvc2UgcHJlc2VudGVkLgotCSAqLwotCi0JLyogVE9ETyAqLwot
Ci0JLyogNC4gVGhlIHJlcXVlc3QgaXMgYSBjb25kaXRpb25hbCByZXF1ZXN0IGlzc3VlZCBieSB0
aGUgY2xpZW50LgotCSAqLwotCWlmIChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKG1zZy0+cmVx
dWVzdF9oZWFkZXJzLCAiSWYtTW9kaWZpZWQtU2luY2UiKSB8fAotCSAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19nZXQgKG1zZy0+cmVxdWVzdF9oZWFkZXJzLCAiSWYtTm9uZS1NYXRjaCIpKQotCQly
ZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7Ci0KLQkvKiA1LiBUaGUgcHJl
c2VudGVkIHJlcXVlc3QgYW5kIHN0b3JlZCByZXNwb25zZSBhcmUgZnJlZSBmcm9tCi0JICogZGly
ZWN0aXZlcyB0aGF0IHdvdWxkIHByZXZlbnQgaXRzIHVzZS4KLQkgKi8KLQotCW11c3RfcmV2YWxp
ZGF0ZSA9IEZBTFNFOwotCW1heF9hZ2UgPSBtYXhfc3RhbGUgPSBtaW5fZnJlc2ggPSAtMTsKLQot
CWNhY2hlX2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKG1zZy0+cmVxdWVzdF9o
ZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOwotCWlmIChjYWNoZV9jb250cm9sKSB7Ci0JCUdIYXNo
VGFibGUgKmhhc2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250cm9s
KTsKLQotCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLXN0b3Jl
IiwgTlVMTCwgTlVMTCkpIHsKLQkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7
Ci0JCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7Ci0JCX0KLQotCQlp
ZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLWNhY2hlIiwgTlVMTCwg
TlVMTCkpIHsKLQkJCWVudHJ5LT5tdXN0X3JldmFsaWRhdGUgPSBUUlVFOwotCQl9Ci0KLQkJaWYg
KGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJtYXgtYWdlIiwgTlVMTCwgJnZh
bHVlKSkgewotCQkJbWF4X2FnZSA9IChpbnQpTUlOIChnX2FzY2lpX3N0cnRvbGwgKHZhbHVlLCBO
VUxMLCAxMCksIEdfTUFYSU5UMzIpOwotCQl9Ci0KLQkJLyogbWF4LXN0YWxlIGNhbiBoYXZlIG5v
IHZhbHVlIHNldCwgd2UgbmVlZCB0byB1c2UgX2V4dGVuZGVkICovCi0JCWlmIChnX2hhc2hfdGFi
bGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibWF4LXN0YWxlIiwgTlVMTCwgJnZhbHVlKSkgewot
CQkJaWYgKHZhbHVlKQotCQkJCW1heF9zdGFsZSA9IChpbnQpTUlOIChnX2FzY2lpX3N0cnRvbGwg
KHZhbHVlLCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOwotCQkJZWxzZQotCQkJCW1heF9zdGFsZSA9
IEdfTUFYSU5UMzI7Ci0JCX0KLQotCQl2YWx1ZSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGhhc2gs
ICJtaW4tZnJlc2giKTsKLQkJaWYgKHZhbHVlKQotCQkJbWluX2ZyZXNoID0gKGludClNSU4gKGdf
YXNjaWlfc3RydG9sbCAodmFsdWUsIE5VTEwsIDEwKSwgR19NQVhJTlQzMik7Ci0KLQkJc291cF9o
ZWFkZXJfZnJlZV9wYXJhbV9saXN0IChoYXNoKTsKLQotCQlpZiAobWF4X2FnZSAhPSAtMSkgewot
CQkJZ3VpbnQgY3VycmVudF9hZ2UgPSB3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVu
dF9hZ2UgKGVudHJ5KTsKLQotCQkJLyogSWYgd2UgYXJlIG92ZXIgbWF4LWFnZSBhbmQgbWF4LXN0
YWxlIGlzIG5vdAotCQkJICAgc2V0LCBkbyBub3QgdXNlIHRoZSB2YWx1ZSBmcm9tIHRoZSBjYWNo
ZQotCQkJICAgd2l0aG91dCB2YWxpZGF0aW9uICovCi0JCQlpZiAoKGd1aW50KSBtYXhfYWdlIDw9
IGN1cnJlbnRfYWdlICYmIG1heF9zdGFsZSA9PSAtMSkKLQkJCQlyZXR1cm4gV0VCS0lUX1NPVVBf
Q0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKLQkJfQotCX0KLQotCS8qIDYuIFRoZSBz
dG9yZWQgcmVzcG9uc2UgaXMgZWl0aGVyOiBmcmVzaCwgYWxsb3dlZCB0byBiZQotCSAqIHNlcnZl
ZCBzdGFsZSBvciBzdWNjZXNmdWxseSB2YWxpZGF0ZWQKLQkgKi8KLQkvKiBUT0RPIGNvbnNpZGVy
IGFsc28gcHJveHktcmV2YWxpZGF0ZSAmIHMtbWF4YWdlICovCi0JaWYgKGVudHJ5LT5tdXN0X3Jl
dmFsaWRhdGUpCi0JCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJ
REFUSU9OOwotCi0JaWYgKCF3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91Z2gg
KGVudHJ5LCBtaW5fZnJlc2gpKSB7Ci0JCS8qIE5vdCBmcmVzaCwgY2FuIGl0IGJlIHNlcnZlZCBz
dGFsZT8gKi8KLQkJaWYgKG1heF9zdGFsZSAhPSAtMSkgewotCQkJLyogR19NQVhJTlQzMiBtZWFu
cyB3ZSBhY2NlcHQgYW55IHN0YWxlbmVzcyAqLwotCQkJaWYgKG1heF9zdGFsZSA9PSBHX01BWElO
VDMyKQotCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsKLQotCQkJ
aWYgKCh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UgKGVudHJ5KSAtIGVu
dHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUpIDw9IChndWludCkgbWF4X3N0YWxlKQotCQkJCXJldHVy
biBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsKLQkJfQotCi0JCXJldHVybiBXRUJL
SVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OOwotCX0KLQotCXJldHVybiBX
RUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsKLX0KLQotLyoqCi0gKiB3ZWJraXRfc291
cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5OgotICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUK
LSAqIEBtc2c6IGEgI1NvdXBNZXNzYWdlCi0gKgotICogQ2FsY3VsYXRlcyB3aGV0aGVyIHRoZSBA
bXNnIGNhbiBiZSBjYWNoZWQgb3Igbm90LgotICoKLSAqIFJldHVybnM6IGEgI1dlYktpdFNvdXBD
YWNoZWFiaWxpdHkgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBAbXNnIGNhbiBiZSBjYWNo
ZWQgb3Igbm90LgotICoqLwotV2ViS2l0U291cENhY2hlYWJpbGl0eQotd2Via2l0X3NvdXBfY2Fj
aGVfZ2V0X2NhY2hlYWJpbGl0eSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2Ug
Km1zZykKLXsKLQlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNh
Y2hlKSwgV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEUpOwotCWdfcmV0dXJuX3ZhbF9pZl9m
YWlsIChTT1VQX0lTX01FU1NBR0UgKG1zZyksIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxF
KTsKLQotCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9HRVRfQ0xBU1MgKGNhY2hlKS0+Z2V0X2Nh
Y2hlYWJpbGl0eSAoY2FjaGUsIG1zZyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZm9yY2VfZmx1
c2hfdGltZW91dCAoZ3BvaW50ZXIgZGF0YSkKLXsKLQlnYm9vbGVhbiAqZm9yY2VkID0gKGdib29s
ZWFuICopZGF0YTsKLQkqZm9yY2VkID0gVFJVRTsKLQotCXJldHVybiBGQUxTRTsKLX0KLQotLyoq
Ci0gKiB3ZWJraXRfc291cF9jYWNoZV9mbHVzaDoKLSAqIEBjYWNoZTogYSAjV2ViS2l0U291cENh
Y2hlCi0gKiBAc2Vzc2lvbjogdGhlICNTb3VwU2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIEBj
YWNoZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmb3JjZSBhbGwgcGVuZGluZyB3cml0ZXMg
aW4gdGhlIEBjYWNoZSB0byBiZQotICogY29tbWl0dGVkIHRvIGRpc2suIEZvciBkb2luZyBzbyBp
dCB3aWxsIGl0ZXJhdGUgdGhlICNHTWFpbkNvbnRleHQKLSAqIGFzc29jaWF0ZWQgd2l0aCB0aGUg
QHNlc3Npb24gKHdoaWNoIGNhbiBiZSB0aGUgZGVmYXVsdCBvbmUpIGFzIGxvbmcKLSAqIGFzIG5l
ZWRlZC4KLSAqKi8KLXZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoIChXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlKQotewotCUdNYWluQ29udGV4dCAqYXN5bmNfY29udGV4dDsKLQlTb3VwU2Vzc2lv
biAqc2Vzc2lvbjsKLQlndWludCB0aW1lb3V0X2lkOwotCWdib29sZWFuIGZvcmNlZCA9IEZBTFNF
OwotCi0JZ19yZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSk7Ci0K
LQlzZXNzaW9uID0gY2FjaGUtPnByaXYtPnNlc3Npb247Ci0JZ19yZXR1cm5faWZfZmFpbCAoU09V
UF9JU19TRVNTSU9OIChzZXNzaW9uKSk7Ci0JYXN5bmNfY29udGV4dCA9IHNvdXBfc2Vzc2lvbl9n
ZXRfYXN5bmNfY29udGV4dCAoc2Vzc2lvbik7Ci0KLQkvKiBXZSBnaXZlIGNhY2hlIDEwIHNlY3Mg
dG8gZmluaXNoICovCi0JdGltZW91dF9pZCA9IGdfdGltZW91dF9hZGQgKDEwMDAwLCBmb3JjZV9m
bHVzaF90aW1lb3V0LCAmZm9yY2VkKTsKLQotCXdoaWxlICghZm9yY2VkICYmIGNhY2hlLT5wcml2
LT5uX3BlbmRpbmcgPiAwKQotCQlnX21haW5fY29udGV4dF9pdGVyYXRpb24gKGFzeW5jX2NvbnRl
eHQsIEZBTFNFKTsKLQotCWlmICghZm9yY2VkKQotCQlnX3NvdXJjZV9yZW1vdmUgKHRpbWVvdXRf
aWQpOwotCWVsc2UKLQkJZ193YXJuaW5nICgiQ2FjaGUgZmx1c2ggZmluaXNoZWQgZGVzcGl0ZSAl
ZCBwZW5kaW5nIHJlcXVlc3RzIiwgY2FjaGUtPnByaXYtPm5fcGVuZGluZyk7Ci19Ci0KLXN0YXRp
YyB2b2lkCi1jbGVhcl9jYWNoZV9pdGVtIChncG9pbnRlciBkYXRhLAotCQkgIGdwb2ludGVyIHVz
ZXJfZGF0YSkKLXsKLQlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gKFdlYktpdFNvdXBDYWNoZSAq
KSB1c2VyX2RhdGE7Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gKFdlYktpdFNvdXBD
YWNoZUVudHJ5ICopIGRhdGE7Ci0KLQlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3Zl
IChjYWNoZSwgZW50cnkpKQotCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwg
VFJVRSk7Ci19Ci0KLS8qKgotICogd2Via2l0X3NvdXBfY2FjaGVfY2xlYXI6Ci0gKiBAY2FjaGU6
IGEgI1dlYktpdFNvdXBDYWNoZQotICoKLSAqIFdpbGwgcmVtb3ZlIGFsbCBlbnRyaWVzIGluIHRo
ZSBAY2FjaGUgcGx1cyBhbGwgdGhlIGNhY2hlIGZpbGVzCi0gKiBhc3NvY2lhdGVkIHdpdGggdGhl
bS4KLSAqKi8KLXZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX2NsZWFyIChXZWJLaXRTb3VwQ2FjaGUg
KmNhY2hlKQotewotCUdIYXNoVGFibGUgKmhhc2g7Ci0JR0xpc3QgKmVudHJpZXM7Ci0KLQlnX3Jl
dHVybl9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9DQUNIRSAoY2FjaGUpKTsKLQotCWhhc2ggPSBj
YWNoZS0+cHJpdi0+Y2FjaGU7Ci0JZ19yZXR1cm5faWZfZmFpbCAoaGFzaCk7Ci0KLQkvLyBDYW5u
b3QgdXNlIGdfaGFzaF90YWJsZV9mb3JlYWNoIGFzIGNhbGxiYWNrcyBtdXN0IG5vdCBtb2RpZnkg
dGhlIGhhc2ggdGFibGUKLQllbnRyaWVzID0gZ19oYXNoX3RhYmxlX2dldF92YWx1ZXMgKGhhc2gp
OwotCWdfbGlzdF9mb3JlYWNoIChlbnRyaWVzLCBjbGVhcl9jYWNoZV9pdGVtLCBjYWNoZSk7Ci0J
Z19saXN0X2ZyZWUgKGVudHJpZXMpOwotfQotCi1Tb3VwTWVzc2FnZSAqCi13ZWJraXRfc291cF9j
YWNoZV9nZW5lcmF0ZV9jb25kaXRpb25hbF9yZXF1ZXN0IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
LCBTb3VwTWVzc2FnZSAqb3JpZ2luYWwpCi17Ci0JU291cE1lc3NhZ2UgKm1zZzsKLQlTb3VwVVJJ
ICp1cmk7Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OwotCWNoYXIgKmtleTsKLQljb25z
dCBjaGFyICp2YWx1ZTsKLQotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9D
QUNIRSAoY2FjaGUpLCBOVUxMKTsKLQlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNT
QUdFIChvcmlnaW5hbCksIE5VTEwpOwotCi0JLyogRmlyc3QgY29weSB0aGUgZGF0YSB3ZSBuZWVk
IGZyb20gdGhlIG9yaWdpbmFsIG1lc3NhZ2UgKi8KLQl1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3Vy
aSAob3JpZ2luYWwpOwotCW1zZyA9IHNvdXBfbWVzc2FnZV9uZXdfZnJvbV91cmkgKG9yaWdpbmFs
LT5tZXRob2QsIHVyaSk7Ci0KLQlzb3VwX21lc3NhZ2VfaGVhZGVyc19mb3JlYWNoIChvcmlnaW5h
bC0+cmVxdWVzdF9oZWFkZXJzLAotCQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNo
RnVuYyljb3B5X2hlYWRlcnMsCi0JCQkJICAgICAgbXNnLT5yZXF1ZXN0X2hlYWRlcnMpOwotCi0J
LyogTm93IGFkZCB0aGUgdmFsaWRhdG9yIGVudHJpZXMgaW4gdGhlIGhlYWRlciBmcm9tIHRoZSBj
YWNoZWQKLQkgICBkYXRhICovCi0Ja2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG9y
aWdpbmFsKTsKLQllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNo
ZSwga2V5KTsKLQlnX2ZyZWUgKGtleSk7Ci0KLQlnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnks
IE5VTEwpOwotCi0JZW50cnktPmJlaW5nX3ZhbGlkYXRlZCA9IFRSVUU7Ci0KLQl2YWx1ZSA9IHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJMYXN0LU1vZGlmaWVkIik7
Ci0JaWYgKHZhbHVlKQotCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+cmVxdWVz
dF9oZWFkZXJzLAotCQkJCQkgICAgICJJZi1Nb2RpZmllZC1TaW5jZSIsCi0JCQkJCSAgICAgdmFs
dWUpOwotCXZhbHVlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywg
IkVUYWciKTsKLQlpZiAodmFsdWUpCi0JCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAobXNn
LT5yZXF1ZXN0X2hlYWRlcnMsCi0JCQkJCSAgICAgIklmLU5vbmUtTWF0Y2giLAotCQkJCQkgICAg
IHZhbHVlKTsKLQlyZXR1cm4gbXNnOwotfQotCi0jZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0ZJ
TEUgInNvdXAuY2FjaGUiCi0KLSNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfSEVBREVSU19GT1JN
QVQgIntzc30iCi0jZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCAiKHNz
YnV1dXV1YSIgV0VCS0lUX1NPVVBfQ0FDSEVfSEVBREVSU19GT1JNQVQgIikiCi0jZGVmaW5lIFdF
QktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9STUFUICJhIiBXRUJLSVRfU09VUF9DQUNIRV9QSEVB
REVSU19GT1JNQVQKLQotLyogQmFzaWNhbGx5IHRoZSBzYW1lIGZvcm1hdCB0aGFuIGFib3ZlIGV4
Y2VwdCB0aGF0IHNvbWUgc3RyaW5ncyBhcmUKLSAgIHByZXBlbmRlZCB3aXRoICYuIFRoaXMgd2F5
IHRoZSBHVmFyaWFudCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKLSAgIGRhdGEgaW5zdGVhZCBv
ZiBkdXBsaWNhdGluZyB0aGUgc3RyaW5nICovCi0jZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0RF
Q09ERV9IRUFERVJTX0ZPUk1BVCAieyZzJnN9IgotCi1zdGF0aWMgdm9pZAotcGFja19lbnRyeSAo
Z3BvaW50ZXIgZGF0YSwKLQkgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCVdlYktpdFNvdXBD
YWNoZUVudHJ5ICplbnRyeSA9IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqKSBkYXRhOwotCVNvdXBN
ZXNzYWdlSGVhZGVyc0l0ZXIgaXRlcjsKLQljb25zdCBnY2hhciAqaGVhZGVyX2tleSwgKmhlYWRl
cl92YWx1ZTsKLQlHVmFyaWFudEJ1aWxkZXIgKmhlYWRlcnNfYnVpbGRlcjsKLQlHVmFyaWFudEJ1
aWxkZXIgKmVudHJpZXNfYnVpbGRlciA9IChHVmFyaWFudEJ1aWxkZXIgKil1c2VyX2RhdGE7Ci0K
LQkvKiBEbyBub3Qgc3RvcmUgbm9uLWNvbnNvbGlkYXRlZCBlbnRyaWVzICovCi0JaWYgKGVudHJ5
LT5kaXJ0eSB8fCBlbnRyeS0+d3JpdGluZyB8fCAhZW50cnktPmtleSkKLQkJcmV0dXJuOwotCi0J
LyogUGFjayBoZWFkZXJzICovCi0JaGVhZGVyc19idWlsZGVyID0gZ192YXJpYW50X2J1aWxkZXJf
bmV3IChHX1ZBUklBTlRfVFlQRV9BUlJBWSk7Ci0Jc291cF9tZXNzYWdlX2hlYWRlcnNfaXRlcl9p
bml0ICgmaXRlciwgZW50cnktPmhlYWRlcnMpOwotCXdoaWxlIChzb3VwX21lc3NhZ2VfaGVhZGVy
c19pdGVyX25leHQgKCZpdGVyLCAmaGVhZGVyX2tleSwgJmhlYWRlcl92YWx1ZSkpIHsKLQkJaWYg
KGdfdXRmOF92YWxpZGF0ZSAoaGVhZGVyX3ZhbHVlLCAtMSwgTlVMTCkpCi0JCQlnX3ZhcmlhbnRf
YnVpbGRlcl9hZGQgKGhlYWRlcnNfYnVpbGRlciwgV0VCS0lUX1NPVVBfQ0FDSEVfSEVBREVSU19G
T1JNQVQsCi0JCQkJCSAgICAgICBoZWFkZXJfa2V5LCBoZWFkZXJfdmFsdWUpOwotCX0KLQotCS8q
IEVudHJ5IGRhdGEgKi8KLQlnX3ZhcmlhbnRfYnVpbGRlcl9hZGQgKGVudHJpZXNfYnVpbGRlciwg
V0VCS0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9STUFULAotCQkJICAgICAgIGVudHJ5LT5rZXks
IGVudHJ5LT5maWxlbmFtZSwgZW50cnktPm11c3RfcmV2YWxpZGF0ZSwKLQkJCSAgICAgICBlbnRy
eS0+ZnJlc2huZXNzX2xpZmV0aW1lLCBlbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdlLAotCQkJ
ICAgICAgIGVudHJ5LT5yZXNwb25zZV90aW1lLCBlbnRyeS0+aGl0cywgZW50cnktPmxlbmd0aCwg
aGVhZGVyc19idWlsZGVyKTsKLQotCWdfdmFyaWFudF9idWlsZGVyX3VucmVmIChoZWFkZXJzX2J1
aWxkZXIpOwotfQotCi12b2lkCi13ZWJraXRfc291cF9jYWNoZV9kdW1wIChXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlKQotewotCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09V
UF9DQUNIRV9HRVRfUFJJVkFURSAoY2FjaGUpOwotCWdjaGFyICpmaWxlbmFtZTsKLQlHVmFyaWFu
dEJ1aWxkZXIgKmVudHJpZXNfYnVpbGRlcjsKLQlHVmFyaWFudCAqY2FjaGVfdmFyaWFudDsKLQot
CWlmICghZ19saXN0X2xlbmd0aCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCkpCi0JCXJldHVybjsK
LQotCS8qIENyZWF0ZSB0aGUgYnVpbGRlciBhbmQgaXRlcmF0ZSBvdmVyIGFsbCBlbnRyaWVzICov
Ci0JZW50cmllc19idWlsZGVyID0gZ192YXJpYW50X2J1aWxkZXJfbmV3IChHX1ZBUklBTlRfVFlQ
RV9BUlJBWSk7Ci0JZ19saXN0X2ZvcmVhY2ggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIHBhY2tf
ZW50cnksIGVudHJpZXNfYnVpbGRlcik7Ci0KLQkvKiBTZXJpYWxpemUgYW5kIGR1bXAgKi8KLQlj
YWNoZV92YXJpYW50ID0gZ192YXJpYW50X25ldyAoV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19G
T1JNQVQsIGVudHJpZXNfYnVpbGRlcik7Ci0JZ192YXJpYW50X2J1aWxkZXJfdW5yZWYgKGVudHJp
ZXNfYnVpbGRlcik7Ci0KLQlmaWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUgKHByaXYtPmNhY2hl
X2RpciwgV0VCS0lUX1NPVVBfQ0FDSEVfRklMRSwgTlVMTCk7Ci0JZ19maWxlX3NldF9jb250ZW50
cyAoZmlsZW5hbWUsIChjb25zdCBnY2hhciAqKWdfdmFyaWFudF9nZXRfZGF0YSAoY2FjaGVfdmFy
aWFudCksCi0JCQkgICAgIGdfdmFyaWFudF9nZXRfc2l6ZSAoY2FjaGVfdmFyaWFudCksIE5VTEwp
OwotCWdfZnJlZSAoZmlsZW5hbWUpOwotCWdfdmFyaWFudF91bnJlZiAoY2FjaGVfdmFyaWFudCk7
Ci19Ci0KLXZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX2xvYWQgKFdlYktpdFNvdXBDYWNoZSAqY2Fj
aGUpCi17Ci0JZ2NoYXIgKmZpbGVuYW1lID0gTlVMTCwgKmNvbnRlbnRzID0gTlVMTDsKLQlHVmFy
aWFudCAqY2FjaGVfdmFyaWFudDsKLQlHVmFyaWFudEl0ZXIgKmVudHJpZXNfaXRlciwgKmhlYWRl
cnNfaXRlcjsKLQlHVmFyaWFudFR5cGUgKnZhcmlhbnRfZm9ybWF0OwotCWdzaXplIGxlbmd0aDsK
LQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7Ci0JV2ViS2l0U291cENhY2hlUHJpdmF0ZSAq
cHJpdiA9IGNhY2hlLT5wcml2OwotCi0JZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwcml2
LT5jYWNoZV9kaXIsIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUsIE5VTEwpOwotCWlmICghZ19maWxl
X2dldF9jb250ZW50cyAoZmlsZW5hbWUsICZjb250ZW50cywgJmxlbmd0aCwgTlVMTCkpIHsKLQkJ
Z19mcmVlIChmaWxlbmFtZSk7Ci0JCWdfZnJlZSAoY29udGVudHMpOwotCQlyZXR1cm47Ci0JfQot
CWdfZnJlZSAoZmlsZW5hbWUpOwotCi0JdmFyaWFudF9mb3JtYXQgPSBnX3ZhcmlhbnRfdHlwZV9u
ZXcgKFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9STUFUKTsKLQljYWNoZV92YXJpYW50ID0g
Z192YXJpYW50X25ld19mcm9tX2RhdGEgKHZhcmlhbnRfZm9ybWF0LCAoY29uc3QgZ2NoYXIgKilj
b250ZW50cywgbGVuZ3RoLCBGQUxTRSwgZ19mcmVlLCBjb250ZW50cyk7Ci0JZ192YXJpYW50X3R5
cGVfZnJlZSAodmFyaWFudF9mb3JtYXQpOwotCi0JZ192YXJpYW50X2dldCAoY2FjaGVfdmFyaWFu
dCwgV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQsICZlbnRyaWVzX2l0ZXIpOwotCWVu
dHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSk7Ci0KLQl3aGlsZSAoZ192
YXJpYW50X2l0ZXJfbG9vcCAoZW50cmllc19pdGVyLCBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVS
U19GT1JNQVQsCi0JCQkJICAgICZlbnRyeS0+a2V5LCAmZW50cnktPmZpbGVuYW1lLCAmZW50cnkt
Pm11c3RfcmV2YWxpZGF0ZSwKLQkJCQkgICAgJmVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUsICZl
bnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdlLAotCQkJCSAgICAmZW50cnktPnJlc3BvbnNlX3Rp
bWUsICZlbnRyeS0+aGl0cywgJmVudHJ5LT5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmaGVhZGVyc19pdGVyKSkgewotCQljb25zdCBnY2hhciAqaGVhZGVyX2tl
eSwgKmhlYWRlcl92YWx1ZTsKLQotCQkvKiBTb3VwTWVzc2FnZSBIZWFkZXJzICovCi0JCWVudHJ5
LT5oZWFkZXJzID0gc291cF9tZXNzYWdlX2hlYWRlcnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVS
U19SRVNQT05TRSk7Ci0JCXdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wIChoZWFkZXJzX2l0ZXIs
IFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09ERV9IRUFERVJTX0ZPUk1BVCwgJmhlYWRlcl9rZXksICZo
ZWFkZXJfdmFsdWUpKQotCQkJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChlbnRyeS0+aGVh
ZGVycywgaGVhZGVyX2tleSwgaGVhZGVyX3ZhbHVlKTsKLQotCQkvKiBJbnNlcnQgaW4gY2FjaGUg
Ki8KLQkJaWYgKCF3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pbnNlcnRfYnlfa2V5IChjYWNoZSwg
KGNvbnN0IGdjaGFyICopZW50cnktPmtleSwgZW50cnksIEZBTFNFKSkKLQkJCXdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKLQotCQkvKiBOZXcgZW50cnkgZm9yIHRo
ZSBuZXh0IGl0ZXJhdGlvbi4gVGhpcyBjcmVhdGVzIGFuCi0JCSAgIGV4dHJhIG9iamVjdCB0aGUg
bGFzdCBpdGVyYXRpb24gYnV0IGl0J3Mgd29ydGggaXQKLQkJICAgYXMgd2Ugc2F2ZSBzZXZlcmFs
IGlmJ3MgKi8KLQkJZW50cnkgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNoZUVudHJ5KTsK
LQl9Ci0JLyogUmVtb3ZlIGxhc3QgY3JlYXRlZCBlbnRyeSAqLwotCWdfc2xpY2VfZnJlZSAoV2Vi
S2l0U291cENhY2hlRW50cnksIGVudHJ5KTsKLQotCS8qIFNvcnQgTFJVIChzaG91bGRuJ3QgYmUg
bmVlZGVkKS4gRmlyc3QgcmV2ZXJzZSBhcyBlbGVtZW50cwotCSAqIGFyZSBhbHdheXMgcHJlcGVu
ZGVkIHdoZW4gaW5zZXJ0aW5nCi0JICovCi0JY2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlz
dF9yZXZlcnNlIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0KTsKLQljYWNoZS0+cHJpdi0+bHJ1X3N0
YXJ0ID0gZ19saXN0X3NvcnQgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGxydV9jb21wYXJlX2Z1
bmMpOwotCi0JLyogZnJlZXMgKi8KLQlnX3ZhcmlhbnRfaXRlcl9mcmVlIChlbnRyaWVzX2l0ZXIp
OwotCWdfdmFyaWFudF91bnJlZiAoY2FjaGVfdmFyaWFudCk7Ci19Ci0KLXZvaWQKLXdlYmtpdF9z
b3VwX2NhY2hlX3NldF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwKLQkJCQlndWlu
dCBtYXhfc2l6ZSkKLXsKLQljYWNoZS0+cHJpdi0+bWF4X3NpemUgPSBtYXhfc2l6ZTsKLQljYWNo
ZS0+cHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6ZSA9IGNhY2hlLT5wcml2LT5tYXhfc2l6ZSAvIE1B
WF9FTlRSWV9EQVRBX1BFUkNFTlRBR0U7Ci19Ci0KLWd1aW50Ci13ZWJraXRfc291cF9jYWNoZV9n
ZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCi17Ci0JcmV0dXJuIGNhY2hlLT5w
cml2LT5tYXhfc2l6ZTsKLX0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlNDQ3Y2ZjLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBA
QAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1i
YXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogc291cC1jYWNoZS5oOgotICoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXRUJLSVRfU09VUF9DQUNI
RV9ICi0jZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0ggMQotCi0jaWYgQlVJTERJTkdfR1RLX18K
LSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgotI2Vsc2UKLSNpZm5kZWYgV0VCS0lU
X0FQSQotI2RlZmluZSBXRUJLSVRfQVBJCi0jZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8bGli
c291cC9zb3VwLXR5cGVzLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotCi1HX0JFR0lOX0RFQ0xT
Ci0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSAgICAgICAgICAgICh3ZWJraXRfc291
cF9jYWNoZV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEUob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1NP
VVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZSkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9U
WVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZUNsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lT
X1NPVVBfQ0FDSEUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9i
aiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9DQUNI
RV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgob2JqKSwgV0VCS0lUX1RZ
UEVfU09VUF9DQUNIRSkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9DTEFTUyhvYmop
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FD
SEUsIFdlYktpdFNvdXBDYWNoZUNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBD
YWNoZSBXZWJLaXRTb3VwQ2FjaGU7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cENhY2hlUHJp
dmF0ZSBXZWJLaXRTb3VwQ2FjaGVQcml2YXRlOwotCi10eXBlZGVmIGVudW0gewotCVdFQktJVF9T
T1VQX0NBQ0hFX0NBQ0hFQUJMRSA9ICgxIDw8IDApLAotCVdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FD
SEVBQkxFID0gKDEgPDwgMSksCi0JV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMgPSAoMSA8
PCAyKSwKLQlXRUJLSVRfU09VUF9DQUNIRV9WQUxJREFURVMgPSAoMSA8PCAzKQotfSBXZWJLaXRT
b3VwQ2FjaGVhYmlsaXR5OwotCi10eXBlZGVmIGVudW0gewotCVdFQktJVF9TT1VQX0NBQ0hFX1JF
U1BPTlNFX0ZSRVNILAotCVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJ
T04sCi0JV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEUKLX0gV2ViS2l0U291cENhY2hl
UmVzcG9uc2U7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VT
RVIsCi0JV0VCS0lUX1NPVVBfQ0FDSEVfU0hBUkVECi19IFdlYktpdFNvdXBDYWNoZVR5cGU7Ci0K
LXN0cnVjdCBfV2ViS2l0U291cENhY2hlIHsKLQlHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLQot
CVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXY7Ci19OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0J
R09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLQotCS8qIG1ldGhvZHMgKi8KLQlXZWJLaXRTb3Vw
Q2FjaGVhYmlsaXR5ICgqZ2V0X2NhY2hlYWJpbGl0eSkoV2ViS2l0U291cENhY2hlICpjYWNoZSwg
U291cE1lc3NhZ2UgKm1zZyk7Ci0KLQkvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICov
Ci0Jdm9pZCAoKl9saWJzb3VwX3Jlc2VydmVkMSkodm9pZCk7Ci0Jdm9pZCAoKl9saWJzb3VwX3Jl
c2VydmVkMikodm9pZCk7Ci0Jdm9pZCAoKl9saWJzb3VwX3Jlc2VydmVkMykodm9pZCk7Ci19IFdl
YktpdFNvdXBDYWNoZUNsYXNzOwotCi1XRUJLSVRfQVBJIEdUeXBlICAgICAgICAgICAgIHdlYmtp
dF9zb3VwX2NhY2hlX2dldF90eXBlICh2b2lkKTsKLVdFQktJVF9BUEkgV2ViS2l0U291cENhY2hl
ICAqd2Via2l0X3NvdXBfY2FjaGVfbmV3IChjb25zdCBjaGFyICAqY2FjaGVfZGlyLAotCQkJCQkJ
ICAgIFdlYktpdFNvdXBDYWNoZVR5cGUgY2FjaGVfdHlwZSk7Ci1XRUJLSVRfQVBJIHZvaWQgICAg
ICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoIChXZWJLaXRTb3VwQ2FjaGUgICAqY2Fj
aGUpOwotV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9jbGVh
ciAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlKTsKLQotV0VCS0lUX0FQSSB2b2lkICAgICAgICAg
ICAgICB3ZWJraXRfc291cF9jYWNoZV9kdW1wIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKLVdF
QktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfbG9hZCAoV2ViS2l0
U291cENhY2hlICpjYWNoZSk7Ci0KLVdFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0
X3NvdXBfY2FjaGVfc2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAotCQkJCQkJ
CSAgICAgZ3VpbnQgbWF4X3NpemUpOwotV0VCS0lUX0FQSSBndWludCAgICAgICAgICAgICB3ZWJr
aXRfc291cF9jYWNoZV9nZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpOwotCi1H
X0VORF9ERUNMUwotCi0KLSNlbmRpZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9IICovCi0KZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXgg
Nzk2NmRlMi4uYTFlNDliZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0xMi0wOSAgRGFuIFdp
bnNoaXAgIDxkYW53QGdub21lLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgbGlic291cC1iYXNlZCBjYWNoZS9yZXF1ZXN0ZXIgQVBJCisK
KyAgICAgICAgW0dUS10gZHJvcCBzb3VwIGNhY2hlIHN0dWZmLCB1c2UgdmVyc2lvbnMgZnJvbSBs
aWJzb3VwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDc0NworCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisKIDIwMTAtMTItMDggIERhbiBXaW5z
aGlwICA8ZGFud0Bnbm9tZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvV2ViS2l0L2d0ay9H
TlVtYWtlZmlsZS5hbQppbmRleCBiZTY1ODQxLi5hZWQyODJmIDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTEw
OCw3ICsxMDgsNiBAQCBsaWJ3ZWJraXRndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBf
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfTElCQQogCSQoT0xFMzJfTElCUykKIAog
d2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCi0JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmggXAogCSQoc3JjZGlyKS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRlZmluZXMuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25s
b2FkLmggXApAQCAtMjI3LDcgKzIyNiw2IEBAICQoV0VCS0lUX0dJUlNPVVJDRVMpOiAkKEdfSVJf
U0NBTk5FUikgJChKU0NPUkVfR0lSU09VUkNFUykgbGlid2Via2l0Z3RrLUBXRUJLSVRHCiAJICAg
ICAtLW91dHB1dD0kQCBcCiAJICAgICAtLWFkZC1pbmNsdWRlLXBhdGg9JChXZWJLaXQpIFwKIAkg
ICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKGJ1aWxkZGlyKSBcCi0JICAgICAtSSQodG9wX3NyY2Rp
cikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUgXAogCSAgICAgLUkkKFdlYktp
dCkgXAogCSAgICAgLUkkKEdFTlNPVVJDRVMpIFwKIAkgICAgIC1JJChHRU5TT1VSQ0VTX1dFQktJ
VCkgXApAQCAtMzQzLDcgKzM0MSw2IEBAIG5vaW5zdF9QUk9HUkFNUyArPSAkKFRFU1RfUFJPR1Mp
CiB3ZWJraXRfdGVzdHNfY2ZsYWdzID0gXAogCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKIAktSSQo
c3JjZGlyKS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVycyBcCi0JLUkkKFdlYkNvcmUp
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZSBcCiAJLUkkKFdlYktpdCkgXAogCS1JJChHRU5T
T1VSQ0VTKSBcCiAJLUkkKHRvcF9idWlsZGRpcikvV2ViS2l0L2d0ayBcCi0tIAoxLjcuMy4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80568</attachid>
            <date>2011-01-29 11:04:25 -0800</date>
            <delta_ts>2011-01-29 14:45:27 -0800</delta_ts>
            <desc>updated patch (for source tree moves and some other stuff)</desc>
            <filename>0001-Use-libsoup-based-cache-requester-API.patch</filename>
            <type>text/plain</type>
            <size>184474</size>
            <attacher name="Dan Winship">danw</attacher>
            
              <data encoding="base64">RnJvbSA1MjA4NmVkODUwMTk2MDMzZGRkZTMxMGNhYWQyZWYzYTZiZDkxNmNkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW4gV2luc2hpcCA8ZGFud0Bnbm9tZS5vcmc+CkRhdGU6IFNh
dCwgMjkgSmFuIDIwMTEgMTM6NTU6NDggLTA1MDAKU3ViamVjdDogW1BBVENIXSBVc2UgbGlic291
cC1iYXNlZCBjYWNoZS9yZXF1ZXN0ZXIgQVBJCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOCArCiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgMjEgKy0KIC4uLi9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaCAgICAgIHwgICAgOSArLQogLi4uL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwICAgfCAgMTA0ICstCiAuLi4v
c291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyAgICAgICB8ICAyMDAgLS0t
CiAuLi4vc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCAgICAgICB8ICAg
NjIgLQogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgICAg
fCAgOTIyIC0tLS0tLS0tLS0tCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1
dC1zdHJlYW0uaCAgICB8ICAgNzcgLQogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QtZGF0YS5jICAgICAgICAgfCAgMTcwIC0tCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC1kYXRhLmggICAgICAgICB8ICAgNTIgLQogLi4uL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtZmlsZS5jICAgICAgICAgfCAgMzMxIC0tLS0KIC4uLi9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuaCAgICAgICAgIHwgICA1NCAtCiAuLi4vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMgICAgICAgICB8ICAzNTYgLS0tLS0KIC4uLi9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCAgICAgICAgIHwgICA1NCAtCiAu
Li4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jICAgICB8ICAzMTIg
LS0tLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaCAgICAg
fCAgMTAwIC0tCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVy
LmMgICB8ICAxODggLS0tCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdGVyLmggICB8ICAgODEgLQogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1j
YWNoZS1wcml2YXRlLmggfCAgIDQyIC0KIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3Nv
dXAtY2FjaGUuYyAgICAgICAgIHwgMTY3NyAtLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL25ldHdv
cmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oICAgICAgICAgfCAgMTA2IC0tCiBTb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwog
U291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgfCAgICAz
IC0KIDIzIGZpbGVzIGNoYW5nZWQsIDExMSBpbnNlcnRpb25zKCspLCA0ODU5IGRlbGV0aW9ucygt
KQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYwogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9y
eS1pbnB1dC1zdHJlYW0uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1odHRwLWlucHV0LXN0cmVhbS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWRhdGEuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5jCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC1maWxlLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
aHR0cC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1j
YWNoZS1wcml2YXRlLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYwogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdlZTliN2EuLjQ5NWE0M2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsNSArMSw0MyBAQAogMjAxMS0wMS0yOSAgRGFuIFdpbnNoaXAgIDxkYW53QGdub21lLm9yZz4K
IAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbGli
c291cC1iYXNlZCBjYWNoZS9yZXF1ZXN0ZXIgQVBJCisKKyAgICAgICAgW0dUS10gZHJvcCBzb3Vw
IGNhY2hlIHN0dWZmLCB3aGljaCBoYXMgYmVlbiBtb3ZlZCB0byBsaWJzb3VwCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDc0NworCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZUludGVybmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpS
ZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VIYW5kbGVTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuc3VyZVNlc3Npb25J
c0luaXRpYWxpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRGF0YVVybCk6CisgICAgICAg
IChXZWJDb3JlOjpzZW5kUmVxdWVzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0
SHR0cCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZl
cnNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpzdGFydEdpbyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlu
cHV0LXN0cmVhbS5jOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmM6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmg6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1maWxlLmM6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1maWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmM6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0ZXIuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1j
YWNoZS5oOiBSZW1vdmVkLgorCisyMDExLTAxLTI5ICBEYW4gV2luc2hpcCAgPGRhbndAZ25vbWUu
b3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KIAogICAgICAgICBbR1RLXSBS
ZW1vdmUgSEFWRV9MSUJTT1VQXzJfMjlfOTAgY29uZGl0aW9uYWxzOyB3ZSBkZXBlbmQgb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KaW5kZXggZmI0N2VhMi4uMDJiODAwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KQEAgLTg3LDkgKzg3LDcgQEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIFwKIAktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsgXAogCS1JJChzcmNkaXIp
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQKKwktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAKIAogd2ViY29yZV9idWlsdF9ub3NvdXJjZXMg
Kz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvdG9rZW5pemVyLmNwcApAQCAtMzgwOSwyMyAr
MzgwNyw2IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZVNvdXAuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cFVSSVV0aWxzLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBVUklVdGlscy5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3Ry
ZWFtLmMgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYyBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1kYXRhLmMgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtZGF0YS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYyBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAu
aCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC5jIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3Rlci5jIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMgXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJp
dmF0ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
CmluZGV4IGVkNjY5NDQuLjgyOWIwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00Niw5ICs0Niwx
MCBAQAogI2VuZGlmCiAKICNpZiBVU0UoU09VUCkKLSNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5o
IgogI2luY2x1ZGUgPEdSZWZQdHIuaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNkZWZp
bmUgTElCU09VUF9VU0VfVU5TVEFCTEVfUkVRVUVTVF9BUEkKKyNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAtcmVxdWVzdC5oPgogY2xhc3MgRnJhbWU7CiAjZW5kaWYKIApAQCAtMTMyLDkgKzEzMyw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIG1fdXNlciA9IHVybC51c2VyKCk7CiAg
ICAgICAgICAgICBtX3Bhc3MgPSB1cmwucGFzcygpOwogICAgICAgICAgICAgbV9maXJzdFJlcXVl
c3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKLSNpZiBVU0UoU09VUCkKLSAgICAgICAgICAgIG1fcmVx
dWVzdGVyID0gYWRvcHRHUmVmKHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9uZXcoKSk7Ci0jZW5kaWYK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgflJlc291cmNlSGFuZGxlSW50ZXJuYWwoKTsK
QEAgLTE5MCw4ICsxODgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEdSZWZQdHI8
U291cE1lc3NhZ2U+IG1fc291cE1lc3NhZ2U7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9y
ZXNwb25zZTsKICAgICAgICAgYm9vbCBtX2NhbmNlbGxlZDsKLSAgICAgICAgR1JlZlB0cjxXZWJL
aXRTb3VwUmVxdWVzdD4gbV9zb3VwUmVxdWVzdDsKLSAgICAgICAgR1JlZlB0cjxXZWJLaXRTb3Vw
UmVxdWVzdGVyPiBtX3JlcXVlc3RlcjsKKyAgICAgICAgR1JlZlB0cjxTb3VwUmVxdWVzdD4gbV9z
b3VwUmVxdWVzdDsKICAgICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07
CiAgICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwogICAgICAgICBj
aGFyKiBtX2J1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggODQzY2YwNy4uNGRiNTFh
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgog
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgi
CiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRl
IDxmY250bC5oPgpAQCAtNTYsNiArNTUsMTAgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNp
bmNsdWRlIDx1bmlzdGQuaD4KIAorI2RlZmluZSBMSUJTT1VQX1VTRV9VTlNUQUJMRV9SRVFVRVNU
X0FQSQorI2luY2x1ZGUgPGxpYnNvdXAvc291cC1yZXF1ZXN0ZXIuaD4KKyNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAtcmVxdWVzdC1odHRwLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2RlZmlu
ZSBSRUFEX0JVRkZFUl9TSVpFIDgxOTIKQEAgLTE0NSw2ICsxNDgsNDIgQEAgUmVzb3VyY2VIYW5k
bGU6On5SZXNvdXJjZUhhbmRsZSgpCiAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKHRo
aXMsIHRydWUpOwogfQogCisvLyBWYWx1ZXMgdGFrZW4gZnJvbSBodHRwOi8vc3RldmVzb3VkZXJz
LmNvbS91YS9pbmRleC5waHAgZm9sbG93aW5nCisvLyB0aGUgcnVsZSAiRG8gV2hhdCBFdmVyeSBP
dGhlciBNb2Rlcm4gQnJvd3NlciBJcyBEb2luZyIuIFRoZXkgc2VlbQorLy8gdG8gc2lnbmlmaWNh
bnRseSBpbXByb3ZlIHBhZ2UgbG9hZGluZyB0aW1lIGNvbXBhcmVkIHRvIHNvdXAncworLy8gZGVm
YXVsdCB2YWx1ZXMuCisjZGVmaW5lIE1BWF9DT05ORUNUSU9OUyAgICAgICAgICA2MAorI2RlZmlu
ZSBNQVhfQ09OTkVDVElPTlNfUEVSX0hPU1QgNgorCitzdGF0aWMgdm9pZCBlbnN1cmVTZXNzaW9u
SXNJbml0aWFsaXplZChTb3VwU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAgICBpZiAoZ19vYmplY3Rf
Z2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJ3ZWJraXQtaW5pdCIpKQorICAgICAgICByZXR1
cm47CisKKyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBTT1VQX0NPT0tJRV9KQVIoc291cF9zZXNz
aW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9DT09LSUVfSkFSKSk7CisgICAgaWYg
KCFqYXIpCisgICAgICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1NF
U1NJT05fRkVBVFVSRShkZWZhdWx0Q29va2llSmFyKCkpKTsKKyAgICBlbHNlCisgICAgICAgIHNl
dERlZmF1bHRDb29raWVKYXIoamFyKTsKKworICAgIGlmICghc291cF9zZXNzaW9uX2dldF9mZWF0
dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9MT0dHRVIpICYmIExvZ05ldHdvcmsuc3RhdGUgPT0gV1RG
TG9nQ2hhbm5lbE9uKSB7CisgICAgICAgIFNvdXBMb2dnZXIqIGxvZ2dlciA9IHNvdXBfbG9nZ2Vy
X25ldyhzdGF0aWNfY2FzdDxTb3VwTG9nZ2VyTG9nTGV2ZWw+KFNPVVBfTE9HR0VSX0xPR19CT0RZ
KSwgLTEpOworCXNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1NFU1NJT05f
RkVBVFVSRShsb2dnZXIpKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobG9nZ2VyKTsKKyAgICB9
CisKKyAgICBTb3VwUmVxdWVzdGVyKiByZXF1ZXN0ZXIgPSBzb3VwX3JlcXVlc3Rlcl9uZXcoKTsK
KyAgICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9TRVNTSU9OX0ZFQVRV
UkUocmVxdWVzdGVyKSk7CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdGVyKTsKKworICAgIGdf
b2JqZWN0X3NldChzZXNzaW9uLAorICAgICAgICAgICAgICAgICBTT1VQX1NFU1NJT05fTUFYX0NP
Tk5TLCBNQVhfQ09OTkVDVElPTlMsCisgICAgICAgICAgICAgICAgIFNPVVBfU0VTU0lPTl9NQVhf
Q09OTlNfUEVSX0hPU1QsIE1BWF9DT05ORUNUSU9OU19QRVJfSE9TVCwKKyAgICAgICAgICAgICAg
ICAgTlVMTCk7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChzZXNzaW9uKSwgIndl
YmtpdC1pbml0IiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHhkZWFkYmVlZikpOworfQorCiB2
b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwgJnVybCkKIHsKICAg
ICBHT3duUHRyPFNvdXBVUkk+IHNvdXBVUkkoc291cF91cmlfbmV3KHVybC5wcmV0dHlVUkwoKS51
dGY4KCkuZGF0YSgpKSk7CkBAIC0zNjAsMTUgKzM5OSwxNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFy
c2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSBoYW5kbGUtPmRlZmF1bHRTZXNzaW9uKCk7Cisg
ICAgZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoc2Vzc2lvbik7CisgICAgU291cFJlcXVlc3Rl
ciogcmVxdWVzdGVyID0gU09VUF9SRVFVRVNURVIoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNl
c3Npb24sIFNPVVBfVFlQRV9SRVFVRVNURVIpKTsKICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7
Ci0gICAgZC0+bV9zb3VwUmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRfc291cF9yZXF1ZXN0ZXJf
cmVxdWVzdChkLT5tX3JlcXVlc3Rlci5nZXQoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAg
ICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QocmVx
dWVzdGVyLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksICZlcnJvci5vdXRQdHIoKSkpOwogICAgIGlmIChlcnJvcikgewogICAgICAgICBkLT5tX3Nv
dXBSZXF1ZXN0ID0gMDsKICAgICAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZSwg
MCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBkLT5tX2lucHV0U3RyZWFt
ID0gYWRvcHRHUmVmKHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZChkLT5tX3NvdXBSZXF1ZXN0Lmdl
dCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBkLT5tX2lucHV0U3RyZWFtID0gYWRvcHRH
UmVmKHNvdXBfcmVxdWVzdF9zZW5kKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIDAsICZlcnJvci5v
dXRQdHIoKSkpOwogICAgIGlmIChlcnJvcikgewogICAgICAgICBkLT5tX2lucHV0U3RyZWFtID0g
MDsKICAgICAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZSwgMCk7CkBAIC00MDYs
MzggKzQ0Nyw2IEBAIHN0YXRpYyBTb3VwU2Vzc2lvbiogY3JlYXRlU291cFNlc3Npb24oKQogICAg
IHJldHVybiBzb3VwX3Nlc3Npb25fYXN5bmNfbmV3KCk7CiB9CiAKLS8vIFZhbHVlcyB0YWtlbiBm
cm9tIGh0dHA6Ly9zdGV2ZXNvdWRlcnMuY29tL3VhL2luZGV4LnBocCBmb2xsb3dpbmcKLS8vIHRo
ZSBydWxlICJEbyBXaGF0IEV2ZXJ5IE90aGVyIE1vZGVybiBCcm93c2VyIElzIERvaW5nIi4gVGhl
eSBzZWVtCi0vLyB0byBzaWduaWZpY2FudGx5IGltcHJvdmUgcGFnZSBsb2FkaW5nIHRpbWUgY29t
cGFyZWQgdG8gc291cCdzCi0vLyBkZWZhdWx0IHZhbHVlcy4KLSNkZWZpbmUgTUFYX0NPTk5FQ1RJ
T05TICAgICAgICAgIDYwCi0jZGVmaW5lIE1BWF9DT05ORUNUSU9OU19QRVJfSE9TVCA2Ci0KLXN0
YXRpYyB2b2lkIGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9u
KQotewotICAgIGlmIChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChzZXNzaW9uKSwgIndlYmtp
dC1pbml0IikpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNvdXBDb29raWVKYXIqIGphciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8U291cENvb2tpZUphcio+KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShz
ZXNzaW9uLCBTT1VQX1RZUEVfQ09PS0lFX0pBUikpOwotICAgIGlmICghamFyKQotICAgICAgICBz
b3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9TRVNTSU9OX0ZFQVRVUkUoZGVm
YXVsdENvb2tpZUphcigpKSk7Ci0gICAgZWxzZQotICAgICAgICBzZXREZWZhdWx0Q29va2llSmFy
KGphcik7Ci0KLSAgICBpZiAoIXNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQ
X1RZUEVfTE9HR0VSKSAmJiBMb2dOZXR3b3JrLnN0YXRlID09IFdURkxvZ0NoYW5uZWxPbikgewot
ICAgICAgICBTb3VwTG9nZ2VyKiBsb2dnZXIgPSBzb3VwX2xvZ2dlcl9uZXcoc3RhdGljX2Nhc3Q8
U291cExvZ2dlckxvZ0xldmVsPihTT1VQX0xPR0dFUl9MT0dfQk9EWSksIC0xKTsKLSAgICAgICAg
c291cF9sb2dnZXJfYXR0YWNoKGxvZ2dlciwgc2Vzc2lvbik7Ci0gICAgICAgIGdfb2JqZWN0X3Vu
cmVmKGxvZ2dlcik7Ci0gICAgfQotCi0gICAgZ19vYmplY3Rfc2V0KHNlc3Npb24sCi0gICAgICAg
ICAgICAgICAgIFNPVVBfU0VTU0lPTl9NQVhfQ09OTlMsIE1BWF9DT05ORUNUSU9OUywKLSAgICAg
ICAgICAgICAgICAgU09VUF9TRVNTSU9OX01BWF9DT05OU19QRVJfSE9TVCwgTUFYX0NPTk5FQ1RJ
T05TX1BFUl9IT1NULAotICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGdfb2JqZWN0X3Nl
dF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQiLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigweGRlYWRiZWVmKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVz
dE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWluZyA9IGZh
bHNlKQogewogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVy
bmFsKCk7CkBAIC00OTEsMTQgKzUwMCwxNCBAQCBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxi
YWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIHVzZQogICAg
IH0KIAogICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBHSW5wdXRTdHJlYW0qIGluID0g
d2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBy
ZXMsICZlcnJvci5vdXRQdHIoKSk7CisgICAgR0lucHV0U3RyZWFtKiBpbiA9IHNvdXBfcmVxdWVz
dF9zZW5kX2ZpbmlzaChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCByZXMsICZlcnJvci5vdXRQdHIo
KSk7CiAKICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgU291cE1lc3NhZ2UqIHNvdXBNc2cgPSBk
LT5tX3NvdXBNZXNzYWdlLmdldCgpOwogICAgICAgICBnYm9vbGVhbiBpc1RyYW5zcG9ydEVycm9y
ID0gZC0+bV9zb3VwTWVzc2FnZSAmJiBTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRfRVJST1Ioc291
cE1zZy0+c3RhdHVzX2NvZGUpOwogCiAgICAgICAgIGlmIChpc1RyYW5zcG9ydEVycm9yIHx8IChl
cnJvci0+ZG9tYWluID09IEdfSU9fRVJST1IpKSB7Ci0gICAgICAgICAgICBTb3VwVVJJKiB1cmkg
PSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7Cisg
ICAgICAgICAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3NvdXBS
ZXF1ZXN0LmdldCgpKTsKICAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJp
X3RvX3N0cmluZyh1cmksIGZhbHNlKSk7CiAgICAgICAgICAgICBnaW50IGVycm9yQ29kZSA9IGlz
VHJhbnNwb3J0RXJyb3IgPyBzdGF0aWNfY2FzdDxnaW50Pihzb3VwTXNnLT5zdGF0dXNfY29kZSkg
OiBlcnJvci0+Y29kZTsKICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBlcnJvck1zZyA9IGlzVHJh
bnNwb3J0RXJyb3IgPyBzb3VwTXNnLT5yZWFzb25fcGhyYXNlIDogZXJyb3ItPm1lc3NhZ2U7CkBA
IC01NTEsOCArNTYwLDggQEAgc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0
KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciB1c2UKICAgICAvLyAoZS5nLiBm
aWxlIGFuZCBHSU8gYmFzZWQgcHJvdG9jb2wpLgogICAgIGlmICghaGFuZGxlLT5zaG91bGRDb250
ZW50U25pZmYoKSAmJiBkLT5tX3Jlc3BvbnNlLmlzTnVsbCgpKSB7CiAgICAgICAgIGQtPm1fcmVz
cG9uc2Uuc2V0VVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOwotICAgICAgICBkLT5t
X3Jlc3BvbnNlLnNldE1pbWVUeXBlKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlw
ZShkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7Ci0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0RXhw
ZWN0ZWRDb250ZW50TGVuZ3RoKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3Ro
KGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1l
VHlwZShzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShkLT5tX3NvdXBSZXF1ZXN0LmdldCgp
KSk7CisgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHNvdXBf
cmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGgoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOwogICAg
ICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIGQtPm1fcmVzcG9u
c2UpOwogCiAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewpAQCAtNTc0LDYgKzU4Myw3IEBA
IHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogCiAgICAgU291
cFNlc3Npb24qIHNlc3Npb24gPSBoYW5kbGUtPmRlZmF1bHRTZXNzaW9uKCk7CiAgICAgZW5zdXJl
U2Vzc2lvbklzSW5pdGlhbGl6ZWQoc2Vzc2lvbik7CisgICAgU291cFJlcXVlc3RlciogcmVxdWVz
dGVyID0gU09VUF9SRVFVRVNURVIoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNP
VVBfVFlQRV9SRVFVRVNURVIpKTsKIAogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBo
YW5kbGUtPmdldEludGVybmFsKCk7CiAKQEAgLTU4Myw3ICs1OTMsNyBAQCBzdGF0aWMgYm9vbCBz
dGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICByZXF1ZXN0LnNldFVSTCh1cmwp
OwogCiAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIGQtPm1fc291cFJlcXVlc3QgPSBh
ZG9wdEdSZWYod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0
KCksIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkp
KTsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdGVyX3JlcXVl
c3QocmVxdWVzdGVyLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigp
KSk7CiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIGQtPm1fc291cFJlcXVlc3QgPSAwOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC01OTEsNyArNjAxLDcgQEAgc3RhdGljIGJvb2wgc3RhcnRI
dHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAKICAgICBnX29iamVjdF9zZXRfZGF0YShHX09C
SkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7
CiAKLSAgICBkLT5tX3NvdXBNZXNzYWdlID0gYWRvcHRHUmVmKHdlYmtpdF9zb3VwX3JlcXVlc3Rf
aHR0cF9nZXRfbWVzc2FnZShXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAoZC0+bV9zb3VwUmVxdWVz
dC5nZXQoKSkpKTsKKyAgICBkLT5tX3NvdXBNZXNzYWdlID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVz
dF9odHRwX2dldF9tZXNzYWdlKFNPVVBfUkVRVUVTVF9IVFRQKGQtPm1fc291cFJlcXVlc3QuZ2V0
KCkpKSk7CiAgICAgaWYgKCFkLT5tX3NvdXBNZXNzYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTY3NSw3ICs2ODUsNyBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSkKICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IG9ubHkgaWYgaXQncyBub3QgYmVl
biBleHBsaWNpdGVseSBkZWZlcnJlZC4KICAgICBpZiAoIWQtPm1fZGVmZXJzTG9hZGluZykgewog
ICAgICAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkp
OwotICAgICAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVxdWVz
dC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7
CisgICAgICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fc291cFJlcXVlc3QuZ2V0KCks
IGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIDApOwogICAgIH0K
IAogICAgIHJldHVybiB0cnVlOwpAQCAtNzU4LDcgKzc2OCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCiAKICAgICBp
ZiAoIWRlZmVyc0xvYWRpbmcgJiYgIWQtPm1fY2FuY2VsbGFibGUgJiYgZC0+bV9zb3VwUmVxdWVz
dC5nZXQoKSkgewogICAgICAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2Vs
bGFibGVfbmV3KCkpOwotICAgICAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+
bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVlc3RD
YWxsYmFjaywgMCk7CisgICAgICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fc291cFJl
cXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0Q2FsbGJhY2ss
IDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04MzIsNyArODQyLDcgQEAgc3RhdGlj
IHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiBhc3luY1Jl
c3VsdCwgZ3BvaW50ZXIgZGEKIAogICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVh
bV9yZWFkX2ZpbmlzaChkLT5tX2lucHV0U3RyZWFtLmdldCgpLCBhc3luY1Jlc3VsdCwgJmVycm9y
Lm91dFB0cigpKTsKICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgU291cFVSSSogdXJpID0gd2Vi
a2l0X3NvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAg
ICBTb3VwVVJJKiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3NvdXBSZXF1ZXN0Lmdl
dCgpKTsKICAgICAgICAgR093blB0cjxjaGFyPiB1cmlTdHIoc291cF91cmlfdG9fc3RyaW5nKHVy
aSwgZmFsc2UpKTsKICAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtf
dG9fc3RyaW5nKEdfSU9fRVJST1IpLCBlcnJvci0+Y29kZSwgdXJpU3RyLmdldCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVy
cm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKQEAgLTg4MSw2ICs4OTEsOCBAQCBzdGF0aWMgYm9v
bCBzdGFydEdpbyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBLVVJMIHVybCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSBoYW5kbGUtPmRlZmF1bHRT
ZXNzaW9uKCk7CisgICAgZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoc2Vzc2lvbik7CisgICAg
U291cFJlcXVlc3RlciogcmVxdWVzdGVyID0gU09VUF9SRVFVRVNURVIoc291cF9zZXNzaW9uX2dl
dF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9SRVFVRVNURVIpKTsKICAgICBSZXNvdXJjZUhh
bmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwogCiAgICAgLy8gR0lPIGRv
ZXNuJ3Qga25vdyBob3cgdG8gaGFuZGxlIHJlZnMgYW5kIHF1ZXJpZXMsIHNvIHJlbW92ZSB0aGVt
CkBAIC04OTIsNyArOTA0LDcgQEAgc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgS1VSTCB1cmwpCiAgICAgQ1N0cmluZyB1cmxTdHIgPSB1cmwuc3RyaW5nKCkudXRm
OCgpOwogCiAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIGQtPm1fc291cFJlcXVlc3Qg
PSBhZG9wdEdSZWYod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIu
Z2V0KCksIHVybFN0ci5kYXRhKCksIHNlc3Npb24sICZlcnJvci5vdXRQdHIoKSkpOworICAgIGQt
Pm1fc291cFJlcXVlc3QgPSBhZG9wdEdSZWYoc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChyZXF1ZXN0
ZXIsIHVybFN0ci5kYXRhKCksICZlcnJvci5vdXRQdHIoKSkpOwogICAgIGlmIChlcnJvcikgewog
ICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gMDsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
OTA0LDcgKzkxNiw3IEBAIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIEtVUkwgdXJsKQogICAgIGhhbmRsZS0+cmVmKCk7CiAKICAgICBkLT5tX2NhbmNlbGxhYmxl
ID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwotICAgIHdlYmtpdF9zb3VwX3JlcXVl
c3Rfc2VuZF9hc3luYyhkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBkLT5tX2NhbmNlbGxhYmxlLmdl
dCgpLCBzZW5kUmVxdWVzdENhbGxiYWNrLCAwKTsKKyAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3lu
YyhkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLCBzZW5kUmVx
dWVzdENhbGxiYWNrLCAwKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlu
cHV0LXN0cmVhbS5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjMTQ4NjNiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYworKysgL2Rldi9udWxs
CkBAIC0xLDIwMCArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQt
dGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5M
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNp
bmNsdWRlICJzb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCIKLQotI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNk
ZWZpbmUgSU5JVF9TVFJJTkcgIjxodG1sPjxoZWFkPjx0aXRsZT5PTUchPC90aXRsZT48L2hlYWQ+
PGJvZHk+PHRhYmxlPiIKLSNkZWZpbmUgRVhJVF9TVFJJTkcgIjwvdGFibGU+PC9odG1sPiIKLQot
R19ERUZJTkVfVFlQRSAoV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtLCB3ZWJraXRfc291
cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtLCBHX1RZUEVfSU5QVVRfU1RSRUFNKQotCi1zdGF0aWMg
U291cEJ1ZmZlciAqCi13ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNlX2lu
Zm8gKFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqIHN0cmVhbSwKLQkJCQkJICAgICAg
IEdGaWxlSW5mbyAqIGluZm8pCi17Ci0JU291cEJ1ZmZlciAqYnVmZmVyOwotCUdTdHJpbmcgKnN0
cmluZzsKLQljb25zdCBjaGFyICpzOwotCWNoYXIgKmVzY2FwZWQsICpwYXRoLCAqeG1sX3N0cmlu
ZzsKLQotCWlmICghZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pKQotCQlyZXR1cm4gTlVMTDsK
LQotCXMgPSBnX2ZpbGVfaW5mb19nZXRfZGlzcGxheV9uYW1lIChpbmZvKTsKLQlpZiAoIXMpIHsK
LQkJcyA9IGdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKTsKLQkJLyogRklYTUU6IGNvbnZlcnQg
c29tZWhvdz8gKi8KLQkJaWYgKCFnX3V0ZjhfdmFsaWRhdGUgKHMsIC0xLCBOVUxMKSkKLQkJCXJl
dHVybiBOVUxMOwotCX0KLQlzdHJpbmcgPSBnX3N0cmluZ19uZXcgKCI8dHI+Iik7Ci0KLQl4bWxf
c3RyaW5nID0gZ19tYXJrdXBfZXNjYXBlX3RleHQgKHMsIC0xKTsKLQllc2NhcGVkID0gZ191cmlf
ZXNjYXBlX3N0cmluZyAoZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pLCBOVUxMLCBGQUxTRSk7
Ci0JcGF0aCA9IGdfc3RyY29uY2F0IChzdHJlYW0tPnVyaSwgIi8iLCBlc2NhcGVkLCBOVUxMKTsK
LQlnX2ZyZWUgKGVzY2FwZWQpOwotCWdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0cmluZywgIjx0
ZD48YSBocmVmPVwiJXNcIj4lczwvYT48L3RkPiIsIHBhdGgsIHhtbF9zdHJpbmcpOwotCWdfZnJl
ZSAocGF0aCk7Ci0JZ19mcmVlICh4bWxfc3RyaW5nKTsKLQlnX3N0cmluZ19hcHBlbmQgKHN0cmlu
ZywgIjwvdHI+Iik7Ci0KLQlidWZmZXIgPSBzb3VwX2J1ZmZlcl9uZXcgKFNPVVBfTUVNT1JZX1RB
S0UsIHN0cmluZy0+c3RyLCBzdHJpbmctPmxlbik7Ci0JZ19zdHJpbmdfZnJlZSAoc3RyaW5nLCBG
QUxTRSk7Ci0KLQlyZXR1cm4gYnVmZmVyOwotfQotCi1zdGF0aWMgU291cEJ1ZmZlciAqCi13ZWJr
aXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlIChXZWJLaXRTb3Vw
RGlyZWN0b3J5SW5wdXRTdHJlYW0gICpzdHJlYW0sCi0JCQkJCQkgICBHQ2FuY2VsbGFibGUgICAg
ICAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJCSAgIEdFcnJvciAgICAgICAgICAgICAgICAg
ICAqKmVycm9yKQotewotCUdGaWxlSW5mbyAqaW5mbzsKLQlTb3VwQnVmZmVyICpidWZmZXI7Ci0J
R0Vycm9yICplcnIgPSBOVUxMOwotCi0JZG8gewotCQlpbmZvID0gZ19maWxlX2VudW1lcmF0b3Jf
bmV4dF9maWxlIChzdHJlYW0tPmVudW1lcmF0b3IsIGNhbmNlbGxhYmxlLCAmZXJyKTsKLQkJaWYg
KGluZm8gPT0gTlVMTCkgewotCQkJaWYgKGVycikgewotCQkJCWdfcHJvcGFnYXRlX2Vycm9yIChl
cnJvciwgZXJyKTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0gZWxzZSBpZiAoIXN0cmVhbS0+ZG9u
ZSkgewotCQkJCXN0cmVhbS0+ZG9uZSA9IFRSVUU7Ci0JCQkJcmV0dXJuIHNvdXBfYnVmZmVyX25l
dyAoU09VUF9NRU1PUllfU1RBVElDLAotCQkJCQkJCUVYSVRfU1RSSU5HLAotCQkJCQkJCXNpemVv
ZiAoRVhJVF9TVFJJTkcpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0J
CX0KLQotCQlidWZmZXIgPSB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNl
X2luZm8gKHN0cmVhbSwgaW5mbyk7Ci0JfSB3aGlsZSAoYnVmZmVyID09IE5VTEwpOwotCi0JcmV0
dXJuIGJ1ZmZlcjsKLX0KLQotc3RhdGljIGdzc2l6ZQotd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lu
cHV0X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0gICppbnB1dCwKLQkJCQkJIHZvaWQgICAgICAg
ICAgKmJ1ZmZlciwKLQkJCQkJIGdzaXplIGNvdW50LAotCQkJCQkgR0NhbmNlbGxhYmxlICAqY2Fu
Y2VsbGFibGUsCi0JCQkJCSBHRXJyb3IgICAgICAgKiplcnJvcikKLXsKLQlXZWJLaXRTb3VwRGly
ZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSA9IFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9T
VFJFQU0gKGlucHV0KTsKLQlnc2l6ZSB0b3RhbCwgc2l6ZTsKLQotCWZvciAodG90YWwgPSAwOyB0
b3RhbCA8IGNvdW50OyB0b3RhbCArPSBzaXplKSB7Ci0JCWlmIChzdHJlYW0tPmJ1ZmZlciA9PSBO
VUxMKSB7Ci0JCQlzdHJlYW0tPmJ1ZmZlciA9IHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9z
dHJlYW1fcmVhZF9uZXh0X2ZpbGUgKHN0cmVhbSwgY2FuY2VsbGFibGUsIGVycm9yKTsKLQkJCWlm
IChzdHJlYW0tPmJ1ZmZlciA9PSBOVUxMKSB7Ci0JCQkJLyogRklYTUU6IElzIHRoaXMgY29ycmVj
dCBvciBzaG91bGQgd2UgZm9yd2FyZCB0aGUgZXJyb3I/ICovCi0JCQkJaWYgKHRvdGFsKQotCQkJ
CQlnX2NsZWFyX2Vycm9yIChlcnJvcik7Ci0JCQkJcmV0dXJuIHRvdGFsOwotCQkJfQotCQl9Ci0K
LQkJc2l6ZSA9IE1JTiAoc3RyZWFtLT5idWZmZXItPmxlbmd0aCwgY291bnQgLSB0b3RhbCk7Ci0J
CW1lbWNweSAoKGNoYXIgKilidWZmZXIgKyB0b3RhbCwgc3RyZWFtLT5idWZmZXItPmRhdGEsIHNp
emUpOwotCQlpZiAoc2l6ZSA9PSBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoKSB7Ci0JCQlzb3VwX2J1
ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7Ci0JCQlzdHJlYW0tPmJ1ZmZlciA9IE5VTEw7Ci0J
CX0gZWxzZSB7Ci0JCQlTb3VwQnVmZmVyICpzdWIgPSBzb3VwX2J1ZmZlcl9uZXdfc3ViYnVmZmVy
IChzdHJlYW0tPmJ1ZmZlciwKLQkJCQkJCQkJICAgICBzaXplLAotCQkJCQkJCQkgICAgIHN0cmVh
bS0+YnVmZmVyLT5sZW5ndGggLSBzaXplKTsKLQkJCXNvdXBfYnVmZmVyX2ZyZWUgKHN0cmVhbS0+
YnVmZmVyKTsKLQkJCXN0cmVhbS0+YnVmZmVyID0gc3ViOwotCQl9Ci0JfQotCi0JcmV0dXJuIHRv
dGFsOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9z
dHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAgKmlucHV0LAotCQkJCQkgIEdDYW5jZWxsYWJsZSAg
KmNhbmNlbGxhYmxlLAotCQkJCQkgIEdFcnJvciAgICAgICAqKmVycm9yKQotewotCVdlYktpdFNv
dXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtID0gV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lO
UFVUX1NUUkVBTSAoaW5wdXQpOwotCWdib29sZWFuIHJlc3VsdDsKLQotCWlmIChzdHJlYW0tPmJ1
ZmZlcikgewotCQlzb3VwX2J1ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7Ci0JCXN0cmVhbS0+
YnVmZmVyID0gTlVMTDsKLQl9Ci0KLQlyZXN1bHQgPSBnX2ZpbGVfZW51bWVyYXRvcl9jbG9zZSAo
c3RyZWFtLT5lbnVtZXJhdG9yLAotCQkJCQkgIGNhbmNlbGxhYmxlLAotCQkJCQkgIGVycm9yKTsK
LQlnX29iamVjdF91bnJlZiAoc3RyZWFtLT5lbnVtZXJhdG9yKTsKLQlzdHJlYW0tPmVudW1lcmF0
b3IgPSBOVUxMOwotCi0JZ19mcmVlIChzdHJlYW0tPnVyaSk7Ci0Jc3RyZWFtLT51cmkgPSBOVUxM
OwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2RpcmVj
dG9yeV9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCAoV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3Ry
ZWFtQ2xhc3MgKnN0cmVhbV9jbGFzcykKLXsKLQlHSW5wdXRTdHJlYW1DbGFzcyAqaW5wdXRzdHJl
YW1fY2xhc3MgPSBHX0lOUFVUX1NUUkVBTV9DTEFTUyAoc3RyZWFtX2NsYXNzKTsKLQotCWlucHV0
c3RyZWFtX2NsYXNzLT5yZWFkX2ZuID0gd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVh
bV9yZWFkOwotCWlucHV0c3RyZWFtX2NsYXNzLT5jbG9zZV9mbiA9IHdlYmtpdF9zb3VwX2RpcmVj
dG9yeV9pbnB1dF9zdHJlYW1fY2xvc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9k
aXJlY3RvcnlfaW5wdXRfc3RyZWFtX2luaXQgKFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVh
bSAqc3RyZWFtKQotewotCXN0cmVhbS0+YnVmZmVyID0gc291cF9idWZmZXJfbmV3IChTT1VQX01F
TU9SWV9TVEFUSUMsCi0JCQkJCSAgSU5JVF9TVFJJTkcsCi0JCQkJCSAgc2l6ZW9mIChJTklUX1NU
UklORykpOwotfQotCi1HSW5wdXRTdHJlYW0gKgotd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0
X3N0cmVhbV9uZXcgKEdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvciwKLQkJCQkJU291cFVSSSAg
ICAgICAgICp1cmkpCi17Ci0JR0lucHV0U3RyZWFtICpzdHJlYW07Ci0KLQlnX3JldHVybl92YWxf
aWZfZmFpbCAoR19JU19GSUxFX0VOVU1FUkFUT1IgKGVudW1lcmF0b3IpLCBOVUxMKTsKLQlnX3Jl
dHVybl92YWxfaWZfZmFpbCAodXJpICE9IE5VTEwsIE5VTEwpOwotCi0Jc3RyZWFtID0gZ19vYmpl
Y3RfbmV3IChXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIE5VTEwpOwot
Ci0JV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAoc3RyZWFtKS0+ZW51bWVyYXRv
ciA9IGdfb2JqZWN0X3JlZiAoZW51bWVyYXRvcik7Ci0JV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lO
UFVUX1NUUkVBTSAoc3RyZWFtKS0+dXJpID0gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZBTFNF
KTsKLQotCXJldHVybiBzdHJlYW07Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9y
eS1pbnB1dC1zdHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM1YjBiZS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCww
IEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBj
LWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVkIEhh
dCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdFQktJ
VF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fSAotI2RlZmluZSBXRUJLSVRfU09VUF9ESVJF
Q1RPUllfSU5QVVRfU1RSRUFNX0ggMQotCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUg
PGxpYnNvdXAvc291cC10eXBlcy5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC1tZXNzYWdlLWJv
ZHkuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfRElSRUNU
T1JZX0lOUFVUX1NUUkVBTSAgICAgICAgICAgICh3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRf
c3RyZWFtX2dldF90eXBlICgpKQotI2RlZmluZSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRf
U1RSRUFNKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmop
LCBXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBEaXJl
Y3RvcnlJbnB1dFN0cmVhbSkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9T
VFJFQU1fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwg
V0VCS0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwRGlyZWN0
b3J5SW5wdXRTdHJlYW1DbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX0RJUkVDVE9SWV9J
TlBVVF9TVFJFQU0ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9i
aiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCi0jZGVmaW5lIFdF
QktJVF9JU19TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVU
X1NUUkVBTSkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lUX1RZ
UEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRT
dHJlYW1DbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRT
dHJlYW0gV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtOwotdHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzIFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1
dFN0cmVhbUNsYXNzOwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSB7
Ci0JR0lucHV0U3RyZWFtIHBhcmVudDsKLQotCUdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvcjsK
LQljaGFyICp1cmk7Ci0JU291cEJ1ZmZlciAqYnVmZmVyOwotCWdib29sZWFuIGRvbmU7Ci19Owot
Ci1zdHJ1Y3QgX1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzIHsKLQlHSW5wdXRT
dHJlYW1DbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSAgICAgICAgICB3ZWJraXRfc291
cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90eXBlICh2b2lkKTsKLQotR0lucHV0U3RyZWFt
ICp3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX25ldyAoR0ZpbGVFbnVtZXJhdG9y
ICplbnVtZXJhdG9yLAotCQkJCQkJICAgICAgU291cFVSSSAgICAgICAgICp1cmkpOwotCi0KLUdf
RU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFN
X0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyYTVkOTk1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMKKysrIC9k
ZXYvbnVsbApAQCAtMSw5MjIgKzAsMCBAQAotLyogc291cC1pbnB1dC1zdHJlYW0uYywgYmFzZWQg
b24gZ3NvY2tldGlucHV0c3RyZWFtLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBS
ZWQgSGF0LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4K
LQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0KLSNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KLQotI2luY2x1ZGUgInNvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCIKLQot
c3RhdGljIHZvaWQgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vla2FibGVfaWZhY2Vf
aW5pdCAoR1NlZWthYmxlSWZhY2UgKnNlZWthYmxlX2lmYWNlKTsKLQotR19ERUZJTkVfVFlQRV9X
SVRIX0NPREUgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0sIHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtLCBHX1RZUEVfSU5QVVRfU1RSRUFNLAotCQkJIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RSAoR19UWVBFX1NFRUtBQkxFLAotCQkJCQkJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2Vla2FibGVfaWZhY2VfaW5pdCkpCi0KLXR5cGVkZWYgdm9pZCAoKldlYktpdFNvdXBIVFRQSW5w
dXRTdHJlYW1DYWxsYmFjaykoR0lucHV0U3RyZWFtICopOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0J
U291cFNlc3Npb24gKnNlc3Npb247Ci0JR01haW5Db250ZXh0ICphc3luY19jb250ZXh0OwotCVNv
dXBNZXNzYWdlICptc2c7Ci0JZ2Jvb2xlYW4gZ290X2hlYWRlcnMsIGZpbmlzaGVkOwotCWdvZmZz
ZXQgb2Zmc2V0OwotCi0JR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKLQlHU291cmNlICpjYW5j
ZWxfd2F0Y2g7Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGdvdF9oZWFkZXJz
X2NiOwotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBnb3RfY2h1bmtfY2I7Ci0J
V2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGZpbmlzaGVkX2NiOwotCVdlYktpdFNv
dXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBjYW5jZWxsZWRfY2I7Ci0KLQlndWNoYXIgKmxlZnRv
dmVyX2J1ZmZlcjsKLQlnc2l6ZSBsZWZ0b3Zlcl9idWZzaXplLCBsZWZ0b3Zlcl9vZmZzZXQ7Ci0K
LQlndWNoYXIgKmNhbGxlcl9idWZmZXI7Ci0JZ3NpemUgY2FsbGVyX2J1ZnNpemUsIGNhbGxlcl9u
cmVhZDsKLQlHQXN5bmNSZWFkeUNhbGxiYWNrIG91dHN0YW5kaW5nX2NhbGxiYWNrOwotCUdTaW1w
bGVBc3luY1Jlc3VsdCAqcmVzdWx0OwotfSBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0
ZTsKLSNkZWZpbmUgV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUobykg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSkpCi0KLQotc3Rh
dGljIGdzc2l6ZSAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1dFN0
cmVhbSAgICAgICAgICpzdHJlYW0sCi0JCQkJCQkgICAgdm9pZCAgICAgICAgICAgICAgICAgKmJ1
ZmZlciwKLQkJCQkJCSAgICBnc2l6ZSBjb3VudCwKLQkJCQkJCSAgICBHQ2FuY2VsbGFibGUgICAg
ICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCQkgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9y
KTsKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZSAo
R0lucHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwKLQkJCQkJCSAgICAgR0NhbmNlbGxhYmxlICAg
ICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkJICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJy
b3IpOwotc3RhdGljIHZvaWQgICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRf
YXN5bmMgKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCi0JCQkJCQkJICB2b2lkICAgICAg
ICAgICAgICAgICAqYnVmZmVyLAotCQkJCQkJCSAgZ3NpemUgY291bnQsCi0JCQkJCQkJICBpbnQg
aW9fcHJpb3JpdHksCi0JCQkJCQkJICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUs
Ci0JCQkJCQkJICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAotCQkJCQkJCSAgZ3BvaW50
ZXIgZGF0YSk7Ci1zdGF0aWMgZ3NzaXplICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
cmVhZF9maW5pc2ggKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCi0JCQkJCQkJICAgR0Fz
eW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKLQkJCQkJCQkgICBHRXJyb3IgICAgICAgICAgICAg
ICoqZXJyb3IpOwotc3RhdGljIHZvaWQgICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X2Nsb3NlX2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAotCQkJCQkJCSAgIGlu
dCBpb19wcmlvcml0eSwKLQkJCQkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFi
bGUsCi0JCQkJCQkJICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJCQkgICBn
cG9pbnRlciBkYXRhKTsKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9jbG9zZV9maW5pc2ggKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCi0JCQkJCQkJ
ICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCi0JCQkJCQkJICAgIEdFcnJvciAgICAg
ICAgICAgICAgKiplcnJvcik7Ci0KLXN0YXRpYyBnb2Zmc2V0ICB3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV90ZWxsIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUpOwotCi1zdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWsgKEdTZWVr
YWJsZSAgICAgICAgICAgICpzZWVrYWJsZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VlayAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlLAot
CQkJCQkJICAgIGdvZmZzZXQgb2Zmc2V0LAotCQkJCQkJICAgIEdTZWVrVHlwZSB0eXBlLAotCQkJ
CQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJCSAgICBHRXJy
b3IgICAgICAgICAgICAgICoqZXJyb3IpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vl
a2FibGUpOwotc3RhdGljIGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Ry
dW5jYXRlIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUsCi0JCQkJCQkJZ29mZnNldCBv
ZmZzZXQsCi0JCQkJCQkJR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkJ
CUdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRl
ciBzdHJlYW0pOwotc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290
X2NodW5rIChTb3VwTWVzc2FnZSAqbXNnLCBTb3VwQnVmZmVyICpjaHVuaywgZ3BvaW50ZXIgc3Ry
ZWFtKTsKLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVk
IChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pOwotCi1zdGF0aWMgdm9pZAotd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKLXsK
LQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW0gPSBXRUJLSVRfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTSAob2JqZWN0KTsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAq
cHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0p
OwotCi0JZ19vYmplY3RfdW5yZWYgKHByaXYtPnNlc3Npb24pOwotCi0JZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9ieV9mdW5jIChwcml2LT5tc2csIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzKSwgc3RyZWFtKTsKLQlnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYtPm1zZywgR19DQUxMQkFDSyAod2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rKSwgc3RyZWFtKTsKLQlnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYtPm1zZywgR19DQUxMQkFDSyAod2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0pOwotCWdfb2JqZWN0X3VucmVm
IChwcml2LT5tc2cpOwotCWdfZnJlZSAocHJpdi0+bGVmdG92ZXJfYnVmZmVyKTsKLQotCWlmIChH
X09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUpCi0JCSgqR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9p
ZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCAoV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbUNsYXNzICprbGFzcykKLXsKLQlHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xh
c3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCUdJbnB1dFN0cmVhbUNsYXNzICpzdHJlYW1f
Y2xhc3MgPSBHX0lOUFVUX1NUUkVBTV9DTEFTUyAoa2xhc3MpOwotCi0JZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0
ZSkpOwotCi0JZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9maW5hbGl6ZTsKLQotCXN0cmVhbV9jbGFzcy0+cmVhZF9mbiA9IHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQ7Ci0Jc3RyZWFtX2NsYXNzLT5jbG9zZV9mbiA9IHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlOwotCXN0cmVhbV9jbGFzcy0+cmVhZF9hc3lu
YyA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmM7Ci0Jc3RyZWFtX2Ns
YXNzLT5yZWFkX2ZpbmlzaCA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmlu
aXNoOwotCXN0cmVhbV9jbGFzcy0+Y2xvc2VfYXN5bmMgPSB3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9jbG9zZV9hc3luYzsKLQlzdHJlYW1fY2xhc3MtPmNsb3NlX2ZpbmlzaCA9IHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaDsKLX0KLQotc3RhdGljIHZvaWQK
LXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQgKEdTZWVr
YWJsZUlmYWNlICpzZWVrYWJsZV9pZmFjZSkKLXsKLQlzZWVrYWJsZV9pZmFjZS0+dGVsbCA9IHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RlbGw7Ci0Jc2Vla2FibGVfaWZhY2UtPmNhbl9z
ZWVrID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWs7Ci0Jc2Vla2FibGVf
aWZhY2UtPnNlZWsgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrOwotCXNlZWth
YmxlX2lmYWNlLT5jYW5fdHJ1bmNhdGUgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9j
YW5fdHJ1bmNhdGU7Ci0Jc2Vla2FibGVfaWZhY2UtPnRydW5jYXRlX2ZuID0gd2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9pbml0IChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpzdHJl
YW0pCi17Ci0JOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fcXVldWVfbWVzc2FnZSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtKQotewot
CVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRU
UF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0KLQlwcml2LT5nb3RfaGVhZGVy
cyA9IHByaXYtPmZpbmlzaGVkID0gRkFMU0U7Ci0KLQkvKiBBZGQgYW4gZXh0cmEgcmVmIHNpbmNl
IHNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIHN0ZWFscyBvbmUgKi8KLQlnX29iamVjdF9yZWYg
KHByaXYtPm1zZyk7Ci0Jc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24s
IHByaXYtPm1zZywgTlVMTCwgTlVMTCk7Ci19Ci0KLS8qKgotICogd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fbmV3OgotICogQHNlc3Npb246IHRoZSAjU291cFNlc3Npb24gdG8gdXNlCi0g
KiBAbXNnOiB0aGUgI1NvdXBNZXNzYWdlIHdob3NlIHJlc3BvbnNlIHdpbGwgYmUgc3RyZWFtZWQK
LSAqCi0gKiBQcmVwYXJlcyB0byBzZW5kIEBtc2cgb3ZlciBAc2Vzc2lvbiwgYW5kIHJldHVybnMg
YSAjR0lucHV0U3RyZWFtCi0gKiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlYWQgdGhlIHJlc3BvbnNl
LgotICoKLSAqIEBtc2cgbWF5IG5vdCBiZSBzZW50IHVudGlsIHRoZSBmaXJzdCByZWFkIGNhbGw7
IGlmIHlvdSBuZWVkIHRvIGxvb2sKLSAqIGF0IHRoZSBzdGF0dXMgY29kZSBvciByZXNwb25zZSBo
ZWFkZXJzIGJlZm9yZSByZWFkaW5nIHRoZSBib2R5LCB5b3UKLSAqIGNhbiB1c2Ugd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCgpIG9yIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlbmRfYXN5bmMoKQotICogdG8gZm9yY2UgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCBhbmQg
dGhlIHJlc3BvbnNlIGhlYWRlcnMgcmVhZC4KLSAqCi0gKiBJZiBAbXNnIGdldHMgYSBub24tMnh4
IHJlc3VsdCwgdGhlIGZpcnN0IHJlYWQgKG9yIHNlbmQpIHdpbGwgcmV0dXJuCi0gKiBhbiBlcnJv
ciB3aXRoIHR5cGUgJVdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hUVFBfRVJST1IuCi0g
KgotICogSW50ZXJuYWxseSwgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gaXMgaW1wbGVtZW50
ZWQgdXNpbmcgYXN5bmNocm9ub3VzIEkvTywKLSAqIHNvIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHN5
bmNocm9ub3VzIEFQSSAoZWcsCi0gKiBnX2lucHV0X3N0cmVhbV9yZWFkKCkpLCB5b3Ugc2hvdWxk
IGNyZWF0ZSBhIG5ldyAjR01haW5Db250ZXh0IGFuZAotICogc2V0IGl0IGFzIHRoZSAlU09VUF9T
RVNTSU9OX0FTWU5DX0NPTlRFWFQgcHJvcGVydHkgb24gQHNlc3Npb24uIChJZgotICogeW91IGRv
bid0LCB0aGVuIHN5bmNocm9ub3VzICNHSW5wdXRTdHJlYW0gY2FsbHMgd2lsbCBjYXVzZSB0aGUg
bWFpbgotICogbG9vcCB0byBiZSBydW4gcmVjdXJzaXZlbHkuKSBUaGUgYXN5bmMgI0dJbnB1dFN0
cmVhbSBBUEkgd29ya3MgZmluZQotICogd2l0aCAlU09VUF9TRVNTSU9OX0FTWU5DX0NPTlRFWFQg
ZWl0aGVyIHNldCBvciB1bnNldC4KLSAqCi0gKiBSZXR1cm5zOiBhIG5ldyAjR0lucHV0U3RyZWFt
LgotICoqLwotV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqCi13ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9uZXcgKFNvdXBTZXNzaW9uICpzZXNzaW9uLCBTb3VwTWVzc2FnZSAqbXNnKQot
ewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbTsKLQlXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtUHJpdmF0ZSAqcHJpdjsKLQotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lT
X01FU1NBR0UgKG1zZyksIE5VTEwpOwotCi0Jc3RyZWFtID0gZ19vYmplY3RfbmV3IChXRUJLSVRf
VFlQRV9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNLCBOVUxMKTsKLQlwcml2ID0gV0VCS0lUX1NPVVBf
SFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0KLQlwcml2LT5zZXNzaW9u
ID0gZ19vYmplY3RfcmVmIChzZXNzaW9uKTsKLQlwcml2LT5hc3luY19jb250ZXh0ID0gc291cF9z
ZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChzZXNzaW9uKTsKLQlwcml2LT5tc2cgPSBnX29iamVj
dF9yZWYgKG1zZyk7Ci0KLQlnX3NpZ25hbF9jb25uZWN0IChtc2csICJnb3RfaGVhZGVycyIsCi0J
CQkgIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJz
KSwgc3RyZWFtKTsKLQlnX3NpZ25hbF9jb25uZWN0IChtc2csICJnb3RfY2h1bmsiLAotCQkJICBH
X0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmspLCBzdHJl
YW0pOwotCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImZpbmlzaGVkIiwKLQkJCSAgR19DQUxMQkFD
SyAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0pOwotCi0J
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcXVldWVfbWVzc2FnZSAoc3RyZWFtKTsKLQly
ZXR1cm4gc3RyZWFtOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fZ290X2hlYWRlcnMgKFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSkKLXsK
LQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hU
VFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCi0JLyogSWYgdGhlIHN0YXR1
cyBpcyB1bnN1Y2Nlc3NmdWwsIHdlIGp1c3QgaWdub3JlIHRoZSBzaWduYWwgYW5kIGxldAotCSAq
IGxpYnNvdXAga2VlcCBnb2luZyAoZXZlbnR1YWxseSBlaXRoZXIgaXQgd2lsbCByZXF1ZXVlIHRo
ZSByZXF1ZXN0Ci0JICogKGFmdGVyIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uL3JlZGlyZWN0aW9u
KSwgb3IgZWxzZSB0aGUKLQkgKiAiZmluaXNoZWQiIGhhbmRsZXIgd2lsbCBydW4pLgotCSAqLwot
CWlmICghU09VUF9TVEFUVVNfSVNfU1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNfY29kZSkpCi0JCXJl
dHVybjsKLQotCXByaXYtPmdvdF9oZWFkZXJzID0gVFJVRTsKLQlpZiAoIXByaXYtPmNhbGxlcl9i
dWZmZXIpIHsKLQkJLyogTm90IHJlYWR5IHRvIHJlYWQgdGhlIGJvZHkgeWV0ICovCi0JCXNvdXBf
c2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBtc2cpOwotCX0KLQotCWlmIChw
cml2LT5nb3RfaGVhZGVyc19jYikKLQkJcHJpdi0+Z290X2hlYWRlcnNfY2IgKHN0cmVhbSk7Ci19
Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmsg
KFNvdXBNZXNzYWdlICptc2csIFNvdXBCdWZmZXIgKmNodW5rX2J1ZmZlciwKLQkJCQkJIGdwb2lu
dGVyIHN0cmVhbSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9
IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCWNv
bnN0IGdjaGFyICpjaHVuayA9IGNodW5rX2J1ZmZlci0+ZGF0YTsKLQlnc2l6ZSBjaHVua19zaXpl
ID0gY2h1bmtfYnVmZmVyLT5sZW5ndGg7Ci0KLQkvKiBXZSBvbmx5IHBheSBhdHRlbnRpb24gdG8g
dGhlIGNodW5rIGlmIGl0J3MgcGFydCBvZiBhIHN1Y2Nlc3NmdWwKLQkgKiByZXNwb25zZS4KLQkg
Ki8KLQlpZiAoIVNPVVBfU1RBVFVTX0lTX1NVQ0NFU1NGVUwgKG1zZy0+c3RhdHVzX2NvZGUpKQot
CQlyZXR1cm47Ci0KLQkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZiAocHJpdi0+Y2FsbGVyX2J1ZnNp
emUgPT0gMCB8fCBwcml2LT5sZWZ0b3Zlcl9idWZzaXplICE9IDApCi0JCWdfd2FybmluZyAoIndl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayBjYWxsZWQgYWdhaW4gYmVmb3Jl
IHByZXZpb3VzIGNodW5rIHdhcyBwcm9jZXNzZWQiKTsKLQotCS8qIENvcHkgd2hhdCB3ZSBjYW4g
aW50byBwcml2LT5jYWxsZXJfYnVmZmVyICovCi0JaWYgKHByaXYtPmNhbGxlcl9idWZzaXplID4g
cHJpdi0+Y2FsbGVyX25yZWFkKSB7Ci0JCWdzaXplIG5yZWFkID0gTUlOIChjaHVua19zaXplLCBw
cml2LT5jYWxsZXJfYnVmc2l6ZSAtIHByaXYtPmNhbGxlcl9ucmVhZCk7Ci0KLQkJbWVtY3B5IChw
cml2LT5jYWxsZXJfYnVmZmVyICsgcHJpdi0+Y2FsbGVyX25yZWFkLCBjaHVuaywgbnJlYWQpOwot
CQlwcml2LT5jYWxsZXJfbnJlYWQgKz0gbnJlYWQ7Ci0JCXByaXYtPm9mZnNldCArPSBucmVhZDsK
LQkJY2h1bmsgKz0gbnJlYWQ7Ci0JCWNodW5rX3NpemUgLT0gbnJlYWQ7Ci0JfQotCi0JaWYgKGNo
dW5rX3NpemUgPiAwKSB7Ci0JCS8qIENvcHkgdGhlIHJlc3QgaW50byBwcml2LT5sZWZ0b3Zlcl9i
dWZmZXIuIElmCi0JCSAqIHRoZXJlJ3MgYWxyZWFkeSBzb21lIGRhdGEgdGhlcmUsIHJlYWxsb2Mg
YW5kCi0JCSAqIGFwcGVuZC4gT3RoZXJ3aXNlIGp1c3QgY29weS4KLQkJICovCi0JCWlmIChwcml2
LT5sZWZ0b3Zlcl9idWZzaXplKSB7Ci0JCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBnX3JlYWxs
b2MgKHByaXYtPmxlZnRvdmVyX2J1ZmZlciwKLQkJCQkJCQkgICBwcml2LT5sZWZ0b3Zlcl9idWZz
aXplICsgY2h1bmtfc2l6ZSk7Ci0JCQltZW1jcHkgKHByaXYtPmxlZnRvdmVyX2J1ZmZlciArIHBy
aXYtPmxlZnRvdmVyX2J1ZnNpemUsCi0JCQkJY2h1bmssIGNodW5rX3NpemUpOwotCQkJcHJpdi0+
bGVmdG92ZXJfYnVmc2l6ZSArPSBjaHVua19zaXplOwotCQl9IGVsc2UgewotCQkJcHJpdi0+bGVm
dG92ZXJfYnVmc2l6ZSA9IGNodW5rX3NpemU7Ci0JCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBn
X21lbWR1cCAoY2h1bmssIGNodW5rX3NpemUpOwotCQkJcHJpdi0+bGVmdG92ZXJfb2Zmc2V0ID0g
MDsKLQkJfQotCX0KLQotCXNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5zZXNzaW9u
LCBtc2cpOwotCWlmIChwcml2LT5nb3RfY2h1bmtfY2IpCi0JCXByaXYtPmdvdF9jaHVua19jYiAo
c3RyZWFtKTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X2ZpbmlzaGVkIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pCi17Ci0JV2ViS2l0
U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVU
X1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQotCXByaXYtPmZpbmlzaGVkID0gVFJVRTsK
LQotCWlmIChwcml2LT5maW5pc2hlZF9jYikKLQkJcHJpdi0+ZmluaXNoZWRfY2IgKHN0cmVhbSk7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2Fu
Y2VsbGVkIChHSU9DaGFubmVsICpjaGFuLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAotCQkJCQkg
Z3BvaW50ZXIgc3RyZWFtKQotewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpw
cml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7
Ci0KLQlwcml2LT5jYW5jZWxfd2F0Y2ggPSBOVUxMOwotCi0Jc291cF9zZXNzaW9uX3BhdXNlX21l
c3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7Ci0JaWYgKHByaXYtPmNhbmNlbGxlZF9j
YikKLQkJcHJpdi0+Y2FuY2VsbGVkX2NiIChzdHJlYW0pOwotCi0JcmV0dXJuIEZBTFNFOwotfQot
Ci1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3Jf
aW8gKEdJbnB1dFN0cmVhbSAqc3RyZWFtLAotCQkJCQkgICAgICBHQ2FuY2VsbGFibGUgKmNhbmNl
bGxhYmxlLAotCQkJCQkgICAgICBndWNoYXIgICAgICAgKmJ1ZmZlciwKLQkJCQkJICAgICAgZ3Np
emUgY291bnQpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBX
RUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQlpbnQg
Y2FuY2VsX2ZkOwotCi0JcHJpdi0+Y2FuY2VsbGFibGUgPSBjYW5jZWxsYWJsZTsKLQljYW5jZWxf
ZmQgPSBnX2NhbmNlbGxhYmxlX2dldF9mZCAoY2FuY2VsbGFibGUpOwotCWlmIChjYW5jZWxfZmQg
IT0gLTEpIHsKLQkJR0lPQ2hhbm5lbCAqY2hhbiA9IGdfaW9fY2hhbm5lbF91bml4X25ldyAoY2Fu
Y2VsX2ZkKTsKLQkJcHJpdi0+Y2FuY2VsX3dhdGNoID0gc291cF9hZGRfaW9fd2F0Y2ggKHByaXYt
PmFzeW5jX2NvbnRleHQsIGNoYW4sCi0JCQkJCQkJR19JT19JTiB8IEdfSU9fRVJSIHwgR19JT19I
VVAsCi0JCQkJCQkJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkLAotCQkJ
CQkJCXN0cmVhbSk7Ci0JCWdfaW9fY2hhbm5lbF91bnJlZiAoY2hhbik7Ci0JfQotCi0JcHJpdi0+
Y2FsbGVyX2J1ZmZlciA9IGJ1ZmZlcjsKLQlwcml2LT5jYWxsZXJfYnVmc2l6ZSA9IGNvdW50Owot
CXByaXYtPmNhbGxlcl9ucmVhZCA9IDA7Ci0KLQlpZiAocHJpdi0+Z290X2hlYWRlcnMpCi0JCXNv
dXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7Ci19
Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChH
SW5wdXRTdHJlYW0gKnN0cmVhbSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0
ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJl
YW0pOwotCi0JaWYgKHByaXYtPmNhbmNlbF93YXRjaCkgewotCQlnX3NvdXJjZV9kZXN0cm95IChw
cml2LT5jYW5jZWxfd2F0Y2gpOwotCQlwcml2LT5jYW5jZWxfd2F0Y2ggPSBOVUxMOwotCQlnX2Nh
bmNlbGxhYmxlX3JlbGVhc2VfZmQgKHByaXYtPmNhbmNlbGxhYmxlKTsKLQl9Ci0JcHJpdi0+Y2Fu
Y2VsbGFibGUgPSBOVUxMOwotCi0JcHJpdi0+Y2FsbGVyX2J1ZmZlciA9IE5VTEw7Ci0JcHJpdi0+
Y2FsbGVyX2J1ZnNpemUgPSAwOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNldF9lcnJvcl9pZl9o
dHRwX2ZhaWxlZCAoU291cE1lc3NhZ2UgKm1zZywgR0Vycm9yICoqZXJyb3IpCi17Ci0JaWYgKCFT
T1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkgewotCQlnX3NldF9l
cnJvcl9saXRlcmFsIChlcnJvciwgU09VUF9IVFRQX0VSUk9SLAotCQkJCSAgICAgbXNnLT5zdGF0
dXNfY29kZSwgbXNnLT5yZWFzb25fcGhyYXNlKTsKLQkJcmV0dXJuIFRSVUU7Ci0JfQotCXJldHVy
biBGQUxTRTsKLX0KLQotc3RhdGljIGdzaXplCi1yZWFkX2Zyb21fbGVmdG92ZXIgKFdlYktpdFNv
dXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2LAotCQkgICAgZ3BvaW50ZXIgYnVmZmVyLCBn
c2l6ZSBidWZzaXplKQotewotCWdzaXplIG5yZWFkOwotCi0JaWYgKHByaXYtPmxlZnRvdmVyX2J1
ZnNpemUgLSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPD0gYnVmc2l6ZSkgewotCQlucmVhZCA9IHBy
aXYtPmxlZnRvdmVyX2J1ZnNpemUgLSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQ7Ci0JCW1lbWNweSAo
YnVmZmVyLCBwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQsIG5y
ZWFkKTsKLQotCQlnX2ZyZWUgKHByaXYtPmxlZnRvdmVyX2J1ZmZlcik7Ci0JCXByaXYtPmxlZnRv
dmVyX2J1ZmZlciA9IE5VTEw7Ci0JCXByaXYtPmxlZnRvdmVyX2J1ZnNpemUgPSBwcml2LT5sZWZ0
b3Zlcl9vZmZzZXQgPSAwOwotCX0gZWxzZSB7Ci0JCW5yZWFkID0gYnVmc2l6ZTsKLQkJbWVtY3B5
IChidWZmZXIsIHByaXYtPmxlZnRvdmVyX2J1ZmZlciArIHByaXYtPmxlZnRvdmVyX29mZnNldCwg
bnJlYWQpOwotCQlwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgKz0gbnJlYWQ7Ci0JfQotCi0JcHJpdi0+
b2Zmc2V0ICs9IG5yZWFkOwotCXJldHVybiBucmVhZDsKLX0KLQotLyogVGhpcyBkb2VzIHRoZSB3
b3JrIG9mIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQoKSwgYXNzdW1pbmcgdGhh
dCB0aGUKLSAqIEdJbnB1dFN0cmVhbSBwZW5kaW5nIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQu
IEl0IGlzIGFsc28gdXNlZCBieQotICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vu
ZF9hc3luYygpIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4KLSAqLwotc3RhdGljIGdib29sZWFuCi13
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChHSW5wdXRTdHJlYW0g
ICpzdHJlYW0sCi0JCQkJCSAgICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCi0JCQkJCSAg
ICAgR0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVBy
aXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAo
c3RyZWFtKTsKLQotCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lv
IChzdHJlYW0sIGNhbmNlbGxhYmxlLCBOVUxMLCAwKTsKLQl3aGlsZSAoIXByaXYtPmZpbmlzaGVk
ICYmICFwcml2LT5nb3RfaGVhZGVycyAmJgotCSAgICAgICAhZ19jYW5jZWxsYWJsZV9pc19jYW5j
ZWxsZWQgKGNhbmNlbGxhYmxlKSkKLQkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChwcml2LT5h
c3luY19jb250ZXh0LCBUUlVFKTsKLQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25l
X2lvIChzdHJlYW0pOwotCi0JaWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxl
ZCAoY2FuY2VsbGFibGUsIGVycm9yKSkKLQkJcmV0dXJuIEZBTFNFOwotCWVsc2UgaWYgKHNldF9l
cnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCBlcnJvcikpCi0JCXJldHVybiBGQUxTRTsK
LQlyZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfc3luY19maW5pc2hlZCAoR0lu
cHV0U3RyZWFtICpzdHJlYW0pCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUg
KnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFt
KTsKLQlHRXJyb3IgKmVycm9yID0gTlVMTDsKLQotCWlmICghZ19jYW5jZWxsYWJsZV9zZXRfZXJy
b3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKLQkJc2V0X2Vycm9y
X2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZlcnJvcik7Ci0KLQlwcml2LT5nb3RfaGVhZGVy
c19jYiA9IE5VTEw7Ci0JcHJpdi0+ZmluaXNoZWRfY2IgPSBOVUxMOwotCi0JLyogV2FrZSB1cCB0
aGUgbWFpbiBjb250ZXh0IGl0ZXJhdGlvbiAqLwotCWdfc291cmNlX2F0dGFjaCAoZ19pZGxlX3Nv
dXJjZV9uZXcgKCksIE5VTEwpOwotfQotCi0vKioKLSAqIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlbmQ6Ci0gKiBAaHR0cHN0cmVhbTogYSAjV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bQotICogQGNhbmNlbGxhYmxlOiBvcHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwg
dG8gaWdub3JlLgotICogQGVycm9yOiBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXJyb3Igb2NjdXJp
bmcsIG9yICVOVUxMIHRvIGlnbm9yZQotICoKLSAqIFN5bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhU
VFAgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggQHN0cmVhbSwgYW5kCi0gKiByZWFkcyB0aGUgcmVz
cG9uc2UgaGVhZGVycy4gQ2FsbCB0aGlzIGFmdGVyIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX25ldygpCi0gKiBhbmQgYmVmb3JlIHRoZSBmaXJzdCBnX2lucHV0X3N0cmVhbV9yZWFkKCkg
aWYgeW91IHdhbnQgdG8gY2hlY2sgdGhlCi0gKiBIVFRQIHN0YXR1cyBjb2RlIGJlZm9yZSB5b3Ug
c3RhcnQgcmVhZGluZy4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIG1zZyBoYXMgYSBz
dWNjZXNzZnVsICgyeHgpIHN0YXR1cywgJUZBTFNFIGlmCi0gKiBub3QuCi0gKiovCi1nYm9vbGVh
bgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbSAgKmh0dHBzdHJlYW0sCi0JCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5j
ZWxsYWJsZSwKLQkJCQkgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQotewotCVdlYktp
dFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBV
VF9TVFJFQU1fR0VUX1BSSVZBVEUgKGh0dHBzdHJlYW0pOwotCUdJbnB1dFN0cmVhbSAqaXN0cmVh
bSA9IChHSW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOwotCWdib29sZWFuIHJlc3VsdDsKLQotCWdf
cmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAoaHR0
cHN0cmVhbSksIEZBTFNFKTsKLQotCWlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKGlz
dHJlYW0sIGVycm9yKSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JcHJpdi0+Z290X2hlYWRlcnNfY2Ig
PSBzZW5kX3N5bmNfZmluaXNoZWQ7Ci0JcHJpdi0+ZmluaXNoZWRfY2IgPSBzZW5kX3N5bmNfZmlu
aXNoZWQ7Ci0KLQlyZXN1bHQgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2lu
dGVybmFsIChpc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3IpOwotCWdfaW5wdXRfc3RyZWFtX2Ns
ZWFyX3BlbmRpbmcgKGlzdHJlYW0pOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdz
c2l6ZQotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZCAoR0lucHV0U3RyZWFtICpz
dHJlYW0sCi0JCQkJICAgIHZvaWQgICAgICAgICAqYnVmZmVyLAotCQkJCSAgICBnc2l6ZSBjb3Vu
dCwKLQkJCQkgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKLQkJCQkgICAgR0Vycm9yICAg
ICAgKiplcnJvcikKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9
IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCi0J
aWYgKHByaXYtPmZpbmlzaGVkKQotCQlyZXR1cm4gMDsKLQotCS8qIElmIHRoZXJlIGlzIGRhdGEg
bGVmdG92ZXIgZnJvbSBhIHByZXZpb3VzIHJlYWQsIHJldHVybiBpdC4gKi8KLQlpZiAocHJpdi0+
bGVmdG92ZXJfYnVmc2l6ZSkKLQkJcmV0dXJuIHJlYWRfZnJvbV9sZWZ0b3ZlciAocHJpdiwgYnVm
ZmVyLCBjb3VudCk7Ci0KLQkvKiBObyBsZWZ0b3ZlciBkYXRhLCBhY2NlcHQgb25lIGNodW5rIGZy
b20gdGhlIG5ldHdvcmsgKi8KLQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJl
X2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgYnVmZmVyLCBjb3VudCk7Ci0Jd2hpbGUgKCFw
cml2LT5maW5pc2hlZCAmJiBwcml2LT5jYWxsZXJfbnJlYWQgPT0gMCAmJgotCSAgICAgICAhZ19j
YW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGNhbmNlbGxhYmxlKSkKLQkJZ19tYWluX2NvbnRleHRf
aXRlcmF0aW9uIChwcml2LT5hc3luY19jb250ZXh0LCBUUlVFKTsKLQl3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOwotCi0JaWYgKHByaXYtPmNhbGxlcl9ucmVh
ZCA+IDApCi0JCXJldHVybiBwcml2LT5jYWxsZXJfbnJlYWQ7Ci0KLQlpZiAoZ19jYW5jZWxsYWJs
ZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChjYW5jZWxsYWJsZSwgZXJyb3IpKQotCQlyZXR1cm4g
LTE7Ci0JZWxzZSBpZiAoc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csIGVycm9y
KSkKLQkJcmV0dXJuIC0xOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
bgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAqc3Ry
ZWFtLAotCQkJCSAgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKLQkJCQkgICAgIEdFcnJv
ciAgICAgICoqZXJyb3IpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnBy
aXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsK
LQotCWlmICghcHJpdi0+ZmluaXNoZWQpCi0JCXNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZSAo
cHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwotCi0JcmV0
dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13cmFwcGVyX2NhbGxiYWNrIChHT2JqZWN0ICpz
b3VyY2Vfb2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlcywKLQkJICBncG9pbnRlciB1c2VyX2RhdGEp
Ci17Ci0JR0lucHV0U3RyZWFtICpzdHJlYW0gPSBHX0lOUFVUX1NUUkVBTSAoc291cmNlX29iamVj
dCk7Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQotCWdfaW5wdXRfc3Ry
ZWFtX2NsZWFyX3BlbmRpbmcgKHN0cmVhbSk7Ci0JaWYgKHByaXYtPm91dHN0YW5kaW5nX2NhbGxi
YWNrKQotCQkoKnByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrKShzb3VyY2Vfb2JqZWN0LCByZXMs
IHVzZXJfZGF0YSk7Ci0JcHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2sgPSBOVUxMOwotCWdfb2Jq
ZWN0X3VucmVmIChzdHJlYW0pOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF9hc3luY190aHJlYWQg
KEdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzLAotCQkgICBHT2JqZWN0ICpvYmplY3QsCi0JCSAgIEdD
YW5jZWxsYWJsZSAqY2FuY2VsbGFibGUpCi17Ci0JR0Vycm9yICplcnJvciA9IE5VTEw7Ci0JZ2Jv
b2xlYW4gc3VjY2VzczsKLQotCXN1Y2Nlc3MgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2ludGVybmFsIChHX0lOUFVUX1NUUkVBTSAob2JqZWN0KSwKLQkJCQkJCQljYW5jZWxs
YWJsZSwgJmVycm9yKTsKLQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVh
biAocmVzLCBzdWNjZXNzKTsKLQlpZiAoZXJyb3IpIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X3NldF9mcm9tX2Vycm9yIChyZXMsIGVycm9yKTsKLQkJZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0J
fQotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9h
c3luY19pbl90aHJlYWQgKEdJbnB1dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKLQkJCQkJCSAgICBp
bnQgaW9fcHJpb3JpdHksCi0JCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFi
bGUsCi0JCQkJCQkgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJCSAgICBn
cG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXM7Ci0KLQlyZXMg
PSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwgY2FsbGJhY2ss
IHVzZXJfZGF0YSwKLQkJCQkJIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5
bmNfaW5fdGhyZWFkKTsKLQlnX3NpbXBsZV9hc3luY19yZXN1bHRfcnVuX2luX3RocmVhZCAocmVz
LCBzZW5kX2FzeW5jX3RocmVhZCwKLQkJCQkJICAgICBpb19wcmlvcml0eSwgY2FuY2VsbGFibGUp
OwotCWdfb2JqZWN0X3VucmVmIChyZXMpOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF9hc3luY19m
aW5pc2hlZCAoR0lucHV0U3RyZWFtICpzdHJlYW0pCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURSAoc3RyZWFtKTsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKLQlHRXJyb3IgKmVy
cm9yID0gTlVMTDsKLQotCWlmICghZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVk
IChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKLQkJc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVk
IChwcml2LT5tc2csICZlcnJvcik7Ci0KLQlwcml2LT5nb3RfaGVhZGVyc19jYiA9IE5VTEw7Ci0J
cHJpdi0+ZmluaXNoZWRfY2IgPSBOVUxMOwotCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X2RvbmVfaW8gKHN0cmVhbSk7Ci0KLQlyZXN1bHQgPSBwcml2LT5yZXN1bHQ7Ci0JcHJpdi0+cmVz
dWx0ID0gTlVMTDsKLQotCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFu
IChyZXN1bHQsIGVycm9yID09IE5VTEwpOwotCWlmIChlcnJvcikgewotCQlnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlc3VsdCwgZXJyb3IpOwotCQlnX2Vycm9yX2ZyZWUg
KGVycm9yKTsKLQl9Ci0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChyZXN1bHQpOwot
CWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbnRlcm5hbCAoR0lucHV0U3RyZWFtICAgICAg
ICAqc3RyZWFtLAotCQkJCQkJICAgaW50IGlvX3ByaW9yaXR5LAotCQkJCQkJICAgR0NhbmNlbGxh
YmxlICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNh
bGxiYWNrLAotCQkJCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCVdlYktpdFNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1f
R0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0KLQlnX29iamVjdF9yZWYgKHN0cmVhbSk7Ci0JcHJpdi0+
b3V0c3RhbmRpbmdfY2FsbGJhY2sgPSBjYWxsYmFjazsKLQotCS8qIElmIHRoZSBzZXNzaW9uIHVz
ZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0aGVuIHdlIGNhbiBkbwotCSAqIGFzeW5jIEkv
TyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMgb3duIG1haW4gY29udGV4dCwgaXQncwotCSAq
IGVhc2llciB0byBqdXN0IHJ1biBpdCBpbiBhbm90aGVyIHRocmVhZC4KLQkgKi8KLQlpZiAoc291
cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChwcml2LT5zZXNzaW9uKSkgewotCQl3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCAoc3RyZWFtLCBpb19w
cmlvcml0eSwgY2FuY2VsbGFibGUsCi0JCQkJCQkJICAgICB3cmFwcGVyX2NhbGxiYWNrLCB1c2Vy
X2RhdGEpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBzZW5kX2Fz
eW5jX2ZpbmlzaGVkOwotCXByaXYtPmZpbmlzaGVkX2NiID0gc2VuZF9hc3luY19maW5pc2hlZDsK
LQotCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0s
IGNhbmNlbGxhYmxlLCBOVUxMLCAwKTsKLQlwcml2LT5yZXN1bHQgPSBnX3NpbXBsZV9hc3luY19y
ZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwKLQkJCQkJCSAgd3JhcHBlcl9jYWxsYmFjaywg
dXNlcl9kYXRhLAotCQkJCQkJICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Fz
eW5jKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Fz
eW5jOgotICogQGh0dHBzdHJlYW06IGEgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0KLSAqIEBp
b19wcmlvcml0eTogdGhlIGlvIHByaW9yaXR5IG9mIHRoZSByZXF1ZXN0LgotICogQGNhbmNlbGxh
YmxlOiBvcHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8gaWdub3JlLgotICog
QGNhbGxiYWNrOiBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVk
Ci0gKiBAdXNlcl9kYXRhOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCi0g
KgotICogQXN5bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBhc3NvY2lhdGVkIHdp
dGggQHN0cmVhbSwgYW5kCi0gKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVycy4gQ2FsbCB0aGlz
IGFmdGVyIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldygpCi0gKiBhbmQgYmVmb3Jl
IHRoZSBmaXJzdCBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKCkgaWYgeW91IHdhbnQgdG8KLSAq
IGNoZWNrIHRoZSBIVFRQIHN0YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQgcmVhZGluZy4KLSAq
Ki8KLXZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKFdlYktp
dFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCi0JCQkJCSAgaW50IGlvX3ByaW9yaXR5
LAotCQkJCQkgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkgIEdBc3lu
Y1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkJCSAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewot
CUdJbnB1dFN0cmVhbSAqaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOwotCUdF
cnJvciAqZXJyb3IgPSBOVUxMOwotCi0JZ19yZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBf
SFRUUF9JTlBVVF9TVFJFQU0gKGh0dHBzdHJlYW0pKTsKLQotCWlmICghZ19pbnB1dF9zdHJlYW1f
c2V0X3BlbmRpbmcgKGlzdHJlYW0sICZlcnJvcikpIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVwb3J0
X2dlcnJvcl9pbl9pZGxlIChHX09CSkVDVCAoaHR0cHN0cmVhbSksCi0JCQkJCQkgICAgICBjYWxs
YmFjaywKLQkJCQkJCSAgICAgIHVzZXJfZGF0YSwKLQkJCQkJCSAgICAgIGVycm9yKTsKLQkJZ19l
cnJvcl9mcmVlIChlcnJvcik7Ci0JCXJldHVybjsKLQl9Ci0Jd2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fc2VuZF9hc3luY19pbnRlcm5hbCAoaXN0cmVhbSwgaW9fcHJpb3JpdHksIGNhbmNl
bGxhYmxlLAotCQkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEpOwotfQotCi0vKioKLSAqIHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoOgotICogQGh0dHBzdHJlYW06
IGEgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0KLSAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3Vs
dC4KLSAqIEBlcnJvcjogYSAjR0Vycm9yIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBlcnJvciBvY2N1
cmluZywgb3IgJU5VTEwgdG8KLSAqIGlnbm9yZS4KLSAqCi0gKiBGaW5pc2hlcyBhIHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMoKSBvcGVyYXRpb24uCi0gKgotICogUmV0
dXJuIHZhbHVlOiAlVFJVRSBpZiB0aGUgbWVzc2FnZSB3YXMgc2VudCBzdWNjZXNzZnVsbHkgYW5k
Ci0gKiByZWNlaXZlZCBhIHN1Y2Nlc3NmdWwgc3RhdHVzIGNvZGUsICVGQUxTRSBpZiBub3QuCi0g
KiovCi1nYm9vbGVhbgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2gg
KFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gICpodHRwc3RyZWFtLAotCQkJCQkgICBHQXN5bmNS
ZXN1bHQgICAgICAgICAqcmVzdWx0LAotCQkJCQkgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJy
b3IpCi17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7Ci0KLQlnX3JldHVybl92YWxfaWZf
ZmFpbCAoR19JU19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpLCBGQUxTRSk7Ci0Jc2ltcGxl
ID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOwotCi0JZ19yZXR1cm5fdmFsX2lmX2Zh
aWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyAoc2ltcGxlKSA9PSB3ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jLCBGQUxTRSk7Ci0KLQlpZiAoZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJvcikpCi0JCXJl
dHVybiBGQUxTRTsKLQotCXJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19n
Ym9vbGVhbiAoc2ltcGxlKTsKLX0KLQotc3RhdGljIHZvaWQKLXJlYWRfYXN5bmNfZG9uZSAoR0lu
cHV0U3RyZWFtICpzdHJlYW0pCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUg
KnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFt
KTsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKLQlHRXJyb3IgKmVycm9yID0gTlVMTDsK
LQotCXJlc3VsdCA9IHByaXYtPnJlc3VsdDsKLQlwcml2LT5yZXN1bHQgPSBOVUxMOwotCi0JaWYg
KGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAocHJpdi0+Y2FuY2VsbGFibGUs
ICZlcnJvcikgfHwKLQkgICAgc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZl
cnJvcikpIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXN1bHQs
IGVycm9yKTsKLQkJZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0JfSBlbHNlCi0JCWdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0LCBwcml2LT5jYWxsZXJfbnJlYWQp
OwotCi0JcHJpdi0+Z290X2NodW5rX2NiID0gTlVMTDsKLQlwcml2LT5maW5pc2hlZF9jYiA9IE5V
TEw7Ci0JcHJpdi0+Y2FuY2VsbGVkX2NiID0gTlVMTDsKLQl3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOwotCi0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBs
ZXRlIChyZXN1bHQpOwotCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOwotfQotCi1zdGF0aWMgdm9p
ZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyAoR0lucHV0U3RyZWFt
ICAgICAgICAqc3RyZWFtLAotCQkJCQkgIHZvaWQgICAgICAgICAgICAgICAgKmJ1ZmZlciwKLQkJ
CQkJICBnc2l6ZSBjb3VudCwKLQkJCQkJICBpbnQgaW9fcHJpb3JpdHksCi0JCQkJCSAgR0NhbmNl
bGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCSAgR0FzeW5jUmVhZHlDYWxsYmFjayBj
YWxsYmFjaywKLQkJCQkJICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9H
RVRfUFJJVkFURSAoc3RyZWFtKTsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKLQotCS8q
IElmIHRoZSBzZXNzaW9uIHVzZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0aGVuIHdlIGNh
biBkbwotCSAqIGFzeW5jIEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMgb3duIG1haW4g
Y29udGV4dCwgd2UgZmFsbAotCSAqIGJhY2sgdG8gdGhlIGFzeW5jLXZpYS1zeW5jLWluLWFub3Ro
ZXItdGhyZWFkIGltcGxlbWVudGF0aW9uLgotCSAqLwotCWlmIChzb3VwX3Nlc3Npb25fZ2V0X2Fz
eW5jX2NvbnRleHQgKHByaXYtPnNlc3Npb24pKSB7Ci0JCUdfSU5QVVRfU1RSRUFNX0NMQVNTICh3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wYXJlbnRfY2xhc3MpLT4KLQkJcmVhZF9hc3lu
YyAoc3RyZWFtLCBidWZmZXIsIGNvdW50LCBpb19wcmlvcml0eSwKLQkJCSAgICBjYW5jZWxsYWJs
ZSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZXN1bHQgPSBnX3Np
bXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwKLQkJCQkJICAgIGNhbGxi
YWNrLCB1c2VyX2RhdGEsCi0JCQkJCSAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9y
ZWFkX2FzeW5jKTsKLQotCWlmIChwcml2LT5maW5pc2hlZCkgewotCQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfc2V0X29wX3Jlc19nc3NpemUgKHJlc3VsdCwgMCk7Ci0JCWdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1bHQpOwotCQlnX29iamVjdF91bnJlZiAocmVzdWx0
KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplKSB7Ci0JCWdz
aXplIG5yZWFkID0gcmVhZF9mcm9tX2xlZnRvdmVyIChwcml2LCBidWZmZXIsIGNvdW50KTsKLQkJ
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1bHQsIG5yZWFkKTsK
LQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7Ci0JCWdf
b2JqZWN0X3VucmVmIChyZXN1bHQpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdi0+cmVzdWx0ID0g
cmVzdWx0OwotCi0JcHJpdi0+Z290X2NodW5rX2NiID0gcmVhZF9hc3luY19kb25lOwotCXByaXYt
PmZpbmlzaGVkX2NiID0gcmVhZF9hc3luY19kb25lOwotCXByaXYtPmNhbmNlbGxlZF9jYiA9IHJl
YWRfYXN5bmNfZG9uZTsKLQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zv
cl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgYnVmZmVyLCBjb3VudCk7Ci19Ci0KLXN0YXRpYyBn
c3NpemUKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoIChHSW5wdXRT
dHJlYW0gICpzdHJlYW0sCi0JCQkJCSAgIEdBc3luY1Jlc3VsdCAgKnJlc3VsdCwKLQkJCQkJICAg
R0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7Ci0K
LQlnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQp
LCAtMSk7Ci0Jc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOwotCWdfcmV0
dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcgKHNp
bXBsZSkgPT0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYywgLTEpOwot
Ci0JcmV0dXJuIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dzc2l6ZSAoc2ltcGxl
KTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3Nl
X2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgKnN0cmVhbSwKLQkJCQkJICAgaW50IGlvX3ByaW9y
aXR5LAotCQkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkgICBH
QXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAotCQkJCQkgICBncG9pbnRlciB1c2VyX2RhdGEp
Ci17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7Ci0JZ2Jvb2xlYW4gc3VjY2VzczsKLQlH
RXJyb3IgKmVycm9yID0gTlVMTDsKLQotCXJlc3VsdCA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9u
ZXcgKEdfT0JKRUNUIChzdHJlYW0pLAotCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSwKLQkJ
CQkJICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jKTsKLQlzdWNj
ZXNzID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UgKHN0cmVhbSwgY2FuY2Vs
bGFibGUsICZlcnJvcik7Ci0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ2Jvb2xl
YW4gKHJlc3VsdCwgc3VjY2Vzcyk7Ci0JaWYgKGVycm9yKSB7Ci0JCWdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9zZXRfZnJvbV9lcnJvciAocmVzdWx0LCBlcnJvcik7Ci0JCWdfZXJyb3JfZnJlZSAoZXJy
b3IpOwotCX0KLQotCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1
bHQpOwotCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAq
c3RyZWFtLAotCQkJCQkgICAgR0FzeW5jUmVzdWx0ICAqcmVzdWx0LAotCQkJCQkgICAgR0Vycm9y
ICAgICAgICoqZXJyb3IpCi17Ci0JLyogRmFpbHVyZXMgaGFuZGxlZCBpbiBnZW5lcmljIGNsb3Nl
X2ZpbmlzaCBjb2RlICovCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnb2Zmc2V0Ci13ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90ZWxsIChHU2Vla2FibGUgKnNlZWthYmxlKQotewot
CVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRU
UF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHNlZWthYmxlKTsKLQotCXJldHVybiBwcml2LT5v
ZmZzZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fY2FuX3NlZWsgKEdTZWVrYWJsZSAqc2Vla2FibGUpCi17Ci0JcmV0dXJuIFRSVUU7Ci19Ci0K
LWV4dGVybiB2b2lkIHNvdXBfbWVzc2FnZV9pb19jbGVhbnVwIChTb3VwTWVzc2FnZSAqbXNnKTsK
LQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrIChH
U2Vla2FibGUgICAgICpzZWVrYWJsZSwKLQkJCQkgICAgZ29mZnNldCBvZmZzZXQsCi0JCQkJICAg
IEdTZWVrVHlwZSB0eXBlLAotCQkJCSAgICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKLQkJ
CQkgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0JR0lucHV0U3RyZWFtICpzdHJlYW0gPSBH
X0lOUFVUX1NUUkVBTSAoc2Vla2FibGUpOwotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2
YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHNl
ZWthYmxlKTsKLQljaGFyICpyYW5nZTsKLQotCWlmICh0eXBlID09IEdfU0VFS19FTkQpIHsKLQkJ
LyogRklYTUU6IHdlIGNvdWxkIHNlbmQgImJ5dGVzPS1vZmZzZXQiLCBidXQgdW5sZXNzIHdlCi0J
CSAqIGtub3cgdGhlIENvbnRlbnQtTGVuZ3RoLCB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvCi0JCSAq
IGFuc3dlciBhIHRlbGwoKSBwcm9wZXJseS4gV2UgY291bGQgZmluZCB0aGUKLQkJICogQ29udGVu
dC1MZW5ndGggYnkgZG9pbmcgYSBIRUFELi4uCi0JCSAqLwotCi0JCWdfc2V0X2Vycm9yX2xpdGVy
YWwgKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JURUQsCi0JCQkJICAg
ICAiR19TRUVLX0VORCBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIpOwotCQlyZXR1cm4gRkFMU0U7
Ci0JfQotCi0JaWYgKCFnX2lucHV0X3N0cmVhbV9zZXRfcGVuZGluZyAoc3RyZWFtLCBlcnJvcikp
Ci0JCXJldHVybiBGQUxTRTsKLQotCXNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZSAocHJpdi0+
c2Vzc2lvbiwgcHJpdi0+bXNnLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwotCXNvdXBfbWVzc2Fn
ZV9pb19jbGVhbnVwIChwcml2LT5tc2cpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgR19T
RUVLX0NVUjoKLQkJCW9mZnNldCArPSBwcml2LT5vZmZzZXQ7Ci0JCS8qIGZhbGwgdGhyb3VnaCAq
LwotCi0JCWNhc2UgR19TRUVLX1NFVDoKLQkJCXJhbmdlID0gZ19zdHJkdXBfcHJpbnRmICgiYnl0
ZXM9JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSIsIChndWludDY0KW9mZnNldCk7Ci0JCQlwcml2LT5v
ZmZzZXQgPSBvZmZzZXQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEdfU0VFS19FTkQ6Ci0JCQlyYW5n
ZSA9IE5VTEw7IC8qIGtlZXAgY29tcGlsZXJzIGhhcHB5ICovCi0JCQlnX3JldHVybl92YWxfaWZf
cmVhY2hlZCAoRkFMU0UpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWdfcmV0dXJuX3Zh
bF9pZl9yZWFjaGVkIChGQUxTRSk7Ci0JfQotCi0Jc291cF9tZXNzYWdlX2hlYWRlcnNfcmVtb3Zl
IChwcml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIik7Ci0Jc291cF9tZXNzYWdlX2hl
YWRlcnNfYXBwZW5kIChwcml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIiwgcmFuZ2Up
OwotCWdfZnJlZSAocmFuZ2UpOwotCi0Jd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcXVl
dWVfbWVzc2FnZSAoV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKHN0cmVhbSkpOwotCi0J
Z19pbnB1dF9zdHJlYW1fY2xlYXJfcGVuZGluZyAoc3RyZWFtKTsKLQlyZXR1cm4gVFJVRTsKLX0K
LQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fdHJ1
bmNhdGUgKEdTZWVrYWJsZSAqc2Vla2FibGUpCi17Ci0JcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlIChHU2Vl
a2FibGUgICAgICpzZWVrYWJsZSwKLQkJCQkJZ29mZnNldCBvZmZzZXQsCi0JCQkJCUdDYW5jZWxs
YWJsZSAgKmNhbmNlbGxhYmxlLAotCQkJCQlHRXJyb3IgICAgICAgKiplcnJvcikKLXsKLQlnX3Nl
dF9lcnJvcl9saXRlcmFsIChlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9S
VEVELAotCQkJICAgICAiVHJ1bmNhdGUgbm90IGFsbG93ZWQgb24gaW5wdXQgc3RyZWFtIik7Ci0J
cmV0dXJuIEZBTFNFOwotfQotCi1Tb3VwTWVzc2FnZSAqCi13ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9nZXRfbWVzc2FnZSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVh
bSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9T
T1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChodHRwc3RyZWFtKTsKLQlyZXR1cm4g
cHJpdi0+bXNnID8gZ19vYmplY3RfcmVmIChwcml2LT5tc2cpIDogTlVMTDsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2Yjk4NTU5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
NyArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2Rl
OiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwg
Uy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAotICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX1dFQktJVF9TT1VQX0hUVFBfSU5Q
VVRfU1RSRUFNX0hfXwotI2RlZmluZSBfX1dFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hf
XwotCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBlcy5o
PgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVU
X1NUUkVBTSAgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfdHlwZSAo
KSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0obykgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0hUVFBfSU5Q
VVRfU1RSRUFNLCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtKSkKLSNkZWZpbmUgV0VCS0lUX1NP
VVBfSFRUUF9JTlBVVF9TVFJFQU1fQ0xBU1MoaykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCAoKGspLCBXRUJLSVRfVFlQRV9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtQ2xhc3MpKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9IVFRQX0lOUFVUX1NU
UkVBTShvKSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgobyksIFdFQktJVF9U
WVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0pKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTV9DTEFTUyhrKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoayksIFdF
QktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0pKQotI2RlZmluZSBXRUJLSVRfU09VUF9I
VFRQX0lOUFVUX1NUUkVBTV9HRVRfQ0xBU1MobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mg
KChvKSwgV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbUNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbSBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtOwotdHlwZWRlZiBzdHJ1Y3QgV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbUNsYXNzIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzczsKLQot
c3RydWN0IFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gewotCUdJbnB1dFN0cmVhbSBwYXJlbnQ7
Ci19OwotCi1zdHJ1Y3QgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNsYXNzIHsKLQlHSW5wdXRT
dHJlYW1DbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLQkvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5z
aW9uICovCi0Jdm9pZCAoKl9nX3Jlc2VydmVkMSkodm9pZCk7Ci0Jdm9pZCAoKl9nX3Jlc2VydmVk
Mikodm9pZCk7Ci0Jdm9pZCAoKl9nX3Jlc2VydmVkMykodm9pZCk7Ci0Jdm9pZCAoKl9nX3Jlc2Vy
dmVkNCkodm9pZCk7Ci0Jdm9pZCAoKl9nX3Jlc2VydmVkNSkodm9pZCk7Ci19OwotCi1HVHlwZSB3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfdHlwZSAodm9pZCkgR19HTlVDX0NPTlNU
OwotCi1XZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICp3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9uZXcgKFNvdXBTZXNzaW9uICAgICAgICAgKnNlc3Npb24sCi0JCQkJCQkJICAgICAgU291
cE1lc3NhZ2UgICAgICAgICAqbXNnKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0
cHN0cmVhbSwKLQkJCQkJCQkgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJ
CQkJIEdFcnJvciAgICAgICAgICAgICAqKmVycm9yKTsKLQotdm9pZCAgICAgICAgICAgICAgICAg
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbSAqaHR0cHN0cmVhbSwKLQkJCQkJCQkgICAgICAgaW50IGlvX3ByaW9yaXR5LAot
CQkJCQkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJCQkg
ICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJCQkgICAgICAgZ3BvaW50
ZXIgdXNlcl9kYXRhKTsKLWdib29sZWFuICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3NlbmRfZmluaXNoIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3Ry
ZWFtLAotCQkJCQkJCQlHQXN5bmNSZXN1bHQgICAgICAgICpyZXN1bHQsCi0JCQkJCQkJCUdFcnJv
ciAgICAgICAgICAgICAqKmVycm9yKTsKLQotU291cE1lc3NhZ2UgICAgICAgICAqd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X21lc3NhZ2UgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJl
YW0gKmh0dHBzdHJlYW0pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19XRUJLSVRfU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9IX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZDVjNGEuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMK
KysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0
aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgot
ICogc291cC1yZXF1ZXN0LWRhdGEuYzogZGF0YTogVVJJIHJlcXVlc3Qgb2JqZWN0Ci0gKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEsIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNl
bmRpZgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1kYXRhLmgiCi0KLSNpbmNsdWRlICJzb3VwLXJl
cXVlc3Rlci5oIgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPGdsaWIvZ2kx
OG4uaD4KLQotR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cFJlcXVlc3REYXRhLCB3ZWJraXRfc291
cF9yZXF1ZXN0X2RhdGEsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkKLQotc3RydWN0IF9XZWJL
aXRTb3VwUmVxdWVzdERhdGFQcml2YXRlIHsKLQlnc2l6ZSBjb250ZW50X2xlbmd0aDsKLQljaGFy
ICpjb250ZW50X3R5cGU7Ci19OwotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9k
YXRhX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0RGF0YSAqZGF0YSkKLXsKLQlkYXRhLT5wcml2ID0g
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChkYXRhLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVF
U1RfREFUQSwgV2ViS2l0U291cFJlcXVlc3REYXRhUHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lk
Ci13ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKLXsK
LQlXZWJLaXRTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEEg
KG9iamVjdCk7Ci0KLQlnX2ZyZWUgKGRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZSk7Ci0KLQlHX09C
SkVDVF9DTEFTUyAod2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX3BhcmVudF9jbGFzcyktPmZpbmFs
aXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZGF0YV9jaGVja191cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKLQkJCQkgICAgU291
cFVSSSAgICAgICp1cmksCi0JCQkJICAgIEdFcnJvciAgICAgICoqZXJyb3IpCi17Ci0JcmV0dXJu
IHVyaS0+aG9zdCA9PSBOVUxMOwotfQotCi1zdGF0aWMgR0lucHV0U3RyZWFtICoKLXdlYmtpdF9z
b3VwX3JlcXVlc3RfZGF0YV9zZW5kIChXZWJLaXRTb3VwUmVxdWVzdCAgICpyZXF1ZXN0LAotCQkJ
ICAgICAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAotCQkJICAgICAgIEdFcnJvciAgICAg
ICAqKmVycm9yKQotewotCVdlYktpdFNvdXBSZXF1ZXN0RGF0YSAqZGF0YSA9IFdFQktJVF9TT1VQ
X1JFUVVFU1RfREFUQSAocmVxdWVzdCk7Ci0JU291cFVSSSAqdXJpID0gd2Via2l0X3NvdXBfcmVx
dWVzdF9nZXRfdXJpIChyZXF1ZXN0KTsKLQlHSW5wdXRTdHJlYW0gKm1lbXN0cmVhbTsKLQljb25z
dCBjaGFyICpjb21tYSwgKnNlbWksICpzdGFydCwgKmVuZDsKLQlnYm9vbGVhbiBiYXNlNjQgPSBG
QUxTRTsKLQotCWdjaGFyICp1cmlzdHIgPSBzb3VwX3VyaV90b19zdHJpbmcgKHVyaSwgRkFMU0Up
OwotCWNvbW1hID0gc3RyY2hyICh1cmlzdHIsICcsJyk7Ci0JaWYgKGNvbW1hICYmIGNvbW1hICE9
IHVyaXN0cikgewotCQkvKiBEZWFsIHdpdGggTUlNRSB0eXBlIC8gcGFyYW1zICovCi0JCXNlbWkg
PSBtZW1jaHIgKHVyaXN0ciwgJzsnLCBjb21tYSAtIHVyaXN0cik7Ci0JCWVuZCA9IHNlbWkgPyBz
ZW1pIDogY29tbWE7Ci0KLQkJaWYgKHNlbWkgJiYgIWdfYXNjaWlfc3RybmNhc2VjbXAgKHNlbWks
ICI7YmFzZTY0IiwgTUFYICgoc2l6ZV90KSAoY29tbWEgLSBzZW1pKSwgc3RybGVuICgiO2Jhc2U2
NCIpKSkpCi0JCQliYXNlNjQgPSBUUlVFOwotCi0JCWlmIChlbmQgIT0gdXJpc3RyKQotCQkJaWYg
KGJhc2U2NCkKLQkJCQlkYXRhLT5wcml2LT5jb250ZW50X3R5cGUgPSBnX3N0cm5kdXAgKHVyaXN0
ciwgZW5kIC0gdXJpc3RyKTsKLQkJCWVsc2UKLQkJCQlkYXRhLT5wcml2LT5jb250ZW50X3R5cGUg
PQotCQkJCQl3ZWJraXRfc291cF9yZXF1ZXN0X3VyaV9kZWNvZGVkX2NvcHkgKHVyaXN0ciwgZW5k
IC0gdXJpc3RyKTsKLQl9Ci0KLQltZW1zdHJlYW0gPSBnX21lbW9yeV9pbnB1dF9zdHJlYW1fbmV3
ICgpOwotCi0Jc3RhcnQgPSBjb21tYSA/IGNvbW1hICsgMSA6IHVyaXN0cjsKLQotCWlmICgqc3Rh
cnQpIHsKLQkJZ3VjaGFyICpidWY7Ci0KLQkJaWYgKGJhc2U2NCkgewotCQkJaW50IGlubGVuLCBz
dGF0ZSA9IDA7Ci0JCQlndWludCBzYXZlID0gMDsKLQotCQkJaW5sZW4gPSBzdHJsZW4gKHN0YXJ0
KTsKLQkJCWJ1ZiA9IGdfbWFsbG9jMCAoaW5sZW4gKiAzIC8gNCArIDMpOwotCQkJZGF0YS0+cHJp
di0+Y29udGVudF9sZW5ndGggPQotCQkJCWdfYmFzZTY0X2RlY29kZV9zdGVwIChzdGFydCwgaW5s
ZW4sIGJ1ZiwKLQkJCQkJCSAgICAgICZzdGF0ZSwgJnNhdmUpOwotCQkJaWYgKHN0YXRlICE9IDAp
IHsKLQkJCQlnX2ZyZWUgKGJ1Zik7Ci0JCQkJZ290byBmYWlsOwotCQkJfQotCQl9IGVsc2Ugewot
CQkJLyogQ2Fubm90IHVzZSBnX3VyaV91bmVzY2FwZV9zdHJpbmcgbm9yCi0JCQkgICBzb3VwX3Vy
aV9kZWNvZGUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvCi0JCQkgICBmYWlsIGZvciB0aGluZ3Mg
bGlrZSAiJTNFJSUzQyIgLT4gIj4lPCIgKi8KLQkJCWJ1ZiA9IChndWNoYXIgKil3ZWJraXRfc291
cF9yZXF1ZXN0X3VyaV9kZWNvZGVkX2NvcHkgKHN0YXJ0LCBzdHJsZW4gKHN0YXJ0KSk7Ci0JCQlp
ZiAoIWJ1ZikKLQkJCQlnb3RvIGZhaWw7Ci0JCQlkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0aCA9
IHN0cmxlbiAoKGNoYXIgKilidWYpOwotCQl9Ci0KLQkJZ19tZW1vcnlfaW5wdXRfc3RyZWFtX2Fk
ZF9kYXRhIChHX01FTU9SWV9JTlBVVF9TVFJFQU0gKG1lbXN0cmVhbSksCi0JCQkJCQlidWYsIGRh
dGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoLAotCQkJCQkJZ19mcmVlKTsKLQl9Ci0JZ19mcmVlICh1
cmlzdHIpOwotCi0JcmV0dXJuIG1lbXN0cmVhbTsKLQotIGZhaWw6Ci0JZ19mcmVlICh1cmlzdHIp
OwotCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9TT1VQX0VS
Uk9SX0JBRF9VUkksCi0JCSAgICAgXyAoIlVuYWJsZSB0byBkZWNvZGUgVVJJOiAlcyIpLCBzdGFy
dCk7Ci0JZ19vYmplY3RfdW5yZWYgKG1lbXN0cmVhbSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0
YXRpYyBnb2Zmc2V0Ci13ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVuZ3Ro
IChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKLXsKLQlXZWJLaXRTb3VwUmVxdWVzdERhdGEg
KmRhdGEgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEEgKHJlcXVlc3QpOwotCi0JcmV0dXJuIGRh
dGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi13ZWJr
aXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZSAoV2ViS2l0U291cFJlcXVlc3Qg
KnJlcXVlc3QpCi17Ci0JV2ViS2l0U291cFJlcXVlc3REYXRhICpkYXRhID0gV0VCS0lUX1NPVVBf
UkVRVUVTVF9EQVRBIChyZXF1ZXN0KTsKLQotCXJldHVybiBkYXRhLT5wcml2LT5jb250ZW50X3R5
cGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfY2xhc3NfaW5p
dCAoV2ViS2l0U291cFJlcXVlc3REYXRhQ2xhc3MgKnJlcXVlc3RfZGF0YV9jbGFzcykKLXsKLQlH
T2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2RhdGFf
Y2xhc3MpOwotCVdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQotCQlXRUJL
SVRfU09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2RhdGFfY2xhc3MpOwotCi0JZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2RhdGFfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cFJl
cXVlc3REYXRhUHJpdmF0ZSkpOwotCi0Jb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9z
b3VwX3JlcXVlc3RfZGF0YV9maW5hbGl6ZTsKLQotCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9
IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmk7Ci0JcmVxdWVzdF9jbGFzcy0+c2Vu
ZCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9zZW5kOwotCXJlcXVlc3RfY2xhc3MtPmdldF9j
b250ZW50X2xlbmd0aCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF9sZW5n
dGg7Ci0JcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHdlYmtpdF9zb3VwX3JlcXVl
c3RfZGF0YV9nZXRfY29udGVudF90eXBlOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk2MzFhNC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEu
aAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDOyB0YWItd2lk
dGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0gKLSNkZWZp
bmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0ggMQotCi0jaW5jbHVkZSAic291cC1yZXF1ZXN0
LmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1Rf
REFUQSAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X3R5cGUgKCkpCi0j
ZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQShvYmplY3QpICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUICgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RB
VEEsIFdlYktpdFNvdXBSZXF1ZXN0RGF0YSkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1Rf
REFUQV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBX
RUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSwgV2ViS2l0U291cFJlcXVlc3REYXRhQ2xhc3Mp
KQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0RBVEEob2JqZWN0KSAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVT
VF9EQVRBKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9EQVRBX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVR
VUVTVF9EQVRBKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVF9EQVRBLCBXZWJLaXRTb3VwUmVxdWVzdERhdGFDbGFzcykpCi0KLXR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRlIFdlYktpdFNvdXBSZXF1ZXN0RGF0YVBy
aXZhdGU7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3VwUmVxdWVzdCBwYXJlbnQ7Ci0K
LQlXZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRlICpwcml2OwotfSBXZWJLaXRTb3VwUmVxdWVz
dERhdGE7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3VwUmVxdWVzdENsYXNzIHBhcmVu
dDsKLX0gV2ViS2l0U291cFJlcXVlc3REYXRhQ2xhc3M7Ci0KLUdUeXBlIHdlYmtpdF9zb3VwX3Jl
cXVlc3RfZGF0YV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBX
RUJLSVRfU09VUF9SRVFVRVNUX0RBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRjY2IxMC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUu
YworKysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdp
ZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8q
Ci0gKiBzb3VwLXJlcXVlc3QtZmlsZS5jOiBmaWxlOiBVUkkgcmVxdWVzdCBvYmplY3QKLSAqCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSwgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgot
I2VuZGlmCi0KLSNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZmlsZS5oIgotI2luY2x1ZGUgInNvdXAt
ZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oIgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCi0j
aW5jbHVkZSA8Z2xpYi9naTE4bi5oPgotCi1HX0RFRklORV9UWVBFIChXZWJLaXRTb3VwUmVxdWVz
dEZpbGUsIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNU
KQotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0RmlsZVByaXZhdGUgewotCUdGaWxlICpnZmls
ZTsKLQotCWNoYXIgKm1pbWVfdHlwZTsKLQlnb2Zmc2V0IHNpemU7Ci19OwotCi1HRmlsZSAqCi13
ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2ZpbGUgKFdlYktpdFNvdXBSZXF1ZXN0RmlsZSAq
ZmlsZSkKLXsKLQlyZXR1cm4gZ19vYmplY3RfcmVmIChmaWxlLT5wcml2LT5nZmlsZSk7Ci19Ci0K
LXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfaW5pdCAoV2ViS2l0U291cFJl
cXVlc3RGaWxlICpmaWxlKQotewotCWZpbGUtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BS
SVZBVEUgKGZpbGUsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFLCBXZWJLaXRTb3VwUmVx
dWVzdEZpbGVQcml2YXRlKTsKLQotCWZpbGUtPnByaXYtPnNpemUgPSAtMTsKLX0KLQotc3RhdGlj
IHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0
KQotewotCVdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFdFQktJVF9TT1VQX1JFUVVFU1Rf
RklMRSAob2JqZWN0KTsKLQotCWlmIChmaWxlLT5wcml2LT5nZmlsZSkKLQkJZ19vYmplY3RfdW5y
ZWYgKGZpbGUtPnByaXYtPmdmaWxlKTsKLQlnX2ZyZWUgKGZpbGUtPnByaXYtPm1pbWVfdHlwZSk7
Ci0KLQlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3Vw
X3JlcXVlc3RfZmlsZV9jaGVja191cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKLQkJ
CQkgICAgU291cFVSSSAgICAgICp1cmksCi0JCQkJICAgIEdFcnJvciAgICAgICoqZXJyb3IpCi17
Ci0JLyogImZpbGU6L2ZvbyIgaXMgbm90IHZhbGlkICovCi0JaWYgKCF1cmktPmhvc3QpCi0JCXJl
dHVybiBGQUxTRTsKLQotCS8qIGJ1dCBpdCBtdXN0IGJlICJmaWxlOi8vLy4uLiIgb3IgImZpbGU6
Ly9sb2NhbGhvc3QvLi4uIiAqLwotCWlmICh1cmktPnNjaGVtZSA9PSBTT1VQX1VSSV9TQ0hFTUVf
RklMRSAmJgotCSAgICAqdXJpLT5ob3N0ICYmCi0JICAgIGdfYXNjaWlfc3RyY2FzZWNtcCAodXJp
LT5ob3N0LCAibG9jYWxob3N0IikgIT0gMCkKLQkJcmV0dXJuIEZBTFNFOwotCi0JcmV0dXJuIFRS
VUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZnRwX21haW5f
bG9vcF9xdWl0IChHT2JqZWN0ICAgICAgKm9iamVjdCwKLQkJCQkJICAgICBHQXN5bmNSZXN1bHQg
KnJlc3VsdCwKLQkJCQkJICAgICBncG9pbnRlciBsb29wKQotewotCWdfbWFpbl9sb29wX3F1aXQg
KGxvb3ApOwotfQotCi0vKiBUaGlzIGlzIGEgc29tZXdoYXQgaGFja3kgd2F5IHRvIGdldCBGVFAg
dG8gYWxtb3N0IHdvcmsuIFRoZSBwcm9wZXIgd2F5IHRvCi0gKiBnZXQgRlRQIHRvIF9yZWFsbHlf
IHdvcmsgaW52b2x2ZXMgaGFja2luZyBHSU8gdG8gaGF2ZSBBUElzIHRvIGhhbmRsZQotICogY2Fu
b25jaWFsIFVSTHMuCi0gKi8KLXN0YXRpYyBHRmlsZSAqCi13ZWJraXRfc291cF9yZXF1ZXN0X2Zp
bGVfZW5zdXJlX2ZpbGVfZnRwIChTb3VwVVJJICAgICAgICp1cmksCi0JCQkJCSAgR0NhbmNlbGxh
YmxlICAqY2FuY2VsbGFibGUsCi0JCQkJCSAgR0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0JU291
cFVSSSAqaG9zdDsKLQljaGFyICpzOwotCUdGaWxlICpmaWxlLCAqcmVzdWx0OwotCUdNb3VudCAq
bW91bnQ7Ci0KLQlob3N0ID0gc291cF91cmlfY29weV9ob3N0ICh1cmkpOwotCXMgPSBzb3VwX3Vy
aV90b19zdHJpbmcgKGhvc3QsIEZBTFNFKTsKLQlmaWxlID0gZ19maWxlX25ld19mb3JfdXJpIChz
KTsKLQlzb3VwX3VyaV9mcmVlIChob3N0KTsKLQlnX2ZyZWUgKHMpOwotCi0JbW91bnQgPSBnX2Zp
bGVfZmluZF9lbmNsb3NpbmdfbW91bnQgKGZpbGUsIGNhbmNlbGxhYmxlLCBlcnJvcik7Ci0JaWYg
KG1vdW50ID09IE5VTEwgJiYgZ19maWxlX3N1cHBvcnRzX3RocmVhZF9jb250ZXh0cyAoZmlsZSkp
IHsKLQkJR01haW5Db250ZXh0ICpjb250ZXh0ID0gZ19tYWluX2NvbnRleHRfbmV3ICgpOwotCQlH
TWFpbkxvb3AgKmxvb3AgPSBnX21haW5fbG9vcF9uZXcgKGNvbnRleHQsIEZBTFNFKTsKLQotCQln
X2NsZWFyX2Vycm9yIChlcnJvcik7Ci0JCWdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1
bHQgKGNvbnRleHQpOwotCQlnX2ZpbGVfbW91bnRfZW5jbG9zaW5nX3ZvbHVtZSAoZmlsZSwKLQkJ
CQkJICAgICAgIEdfTU9VTlRfTU9VTlRfTk9ORSwKLQkJCQkJICAgICAgIE5VTEwsIC8qIEZJWE1F
ISAqLwotCQkJCQkgICAgICAgY2FuY2VsbGFibGUsCi0JCQkJCSAgICAgICB3ZWJraXRfc291cF9y
ZXF1ZXN0X2ZpbGVfZnRwX21haW5fbG9vcF9xdWl0LAotCQkJCQkgICAgICAgbG9vcCk7Ci0JCWdf
bWFpbl9sb29wX3J1biAobG9vcCk7Ci0JCWdfbWFpbl9jb250ZXh0X3BvcF90aHJlYWRfZGVmYXVs
dCAoY29udGV4dCk7Ci0JCWdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLQkJZ19tYWluX2NvbnRl
eHRfdW5yZWYgKGNvbnRleHQpOwotCQltb3VudCA9IGdfZmlsZV9maW5kX2VuY2xvc2luZ19tb3Vu
dCAoZmlsZSwgY2FuY2VsbGFibGUsIGVycm9yKTsKLQl9Ci0JaWYgKG1vdW50ID09IE5VTEwpCi0J
CXJldHVybiBOVUxMOwotCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKLQotCWZpbGUgPSBnX21vdW50
X2dldF9kZWZhdWx0X2xvY2F0aW9uIChtb3VudCk7Ci0JZ19vYmplY3RfdW5yZWYgKG1vdW50KTsK
LQotCXMgPSBnX3N0cmR1cCAodXJpLT5wYXRoKTsKLQlpZiAoc3RyY2hyIChzLCAnOycpKQotCQkq
c3RyY2hyIChzLCAnOycpID0gMDsKLQotCXJlc3VsdCA9IGdfZmlsZV9yZXNvbHZlX3JlbGF0aXZl
X3BhdGggKGZpbGUsIHMpOwotCWdfZnJlZSAocyk7Ci0JZ19vYmplY3RfdW5yZWYgKGZpbGUpOwot
Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9yZXF1
ZXN0X2ZpbGVfZW5zdXJlX2ZpbGUgKFdlYktpdFNvdXBSZXF1ZXN0RmlsZSAgKmZpbGUsCi0JCQkJ
ICAgICAgR0NhbmNlbGxhYmxlICAgICAqY2FuY2VsbGFibGUsCi0JCQkJICAgICAgR0Vycm9yICAg
ICAgICAgICoqZXJyb3IpCi17Ci0JU291cFVSSSAqdXJpOwotCi0JaWYgKGZpbGUtPnByaXYtPmdm
aWxlKQotCQlyZXR1cm4gVFJVRTsKLQotCXVyaSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Vy
aSAoV0VCS0lUX1NPVVBfUkVRVUVTVCAoZmlsZSkpOwotCWlmICh1cmktPnNjaGVtZSA9PSBTT1VQ
X1VSSV9TQ0hFTUVfRklMRSkgewotCQkvKiBXZSBjYW5ub3QgdXNlIHNvdXBfdXJpX2RlY29kZSBh
cyBpdCBpbmNvcnJlY3RseQotCQkgKiByZXR1cm5zIE5VTEwgZm9yIGluY29ycmVjdGx5IGVuY29k
ZWQgVVJJcyAodGhhdAotCQkgKiBjb3VsZCBiZSB2YWxpZCBmaWxlbmFtZXMpLiBUaGlzIHdpbGwg
YmUgaG9wZWZ1bGx5Ci0JCSAqIHNoaXBwZWQgaW4gbGlic291cCAyLjMyLjEgYnV0IHdlIHdhbnQg
dG8gbGFuZCB0aGlzCi0JCSAqIGZpcnN0LiBUT0RPOiByZXBsYWNlIHVyaV9kZWNvZGVkX2NvcHkg
YnkKLQkJICogc291cF91cmlfZGVjb2RlIHdoZW4gdGhlIHJlcXVpcmVkIGxpYnNvdXAgdmVyc2lv
bgotCQkgKiBpcyBidW1wZWQgb3V0IHRvIDIuMzIuMQotCQkgKi8KLQkJZ2NoYXIgKmRlY29kZWRf
dXJpID0gd2Via2l0X3NvdXBfcmVxdWVzdF91cmlfZGVjb2RlZF9jb3B5ICh1cmktPnBhdGgsIHN0
cmxlbiAodXJpLT5wYXRoKSk7Ci0KLQkJaWYgKGRlY29kZWRfdXJpKSB7Ci0JCQkvKiBEbyBub3Qg
dXNlIG5ld19mb3JfdXJpKCkgYXMgdGhlIGRlY29kZWQgVVJJCi0JCQkgKiAgY291bGQgbm90IGJl
IGEgdmFsaWQgVVJJCi0JCQkgKi8KLQkJCWZpbGUtPnByaXYtPmdmaWxlID0gZ19maWxlX25ld19m
b3JfcGF0aCAoZGVjb2RlZF91cmkpOwotCQkJZ19mcmVlIChkZWNvZGVkX3VyaSk7Ci0JCX0KLQot
CQlyZXR1cm4gVFJVRTsKLQl9IGVsc2UgaWYgKHVyaS0+c2NoZW1lID09IFNPVVBfVVJJX1NDSEVN
RV9GVFApIHsKLQkJZmlsZS0+cHJpdi0+Z2ZpbGUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVf
ZW5zdXJlX2ZpbGVfZnRwICh1cmksCi0JCQkJCQkJCQkgICAgICBjYW5jZWxsYWJsZSwKLQkJCQkJ
CQkJCSAgICAgIGVycm9yKTsKLQkJcmV0dXJuIGZpbGUtPnByaXYtPmdmaWxlICE9IE5VTEw7Ci0J
fQotCi0JZ19zZXRfZXJyb3IgKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lUX1NPVVBf
RVJST1JfVU5TVVBQT1JURURfVVJJX1NDSEVNRSwKLQkJICAgICBfICgiVW5zdXBwb3J0ZWQgVVJJ
IHNjaGVtZSAnJXMnIiksIHVyaS0+c2NoZW1lKTsKLQlyZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRp
YyBHSW5wdXRTdHJlYW0gKgotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQgKFdlYktpdFNv
dXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAg
ICAgICpjYW5jZWxsYWJsZSwKLQkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3Ip
Ci17Ci0JV2ViS2l0U291cFJlcXVlc3RGaWxlICpmaWxlID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9G
SUxFIChyZXF1ZXN0KTsKLQlHSW5wdXRTdHJlYW0gKnN0cmVhbTsKLQlHRXJyb3IgKm15X2Vycm9y
ID0gTlVMTDsKLQotCWlmICghd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlIChm
aWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpKQotCQlyZXR1cm4gTlVMTDsKLQotCXN0cmVhbSA9IEdf
SU5QVVRfU1RSRUFNIChnX2ZpbGVfcmVhZCAoZmlsZS0+cHJpdi0+Z2ZpbGUsCi0JCQkJCSAgICAg
IGNhbmNlbGxhYmxlLCAmbXlfZXJyb3IpKTsKLQlpZiAoc3RyZWFtID09IE5VTEwpIHsKLQkJaWYg
KGdfZXJyb3JfbWF0Y2hlcyAobXlfZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfSVNfRElS
RUNUT1JZKSkgewotCQkJR0ZpbGVFbnVtZXJhdG9yICplbnVtZXJhdG9yOwotCQkJZ19jbGVhcl9l
cnJvciAoJm15X2Vycm9yKTsKLQkJCWVudW1lcmF0b3IgPSBnX2ZpbGVfZW51bWVyYXRlX2NoaWxk
cmVuIChmaWxlLT5wcml2LT5nZmlsZSwKLQkJCQkJCQkJIioiLAotCQkJCQkJCQlHX0ZJTEVfUVVF
UllfSU5GT19OT05FLAotCQkJCQkJCQljYW5jZWxsYWJsZSwKLQkJCQkJCQkJZXJyb3IpOwotCQkJ
aWYgKGVudW1lcmF0b3IpIHsKLQkJCQlzdHJlYW0gPSB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5w
dXRfc3RyZWFtX25ldyAoZW51bWVyYXRvciwKLQkJCQkJCQkJCQkgd2Via2l0X3NvdXBfcmVxdWVz
dF9nZXRfdXJpIChyZXF1ZXN0KSk7Ci0JCQkJZ19vYmplY3RfdW5yZWYgKGVudW1lcmF0b3IpOwot
CQkJCWZpbGUtPnByaXYtPm1pbWVfdHlwZSA9IGdfc3RyZHVwICgidGV4dC9odG1sIik7Ci0JCQl9
Ci0JCX0gZWxzZSB7Ci0JCQlnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIG15X2Vycm9yKTsKLQkJ
fQotCX0gZWxzZSB7Ci0JCUdGaWxlSW5mbyAqaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvIChmaWxl
LT5wcml2LT5nZmlsZSwKLQkJCQkJCSAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9DT05U
RU5UX1RZUEUgIiwiCi0JCQkJCQkgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwK
LQkJCQkJCSAgICAgMCwgY2FuY2VsbGFibGUsIE5VTEwpOwotCQlpZiAoaW5mbykgewotCQkJY29u
c3QgY2hhciAqY29udGVudF90eXBlOwotCQkJZmlsZS0+cHJpdi0+c2l6ZSA9IGdfZmlsZV9pbmZv
X2dldF9zaXplIChpbmZvKTsKLQkJCWNvbnRlbnRfdHlwZSA9IGdfZmlsZV9pbmZvX2dldF9jb250
ZW50X3R5cGUgKGluZm8pOwotCi0JCQlpZiAoY29udGVudF90eXBlKQotCQkJCWZpbGUtPnByaXYt
Pm1pbWVfdHlwZSA9IGdfY29udGVudF90eXBlX2dldF9taW1lX3R5cGUgKGNvbnRlbnRfdHlwZSk7
Ci0JCQlnX29iamVjdF91bnJlZiAoaW5mbyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3RyZWFtOwot
fQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmNfdGhy
ZWFkIChHU2ltcGxlQXN5bmNSZXN1bHQgKnJlcywKLQkJCQkJICAgIEdPYmplY3QgICAgICAgICAg
ICAqb2JqZWN0LAotCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICpjYW5jZWxsYWJsZSkKLXsK
LQlHSW5wdXRTdHJlYW0gKnN0cmVhbTsKLQlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdDsKLQlH
RXJyb3IgKmVycm9yID0gTlVMTDsKLQotCXJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUIChv
YmplY3QpOwotCi0Jc3RyZWFtID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQgKHJlcXVl
c3QsIGNhbmNlbGxhYmxlLCAmZXJyb3IpOwotCi0JaWYgKHN0cmVhbSA9PSBOVUxMKSB7Ci0JCWdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVzLCBlcnJvcik7Ci0JCWdfZXJy
b3JfZnJlZSAoZXJyb3IpOwotCX0gZWxzZSB7Ci0JCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRf
b3BfcmVzX2dwb2ludGVyIChyZXMsIHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOwotCX0KLX0KLQot
c3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jIChXZWJLaXRT
b3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkgICAgIEdDYW5jZWxsYWJsZSAgICAg
ICAgICpjYW5jZWxsYWJsZSwKLQkJCQkgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ss
Ci0JCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpy
ZXM7Ci0KLQlyZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAocmVxdWVz
dCksIGNhbGxiYWNrLCB1c2VyX2RhdGEsIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2Fz
eW5jKTsKLQotCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9ydW5faW5fdGhyZWFkIChyZXMsIHdlYmtp
dF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jX3RocmVhZCwgR19QUklPUklUWV9ERUZBVUxU
LCBjYW5jZWxsYWJsZSk7Ci0JZ19vYmplY3RfdW5yZWYgKHJlcyk7Ci19Ci0KLXN0YXRpYyBHSW5w
dXRTdHJlYW0gKgotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoIChXZWJLaXRT
b3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkgICAgICBHQXN5bmNSZXN1bHQgICAg
ICAgICAqcmVzdWx0LAotCQkJCSAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKLXsK
LQlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVz
dWx0KTsKLQotCWdfd2Fybl9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJj
ZV90YWcgKHNpbXBsZSkgPT0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmMpOwot
Ci0JaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3IgKHNpbXBsZSwgZXJy
b3IpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBnX29iamVjdF9yZWYgKGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUpKTsKLX0KLQotc3RhdGljIGdv
ZmZzZXQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF9sZW5ndGggKFdlYktp
dFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQotewotCVdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9
IFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7Ci0KLQlyZXR1cm4gZmlsZS0+cHJp
di0+c2l6ZTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotd2Via2l0X3NvdXBfcmVxdWVzdF9m
aWxlX2dldF9jb250ZW50X3R5cGUgKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQotewotCVdl
YktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRSAocmVx
dWVzdCk7Ci0KLQlpZiAoIWZpbGUtPnByaXYtPm1pbWVfdHlwZSkKLQkJcmV0dXJuICJhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0iOwotCi0JcmV0dXJuIGZpbGUtPnByaXYtPm1pbWVfdHlwZTsKLX0K
LQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9jbGFzc19pbml0IChXZWJL
aXRTb3VwUmVxdWVzdEZpbGVDbGFzcyAqcmVxdWVzdF9maWxlX2NsYXNzKQotewotCUdPYmplY3RD
bGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7
Ci0JV2ViS2l0U291cFJlcXVlc3RDbGFzcyAqcmVxdWVzdF9jbGFzcyA9Ci0JCVdFQktJVF9TT1VQ
X1JFUVVFU1RfQ0xBU1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7Ci0KLQlnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUgKHJlcXVlc3RfZmlsZV9jbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwUmVxdWVzdEZp
bGVQcml2YXRlKSk7Ci0KLQlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfcmVx
dWVzdF9maWxlX2ZpbmFsaXplOwotCi0JcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gd2Via2l0
X3NvdXBfcmVxdWVzdF9maWxlX2NoZWNrX3VyaTsKLQlyZXF1ZXN0X2NsYXNzLT5zZW5kID0gd2Vi
a2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQ7Ci0JcmVxdWVzdF9jbGFzcy0+c2VuZF9hc3luYyA9
IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jOwotCXJlcXVlc3RfY2xhc3MtPnNl
bmRfZmluaXNoID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoOwotCXJlcXVl
c3RfY2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9n
ZXRfY29udGVudF9sZW5ndGg7Ci0JcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHdl
YmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF90eXBlOwotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1m
aWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0LWZpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU5ZTgyYS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWZpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qIC0qLSBN
b2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0
OiA4IC0qLSAqLwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX1NPVVBfUkVRVUVT
VF9GSUxFX0gKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFX0ggMQotCi0jaW5jbHVk
ZSAic291cC1yZXF1ZXN0LmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfRklMRSAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVf
Z2V0X3R5cGUgKCkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRShvYmplY3QpICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqZWN0KSwgV0VCS0lUX1RZUEVf
U09VUF9SRVFVRVNUX0ZJTEUsIFdlYktpdFNvdXBSZXF1ZXN0RmlsZSkpCi0jZGVmaW5lIFdFQktJ
VF9TT1VQX1JFUVVFU1RfRklMRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0U291cFJl
cXVlc3RGaWxlQ2xhc3MpKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0ZJTEUob2Jq
ZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFdFQktJVF9U
WVBFX1NPVVBfUkVRVUVTVF9GSUxFKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9G
SUxFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9G
SUxFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdF
QktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFLCBXZWJLaXRTb3VwUmVxdWVzdEZpbGVDbGFzcykp
Ci0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlIFdlYktpdFNv
dXBSZXF1ZXN0RmlsZVByaXZhdGU7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3VwUmVx
dWVzdCBwYXJlbnQ7Ci0KLQlXZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlICpwcml2OwotfSBX
ZWJLaXRTb3VwUmVxdWVzdEZpbGU7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3VwUmVx
dWVzdENsYXNzIHBhcmVudDsKLX0gV2ViS2l0U291cFJlcXVlc3RGaWxlQ2xhc3M7Ci0KLUdUeXBl
IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdGaWxlICAqd2Vi
a2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF9maWxlIChXZWJLaXRTb3VwUmVxdWVzdEZpbGUgKmZp
bGUpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxF
X0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDc3N2ZkNzIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwz
NTYgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9k
ZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogc291cC1yZXF1ZXN0LWh0dHAu
YzogaHR0cDogVVJJIHJlcXVlc3Qgb2JqZWN0Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFJl
ZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhB
VkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z2xp
Yi9naTE4bi5oPgotCi0jaW5jbHVkZSAic291cC1jYWNoZS5oIgotI2luY2x1ZGUgInNvdXAtY2Fj
aGUtcHJpdmF0ZS5oIgotI2luY2x1ZGUgInNvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCIKLSNpbmNs
dWRlICJzb3VwLXJlcXVlc3QtaHR0cC5oIgotCi1HX0RFRklORV9UWVBFIChXZWJLaXRTb3VwUmVx
dWVzdEhUVFAsIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cCwgV0VCS0lUX1RZUEVfU09VUF9SRVFV
RVNUKQotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SFRUUFByaXZhdGUgewotCVNvdXBNZXNz
YWdlICptc2c7Ci19OwotCi0vKioKLSAqIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVz
c2FnZToKLSAqIEBodHRwOiBhICNXZWJLaXRTb3VwUmVxdWVzdEhUVFAgb2JqZWN0Ci0gKgotICog
R2V0cyBhIG5ldyByZWZlcmVuY2UgdG8gdGhlICNTb3VwTWVzc2FnZSBhc3NvY2lhdGVkIHRvIHRo
aXMgU291cFJlcXVlc3QKLSAqCi0gKiBSZXR1cm5zOiBhIG5ldyByZWZlcmVuY2UgdG8gdGhlICNT
b3VwTWVzc2FnZQotICoqLwotU291cE1lc3NhZ2UgKgotd2Via2l0X3NvdXBfcmVxdWVzdF9odHRw
X2dldF9tZXNzYWdlIChXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHApCi17Ci0JZ19yZXR1cm5f
dmFsX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX1JFUVVFU1RfSFRUUCAoaHR0cCksIE5VTEwpOwot
Ci0JcmV0dXJuIGdfb2JqZWN0X3JlZiAoaHR0cC0+cHJpdi0+bXNnKTsKLX0KLQotc3RhdGljIHZv
aWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9pbml0IChXZWJLaXRTb3VwUmVxdWVzdEhUVFAg
Kmh0dHApCi17Ci0JaHR0cC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoaHR0
cCwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFAsIFdlYktpdFNvdXBSZXF1ZXN0SFRUUFBy
aXZhdGUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9j
aGVja191cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKLQkJCQkgICAgU291cFVSSSAg
ICAgICp1cmksCi0JCQkJICAgIEdFcnJvciAgICAgICoqZXJyb3IpCi17Ci0JV2ViS2l0U291cFJl
cXVlc3RIVFRQICpodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKLQot
CWlmICghU09VUF9VUklfVkFMSURfRk9SX0hUVFAgKHVyaSkpCi0JCXJldHVybiBGQUxTRTsKLQot
CWh0dHAtPnByaXYtPm1zZyA9IHNvdXBfbWVzc2FnZV9uZXdfZnJvbV91cmkgKFNPVVBfTUVUSE9E
X0dFVCwgdXJpKTsKLQlyZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3Vw
X3JlcXVlc3RfaHR0cF9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQotewotCVdlYktpdFNvdXBS
ZXF1ZXN0SFRUUCAqaHR0cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUCAob2JqZWN0KTsKLQot
CWlmIChodHRwLT5wcml2LT5tc2cpCi0JCWdfb2JqZWN0X3VucmVmIChodHRwLT5wcml2LT5tc2cp
OwotCi0JR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIEdJbnB1dFN0cmVhbSAqCi13ZWJr
aXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJl
cXVlc3QsCi0JCQkgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJ
ICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKLXsKLQlXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtICpodHRwc3RyZWFtOwotCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFdF
QktJVF9TT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7Ci0KLQlodHRwc3RyZWFtID0gd2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3ICh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9zZXNz
aW9uIChyZXF1ZXN0KSwgaHR0cC0+cHJpdi0+bXNnKTsKLQlpZiAoIXdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3NlbmQgKGh0dHBzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcikpIHsKLQkJ
Z19vYmplY3RfdW5yZWYgKGh0dHBzdHJlYW0pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJu
IChHSW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOwotfQotCi0KLXN0YXRpYyB2b2lkCi1zZW50X2Fz
eW5jIChHT2JqZWN0ICpzb3VyY2UsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1c2Vy
X2RhdGEpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSA9IFdFQktJ
VF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNIChzb3VyY2UpOwotCUdTaW1wbGVBc3luY1Jlc3VsdCAq
c2ltcGxlID0gdXNlcl9kYXRhOwotCUdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0JaWYgKHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoIChodHRwc3RyZWFtLCByZXN1bHQs
ICZlcnJvcikpIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIg
KHNpbXBsZSwgaHR0cHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOwotCX0gZWxzZSB7Ci0JCWdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAoc2ltcGxlLCBlcnJvcik7Ci0JCWdfZXJy
b3JfZnJlZSAoZXJyb3IpOwotCQlnX29iamVjdF91bnJlZiAoaHR0cHN0cmVhbSk7Ci0JfQotCWdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKLQlnX29iamVjdF91bnJlZiAo
c2ltcGxlKTsKLX0KLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291cFJlcXVlc3RIVFRQ
ICpyZXE7Ci0JU291cE1lc3NhZ2UgKm9yaWdpbmFsOwotCUdDYW5jZWxsYWJsZSAqY2FuY2VsbGFi
bGU7Ci0JR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjazsKLQlncG9pbnRlciB1c2VyX2RhdGE7
Ci19IENvbmRpdGlvbmFsSGVscGVyOwotCi0KLXN0YXRpYyB2b2lkCi1jb25kaXRpb25hbF9nZXRf
cmVhZHlfY2IgKFNvdXBTZXNzaW9uICpzZXNzaW9uLCBTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRl
ciB1c2VyX2RhdGEpCi17Ci0JQ29uZGl0aW9uYWxIZWxwZXIgKmhlbHBlciA9IChDb25kaXRpb25h
bEhlbHBlciAqKXVzZXJfZGF0YTsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKLQlXZWJL
aXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOwotCi0Jc2ltcGxlID0gZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKGhlbHBlci0+cmVxKSwKLQkJCQkJICAgIGhlbHBl
ci0+Y2FsbGJhY2ssIGhlbHBlci0+dXNlcl9kYXRhLAotCQkJCQkgICAgY29uZGl0aW9uYWxfZ2V0
X3JlYWR5X2NiKTsKLQotCWlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX05PVF9N
T0RJRklFRCkgewotCQlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gKFdlYktpdFNvdXBDYWNoZSAq
KXNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9DQUNI
RSk7Ci0KLQkJaHR0cHN0cmVhbSA9IChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICopd2Via2l0
X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoY2FjaGUsIG1zZyk7Ci0JCWlmIChodHRwc3RyZWFt
KSB7Ci0JCQljb25zdCBnY2hhciAqY29udGVudF90eXBlOwotCi0JCQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlLCBodHRwc3RyZWFtLCBnX29iamVjdF91
bnJlZik7Ci0KLQkJCXNvdXBfbWVzc2FnZV9nb3RfaGVhZGVycyAoaGVscGVyLT5vcmlnaW5hbCk7
Ci0KLQkJCS8qIEZJWE1FOiBVbmNvbW1lbnQgdGhpcyB3aGVuIHRoaXMgYmVjb21lcyBwYXJ0IG9m
IGxpYnNvdXAKLQkJCSAqIGlmICghc291cF9tZXNzYWdlX2Rpc2FibGVzX2ZlYXR1cmUoaGVscGVy
LT5vcmlnaW5hbCwgU09VUF9UWVBFX0NPTlRFTlRfU05JRkZFUikpIHsKLQkJCSAqIAljb25zdCBn
Y2hhciAqY29udGVudF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfdHlw
ZSAobXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKLQkJCSAqIAlzb3VwX21lc3NhZ2VfY29u
dGVudF9zbmlmZmVkIChoZWxwZXItPm9yaWdpbmFsLCBjb250ZW50X3R5cGUsIE5VTEwpOwotCQkJ
ICogfQotCQkJICovCi0JCQljb250ZW50X3R5cGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRf
Y29udGVudF90eXBlIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwpOwotCQkJc291cF9tZXNz
YWdlX2NvbnRlbnRfc25pZmZlZCAoaGVscGVyLT5vcmlnaW5hbCwgY29udGVudF90eXBlLCBOVUxM
KTsKLQotCQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOwotCi0JCQlz
b3VwX21lc3NhZ2VfZmluaXNoZWQgKGhlbHBlci0+b3JpZ2luYWwpOwotCi0JCQlnX29iamVjdF91
bnJlZiAoc2ltcGxlKTsKLQkJfSBlbHNlIHsKLQkJCS8qIEFzayBhZ2FpbiBmb3IgdGhlIHJlc291
cmNlLCBzb21laG93IHRoZSBjYWNoZSBjYW5ub3QgbG9jYXRlIGl0ICovCi0JCQlodHRwc3RyZWFt
ID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChzZXNzaW9uLCBoZWxwZXItPm9y
aWdpbmFsKTsKLQkJCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKGh0
dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKLQkJCQkJCQkJICBoZWxwZXItPmNhbmNlbGxh
YmxlLCBzZW50X2FzeW5jLCBzaW1wbGUpOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSXQgaXMgaW4g
dGhlIGNhY2hlIGJ1dCBpdCB3YXMgbW9kaWZpZWQgcmVtb3RlbHkgKi8KLQkJaHR0cHN0cmVhbSA9
IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoc2Vzc2lvbiwgaGVscGVyLT5vcmln
aW5hbCk7Ci0JCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKGh0dHBz
dHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKLQkJCQkJCQkgIGhlbHBlci0+Y2FuY2VsbGFibGUs
IHNlbnRfYXN5bmMsIHNpbXBsZSk7Ci0JfQotCi0JZ19vYmplY3RfdW5yZWYgKGhlbHBlci0+cmVx
KTsKLQlnX29iamVjdF91bnJlZiAoaGVscGVyLT5vcmlnaW5hbCk7Ci0JZ19zbGljZV9mcmVlIChD
b25kaXRpb25hbEhlbHBlciwgaGVscGVyKTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCVdlYktp
dFNvdXBSZXF1ZXN0SFRUUCAqaHR0cDsKLQlHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrOwot
CWdwb2ludGVyIHVzZXJfZGF0YTsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3Ry
ZWFtOwotfSBTZW5kQXN5bmNIZWxwZXI7Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVl
c3RfaHR0cF9zZW5kX2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwK
LQkJCQkJCSBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCQkgR0FzeW5j
UmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJCSBncG9pbnRlciB1c2VyX2RhdGEpOwotCi1z
dGF0aWMgZ2Jvb2xlYW4KLXNlbmRfYXN5bmNfY2IgKGdwb2ludGVyIGRhdGEpCi17Ci0JR1NpbXBs
ZUFzeW5jUmVzdWx0ICpzaW1wbGU7Ci0JU2VuZEFzeW5jSGVscGVyICpoZWxwZXIgPSAoU2VuZEFz
eW5jSGVscGVyICopZGF0YTsKLQljb25zdCBnY2hhciAqY29udGVudF90eXBlOwotCi0Jc2ltcGxl
ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKGhlbHBlci0+aHR0cCksCi0J
CQkJCSAgICBoZWxwZXItPmNhbGxiYWNrLCBoZWxwZXItPnVzZXJfZGF0YSwKLQkJCQkJICAgIHdl
YmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jKTsKLQlnX3NpbXBsZV9hc3luY19yZXN1
bHRfc2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlLCBoZWxwZXItPmh0dHBzdHJlYW0sIGdfb2Jq
ZWN0X3VucmVmKTsKLQotCS8qIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyAqLwotCXNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZywgU09VUF9TVEFUVVNfT0spOwot
Ci0JLyogSXNzdWUgc2lnbmFscyAgKi8KLQlzb3VwX21lc3NhZ2VfZ290X2hlYWRlcnMgKGhlbHBl
ci0+aHR0cC0+cHJpdi0+bXNnKTsKLQotCS8qIEZJWE1FOiBVbmNvbW1lbnQgdGhpcyB3aGVuIHRo
aXMgYmVjb21lcyBwYXJ0IG9mIGxpYnNvdXAKLQkgKiBpZiAoIXNvdXBfbWVzc2FnZV9kaXNhYmxl
c19mZWF0dXJlKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnLCBTT1VQX1RZUEVfQ09OVEVOVF9TTklG
RkVSKSkgewotCSAqCWNvbnN0IGdjaGFyICpjb250ZW50X3R5cGUgPSBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19nZXRfY29udGVudF90eXBlIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZy0+cmVzcG9uc2Vf
aGVhZGVycywgTlVMTCk7Ci0JICoJc291cF9tZXNzYWdlX2NvbnRlbnRfc25pZmZlZCAoaGVscGVy
LT5odHRwLT5wcml2LT5tc2csIGNvbnRlbnRfdHlwZSwgTlVMTCk7Ci0JICogfQotCSAqLwotCWNv
bnRlbnRfdHlwZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKGhlbHBl
ci0+aHR0cC0+cHJpdi0+bXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKLQlzb3VwX21lc3Nh
Z2VfY29udGVudF9zbmlmZmVkIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZywgY29udGVudF90eXBl
LCBOVUxMKTsKLQotCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKLQot
CXNvdXBfbWVzc2FnZV9maW5pc2hlZCAoaGVscGVyLT5odHRwLT5wcml2LT5tc2cpOwotCi0JZ19v
YmplY3RfdW5yZWYgKHNpbXBsZSk7Ci0KLQlnX29iamVjdF91bnJlZiAoaGVscGVyLT5odHRwKTsK
LQlnX3NsaWNlX2ZyZWUgKFNlbmRBc3luY0hlbHBlciwgaGVscGVyKTsKLQotCXJldHVybiBGQUxT
RTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5j
IChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkgICAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCi0JCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JV2ViS2l0U291cFJl
cXVlc3RIVFRQICpodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKLQlX
ZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOwotCUdTaW1wbGVBc3luY1Jlc3Vs
dCAqc2ltcGxlOwotCVNvdXBTZXNzaW9uICpzZXNzaW9uOwotCVdlYktpdFNvdXBDYWNoZSAqY2Fj
aGU7Ci0KLQlzZXNzaW9uID0gd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAocmVxdWVz
dCk7Ci0JY2FjaGUgPSAoV2ViS2l0U291cENhY2hlICopc291cF9zZXNzaW9uX2dldF9mZWF0dXJl
IChzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKTsKLQotCWlmIChjYWNoZSkgewotCQlX
ZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSByZXNwb25zZTsKLQotCQlyZXNwb25zZSA9IHdlYmtpdF9z
b3VwX2NhY2hlX2hhc19yZXNwb25zZSAoY2FjaGUsIGh0dHAtPnByaXYtPm1zZyk7Ci0JCWlmIChy
ZXNwb25zZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSCkgewotCQkJV2ViS2l0
U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKLQotCQkJaHR0cHN0cmVhbSA9IChXZWJL
aXRTb3VwSFRUUElucHV0U3RyZWFtICopCi0JCQkJd2Via2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNw
b25zZSAoY2FjaGUsIFNPVVBfTUVTU0FHRSAoaHR0cC0+cHJpdi0+bXNnKSk7Ci0KLQkJCS8qIENh
Y2hlZCByZXNvdXJjZSBmaWxlIGNvdWxkIGhhdmUgYmVlbiBkZWxldGVkIG91dHNpZGUKLQkJCSAq
LwotCQkJaWYgKGh0dHBzdHJlYW0pIHsKLQkJCQkvKiBEbyByZXR1cm4gdGhlIHN0cmVhbSBhc3lu
Y2hyb25vdXNseSBhcyBpbgotCQkJCSAqIHRoZSBvdGhlciBjYXNlcy4gSXQncyBub3QgZW5vdWdo
IHRvIHVzZQotCQkJCSAqIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIGFz
Ci0JCQkJICogdGhlIHNpZ25hbHMgbXVzdCBiZSBhbHNvIGVtaXR0ZWQKLQkJCQkgKiBhc3luY2hy
b25vdXNseQotCQkJCSAqLwotCQkJCVNlbmRBc3luY0hlbHBlciAqaGVscGVyID0gZ19zbGljZV9u
ZXcgKFNlbmRBc3luY0hlbHBlcik7Ci0JCQkJaGVscGVyLT5odHRwID0gZ19vYmplY3RfcmVmICho
dHRwKTsKLQkJCQloZWxwZXItPmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0JCQkJaGVscGVyLT51c2Vy
X2RhdGEgPSB1c2VyX2RhdGE7Ci0JCQkJaGVscGVyLT5odHRwc3RyZWFtID0gaHR0cHN0cmVhbTsK
LQkJCQlnX3RpbWVvdXRfYWRkICgwLCBzZW5kX2FzeW5jX2NiLCBoZWxwZXIpOwotCQkJCXJldHVy
bjsKLQkJCX0KLQkJfSBlbHNlIGlmIChyZXNwb25zZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9SRVNQ
T05TRV9ORUVEU19WQUxJREFUSU9OKSB7Ci0JCQlTb3VwTWVzc2FnZSAqY29uZGl0aW9uYWxfbXNn
OwotCQkJQ29uZGl0aW9uYWxIZWxwZXIgKmhlbHBlcjsKLQotCQkJY29uZGl0aW9uYWxfbXNnID0g
d2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoY2FjaGUsIGh0
dHAtPnByaXYtPm1zZyk7Ci0KLQkJCWhlbHBlciA9IGdfc2xpY2VfbmV3MCAoQ29uZGl0aW9uYWxI
ZWxwZXIpOwotCQkJaGVscGVyLT5yZXEgPSBnX29iamVjdF9yZWYgKGh0dHApOwotCQkJaGVscGVy
LT5vcmlnaW5hbCA9IGdfb2JqZWN0X3JlZiAoaHR0cC0+cHJpdi0+bXNnKTsKLQkJCWhlbHBlci0+
Y2FuY2VsbGFibGUgPSBjYW5jZWxsYWJsZTsKLQkJCWhlbHBlci0+Y2FsbGJhY2sgPSBjYWxsYmFj
azsKLQkJCWhlbHBlci0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwotCQkJc291cF9zZXNzaW9uX3F1
ZXVlX21lc3NhZ2UgKHNlc3Npb24sIGNvbmRpdGlvbmFsX21zZywKLQkJCQkJCSAgICBjb25kaXRp
b25hbF9nZXRfcmVhZHlfY2IsCi0JCQkJCQkgICAgaGVscGVyKTsKLQkJCXJldHVybjsKLQkJfQot
CX0KLQotCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChodHRw
KSwKLQkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCi0JCQkJCSAgICB3ZWJraXRfc291cF9y
ZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyk7Ci0JaHR0cHN0cmVhbSA9IHdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX25ldyAod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAocmVxdWVz
dCksCi0JCQkJCQkJaHR0cC0+cHJpdi0+bXNnKTsKLQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0JCQkJCQkg
IGNhbmNlbGxhYmxlLCBzZW50X2FzeW5jLCBzaW1wbGUpOwotfQotCi1zdGF0aWMgR0lucHV0U3Ry
ZWFtICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2ZpbmlzaCAoV2ViS2l0U291cFJl
cXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkJICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAg
KnJlc3VsdCwKLQkJCQkgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCi17Ci0JR1Np
bXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7Ci0KLQlnX3JldHVybl92YWxfaWZfZmFpbCAoZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JKRUNUIChyZXF1ZXN0KSwgd2Vi
a2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpIHx8IGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVxdWVzdCksIGNvbmRpdGlvbmFsX2dldF9y
ZWFkeV9jYiksIE5VTEwpOwotCi0Jc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1
bHQpOwotCWlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yIChzaW1wbGUs
IGVycm9yKSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGdfb2JqZWN0X3JlZiAoZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSkpOwotfQotCi1zdGF0aWMg
Z29mZnNldAotd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X2xlbmd0aCAoV2Vi
S2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCi17Ci0JV2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRw
ID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKLQotCXJldHVybiBzb3VwX21l
c3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGggKGh0dHAtPnByaXYtPm1zZy0+cmVzcG9u
c2VfaGVhZGVycyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICoKLXdlYmtpdF9zb3VwX3JlcXVl
c3RfaHR0cF9nZXRfY29udGVudF90eXBlIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKLXsK
LQlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAg
KHJlcXVlc3QpOwotCi0JcmV0dXJuIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5
cGUgKGh0dHAtPnByaXYtPm1zZy0+cmVzcG9uc2VfaGVhZGVycywgTlVMTCk7Ci19Ci0KLXN0YXRp
YyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfY2xhc3NfaW5pdCAoV2ViS2l0U291cFJl
cXVlc3RIVFRQQ2xhc3MgKnJlcXVlc3RfaHR0cF9jbGFzcykKLXsKLQlHT2JqZWN0Q2xhc3MgKm9i
amVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2h0dHBfY2xhc3MpOwotCVdlYktp
dFNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQotCQlXRUJLSVRfU09VUF9SRVFVRVNU
X0NMQVNTIChyZXF1ZXN0X2h0dHBfY2xhc3MpOwotCi0JZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
IChyZXF1ZXN0X2h0dHBfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cFJlcXVlc3RIVFRQUHJpdmF0
ZSkpOwotCi0Jb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0
cF9maW5hbGl6ZTsKLQotCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHdlYmtpdF9zb3VwX3Jl
cXVlc3RfaHR0cF9jaGVja191cmk7Ci0JcmVxdWVzdF9jbGFzcy0+c2VuZCA9IHdlYmtpdF9zb3Vw
X3JlcXVlc3RfaHR0cF9zZW5kOwotCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSB3ZWJraXRf
c291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYzsKLQlyZXF1ZXN0X2NsYXNzLT5zZW5kX2Zpbmlz
aCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2ZpbmlzaDsKLQlyZXF1ZXN0X2NsYXNz
LT5nZXRfY29udGVudF9sZW5ndGggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRl
bnRfbGVuZ3RoOwotCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X3R5cGUgPSB3ZWJraXRfc291
cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfdHlwZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1o
dHRwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNmE4MjEuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1odHRwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsg
dGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0g
Ki8KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIElnYWxpYSwgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9I
Ci0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9IIDEKLQotI2luY2x1ZGUgInNvdXAt
cmVxdWVzdC5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0hUVFAgICAgICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF90eXBl
ICgpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAob2JqZWN0KSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVR
VUVTVF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhUVFApKQotI2RlZmluZSBXRUJLSVRfU09VUF9S
RVFVRVNUX0hUVFBfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGts
YXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFAsIFdlYktpdFNvdXBSZXF1ZXN0SFRU
UENsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9IVFRQKG9iamVjdCkgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1RfSFRUUCkpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfSFRUUF9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9T
T1VQX1JFUVVFU1RfSFRUUCkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfSFRUUCwgV2ViS2l0U291cFJlcXVlc3RIVFRQQ2xhc3MpKQotCi10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RIVFRQUHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVz
dEhUVFBQcml2YXRlOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291cFJlcXVlc3QgcGFy
ZW50OwotCi0JV2ViS2l0U291cFJlcXVlc3RIVFRQUHJpdmF0ZSAqcHJpdjsKLX0gV2ViS2l0U291
cFJlcXVlc3RIVFRQOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291cFJlcXVlc3RDbGFz
cyBwYXJlbnQ7Ci19IFdlYktpdFNvdXBSZXF1ZXN0SFRUUENsYXNzOwotCi1HVHlwZSB3ZWJraXRf
c291cF9yZXF1ZXN0X2h0dHBfZ2V0X3R5cGUgKHZvaWQpOwotCi1Tb3VwTWVzc2FnZSAgKndlYmtp
dF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZSAoV2ViS2l0U291cFJlcXVlc3RIVFRQICpo
dHRwKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRU
UF9IICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LmMgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2
YjlmNWEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtcmVxdWVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLS8q
IC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMt
b2Zmc2V0OiA4IC0qLSAqLwotLyoKLSAqIHNvdXAtcmVxdWVzdC5jOiBQcm90b2NvbC1pbmRlcGVu
ZGVudCBzdHJlYW1pbmcgcmVxdWVzdCBpbnRlcmZhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZk
ZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRl
IDxnbGliL2dpMThuLmg+Ci0KLSNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKLSNpbmNsdWRlICJz
b3VwLXJlcXVlc3Rlci5oIgotCi0vKioKLSAqIFNFQ1RJT046c291cC1yZXF1ZXN0Ci0gKiBAc2hv
cnRfZGVzY3JpcHRpb246IFByb3RvY29sLWluZGVwZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0IGlu
dGVyZmFjZQotICoKLSAqIEZJWE1FCi0gKiovCi0KLS8qKgotICogV2ViS2l0U291cFJlcXVlc3Q6
Ci0gKgotICogRklYTUUKLSAqCi0gKiBTaW5jZTogMi4zMAotICoqLwotCi1zdGF0aWMgdm9pZCB3
ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0IChHSW5pdGFibGVJZmFj
ZSAqaW5pdGFibGVfaW50ZXJmYWNlKTsKLQotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKFdlYktp
dFNvdXBSZXF1ZXN0LCB3ZWJraXRfc291cF9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNULAotCQkJIEdf
SU1QTEVNRU5UX0lOVEVSRkFDRSAoR19UWVBFX0lOSVRBQkxFLAotCQkJCQkJd2Via2l0X3NvdXBf
cmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCkpCi0KLWVudW0gewotCVBST1BfMCwKLQlQ
Uk9QX1VSSSwKLQlQUk9QX1NFU1NJT04KLX07Ci0KLXN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RQ
cml2YXRlIHsKLQlTb3VwVVJJICp1cmk7Ci0JU291cFNlc3Npb24gKnNlc3Npb247Ci19OwotCi1z
dGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9pbml0IChXZWJLaXRTb3VwUmVxdWVzdCAq
cmVxdWVzdCkKLXsKLQlyZXF1ZXN0LT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
IChyZXF1ZXN0LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0UHJp
dmF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbmFsaXplIChH
T2JqZWN0ICpvYmplY3QpCi17Ci0JV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QgPSBXRUJLSVRf
U09VUF9SRVFVRVNUIChvYmplY3QpOwotCi0JaWYgKHJlcXVlc3QtPnByaXYtPnVyaSkKLQkJc291
cF91cmlfZnJlZSAocmVxdWVzdC0+cHJpdi0+dXJpKTsKLQlpZiAocmVxdWVzdC0+cHJpdi0+c2Vz
c2lvbikKLQkJZ19vYmplY3RfdW5yZWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pOwotCi0JR19P
QkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUg
KG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X3NldF9wcm9w
ZXJ0eSAoR09iamVjdCAgICAgICpvYmplY3QsCi0JCQkJICBndWludCBwcm9wX2lkLAotCQkJCSAg
Y29uc3QgR1ZhbHVlICp2YWx1ZSwKLQkJCQkgIEdQYXJhbVNwZWMgICAqcHNwZWMpCi17Ci0JV2Vi
S2l0U291cFJlcXVlc3QgKnJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUIChvYmplY3QpOwot
Ci0Jc3dpdGNoIChwcm9wX2lkKSB7Ci0JY2FzZSBQUk9QX1VSSToKLQkJaWYgKHJlcXVlc3QtPnBy
aXYtPnVyaSkKLQkJCXNvdXBfdXJpX2ZyZWUgKHJlcXVlc3QtPnByaXYtPnVyaSk7Ci0JCXJlcXVl
c3QtPnByaXYtPnVyaSA9IGdfdmFsdWVfZHVwX2JveGVkICh2YWx1ZSk7Ci0JCWJyZWFrOwotCWNh
c2UgUFJPUF9TRVNTSU9OOgotCQlpZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbikKLQkJCWdfb2Jq
ZWN0X3VucmVmIChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKLQkJcmVxdWVzdC0+cHJpdi0+c2Vz
c2lvbiA9IGdfdmFsdWVfZHVwX29iamVjdCAodmFsdWUpOwotCQlicmVhazsKLQlkZWZhdWx0Ogot
CQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNw
ZWMpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0
X2dldF9wcm9wZXJ0eSAoR09iamVjdCAgICAqb2JqZWN0LAotCQkJCSAgZ3VpbnQgcHJvcF9pZCwK
LQkJCQkgIEdWYWx1ZSAgICAgKnZhbHVlLAotCQkJCSAgR1BhcmFtU3BlYyAqcHNwZWMpCi17Ci0J
V2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUIChvYmplY3Qp
OwotCi0Jc3dpdGNoIChwcm9wX2lkKSB7Ci0JY2FzZSBQUk9QX1VSSToKLQkJZ192YWx1ZV9zZXRf
Ym94ZWQgKHZhbHVlLCByZXF1ZXN0LT5wcml2LT51cmkpOwotCQlicmVhazsKLQljYXNlIFBST1Bf
U0VTU0lPTjoKLQkJZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgcmVxdWVzdC0+cHJpdi0+c2Vz
c2lvbik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3Rh
dGljIGdib29sZWFuCi13ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2luaXQgKEdJbml0YWJs
ZSAgICAgKmluaXRhYmxlLAotCQkJCSAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAotCQkJ
CSAgIEdFcnJvciAgICAgICAqKmVycm9yKQotewotCVdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0
ID0gV0VCS0lUX1NPVVBfUkVRVUVTVCAoaW5pdGFibGUpOwotCWdib29sZWFuIG9rOwotCi0JaWYg
KCFyZXF1ZXN0LT5wcml2LT51cmkpIHsKLQkJZ19zZXRfZXJyb3IgKGVycm9yLCBXRUJLSVRfU09V
UF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfQkFEX1VSSSwKLQkJCSAgICAgXyAoIk5vIFVSSSBw
cm92aWRlZCIpKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCW9rID0gV0VCS0lUX1NPVVBfUkVR
VUVTVF9HRVRfQ0xBU1MgKGluaXRhYmxlKS0+Ci0JCWNoZWNrX3VyaSAocmVxdWVzdCwgcmVxdWVz
dC0+cHJpdi0+dXJpLCBlcnJvcik7Ci0KLQlpZiAoIW9rICYmIGVycm9yKSB7Ci0JCWNoYXIgKnVy
aV9zdHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcgKHJlcXVlc3QtPnByaXYtPnVyaSwgRkFMU0Up
OwotCQlnX3NldF9lcnJvciAoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09VUF9F
UlJPUl9CQURfVVJJLAotCQkJICAgICBfICgiSW52YWxpZCAnJXMnIFVSSTogJXMiKSwKLQkJCSAg
ICAgcmVxdWVzdC0+cHJpdi0+dXJpLT5zY2hlbWUsCi0JCQkgICAgIHVyaV9zdHJpbmcpOwotCQln
X2ZyZWUgKHVyaV9zdHJpbmcpOwotCX0KLQotCXJldHVybiBvazsKLX0KLQotc3RhdGljIGdib29s
ZWFuCi13ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfY2hlY2tfdXJpIChXZWJLaXRTb3VwUmVx
dWVzdCAgKnJlcXVlc3QsCi0JCQkJICAgICAgIFNvdXBVUkkgICAgICAqdXJpLAotCQkJCSAgICAg
ICBHRXJyb3IgICAgICAqKmVycm9yKQotewotCXJldHVybiBUUlVFOwotfQotCi0vKiBEZWZhdWx0
IGltcGxlbWVudGF0aW9uOiBhc3N1bWUgdGhlIHN5bmMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBi
bG9jayAqLwotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2Fz
eW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkJR0NhbmNlbGxh
YmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQlHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxi
YWNrLAotCQkJCQlncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpz
aW1wbGU7Ci0KLQlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAo
cmVxdWVzdCksCi0JCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhLAotCQkJCQkgICAgd2Via2l0
X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmMpOwotCWdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9jb21wbGV0ZV9pbl9pZGxlIChzaW1wbGUpOwotCWdfb2JqZWN0X3VucmVmIChzaW1wbGUpOwot
fQotCi1zdGF0aWMgR0lucHV0U3RyZWFtICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9z
ZW5kX2ZpbmlzaCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkJCSBH
QXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAotCQkJCQkgR0Vycm9yICAgICAgICAgICAgICAq
KmVycm9yKQotewotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRf
aXNfdmFsaWQgKHJlc3VsdCwgR19PQkpFQ1QgKHJlcXVlc3QpLCB3ZWJraXRfc291cF9yZXF1ZXN0
X2RlZmF1bHRfc2VuZF9hc3luYyksIE5VTEwpOwotCi0JcmV0dXJuIHdlYmtpdF9zb3VwX3JlcXVl
c3Rfc2VuZCAocmVxdWVzdCwgTlVMTCwgZXJyb3IpOwotfQotCi1HSW5wdXRTdHJlYW0gKgotd2Vi
a2l0X3NvdXBfcmVxdWVzdF9zZW5kIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVz
dCwKLQkJCSAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJICBHRXJyb3Ig
ICAgICAgICAgICAgICoqZXJyb3IpCi17Ci0JcmV0dXJuIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VU
X0NMQVNTIChyZXF1ZXN0KS0+Ci0JCXNlbmQgKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBlcnJvcik7
Ci19Ci0KLXZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyAoV2ViS2l0U291cFJl
cXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkJR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNl
bGxhYmxlLAotCQkJCUdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkJZ3BvaW50ZXIg
dXNlcl9kYXRhKQotewotCVdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+
Ci0JCXNlbmRfYXN5bmMgKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlcl9kYXRh
KTsKLX0KLQotR0lucHV0U3RyZWFtICoKLXdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9maW5pc2gg
KFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJCSBHQXN5bmNSZXN1bHQg
ICAgICAgICAqcmVzdWx0LAotCQkJCSBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCi17Ci0J
cmV0dXJuIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+Ci0JCXNlbmRf
ZmluaXNoIChyZXF1ZXN0LCByZXN1bHQsIGVycm9yKTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtp
dF9zb3VwX3JlcXVlc3RfY2xhc3NfaW5pdCAoV2ViS2l0U291cFJlcXVlc3RDbGFzcyAqcmVxdWVz
dF9jbGFzcykKLXsKLQlHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNT
IChyZXF1ZXN0X2NsYXNzKTsKLQotCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdF9j
bGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUpKTsKLQotCXJlcXVlc3RfY2xh
c3MtPmNoZWNrX3VyaSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9jaGVja191cmk7Ci0J
cmVxdWVzdF9jbGFzcy0+c2VuZF9hc3luYyA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9z
ZW5kX2FzeW5jOwotCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gd2Via2l0X3NvdXBfcmVx
dWVzdF9kZWZhdWx0X3NlbmRfZmluaXNoOwotCi0Jb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdF9zb3VwX3JlcXVlc3RfZmluYWxpemU7Ci0Jb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkg
PSB3ZWJraXRfc291cF9yZXF1ZXN0X3NldF9wcm9wZXJ0eTsKLQlvYmplY3RfY2xhc3MtPmdldF9w
cm9wZXJ0eSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5OwotCi0JZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoCi0JCSBvYmplY3RfY2xhc3MsIFBST1BfVVJJLAotCQkg
Z19wYXJhbV9zcGVjX2JveGVkIChXRUJLSVRfU09VUF9SRVFVRVNUX1VSSSwKLQkJCQkgICAgICJV
UkkiLAotCQkJCSAgICAgIlRoZSByZXF1ZXN0IFVSSSIsCi0JCQkJICAgICBTT1VQX1RZUEVfVVJJ
LAotCQkJCSAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7
Ci0JZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoCi0JCSBvYmplY3RfY2xhc3MsIFBS
T1BfU0VTU0lPTiwKLQkJIGdfcGFyYW1fc3BlY19vYmplY3QgKFdFQktJVF9TT1VQX1JFUVVFU1Rf
U0VTU0lPTiwKLQkJCQkgICAgICAiU2Vzc2lvbiIsCi0JCQkJICAgICAgIlRoZSByZXF1ZXN0J3Mg
c2Vzc2lvbiIsCi0JCQkJICAgICAgU09VUF9UWVBFX1NFU1NJT04sCi0JCQkJICAgICAgR19QQVJB
TV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7Ci19Ci0KLXN0YXRpYyB2b2lk
Ci13ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0IChHSW5pdGFibGVJ
ZmFjZSAqaW5pdGFibGVfaW50ZXJmYWNlKQotewotCWluaXRhYmxlX2ludGVyZmFjZS0+aW5pdCA9
IHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFibGVfaW5pdDsKLX0KLQotU291cFVSSSAqCi13ZWJr
aXRfc291cF9yZXF1ZXN0X2dldF91cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQotewot
CXJldHVybiByZXF1ZXN0LT5wcml2LT51cmk7Ci19Ci0KLVNvdXBTZXNzaW9uICoKLXdlYmtpdF9z
b3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQotewot
CXJldHVybiByZXF1ZXN0LT5wcml2LT5zZXNzaW9uOwotfQotCi1nb2Zmc2V0Ci13ZWJraXRfc291
cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aCAoV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3Qp
Ci17Ci0JcmV0dXJuIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+Z2V0
X2NvbnRlbnRfbGVuZ3RoIChyZXF1ZXN0KTsKLX0KLQotY29uc3QgY2hhciAqCi13ZWJraXRfc291
cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUgKFdlYktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCkK
LXsKLQlyZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT5nZXRf
Y29udGVudF90eXBlIChyZXF1ZXN0KTsKLX0KLQotI2RlZmluZSBYRElHSVQoYykgKChjKSA8PSAn
OScgPyAoYykgLSAnMCcgOiAoKGMpICYgMHg0RikgLSAnQScgKyAxMCkKLSNkZWZpbmUgSEVYQ0hB
UihzKSAoKFhESUdJVCAoc1sxXSkgPDwgNCkgKyBYRElHSVQgKHNbMl0pKQotCi0vKiBDb3B5JnBh
c3RlZCBmcm9tIGxpYnNvdXAncyBzb3VwLXVyaS5jIGFmdGVyIGFwcGx5aW5nIHRoZSBwYXRjaCBp
bgotICogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMDU0MC4g
V2UgbmVlZCB0aGlzCi0gKiBpbnN0ZWFkIG9mIHNvdXBfdXJpX2RlY29kZSgpIGFzIGl0IGluY29y
cmVjdGx5IHJldHVybnMgTlVMTCBmb3IKLSAqIGluY29ycmVjdGx5IGVuY29kZWQgVVJMcy4gVE9E
TzogcmVtb3ZlIHRoaXMgd2hlbiByZXF1aXJlZCBsaWJzb3VwCi0gKiB2ZXJzaW9uIGlzIGJ1bXBl
ZCBvdXQgdG8gMi4zMi4xCi0gKi8KLWdjaGFyICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfdXJpX2Rl
Y29kZWRfY29weSAoY29uc3QgY2hhciAqcGFydCwgaW50IGxlbmd0aCkKLXsKLQl1bnNpZ25lZCBj
aGFyICpzLCAqZDsKLSAgICAgICAgY2hhciAqZGVjb2RlZCA9IGdfc3RybmR1cCAocGFydCwgbGVu
Z3RoKTsKLQotICAgICAgICBzID0gZCA9ICh1bnNpZ25lZCBjaGFyICopZGVjb2RlZDsKLSAgICAg
ICAgZG8gewotICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnJScpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghZ19hc2NpaV9pc3hkaWdpdCAoc1sxXSkgfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAhZ19hc2NpaV9pc3hkaWdpdCAoc1syXSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKmQrKyA9ICpzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICpkKysgPSBIRVhDSEFSIChzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMg
Kz0gMjsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICpk
KysgPSAqczsKLSAgICAgICAgfSB3aGlsZSAoKnMrKyk7Ci0KLSAgICAgICAgcmV0dXJuIGRlY29k
ZWQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgz
N2Q4ZjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtcmVxdWVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8q
IC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMt
b2Zmc2V0OiA4IC0qLSAqLwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX1NPVVBf
UkVRVUVTVF9ICi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSCAxCi0KLSNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQot
I2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X3NvdXBf
cmVxdWVzdF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVChvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lUX1RZUEVf
U09VUF9SRVFVRVNULCBXZWJLaXRTb3VwUmVxdWVzdCkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JF
UVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNULCBXZWJLaXRTb3VwUmVxdWVzdENsYXNzKSkKLSNkZWZp
bmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUKSkKLSNkZWZpbmUgV0VC
S0lUX0lTX1NPVVBfUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
ICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QpKQotI2RlZmluZSBXRUJLSVRfU09V
UF9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9i
aiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCwgV2ViS2l0U291cFJlcXVlc3RDbGFzcykpCi0K
LXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdCBXZWJLaXRTb3VwUmVxdWVzdDsKLXR5
cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUgV2ViS2l0U291cFJlcXVlc3RQ
cml2YXRlOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgV2ViS2l0U291
cFJlcXVlc3RDbGFzczsKLQotc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdCB7Ci0JR09iamVjdCBw
YXJlbnQ7Ci0KLQlXZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUgKnByaXY7Ci19OwotCi1zdHJ1Y3Qg
X1dlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgewotCUdPYmplY3RDbGFzcyBwYXJlbnQ7Ci0KLQlnYm9v
bGVhbiAoKmNoZWNrX3VyaSkoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcV9iYXNlLAot
CQkJICAgICAgU291cFVSSSAgICAgICAgICAgICAgKnVyaSwKLQkJCSAgICAgIEdFcnJvciAgICAg
ICAgICAgICAgKiplcnJvcik7Ci0KLQlHSW5wdXRTdHJlYW0gKiAoKnNlbmQpKFdlYktpdFNvdXBS
ZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAg
ICpjYW5jZWxsYWJsZSwKLQkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwot
CXZvaWQgKCpzZW5kX2FzeW5jKShXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwK
LQkJCSAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCSAgIEdBc3luY1Jl
YWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkgICBncG9pbnRlciB1c2VyX2RhdGEpOwotCUdJbnB1
dFN0cmVhbSAqICgqc2VuZF9maW5pc2gpKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1
ZXN0LAotCQkJCSAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCi0JCQkJICAgICAg
R0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKLQotCWdvZmZzZXQgKCpnZXRfY29udGVudF9s
ZW5ndGgpKFdlYktpdFNvdXBSZXF1ZXN0ICAgKnJlcXVlc3QpOwotCWNvbnN0IGNoYXIgKiAgICgq
Z2V0X2NvbnRlbnRfdHlwZSkoV2ViS2l0U291cFJlcXVlc3QgICAqcmVxdWVzdCk7Ci19OwotCi1H
VHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF90eXBlICh2b2lkKTsKLQotI2RlZmluZSBXRUJL
SVRfU09VUF9SRVFVRVNUX1VSSSAgICAgInVyaSIKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVT
VF9TRVNTSU9OICJzZXNzaW9uIgotCi1HSW5wdXRTdHJlYW0gKndlYmtpdF9zb3VwX3JlcXVlc3Rf
c2VuZCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkJCUdDYW5jZWxs
YWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJR0Vycm9yICAgICAgICAgICAgICAqKmVy
cm9yKTsKLXZvaWQgICAgICAgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2FzeW5jIChXZWJL
aXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkJICAgICAgR0NhbmNlbGxhYmxl
ICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNh
bGxiYWNrLAotCQkJCQkgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotR0lucHV0U3RyZWFtICp3
ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAg
ICAqcmVxdWVzdCwKLQkJCQkJICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCi0J
CQkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwotCi1Tb3VwVVJJICAgICAg
KndlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3VyaSAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QpOwotU291cFNlc3Npb24gICp3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9zZXNzaW9u
IChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7Ci0KLWdvZmZzZXQgICAgICAg
d2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGggKFdlYktpdFNvdXBSZXF1ZXN0
ICAgICAgICAgICpyZXF1ZXN0KTsKLWNvbnN0IGNoYXIgICAqd2Via2l0X3NvdXBfcmVxdWVzdF9n
ZXRfY29udGVudF90eXBlIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7Ci0K
LS8qIFVzZWQgYnkgV2ViS2l0U291cFJlcXVlc3RGaWxlIGFuZCBXZWJLaXRTb3VwUmVxdWVzdERh
dGEuIElkZWFsbHkKLSAqIHNob3VsZCBiZSBsb2NhdGVkIGluIHNvbWUgdXRpbCBmaWxlIGJ1dCBJ
J2xsIHBsYWNlIGl0IGhlcmUgYXMgaXQKLSAqIHdpbGwgYmUgcmVtb3ZlZCB3aXRoIGxpYnNvdXAg
Mi4zMi4xIHRoYXQgd2lsbCBzaGlwIGZpeGVkIHZlcnNpb25zCi0gKiBvZiBzb3VwX3VyaV9kZWNv
ZGUvbm9ybWFsaXplCi0gKi8KLWdjaGFyICp3ZWJraXRfc291cF9yZXF1ZXN0X3VyaV9kZWNvZGVk
X2NvcHkgKGNvbnN0IGNoYXIgKnBhcnQsIGludCBsZW5ndGgpOwotCi1HX0VORF9ERUNMUwotCi0j
ZW5kaWYgLyogV0VCS0lUX1NPVVBfUkVRVUVTVF9IICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDhhODYwLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCisr
KyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6
IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotLyoKLSAq
IHNvdXAtcmVxdWVzdGVyLmM6Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5M
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAic291cC1yZXF1ZXN0ZXIuaCIKLQotI2lu
Y2x1ZGUgInNvdXAtcmVxdWVzdC1kYXRhLmgiCi0jaW5jbHVkZSAic291cC1yZXF1ZXN0LWZpbGUu
aCIKLSNpbmNsdWRlICJzb3VwLXJlcXVlc3QtaHR0cC5oIgotI2luY2x1ZGUgPGdsaWIvZ2kxOG4u
aD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLQotc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVz
dGVyUHJpdmF0ZSB7Ci0JR0hhc2hUYWJsZSAqcmVxdWVzdF90eXBlczsKLX07Ci0KLSNkZWZpbmUg
V0VCS0lUX1NPVVBfUkVRVUVTVEVSX0dFVF9QUklWQVRFKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUgKChvKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIFdlYktpdFNvdXBSZXF1
ZXN0ZXJQcml2YXRlKSkKLQotR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cFJlcXVlc3Rlciwgd2Vi
a2l0X3NvdXBfcmVxdWVzdGVyLCBHX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRf
c291cF9yZXF1ZXN0ZXJfaW5pdCAoV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyKQotewot
CXJlcXVlc3Rlci0+cHJpdiA9IFdFQktJVF9TT1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFURSAocmVx
dWVzdGVyKTsKLQotCXJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcyA9IDA7Ci19Ci0KLXN0
YXRpYyB2b2lkIGZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCi17Ci0JV2ViS2l0U291cFJlcXVl
c3RlciAqcmVxdWVzdGVyID0gV0VCS0lUX1NPVVBfUkVRVUVTVEVSIChvYmplY3QpOwotCi0JaWYg
KHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcykKLQkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3kg
KHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcyk7Ci0KLQlHX09CSkVDVF9DTEFTUyAod2Vi
a2l0X3NvdXBfcmVxdWVzdGVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfY2xhc3NfaW5pdCAoV2ViS2l0U291
cFJlcXVlc3RlckNsYXNzICpyZXF1ZXN0ZXJfY2xhc3MpCi17Ci0JR09iamVjdENsYXNzICpvYmpl
Y3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdGVyX2NsYXNzKTsKLQotCWdfdHlwZV9j
bGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdGVyX2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBSZXF1
ZXN0ZXJQcml2YXRlKSk7Ci0KLQkvKiB2aXJ0dWFsIG1ldGhvZCBvdmVycmlkZSAqLwotCW9iamVj
dF9jbGFzcy0+ZmluYWxpemUgPSBmaW5hbGl6ZTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF9yZXF1
ZXN0X3R5cGVzIChXZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSAqcHJpdikKLXsKLQlpZiAocHJp
di0+cmVxdWVzdF90eXBlcykKLQkJcmV0dXJuOwotCi0JcHJpdi0+cmVxdWVzdF90eXBlcyA9IGdf
aGFzaF90YWJsZV9uZXdfZnVsbCAoc291cF9zdHJfY2FzZV9oYXNoLAotCQkJCQkJICAgICBzb3Vw
X3N0cl9jYXNlX2VxdWFsLAotCQkJCQkJICAgICBnX2ZyZWUsIDApOwotCWdfaGFzaF90YWJsZV9p
bnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiZmlsZSIpLAotCQkJICAgICBH
U0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSkpOwotCWdfaGFz
aF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiZGF0YSIpLAot
CQkJICAgICBHU0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSkp
OwotCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgi
aHR0cCIpLAotCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9TT1VQX1JFUVVF
U1RfSFRUUCkpOwotCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdf
c3RyZHVwICgiaHR0cHMiKSwKLQkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAoV0VCS0lUX1RZUEVf
U09VUF9SRVFVRVNUX0hUVFApKTsKLQlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5yZXF1ZXN0
X3R5cGVzLCBnX3N0cmR1cCAoImZ0cCIpLAotCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChXRUJL
SVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSkpOwotfQotCi1XZWJLaXRTb3VwUmVxdWVzdGVyICp3
ZWJraXRfc291cF9yZXF1ZXN0ZXJfbmV3ICh2b2lkKQotewotCXJldHVybiAoV2ViS2l0U291cFJl
cXVlc3RlciAqKWdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIE5VTEwp
OwotfQotCi1XZWJLaXRTb3VwUmVxdWVzdCAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3Qg
KFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwgY29uc3QgY2hhciAqdXJpU3RyaW5nLCBT
b3VwU2Vzc2lvbiAqc2Vzc2lvbiwgR0Vycm9yICoqZXJyb3IpCi17Ci0JU291cFVSSSAqdXJpID0g
TlVMTDsKLQlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxOwotCi0JdXJpID0gc291cF91cmlfbmV3ICh1
cmlTdHJpbmcpOwotCWlmICghdXJpKSB7Ci0JCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lUX1NP
VVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkksCi0JCQkgICAgIF8gKCJDb3VsZCBu
b3QgcGFyc2UgVVJJICclcyciKSwgdXJpU3RyaW5nKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmVx
ID0gd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3RfdXJpIChyZXF1ZXN0ZXIsIHVyaSwgc2Vz
c2lvbiwgZXJyb3IpOwotCXNvdXBfdXJpX2ZyZWUgKHVyaSk7Ci0JcmV0dXJuIHJlcTsKLX0KLQot
V2ViS2l0U291cFJlcXVlc3QgKndlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSAoV2Vi
S2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyLCBTb3VwVVJJICp1cmksIFNvdXBTZXNzaW9uICpz
ZXNzaW9uLCBHRXJyb3IgKiplcnJvcikKLXsKLQlHVHlwZSByZXF1ZXN0VHlwZTsKLQotCWdfcmV0
dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9SRVFVRVNURVIgKHJlcXVlc3RlciksIDAp
OwotCi0JaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0ZXItPnByaXYpOwotCXJlcXVlc3RUeXBl
ID0gKEdUeXBlKUdQT0lOVEVSX1RPX1NJWkUgKGdfaGFzaF90YWJsZV9sb29rdXAgKHJlcXVlc3Rl
ci0+cHJpdi0+cmVxdWVzdF90eXBlcywgdXJpLT5zY2hlbWUpKTsKLQlpZiAoIXJlcXVlc3RUeXBl
KSB7Ci0JCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9TT1VQ
X0VSUk9SX1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUsCi0JCQkgICAgIF8gKCJVbnN1cHBvcnRlZCBV
Ukkgc2NoZW1lICclcyciKSwgdXJpLT5zY2hlbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAo
Z190eXBlX2lzX2EgKHJlcXVlc3RUeXBlLCBHX1RZUEVfSU5JVEFCTEUpKSB7Ci0JCXJldHVybiAo
V2ViS2l0U291cFJlcXVlc3QgKilnX2luaXRhYmxlX25ldyAocmVxdWVzdFR5cGUsIDAsIGVycm9y
LAotCQkJCQkJCSAgICAidXJpIiwgdXJpLAotCQkJCQkJCSAgICAic2Vzc2lvbiIsIHNlc3Npb24s
Ci0JCQkJCQkJICAgIE5VTEwpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoV2ViS2l0U291cFJlcXVl
c3QgKilnX29iamVjdF9uZXcgKHJlcXVlc3RUeXBlLAotCQkJCQkJCSAgInVyaSIsIHVyaSwKLQkJ
CQkJCQkgICJzZXNzaW9uIiwgc2Vzc2lvbiwKLQkJCQkJCQkgIE5VTEwpOwotCX0KLX0KLQotLyog
UkZDIDIzOTYsIDMuMSAqLwotc3RhdGljIGdib29sZWFuCi1zb3VwX3NjaGVtZV9pc192YWxpZCAo
Y29uc3QgY2hhciAqc2NoZW1lKQotewotCWlmIChzY2hlbWUgPT0gTlVMTCB8fAotCSAgICAhZ19h
c2NpaV9pc2FscGhhICgqc2NoZW1lKSkKLQkJcmV0dXJuIEZBTFNFOwotCi0Jc2NoZW1lKys7Ci0J
d2hpbGUgKCpzY2hlbWUpIHsKLQkJaWYgKCFnX2FzY2lpX2lzYWxwaGEgKCpzY2hlbWUpICYmCi0J
CSAgICAhZ19hc2NpaV9pc2RpZ2l0ICgqc2NoZW1lKSAmJgotCQkgICAgKnNjaGVtZSAhPSAnKycg
JiYKLQkJICAgICpzY2hlbWUgIT0gJy0nICYmCi0JCSAgICAqc2NoZW1lICE9ICcuJykKLQkJCXJl
dHVybiBGQUxTRTsKLQkJc2NoZW1lKys7Ci0JfQotCXJldHVybiBUUlVFOwotfQotCi12b2lkCi13
ZWJraXRfc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sIChXZWJLaXRTb3VwUmVxdWVzdGVyICpy
ZXF1ZXN0ZXIsCi0JCQkJICAgIGNvbnN0IGNoYXIgICpzY2hlbWUsCi0JCQkJICAgIEdUeXBlIHJl
cXVlc3RfdHlwZSkKLXsKLQlnX3JldHVybl9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9SRVFVRVNU
RVIgKHJlcXVlc3RlcikpOwotCWdfcmV0dXJuX2lmX2ZhaWwgKHNvdXBfc2NoZW1lX2lzX3ZhbGlk
IChzY2hlbWUpKTsKLQotCWluaXRfcmVxdWVzdF90eXBlcyAocmVxdWVzdGVyLT5wcml2KTsKLQln
X2hhc2hfdGFibGVfaW5zZXJ0IChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3Ry
ZHVwIChzY2hlbWUpLAotCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChyZXF1ZXN0X3R5cGUpKTsK
LX0KLQotdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlbW92ZV9wcm90b2NvbCAoV2ViS2l0
U291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAotCQkJCSAgICAgICBjb25zdCBjaGFyICAqc2NoZW1l
KQotewotCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX1JFUVVFU1RFUiAocmVxdWVz
dGVyKSk7Ci0JZ19yZXR1cm5faWZfZmFpbCAoc291cF9zY2hlbWVfaXNfdmFsaWQgKHNjaGVtZSkp
OwotCi0JaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0ZXItPnByaXYpOwotCWdfaGFzaF90YWJs
ZV9yZW1vdmUgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcywgc2NoZW1lKTsKLX0KLQot
R1F1YXJrCi13ZWJraXRfc291cF9lcnJvcl9xdWFyayAodm9pZCkKLXsKLQlzdGF0aWMgR1F1YXJr
IGVycm9yOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJp
bmcgKCJ3ZWJraXRfc291cF9lcnJvcl9xdWFyayIpOwotCXJldHVybiBlcnJvcjsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZmYxMDMuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKiAtKi0gTW9k
ZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDog
OCAtKi0gKi8KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBX
RUJLSVRfU09VUF9SRVFVRVNURVJfSAotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNURVJfSCAx
Ci0KLSNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
LQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSICAg
ICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgV0VC
S0lUX1NPVVBfUkVRVUVTVEVSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiwgV2ViS2l0U291cFJlcXVl
c3RlcikpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RFUl9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RF
UiwgV2ViS2l0U291cFJlcXVlc3RlckNsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVR
VUVTVEVSKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBX
RUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUikpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVF
U1RFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgob2JqKSwgV0VCS0lU
X1RZUEVfU09VUF9SRVFVRVNURVIpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNURVJfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNURVIsIFdlYktpdFNvdXBSZXF1ZXN0ZXJDbGFzcykpCi0KLSNkZWZpbmUg
V0VCS0lUX1NPVVBfRVJST1Igd2Via2l0X3NvdXBfZXJyb3JfcXVhcmsgKCkKLQotdHlwZWRlZiBl
bnVtIHsKLQlXRUJLSVRfU09VUF9FUlJPUl9CQURfVVJJLAotCVdFQktJVF9TT1VQX0VSUk9SX1VO
U1VQUE9SVEVEX1VSSV9TQ0hFTUUKLX0gV2ViS2l0U291cEVycm9yOwotCi10eXBlZGVmIHN0cnVj
dCBfV2ViS2l0U291cFJlcXVlc3RlciBXZWJLaXRTb3VwUmVxdWVzdGVyOwotdHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlIFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRl
OwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0ZXIgewotCUdPYmplY3QgcGFyZW50OwotCi0J
V2ViS2l0U291cFJlcXVlc3RlclByaXZhdGUgKnByaXY7Ci19OwotCi10eXBlZGVmIHN0cnVjdCB7
Ci0JR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX0gV2ViS2l0U291cFJlcXVlc3RlckNsYXNz
OwotCi1HVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfZ2V0X3R5cGUgKHZvaWQpOwotCi1XZWJL
aXRTb3VwUmVxdWVzdGVyICp3ZWJraXRfc291cF9yZXF1ZXN0ZXJfbmV3ICh2b2lkKTsKLQotR1F1
YXJrIHdlYmtpdF9zb3VwX2Vycm9yX3F1YXJrICh2b2lkKTsKLQotV2ViS2l0U291cFJlcXVlc3Qg
KndlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0IChXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1
ZXN0ZXIsCi0JCQkJCQkgIGNvbnN0IGNoYXIgKnVyaVN0cmluZywKLQkJCQkJCSAgU291cFNlc3Np
b24gKnNlc3Npb24sCi0JCQkJCQkgIEdFcnJvciAqKmVycm9yKTsKLQotV2ViS2l0U291cFJlcXVl
c3QgKndlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSAoV2ViS2l0U291cFJlcXVlc3Rl
ciAqcmVxdWVzdGVyLAotCQkJCQkJICAgICAgU291cFVSSSAqdXJpLAotCQkJCQkJICAgICAgU291
cFNlc3Npb24gKnNlc3Npb24sCi0JCQkJCQkgICAgICBHRXJyb3IgKiplcnJvcik7Ci0KLXZvaWQg
d2Via2l0X3NvdXBfcmVxdWVzdGVyX2FkZF9wcm90b2NvbCAoV2ViS2l0U291cFJlcXVlc3RlciAq
cmVxdWVzdGVyLAotCQkJCQkgY29uc3QgY2hhciAgKnNjaGVtZSwKLQkJCQkJIEdUeXBlIHJlcXVl
c3RfdHlwZSk7Ci0KLXZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlbW92ZV9wcm90b2NvbCAo
V2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAotCQkJCQkgICAgY29uc3QgY2hhciAgKnNj
aGVtZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfU09VUF9SRVFVRVNURVJf
SCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZjhkZTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDOyB0YWItd2lk
dGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotLyoK
LSAqIHNvdXAtY2FjaGUtcHJpdmF0ZS5oOgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEsIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2lmbmRlZiBXRUJLSVRfU09VUF9DQUNIRV9QUklWQVRFX0gKLSNkZWZpbmUgV0VC
S0lUX1NPVVBfQ0FDSEVfUFJJVkFURV9IIDEKLQotI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKLSNp
bmNsdWRlIDxsaWJzb3VwL3NvdXAtbWVzc2FnZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLVdlYktp
dFNvdXBDYWNoZVJlc3BvbnNlIHdlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZSAoV2ViS2l0
U291cENhY2hlICAgKmNhY2hlLAotCQkJCQkJCVNvdXBNZXNzYWdlICptc2cpOwotR0lucHV0U3Ry
ZWFtICp3ZWJraXRfc291cF9jYWNoZV9zZW5kX3Jlc3BvbnNlIChXZWJLaXRTb3VwQ2FjaGUgICAq
Y2FjaGUsCi0JCQkJCSAgICAgICBTb3VwTWVzc2FnZSAqbXNnKTsKLVdlYktpdFNvdXBDYWNoZWFi
aWxpdHkgIHdlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNo
ZSAgICpjYWNoZSwKLQkJCQkJCQkgICAgU291cE1lc3NhZ2UgKm1zZyk7Ci1Tb3VwTWVzc2FnZSAq
d2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoV2ViS2l0U291
cENhY2hlICAgKmNhY2hlLAotCQkJCQkJCSAgICAgU291cE1lc3NhZ2UgKm9yaWdpbmFsKTsKLQot
R19FTkRfREVDTFMKLQotI2VuZGlmIC8qIFdFQktJVF9TT1VQX0NBQ0hFX1BSSVZBVEVfSCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dl
YmtpdC9zb3VwLWNhY2hlLmMgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Yjk2NDI4ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NzcgKzAs
MCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsg
Yy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogc291cC1jYWNoZS5jCi0gKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIFRPRE86Ci0gKiAtIE5lZWQgdG8g
aG9vayB0aGUgZmVhdHVyZSBpbiB0aGUgc3luYyBTb3VwU2Vzc2lvbi4KLSAqIC0gTmVlZCBtb3Jl
IHRlc3RzLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+
Ci0jZW5kaWYKLQotI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKLSNpbmNsdWRlICJzb3VwLWNhY2hl
LXByaXZhdGUuaCIKLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxnaW8vZ2lv
Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLXN0YXRpYyBTb3VwU2Vzc2lvbkZlYXR1cmVJbnRl
cmZhY2UgKndlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2U7Ci1zdGF0
aWMgdm9pZCB3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAoU291cFNlc3Np
b25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwgZ3BvaW50ZXIgaW50ZXJmYWNl
X2RhdGEpOwotCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NJWkUgNTAgKiAxMDI0ICogMTAyNAotI2Rl
ZmluZSBNQVhfRU5UUllfREFUQV9QRVJDRU5UQUdFIDEwIC8qIFBlcmNlbnRhZ2Ugb2YgdGhlIHRv
dGFsIHNpemUKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBjYWNoZSB0
aGF0IGNhbiBiZQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbGVkIGJ5IGEg
c2luZ2xlIGVudHJ5ICovCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGVFbnRyeSB7
Ci0JY2hhciAqa2V5OwotCWNoYXIgKmZpbGVuYW1lOwotCWd1aW50IGZyZXNobmVzc19saWZldGlt
ZTsKLQlnYm9vbGVhbiBtdXN0X3JldmFsaWRhdGU7Ci0JR1N0cmluZyAqZGF0YTsKLQlnc2l6ZSBw
b3M7Ci0JZ3NpemUgbGVuZ3RoOwotCXRpbWVfdCBjb3JyZWN0ZWRfaW5pdGlhbF9hZ2U7Ci0JdGlt
ZV90IHJlc3BvbnNlX3RpbWU7Ci0JZ2Jvb2xlYW4gd3JpdGluZzsKLQlnYm9vbGVhbiBkaXJ0eTsK
LQlnYm9vbGVhbiBnb3RfYm9keTsKLQlnYm9vbGVhbiBiZWluZ192YWxpZGF0ZWQ7Ci0JU291cE1l
c3NhZ2VIZWFkZXJzICpoZWFkZXJzOwotCUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsKLQlHRXJyb3Ig
KmVycm9yOwotCWd1aW50IGhpdHM7Ci0JR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKLX0gV2Vi
S2l0U291cENhY2hlRW50cnk7Ci0KLXN0cnVjdCBfV2ViS2l0U291cENhY2hlUHJpdmF0ZSB7Ci0J
Y2hhciAqY2FjaGVfZGlyOwotCUdIYXNoVGFibGUgKmNhY2hlOwotCWd1aW50IG5fcGVuZGluZzsK
LQlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKLQlXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5cGU7
Ci0JZ3VpbnQgc2l6ZTsKLQlndWludCBtYXhfc2l6ZTsKLQlndWludCBtYXhfZW50cnlfZGF0YV9z
aXplOyAvKiBDb21wdXRlZCB2YWx1ZS4gSGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAqLwot
CUdMaXN0ICpscnVfc3RhcnQ7Ci19OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291cENh
Y2hlICpjYWNoZTsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7Ci0JU291cE1lc3NhZ2Ug
Km1zZzsKLQlndWxvbmcgZ290X2NodW5rX2hhbmRsZXI7Ci0JZ3Vsb25nIGdvdF9ib2R5X2hhbmRs
ZXI7Ci0JZ3Vsb25nIHJlc3RhcnRlZF9oYW5kbGVyOwotfSBXZWJLaXRTb3VwQ2FjaGVXcml0aW5n
Rml4dHVyZTsKLQotZW51bSB7Ci0JUFJPUF8wLAotCVBST1BfQ0FDSEVfRElSLAotCVBST1BfQ0FD
SEVfVFlQRQotfTsKLQotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURShvKSAo
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUs
IFdlYktpdFNvdXBDYWNoZVByaXZhdGUpKQotCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoV2Vi
S2l0U291cENhY2hlLCB3ZWJraXRfc291cF9jYWNoZSwgR19UWVBFX09CSkVDVCwKLQkJCSBHX0lN
UExFTUVOVF9JTlRFUkZBQ0UgKFNPVVBfVFlQRV9TRVNTSU9OX0ZFQVRVUkUsCi0JCQkJCQl3ZWJr
aXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCkpCi0KLXN0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSk7Ci1zdGF0aWMgdm9pZCBtYWtlX3Jvb21fZm9yX25l
d19lbnRyeSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCk7Ci1z
dGF0aWMgZ2Jvb2xlYW4gY2FjaGVfYWNjZXB0c19lbnRyaWVzX29mX3NpemUgKFdlYktpdFNvdXBD
YWNoZSAqY2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpOwotCi1zdGF0aWMgV2ViS2l0U291cENh
Y2hlYWJpbGl0eQotZ2V0X2NhY2hlYWJpbGl0eSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291
cE1lc3NhZ2UgKm1zZykKLXsKLQlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IGNhY2hlYWJpbGl0eTsK
LQljb25zdCBjaGFyICpjYWNoZV9jb250cm9sOwotCi0JLyogMS4gVGhlIHJlcXVlc3QgbWV0aG9k
IG11c3QgYmUgY2FjaGVhYmxlICovCi0JaWYgKG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0dF
VCkKLQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfQ0FDSEVBQkxFOwotCWVsc2Ug
aWYgKG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0hFQUQgfHwKLQkJIG1zZy0+bWV0aG9kID09
IFNPVVBfTUVUSE9EX1RSQUNFIHx8Ci0JCSBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9DT05O
RUNUKQotCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7Ci0JZWxzZQotCQly
ZXR1cm4gKFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVf
SU5WQUxJREFURVMpOwotCi0JY2FjaGVfY29udHJvbCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOwotCWlmIChjYWNoZV9j
b250cm9sKSB7Ci0JCUdIYXNoVGFibGUgKmhhc2g7Ci0JCVdlYktpdFNvdXBDYWNoZVByaXZhdGUg
KnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2FjaGUpOwotCi0JCWhhc2gg
PSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250cm9sKTsKLQotCQkvKiBT
aGFyZWQgY2FjaGVzIE1VU1QgTk9UIHN0b3JlIHByaXZhdGUgcmVzb3VyY2VzICovCi0JCWlmIChw
cml2LT5jYWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRCkgewotCQkJaWYgKGdf
aGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJwcml2YXRlIiwgTlVMTCwgTlVMTCkp
IHsKLQkJCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOwotCQkJCXJldHVybiBX
RUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKLQkJCX0KLQkJfQotCi0JCS8qIDIuIFRoZSAn
bm8tc3RvcmUnIGNhY2hlIGRpcmVjdGl2ZSBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlCi0JCSAqIGhl
YWRlcnMKLQkJICovCi0JCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAi
bm8tc3RvcmUiLCBOVUxMLCBOVUxMKSkgewotCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0
IChoYXNoKTsKLQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKLQkJfQot
Ci0JCS8qIFRoaXMgZG9lcyBub3QgYXBwZWFyIGluIHNlY3Rpb24gMi4xLCBidXQgSSB0aGluayBp
dCBtYWtlcwotCQkgKiBzZW5zZSB0byBjaGVjayBpdCB0b28/Ci0JCSAqLwotCQlpZiAoZ19oYXNo
X3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLWNhY2hlIiwgTlVMTCwgTlVMTCkpIHsK
LQkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7Ci0JCQlyZXR1cm4gV0VCS0lU
X1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7Ci0JCX0KLQotCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFt
X2xpc3QgKGhhc2gpOwotCX0KLQotCXN3aXRjaCAobXNnLT5zdGF0dXNfY29kZSkgewotCWNhc2Ug
U09VUF9TVEFUVVNfUEFSVElBTF9DT05URU5UOgotCQkvKiBXZSBkb24ndCBjYWNoZSBwYXJ0aWFs
IHJlc3BvbnNlcywgYnV0IHRoZXkgb25seQotCQkgKiBpbnZhbGlkYXRlIGNhY2hlZCBmdWxsIHJl
c3BvbnNlcyBpZiB0aGUgaGVhZGVycwotCQkgKiBkb24ndCBtYXRjaC4KLQkJICovCi0JCWNhY2hl
YWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOwotCQlicmVhazsKLQotCWNh
c2UgU09VUF9TVEFUVVNfTk9UX01PRElGSUVEOgotCQkvKiBBIDMwNCByZXNwb25zZSB2YWxpZGF0
ZXMgYW4gZXhpc3RpbmcgY2FjaGUgZW50cnkgKi8KLQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NP
VVBfQ0FDSEVfVkFMSURBVEVTOwotCQlicmVhazsKLQotCWNhc2UgU09VUF9TVEFUVVNfTVVMVElQ
TEVfQ0hPSUNFUzoKLQljYXNlIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZOgotCWNhc2Ug
U09VUF9TVEFUVVNfR09ORToKLQkJLyogRklYTUU6IGNhY2hlYWJsZSB1bmxlc3MgaW5kaWNhdGVk
IG90aGVyd2lzZSAqLwotCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hF
QUJMRTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNPVVBfU1RBVFVTX0ZPVU5EOgotCWNhc2UgU09VUF9T
VEFUVVNfVEVNUE9SQVJZX1JFRElSRUNUOgotCQkvKiBGSVhNRTogY2FjaGVhYmxlIGlmIGV4cGxp
Y2l0bHkgaW5kaWNhdGVkICovCi0JCWNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX1VO
Q0FDSEVBQkxFOwotCQlicmVhazsKLQotCWNhc2UgU09VUF9TVEFUVVNfU0VFX09USEVSOgotCWNh
c2UgU09VUF9TVEFUVVNfRk9SQklEREVOOgotCWNhc2UgU09VUF9TVEFUVVNfTk9UX0ZPVU5EOgot
CWNhc2UgU09VUF9TVEFUVVNfTUVUSE9EX05PVF9BTExPV0VEOgotCQlyZXR1cm4gKFdFQktJVF9T
T1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpOwot
Ci0JZGVmYXVsdDoKLQkJLyogQW55IDV4eCBzdGF0dXMgb3IgYW55IDR4eCBzdGF0dXMgbm90IGhh
bmRsZWQgYWJvdmUKLQkJICogaXMgdW5jYWNoZWFibGUgYnV0IGRvZXNuJ3QgYnJlYWsgdGhlIGNh
Y2hlLgotCQkgKi8KLQkJaWYgKChtc2ctPnN0YXR1c19jb2RlID49IFNPVVBfU1RBVFVTX0JBRF9S
RVFVRVNUICYmCi0JCSAgICAgbXNnLT5zdGF0dXNfY29kZSA8PSBTT1VQX1NUQVRVU19GQUlMRURf
REVQRU5ERU5DWSkgfHwKLQkJICAgIG1zZy0+c3RhdHVzX2NvZGUgPj0gU09VUF9TVEFUVVNfSU5U
RVJOQUxfU0VSVkVSX0VSUk9SKQotCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVB
QkxFOwotCi0JCS8qIEFuIHVucmVjb2duaXplZCAyeHgsIDN4eCwgb3IgNHh4IHJlc3BvbnNlIGJy
ZWFrcwotCQkgKiB0aGUgY2FjaGUuCi0JCSAqLwotCQlpZiAoKG1zZy0+c3RhdHVzX2NvZGUgPiBT
T1VQX1NUQVRVU19QQVJUSUFMX0NPTlRFTlQgJiYKLQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDwg
U09VUF9TVEFUVVNfTVVMVElQTEVfQ0hPSUNFUykgfHwKLQkJICAgIChtc2ctPnN0YXR1c19jb2Rl
ID4gU09VUF9TVEFUVVNfVEVNUE9SQVJZX1JFRElSRUNUICYmCi0JCSAgICAgbXNnLT5zdGF0dXNf
Y29kZSA8IFNPVVBfU1RBVFVTX0lOVEVSTkFMX1NFUlZFUl9FUlJPUikpCi0JCQlyZXR1cm4gKFdF
QktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFU
RVMpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gY2FjaGVhYmlsaXR5OwotfQotCi1zdGF0aWMg
dm9pZAotd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoV2ViS2l0U291cENhY2hlRW50cnkg
KmVudHJ5LCBnYm9vbGVhbiBwdXJnZSkKLXsKLQlpZiAocHVyZ2UpIHsKLQkJR0ZpbGUgKmZpbGUg
PSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChlbnRyeS0+ZmlsZW5hbWUpOwotCQlnX2ZpbGVfZGVsZXRl
IChmaWxlLCBOVUxMLCBOVUxMKTsKLQkJZ19vYmplY3RfdW5yZWYgKGZpbGUpOwotCX0KLQotCWdf
ZnJlZSAoZW50cnktPmZpbGVuYW1lKTsKLQllbnRyeS0+ZmlsZW5hbWUgPSBOVUxMOwotCWdfZnJl
ZSAoZW50cnktPmtleSk7Ci0JZW50cnktPmtleSA9IE5VTEw7Ci0KLQlpZiAoZW50cnktPmhlYWRl
cnMpIHsKLQkJc291cF9tZXNzYWdlX2hlYWRlcnNfZnJlZSAoZW50cnktPmhlYWRlcnMpOwotCQll
bnRyeS0+aGVhZGVycyA9IE5VTEw7Ci0JfQotCi0JaWYgKGVudHJ5LT5kYXRhKSB7Ci0JCWdfc3Ry
aW5nX2ZyZWUgKGVudHJ5LT5kYXRhLCBUUlVFKTsKLQkJZW50cnktPmRhdGEgPSBOVUxMOwotCX0K
LQlpZiAoZW50cnktPmVycm9yKSB7Ci0JCWdfZXJyb3JfZnJlZSAoZW50cnktPmVycm9yKTsKLQkJ
ZW50cnktPmVycm9yID0gTlVMTDsKLQl9Ci0JaWYgKGVudHJ5LT5jYW5jZWxsYWJsZSkgewotCQln
X29iamVjdF91bnJlZiAoZW50cnktPmNhbmNlbGxhYmxlKTsKLQkJZW50cnktPmNhbmNlbGxhYmxl
ID0gTlVMTDsKLQl9Ci0KLQlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5LCBlbnRy
eSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5X2hlYWRlcnMgKGNvbnN0IGNoYXIgKm5hbWUsIGNv
bnN0IGNoYXIgKnZhbHVlLCBTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnMpCi17Ci0Jc291cF9t
ZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkCi11cGRhdGVfaGVhZGVycyAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFs
dWUsIFNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVycykKLXsKLQlpZiAoc291cF9tZXNzYWdlX2hl
YWRlcnNfZ2V0IChoZWFkZXJzLCBuYW1lKSkKLQkJc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFj
ZSAoaGVhZGVycywgbmFtZSwgdmFsdWUpOwotCWVsc2UKLQkJc291cF9tZXNzYWdlX2hlYWRlcnNf
YXBwZW5kIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBndWludAotd2Via2l0
X3NvdXBfY2FjaGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAq
ZW50cnkpCi17Ci0JdGltZV90IG5vdyA9IHRpbWUgKE5VTEwpOwotCXRpbWVfdCByZXNpZGVudF90
aW1lOwotCi0JcmVzaWRlbnRfdGltZSA9IG5vdyAtIGVudHJ5LT5yZXNwb25zZV90aW1lOwotCXJl
dHVybiBlbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdlICsgcmVzaWRlbnRfdGltZTsKLX0KLQot
c3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91Z2gg
KFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgZ2ludCBtaW5fZnJlc2gpCi17Ci0JZ3VpbnQg
bGltaXQgPSAobWluX2ZyZXNoID09IC0xKSA/IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9j
dXJyZW50X2FnZSAoZW50cnkpIDogKGd1aW50KSBtaW5fZnJlc2g7Ci0JcmV0dXJuIGVudHJ5LT5m
cmVzaG5lc3NfbGlmZXRpbWUgPiBsaW1pdDsKLX0KLQotc3RhdGljIGNoYXIgKgotc291cF9tZXNz
YWdlX2dldF9jYWNoZV9rZXkgKFNvdXBNZXNzYWdlICptc2cpCi17Ci0JU291cFVSSSAqdXJpID0g
c291cF9tZXNzYWdlX2dldF91cmkgKG1zZyk7Ci0JcmV0dXJuIHNvdXBfdXJpX3RvX3N0cmluZyAo
dXJpLCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9jYWNoZV9lbnRyeV9z
ZXRfZnJlc2huZXNzIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksIFNvdXBNZXNzYWdlICpt
c2csIFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCi17Ci0JY29uc3QgY2hhciAqY2FjaGVfY29udHJv
bDsKLQljb25zdCBjaGFyICpleHBpcmVzLCAqZGF0ZSwgKmxhc3RfbW9kaWZpZWQ7Ci0KLQljYWNo
ZV9jb250cm9sID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkNh
Y2hlLUNvbnRyb2wiKTsKLQlpZiAoY2FjaGVfY29udHJvbCkgewotCQljb25zdCBjaGFyICptYXhf
YWdlLCAqc19tYXhhZ2U7Ci0JCWdpbnQ2NCBmcmVzaG5lc3NfbGlmZXRpbWUgPSAwOwotCQlHSGFz
aFRhYmxlICpoYXNoOwotCQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NP
VVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKLQotCQloYXNoID0gc291cF9oZWFkZXJfcGFy
c2VfcGFyYW1fbGlzdCAoY2FjaGVfY29udHJvbCk7Ci0KLQkJLyogU2hvdWxkIHdlIHJlLXZhbGlk
YXRlIHRoZSBlbnRyeSB3aGVuIGl0IGdvZXMgc3RhbGUgKi8KLQkJZW50cnktPm11c3RfcmV2YWxp
ZGF0ZSA9IGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJtdXN0LXJldmFsaWRh
dGUiLCBOVUxMLCBOVUxMKTsKLQotCQkvKiBTZWN0aW9uIDIuMy4xICovCi0JCWlmIChwcml2LT5j
YWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRCkgewotCQkJc19tYXhhZ2UgPSBn
X2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAicy1tYXhhZ2UiKTsKLQkJCWlmIChzX21heGFnZSkg
ewotCQkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9sbCAoc19tYXhhZ2UsIE5V
TEwsIDEwKTsKLQkJCQlpZiAoZnJlc2huZXNzX2xpZmV0aW1lKSB7Ci0JCQkJCS8qIEltcGxpZXMg
cHJveHktcmV2YWxpZGF0ZS4gVE9ETzogaXMgaXQgdHJ1ZT8gKi8KLQkJCQkJZW50cnktPm11c3Rf
cmV2YWxpZGF0ZSA9IFRSVUU7Ci0JCQkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFz
aCk7Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvKiBJZiAnbWF4LWFnZScg
Y2FjaGUgZGlyZWN0aXZlIGlzIHByZXNlbnQsIHVzZSB0aGF0ICovCi0JCW1heF9hZ2UgPSBnX2hh
c2hfdGFibGVfbG9va3VwIChoYXNoLCAibWF4LWFnZSIpOwotCQlpZiAobWF4X2FnZSkKLQkJCWZy
ZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9sbCAobWF4X2FnZSwgTlVMTCwgMTApOwot
Ci0JCWlmIChmcmVzaG5lc3NfbGlmZXRpbWUpIHsKLQkJCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRp
bWUgPSAoZ3VpbnQpTUlOIChmcmVzaG5lc3NfbGlmZXRpbWUsIEdfTUFYVUlOVDMyKTsKLQkJCXNv
dXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlz
b3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOwotCX0KLQotCS8qIElmIHRoZSAnRXhw
aXJlcycgcmVzcG9uc2UgaGVhZGVyIGlzIHByZXNlbnQsIHVzZSBpdHMgdmFsdWUKLQkgKiBtaW51
cyB0aGUgdmFsdWUgb2YgdGhlICdEYXRlJyByZXNwb25zZSBoZWFkZXIKLQkgKi8KLQlleHBpcmVz
ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkV4cGlyZXMiKTsK
LQlkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkRhdGUi
KTsKLQlpZiAoZXhwaXJlcyAmJiBkYXRlKSB7Ci0JCVNvdXBEYXRlICpleHBpcmVzX2QsICpkYXRl
X2Q7Ci0JCXRpbWVfdCBleHBpcmVzX3QsIGRhdGVfdDsKLQotCQlleHBpcmVzX2QgPSBzb3VwX2Rh
dGVfbmV3X2Zyb21fc3RyaW5nIChleHBpcmVzKTsKLQkJaWYgKGV4cGlyZXNfZCkgewotCQkJZGF0
ZV9kID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZGF0ZSk7Ci0KLQkJCWV4cGlyZXNfdCA9
IHNvdXBfZGF0ZV90b190aW1lX3QgKGV4cGlyZXNfZCk7Ci0JCQlkYXRlX3QgPSBzb3VwX2RhdGVf
dG9fdGltZV90IChkYXRlX2QpOwotCi0JCQlzb3VwX2RhdGVfZnJlZSAoZXhwaXJlc19kKTsKLQkJ
CXNvdXBfZGF0ZV9mcmVlIChkYXRlX2QpOwotCi0JCQlpZiAoZXhwaXJlc190ICYmIGRhdGVfdCkg
ewotCQkJCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSAoZ3VpbnQpTUFYIChleHBpcmVzX3Qg
LSBkYXRlX3QsIDApOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIElmIEV4
cGlyZXMgaXMgbm90IGEgdmFsaWQgZGF0ZSB3ZSBzaG91bGQKLQkJCSAgIHRyZWF0IGl0IGFzIGFs
cmVhZHkgZXhwaXJlZCwgc2VlIHNlY3Rpb24KLQkJCSAgIDMuMyAqLwotCQkJZW50cnktPmZyZXNo
bmVzc19saWZldGltZSA9IDA7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQkvKiBPdGhlcndpc2Ug
YW4gaGV1cmlzdGljIG1heSBiZSB1c2VkICovCi0KLQkvKiBIZXVyaXN0aWNzIE1VU1QgTk9UIGJl
IHVzZWQgd2l0aCB0aGVzZSBzdGF0dXMgY29kZXMKLQkgICAoc2VjdGlvbiAyLjMuMS4xKSAqLwot
CWlmIChtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX09LICYmCi0JICAgIG1zZy0+c3Rh
dHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTk9OX0FVVEhPUklUQVRJVkUgJiYKLQkgICAgbXNnLT5z
dGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19QQVJUSUFMX0NPTlRFTlQgJiYKLQkgICAgbXNnLT5z
dGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19NVUxUSVBMRV9DSE9JQ0VTICYmCi0JICAgIG1zZy0+
c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkgJiYKLQkgICAgbXNn
LT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19HT05FKQotCQlnb3RvIGV4cGlyZTsKLQotCS8q
IFRPRE86IGF0dGFjaCB3YXJuaW5nIDExMyBpZiByZXNwb25zZSdzIGN1cnJlbnRfYWdlIGlzIG1v
cmUKLQkgICB0aGFuIDI0aCAoc2VjdGlvbiAyLjMuMS4xKSB3aGVuIHVzaW5nIGhldXJpc3RpY3Mg
Ki8KLQotCS8qIExhc3QtTW9kaWZpZWQgYmFzZWQgaGV1cmlzdGljICovCi0JbGFzdF9tb2RpZmll
ZCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJMYXN0LU1vZGlm
aWVkIik7Ci0JaWYgKGxhc3RfbW9kaWZpZWQpIHsKLQkJU291cERhdGUgKnNvdXBfZGF0ZTsKLQkJ
dGltZV90IG5vdywgbGFzdF9tb2RpZmllZF90OwotCi0JCXNvdXBfZGF0ZSA9IHNvdXBfZGF0ZV9u
ZXdfZnJvbV9zdHJpbmcgKGxhc3RfbW9kaWZpZWQpOwotCQlsYXN0X21vZGlmaWVkX3QgPSBzb3Vw
X2RhdGVfdG9fdGltZV90IChzb3VwX2RhdGUpOwotCQlub3cgPSB0aW1lIChOVUxMKTsKLQotI2Rl
ZmluZSBIRVVSSVNUSUNfRkFDVE9SIDAuMSAvKiBGcm9tIFNlY3Rpb24gMi4zLjEuMSAqLwotCi0J
CWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSBNQVggKDAsIChub3cgLSBsYXN0X21vZGlmaWVk
X3QpICogSEVVUklTVElDX0ZBQ1RPUik7Ci0JCXNvdXBfZGF0ZV9mcmVlIChzb3VwX2RhdGUpOwot
CX0KLQotCXJldHVybjsKLQotIGV4cGlyZToKLQkvKiBJZiBhbGwgZWxzZSBmYWlscywgbWFrZSB0
aGUgZW50cnkgZXhwaXJlIGltbWVkaWF0ZWx5ICovCi0JZW50cnktPmZyZXNobmVzc19saWZldGlt
ZSA9IDA7Ci19Ci0KLXN0YXRpYyBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqCi13ZWJraXRfc291cF9j
YWNoZV9lbnRyeV9uZXcgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cs
IHRpbWVfdCByZXF1ZXN0X3RpbWUsIHRpbWVfdCByZXNwb25zZV90aW1lKQotewotCVdlYktpdFNv
dXBDYWNoZUVudHJ5ICplbnRyeTsKLQlTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnM7Ci0JY29u
c3QgY2hhciAqZGF0ZTsKLQljaGFyICptZDU7Ci0KLQllbnRyeSA9IGdfc2xpY2VfbmV3MCAoV2Vi
S2l0U291cENhY2hlRW50cnkpOwotCWVudHJ5LT5kaXJ0eSA9IEZBTFNFOwotCWVudHJ5LT53cml0
aW5nID0gRkFMU0U7Ci0JZW50cnktPmdvdF9ib2R5ID0gRkFMU0U7Ci0JZW50cnktPmJlaW5nX3Zh
bGlkYXRlZCA9IEZBTFNFOwotCWVudHJ5LT5kYXRhID0gZ19zdHJpbmdfbmV3IChOVUxMKTsKLQll
bnRyeS0+cG9zID0gMDsKLQllbnRyeS0+ZXJyb3IgPSBOVUxMOwotCi0JLyoga2V5ICYgZmlsZW5h
bWUgKi8KLQllbnRyeS0+a2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7Ci0J
bWQ1ID0gZ19jb21wdXRlX2NoZWNrc3VtX2Zvcl9zdHJpbmcgKEdfQ0hFQ0tTVU1fTUQ1LCBlbnRy
eS0+a2V5LCAtMSk7Ci0JZW50cnktPmZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAoY2FjaGUt
PnByaXYtPmNhY2hlX2RpciwgbWQ1LCBOVUxMKTsKLQlnX2ZyZWUgKG1kNSk7Ci0KLQkvKiBIZWFk
ZXJzICovCi0JaGVhZGVycyA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX25ldyAoU09VUF9NRVNTQUdF
X0hFQURFUlNfUkVTUE9OU0UpOwotCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZvcmVhY2ggKG1zZy0+
cmVzcG9uc2VfaGVhZGVycywKLQkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFkZXJzRm9yZWFjaEZ1
bmMpY29weV9oZWFkZXJzLAotCQkJCSAgICAgIGhlYWRlcnMpOwotCWVudHJ5LT5oZWFkZXJzID0g
aGVhZGVyczsKLQotCS8qIExSVSBsaXN0ICovCi0JZW50cnktPmhpdHMgPSAwOwotCi0JLyogU2Vj
dGlvbiAyLjMuMSwgRnJlc2huZXNzIExpZmV0aW1lICovCi0Jd2Via2l0X3NvdXBfY2FjaGVfZW50
cnlfc2V0X2ZyZXNobmVzcyAoZW50cnksIG1zZywgY2FjaGUpOwotCi0JLyogU2VjdGlvbiAyLjMu
MiwgQ2FsY3VsYXRpbmcgQWdlICovCi0JZGF0ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAo
ZW50cnktPmhlYWRlcnMsICJEYXRlIik7Ci0KLQlpZiAoZGF0ZSkgewotCQlTb3VwRGF0ZSAqc291
cF9kYXRlOwotCQljb25zdCBjaGFyICphZ2U7Ci0JCXRpbWVfdCBkYXRlX3ZhbHVlLCBhcHBhcmVu
dF9hZ2UsIGNvcnJlY3RlZF9yZWNlaXZlZF9hZ2UsIHJlc3BvbnNlX2RlbGF5LCBhZ2VfdmFsdWUg
PSAwOwotCi0JCXNvdXBfZGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9zdHJpbmcgKGRhdGUpOwot
CQlkYXRlX3ZhbHVlID0gc291cF9kYXRlX3RvX3RpbWVfdCAoc291cF9kYXRlKTsKLQkJc291cF9k
YXRlX2ZyZWUgKHNvdXBfZGF0ZSk7Ci0KLQkJYWdlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0
IChlbnRyeS0+aGVhZGVycywgIkFnZSIpOwotCQlpZiAoYWdlKQotCQkJYWdlX3ZhbHVlID0gZ19h
c2NpaV9zdHJ0b2xsIChhZ2UsIE5VTEwsIDEwKTsKLQotCQllbnRyeS0+cmVzcG9uc2VfdGltZSA9
IHJlc3BvbnNlX3RpbWU7Ci0JCWFwcGFyZW50X2FnZSA9IE1BWCAoMCwgZW50cnktPnJlc3BvbnNl
X3RpbWUgLSBkYXRlX3ZhbHVlKTsKLQkJY29ycmVjdGVkX3JlY2VpdmVkX2FnZSA9IE1BWCAoYXBw
YXJlbnRfYWdlLCBhZ2VfdmFsdWUpOwotCQlyZXNwb25zZV9kZWxheSA9IGVudHJ5LT5yZXNwb25z
ZV90aW1lIC0gcmVxdWVzdF90aW1lOwotCQllbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdlID0g
Y29ycmVjdGVkX3JlY2VpdmVkX2FnZSArIHJlc3BvbnNlX2RlbGF5OwotCX0gZWxzZSB7Ci0JCS8q
IElzIHRoaXMgY29ycmVjdCA/ICovCi0JCWVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UgPSB0
aW1lIChOVUxMKTsKLQl9Ci0KLQlyZXR1cm4gZW50cnk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJr
aXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoV2ViS2l0U291cENhY2hlV3JpdGlu
Z0ZpeHR1cmUgKmZpeHR1cmUpCi17Ci0JLyogRnJlZSBmaXh0dXJlLiBBbmQgZGlzY29ubmVjdCBz
aWduYWxzLCB3ZSBkb24ndCB3YW50IHRvCi0JICAgbGlzdGVuIHRvIG1vcmUgU291cE1lc3NhZ2Ug
ZXZlbnRzIGFzIHdlJ3JlIGZpbmlzaGVkIHdpdGgKLQkgICB0aGlzIHJlc291cmNlICovCi0JaWYg
KGdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkIChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPmdv
dF9jaHVua19oYW5kbGVyKSkKLQkJZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChmaXh0dXJl
LT5tc2csIGZpeHR1cmUtPmdvdF9jaHVua19oYW5kbGVyKTsKLQlpZiAoZ19zaWduYWxfaGFuZGxl
cl9pc19jb25uZWN0ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2JvZHlfaGFuZGxlcikp
Ci0JCWdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5n
b3RfYm9keV9oYW5kbGVyKTsKLQlpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQgKGZp
eHR1cmUtPm1zZywgZml4dHVyZS0+cmVzdGFydGVkX2hhbmRsZXIpKQotCQlnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+cmVzdGFydGVkX2hhbmRsZXIp
OwotCWdfb2JqZWN0X3VucmVmIChmaXh0dXJlLT5tc2cpOwotCWdfb2JqZWN0X3VucmVmIChmaXh0
dXJlLT5jYWNoZSk7Ci0JZ19zbGljZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVy
ZSwgZml4dHVyZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbG9zZV9yZWFkeV9jYiAoR09iamVjdCAq
c291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1
cmUgKmZpeHR1cmUpCi17Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVyZS0+
ZW50cnk7Ci0JV2ViS2l0U291cENhY2hlICpjYWNoZSA9IGZpeHR1cmUtPmNhY2hlOwotCUdPdXRw
dXRTdHJlYW0gKnN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTSAoc291cmNlKTsKLQlnb2Zmc2V0IGNv
bnRlbnRfbGVuZ3RoOwotCi0JZ193YXJuX2lmX2ZhaWwgKGVudHJ5LT5lcnJvciA9PSBOVUxMKTsK
LQotCS8qIEZJWE1FOiB3aGF0IGRvIHdlIGRvIG9uIGVycm9yID8gKi8KLQotCWlmIChzdHJlYW0p
IHsKLQkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoc3RyZWFtLCByZXN1bHQsIE5VTEwp
OwotCQlnX29iamVjdF91bnJlZiAoc3RyZWFtKTsKLQl9Ci0JZW50cnktPnN0cmVhbSA9IE5VTEw7
Ci0KLQljb250ZW50X2xlbmd0aCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X2xl
bmd0aCAoZW50cnktPmhlYWRlcnMpOwotCi0JLyogSWYgdGhlIHByb2Nlc3Mgd2FzIGNhbmNlbGxl
ZCwgdGhlbiBkZWxldGUgdGhlIGVudHJ5IGZyb20KLQkgICB0aGUgY2FjaGUuIERvIGl0IGFsc28g
aWYgdGhlIHNpemUgb2YgYSBjaHVua2VkIHJlc291cmNlIGlzCi0JICAgdG9vIG11Y2ggZm9yIHRo
ZSBjYWNoZSAqLwotCWlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoZW50cnktPmNhbmNl
bGxhYmxlKSkgewotCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKLQkJd2Via2l0X3NvdXBfY2FjaGVf
ZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50cnkpOwotCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9m
cmVlIChlbnRyeSwgVFJVRSk7Ci0JCWVudHJ5ID0gTlVMTDsKLQl9IGVsc2UgaWYgKChzb3VwX21l
c3NhZ2VfaGVhZGVyc19nZXRfZW5jb2RpbmcgKGVudHJ5LT5oZWFkZXJzKSA9PSBTT1VQX0VOQ09E
SU5HX0NIVU5LRUQpIHx8Ci0JCSAgIGVudHJ5LT5sZW5ndGggIT0gKGdzaXplKSBjb250ZW50X2xl
bmd0aCkgewotCQkvKiogVHdvIG9wdGlvbnMgaGVyZToKLQkJICoKLQkJICogMS4gImNodW5rZWQi
IGRhdGEsIGVudHJ5IHdhcyB0ZW1wb3JhcmlseSBhZGRlZCB0bwotCQkgKiBjYWNoZSAoYXMgY29u
dGVudC1sZW5ndGggaXMgMCkgYW5kIG5vdyB0aGF0IHdlIGhhdmUKLQkJICogdGhlIGFjdHVhbCBz
aXplIHdlIGhhdmUgdG8gZXZhbHVhdGUgaWYgd2Ugd2FudCBpdAotCQkgKiBpbiB0aGUgY2FjaGUg
b3Igbm90Ci0JCSAqCi0JCSAqIDIuIENvbnRlbnQtTGVuZ3RoIGhhcyBhIGRpZmZlcmVudCB2YWx1
ZSB0aGFuIGFjdHVhbAotCQkgKiBsZW5ndGgsIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgd2FzIGVu
Y29kZWQgZm9yCi0JCSAqIHRyYW5zbWlzc2lvbiAodHlwaWNhbGx5IGNvbXByZXNzZWQpIGFuZCB0
aHVzIHdlCi0JCSAqIGhhdmUgdG8gc3Vic3RyYWN0IHRoZSBjb250ZW50LWxlbmd0aCB2YWx1ZSB0
aGF0IHdhcwotCQkgKiBhZGRlZCB0byB0aGUgY2FjaGUgYW5kIGFkZCB0aGUgdW5lbmNvZGVkIGxl
bmd0aAotCQkgKiovCi0JCWdpbnQgbGVuZ3RoX3RvX2FkZCA9IGVudHJ5LT5sZW5ndGggLSBjb250
ZW50X2xlbmd0aDsKLQotCQkvKiBNYWtlIHJvb20gaW4gY2FjaGUgaWYgbmVlZGVkICovCi0JCWlm
IChjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKSB7
Ci0JCQltYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOwotCi0J
CQljYWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5ndGhfdG9fYWRkOwotCQl9IGVsc2UgewotCQkJZW50
cnktPmRpcnR5ID0gRkFMU0U7Ci0JCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNh
Y2hlLCBlbnRyeSk7Ci0JCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJV
RSk7Ci0JCQllbnRyeSA9IE5VTEw7Ci0JCX0KLQl9Ci0KLQlpZiAoZW50cnkpIHsKLQkJLyogR2V0
IHJpZCBvZiB0aGUgR1N0cmluZyBpbiBtZW1vcnkgZm9yIHRoZSByZXNvdXJjZSBub3cgKi8KLQkJ
aWYgKGVudHJ5LT5kYXRhKSB7Ci0JCQlnX3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7
Ci0JCQllbnRyeS0+ZGF0YSA9IE5VTEw7Ci0JCX0KLQotCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsK
LQkJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKLQkJZW50cnktPmdvdF9ib2R5ID0gRkFMU0U7Ci0J
CWVudHJ5LT5wb3MgPSAwOwotCi0JCWdfb2JqZWN0X3VucmVmIChlbnRyeS0+Y2FuY2VsbGFibGUp
OwotCQllbnRyeS0+Y2FuY2VsbGFibGUgPSBOVUxMOwotCX0KLQotCWNhY2hlLT5wcml2LT5uX3Bl
bmRpbmctLTsKLQotCS8qIEZyZWVzICovCi0Jd2Via2l0X3NvdXBfY2FjaGVfd3JpdGluZ19maXh0
dXJlX2ZyZWUgKGZpeHR1cmUpOwotfQotCi1zdGF0aWMgdm9pZAotd3JpdGVfcmVhZHlfY2IgKEdP
YmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRp
bmdGaXh0dXJlICpmaXh0dXJlKQotewotCUdPdXRwdXRTdHJlYW0gKnN0cmVhbSA9IEdfT1VUUFVU
X1NUUkVBTSAoc291cmNlKTsKLQlHRXJyb3IgKmVycm9yID0gTlVMTDsKLQlnc3NpemUgd3JpdGVf
c2l6ZTsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKLQot
CWlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoZW50cnktPmNhbmNlbGxhYmxlKSkgewot
CQlnX291dHB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKHN0cmVhbSwKLQkJCQkJICAgICBHX1BSSU9S
SVRZX0xPVywKLQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCi0JCQkJCSAgICAgKEdBc3lu
Y1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCi0JCQkJCSAgICAgZml4dHVyZSk7Ci0JCXJl
dHVybjsKLQl9Ci0KLQl3cml0ZV9zaXplID0gZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2ZpbmlzaCAo
c3RyZWFtLCByZXN1bHQsICZlcnJvcik7Ci0JaWYgKHdyaXRlX3NpemUgPD0gMCB8fCBlcnJvcikg
ewotCQlpZiAoZXJyb3IpCi0JCQllbnRyeS0+ZXJyb3IgPSBlcnJvcjsKLQkJZ19vdXRwdXRfc3Ry
ZWFtX2Nsb3NlX2FzeW5jIChzdHJlYW0sCi0JCQkJCSAgICAgR19QUklPUklUWV9MT1csCi0JCQkJ
CSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAotCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNr
KWNsb3NlX3JlYWR5X2NiLAotCQkJCQkgICAgIGZpeHR1cmUpOwotCQkvKiBGSVhNRTogV2Ugc2hv
dWxkIGNvbXBsZXRlbHkgc3RvcCBjYWNoaW5nIHRoZQotCQkgICByZXNvdXJjZSBhdCB0aGlzIHBv
aW50ICovCi0JfSBlbHNlIHsKLQkJZW50cnktPnBvcyArPSB3cml0ZV9zaXplOwotCi0JCS8qIEFy
ZSB3ZSBzdGlsbCB3cml0aW5nIGFuZCBpcyB0aGVyZSBuZXcgZGF0YSB0byB3cml0ZQotCQkgICBh
bHJlYWR5ID8gKi8KLQkJaWYgKGVudHJ5LT5kYXRhICYmIGVudHJ5LT5wb3MgPCBlbnRyeS0+ZGF0
YS0+bGVuKSB7Ci0JCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0s
Ci0JCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAotCQkJCQkJICAgICBl
bnRyeS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywKLQkJCQkJCSAgICAgR19QUklPUklUWV9MT1cs
Ci0JCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKLQkJCQkJCSAgICAgKEdBc3luY1JlYWR5
Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCi0JCQkJCQkgICAgIGZpeHR1cmUpOwotCQl9IGVsc2Ug
ewotCQkJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKLQotCQkJaWYgKGVudHJ5LT5nb3RfYm9keSkg
ewotCQkJCS8qIElmIHdlIGFscmVhZHkgcmVjZWl2ZWQgJ2dvdC1ib2R5JwotCQkJCSAgIGFuZCB3
ZSBoYXZlIHdyaXR0ZW4gYWxsIHRoZSBkYXRhLAotCQkJCSAgIHdlIGNhbiBjbG9zZSB0aGUgc3Ry
ZWFtICovCi0JCQkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAot
CQkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCi0JCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFi
bGUsCi0JCQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9jYiwKLQkJ
CQkJCQkgICAgIGZpeHR1cmUpOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotbXNn
X2dvdF9jaHVua19jYiAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIFdlYktp
dFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotCVdlYktpdFNvdXBDYWNoZUVu
dHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5OwotCi0JZ19yZXR1cm5faWZfZmFpbCAoY2h1bmst
PmRhdGEgJiYgY2h1bmstPmxlbmd0aCk7Ci0JZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOwotCi0J
LyogSWdub3JlIHRoaXMgaWYgdGhlIHdyaXRpbmcgb3IgYXBwZW5kaW5nIHdhcyBjYW5jZWxsZWQg
Ki8KLQlpZiAoIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUp
KSB7Ci0JCWdfc3RyaW5nX2FwcGVuZF9sZW4gKGVudHJ5LT5kYXRhLCBjaHVuay0+ZGF0YSwgY2h1
bmstPmxlbmd0aCk7Ci0JCWVudHJ5LT5sZW5ndGggPSBlbnRyeS0+ZGF0YS0+bGVuOwotCi0JCWlm
ICghY2FjaGVfYWNjZXB0c19lbnRyaWVzX29mX3NpemUgKGZpeHR1cmUtPmNhY2hlLCBlbnRyeS0+
bGVuZ3RoKSkgewotCQkJLyogUXVpY2tseSBjYW5jZWwgdGhlIGNhY2hpbmcgb2YgdGhlIHJlc291
cmNlICovCi0JCQlnX2NhbmNlbGxhYmxlX2NhbmNlbCAoZW50cnktPmNhbmNlbGxhYmxlKTsKLQkJ
fQotCX0KLQotCS8qIEZJWE1FOiByZW1vdmUgdGhlIGVycm9yIGNoZWNrIHdoZW4gd2UgY2FuY2Vs
IHRoZSBjYWNoaW5nIGF0Ci0JICAgdGhlIGZpcnN0IHdyaXRlIGVycm9yICovCi0JLyogT25seSB3
cml0ZSBpZiB0aGUgZW50cnkgc3RyZWFtIGlzIHJlYWR5ICovCi0JaWYgKGVudHJ5LT53cml0aW5n
ID09IEZBTFNFICYmIGVudHJ5LT5lcnJvciA9PSBOVUxMICYmIGVudHJ5LT5zdHJlYW0pIHsKLQkJ
R1N0cmluZyAqZGF0YSA9IGVudHJ5LT5kYXRhOwotCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7Ci0J
CWdfb3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKLQkJCQkJICAgICBk
YXRhLT5zdHIgKyBlbnRyeS0+cG9zLAotCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3Ms
Ci0JCQkJCSAgICAgR19QUklPUklUWV9MT1csCi0JCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxl
LAotCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAotCQkJCQkg
ICAgIGZpeHR1cmUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLW1zZ19nb3RfYm9keV9jYiAoU291
cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCi17
Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7Ci0JZ19yZXR1
cm5faWZfZmFpbCAoZW50cnkpOwotCi0JZW50cnktPmdvdF9ib2R5ID0gVFJVRTsKLQotCWlmICgh
ZW50cnktPnN0cmVhbSAmJiBlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpCi0JCS8qIFRoZSBz
dHJlYW0gaXMgbm90IHJlYWR5IHRvIGJlIHdyaXR0ZW4gYnV0IHdlIHN0aWxsCi0JCSAgIGhhdmUg
ZGF0YSB0byB3cml0ZSwgd2UnbGwgd3JpdGUgaXQgd2hlbiB0aGUgc3RyZWFtCi0JCSAgIGlzIG9w
ZW5lZCBmb3Igd3JpdGluZyAqLwotCQlyZXR1cm47Ci0KLQotCWlmIChlbnRyeS0+cG9zICE9IGVu
dHJ5LT5sZW5ndGgpIHsKLQkJLyogSWYgd2Ugc3RpbGwgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3cml0
ZSBpdCwKLQkJICAgd3JpdGVfcmVhZHlfY2Igd2lsbCBjbG9zZSB0aGUgc3RyZWFtICovCi0JCWlm
IChlbnRyeS0+d3JpdGluZyA9PSBGQUxTRSAmJiBlbnRyeS0+ZXJyb3IgPT0gTlVMTCAmJiBlbnRy
eS0+c3RyZWFtKSB7Ci0JCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJl
YW0sCi0JCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAotCQkJCQkJICAg
ICBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywKLQkJCQkJCSAgICAgR19QUklPUklUWV9M
T1csCi0JCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKLQkJCQkJCSAgICAgKEdBc3luY1Jl
YWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCi0JCQkJCQkgICAgIGZpeHR1cmUpOwotCQl9Ci0J
CXJldHVybjsKLQl9Ci0KLQlpZiAoZW50cnktPnN0cmVhbSAmJiAhZW50cnktPndyaXRpbmcpCi0J
CWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoZW50cnktPnN0cmVhbSwKLQkJCQkJICAgICBH
X1BSSU9SSVRZX0xPVywKLQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCi0JCQkJCSAgICAg
KEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCi0JCQkJCSAgICAgZml4dHVyZSk7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChX
ZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCi17Ci0J
R0xpc3QgKmxydV9pdGVtOwotCi0JLyogaWYgKGVudHJ5LT5kaXJ0eSAmJiAhZ19jYW5jZWxsYWJs
ZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsgKi8KLQlpZiAoZW50cnktPmRp
cnR5KSB7Ci0JCWdfY2FuY2VsbGFibGVfY2FuY2VsIChlbnRyeS0+Y2FuY2VsbGFibGUpOwotCQly
ZXR1cm4gRkFMU0U7Ci0JfQotCi0JZ19hc3NlcnQgKCFlbnRyeS0+ZGlydHkpOwotCWdfYXNzZXJ0
IChnX2xpc3RfbGVuZ3RoIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0KSA9PSBnX2hhc2hfdGFibGVf
c2l6ZSAoY2FjaGUtPnByaXYtPmNhY2hlKSk7Ci0KLQkvKiBSZW1vdmUgZnJvbSBjYWNoZSAqLwot
CWlmICghZ19oYXNoX3RhYmxlX3JlbW92ZSAoY2FjaGUtPnByaXYtPmNhY2hlLCBlbnRyeS0+a2V5
KSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JLyogUmVtb3ZlIGZyb20gTFJVICovCi0JbHJ1X2l0ZW0g
PSBnX2xpc3RfZmluZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnkpOwotCWNhY2hlLT5w
cml2LT5scnVfc3RhcnQgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGNhY2hlLT5wcml2LT5scnVfc3Rh
cnQsIGxydV9pdGVtKTsKLQotCS8qIEFkanVzdCBjYWNoZSBzaXplICovCi0JY2FjaGUtPnByaXYt
PnNpemUgLT0gZW50cnktPmxlbmd0aDsKLQotCWdfYXNzZXJ0IChnX2xpc3RfbGVuZ3RoIChjYWNo
ZS0+cHJpdi0+bHJ1X3N0YXJ0KSA9PSBnX2hhc2hfdGFibGVfc2l6ZSAoY2FjaGUtPnByaXYtPmNh
Y2hlKSk7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdpbnQKLWxydV9jb21wYXJlX2Z1
bmMgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiKQotewotCVdlYktpdFNvdXBDYWNo
ZUVudHJ5ICplbnRyeV9hID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopYTsKLQlXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSAqZW50cnlfYiA9IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqKWI7Ci0KLQkvKiog
VGhlIHJhdGlvbmFsZSBvZiB0aGlzIHNvcnRpbmcgZnVuYyBpcwotCSAqCi0JICogMS4gc29ydCBi
eSBoaXRzIC0+IExSVSBhbGdvcml0aG0sIHRoZW4KLQkgKgotCSAqIDIuIHNvcnQgYnkgZnJlc2hu
ZXNzIGxpZmV0aW1lLCB3ZSBiZXR0ZXIgZGlzY2FyZCBmaXJzdAotCSAqIGVudHJpZXMgdGhhdCBh
cmUgY2xvc2UgdG8gZXhwaXJlCi0JICoKLQkgKiAzLiBzb3J0IGJ5IHNpemUsIHJlcGxhY2UgZmly
c3Qgc21hbGwgc2l6ZSByZXNvdXJjZXMgYXMgdGhleQotCSAqIGFyZSBjaGVhcGVyIHRvIGRvd25s
b2FkCi0JICoqLwotCi0JLyogU29ydCBieSBoaXRzICovCi0JaWYgKGVudHJ5X2EtPmhpdHMgIT0g
ZW50cnlfYi0+aGl0cykKLQkJcmV0dXJuIGVudHJ5X2EtPmhpdHMgLSBlbnRyeV9iLT5oaXRzOwot
Ci0JLyogU29ydCBieSBmcmVzaG5lc3NfbGlmZXRpbWUgKi8KLQlpZiAoZW50cnlfYS0+ZnJlc2hu
ZXNzX2xpZmV0aW1lICE9IGVudHJ5X2ItPmZyZXNobmVzc19saWZldGltZSkKLQkJcmV0dXJuIGVu
dHJ5X2EtPmZyZXNobmVzc19saWZldGltZSAtIGVudHJ5X2ItPmZyZXNobmVzc19saWZldGltZTsK
LQotCS8qIFNvcnQgYnkgc2l6ZSAqLwotCXJldHVybiBlbnRyeV9hLT5sZW5ndGggLSBlbnRyeV9i
LT5sZW5ndGg7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotY2FjaGVfYWNjZXB0c19lbnRyaWVzX29m
X3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpCi17Ci0J
LyogV2UgY291bGQgYWRkIGhlcmUgc29tZSBtb3JlIGhldXJpc3RpY3MuIFRPRE86IHJldmlldyBo
b3cKLQkgICB0aGlzIGlzIGRvbmUgYnkgb3RoZXIgSFRUUCBjYWNoZXMgKi8KLQotCXJldHVybiBs
ZW5ndGhfdG9fYWRkIDw9IGNhY2hlLT5wcml2LT5tYXhfZW50cnlfZGF0YV9zaXplOwotfQotCi1z
dGF0aWMgdm9pZAotbWFrZV9yb29tX2Zvcl9uZXdfZW50cnkgKFdlYktpdFNvdXBDYWNoZSAqY2Fj
aGUsIGd1aW50IGxlbmd0aF90b19hZGQpCi17Ci0JR0xpc3QgKmxydV9lbnRyeSA9IGNhY2hlLT5w
cml2LT5scnVfc3RhcnQ7Ci0KLQkvKiBDaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCByb29tIGZv
ciB0aGUgbmV3IGVudHJ5LiBUaGlzIGlzCi0JICAgYW4gYXBwcm94aW1hdGlvbiBhcyB3ZSdyZSBu
b3Qgd29ya2luZyBvdXQgdGhlIHNpemUgb2YgdGhlCi0JICAgY2FjaGUgZmlsZSBvciB0aGUgc2l6
ZSBvZiB0aGUgaGVhZGVycyBmb3IgcGVyZm9ybWFuY2UKLQkgICByZWFzb25zLiBUT0RPOiBjaGVj
ayBpZiB0aGF0IHdvdWxkIGJlIHJlYWxseSB0aGF0IGV4cGVuc2l2ZSAqLwotCi0Jd2hpbGUgKGxy
dV9lbnRyeSAmJgotCSAgICAgICAobGVuZ3RoX3RvX2FkZCArIGNhY2hlLT5wcml2LT5zaXplID4g
Y2FjaGUtPnByaXYtPm1heF9zaXplKSkgewotCQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqb2xkX2Vu
dHJ5ID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopbHJ1X2VudHJ5LT5kYXRhOwotCi0JCS8qIERp
c2NhcmQgZW50cmllcy4gT25jZSBjYW5jZWxsZWQgcmVzb3VyY2VzIHdpbGwgYmUKLQkJICogZnJl
ZWQgaW4gY2xvc2VfcmVhZHlfY2IKLQkJICovCi0JCWlmICh3ZWJraXRfc291cF9jYWNoZV9lbnRy
eV9yZW1vdmUgKGNhY2hlLCBvbGRfZW50cnkpKSB7Ci0JCQl3ZWJraXRfc291cF9jYWNoZV9lbnRy
eV9mcmVlIChvbGRfZW50cnksIFRSVUUpOwotCQkJbHJ1X2VudHJ5ID0gY2FjaGUtPnByaXYtPmxy
dV9zdGFydDsKLQkJfSBlbHNlCi0JCQlscnVfZW50cnkgPSBnX2xpc3RfbmV4dCAobHJ1X2VudHJ5
KTsKLQl9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaW5z
ZXJ0X2J5X2tleSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwKLQkJCQkgICAgICAgY29uc3QgY2hh
ciAqa2V5LAotCQkJCSAgICAgICBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksCi0JCQkJICAg
ICAgIGdib29sZWFuIHNvcnQpCi17Ci0JZ3VpbnQgbGVuZ3RoX3RvX2FkZCA9IDA7Ci0KLQlpZiAo
c291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2VuY29kaW5nIChlbnRyeS0+aGVhZGVycykgIT0gU09V
UF9FTkNPRElOR19DSFVOS0VEKQotCQlsZW5ndGhfdG9fYWRkID0gc291cF9tZXNzYWdlX2hlYWRl
cnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVycyk7Ci0KLQkvKiBDaGVjayBpZiB3
ZSBhcmUgZ29pbmcgdG8gc3RvcmUgdGhlIHJlc291cmNlIGRlcGVuZGluZyBvbiBpdHMgc2l6ZSAq
LwotCWlmIChsZW5ndGhfdG9fYWRkKSB7Ci0JCWlmICghY2FjaGVfYWNjZXB0c19lbnRyaWVzX29m
X3NpemUgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKSkKLQkJCXJldHVybiBGQUxTRTsKLQotCQkvKiBN
YWtlIHJvb20gZm9yIG5ldyBlbnRyeSBpZiBuZWVkZWQgKi8KLQkJbWFrZV9yb29tX2Zvcl9uZXdf
ZW50cnkgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKTsKLQl9Ci0KLQlnX2hhc2hfdGFibGVfaW5zZXJ0
IChjYWNoZS0+cHJpdi0+Y2FjaGUsIGdfc3RyZHVwIChrZXkpLCBlbnRyeSk7Ci0KLQkvKiBDb21w
dXRlIG5ldyBjYWNoZSBzaXplICovCi0JY2FjaGUtPnByaXYtPnNpemUgKz0gbGVuZ3RoX3RvX2Fk
ZDsKLQotCS8qIFVwZGF0ZSBMUlUgKi8KLQlpZiAoc29ydCkKLQkJY2FjaGUtPnByaXYtPmxydV9z
dGFydCA9IGdfbGlzdF9pbnNlcnRfc29ydGVkIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRy
eSwgbHJ1X2NvbXBhcmVfZnVuYyk7Ci0JZWxzZQotCQljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0g
Z19saXN0X3ByZXBlbmQgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGVudHJ5KTsKLQotCWdfYXNz
ZXJ0IChnX2xpc3RfbGVuZ3RoIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0KSA9PSBnX2hhc2hfdGFi
bGVfc2l6ZSAoY2FjaGUtPnByaXYtPmNhY2hlKSk7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQotc3Rh
dGljIHZvaWQKLW1zZ19yZXN0YXJ0ZWRfY2IgKFNvdXBNZXNzYWdlICptc2csIFdlYktpdFNvdXBD
YWNoZUVudHJ5ICplbnRyeSkKLXsKLQkvKiBGSVhNRTogV2hhdCBzaG91bGQgd2UgZG8gaGVyZSBl
eGFjdGx5PyAqLwotfQotCi1zdGF0aWMgdm9pZAotYXBwZW5kX3RvX3JlYWR5X2NiIChHT2JqZWN0
ICpzb3VyY2UsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4
dHVyZSAqZml4dHVyZSkKLXsKLQlHRmlsZSAqZmlsZSA9IChHRmlsZSAqKXNvdXJjZTsKLQlHT3V0
cHV0U3RyZWFtICpzdHJlYW07Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVy
ZS0+ZW50cnk7Ci0KLQlzdHJlYW0gPSAoR091dHB1dFN0cmVhbSAqKWdfZmlsZV9hcHBlbmRfdG9f
ZmluaXNoIChmaWxlLCByZXN1bHQsICZlbnRyeS0+ZXJyb3IpOwotCi0JaWYgKGdfY2FuY2VsbGFi
bGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpIHx8IGVudHJ5LT5lcnJvcikgewot
CQlmaXh0dXJlLT5jYWNoZS0+cHJpdi0+bl9wZW5kaW5nLS07Ci0JCWVudHJ5LT5kaXJ0eSA9IEZB
TFNFOwotCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGZpeHR1cmUtPmNhY2hlLCBl
bnRyeSk7Ci0JCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKLQkJ
d2Via2l0X3NvdXBfY2FjaGVfd3JpdGluZ19maXh0dXJlX2ZyZWUgKGZpeHR1cmUpOwotCQlyZXR1
cm47Ci0JfQotCi0JZW50cnktPnN0cmVhbSA9IGdfb2JqZWN0X3JlZiAoc3RyZWFtKTsKLQlnX29i
amVjdF91bnJlZiAoZmlsZSk7Ci0KLQkvKiBJZiB3ZSBhbHJlYWR5IGdvdCBhbGwgdGhlIGRhdGEg
d2UgaGF2ZSB0byBpbml0aWF0ZSB0aGUKLQkgICB3cml0aW5nIGhlcmUsIHNpbmNlIHdlIHdvbid0
IGdldCBtb3JlICdnb3QtY2h1bmsnCi0JICAgc2lnbmFscyAqLwotCWlmIChlbnRyeS0+Z290X2Jv
ZHkpIHsKLQkJR1N0cmluZyAqZGF0YSA9IGVudHJ5LT5kYXRhOwotCi0JCS8qIEl0IGNvdWxkIGhh
cHBlbiB0aGF0IHJlYWRpbmcgdGhlIGRhdGEgZnJvbSBzZXJ2ZXIKLQkJICAgd2FzIGNvbXBsZXRl
ZCBiZWZvcmUgdGhpcyBoYXBwZW5zLiBJbiB0aGF0IGNhc2UKLQkJICAgdGhlcmUgaXMgbm8gZGF0
YSAqLwotCQlpZiAoZGF0YSkgewotCQkJZW50cnktPndyaXRpbmcgPSBUUlVFOwotCQkJZ19vdXRw
dXRfc3RyZWFtX3dyaXRlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAotCQkJCQkJICAgICBkYXRhLT5z
dHIgKyBlbnRyeS0+cG9zLAotCQkJCQkJICAgICBkYXRhLT5sZW4gLSBlbnRyeS0+cG9zLAotCQkJ
CQkJICAgICBHX1BSSU9SSVRZX0xPVywKLQkJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAot
CQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayl3cml0ZV9yZWFkeV9jYiwKLQkJCQkJCSAg
ICAgZml4dHVyZSk7Ci0JCX0KLQl9Ci19Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl0aW1lX3QgcmVx
dWVzdF90aW1lOwotCVNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZTsKLQlndWxvbmcgZ290X2hl
YWRlcnNfaGFuZGxlcjsKLX0gUmVxdWVzdEhlbHBlcjsKLQotc3RhdGljIHZvaWQKLW1zZ19nb3Rf
aGVhZGVyc19jYiAoU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCVdl
YktpdFNvdXBDYWNoZSAqY2FjaGU7Ci0JV2ViS2l0U291cENhY2hlYWJpbGl0eSBjYWNoZWFibGU7
Ci0JUmVxdWVzdEhlbHBlciAqaGVscGVyOwotCXRpbWVfdCByZXF1ZXN0X3RpbWUsIHJlc3BvbnNl
X3RpbWU7Ci0KLQlyZXNwb25zZV90aW1lID0gdGltZSAoTlVMTCk7Ci0KLQloZWxwZXIgPSAoUmVx
dWVzdEhlbHBlciAqKXVzZXJfZGF0YTsKLQljYWNoZSA9IFdFQktJVF9TT1VQX0NBQ0hFIChoZWxw
ZXItPmZlYXR1cmUpOwotCXJlcXVlc3RfdGltZSA9IGhlbHBlci0+cmVxdWVzdF90aW1lOwotCWdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAobXNnLCBtc2dfZ290X2hlYWRlcnNf
Y2IsIHVzZXJfZGF0YSk7Ci0JZ19zbGljZV9mcmVlIChSZXF1ZXN0SGVscGVyLCBoZWxwZXIpOwot
Ci0JY2FjaGVhYmxlID0gd2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eSAoY2FjaGUs
IG1zZyk7Ci0KLQlpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfQ0FDSEVBQkxFKSB7
Ci0JCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKLQkJY2hhciAqa2V5OwotCQlHRmlsZSAq
ZmlsZTsKLQkJV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmU7Ci0KLQkJLyog
Q2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgY2FjaGluZyB0aGlzIHJlc291cmNlICovCi0JCWtleSA9
IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOwotCQllbnRyeSA9IGdfaGFzaF90YWJs
ZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKLQkJZ19mcmVlIChrZXkpOwotCi0J
CWlmIChlbnRyeSAmJiBlbnRyeS0+ZGlydHkpCi0JCQlyZXR1cm47Ci0KLQkJLyogQ3JlYXRlIGEg
bmV3IGVudHJ5LCBkZWxldGluZyBhbnkgb2xkIG9uZSBpZiBwcmVzZW50ICovCi0JCWlmIChlbnRy
eSkgewotCQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50cnkpOwot
CQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOwotCQl9Ci0KLQkJ
ZW50cnkgPSB3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9uZXcgKGNhY2hlLCBtc2csIHJlcXVlc3Rf
dGltZSwgcmVzcG9uc2VfdGltZSk7Ci0JCWVudHJ5LT5oaXRzID0gMTsKLQotCQkvKiBEbyBub3Qg
Y29udGludWUgaWYgaXQgY2FuIG5vdCBiZSBzdG9yZWQgKi8KLQkJaWYgKCF3ZWJraXRfc291cF9j
YWNoZV9lbnRyeV9pbnNlcnRfYnlfa2V5IChjYWNoZSwgKGNvbnN0IGdjaGFyICopZW50cnktPmtl
eSwgZW50cnksIFRSVUUpKSB7Ci0JCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRy
eSwgVFJVRSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlmaXh0dXJlID0gZ19zbGljZV9uZXcwIChX
ZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSk7Ci0JCWZpeHR1cmUtPmNhY2hlID0gZ19vYmpl
Y3RfcmVmIChjYWNoZSk7Ci0JCWZpeHR1cmUtPmVudHJ5ID0gZW50cnk7Ci0JCWZpeHR1cmUtPm1z
ZyA9IGdfb2JqZWN0X3JlZiAobXNnKTsKLQotCQkvKiBXZSBjb25uZWN0IG5vdyB0byB0aGVzZSBz
aWduYWxzIGFuZCBidWZmZXIgdGhlIGRhdGEKLQkJICAgaWYgaXQgY29tZXMgYmVmb3JlIHRoZSBm
aWxlIGlzIHJlYWR5IGZvciB3cml0aW5nICovCi0JCWZpeHR1cmUtPmdvdF9jaHVua19oYW5kbGVy
ID0KLQkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0sgKG1z
Z19nb3RfY2h1bmtfY2IpLCBmaXh0dXJlKTsKLQkJZml4dHVyZS0+Z290X2JvZHlfaGFuZGxlciA9
Ci0JCQlnX3NpZ25hbF9jb25uZWN0IChtc2csICJnb3QtYm9keSIsIEdfQ0FMTEJBQ0sgKG1zZ19n
b3RfYm9keV9jYiksIGZpeHR1cmUpOwotCQlmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlciA9Ci0J
CQlnX3NpZ25hbF9jb25uZWN0IChtc2csICJyZXN0YXJ0ZWQiLCBHX0NBTExCQUNLIChtc2dfcmVz
dGFydGVkX2NiKSwgZW50cnkpOwotCi0JCS8qIFByZXBhcmUgZW50cnkgKi8KLQkJZmlsZSA9IGdf
ZmlsZV9uZXdfZm9yX3BhdGggKGVudHJ5LT5maWxlbmFtZSk7Ci0JCWNhY2hlLT5wcml2LT5uX3Bl
bmRpbmcrKzsKLQotCQllbnRyeS0+ZGlydHkgPSBUUlVFOwotCQllbnRyeS0+Y2FuY2VsbGFibGUg
PSBnX2NhbmNlbGxhYmxlX25ldyAoKTsKLQkJZ19maWxlX2FwcGVuZF90b19hc3luYyAoZmlsZSwg
MCwKLQkJCQkJR19QUklPUklUWV9MT1csIGVudHJ5LT5jYW5jZWxsYWJsZSwKLQkJCQkJKEdBc3lu
Y1JlYWR5Q2FsbGJhY2spYXBwZW5kX3RvX3JlYWR5X2NiLAotCQkJCQlmaXh0dXJlKTsKLQl9IGVs
c2UgaWYgKGNhY2hlYWJsZSAmIFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKSB7Ci0JCWNo
YXIgKmtleTsKLQkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OwotCi0JCWtleSA9IHNvdXBf
bWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOwotCQllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29r
dXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKLQkJZ19mcmVlIChrZXkpOwotCi0JCWlmIChl
bnRyeSkgewotCQkJaWYgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIGVu
dHJ5KSkKLQkJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7Ci0J
CX0KLQl9IGVsc2UgaWYgKGNhY2hlYWJsZSAmIFdFQktJVF9TT1VQX0NBQ0hFX1ZBTElEQVRFUykg
ewotCQljaGFyICprZXk7Ci0JCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKLQotCQlrZXkg
PSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKLQkJZW50cnkgPSBnX2hhc2hfdGFi
bGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSk7Ci0JCWdfZnJlZSAoa2V5KTsKLQot
CQkvKiBJdCdzIHBvc3NpYmxlIHRvIGdldCBhIENBQ0hFX1ZBTElEQVRFUyB3aXRoIG5vCi0JCSAq
IGVudHJ5IGluIHRoZSBoYXNoIHRhYmxlLiBUaGlzIGNvdWxkIGhhcHBlbiBpZiBmb3IKLQkJICog
ZXhhbXBsZSB0aGUgc291cCBjbGllbnQgaXMgdGhlIG9uZSBjcmVhdGluZyB0aGUKLQkJICogY29u
ZGl0aW9uYWwgcmVxdWVzdC4KLQkJICovCi0JCWlmIChlbnRyeSkgewotCQkJZW50cnktPmJlaW5n
X3ZhbGlkYXRlZCA9IEZBTFNFOwotCi0JCQkvKiBXZSB1cGRhdGUgdGhlIGhlYWRlcnMgb2YgdGhl
IGV4aXN0aW5nIGNhY2hlIGl0ZW0sCi0JCQkgICBwbHVzIGl0cyBhZ2UgKi8KLQkJCXNvdXBfbWVz
c2FnZV9oZWFkZXJzX2ZvcmVhY2ggKG1zZy0+cmVzcG9uc2VfaGVhZGVycywKLQkJCQkJCSAgICAg
IChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyl1cGRhdGVfaGVhZGVycywKLQkJCQkJCSAg
ICAgIGVudHJ5LT5oZWFkZXJzKTsKLQkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3NldF9mcmVz
aG5lc3MgKGVudHJ5LCBtc2csIGNhY2hlKTsKLQkJfQotCX0KLX0KLQotR0lucHV0U3RyZWFtICoK
LXdlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUs
IFNvdXBNZXNzYWdlICptc2cpCi17Ci0JY2hhciAqa2V5OwotCVdlYktpdFNvdXBDYWNoZUVudHJ5
ICplbnRyeTsKLQljaGFyICpjdXJyZW50X2FnZTsKLQlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9IE5V
TEw7Ci0JR0ZpbGUgKmZpbGU7Ci0KLQlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NP
VVBfQ0FDSEUgKGNhY2hlKSwgTlVMTCk7Ci0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNf
TUVTU0FHRSAobXNnKSwgTlVMTCk7Ci0KLQlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tl
eSAobXNnKTsKLQllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNo
ZSwga2V5KTsKLQlnX2ZyZWUgKGtleSk7Ci0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVudHJ5LCBO
VUxMKTsKLQotCS8qIElmIHdlIGFyZSB0b2xkIHRvIHNlbmQgYSByZXNwb25zZSBmcm9tIGNhY2hl
IGFueSB2YWxpZGF0aW9uCi0JICAgaW4gY291cnNlIGlzIG92ZXIgYnkgbm93ICovCi0JZW50cnkt
PmJlaW5nX3ZhbGlkYXRlZCA9IEZBTFNFOwotCi0JLyogSGVhZGVycyAqLwotCXNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2ZvcmVhY2ggKGVudHJ5LT5oZWFkZXJzLAotCQkJCSAgICAgIChTb3VwTWVzc2Fn
ZUhlYWRlcnNGb3JlYWNoRnVuYyl1cGRhdGVfaGVhZGVycywKLQkJCQkgICAgICBtc2ctPnJlc3Bv
bnNlX2hlYWRlcnMpOwotCi0JLyogQWRkICdBZ2UnIGhlYWRlciB3aXRoIHRoZSBjdXJyZW50IGFn
ZSAqLwotCWN1cnJlbnRfYWdlID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCB3ZWJraXRfc291cF9j
YWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UgKGVudHJ5KSk7Ci0Jc291cF9tZXNzYWdlX2hlYWRl
cnNfcmVwbGFjZSAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAotCQkJCSAgICAgICJBZ2UiLAotCQkJ
CSAgICAgIGN1cnJlbnRfYWdlKTsKLQlnX2ZyZWUgKGN1cnJlbnRfYWdlKTsKLQotCS8qIFRPRE86
IHRoZSBvcmlnaW5hbCBpZGVhIHdhcyB0byBzYXZlIHJlYWRzLCBidXQgY3VycmVudCBjb2RlCi0J
ICAgYXNzdW1lcyB0aGF0IGEgc3RyZWFtIGlzIGFsd2F5cyByZXR1cm5lZC4gTmVlZCB0byByZWFj
aAotCSAgIHNvbWUgYWdyZWVtZW50IGhlcmUuIEFsc28gd2UgaGF2ZSB0byBoYW5kbGUgdGhlIHNp
dHVhdGlvbgotCSAgIHdlcmUgdGhlIGZpbGUgd2FzIG5vIGxvbmdlciB0aGVyZSAoZm9yIGV4YW1w
bGUgZmlsZXMKLQkgICByZW1vdmVkIHdpdGhvdXQgbm90aWZ5aW5nIHRoZSBjYWNoZSAqLwotCWZp
bGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChlbnRyeS0+ZmlsZW5hbWUpOwotCXN0cmVhbSA9IChH
SW5wdXRTdHJlYW0gKilnX2ZpbGVfcmVhZCAoZmlsZSwgTlVMTCwgTlVMTCk7Ci0KLQlyZXR1cm4g
c3RyZWFtOwotfQotCi1zdGF0aWMgdm9pZAotcmVxdWVzdF9zdGFydGVkIChTb3VwU2Vzc2lvbkZl
YXR1cmUgKmZlYXR1cmUsIFNvdXBTZXNzaW9uICpzZXNzaW9uLAotCQkgU291cE1lc3NhZ2UgKm1z
ZywgU291cFNvY2tldCAqc29ja2V0KQotewotCVJlcXVlc3RIZWxwZXIgKmhlbHBlciA9IGdfc2xp
Y2VfbmV3MCAoUmVxdWVzdEhlbHBlcik7Ci0JaGVscGVyLT5yZXF1ZXN0X3RpbWUgPSB0aW1lIChO
VUxMKTsKLQloZWxwZXItPmZlYXR1cmUgPSBmZWF0dXJlOwotCWhlbHBlci0+Z290X2hlYWRlcnNf
aGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1oZWFkZXJzIiwKLQkJCQkJCQlH
X0NBTExCQUNLIChtc2dfZ290X2hlYWRlcnNfY2IpLAotCQkJCQkJCWhlbHBlcik7Ci19Ci0KLXN0
YXRpYyB2b2lkCi1hdHRhY2ggKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNlc3Np
b24gKnNlc3Npb24pCi17Ci0JV2ViS2l0U291cENhY2hlICpjYWNoZSA9IFdFQktJVF9TT1VQX0NB
Q0hFIChmZWF0dXJlKTsKLQljYWNoZS0+cHJpdi0+c2Vzc2lvbiA9IHNlc3Npb247Ci0KLQl3ZWJr
aXRfc291cF9jYWNoZV9kZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggKGZlYXR1cmUs
IHNlc3Npb24pOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9m
ZWF0dXJlX2luaXQgKFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRlcmZh
Y2UsCi0JCQkJCWdwb2ludGVyIGludGVyZmFjZV9kYXRhKQotewotCXdlYmtpdF9zb3VwX2NhY2hl
X2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2UgPQotCQlnX3R5cGVfZGVmYXVsdF9pbnRlcmZhY2Vf
cGVlayAoU09VUF9UWVBFX1NFU1NJT05fRkVBVFVSRSk7Ci0KLQlmZWF0dXJlX2ludGVyZmFjZS0+
YXR0YWNoID0gYXR0YWNoOwotCWZlYXR1cmVfaW50ZXJmYWNlLT5yZXF1ZXN0X3N0YXJ0ZWQgPSBy
ZXF1ZXN0X3N0YXJ0ZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9jYWNoZV9pbml0
IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQotewotCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnBy
aXY7Ci0KLQlwcml2ID0gY2FjaGUtPnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFU
RSAoY2FjaGUpOwotCi0JcHJpdi0+Y2FjaGUgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwgKGdfc3Ry
X2hhc2gsCi0JCQkJCSAgICAgZ19zdHJfZXF1YWwsCi0JCQkJCSAgICAgKEdEZXN0cm95Tm90aWZ5
KWdfZnJlZSwKLQkJCQkJICAgICBOVUxMKTsKLQotCS8qIExSVSAqLwotCXByaXYtPmxydV9zdGFy
dCA9IE5VTEw7Ci0KLQkvKiAqLwotCXByaXYtPm5fcGVuZGluZyA9IDA7Ci0KLQkvKiBDYWNoZSBz
aXplICovCi0JcHJpdi0+bWF4X3NpemUgPSBERUZBVUxUX01BWF9TSVpFOwotCXByaXYtPm1heF9l
bnRyeV9kYXRhX3NpemUgPSBwcml2LT5tYXhfc2l6ZSAvIE1BWF9FTlRSWV9EQVRBX1BFUkNFTlRB
R0U7Ci0JcHJpdi0+c2l6ZSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZW1vdmVfY2FjaGVfaXRl
bSAoZ3BvaW50ZXIgZGF0YSwKLQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCVdlYktpdFNv
dXBDYWNoZSAqY2FjaGUgPSAoV2ViS2l0U291cENhY2hlICopIHVzZXJfZGF0YTsKLQlXZWJLaXRT
b3VwQ2FjaGVFbnRyeSAqZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKikgZGF0YTsKLQot
CWlmICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSkpCi0JCXdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2
b2lkCi13ZWJraXRfc291cF9jYWNoZV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQotewotCVdl
YktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXY7Ci0JR0xpc3QgKmVudHJpZXM7Ci0KLQlwcml2ID0g
V0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVjdCktPnByaXY7Ci0KLQkvLyBDYW5ub3QgdXNlIGdfaGFz
aF90YWJsZV9mb3JlYWNoIGFzIGNhbGxiYWNrcyBtdXN0IG5vdCBtb2RpZnkgdGhlIGhhc2ggdGFi
bGUKLQllbnRyaWVzID0gZ19oYXNoX3RhYmxlX2dldF92YWx1ZXMgKHByaXYtPmNhY2hlKTsKLQln
X2xpc3RfZm9yZWFjaCAoZW50cmllcywgcmVtb3ZlX2NhY2hlX2l0ZW0sIG9iamVjdCk7Ci0JZ19s
aXN0X2ZyZWUgKGVudHJpZXMpOwotCi0JZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKHByaXYtPmNhY2hl
KTsKLQlnX2ZyZWUgKHByaXYtPmNhY2hlX2Rpcik7Ci0KLQlnX2xpc3RfZnJlZSAocHJpdi0+bHJ1
X3N0YXJ0KTsKLQlwcml2LT5scnVfc3RhcnQgPSBOVUxMOwotCi0JR19PQkpFQ1RfQ0xBU1MgKHdl
YmtpdF9zb3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1z
dGF0aWMgdm9pZAotd2Via2l0X3NvdXBfY2FjaGVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICpvYmpl
Y3QsIGd1aW50IHByb3BfaWQsCi0JCQkJY29uc3QgR1ZhbHVlICp2YWx1ZSwgR1BhcmFtU3BlYyAq
cHNwZWMpCi17Ci0JV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NB
Q0hFIChvYmplY3QpLT5wcml2OwotCi0Jc3dpdGNoIChwcm9wX2lkKSB7Ci0JY2FzZSBQUk9QX0NB
Q0hFX0RJUjoKLQkJcHJpdi0+Y2FjaGVfZGlyID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7
Ci0JCS8qIENyZWF0ZSBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QgKEZJWE1FOiBzaG91
bGQgd2U/KSAqLwotCQlpZiAoIWdfZmlsZV90ZXN0IChwcml2LT5jYWNoZV9kaXIsIEdfRklMRV9U
RVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX0RJUikpCi0JCQlnX21rZGlyX3dpdGhfcGFyZW50
cyAocHJpdi0+Y2FjaGVfZGlyLCAwNzAwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUk9QX0NBQ0hFX1RZ
UEU6Ci0JCXByaXYtPmNhY2hlX3R5cGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0JCS8q
IFRPRE86IGNsZWFyIHByaXZhdGUgZW50cmllcyBhbmQgaXNzdWUgYSB3YXJuaW5nIGlmIG1vdmlu
ZyB0byBzaGFyZWQ/ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0JCWJyZWFrOwotCX0K
LX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX2dldF9wcm9wZXJ0eSAoR09iamVj
dCAqb2JqZWN0LCBndWludCBwcm9wX2lkLAotCQkJCUdWYWx1ZSAqdmFsdWUsIEdQYXJhbVNwZWMg
KnBzcGVjKQotewotCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9D
QUNIRSAob2JqZWN0KS0+cHJpdjsKLQotCXN3aXRjaCAocHJvcF9pZCkgewotCWNhc2UgUFJPUF9D
QUNIRV9ESVI6Ci0JCWdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHByaXYtPmNhY2hlX2Rpcik7
Ci0JCWJyZWFrOwotCWNhc2UgUFJPUF9DQUNIRV9UWVBFOgotCQlnX3ZhbHVlX3NldF9lbnVtICh2
YWx1ZSwgcHJpdi0+Y2FjaGVfdHlwZSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0JCWJy
ZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX2NvbnN0cnVjdGVk
IChHT2JqZWN0ICpvYmplY3QpCi17Ci0JV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdjsKLQot
CXByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAob2JqZWN0KS0+cHJpdjsKLQotCWlmICghcHJpdi0+
Y2FjaGVfZGlyKSB7Ci0JCS8qIFNldCBhIGRlZmF1bHQgY2FjaGUgZGlyLCBkaWZmZXJlbnQgZm9y
IGVhY2ggdXNlciAqLwotCQlwcml2LT5jYWNoZV9kaXIgPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dl
dF91c2VyX2NhY2hlX2RpciAoKSwKLQkJCQkJCSAgICAiaHR0cGNhY2hlIiwKLQkJCQkJCSAgICBO
VUxMKTsKLQkJaWYgKCFnX2ZpbGVfdGVzdCAocHJpdi0+Y2FjaGVfZGlyLCBHX0ZJTEVfVEVTVF9F
WElTVFMgfCBHX0ZJTEVfVEVTVF9JU19ESVIpKQotCQkJZ19ta2Rpcl93aXRoX3BhcmVudHMgKHBy
aXYtPmNhY2hlX2RpciwgMDcwMCk7Ci0JfQotCi0JaWYgKEdfT0JKRUNUX0NMQVNTICh3ZWJraXRf
c291cF9jYWNoZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKLQkJR19PQkpFQ1RfQ0xBU1Mg
KHdlYmtpdF9zb3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkIChvYmplY3QpOwot
fQotCi0jZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX1RZUEVfVFlQRSAod2Via2l0X3NvdXBfY2Fj
aGVfdHlwZV9nZXRfdHlwZSAoKSkKLXN0YXRpYyBHVHlwZQotd2Via2l0X3NvdXBfY2FjaGVfdHlw
ZV9nZXRfdHlwZSAodm9pZCkKLXsKLQlzdGF0aWMgR1R5cGUgY2FjaGVfdHlwZSA9IDA7Ci0KLQlz
dGF0aWMgY29uc3QgR0VudW1WYWx1ZSBjYWNoZV90eXBlc1tdID0gewotCQl7IFdFQktJVF9TT1VQ
X0NBQ0hFX1NJTkdMRV9VU0VSLCAiU2luZ2xlIHVzZXIgY2FjaGUiLCAidXNlciIgfSwKLQkJeyBX
RUJLSVRfU09VUF9DQUNIRV9TSEFSRUQsICJTaGFyZWQgY2FjaGUiLCAic2hhcmVkIiB9LAotCQl7
IDAsIE5VTEwsIE5VTEwgfQotCX07Ci0KLQlpZiAoIWNhY2hlX3R5cGUpIHsKLQkJY2FjaGVfdHlw
ZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJXZWJLaXRTb3VwQ2FjaGVUeXBlVHlwZSIsIGNh
Y2hlX3R5cGVzKTsKLQl9Ci0JcmV0dXJuIGNhY2hlX3R5cGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13
ZWJraXRfc291cF9jYWNoZV9jbGFzc19pbml0IChXZWJLaXRTb3VwQ2FjaGVDbGFzcyAqY2FjaGVf
Y2xhc3MpCi17Ci0JR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAq
KWNhY2hlX2NsYXNzOwotCi0JZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9j
YWNoZV9maW5hbGl6ZTsKLQlnb2JqZWN0X2NsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdF9zb3Vw
X2NhY2hlX2NvbnN0cnVjdGVkOwotCWdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtp
dF9zb3VwX2NhY2hlX3NldF9wcm9wZXJ0eTsKLQlnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfc291cF9jYWNoZV9nZXRfcHJvcGVydHk7Ci0KLQljYWNoZV9jbGFzcy0+Z2V0X2Nh
Y2hlYWJpbGl0eSA9IGdldF9jYWNoZWFiaWxpdHk7Ci0KLQlnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NBQ0hFX0RJUiwKLQkJCQkJIGdfcGFyYW1f
c3BlY19zdHJpbmcgKCJjYWNoZS1kaXIiLAotCQkJCQkJCSAgICAgICJDYWNoZSBkaXJlY3Rvcnki
LAotCQkJCQkJCSAgICAgICJUaGUgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBjYWNoZSBmaWxlcyIs
Ci0JCQkJCQkJICAgICAgTlVMTCwKLQkJCQkJCQkgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdf
UEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKLQotCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0FDSEVfVFlQRSwKLQkJCQkJIGdfcGFyYW1fc3BlY19l
bnVtICgiY2FjaGUtdHlwZSIsCi0JCQkJCQkJICAgICJDYWNoZSB0eXBlIiwKLQkJCQkJCQkgICAg
IldoZXRoZXIgdGhlIGNhY2hlIGlzIHByaXZhdGUgb3Igc2hhcmVkIiwKLQkJCQkJCQkgICAgV0VC
S0lUX1NPVVBfQ0FDSEVfVFlQRV9UWVBFLAotCQkJCQkJCSAgICBXRUJLSVRfU09VUF9DQUNIRV9T
SU5HTEVfVVNFUiwKLQkJCQkJCQkgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNU
UlVDVF9PTkxZKSk7Ci0KLQlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGNhY2hlX2NsYXNzLCBz
aXplb2YgKFdlYktpdFNvdXBDYWNoZVByaXZhdGUpKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfc291
cF9jYWNoZV9uZXc6Ci0gKiBAY2FjaGVfZGlyOiB0aGUgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBj
YWNoZWQgZGF0YSwgb3IgJU5VTEwgdG8gdXNlIHRoZSBkZWZhdWx0IG9uZQotICogQGNhY2hlX3R5
cGU6IHRoZSAjV2ViS2l0U291cENhY2hlVHlwZSBvZiB0aGUgY2FjaGUKLSAqCi0gKiBDcmVhdGVz
IGEgbmV3ICNXZWJLaXRTb3VwQ2FjaGUuCi0gKgotICogUmV0dXJuczogYSBuZXcgI1dlYktpdFNv
dXBDYWNoZQotICoKLSAqIFNpbmNlOiAyLjI4Ci0gKiovCi1XZWJLaXRTb3VwQ2FjaGUgKgotd2Vi
a2l0X3NvdXBfY2FjaGVfbmV3IChjb25zdCBjaGFyICpjYWNoZV9kaXIsIFdlYktpdFNvdXBDYWNo
ZVR5cGUgY2FjaGVfdHlwZSkKLXsKLQlyZXR1cm4gZ19vYmplY3RfbmV3IChXRUJLSVRfVFlQRV9T
T1VQX0NBQ0hFLAotCQkJICAgICAiY2FjaGUtZGlyIiwgY2FjaGVfZGlyLAotCQkJICAgICAiY2Fj
aGUtdHlwZSIsIGNhY2hlX3R5cGUsCi0JCQkgICAgIE5VTEwpOwotfQotCi0vKioKLSAqIHdlYmtp
dF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZToKLSAqIEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hl
Ci0gKiBAbXNnOiBhICNTb3VwTWVzc2FnZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRl
cyB3aGV0aGVyIHRoZSBAY2FjaGUgb2JqZWN0IGhhcyBhIHByb3BlcgotICogcmVzcG9uc2UgZm9y
IHRoZSByZXF1ZXN0IEBtc2cgZ2l2ZW4gdGhlIGZsYWdzIGJvdGggaW4gdGhlIHJlcXVlc3QKLSAq
IGFuZCB0aGUgY2FjaGVkIHJlcGx5IGFuZCB0aGUgdGltZSBlbGxhcHNlZCBzaW5jZSBpdCB3YXMg
Y2FjaGVkLgotICoKLSAqIFJldHVybnM6IHdoZXRoZXIgb3Igbm90IHRoZSBAY2FjaGUgaGFzIGEg
dmFsaWQgcmVzcG9uc2UgZm9yIEBtc2cKLSAqKi8KLVdlYktpdFNvdXBDYWNoZVJlc3BvbnNlCi13
ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNv
dXBNZXNzYWdlICptc2cpCi17Ci0JY2hhciAqa2V5OwotCVdlYktpdFNvdXBDYWNoZUVudHJ5ICpl
bnRyeTsKLQljb25zdCBjaGFyICpjYWNoZV9jb250cm9sOwotCWdwb2ludGVyIHZhbHVlOwotCWdi
b29sZWFuIG11c3RfcmV2YWxpZGF0ZTsKLQlpbnQgbWF4X2FnZSwgbWF4X3N0YWxlLCBtaW5fZnJl
c2g7Ci0JR0xpc3QgKmxydV9pdGVtLCAqaXRlbTsKLQotCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRf
Y2FjaGVfa2V5IChtc2cpOwotCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnBy
aXYtPmNhY2hlLCBrZXkpOwotCWdfZnJlZSAoa2V5KTsKLQotCS8qIDEuIFRoZSBwcmVzZW50ZWQg
UmVxdWVzdC1VUkkgYW5kIHRoYXQgb2Ygc3RvcmVkIHJlc3BvbnNlCi0JICogbWF0Y2gKLQkgKi8K
LQlpZiAoIWVudHJ5KQotCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7
Ci0KLQkvKiBJbmNyZWFzZSBoaXQgY291bnQuIFRha2Ugc29ydGluZyBpbnRvIGFjY291bnQgKi8K
LQllbnRyeS0+aGl0cysrOwotCWxydV9pdGVtID0gZ19saXN0X2ZpbmQgKGNhY2hlLT5wcml2LT5s
cnVfc3RhcnQsIGVudHJ5KTsKLQlpdGVtID0gbHJ1X2l0ZW07Ci0Jd2hpbGUgKGl0ZW0tPm5leHQg
JiYgbHJ1X2NvbXBhcmVfZnVuYyAoaXRlbS0+ZGF0YSwgaXRlbS0+bmV4dC0+ZGF0YSkgPiAwKQot
CQlpdGVtID0gZ19saXN0X25leHQgKGl0ZW0pOwotCi0JaWYgKGl0ZW0gIT0gbHJ1X2l0ZW0pIHsK
LQkJY2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9yZW1vdmVfbGluayAoY2FjaGUtPnBy
aXYtPmxydV9zdGFydCwgbHJ1X2l0ZW0pOwotCQlpdGVtID0gZ19saXN0X2luc2VydF9zb3J0ZWQg
KGl0ZW0sIGxydV9pdGVtLT5kYXRhLCBscnVfY29tcGFyZV9mdW5jKTsKLQkJZ19saXN0X2ZyZWUg
KGxydV9pdGVtKTsKLQl9Ci0KLQlpZiAoZW50cnktPmRpcnR5IHx8IGVudHJ5LT5iZWluZ192YWxp
ZGF0ZWQpCi0JCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKLQotCS8q
IDIuIFRoZSByZXF1ZXN0IG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhlIHN0b3JlZCByZXNwb25z
ZQotCSAqICBhbGxvd3MgaXQgdG8gYmUgdXNlZCBmb3IgdGhlIHByZXNlbnRlZCByZXF1ZXN0Ci0J
ICovCi0KLQkvKiBJbiBwcmFjdGljZSB0aGlzIG1lYW5zIHdlIG9ubHkgcmV0dXJuIG91ciByZXNv
dXJjZSBmb3IgR0VULAotCSAqIGNhY2hlYWJpbGl0eSBmb3Igb3RoZXIgbWV0aG9kcyBpcyBhIFRP
RE8gaW4gdGhlIFJGQwotCSAqIChUT0RPOiBhbHRob3VnaCB3ZSBjb3VsZCByZXR1cm4gdGhlIGhl
YWRlcnMgZm9yIEhFQUQKLQkgKiBwcm9iYWJseSkuCi0JICovCi0JaWYgKG1zZy0+bWV0aG9kICE9
IFNPVVBfTUVUSE9EX0dFVCkKLQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NU
QUxFOwotCi0JLyogMy4gU2VsZWN0aW5nIHJlcXVlc3QtaGVhZGVycyBub21pbmF0ZWQgYnkgdGhl
IHN0b3JlZAotCSAqIHJlc3BvbnNlIChpZiBhbnkpIG1hdGNoIHRob3NlIHByZXNlbnRlZC4KLQkg
Ki8KLQotCS8qIFRPRE8gKi8KLQotCS8qIDQuIFRoZSByZXF1ZXN0IGlzIGEgY29uZGl0aW9uYWwg
cmVxdWVzdCBpc3N1ZWQgYnkgdGhlIGNsaWVudC4KLQkgKi8KLQlpZiAoc291cF9tZXNzYWdlX2hl
YWRlcnNfZ2V0IChtc2ctPnJlcXVlc3RfaGVhZGVycywgIklmLU1vZGlmaWVkLVNpbmNlIikgfHwK
LQkgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChtc2ctPnJlcXVlc3RfaGVhZGVycywgIklm
LU5vbmUtTWF0Y2giKSkKLQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxF
OwotCi0JLyogNS4gVGhlIHByZXNlbnRlZCByZXF1ZXN0IGFuZCBzdG9yZWQgcmVzcG9uc2UgYXJl
IGZyZWUgZnJvbQotCSAqIGRpcmVjdGl2ZXMgdGhhdCB3b3VsZCBwcmV2ZW50IGl0cyB1c2UuCi0J
ICovCi0KLQltdXN0X3JldmFsaWRhdGUgPSBGQUxTRTsKLQltYXhfYWdlID0gbWF4X3N0YWxlID0g
bWluX2ZyZXNoID0gLTE7Ci0KLQljYWNoZV9jb250cm9sID0gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0IChtc2ctPnJlcXVlc3RfaGVhZGVycywgIkNhY2hlLUNvbnRyb2wiKTsKLQlpZiAoY2FjaGVf
Y29udHJvbCkgewotCQlHSGFzaFRhYmxlICpoYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFyYW1f
bGlzdCAoY2FjaGVfY29udHJvbCk7Ci0KLQkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5k
ZWQgKGhhc2gsICJuby1zdG9yZSIsIE5VTEwsIE5VTEwpKSB7Ci0JCQlzb3VwX2hlYWRlcl9mcmVl
X3BhcmFtX2xpc3QgKGhhc2gpOwotCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNF
X1NUQUxFOwotCQl9Ci0KLQkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gs
ICJuby1jYWNoZSIsIE5VTEwsIE5VTEwpKSB7Ci0JCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRlID0g
VFJVRTsKLQkJfQotCi0JCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAi
bWF4LWFnZSIsIE5VTEwsICZ2YWx1ZSkpIHsKLQkJCW1heF9hZ2UgPSAoaW50KU1JTiAoZ19hc2Np
aV9zdHJ0b2xsICh2YWx1ZSwgTlVMTCwgMTApLCBHX01BWElOVDMyKTsKLQkJfQotCi0JCS8qIG1h
eC1zdGFsZSBjYW4gaGF2ZSBubyB2YWx1ZSBzZXQsIHdlIG5lZWQgdG8gdXNlIF9leHRlbmRlZCAq
LwotCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm1heC1zdGFsZSIs
IE5VTEwsICZ2YWx1ZSkpIHsKLQkJCWlmICh2YWx1ZSkKLQkJCQltYXhfc3RhbGUgPSAoaW50KU1J
TiAoZ19hc2NpaV9zdHJ0b2xsICh2YWx1ZSwgTlVMTCwgMTApLCBHX01BWElOVDMyKTsKLQkJCWVs
c2UKLQkJCQltYXhfc3RhbGUgPSBHX01BWElOVDMyOwotCQl9Ci0KLQkJdmFsdWUgPSBnX2hhc2hf
dGFibGVfbG9va3VwIChoYXNoLCAibWluLWZyZXNoIik7Ci0JCWlmICh2YWx1ZSkKLQkJCW1pbl9m
cmVzaCA9IChpbnQpTUlOIChnX2FzY2lpX3N0cnRvbGwgKHZhbHVlLCBOVUxMLCAxMCksIEdfTUFY
SU5UMzIpOwotCi0JCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7Ci0KLQkJaWYg
KG1heF9hZ2UgIT0gLTEpIHsKLQkJCWd1aW50IGN1cnJlbnRfYWdlID0gd2Via2l0X3NvdXBfY2Fj
aGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChlbnRyeSk7Ci0KLQkJCS8qIElmIHdlIGFyZSBvdmVy
IG1heC1hZ2UgYW5kIG1heC1zdGFsZSBpcyBub3QKLQkJCSAgIHNldCwgZG8gbm90IHVzZSB0aGUg
dmFsdWUgZnJvbSB0aGUgY2FjaGUKLQkJCSAgIHdpdGhvdXQgdmFsaWRhdGlvbiAqLwotCQkJaWYg
KChndWludCkgbWF4X2FnZSA8PSBjdXJyZW50X2FnZSAmJiBtYXhfc3RhbGUgPT0gLTEpCi0JCQkJ
cmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT047Ci0JCX0K
LQl9Ci0KLQkvKiA2LiBUaGUgc3RvcmVkIHJlc3BvbnNlIGlzIGVpdGhlcjogZnJlc2gsIGFsbG93
ZWQgdG8gYmUKLQkgKiBzZXJ2ZWQgc3RhbGUgb3Igc3VjY2VzZnVsbHkgdmFsaWRhdGVkCi0JICov
Ci0JLyogVE9ETyBjb25zaWRlciBhbHNvIHByb3h5LXJldmFsaWRhdGUgJiBzLW1heGFnZSAqLwot
CWlmIChlbnRyeS0+bXVzdF9yZXZhbGlkYXRlKQotCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVf
UkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKLQotCWlmICghd2Via2l0X3NvdXBfY2FjaGVfZW50
cnlfaXNfZnJlc2hfZW5vdWdoIChlbnRyeSwgbWluX2ZyZXNoKSkgewotCQkvKiBOb3QgZnJlc2gs
IGNhbiBpdCBiZSBzZXJ2ZWQgc3RhbGU/ICovCi0JCWlmIChtYXhfc3RhbGUgIT0gLTEpIHsKLQkJ
CS8qIEdfTUFYSU5UMzIgbWVhbnMgd2UgYWNjZXB0IGFueSBzdGFsZW5lc3MgKi8KLQkJCWlmICht
YXhfc3RhbGUgPT0gR19NQVhJTlQzMikKLQkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVT
UE9OU0VfRlJFU0g7Ci0KLQkJCWlmICgod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0X2N1cnJl
bnRfYWdlIChlbnRyeSkgLSBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lKSA8PSAoZ3VpbnQpIG1h
eF9zdGFsZSkKLQkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7Ci0J
CX0KLQotCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElP
TjsKLQl9Ci0KLQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7Ci19Ci0K
LS8qKgotICogd2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eToKLSAqIEBjYWNoZTog
YSAjV2ViS2l0U291cENhY2hlCi0gKiBAbXNnOiBhICNTb3VwTWVzc2FnZQotICoKLSAqIENhbGN1
bGF0ZXMgd2hldGhlciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4KLSAqCi0gKiBSZXR1
cm5zOiBhICNXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0
aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4KLSAqKi8KLVdlYktpdFNvdXBDYWNoZWFiaWxp
dHkKLXdlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNoZSAq
Y2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCi17Ci0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdFQktJ
VF9JU19TT1VQX0NBQ0hFIChjYWNoZSksIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFKTsK
LQlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChtc2cpLCBXRUJLSVRfU09V
UF9DQUNIRV9VTkNBQ0hFQUJMRSk7Ci0KLQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX0NM
QVNTIChjYWNoZSktPmdldF9jYWNoZWFiaWxpdHkgKGNhY2hlLCBtc2cpOwotfQotCi1zdGF0aWMg
Z2Jvb2xlYW4KLWZvcmNlX2ZsdXNoX3RpbWVvdXQgKGdwb2ludGVyIGRhdGEpCi17Ci0JZ2Jvb2xl
YW4gKmZvcmNlZCA9IChnYm9vbGVhbiAqKWRhdGE7Ci0JKmZvcmNlZCA9IFRSVUU7Ci0KLQlyZXR1
cm4gRkFMU0U7Ci19Ci0KLS8qKgotICogd2Via2l0X3NvdXBfY2FjaGVfZmx1c2g6Ci0gKiBAY2Fj
aGU6IGEgI1dlYktpdFNvdXBDYWNoZQotICogQHNlc3Npb246IHRoZSAjU291cFNlc3Npb24gYXNz
b2NpYXRlZCB3aXRoIHRoZSBAY2FjaGUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZm9yY2Ug
YWxsIHBlbmRpbmcgd3JpdGVzIGluIHRoZSBAY2FjaGUgdG8gYmUKLSAqIGNvbW1pdHRlZCB0byBk
aXNrLiBGb3IgZG9pbmcgc28gaXQgd2lsbCBpdGVyYXRlIHRoZSAjR01haW5Db250ZXh0Ci0gKiBh
c3NvY2lhdGVkIHdpdGggdGhlIEBzZXNzaW9uICh3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgb25l
KSBhcyBsb25nCi0gKiBhcyBuZWVkZWQuCi0gKiovCi12b2lkCi13ZWJraXRfc291cF9jYWNoZV9m
bHVzaCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKLXsKLQlHTWFpbkNvbnRleHQgKmFzeW5jX2Nv
bnRleHQ7Ci0JU291cFNlc3Npb24gKnNlc3Npb247Ci0JZ3VpbnQgdGltZW91dF9pZDsKLQlnYm9v
bGVhbiBmb3JjZWQgPSBGQUxTRTsKLQotCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQ
X0NBQ0hFIChjYWNoZSkpOwotCi0Jc2Vzc2lvbiA9IGNhY2hlLT5wcml2LT5zZXNzaW9uOwotCWdf
cmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfU0VTU0lPTiAoc2Vzc2lvbikpOwotCWFzeW5jX2NvbnRl
eHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHNlc3Npb24pOwotCi0JLyogV2Ug
Z2l2ZSBjYWNoZSAxMCBzZWNzIHRvIGZpbmlzaCAqLwotCXRpbWVvdXRfaWQgPSBnX3RpbWVvdXRf
YWRkICgxMDAwMCwgZm9yY2VfZmx1c2hfdGltZW91dCwgJmZvcmNlZCk7Ci0KLQl3aGlsZSAoIWZv
cmNlZCAmJiBjYWNoZS0+cHJpdi0+bl9wZW5kaW5nID4gMCkKLQkJZ19tYWluX2NvbnRleHRfaXRl
cmF0aW9uIChhc3luY19jb250ZXh0LCBGQUxTRSk7Ci0KLQlpZiAoIWZvcmNlZCkKLQkJZ19zb3Vy
Y2VfcmVtb3ZlICh0aW1lb3V0X2lkKTsKLQllbHNlCi0JCWdfd2FybmluZyAoIkNhY2hlIGZsdXNo
IGZpbmlzaGVkIGRlc3BpdGUgJWQgcGVuZGluZyByZXF1ZXN0cyIsIGNhY2hlLT5wcml2LT5uX3Bl
bmRpbmcpOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYXJfY2FjaGVfaXRlbSAoZ3BvaW50ZXIgZGF0
YSwKLQkJICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JV2ViS2l0U291cENhY2hlICpjYWNoZSA9
IChXZWJLaXRTb3VwQ2FjaGUgKikgdXNlcl9kYXRhOwotCVdlYktpdFNvdXBDYWNoZUVudHJ5ICpl
bnRyeSA9IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqKSBkYXRhOwotCi0JaWYgKHdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIGVudHJ5KSkKLQkJd2Via2l0X3NvdXBfY2FjaGVf
ZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOwotfQotCi0vKioKLSAqIHdlYmtpdF9zb3VwX2NhY2hl
X2NsZWFyOgotICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKLSAqCi0gKiBXaWxsIHJlbW92
ZSBhbGwgZW50cmllcyBpbiB0aGUgQGNhY2hlIHBsdXMgYWxsIHRoZSBjYWNoZSBmaWxlcwotICog
YXNzb2NpYXRlZCB3aXRoIHRoZW0uCi0gKiovCi12b2lkCi13ZWJraXRfc291cF9jYWNoZV9jbGVh
ciAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKLXsKLQlHSGFzaFRhYmxlICpoYXNoOwotCUdMaXN0
ICplbnRyaWVzOwotCi0JZ19yZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNh
Y2hlKSk7Ci0KLQloYXNoID0gY2FjaGUtPnByaXYtPmNhY2hlOwotCWdfcmV0dXJuX2lmX2ZhaWwg
KGhhc2gpOwotCi0JLy8gQ2Fubm90IHVzZSBnX2hhc2hfdGFibGVfZm9yZWFjaCBhcyBjYWxsYmFj
a3MgbXVzdCBub3QgbW9kaWZ5IHRoZSBoYXNoIHRhYmxlCi0JZW50cmllcyA9IGdfaGFzaF90YWJs
ZV9nZXRfdmFsdWVzIChoYXNoKTsKLQlnX2xpc3RfZm9yZWFjaCAoZW50cmllcywgY2xlYXJfY2Fj
aGVfaXRlbSwgY2FjaGUpOwotCWdfbGlzdF9mcmVlIChlbnRyaWVzKTsKLX0KLQotU291cE1lc3Nh
Z2UgKgotd2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm9yaWdpbmFsKQotewotCVNvdXBNZXNz
YWdlICptc2c7Ci0JU291cFVSSSAqdXJpOwotCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsK
LQljaGFyICprZXk7Ci0JY29uc3QgY2hhciAqdmFsdWU7Ci0KLQlnX3JldHVybl92YWxfaWZfZmFp
bCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwgTlVMTCk7Ci0JZ19yZXR1cm5fdmFsX2lm
X2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAob3JpZ2luYWwpLCBOVUxMKTsKLQotCS8qIEZpcnN0IGNv
cHkgdGhlIGRhdGEgd2UgbmVlZCBmcm9tIHRoZSBvcmlnaW5hbCBtZXNzYWdlICovCi0JdXJpID0g
c291cF9tZXNzYWdlX2dldF91cmkgKG9yaWdpbmFsKTsKLQltc2cgPSBzb3VwX21lc3NhZ2VfbmV3
X2Zyb21fdXJpIChvcmlnaW5hbC0+bWV0aG9kLCB1cmkpOwotCi0Jc291cF9tZXNzYWdlX2hlYWRl
cnNfZm9yZWFjaCAob3JpZ2luYWwtPnJlcXVlc3RfaGVhZGVycywKLQkJCQkgICAgICAoU291cE1l
c3NhZ2VIZWFkZXJzRm9yZWFjaEZ1bmMpY29weV9oZWFkZXJzLAotCQkJCSAgICAgIG1zZy0+cmVx
dWVzdF9oZWFkZXJzKTsKLQotCS8qIE5vdyBhZGQgdGhlIHZhbGlkYXRvciBlbnRyaWVzIGluIHRo
ZSBoZWFkZXIgZnJvbSB0aGUgY2FjaGVkCi0JICAgZGF0YSAqLwotCWtleSA9IHNvdXBfbWVzc2Fn
ZV9nZXRfY2FjaGVfa2V5IChvcmlnaW5hbCk7Ci0JZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3Vw
IChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSk7Ci0JZ19mcmVlIChrZXkpOwotCi0JZ19yZXR1cm5f
dmFsX2lmX2ZhaWwgKGVudHJ5LCBOVUxMKTsKLQotCWVudHJ5LT5iZWluZ192YWxpZGF0ZWQgPSBU
UlVFOwotCi0JdmFsdWUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJz
LCAiTGFzdC1Nb2RpZmllZCIpOwotCWlmICh2YWx1ZSkKLQkJc291cF9tZXNzYWdlX2hlYWRlcnNf
YXBwZW5kIChtc2ctPnJlcXVlc3RfaGVhZGVycywKLQkJCQkJICAgICAiSWYtTW9kaWZpZWQtU2lu
Y2UiLAotCQkJCQkgICAgIHZhbHVlKTsKLQl2YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dCAoZW50cnktPmhlYWRlcnMsICJFVGFnIik7Ci0JaWYgKHZhbHVlKQotCQlzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQgKG1zZy0+cmVxdWVzdF9oZWFkZXJzLAotCQkJCQkgICAgICJJZi1Ob25l
LU1hdGNoIiwKLQkJCQkJICAgICB2YWx1ZSk7Ci0JcmV0dXJuIG1zZzsKLX0KLQotI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9GSUxFICJzb3VwLmNhY2hlIgotCi0jZGVmaW5lIFdFQktJVF9TT1VQ
X0NBQ0hFX0hFQURFUlNfRk9STUFUICJ7c3N9IgotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9Q
SEVBREVSU19GT1JNQVQgIihzc2J1dXV1dWEiIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9S
TUFUICIpIgotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1BVCAiYSIgV0VC
S0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9STUFUCi0KLS8qIEJhc2ljYWxseSB0aGUgc2FtZSBm
b3JtYXQgdGhhbiBhYm92ZSBleGNlcHQgdGhhdCBzb21lIHN0cmluZ3MgYXJlCi0gICBwcmVwZW5k
ZWQgd2l0aCAmLiBUaGlzIHdheSB0aGUgR1ZhcmlhbnQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl
Ci0gICBkYXRhIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgdGhlIHN0cmluZyAqLwotI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9ERUNPREVfSEVBREVSU19GT1JNQVQgInsmcyZzfSIKLQotc3RhdGlj
IHZvaWQKLXBhY2tfZW50cnkgKGdwb2ludGVyIGRhdGEsCi0JICAgIGdwb2ludGVyIHVzZXJfZGF0
YSkKLXsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50
cnkgKikgZGF0YTsKLQlTb3VwTWVzc2FnZUhlYWRlcnNJdGVyIGl0ZXI7Ci0JY29uc3QgZ2NoYXIg
KmhlYWRlcl9rZXksICpoZWFkZXJfdmFsdWU7Ci0JR1ZhcmlhbnRCdWlsZGVyICpoZWFkZXJzX2J1
aWxkZXI7Ci0JR1ZhcmlhbnRCdWlsZGVyICplbnRyaWVzX2J1aWxkZXIgPSAoR1ZhcmlhbnRCdWls
ZGVyICopdXNlcl9kYXRhOwotCi0JLyogRG8gbm90IHN0b3JlIG5vbi1jb25zb2xpZGF0ZWQgZW50
cmllcyAqLwotCWlmIChlbnRyeS0+ZGlydHkgfHwgZW50cnktPndyaXRpbmcgfHwgIWVudHJ5LT5r
ZXkpCi0JCXJldHVybjsKLQotCS8qIFBhY2sgaGVhZGVycyAqLwotCWhlYWRlcnNfYnVpbGRlciA9
IGdfdmFyaWFudF9idWlsZGVyX25ldyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOwotCXNvdXBfbWVz
c2FnZV9oZWFkZXJzX2l0ZXJfaW5pdCAoJml0ZXIsIGVudHJ5LT5oZWFkZXJzKTsKLQl3aGlsZSAo
c291cF9tZXNzYWdlX2hlYWRlcnNfaXRlcl9uZXh0ICgmaXRlciwgJmhlYWRlcl9rZXksICZoZWFk
ZXJfdmFsdWUpKSB7Ci0JCWlmIChnX3V0ZjhfdmFsaWRhdGUgKGhlYWRlcl92YWx1ZSwgLTEsIE5V
TEwpKQotCQkJZ192YXJpYW50X2J1aWxkZXJfYWRkIChoZWFkZXJzX2J1aWxkZXIsIFdFQktJVF9T
T1VQX0NBQ0hFX0hFQURFUlNfRk9STUFULAotCQkJCQkgICAgICAgaGVhZGVyX2tleSwgaGVhZGVy
X3ZhbHVlKTsKLQl9Ci0KLQkvKiBFbnRyeSBkYXRhICovCi0JZ192YXJpYW50X2J1aWxkZXJfYWRk
IChlbnRyaWVzX2J1aWxkZXIsIFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCwKLQkJ
CSAgICAgICBlbnRyeS0+a2V5LCBlbnRyeS0+ZmlsZW5hbWUsIGVudHJ5LT5tdXN0X3JldmFsaWRh
dGUsCi0JCQkgICAgICAgZW50cnktPmZyZXNobmVzc19saWZldGltZSwgZW50cnktPmNvcnJlY3Rl
ZF9pbml0aWFsX2FnZSwKLQkJCSAgICAgICBlbnRyeS0+cmVzcG9uc2VfdGltZSwgZW50cnktPmhp
dHMsIGVudHJ5LT5sZW5ndGgsIGhlYWRlcnNfYnVpbGRlcik7Ci0KLQlnX3ZhcmlhbnRfYnVpbGRl
cl91bnJlZiAoaGVhZGVyc19idWlsZGVyKTsKLX0KLQotdm9pZAotd2Via2l0X3NvdXBfY2FjaGVf
ZHVtcCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKLXsKLQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRl
ICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKLQlnY2hhciAq
ZmlsZW5hbWU7Ci0JR1ZhcmlhbnRCdWlsZGVyICplbnRyaWVzX2J1aWxkZXI7Ci0JR1ZhcmlhbnQg
KmNhY2hlX3ZhcmlhbnQ7Ci0KLQlpZiAoIWdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVf
c3RhcnQpKQotCQlyZXR1cm47Ci0KLQkvKiBDcmVhdGUgdGhlIGJ1aWxkZXIgYW5kIGl0ZXJhdGUg
b3ZlciBhbGwgZW50cmllcyAqLwotCWVudHJpZXNfYnVpbGRlciA9IGdfdmFyaWFudF9idWlsZGVy
X25ldyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOwotCWdfbGlzdF9mb3JlYWNoIChjYWNoZS0+cHJp
di0+bHJ1X3N0YXJ0LCBwYWNrX2VudHJ5LCBlbnRyaWVzX2J1aWxkZXIpOwotCi0JLyogU2VyaWFs
aXplIGFuZCBkdW1wICovCi0JY2FjaGVfdmFyaWFudCA9IGdfdmFyaWFudF9uZXcgKFdFQktJVF9T
T1VQX0NBQ0hFX0VOVFJJRVNfRk9STUFULCBlbnRyaWVzX2J1aWxkZXIpOwotCWdfdmFyaWFudF9i
dWlsZGVyX3VucmVmIChlbnRyaWVzX2J1aWxkZXIpOwotCi0JZmlsZW5hbWUgPSBnX2J1aWxkX2Zp
bGVuYW1lIChwcml2LT5jYWNoZV9kaXIsIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUsIE5VTEwpOwot
CWdfZmlsZV9zZXRfY29udGVudHMgKGZpbGVuYW1lLCAoY29uc3QgZ2NoYXIgKilnX3ZhcmlhbnRf
Z2V0X2RhdGEgKGNhY2hlX3ZhcmlhbnQpLAotCQkJICAgICBnX3ZhcmlhbnRfZ2V0X3NpemUgKGNh
Y2hlX3ZhcmlhbnQpLCBOVUxMKTsKLQlnX2ZyZWUgKGZpbGVuYW1lKTsKLQlnX3ZhcmlhbnRfdW5y
ZWYgKGNhY2hlX3ZhcmlhbnQpOwotfQotCi12b2lkCi13ZWJraXRfc291cF9jYWNoZV9sb2FkIChX
ZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQotewotCWdjaGFyICpmaWxlbmFtZSA9IE5VTEwsICpjb250
ZW50cyA9IE5VTEw7Ci0JR1ZhcmlhbnQgKmNhY2hlX3ZhcmlhbnQ7Ci0JR1ZhcmlhbnRJdGVyICpl
bnRyaWVzX2l0ZXIsICpoZWFkZXJzX2l0ZXI7Ci0JR1ZhcmlhbnRUeXBlICp2YXJpYW50X2Zvcm1h
dDsKLQlnc2l6ZSBsZW5ndGg7Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OwotCVdlYktp
dFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBjYWNoZS0+cHJpdjsKLQotCWZpbGVuYW1lID0gZ19i
dWlsZF9maWxlbmFtZSAocHJpdi0+Y2FjaGVfZGlyLCBXRUJLSVRfU09VUF9DQUNIRV9GSUxFLCBO
VUxMKTsKLQlpZiAoIWdfZmlsZV9nZXRfY29udGVudHMgKGZpbGVuYW1lLCAmY29udGVudHMsICZs
ZW5ndGgsIE5VTEwpKSB7Ci0JCWdfZnJlZSAoZmlsZW5hbWUpOwotCQlnX2ZyZWUgKGNvbnRlbnRz
KTsKLQkJcmV0dXJuOwotCX0KLQlnX2ZyZWUgKGZpbGVuYW1lKTsKLQotCXZhcmlhbnRfZm9ybWF0
ID0gZ192YXJpYW50X3R5cGVfbmV3IChXRUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1BVCk7
Ci0JY2FjaGVfdmFyaWFudCA9IGdfdmFyaWFudF9uZXdfZnJvbV9kYXRhICh2YXJpYW50X2Zvcm1h
dCwgKGNvbnN0IGdjaGFyICopY29udGVudHMsIGxlbmd0aCwgRkFMU0UsIGdfZnJlZSwgY29udGVu
dHMpOwotCWdfdmFyaWFudF90eXBlX2ZyZWUgKHZhcmlhbnRfZm9ybWF0KTsKLQotCWdfdmFyaWFu
dF9nZXQgKGNhY2hlX3ZhcmlhbnQsIFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9STUFULCAm
ZW50cmllc19pdGVyKTsKLQllbnRyeSA9IGdfc2xpY2VfbmV3MCAoV2ViS2l0U291cENhY2hlRW50
cnkpOwotCi0Jd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AgKGVudHJpZXNfaXRlciwgV0VCS0lU
X1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9STUFULAotCQkJCSAgICAmZW50cnktPmtleSwgJmVudHJ5
LT5maWxlbmFtZSwgJmVudHJ5LT5tdXN0X3JldmFsaWRhdGUsCi0JCQkJICAgICZlbnRyeS0+ZnJl
c2huZXNzX2xpZmV0aW1lLCAmZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSwKLQkJCQkgICAg
JmVudHJ5LT5yZXNwb25zZV90aW1lLCAmZW50cnktPmhpdHMsICZlbnRyeS0+bGVuZ3RoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhlYWRlcnNfaXRlcikpIHsKLQkJY29u
c3QgZ2NoYXIgKmhlYWRlcl9rZXksICpoZWFkZXJfdmFsdWU7Ci0KLQkJLyogU291cE1lc3NhZ2Ug
SGVhZGVycyAqLwotCQllbnRyeS0+aGVhZGVycyA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX25ldyAo
U09VUF9NRVNTQUdFX0hFQURFUlNfUkVTUE9OU0UpOwotCQl3aGlsZSAoZ192YXJpYW50X2l0ZXJf
bG9vcCAoaGVhZGVyc19pdGVyLCBXRUJLSVRfU09VUF9DQUNIRV9ERUNPREVfSEVBREVSU19GT1JN
QVQsICZoZWFkZXJfa2V5LCAmaGVhZGVyX3ZhbHVlKSkKLQkJCXNvdXBfbWVzc2FnZV9oZWFkZXJz
X2FwcGVuZCAoZW50cnktPmhlYWRlcnMsIGhlYWRlcl9rZXksIGhlYWRlcl92YWx1ZSk7Ci0KLQkJ
LyogSW5zZXJ0IGluIGNhY2hlICovCi0JCWlmICghd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaW5z
ZXJ0X2J5X2tleSAoY2FjaGUsIChjb25zdCBnY2hhciAqKWVudHJ5LT5rZXksIGVudHJ5LCBGQUxT
RSkpCi0JCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7Ci0KLQkJ
LyogTmV3IGVudHJ5IGZvciB0aGUgbmV4dCBpdGVyYXRpb24uIFRoaXMgY3JlYXRlcyBhbgotCQkg
ICBleHRyYSBvYmplY3QgdGhlIGxhc3QgaXRlcmF0aW9uIGJ1dCBpdCdzIHdvcnRoIGl0Ci0JCSAg
IGFzIHdlIHNhdmUgc2V2ZXJhbCBpZidzICovCi0JCWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJL
aXRTb3VwQ2FjaGVFbnRyeSk7Ci0JfQotCS8qIFJlbW92ZSBsYXN0IGNyZWF0ZWQgZW50cnkgKi8K
LQlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5LCBlbnRyeSk7Ci0KLQkvKiBTb3J0
IExSVSAoc2hvdWxkbid0IGJlIG5lZWRlZCkuIEZpcnN0IHJldmVyc2UgYXMgZWxlbWVudHMKLQkg
KiBhcmUgYWx3YXlzIHByZXBlbmRlZCB3aGVuIGluc2VydGluZwotCSAqLwotCWNhY2hlLT5wcml2
LT5scnVfc3RhcnQgPSBnX2xpc3RfcmV2ZXJzZSAoY2FjaGUtPnByaXYtPmxydV9zdGFydCk7Ci0J
Y2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9zb3J0IChjYWNoZS0+cHJpdi0+bHJ1X3N0
YXJ0LCBscnVfY29tcGFyZV9mdW5jKTsKLQotCS8qIGZyZWVzICovCi0JZ192YXJpYW50X2l0ZXJf
ZnJlZSAoZW50cmllc19pdGVyKTsKLQlnX3ZhcmlhbnRfdW5yZWYgKGNhY2hlX3ZhcmlhbnQpOwot
fQotCi12b2lkCi13ZWJraXRfc291cF9jYWNoZV9zZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNo
ZSAqY2FjaGUsCi0JCQkJZ3VpbnQgbWF4X3NpemUpCi17Ci0JY2FjaGUtPnByaXYtPm1heF9zaXpl
ID0gbWF4X3NpemU7Ci0JY2FjaGUtPnByaXYtPm1heF9lbnRyeV9kYXRhX3NpemUgPSBjYWNoZS0+
cHJpdi0+bWF4X3NpemUgLyBNQVhfRU5UUllfREFUQV9QRVJDRU5UQUdFOwotfQotCi1ndWludAot
d2Via2l0X3NvdXBfY2FjaGVfZ2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQot
ewotCXJldHVybiBjYWNoZS0+cHJpdi0+bWF4X3NpemU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1j
YWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTI2Zjk4Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qIC0qLSBNb2RlOiBD
OyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0q
LSAqLwotLyoKLSAqIHNvdXAtY2FjaGUuaDoKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAgSWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX1NPVVBfQ0FDSEVfSAotI2RlZmluZSBXRUJL
SVRfU09VUF9DQUNIRV9IIDEKLQotI2lmZGVmIEdfT1NfV0lOMzIKLSAgICAjaWZkZWYgQlVJTERJ
TkdfV0VCS0lUCi0gICAgICAgICNkZWZpbmUgV0VCS0lUX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9y
dCkKLSAgICAjZWxzZQotICAgICAgICAjZGVmaW5lIFdFQktJVF9BUEkgX19kZWNsc3BlYyhkbGxp
bXBvcnQpCi0gICAgI2VuZGlmCi0gICAgI2RlZmluZSBXRUJLSVRfT0JTT0xFVEVfQVBJIFdFQktJ
VF9BUEkKLSNlbHNlCi0gICAgI2RlZmluZSBXRUJLSVRfQVBJIF9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkoImRlZmF1bHQiKSkpCi0gICAgI2RlZmluZSBXRUJLSVRfT0JTT0xFVEVfQVBJIFdFQktJ
VF9BUEkgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCkpCi0jZW5kaWYKLQotI2luY2x1ZGUgPGxp
YnNvdXAvc291cC10eXBlcy5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLQotR19CRUdJTl9ERUNM
UwotCi0jZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUgICAgICAgICAgICAod2Via2l0X3Nv
dXBfY2FjaGVfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9T
T1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGUpKQotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRf
VFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGVDbGFzcykpCi0jZGVmaW5lIFdFQktJVF9J
U19TT1VQX0NBQ0hFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChv
YmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfQ0FD
SEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFdFQktJVF9U
WVBFX1NPVVBfQ0FDSEUpKQotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NB
Q0hFLCBXZWJLaXRTb3VwQ2FjaGVDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3Vw
Q2FjaGUgV2ViS2l0U291cENhY2hlOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZVBy
aXZhdGUgV2ViS2l0U291cENhY2hlUHJpdmF0ZTsKLQotdHlwZWRlZiBlbnVtIHsKLQlXRUJLSVRf
U09VUF9DQUNIRV9DQUNIRUFCTEUgPSAoMSA8PCAwKSwKLQlXRUJLSVRfU09VUF9DQUNIRV9VTkNB
Q0hFQUJMRSA9ICgxIDw8IDEpLAotCVdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTID0gKDEg
PDwgMiksCi0JV0VCS0lUX1NPVVBfQ0FDSEVfVkFMSURBVEVTID0gKDEgPDwgMykKLX0gV2ViS2l0
U291cENhY2hlYWJpbGl0eTsKLQotdHlwZWRlZiBlbnVtIHsKLQlXRUJLSVRfU09VUF9DQUNIRV9S
RVNQT05TRV9GUkVTSCwKLQlXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFU
SU9OLAotCVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFCi19IFdlYktpdFNvdXBDYWNo
ZVJlc3BvbnNlOwotCi10eXBlZGVmIGVudW0gewotCVdFQktJVF9TT1VQX0NBQ0hFX1NJTkdMRV9V
U0VSLAotCVdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRAotfSBXZWJLaXRTb3VwQ2FjaGVUeXBlOwot
Ci1zdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZSB7Ci0JR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7Ci0K
LQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OwotfTsKLQotdHlwZWRlZiBzdHJ1Y3Qgewot
CUdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLQkvKiBtZXRob2RzICovCi0JV2ViS2l0U291
cENhY2hlYWJpbGl0eSAoKmdldF9jYWNoZWFiaWxpdHkpKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUs
IFNvdXBNZXNzYWdlICptc2cpOwotCi0JLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAq
LwotCXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDEpKHZvaWQpOwotCXZvaWQgKCpfbGlic291cF9y
ZXNlcnZlZDIpKHZvaWQpOwotCXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDMpKHZvaWQpOwotfSBX
ZWJLaXRTb3VwQ2FjaGVDbGFzczsKLQotV0VCS0lUX0FQSSBHVHlwZSAgICAgICAgICAgICB3ZWJr
aXRfc291cF9jYWNoZV9nZXRfdHlwZSAodm9pZCk7Ci1XRUJLSVRfQVBJIFdlYktpdFNvdXBDYWNo
ZSAgKndlYmtpdF9zb3VwX2NhY2hlX25ldyAoY29uc3QgY2hhciAgKmNhY2hlX2RpciwKLQkJCQkJ
CSAgICBXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5cGUpOwotV0VCS0lUX0FQSSB2b2lkICAg
ICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9mbHVzaCAoV2ViS2l0U291cENhY2hlICAgKmNh
Y2hlKTsKLVdFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfY2xl
YXIgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSk7Ci0KLVdFQktJVF9BUEkgdm9pZCAgICAgICAg
ICAgICAgd2Via2l0X3NvdXBfY2FjaGVfZHVtcCAoV2ViS2l0U291cENhY2hlICpjYWNoZSk7Ci1X
RUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2xvYWQgKFdlYktp
dFNvdXBDYWNoZSAqY2FjaGUpOwotCi1XRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtp
dF9zb3VwX2NhY2hlX3NldF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwKLQkJCQkJ
CQkgICAgIGd1aW50IG1heF9zaXplKTsKLVdFQktJVF9BUEkgZ3VpbnQgICAgICAgICAgICAgd2Vi
a2l0X3NvdXBfY2FjaGVfZ2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKLQot
R19FTkRfREVDTFMKLQotCi0jZW5kaWYgLyogV0VCS0lUX1NPVVBfQ0FDSEVfSCAqLwotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cKaW5kZXggMmZkMDg2OC4uNzA0Mzg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDE2IEBACiAyMDExLTAxLTI5ICBEYW4gV2luc2hpcCAgPGRhbndAZ25vbWUub3JnPgogCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBsaWJzb3Vw
LWJhc2VkIGNhY2hlL3JlcXVlc3RlciBBUEkKKworICAgICAgICBbR1RLXSBkcm9wIHNvdXAgY2Fj
aGUgc3R1ZmYsIHdoaWNoIGhhcyBiZWVuIG1vdmVkIHRvIGxpYnNvdXAKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNzQ3CisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKworMjAxMS0wMS0yOSAgRGFuIFdpbnNoaXAgIDxkYW53QGdub21lLm9yZz4K
KwogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCiAKICAgICAgICAgW0dUS10gUmVtb3Zl
IEhBVkVfTElCU09VUF8yXzI5XzkwIGFuZCBIQVZFX0dTRVRUSU5HUyBjb25kaXRpb25hbHM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJL
aXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IGNmNjhmMDEuLjgyYWYwOGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L0dOVW1ha2VmaWxlLmFtCkBAIC05OCw3ICs5OCw2IEBAIGxpYndlYmtpdGd0a19AV0VCS0lUR1RL
X0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUJB
CiAJJChPTEUzMl9MSUJTKQogCiB3ZWJraXRndGtfc3RhdGljX2hfYXBpICs9IFwKLQkkKHNyY2Rp
cikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3Vw
LWNhY2hlLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Lmgg
XAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIFwK
IAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmggXApA
QCAtMjYxLDcgKzI2MCw2IEBAICQoV0VCS0lUX0dJUlNPVVJDRVMpOiAkKEdfSVJfU0NBTk5FUikg
JChKU0NPUkVfR0lSU09VUkNFUykgbGlid2Via2l0Z3RrLUBXRUJLSVRHCiAJICAgICAtLWFkZC1p
bmNsdWRlLXBhdGg9JChXZWJLaXQpIFwKIAkgICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKHRvcF9i
dWlsZGRpcikgXAogCSAgICAgLUkkKHNyY2RpcikvU291cmNlIFwKLQkgICAgIC1JJCh0b3Bfc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUgXAogCSAgICAg
LUkkKFdlYktpdCkgXAogCSAgICAgLUkkKEdFTlNPVVJDRVMpIFwKIAkgICAgIC1JJChHRU5TT1VS
Q0VTX1dFQktJVCkgXApAQCAtMzc3LDcgKzM3NSw2IEBAIG5vaW5zdF9QUk9HUkFNUyArPSAkKFRF
U1RfUFJPR1MpCiB3ZWJraXRfdGVzdHNfY2ZsYWdzID0gXAogCS1mbm8tc3RyaWN0LWFsaWFzaW5n
IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMg
XAotCS1JJChXZWJDb3JlKS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUgXAogCS1JJChXZWJL
aXQpIFwKIAktSSQoR0VOU09VUkNFUykgXAogCS1JJCh0b3BfYnVpbGRkaXIpL1NvdXJjZS9XZWJL
aXQvZ3RrIFwKLS0gCjEuNy4zLjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80574</attachid>
            <date>2011-01-29 14:45:27 -0800</date>
            <delta_ts>2011-02-02 11:07:56 -0800</delta_ts>
            <desc>updated again to (almost) pass check-webkit-style</desc>
            <filename>0001-Use-libsoup-based-cache-requester-API.patch</filename>
            <type>text/plain</type>
            <size>184477</size>
            <attacher name="Dan Winship">danw</attacher>
            
              <data encoding="base64">RnJvbSAwMzVjOTRiYmE5Mjg1MmE5Mjc5NmI5ZmRjYWFhYTNmZTc2ZDI4YjJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW4gV2luc2hpcCA8ZGFud0Bnbm9tZS5vcmc+CkRhdGU6IFNh
dCwgMjkgSmFuIDIwMTEgMTY6MDk6MDUgLTA1MDAKU3ViamVjdDogW1BBVENIIDEvMl0gVXNlIGxp
YnNvdXAtYmFzZWQgY2FjaGUvcmVxdWVzdGVyIEFQSQoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzggKwogU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICstCiAuLi4vcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmggICAgICB8ICAgIDkgKy0KIC4uLi9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCAgIHwgIDEwMyArLQog
Li4uL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMgICAgICAgfCAgMjAw
IC0tLQogLi4uL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggICAgICAg
fCAgIDYyIC0KIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5j
ICAgIHwgIDkyMiAtLS0tLS0tLS0tLQogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmggICAgfCAgIDc3IC0KIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0LWRhdGEuYyAgICAgICAgIHwgIDE3MCAtLQogLi4uL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtZGF0YS5oICAgICAgICAgfCAgIDUyIC0KIC4uLi9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LWZpbGUuYyAgICAgICAgIHwgIDMzMSAtLS0tCiAuLi4vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmggICAgICAgICB8ICAgNTQgLQogLi4uL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jICAgICAgICAgfCAgMzU2IC0tLS0tCiAu
Li4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmggICAgICAgICB8ICAgNTQg
LQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyAgICAgfCAg
MzEyIC0tLS0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0Lmgg
ICAgIHwgIDEwMCAtLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3Rlci5jICAgfCAgMTg4IC0tLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3Rlci5oICAgfCAgIDgxIC0KIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3Nv
dXAtY2FjaGUtcHJpdmF0ZS5oIHwgICA0MiAtCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtp
dC9zb3VwLWNhY2hlLmMgICAgICAgICB8IDE2NzcgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9u
ZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaCAgICAgICAgIHwgIDEwNiAtLQog
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEx
ICsKIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgIHwg
ICAgMyAtCiAyMyBmaWxlcyBjaGFuZ2VkLCAxMTAgaW5zZXJ0aW9ucygrKSwgNDg1OSBkZWxldGlv
bnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJl
Y3RvcnktaW5wdXQtc3RyZWFtLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jCiBkZWxl
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jCiBkZWxl
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1kYXRhLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtZmlsZS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWh0dHAuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaAogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3Rlci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3Nv
dXAtY2FjaGUtcHJpdmF0ZS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0
L3NvdXAtY2FjaGUuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZWU5YjdhLi40OTVhNDNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDUgKzEsNDMgQEAKIDIwMTEtMDEtMjkgIERhbiBXaW5zaGlwICA8ZGFud0Bnbm9tZS5v
cmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNl
IGxpYnNvdXAtYmFzZWQgY2FjaGUvcmVxdWVzdGVyIEFQSQorCisgICAgICAgIFtHVEtdIGRyb3Ag
c291cCBjYWNoZSBzdHVmZiwgd2hpY2ggaGFzIGJlZW4gbW92ZWQgdG8gbGlic291cAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3NDcKKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5h
bDo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVTZXNz
aW9uSXNJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZURhdGFVcmwpOgorICAg
ICAgICAoV2ViQ29yZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpz
dGFydEh0dHApOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0
RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6c3RhcnRHaW8pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYzogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0
cC1pbnB1dC1zdHJlYW0uYzogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZmlsZS5jOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYzog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmM6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtcmVxdWVzdGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYzog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3Nv
dXAtY2FjaGUuaDogUmVtb3ZlZC4KKworMjAxMS0wMS0yOSAgRGFuIFdpbnNoaXAgIDxkYW53QGdu
b21lLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCiAKICAgICAgICAgW0dU
S10gUmVtb3ZlIEhBVkVfTElCU09VUF8yXzI5XzkwIGNvbmRpdGlvbmFsczsgd2UgZGVwZW5kIG9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGZiNDdlYTIuLjAyYjgwMDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCkBAIC04Nyw5ICs4Nyw3IEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAogCS1JJChz
cmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lciBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrIFwKIAktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cCBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0CisJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwCiAKIHdlYmNvcmVfYnVpbHRfbm9zb3Vy
Y2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL3Rva2VuaXplci5jcHAKQEAgLTM4MDks
MjMgKzM4MDcsNiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBVUklVdGlscy5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwVVJJVXRpbHMuaCBcCi0JU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0
LXN0cmVhbS5jIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFt
LmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZGF0YS5jIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LWRhdGEuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYyBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1o
dHRwLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QuYyBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0ZXIuYyBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jIFwKLQlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaCBcCi0JU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hl
LXByaXZhdGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJu
YWwuaAppbmRleCBlZDY2OTQ0Li4wMzk5OWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtNDYsOCAr
NDYsOSBAQAogI2VuZGlmCiAKICNpZiBVU0UoU09VUCkKLSNpbmNsdWRlICJzb3VwLXJlcXVlc3Rl
ci5oIgogI2luY2x1ZGUgPEdSZWZQdHIuaD4KKyNkZWZpbmUgTElCU09VUF9VU0VfVU5TVEFCTEVf
UkVRVUVTVF9BUEkKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtcmVxdWVzdC5oPgogI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgogY2xhc3MgRnJhbWU7CiAjZW5kaWYKQEAgLTEzMiw5ICsxMzMsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBtX3VzZXIgPSB1cmwudXNlcigpOwog
ICAgICAgICAgICAgbV9wYXNzID0gdXJsLnBhc3MoKTsKICAgICAgICAgICAgIG1fZmlyc3RSZXF1
ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7Ci0jaWYgVVNFKFNPVVApCi0gICAgICAgICAgICBtX3Jl
cXVlc3RlciA9IGFkb3B0R1JlZih3ZWJraXRfc291cF9yZXF1ZXN0ZXJfbmV3KCkpOwotI2VuZGlm
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIH5SZXNvdXJjZUhhbmRsZUludGVybmFsKCk7
CkBAIC0xOTAsOCArMTg4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBHUmVmUHRy
PFNvdXBNZXNzYWdlPiBtX3NvdXBNZXNzYWdlOwogICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1f
cmVzcG9uc2U7CiAgICAgICAgIGJvb2wgbV9jYW5jZWxsZWQ7Ci0gICAgICAgIEdSZWZQdHI8V2Vi
S2l0U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7Ci0gICAgICAgIEdSZWZQdHI8V2ViS2l0U291
cFJlcXVlc3Rlcj4gbV9yZXF1ZXN0ZXI7CisgICAgICAgIEdSZWZQdHI8U291cFJlcXVlc3Q+IG1f
c291cFJlcXVlc3Q7CiAgICAgICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFt
OwogICAgICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKICAgICAgICAg
Y2hhciogbV9idWZmZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IDg0M2NmMDcuLjQ0YWQ3
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCkBAIC00NSwxMiArNDUsMTQgQEAKICNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5o
IgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1odHRw
LmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNs
dWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGdpby9naW8uaD4KICNpbmNsdWRlIDxnbGliLmg+Cisj
ZGVmaW5lIExJQlNPVVBfVVNFX1VOU1RBQkxFX1JFUVVFU1RfQVBJCisjaW5jbHVkZSA8bGlic291
cC9zb3VwLXJlcXVlc3QtaHR0cC5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC1yZXF1ZXN0ZXIu
aD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtMTQ1LDYgKzE0Nyw0MiBAQCBSZXNvdXJjZUhhbmRsZTo6
flJlc291cmNlSGFuZGxlKCkKICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24odGhpcywg
dHJ1ZSk7CiB9CiAKKy8vIFZhbHVlcyB0YWtlbiBmcm9tIGh0dHA6Ly9zdGV2ZXNvdWRlcnMuY29t
L3VhL2luZGV4LnBocCBmb2xsb3dpbmcKKy8vIHRoZSBydWxlICJEbyBXaGF0IEV2ZXJ5IE90aGVy
IE1vZGVybiBCcm93c2VyIElzIERvaW5nIi4gVGhleSBzZWVtCisvLyB0byBzaWduaWZpY2FudGx5
IGltcHJvdmUgcGFnZSBsb2FkaW5nIHRpbWUgY29tcGFyZWQgdG8gc291cCdzCisvLyBkZWZhdWx0
IHZhbHVlcy4KKyNkZWZpbmUgTUFYX0NPTk5FQ1RJT05TICAgICAgICAgIDYwCisjZGVmaW5lIE1B
WF9DT05ORUNUSU9OU19QRVJfSE9TVCA2CisKK3N0YXRpYyB2b2lkIGVuc3VyZVNlc3Npb25Jc0lu
aXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGlmIChnX29iamVjdF9nZXRf
ZGF0YShHX09CSkVDVChzZXNzaW9uKSwgIndlYmtpdC1pbml0IikpCisgICAgICAgIHJldHVybjsK
KworICAgIFNvdXBDb29raWVKYXIqIGphciA9IFNPVVBfQ09PS0lFX0pBUihzb3VwX3Nlc3Npb25f
Z2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0NPT0tJRV9KQVIpKTsKKyAgICBpZiAoIWph
cikKKyAgICAgICAgc291cF9zZXNzaW9uX2FkZF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfU0VTU0lP
Tl9GRUFUVVJFKGRlZmF1bHRDb29raWVKYXIoKSkpOworICAgIGVsc2UKKyAgICAgICAgc2V0RGVm
YXVsdENvb2tpZUphcihqYXIpOworCisgICAgaWYgKCFzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUo
c2Vzc2lvbiwgU09VUF9UWVBFX0xPR0dFUikgJiYgTG9nTmV0d29yay5zdGF0ZSA9PSBXVEZMb2dD
aGFubmVsT24pIHsKKyAgICAgICAgU291cExvZ2dlciogbG9nZ2VyID0gc291cF9sb2dnZXJfbmV3
KHN0YXRpY19jYXN0PFNvdXBMb2dnZXJMb2dMZXZlbD4oU09VUF9MT0dHRVJfTE9HX0JPRFkpLCAt
MSk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1NFU1NJ
T05fRkVBVFVSRShsb2dnZXIpKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobG9nZ2VyKTsKKyAg
ICB9CisKKyAgICBTb3VwUmVxdWVzdGVyKiByZXF1ZXN0ZXIgPSBzb3VwX3JlcXVlc3Rlcl9uZXco
KTsKKyAgICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9TRVNTSU9OX0ZF
QVRVUkUocmVxdWVzdGVyKSk7CisgICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdGVyKTsKKworICAg
IGdfb2JqZWN0X3NldChzZXNzaW9uLAorICAgICAgICAgICAgICAgICBTT1VQX1NFU1NJT05fTUFY
X0NPTk5TLCBNQVhfQ09OTkVDVElPTlMsCisgICAgICAgICAgICAgICAgIFNPVVBfU0VTU0lPTl9N
QVhfQ09OTlNfUEVSX0hPU1QsIE1BWF9DT05ORUNUSU9OU19QRVJfSE9TVCwKKyAgICAgICAgICAg
ICAgICAgTlVMTCk7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChzZXNzaW9uKSwg
IndlYmtpdC1pbml0IiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHhkZWFkYmVlZikpOworfQor
CiB2b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwgJnVybCkKIHsK
ICAgICBHT3duUHRyPFNvdXBVUkk+IHNvdXBVUkkoc291cF91cmlfbmV3KHVybC5wcmV0dHlVUkwo
KS51dGY4KCkuZGF0YSgpKSk7CkBAIC0zNjAsMTUgKzM5OCwxNyBAQCBzdGF0aWMgZ2Jvb2xlYW4g
cGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSBoYW5kbGUtPmRlZmF1bHRTZXNzaW9uKCk7
CisgICAgZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoc2Vzc2lvbik7CisgICAgU291cFJlcXVl
c3RlciogcmVxdWVzdGVyID0gU09VUF9SRVFVRVNURVIoc291cF9zZXNzaW9uX2dldF9mZWF0dXJl
KHNlc3Npb24sIFNPVVBfVFlQRV9SRVFVRVNURVIpKTsKICAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7Ci0gICAgZC0+bV9zb3VwUmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRfc291cF9yZXF1ZXN0
ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rlci5nZXQoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkpKTsK
KyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdGVyX3JlcXVlc3Qo
cmVxdWVzdGVyLCBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksICZlcnJvci5vdXRQdHIoKSkpOwogICAgIGlmIChlcnJvcikgewogICAgICAgICBkLT5t
X3NvdXBSZXF1ZXN0ID0gMDsKICAgICAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRs
ZSwgMCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBkLT5tX2lucHV0U3Ry
ZWFtID0gYWRvcHRHUmVmKHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZChkLT5tX3NvdXBSZXF1ZXN0
LmdldCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBkLT5tX2lucHV0U3RyZWFtID0gYWRv
cHRHUmVmKHNvdXBfcmVxdWVzdF9zZW5kKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIDAsICZlcnJv
ci5vdXRQdHIoKSkpOwogICAgIGlmIChlcnJvcikgewogICAgICAgICBkLT5tX2lucHV0U3RyZWFt
ID0gMDsKICAgICAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZSwgMCk7CkBAIC00
MDYsMzggKzQ0Niw2IEBAIHN0YXRpYyBTb3VwU2Vzc2lvbiogY3JlYXRlU291cFNlc3Npb24oKQog
ICAgIHJldHVybiBzb3VwX3Nlc3Npb25fYXN5bmNfbmV3KCk7CiB9CiAKLS8vIFZhbHVlcyB0YWtl
biBmcm9tIGh0dHA6Ly9zdGV2ZXNvdWRlcnMuY29tL3VhL2luZGV4LnBocCBmb2xsb3dpbmcKLS8v
IHRoZSBydWxlICJEbyBXaGF0IEV2ZXJ5IE90aGVyIE1vZGVybiBCcm93c2VyIElzIERvaW5nIi4g
VGhleSBzZWVtCi0vLyB0byBzaWduaWZpY2FudGx5IGltcHJvdmUgcGFnZSBsb2FkaW5nIHRpbWUg
Y29tcGFyZWQgdG8gc291cCdzCi0vLyBkZWZhdWx0IHZhbHVlcy4KLSNkZWZpbmUgTUFYX0NPTk5F
Q1RJT05TICAgICAgICAgIDYwCi0jZGVmaW5lIE1BWF9DT05ORUNUSU9OU19QRVJfSE9TVCA2Ci0K
LXN0YXRpYyB2b2lkIGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNz
aW9uKQotewotICAgIGlmIChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChzZXNzaW9uKSwgIndl
YmtpdC1pbml0IikpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNvdXBDb29raWVKYXIqIGphciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8U291cENvb2tpZUphcio+KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVy
ZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09PS0lFX0pBUikpOwotICAgIGlmICghamFyKQotICAgICAg
ICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9TRVNTSU9OX0ZFQVRVUkUo
ZGVmYXVsdENvb2tpZUphcigpKSk7Ci0gICAgZWxzZQotICAgICAgICBzZXREZWZhdWx0Q29va2ll
SmFyKGphcik7Ci0KLSAgICBpZiAoIXNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBT
T1VQX1RZUEVfTE9HR0VSKSAmJiBMb2dOZXR3b3JrLnN0YXRlID09IFdURkxvZ0NoYW5uZWxPbikg
ewotICAgICAgICBTb3VwTG9nZ2VyKiBsb2dnZXIgPSBzb3VwX2xvZ2dlcl9uZXcoc3RhdGljX2Nh
c3Q8U291cExvZ2dlckxvZ0xldmVsPihTT1VQX0xPR0dFUl9MT0dfQk9EWSksIC0xKTsKLSAgICAg
ICAgc291cF9sb2dnZXJfYXR0YWNoKGxvZ2dlciwgc2Vzc2lvbik7Ci0gICAgICAgIGdfb2JqZWN0
X3VucmVmKGxvZ2dlcik7Ci0gICAgfQotCi0gICAgZ19vYmplY3Rfc2V0KHNlc3Npb24sCi0gICAg
ICAgICAgICAgICAgIFNPVVBfU0VTU0lPTl9NQVhfQ09OTlMsIE1BWF9DT05ORUNUSU9OUywKLSAg
ICAgICAgICAgICAgICAgU09VUF9TRVNTSU9OX01BWF9DT05OU19QRVJfSE9TVCwgTUFYX0NPTk5F
Q1RJT05TX1BFUl9IT1NULAotICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQiLCByZWludGVycHJldF9j
YXN0PHZvaWQqPigweGRlYWRiZWVmKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWluZyA9
IGZhbHNlKQogewogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldElu
dGVybmFsKCk7CkBAIC00OTEsMTQgKzQ5OSwxNCBAQCBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENh
bGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIHVzZQog
ICAgIH0KIAogICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBHSW5wdXRTdHJlYW0qIGlu
ID0gd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChkLT5tX3NvdXBSZXF1ZXN0LmdldCgp
LCByZXMsICZlcnJvci5vdXRQdHIoKSk7CisgICAgR0lucHV0U3RyZWFtKiBpbiA9IHNvdXBfcmVx
dWVzdF9zZW5kX2ZpbmlzaChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCByZXMsICZlcnJvci5vdXRQ
dHIoKSk7CiAKICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgU291cE1lc3NhZ2UqIHNvdXBNc2cg
PSBkLT5tX3NvdXBNZXNzYWdlLmdldCgpOwogICAgICAgICBnYm9vbGVhbiBpc1RyYW5zcG9ydEVy
cm9yID0gZC0+bV9zb3VwTWVzc2FnZSAmJiBTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRfRVJST1Io
c291cE1zZy0+c3RhdHVzX2NvZGUpOwogCiAgICAgICAgIGlmIChpc1RyYW5zcG9ydEVycm9yIHx8
IChlcnJvci0+ZG9tYWluID09IEdfSU9fRVJST1IpKSB7Ci0gICAgICAgICAgICBTb3VwVVJJKiB1
cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7
CisgICAgICAgICAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3Nv
dXBSZXF1ZXN0LmdldCgpKTsKICAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBf
dXJpX3RvX3N0cmluZyh1cmksIGZhbHNlKSk7CiAgICAgICAgICAgICBnaW50IGVycm9yQ29kZSA9
IGlzVHJhbnNwb3J0RXJyb3IgPyBzdGF0aWNfY2FzdDxnaW50Pihzb3VwTXNnLT5zdGF0dXNfY29k
ZSkgOiBlcnJvci0+Y29kZTsKICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBlcnJvck1zZyA9IGlz
VHJhbnNwb3J0RXJyb3IgPyBzb3VwTXNnLT5yZWFzb25fcGhyYXNlIDogZXJyb3ItPm1lc3NhZ2U7
CkBAIC01NTEsOCArNTU5LDggQEAgc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2Jq
ZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciB1c2UKICAgICAvLyAoZS5n
LiBmaWxlIGFuZCBHSU8gYmFzZWQgcHJvdG9jb2wpLgogICAgIGlmICghaGFuZGxlLT5zaG91bGRD
b250ZW50U25pZmYoKSAmJiBkLT5tX3Jlc3BvbnNlLmlzTnVsbCgpKSB7CiAgICAgICAgIGQtPm1f
cmVzcG9uc2Uuc2V0VVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOwotICAgICAgICBk
LT5tX3Jlc3BvbnNlLnNldE1pbWVUeXBlKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRf
dHlwZShkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7Ci0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0
RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVu
Z3RoKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRN
aW1lVHlwZShzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShkLT5tX3NvdXBSZXF1ZXN0Lmdl
dCgpKSk7CisgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHNv
dXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGgoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOwog
ICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIGQtPm1fcmVz
cG9uc2UpOwogCiAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewpAQCAtNTc0LDYgKzU4Miw3
IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogCiAgICAg
U291cFNlc3Npb24qIHNlc3Npb24gPSBoYW5kbGUtPmRlZmF1bHRTZXNzaW9uKCk7CiAgICAgZW5z
dXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoc2Vzc2lvbik7CisgICAgU291cFJlcXVlc3RlciogcmVx
dWVzdGVyID0gU09VUF9SRVFVRVNURVIoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24s
IFNPVVBfVFlQRV9SRVFVRVNURVIpKTsKIAogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQg
PSBoYW5kbGUtPmdldEludGVybmFsKCk7CiAKQEAgLTU4Myw3ICs1OTIsNyBAQCBzdGF0aWMgYm9v
bCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICByZXF1ZXN0LnNldFVSTCh1
cmwpOwogCiAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIGQtPm1fc291cFJlcXVlc3Qg
PSBhZG9wdEdSZWYod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIu
Z2V0KCksIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRy
KCkpKTsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdGVyX3Jl
cXVlc3QocmVxdWVzdGVyLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0
cigpKSk7CiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIGQtPm1fc291cFJlcXVlc3QgPSAwOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01OTEsNyArNjAwLDcgQEAgc3RhdGljIGJvb2wgc3Rh
cnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAKICAgICBnX29iamVjdF9zZXRfZGF0YShH
X09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRs
ZSk7CiAKLSAgICBkLT5tX3NvdXBNZXNzYWdlID0gYWRvcHRHUmVmKHdlYmtpdF9zb3VwX3JlcXVl
c3RfaHR0cF9nZXRfbWVzc2FnZShXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAoZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSkpKTsKKyAgICBkLT5tX3NvdXBNZXNzYWdlID0gYWRvcHRHUmVmKHNvdXBfcmVx
dWVzdF9odHRwX2dldF9tZXNzYWdlKFNPVVBfUkVRVUVTVF9IVFRQKGQtPm1fc291cFJlcXVlc3Qu
Z2V0KCkpKSk7CiAgICAgaWYgKCFkLT5tX3NvdXBNZXNzYWdlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTY3NSw3ICs2ODQsNyBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSkKICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IG9ubHkgaWYgaXQncyBub3Qg
YmVlbiBleHBsaWNpdGVseSBkZWZlcnJlZC4KICAgICBpZiAoIWQtPm1fZGVmZXJzTG9hZGluZykg
ewogICAgICAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3
KCkpOwotICAgICAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVlc3RDYWxsYmFjaywg
MCk7CisgICAgICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fc291cFJlcXVlc3QuZ2V0
KCksIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIDApOwogICAg
IH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtNzU4LDcgKzc2Nyw3IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyc0xvYWRpbmcpCiAKICAg
ICBpZiAoIWRlZmVyc0xvYWRpbmcgJiYgIWQtPm1fY2FuY2VsbGFibGUgJiYgZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSkgewogICAgICAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2Fu
Y2VsbGFibGVfbmV3KCkpOwotICAgICAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMo
ZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVl
c3RDYWxsYmFjaywgMCk7CisgICAgICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fc291
cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0Q2FsbGJh
Y2ssIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04MzIsNyArODQxLDcgQEAgc3Rh
dGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiBhc3lu
Y1Jlc3VsdCwgZ3BvaW50ZXIgZGEKIAogICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0
cmVhbV9yZWFkX2ZpbmlzaChkLT5tX2lucHV0U3RyZWFtLmdldCgpLCBhc3luY1Jlc3VsdCwgJmVy
cm9yLm91dFB0cigpKTsKICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgU291cFVSSSogdXJpID0g
d2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAg
ICAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3NvdXBSZXF1ZXN0
LmdldCgpKTsKICAgICAgICAgR093blB0cjxjaGFyPiB1cmlTdHIoc291cF91cmlfdG9fc3RyaW5n
KHVyaSwgZmFsc2UpKTsKICAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVh
cmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLCBlcnJvci0+Y29kZSwgdXJpU3RyLmdldCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4
KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKQEAgLTg4MSw2ICs4OTAsOCBAQCBzdGF0aWMg
Ym9vbCBzdGFydEdpbyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBLVVJMIHVybCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSBoYW5kbGUtPmRlZmF1
bHRTZXNzaW9uKCk7CisgICAgZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoc2Vzc2lvbik7Cisg
ICAgU291cFJlcXVlc3RlciogcmVxdWVzdGVyID0gU09VUF9SRVFVRVNURVIoc291cF9zZXNzaW9u
X2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9SRVFVRVNURVIpKTsKICAgICBSZXNvdXJj
ZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwogCiAgICAgLy8gR0lP
IGRvZXNuJ3Qga25vdyBob3cgdG8gaGFuZGxlIHJlZnMgYW5kIHF1ZXJpZXMsIHNvIHJlbW92ZSB0
aGVtCkBAIC04OTIsNyArOTAzLDcgQEAgc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwgS1VSTCB1cmwpCiAgICAgQ1N0cmluZyB1cmxTdHIgPSB1cmwuc3RyaW5nKCku
dXRmOCgpOwogCiAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIGQtPm1fc291cFJlcXVl
c3QgPSBhZG9wdEdSZWYod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0
ZXIuZ2V0KCksIHVybFN0ci5kYXRhKCksIHNlc3Npb24sICZlcnJvci5vdXRQdHIoKSkpOworICAg
IGQtPm1fc291cFJlcXVlc3QgPSBhZG9wdEdSZWYoc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChyZXF1
ZXN0ZXIsIHVybFN0ci5kYXRhKCksICZlcnJvci5vdXRQdHIoKSkpOwogICAgIGlmIChlcnJvcikg
ewogICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gMDsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtOTA0LDcgKzkxNSw3IEBAIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIEtVUkwgdXJsKQogICAgIGhhbmRsZS0+cmVmKCk7CiAKICAgICBkLT5tX2NhbmNlbGxh
YmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwotICAgIHdlYmtpdF9zb3VwX3Jl
cXVlc3Rfc2VuZF9hc3luYyhkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBkLT5tX2NhbmNlbGxhYmxl
LmdldCgpLCBzZW5kUmVxdWVzdENhbGxiYWNrLCAwKTsKKyAgICBzb3VwX3JlcXVlc3Rfc2VuZF9h
c3luYyhkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLCBzZW5k
UmVxdWVzdENhbGxiYWNrLCAwKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5
LWlucHV0LXN0cmVhbS5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjMTQ4NjNiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYworKysgL2Rldi9u
dWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRl
bnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwg
Uy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0K
LSNpbmNsdWRlICJzb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCIKLQotI2luY2x1ZGUgPGxp
YnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0K
LSNkZWZpbmUgSU5JVF9TVFJJTkcgIjxodG1sPjxoZWFkPjx0aXRsZT5PTUchPC90aXRsZT48L2hl
YWQ+PGJvZHk+PHRhYmxlPiIKLSNkZWZpbmUgRVhJVF9TVFJJTkcgIjwvdGFibGU+PC9odG1sPiIK
LQotR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtLCB3ZWJraXRf
c291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtLCBHX1RZUEVfSU5QVVRfU1RSRUFNKQotCi1zdGF0
aWMgU291cEJ1ZmZlciAqCi13ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNl
X2luZm8gKFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqIHN0cmVhbSwKLQkJCQkJICAg
ICAgIEdGaWxlSW5mbyAqIGluZm8pCi17Ci0JU291cEJ1ZmZlciAqYnVmZmVyOwotCUdTdHJpbmcg
KnN0cmluZzsKLQljb25zdCBjaGFyICpzOwotCWNoYXIgKmVzY2FwZWQsICpwYXRoLCAqeG1sX3N0
cmluZzsKLQotCWlmICghZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pKQotCQlyZXR1cm4gTlVM
TDsKLQotCXMgPSBnX2ZpbGVfaW5mb19nZXRfZGlzcGxheV9uYW1lIChpbmZvKTsKLQlpZiAoIXMp
IHsKLQkJcyA9IGdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKTsKLQkJLyogRklYTUU6IGNvbnZl
cnQgc29tZWhvdz8gKi8KLQkJaWYgKCFnX3V0ZjhfdmFsaWRhdGUgKHMsIC0xLCBOVUxMKSkKLQkJ
CXJldHVybiBOVUxMOwotCX0KLQlzdHJpbmcgPSBnX3N0cmluZ19uZXcgKCI8dHI+Iik7Ci0KLQl4
bWxfc3RyaW5nID0gZ19tYXJrdXBfZXNjYXBlX3RleHQgKHMsIC0xKTsKLQllc2NhcGVkID0gZ191
cmlfZXNjYXBlX3N0cmluZyAoZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pLCBOVUxMLCBGQUxT
RSk7Ci0JcGF0aCA9IGdfc3RyY29uY2F0IChzdHJlYW0tPnVyaSwgIi8iLCBlc2NhcGVkLCBOVUxM
KTsKLQlnX2ZyZWUgKGVzY2FwZWQpOwotCWdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0cmluZywg
Ijx0ZD48YSBocmVmPVwiJXNcIj4lczwvYT48L3RkPiIsIHBhdGgsIHhtbF9zdHJpbmcpOwotCWdf
ZnJlZSAocGF0aCk7Ci0JZ19mcmVlICh4bWxfc3RyaW5nKTsKLQlnX3N0cmluZ19hcHBlbmQgKHN0
cmluZywgIjwvdHI+Iik7Ci0KLQlidWZmZXIgPSBzb3VwX2J1ZmZlcl9uZXcgKFNPVVBfTUVNT1JZ
X1RBS0UsIHN0cmluZy0+c3RyLCBzdHJpbmctPmxlbik7Ci0JZ19zdHJpbmdfZnJlZSAoc3RyaW5n
LCBGQUxTRSk7Ci0KLQlyZXR1cm4gYnVmZmVyOwotfQotCi1zdGF0aWMgU291cEJ1ZmZlciAqCi13
ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlIChXZWJLaXRT
b3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gICpzdHJlYW0sCi0JCQkJCQkgICBHQ2FuY2VsbGFibGUg
ICAgICAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJCSAgIEdFcnJvciAgICAgICAgICAgICAg
ICAgICAqKmVycm9yKQotewotCUdGaWxlSW5mbyAqaW5mbzsKLQlTb3VwQnVmZmVyICpidWZmZXI7
Ci0JR0Vycm9yICplcnIgPSBOVUxMOwotCi0JZG8gewotCQlpbmZvID0gZ19maWxlX2VudW1lcmF0
b3JfbmV4dF9maWxlIChzdHJlYW0tPmVudW1lcmF0b3IsIGNhbmNlbGxhYmxlLCAmZXJyKTsKLQkJ
aWYgKGluZm8gPT0gTlVMTCkgewotCQkJaWYgKGVycikgewotCQkJCWdfcHJvcGFnYXRlX2Vycm9y
IChlcnJvciwgZXJyKTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0gZWxzZSBpZiAoIXN0cmVhbS0+
ZG9uZSkgewotCQkJCXN0cmVhbS0+ZG9uZSA9IFRSVUU7Ci0JCQkJcmV0dXJuIHNvdXBfYnVmZmVy
X25ldyAoU09VUF9NRU1PUllfU1RBVElDLAotCQkJCQkJCUVYSVRfU1RSSU5HLAotCQkJCQkJCXNp
emVvZiAoRVhJVF9TVFJJTkcpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9
Ci0JCX0KLQotCQlidWZmZXIgPSB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3Bh
cnNlX2luZm8gKHN0cmVhbSwgaW5mbyk7Ci0JfSB3aGlsZSAoYnVmZmVyID09IE5VTEwpOwotCi0J
cmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RhdGljIGdzc2l6ZQotd2Via2l0X3NvdXBfZGlyZWN0b3J5
X2lucHV0X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0gICppbnB1dCwKLQkJCQkJIHZvaWQgICAg
ICAgICAgKmJ1ZmZlciwKLQkJCQkJIGdzaXplIGNvdW50LAotCQkJCQkgR0NhbmNlbGxhYmxlICAq
Y2FuY2VsbGFibGUsCi0JCQkJCSBHRXJyb3IgICAgICAgKiplcnJvcikKLXsKLQlXZWJLaXRTb3Vw
RGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSA9IFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBV
VF9TVFJFQU0gKGlucHV0KTsKLQlnc2l6ZSB0b3RhbCwgc2l6ZTsKLQotCWZvciAodG90YWwgPSAw
OyB0b3RhbCA8IGNvdW50OyB0b3RhbCArPSBzaXplKSB7Ci0JCWlmIChzdHJlYW0tPmJ1ZmZlciA9
PSBOVUxMKSB7Ci0JCQlzdHJlYW0tPmJ1ZmZlciA9IHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1
dF9zdHJlYW1fcmVhZF9uZXh0X2ZpbGUgKHN0cmVhbSwgY2FuY2VsbGFibGUsIGVycm9yKTsKLQkJ
CWlmIChzdHJlYW0tPmJ1ZmZlciA9PSBOVUxMKSB7Ci0JCQkJLyogRklYTUU6IElzIHRoaXMgY29y
cmVjdCBvciBzaG91bGQgd2UgZm9yd2FyZCB0aGUgZXJyb3I/ICovCi0JCQkJaWYgKHRvdGFsKQot
CQkJCQlnX2NsZWFyX2Vycm9yIChlcnJvcik7Ci0JCQkJcmV0dXJuIHRvdGFsOwotCQkJfQotCQl9
Ci0KLQkJc2l6ZSA9IE1JTiAoc3RyZWFtLT5idWZmZXItPmxlbmd0aCwgY291bnQgLSB0b3RhbCk7
Ci0JCW1lbWNweSAoKGNoYXIgKilidWZmZXIgKyB0b3RhbCwgc3RyZWFtLT5idWZmZXItPmRhdGEs
IHNpemUpOwotCQlpZiAoc2l6ZSA9PSBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoKSB7Ci0JCQlzb3Vw
X2J1ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7Ci0JCQlzdHJlYW0tPmJ1ZmZlciA9IE5VTEw7
Ci0JCX0gZWxzZSB7Ci0JCQlTb3VwQnVmZmVyICpzdWIgPSBzb3VwX2J1ZmZlcl9uZXdfc3ViYnVm
ZmVyIChzdHJlYW0tPmJ1ZmZlciwKLQkJCQkJCQkJICAgICBzaXplLAotCQkJCQkJCQkgICAgIHN0
cmVhbS0+YnVmZmVyLT5sZW5ndGggLSBzaXplKTsKLQkJCXNvdXBfYnVmZmVyX2ZyZWUgKHN0cmVh
bS0+YnVmZmVyKTsKLQkJCXN0cmVhbS0+YnVmZmVyID0gc3ViOwotCQl9Ci0JfQotCi0JcmV0dXJu
IHRvdGFsOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1
dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAgKmlucHV0LAotCQkJCQkgIEdDYW5jZWxsYWJs
ZSAgKmNhbmNlbGxhYmxlLAotCQkJCQkgIEdFcnJvciAgICAgICAqKmVycm9yKQotewotCVdlYktp
dFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtID0gV0VCS0lUX1NPVVBfRElSRUNUT1JZ
X0lOUFVUX1NUUkVBTSAoaW5wdXQpOwotCWdib29sZWFuIHJlc3VsdDsKLQotCWlmIChzdHJlYW0t
PmJ1ZmZlcikgewotCQlzb3VwX2J1ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7Ci0JCXN0cmVh
bS0+YnVmZmVyID0gTlVMTDsKLQl9Ci0KLQlyZXN1bHQgPSBnX2ZpbGVfZW51bWVyYXRvcl9jbG9z
ZSAoc3RyZWFtLT5lbnVtZXJhdG9yLAotCQkJCQkgIGNhbmNlbGxhYmxlLAotCQkJCQkgIGVycm9y
KTsKLQlnX29iamVjdF91bnJlZiAoc3RyZWFtLT5lbnVtZXJhdG9yKTsKLQlzdHJlYW0tPmVudW1l
cmF0b3IgPSBOVUxMOwotCi0JZ19mcmVlIChzdHJlYW0tPnVyaSk7Ci0Jc3RyZWFtLT51cmkgPSBO
VUxMOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2Rp
cmVjdG9yeV9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCAoV2ViS2l0U291cERpcmVjdG9yeUlucHV0
U3RyZWFtQ2xhc3MgKnN0cmVhbV9jbGFzcykKLXsKLQlHSW5wdXRTdHJlYW1DbGFzcyAqaW5wdXRz
dHJlYW1fY2xhc3MgPSBHX0lOUFVUX1NUUkVBTV9DTEFTUyAoc3RyZWFtX2NsYXNzKTsKLQotCWlu
cHV0c3RyZWFtX2NsYXNzLT5yZWFkX2ZuID0gd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0
cmVhbV9yZWFkOwotCWlucHV0c3RyZWFtX2NsYXNzLT5jbG9zZV9mbiA9IHdlYmtpdF9zb3VwX2Rp
cmVjdG9yeV9pbnB1dF9zdHJlYW1fY2xvc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291
cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2luaXQgKFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0
cmVhbSAqc3RyZWFtKQotewotCXN0cmVhbS0+YnVmZmVyID0gc291cF9idWZmZXJfbmV3IChTT1VQ
X01FTU9SWV9TVEFUSUMsCi0JCQkJCSAgSU5JVF9TVFJJTkcsCi0JCQkJCSAgc2l6ZW9mIChJTklU
X1NUUklORykpOwotfQotCi1HSW5wdXRTdHJlYW0gKgotd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lu
cHV0X3N0cmVhbV9uZXcgKEdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvciwKLQkJCQkJU291cFVS
SSAgICAgICAgICp1cmkpCi17Ci0JR0lucHV0U3RyZWFtICpzdHJlYW07Ci0KLQlnX3JldHVybl92
YWxfaWZfZmFpbCAoR19JU19GSUxFX0VOVU1FUkFUT1IgKGVudW1lcmF0b3IpLCBOVUxMKTsKLQln
X3JldHVybl92YWxfaWZfZmFpbCAodXJpICE9IE5VTEwsIE5VTEwpOwotCi0Jc3RyZWFtID0gZ19v
YmplY3RfbmV3IChXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIE5VTEwp
OwotCi0JV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAoc3RyZWFtKS0+ZW51bWVy
YXRvciA9IGdfb2JqZWN0X3JlZiAoZW51bWVyYXRvcik7Ci0JV0VCS0lUX1NPVVBfRElSRUNUT1JZ
X0lOUFVUX1NUUkVBTSAoc3RyZWFtKS0+dXJpID0gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZB
TFNFKTsKLQotCXJldHVybiBzdHJlYW07Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVj
dG9yeS1pbnB1dC1zdHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM1YjBi
ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiAr
MCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0
OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVk
IEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdF
QktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fSAotI2RlZmluZSBXRUJLSVRfU09VUF9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNX0ggMQotCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1
ZGUgPGxpYnNvdXAvc291cC10eXBlcy5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC1tZXNzYWdl
LWJvZHkuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfRElS
RUNUT1JZX0lOUFVUX1NUUkVBTSAgICAgICAgICAgICh3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5w
dXRfc3RyZWFtX2dldF90eXBlICgpKQotI2RlZmluZSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5Q
VVRfU1RSRUFNKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChv
YmopLCBXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBE
aXJlY3RvcnlJbnB1dFN0cmVhbSkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBV
VF9TVFJFQU1fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNz
KSwgV0VCS0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwRGly
ZWN0b3J5SW5wdXRTdHJlYW1DbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX0RJUkVDVE9S
WV9JTlBVVF9TVFJFQU0ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAo
KG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCi0jZGVmaW5l
IFdFQktJVF9JU19TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lO
UFVUX1NUUkVBTSkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1f
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lU
X1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwRGlyZWN0b3J5SW5w
dXRTdHJlYW1DbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwRGlyZWN0b3J5SW5w
dXRTdHJlYW0gV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtOwotdHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzIFdlYktpdFNvdXBEaXJlY3RvcnlJ
bnB1dFN0cmVhbUNsYXNzOwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVh
bSB7Ci0JR0lucHV0U3RyZWFtIHBhcmVudDsKLQotCUdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRv
cjsKLQljaGFyICp1cmk7Ci0JU291cEJ1ZmZlciAqYnVmZmVyOwotCWdib29sZWFuIGRvbmU7Ci19
OwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzIHsKLQlHSW5w
dXRTdHJlYW1DbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSAgICAgICAgICB3ZWJraXRf
c291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90eXBlICh2b2lkKTsKLQotR0lucHV0U3Ry
ZWFtICp3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX25ldyAoR0ZpbGVFbnVtZXJh
dG9yICplbnVtZXJhdG9yLAotCQkJCQkJICAgICAgU291cFVSSSAgICAgICAgICp1cmkpOwotCi0K
LUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RS
RUFNX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyYTVkOTk1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMKKysr
IC9kZXYvbnVsbApAQCAtMSw5MjIgKzAsMCBAQAotLyogc291cC1pbnB1dC1zdHJlYW0uYywgYmFz
ZWQgb24gZ3NvY2tldGlucHV0c3RyZWFtLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAw
NyBSZWQgSGF0LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsCi0gKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcu
aD4KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0KLSNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAuaD4KLQotI2luY2x1ZGUgInNvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCIK
LQotc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vla2FibGVfaWZh
Y2VfaW5pdCAoR1NlZWthYmxlSWZhY2UgKnNlZWthYmxlX2lmYWNlKTsKLQotR19ERUZJTkVfVFlQ
RV9XSVRIX0NPREUgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0sIHdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtLCBHX1RZUEVfSU5QVVRfU1RSRUFNLAotCQkJIEdfSU1QTEVNRU5UX0lOVEVS
RkFDRSAoR19UWVBFX1NFRUtBQkxFLAotCQkJCQkJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fc2Vla2FibGVfaWZhY2VfaW5pdCkpCi0KLXR5cGVkZWYgdm9pZCAoKldlYktpdFNvdXBIVFRQ
SW5wdXRTdHJlYW1DYWxsYmFjaykoR0lucHV0U3RyZWFtICopOwotCi10eXBlZGVmIHN0cnVjdCB7
Ci0JU291cFNlc3Npb24gKnNlc3Npb247Ci0JR01haW5Db250ZXh0ICphc3luY19jb250ZXh0Owot
CVNvdXBNZXNzYWdlICptc2c7Ci0JZ2Jvb2xlYW4gZ290X2hlYWRlcnMsIGZpbmlzaGVkOwotCWdv
ZmZzZXQgb2Zmc2V0OwotCi0JR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKLQlHU291cmNlICpj
YW5jZWxfd2F0Y2g7Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGdvdF9oZWFk
ZXJzX2NiOwotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBnb3RfY2h1bmtfY2I7
Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGZpbmlzaGVkX2NiOwotCVdlYktp
dFNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBjYW5jZWxsZWRfY2I7Ci0KLQlndWNoYXIgKmxl
ZnRvdmVyX2J1ZmZlcjsKLQlnc2l6ZSBsZWZ0b3Zlcl9idWZzaXplLCBsZWZ0b3Zlcl9vZmZzZXQ7
Ci0KLQlndWNoYXIgKmNhbGxlcl9idWZmZXI7Ci0JZ3NpemUgY2FsbGVyX2J1ZnNpemUsIGNhbGxl
cl9ucmVhZDsKLQlHQXN5bmNSZWFkeUNhbGxiYWNrIG91dHN0YW5kaW5nX2NhbGxiYWNrOwotCUdT
aW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0OwotfSBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZTsKLSNkZWZpbmUgV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUo
bykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0hU
VFBfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSkpCi0KLQot
c3RhdGljIGdzc2l6ZSAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1
dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCi0JCQkJCQkgICAgdm9pZCAgICAgICAgICAgICAgICAg
KmJ1ZmZlciwKLQkJCQkJCSAgICBnc2l6ZSBjb3VudCwKLQkJCQkJCSAgICBHQ2FuY2VsbGFibGUg
ICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCQkgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVy
cm9yKTsKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9z
ZSAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwKLQkJCQkJCSAgICAgR0NhbmNlbGxhYmxl
ICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkJICAgICBHRXJyb3IgICAgICAgICAgICAgICoq
ZXJyb3IpOwotc3RhdGljIHZvaWQgICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Jl
YWRfYXN5bmMgKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCi0JCQkJCQkJICB2b2lkICAg
ICAgICAgICAgICAgICAqYnVmZmVyLAotCQkJCQkJCSAgZ3NpemUgY291bnQsCi0JCQkJCQkJICBp
bnQgaW9fcHJpb3JpdHksCi0JCQkJCQkJICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFi
bGUsCi0JCQkJCQkJICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAotCQkJCQkJCSAgZ3Bv
aW50ZXIgZGF0YSk7Ci1zdGF0aWMgZ3NzaXplICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fcmVhZF9maW5pc2ggKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCi0JCQkJCQkJICAg
R0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKLQkJCQkJCQkgICBHRXJyb3IgICAgICAgICAg
ICAgICoqZXJyb3IpOwotc3RhdGljIHZvaWQgICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX2Nsb3NlX2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAotCQkJCQkJCSAg
IGludCBpb19wcmlvcml0eSwKLQkJCQkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2Vs
bGFibGUsCi0JCQkJCQkJICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJCQkg
ICBncG9pbnRlciBkYXRhKTsKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9jbG9zZV9maW5pc2ggKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCi0JCQkJ
CQkJICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCi0JCQkJCQkJICAgIEdFcnJvciAg
ICAgICAgICAgICAgKiplcnJvcik7Ci0KLXN0YXRpYyBnb2Zmc2V0ICB3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV90ZWxsIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUpOwotCi1z
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWsgKEdT
ZWVrYWJsZSAgICAgICAgICAgICpzZWVrYWJsZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VlayAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxl
LAotCQkJCQkJICAgIGdvZmZzZXQgb2Zmc2V0LAotCQkJCQkJICAgIEdTZWVrVHlwZSB0eXBlLAot
CQkJCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJCSAgICBH
RXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlIChHU2Vla2FibGUgICAgICAgICAgICAq
c2Vla2FibGUpOwotc3RhdGljIGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3RydW5jYXRlIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUsCi0JCQkJCQkJZ29mZnNl
dCBvZmZzZXQsCi0JCQkJCQkJR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJ
CQkJCUdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzIChTb3VwTWVzc2FnZSAqbXNnLCBncG9p
bnRlciBzdHJlYW0pOwotc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
Z290X2NodW5rIChTb3VwTWVzc2FnZSAqbXNnLCBTb3VwQnVmZmVyICpjaHVuaywgZ3BvaW50ZXIg
c3RyZWFtKTsKLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Zpbmlz
aGVkIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pOwotCi1zdGF0aWMgdm9pZAot
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkK
LXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW0gPSBXRUJLSVRfU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTSAob2JqZWN0KTsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0
ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJl
YW0pOwotCi0JZ19vYmplY3RfdW5yZWYgKHByaXYtPnNlc3Npb24pOwotCi0JZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChwcml2LT5tc2csIEdfQ0FMTEJBQ0sgKHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzKSwgc3RyZWFtKTsKLQlnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYtPm1zZywgR19DQUxMQkFDSyAod2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rKSwgc3RyZWFtKTsKLQlnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYtPm1zZywgR19DQUxMQkFDSyAod2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0pOwotCWdfb2JqZWN0X3Vu
cmVmIChwcml2LT5tc2cpOwotCWdfZnJlZSAocHJpdi0+bGVmdG92ZXJfYnVmZmVyKTsKLQotCWlm
IChHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUpCi0JCSgqR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKShvYmplY3QpOwotfQotCi1zdGF0aWMg
dm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCAoV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbUNsYXNzICprbGFzcykKLXsKLQlHT2JqZWN0Q2xhc3MgKmdvYmplY3Rf
Y2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCUdJbnB1dFN0cmVhbUNsYXNzICpzdHJl
YW1fY2xhc3MgPSBHX0lOUFVUX1NUUkVBTV9DTEFTUyAoa2xhc3MpOwotCi0JZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZSkpOwotCi0JZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9maW5hbGl6ZTsKLQotCXN0cmVhbV9jbGFzcy0+cmVhZF9mbiA9IHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQ7Ci0Jc3RyZWFtX2NsYXNzLT5jbG9zZV9mbiA9IHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlOwotCXN0cmVhbV9jbGFzcy0+cmVhZF9h
c3luYyA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmM7Ci0Jc3RyZWFt
X2NsYXNzLT5yZWFkX2ZpbmlzaCA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRf
ZmluaXNoOwotCXN0cmVhbV9jbGFzcy0+Y2xvc2VfYXN5bmMgPSB3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9jbG9zZV9hc3luYzsKLQlzdHJlYW1fY2xhc3MtPmNsb3NlX2ZpbmlzaCA9IHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaDsKLX0KLQotc3RhdGljIHZv
aWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQgKEdT
ZWVrYWJsZUlmYWNlICpzZWVrYWJsZV9pZmFjZSkKLXsKLQlzZWVrYWJsZV9pZmFjZS0+dGVsbCA9
IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RlbGw7Ci0Jc2Vla2FibGVfaWZhY2UtPmNh
bl9zZWVrID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWs7Ci0Jc2Vla2Fi
bGVfaWZhY2UtPnNlZWsgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrOwotCXNl
ZWthYmxlX2lmYWNlLT5jYW5fdHJ1bmNhdGUgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9jYW5fdHJ1bmNhdGU7Ci0Jc2Vla2FibGVfaWZhY2UtPnRydW5jYXRlX2ZuID0gd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9pbml0IChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpz
dHJlYW0pCi17Ci0JOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fcXVldWVfbWVzc2FnZSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtKQot
ewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBf
SFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0KLQlwcml2LT5nb3RfaGVh
ZGVycyA9IHByaXYtPmZpbmlzaGVkID0gRkFMU0U7Ci0KLQkvKiBBZGQgYW4gZXh0cmEgcmVmIHNp
bmNlIHNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIHN0ZWFscyBvbmUgKi8KLQlnX29iamVjdF9y
ZWYgKHByaXYtPm1zZyk7Ci0Jc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2UgKHByaXYtPnNlc3Np
b24sIHByaXYtPm1zZywgTlVMTCwgTlVMTCk7Ci19Ci0KLS8qKgotICogd2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fbmV3OgotICogQHNlc3Npb246IHRoZSAjU291cFNlc3Npb24gdG8gdXNl
Ci0gKiBAbXNnOiB0aGUgI1NvdXBNZXNzYWdlIHdob3NlIHJlc3BvbnNlIHdpbGwgYmUgc3RyZWFt
ZWQKLSAqCi0gKiBQcmVwYXJlcyB0byBzZW5kIEBtc2cgb3ZlciBAc2Vzc2lvbiwgYW5kIHJldHVy
bnMgYSAjR0lucHV0U3RyZWFtCi0gKiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlYWQgdGhlIHJlc3Bv
bnNlLgotICoKLSAqIEBtc2cgbWF5IG5vdCBiZSBzZW50IHVudGlsIHRoZSBmaXJzdCByZWFkIGNh
bGw7IGlmIHlvdSBuZWVkIHRvIGxvb2sKLSAqIGF0IHRoZSBzdGF0dXMgY29kZSBvciByZXNwb25z
ZSBoZWFkZXJzIGJlZm9yZSByZWFkaW5nIHRoZSBib2R5LCB5b3UKLSAqIGNhbiB1c2Ugd2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCgpIG9yIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlbmRfYXN5bmMoKQotICogdG8gZm9yY2UgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCBh
bmQgdGhlIHJlc3BvbnNlIGhlYWRlcnMgcmVhZC4KLSAqCi0gKiBJZiBAbXNnIGdldHMgYSBub24t
Mnh4IHJlc3VsdCwgdGhlIGZpcnN0IHJlYWQgKG9yIHNlbmQpIHdpbGwgcmV0dXJuCi0gKiBhbiBl
cnJvciB3aXRoIHR5cGUgJVdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hUVFBfRVJST1Iu
Ci0gKgotICogSW50ZXJuYWxseSwgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gaXMgaW1wbGVt
ZW50ZWQgdXNpbmcgYXN5bmNocm9ub3VzIEkvTywKLSAqIHNvIGlmIHlvdSBhcmUgdXNpbmcgdGhl
IHN5bmNocm9ub3VzIEFQSSAoZWcsCi0gKiBnX2lucHV0X3N0cmVhbV9yZWFkKCkpLCB5b3Ugc2hv
dWxkIGNyZWF0ZSBhIG5ldyAjR01haW5Db250ZXh0IGFuZAotICogc2V0IGl0IGFzIHRoZSAlU09V
UF9TRVNTSU9OX0FTWU5DX0NPTlRFWFQgcHJvcGVydHkgb24gQHNlc3Npb24uIChJZgotICogeW91
IGRvbid0LCB0aGVuIHN5bmNocm9ub3VzICNHSW5wdXRTdHJlYW0gY2FsbHMgd2lsbCBjYXVzZSB0
aGUgbWFpbgotICogbG9vcCB0byBiZSBydW4gcmVjdXJzaXZlbHkuKSBUaGUgYXN5bmMgI0dJbnB1
dFN0cmVhbSBBUEkgd29ya3MgZmluZQotICogd2l0aCAlU09VUF9TRVNTSU9OX0FTWU5DX0NPTlRF
WFQgZWl0aGVyIHNldCBvciB1bnNldC4KLSAqCi0gKiBSZXR1cm5zOiBhIG5ldyAjR0lucHV0U3Ry
ZWFtLgotICoqLwotV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqCi13ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9uZXcgKFNvdXBTZXNzaW9uICpzZXNzaW9uLCBTb3VwTWVzc2FnZSAqbXNn
KQotewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbTsKLQlXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdjsKLQotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQ
X0lTX01FU1NBR0UgKG1zZyksIE5VTEwpOwotCi0Jc3RyZWFtID0gZ19vYmplY3RfbmV3IChXRUJL
SVRfVFlQRV9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNLCBOVUxMKTsKLQlwcml2ID0gV0VCS0lUX1NP
VVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0KLQlwcml2LT5zZXNz
aW9uID0gZ19vYmplY3RfcmVmIChzZXNzaW9uKTsKLQlwcml2LT5hc3luY19jb250ZXh0ID0gc291
cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChzZXNzaW9uKTsKLQlwcml2LT5tc2cgPSBnX29i
amVjdF9yZWYgKG1zZyk7Ci0KLQlnX3NpZ25hbF9jb25uZWN0IChtc2csICJnb3RfaGVhZGVycyIs
Ci0JCQkgIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFk
ZXJzKSwgc3RyZWFtKTsKLQlnX3NpZ25hbF9jb25uZWN0IChtc2csICJnb3RfY2h1bmsiLAotCQkJ
ICBHX0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmspLCBz
dHJlYW0pOwotCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImZpbmlzaGVkIiwKLQkJCSAgR19DQUxM
QkFDSyAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0pOwot
Ci0Jd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcXVldWVfbWVzc2FnZSAoc3RyZWFtKTsK
LQlyZXR1cm4gc3RyZWFtOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fZ290X2hlYWRlcnMgKFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSkK
LXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQ
X0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCi0JLyogSWYgdGhlIHN0
YXR1cyBpcyB1bnN1Y2Nlc3NmdWwsIHdlIGp1c3QgaWdub3JlIHRoZSBzaWduYWwgYW5kIGxldAot
CSAqIGxpYnNvdXAga2VlcCBnb2luZyAoZXZlbnR1YWxseSBlaXRoZXIgaXQgd2lsbCByZXF1ZXVl
IHRoZSByZXF1ZXN0Ci0JICogKGFmdGVyIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uL3JlZGlyZWN0
aW9uKSwgb3IgZWxzZSB0aGUKLQkgKiAiZmluaXNoZWQiIGhhbmRsZXIgd2lsbCBydW4pLgotCSAq
LwotCWlmICghU09VUF9TVEFUVVNfSVNfU1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNfY29kZSkpCi0J
CXJldHVybjsKLQotCXByaXYtPmdvdF9oZWFkZXJzID0gVFJVRTsKLQlpZiAoIXByaXYtPmNhbGxl
cl9idWZmZXIpIHsKLQkJLyogTm90IHJlYWR5IHRvIHJlYWQgdGhlIGJvZHkgeWV0ICovCi0JCXNv
dXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBtc2cpOwotCX0KLQotCWlm
IChwcml2LT5nb3RfaGVhZGVyc19jYikKLQkJcHJpdi0+Z290X2hlYWRlcnNfY2IgKHN0cmVhbSk7
Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1
bmsgKFNvdXBNZXNzYWdlICptc2csIFNvdXBCdWZmZXIgKmNodW5rX2J1ZmZlciwKLQkJCQkJIGdw
b2ludGVyIHN0cmVhbSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJp
diA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwot
CWNvbnN0IGdjaGFyICpjaHVuayA9IGNodW5rX2J1ZmZlci0+ZGF0YTsKLQlnc2l6ZSBjaHVua19z
aXplID0gY2h1bmtfYnVmZmVyLT5sZW5ndGg7Ci0KLQkvKiBXZSBvbmx5IHBheSBhdHRlbnRpb24g
dG8gdGhlIGNodW5rIGlmIGl0J3MgcGFydCBvZiBhIHN1Y2Nlc3NmdWwKLQkgKiByZXNwb25zZS4K
LQkgKi8KLQlpZiAoIVNPVVBfU1RBVFVTX0lTX1NVQ0NFU1NGVUwgKG1zZy0+c3RhdHVzX2NvZGUp
KQotCQlyZXR1cm47Ci0KLQkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZiAocHJpdi0+Y2FsbGVyX2J1
ZnNpemUgPT0gMCB8fCBwcml2LT5sZWZ0b3Zlcl9idWZzaXplICE9IDApCi0JCWdfd2FybmluZyAo
IndlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayBjYWxsZWQgYWdhaW4gYmVm
b3JlIHByZXZpb3VzIGNodW5rIHdhcyBwcm9jZXNzZWQiKTsKLQotCS8qIENvcHkgd2hhdCB3ZSBj
YW4gaW50byBwcml2LT5jYWxsZXJfYnVmZmVyICovCi0JaWYgKHByaXYtPmNhbGxlcl9idWZzaXpl
ID4gcHJpdi0+Y2FsbGVyX25yZWFkKSB7Ci0JCWdzaXplIG5yZWFkID0gTUlOIChjaHVua19zaXpl
LCBwcml2LT5jYWxsZXJfYnVmc2l6ZSAtIHByaXYtPmNhbGxlcl9ucmVhZCk7Ci0KLQkJbWVtY3B5
IChwcml2LT5jYWxsZXJfYnVmZmVyICsgcHJpdi0+Y2FsbGVyX25yZWFkLCBjaHVuaywgbnJlYWQp
OwotCQlwcml2LT5jYWxsZXJfbnJlYWQgKz0gbnJlYWQ7Ci0JCXByaXYtPm9mZnNldCArPSBucmVh
ZDsKLQkJY2h1bmsgKz0gbnJlYWQ7Ci0JCWNodW5rX3NpemUgLT0gbnJlYWQ7Ci0JfQotCi0JaWYg
KGNodW5rX3NpemUgPiAwKSB7Ci0JCS8qIENvcHkgdGhlIHJlc3QgaW50byBwcml2LT5sZWZ0b3Zl
cl9idWZmZXIuIElmCi0JCSAqIHRoZXJlJ3MgYWxyZWFkeSBzb21lIGRhdGEgdGhlcmUsIHJlYWxs
b2MgYW5kCi0JCSAqIGFwcGVuZC4gT3RoZXJ3aXNlIGp1c3QgY29weS4KLQkJICovCi0JCWlmIChw
cml2LT5sZWZ0b3Zlcl9idWZzaXplKSB7Ci0JCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBnX3Jl
YWxsb2MgKHByaXYtPmxlZnRvdmVyX2J1ZmZlciwKLQkJCQkJCQkgICBwcml2LT5sZWZ0b3Zlcl9i
dWZzaXplICsgY2h1bmtfc2l6ZSk7Ci0JCQltZW1jcHkgKHByaXYtPmxlZnRvdmVyX2J1ZmZlciAr
IHByaXYtPmxlZnRvdmVyX2J1ZnNpemUsCi0JCQkJY2h1bmssIGNodW5rX3NpemUpOwotCQkJcHJp
di0+bGVmdG92ZXJfYnVmc2l6ZSArPSBjaHVua19zaXplOwotCQl9IGVsc2UgewotCQkJcHJpdi0+
bGVmdG92ZXJfYnVmc2l6ZSA9IGNodW5rX3NpemU7Ci0JCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIg
PSBnX21lbWR1cCAoY2h1bmssIGNodW5rX3NpemUpOwotCQkJcHJpdi0+bGVmdG92ZXJfb2Zmc2V0
ID0gMDsKLQkJfQotCX0KLQotCXNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5zZXNz
aW9uLCBtc2cpOwotCWlmIChwcml2LT5nb3RfY2h1bmtfY2IpCi0JCXByaXYtPmdvdF9jaHVua19j
YiAoc3RyZWFtKTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX2ZpbmlzaGVkIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pCi17Ci0JV2Vi
S2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQotCXByaXYtPmZpbmlzaGVkID0gVFJV
RTsKLQotCWlmIChwcml2LT5maW5pc2hlZF9jYikKLQkJcHJpdi0+ZmluaXNoZWRfY2IgKHN0cmVh
bSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
Y2FuY2VsbGVkIChHSU9DaGFubmVsICpjaGFuLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAotCQkJ
CQkgZ3BvaW50ZXIgc3RyZWFtKQotewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRl
ICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVh
bSk7Ci0KLQlwcml2LT5jYW5jZWxfd2F0Y2ggPSBOVUxMOwotCi0Jc291cF9zZXNzaW9uX3BhdXNl
X21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7Ci0JaWYgKHByaXYtPmNhbmNlbGxl
ZF9jYikKLQkJcHJpdi0+Y2FuY2VsbGVkX2NiIChzdHJlYW0pOwotCi0JcmV0dXJuIEZBTFNFOwot
fQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9m
b3JfaW8gKEdJbnB1dFN0cmVhbSAqc3RyZWFtLAotCQkJCQkgICAgICBHQ2FuY2VsbGFibGUgKmNh
bmNlbGxhYmxlLAotCQkJCQkgICAgICBndWNoYXIgICAgICAgKmJ1ZmZlciwKLQkJCQkJICAgICAg
Z3NpemUgY291bnQpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYg
PSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQlp
bnQgY2FuY2VsX2ZkOwotCi0JcHJpdi0+Y2FuY2VsbGFibGUgPSBjYW5jZWxsYWJsZTsKLQljYW5j
ZWxfZmQgPSBnX2NhbmNlbGxhYmxlX2dldF9mZCAoY2FuY2VsbGFibGUpOwotCWlmIChjYW5jZWxf
ZmQgIT0gLTEpIHsKLQkJR0lPQ2hhbm5lbCAqY2hhbiA9IGdfaW9fY2hhbm5lbF91bml4X25ldyAo
Y2FuY2VsX2ZkKTsKLQkJcHJpdi0+Y2FuY2VsX3dhdGNoID0gc291cF9hZGRfaW9fd2F0Y2ggKHBy
aXYtPmFzeW5jX2NvbnRleHQsIGNoYW4sCi0JCQkJCQkJR19JT19JTiB8IEdfSU9fRVJSIHwgR19J
T19IVVAsCi0JCQkJCQkJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkLAot
CQkJCQkJCXN0cmVhbSk7Ci0JCWdfaW9fY2hhbm5lbF91bnJlZiAoY2hhbik7Ci0JfQotCi0JcHJp
di0+Y2FsbGVyX2J1ZmZlciA9IGJ1ZmZlcjsKLQlwcml2LT5jYWxsZXJfYnVmc2l6ZSA9IGNvdW50
OwotCXByaXYtPmNhbGxlcl9ucmVhZCA9IDA7Ci0KLQlpZiAocHJpdi0+Z290X2hlYWRlcnMpCi0J
CXNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7
Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lv
IChHSW5wdXRTdHJlYW0gKnN0cmVhbSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChz
dHJlYW0pOwotCi0JaWYgKHByaXYtPmNhbmNlbF93YXRjaCkgewotCQlnX3NvdXJjZV9kZXN0cm95
IChwcml2LT5jYW5jZWxfd2F0Y2gpOwotCQlwcml2LT5jYW5jZWxfd2F0Y2ggPSBOVUxMOwotCQln
X2NhbmNlbGxhYmxlX3JlbGVhc2VfZmQgKHByaXYtPmNhbmNlbGxhYmxlKTsKLQl9Ci0JcHJpdi0+
Y2FuY2VsbGFibGUgPSBOVUxMOwotCi0JcHJpdi0+Y2FsbGVyX2J1ZmZlciA9IE5VTEw7Ci0JcHJp
di0+Y2FsbGVyX2J1ZnNpemUgPSAwOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNldF9lcnJvcl9p
Zl9odHRwX2ZhaWxlZCAoU291cE1lc3NhZ2UgKm1zZywgR0Vycm9yICoqZXJyb3IpCi17Ci0JaWYg
KCFTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkgewotCQlnX3Nl
dF9lcnJvcl9saXRlcmFsIChlcnJvciwgU09VUF9IVFRQX0VSUk9SLAotCQkJCSAgICAgbXNnLT5z
dGF0dXNfY29kZSwgbXNnLT5yZWFzb25fcGhyYXNlKTsKLQkJcmV0dXJuIFRSVUU7Ci0JfQotCXJl
dHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdzaXplCi1yZWFkX2Zyb21fbGVmdG92ZXIgKFdlYktp
dFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2LAotCQkgICAgZ3BvaW50ZXIgYnVmZmVy
LCBnc2l6ZSBidWZzaXplKQotewotCWdzaXplIG5yZWFkOwotCi0JaWYgKHByaXYtPmxlZnRvdmVy
X2J1ZnNpemUgLSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPD0gYnVmc2l6ZSkgewotCQlucmVhZCA9
IHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgLSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQ7Ci0JCW1lbWNw
eSAoYnVmZmVyLCBwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQs
IG5yZWFkKTsKLQotCQlnX2ZyZWUgKHByaXYtPmxlZnRvdmVyX2J1ZmZlcik7Ci0JCXByaXYtPmxl
ZnRvdmVyX2J1ZmZlciA9IE5VTEw7Ci0JCXByaXYtPmxlZnRvdmVyX2J1ZnNpemUgPSBwcml2LT5s
ZWZ0b3Zlcl9vZmZzZXQgPSAwOwotCX0gZWxzZSB7Ci0JCW5yZWFkID0gYnVmc2l6ZTsKLQkJbWVt
Y3B5IChidWZmZXIsIHByaXYtPmxlZnRvdmVyX2J1ZmZlciArIHByaXYtPmxlZnRvdmVyX29mZnNl
dCwgbnJlYWQpOwotCQlwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgKz0gbnJlYWQ7Ci0JfQotCi0JcHJp
di0+b2Zmc2V0ICs9IG5yZWFkOwotCXJldHVybiBucmVhZDsKLX0KLQotLyogVGhpcyBkb2VzIHRo
ZSB3b3JrIG9mIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQoKSwgYXNzdW1pbmcg
dGhhdCB0aGUKLSAqIEdJbnB1dFN0cmVhbSBwZW5kaW5nIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBz
ZXQuIEl0IGlzIGFsc28gdXNlZCBieQotICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2VuZF9hc3luYygpIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4KLSAqLwotc3RhdGljIGdib29sZWFu
Ci13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChHSW5wdXRTdHJl
YW0gICpzdHJlYW0sCi0JCQkJCSAgICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCi0JCQkJ
CSAgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFU
RSAoc3RyZWFtKTsKLQotCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9y
X2lvIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBOVUxMLCAwKTsKLQl3aGlsZSAoIXByaXYtPmZpbmlz
aGVkICYmICFwcml2LT5nb3RfaGVhZGVycyAmJgotCSAgICAgICAhZ19jYW5jZWxsYWJsZV9pc19j
YW5jZWxsZWQgKGNhbmNlbGxhYmxlKSkKLQkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChwcml2
LT5hc3luY19jb250ZXh0LCBUUlVFKTsKLQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9k
b25lX2lvIChzdHJlYW0pOwotCi0JaWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNl
bGxlZCAoY2FuY2VsbGFibGUsIGVycm9yKSkKLQkJcmV0dXJuIEZBTFNFOwotCWVsc2UgaWYgKHNl
dF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCBlcnJvcikpCi0JCXJldHVybiBGQUxT
RTsKLQlyZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfc3luY19maW5pc2hlZCAo
R0lucHV0U3RyZWFtICpzdHJlYW0pCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZh
dGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3Ry
ZWFtKTsKLQlHRXJyb3IgKmVycm9yID0gTlVMTDsKLQotCWlmICghZ19jYW5jZWxsYWJsZV9zZXRf
ZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKLQkJc2V0X2Vy
cm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZlcnJvcik7Ci0KLQlwcml2LT5nb3RfaGVh
ZGVyc19jYiA9IE5VTEw7Ci0JcHJpdi0+ZmluaXNoZWRfY2IgPSBOVUxMOwotCi0JLyogV2FrZSB1
cCB0aGUgbWFpbiBjb250ZXh0IGl0ZXJhdGlvbiAqLwotCWdfc291cmNlX2F0dGFjaCAoZ19pZGxl
X3NvdXJjZV9uZXcgKCksIE5VTEwpOwotfQotCi0vKioKLSAqIHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3NlbmQ6Ci0gKiBAaHR0cHN0cmVhbTogYSAjV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbQotICogQGNhbmNlbGxhYmxlOiBvcHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5V
TEwgdG8gaWdub3JlLgotICogQGVycm9yOiBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXJyb3Igb2Nj
dXJpbmcsIG9yICVOVUxMIHRvIGlnbm9yZQotICoKLSAqIFN5bmNocm9ub3VzbHkgc2VuZHMgdGhl
IEhUVFAgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggQHN0cmVhbSwgYW5kCi0gKiByZWFkcyB0aGUg
cmVzcG9uc2UgaGVhZGVycy4gQ2FsbCB0aGlzIGFmdGVyIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX25ldygpCi0gKiBhbmQgYmVmb3JlIHRoZSBmaXJzdCBnX2lucHV0X3N0cmVhbV9yZWFk
KCkgaWYgeW91IHdhbnQgdG8gY2hlY2sgdGhlCi0gKiBIVFRQIHN0YXR1cyBjb2RlIGJlZm9yZSB5
b3Ugc3RhcnQgcmVhZGluZy4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIG1zZyBoYXMg
YSBzdWNjZXNzZnVsICgyeHgpIHN0YXR1cywgJUZBTFNFIGlmCi0gKiBub3QuCi0gKiovCi1nYm9v
bGVhbgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbSAgKmh0dHBzdHJlYW0sCi0JCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpj
YW5jZWxsYWJsZSwKLQkJCQkgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQotewotCVdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKGh0dHBzdHJlYW0pOwotCUdJbnB1dFN0cmVhbSAqaXN0
cmVhbSA9IChHSW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOwotCWdib29sZWFuIHJlc3VsdDsKLQot
CWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAo
aHR0cHN0cmVhbSksIEZBTFNFKTsKLQotCWlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcg
KGlzdHJlYW0sIGVycm9yKSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JcHJpdi0+Z290X2hlYWRlcnNf
Y2IgPSBzZW5kX3N5bmNfZmluaXNoZWQ7Ci0JcHJpdi0+ZmluaXNoZWRfY2IgPSBzZW5kX3N5bmNf
ZmluaXNoZWQ7Ci0KLQlyZXN1bHQgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5k
X2ludGVybmFsIChpc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3IpOwotCWdfaW5wdXRfc3RyZWFt
X2NsZWFyX3BlbmRpbmcgKGlzdHJlYW0pOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGlj
IGdzc2l6ZQotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZCAoR0lucHV0U3RyZWFt
ICpzdHJlYW0sCi0JCQkJICAgIHZvaWQgICAgICAgICAqYnVmZmVyLAotCQkJCSAgICBnc2l6ZSBj
b3VudCwKLQkJCQkgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKLQkJCQkgICAgR0Vycm9y
ICAgICAgKiplcnJvcikKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJp
diA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwot
Ci0JaWYgKHByaXYtPmZpbmlzaGVkKQotCQlyZXR1cm4gMDsKLQotCS8qIElmIHRoZXJlIGlzIGRh
dGEgbGVmdG92ZXIgZnJvbSBhIHByZXZpb3VzIHJlYWQsIHJldHVybiBpdC4gKi8KLQlpZiAocHJp
di0+bGVmdG92ZXJfYnVmc2l6ZSkKLQkJcmV0dXJuIHJlYWRfZnJvbV9sZWZ0b3ZlciAocHJpdiwg
YnVmZmVyLCBjb3VudCk7Ci0KLQkvKiBObyBsZWZ0b3ZlciBkYXRhLCBhY2NlcHQgb25lIGNodW5r
IGZyb20gdGhlIG5ldHdvcmsgKi8KLQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVw
YXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgYnVmZmVyLCBjb3VudCk7Ci0Jd2hpbGUg
KCFwcml2LT5maW5pc2hlZCAmJiBwcml2LT5jYWxsZXJfbnJlYWQgPT0gMCAmJgotCSAgICAgICAh
Z19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGNhbmNlbGxhYmxlKSkKLQkJZ19tYWluX2NvbnRl
eHRfaXRlcmF0aW9uIChwcml2LT5hc3luY19jb250ZXh0LCBUUlVFKTsKLQl3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOwotCi0JaWYgKHByaXYtPmNhbGxlcl9u
cmVhZCA+IDApCi0JCXJldHVybiBwcml2LT5jYWxsZXJfbnJlYWQ7Ci0KLQlpZiAoZ19jYW5jZWxs
YWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChjYW5jZWxsYWJsZSwgZXJyb3IpKQotCQlyZXR1
cm4gLTE7Ci0JZWxzZSBpZiAoc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csIGVy
cm9yKSkKLQkJcmV0dXJuIC0xOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAq
c3RyZWFtLAotCQkJCSAgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKLQkJCQkgICAgIEdF
cnJvciAgICAgICoqZXJyb3IpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUg
KnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFt
KTsKLQotCWlmICghcHJpdi0+ZmluaXNoZWQpCi0JCXNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2Fn
ZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwotCi0J
cmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13cmFwcGVyX2NhbGxiYWNrIChHT2JqZWN0
ICpzb3VyY2Vfb2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlcywKLQkJICBncG9pbnRlciB1c2VyX2Rh
dGEpCi17Ci0JR0lucHV0U3RyZWFtICpzdHJlYW0gPSBHX0lOUFVUX1NUUkVBTSAoc291cmNlX29i
amVjdCk7Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRf
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQotCWdfaW5wdXRf
c3RyZWFtX2NsZWFyX3BlbmRpbmcgKHN0cmVhbSk7Ci0JaWYgKHByaXYtPm91dHN0YW5kaW5nX2Nh
bGxiYWNrKQotCQkoKnByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrKShzb3VyY2Vfb2JqZWN0LCBy
ZXMsIHVzZXJfZGF0YSk7Ci0JcHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2sgPSBOVUxMOwotCWdf
b2JqZWN0X3VucmVmIChzdHJlYW0pOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF9hc3luY190aHJl
YWQgKEdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzLAotCQkgICBHT2JqZWN0ICpvYmplY3QsCi0JCSAg
IEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUpCi17Ci0JR0Vycm9yICplcnJvciA9IE5VTEw7Ci0J
Z2Jvb2xlYW4gc3VjY2VzczsKLQotCXN1Y2Nlc3MgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9zZW5kX2ludGVybmFsIChHX0lOUFVUX1NUUkVBTSAob2JqZWN0KSwKLQkJCQkJCQljYW5j
ZWxsYWJsZSwgJmVycm9yKTsKLQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9v
bGVhbiAocmVzLCBzdWNjZXNzKTsKLQlpZiAoZXJyb3IpIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X3NldF9mcm9tX2Vycm9yIChyZXMsIGVycm9yKTsKLQkJZ19lcnJvcl9mcmVlIChlcnJvcik7
Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vu
ZF9hc3luY19pbl90aHJlYWQgKEdJbnB1dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKLQkJCQkJCSAg
ICBpbnQgaW9fcHJpb3JpdHksCi0JCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2Vs
bGFibGUsCi0JCQkJCQkgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJCSAg
ICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXM7Ci0KLQly
ZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwgY2FsbGJh
Y2ssIHVzZXJfZGF0YSwKLQkJCQkJIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRf
YXN5bmNfaW5fdGhyZWFkKTsKLQlnX3NpbXBsZV9hc3luY19yZXN1bHRfcnVuX2luX3RocmVhZCAo
cmVzLCBzZW5kX2FzeW5jX3RocmVhZCwKLQkJCQkJICAgICBpb19wcmlvcml0eSwgY2FuY2VsbGFi
bGUpOwotCWdfb2JqZWN0X3VucmVmIChyZXMpOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF9hc3lu
Y19maW5pc2hlZCAoR0lucHV0U3RyZWFtICpzdHJlYW0pCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRf
UFJJVkFURSAoc3RyZWFtKTsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKLQlHRXJyb3Ig
KmVycm9yID0gTlVMTDsKLQotCWlmICghZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2Vs
bGVkIChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKLQkJc2V0X2Vycm9yX2lmX2h0dHBfZmFp
bGVkIChwcml2LT5tc2csICZlcnJvcik7Ci0KLQlwcml2LT5nb3RfaGVhZGVyc19jYiA9IE5VTEw7
Ci0JcHJpdi0+ZmluaXNoZWRfY2IgPSBOVUxMOwotCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX2RvbmVfaW8gKHN0cmVhbSk7Ci0KLQlyZXN1bHQgPSBwcml2LT5yZXN1bHQ7Ci0JcHJpdi0+
cmVzdWx0ID0gTlVMTDsKLQotCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29s
ZWFuIChyZXN1bHQsIGVycm9yID09IE5VTEwpOwotCWlmIChlcnJvcikgewotCQlnX3NpbXBsZV9h
c3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlc3VsdCwgZXJyb3IpOwotCQlnX2Vycm9yX2Zy
ZWUgKGVycm9yKTsKLQl9Ci0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChyZXN1bHQp
OwotCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbnRlcm5hbCAoR0lucHV0U3RyZWFtICAg
ICAgICAqc3RyZWFtLAotCQkJCQkJICAgaW50IGlvX3ByaW9yaXR5LAotCQkJCQkJICAgR0NhbmNl
bGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNr
IGNhbGxiYWNrLAotCQkJCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCVdlYktpdFNvdXBI
VFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJF
QU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0KLQlnX29iamVjdF9yZWYgKHN0cmVhbSk7Ci0JcHJp
di0+b3V0c3RhbmRpbmdfY2FsbGJhY2sgPSBjYWxsYmFjazsKLQotCS8qIElmIHRoZSBzZXNzaW9u
IHVzZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0aGVuIHdlIGNhbiBkbwotCSAqIGFzeW5j
IEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMgb3duIG1haW4gY29udGV4dCwgaXQncwot
CSAqIGVhc2llciB0byBqdXN0IHJ1biBpdCBpbiBhbm90aGVyIHRocmVhZC4KLQkgKi8KLQlpZiAo
c291cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChwcml2LT5zZXNzaW9uKSkgewotCQl3ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCAoc3RyZWFtLCBp
b19wcmlvcml0eSwgY2FuY2VsbGFibGUsCi0JCQkJCQkJICAgICB3cmFwcGVyX2NhbGxiYWNrLCB1
c2VyX2RhdGEpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBzZW5k
X2FzeW5jX2ZpbmlzaGVkOwotCXByaXYtPmZpbmlzaGVkX2NiID0gc2VuZF9hc3luY19maW5pc2hl
ZDsKLQotCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJl
YW0sIGNhbmNlbGxhYmxlLCBOVUxMLCAwKTsKLQlwcml2LT5yZXN1bHQgPSBnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwKLQkJCQkJCSAgd3JhcHBlcl9jYWxsYmFj
aywgdXNlcl9kYXRhLAotCQkJCQkJICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5k
X2FzeW5jKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5k
X2FzeW5jOgotICogQGh0dHBzdHJlYW06IGEgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0KLSAq
IEBpb19wcmlvcml0eTogdGhlIGlvIHByaW9yaXR5IG9mIHRoZSByZXF1ZXN0LgotICogQGNhbmNl
bGxhYmxlOiBvcHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8gaWdub3JlLgot
ICogQGNhbGxiYWNrOiBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNm
aWVkCi0gKiBAdXNlcl9kYXRhOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9u
Ci0gKgotICogQXN5bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBhc3NvY2lhdGVk
IHdpdGggQHN0cmVhbSwgYW5kCi0gKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVycy4gQ2FsbCB0
aGlzIGFmdGVyIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldygpCi0gKiBhbmQgYmVm
b3JlIHRoZSBmaXJzdCBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKCkgaWYgeW91IHdhbnQgdG8K
LSAqIGNoZWNrIHRoZSBIVFRQIHN0YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQgcmVhZGluZy4K
LSAqKi8KLXZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKFdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCi0JCQkJCSAgaW50IGlvX3ByaW9y
aXR5LAotCQkJCQkgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkgIEdB
c3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkJCSAgZ3BvaW50ZXIgdXNlcl9kYXRhKQot
ewotCUdJbnB1dFN0cmVhbSAqaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOwot
CUdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0JZ19yZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NP
VVBfSFRUUF9JTlBVVF9TVFJFQU0gKGh0dHBzdHJlYW0pKTsKLQotCWlmICghZ19pbnB1dF9zdHJl
YW1fc2V0X3BlbmRpbmcgKGlzdHJlYW0sICZlcnJvcikpIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVw
b3J0X2dlcnJvcl9pbl9pZGxlIChHX09CSkVDVCAoaHR0cHN0cmVhbSksCi0JCQkJCQkgICAgICBj
YWxsYmFjaywKLQkJCQkJCSAgICAgIHVzZXJfZGF0YSwKLQkJCQkJCSAgICAgIGVycm9yKTsKLQkJ
Z19lcnJvcl9mcmVlIChlcnJvcik7Ci0JCXJldHVybjsKLQl9Ci0Jd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbnRlcm5hbCAoaXN0cmVhbSwgaW9fcHJpb3JpdHksIGNh
bmNlbGxhYmxlLAotCQkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEpOwotfQotCi0vKioKLSAq
IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoOgotICogQGh0dHBzdHJl
YW06IGEgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0KLSAqIEByZXN1bHQ6IGEgI0dBc3luY1Jl
c3VsdC4KLSAqIEBlcnJvcjogYSAjR0Vycm9yIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBlcnJvciBv
Y2N1cmluZywgb3IgJU5VTEwgdG8KLSAqIGlnbm9yZS4KLSAqCi0gKiBGaW5pc2hlcyBhIHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMoKSBvcGVyYXRpb24uCi0gKgotICog
UmV0dXJuIHZhbHVlOiAlVFJVRSBpZiB0aGUgbWVzc2FnZSB3YXMgc2VudCBzdWNjZXNzZnVsbHkg
YW5kCi0gKiByZWNlaXZlZCBhIHN1Y2Nlc3NmdWwgc3RhdHVzIGNvZGUsICVGQUxTRSBpZiBub3Qu
Ci0gKiovCi1nYm9vbGVhbgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5p
c2ggKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gICpodHRwc3RyZWFtLAotCQkJCQkgICBHQXN5
bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAotCQkJCQkgICBHRXJyb3IgICAgICAgICAgICAgICoq
ZXJyb3IpCi17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7Ci0KLQlnX3JldHVybl92YWxf
aWZfZmFpbCAoR19JU19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpLCBGQUxTRSk7Ci0Jc2lt
cGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOwotCi0JZ19yZXR1cm5fdmFsX2lm
X2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyAoc2ltcGxlKSA9PSB3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jLCBGQUxTRSk7Ci0KLQlpZiAo
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJvcikpCi0J
CXJldHVybiBGQUxTRTsKLQotCXJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jl
c19nYm9vbGVhbiAoc2ltcGxlKTsKLX0KLQotc3RhdGljIHZvaWQKLXJlYWRfYXN5bmNfZG9uZSAo
R0lucHV0U3RyZWFtICpzdHJlYW0pCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZh
dGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3Ry
ZWFtKTsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKLQlHRXJyb3IgKmVycm9yID0gTlVM
TDsKLQotCXJlc3VsdCA9IHByaXYtPnJlc3VsdDsKLQlwcml2LT5yZXN1bHQgPSBOVUxMOwotCi0J
aWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAocHJpdi0+Y2FuY2VsbGFi
bGUsICZlcnJvcikgfHwKLQkgICAgc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2cs
ICZlcnJvcikpIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXN1
bHQsIGVycm9yKTsKLQkJZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0JfSBlbHNlCi0JCWdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0LCBwcml2LT5jYWxsZXJfbnJl
YWQpOwotCi0JcHJpdi0+Z290X2NodW5rX2NiID0gTlVMTDsKLQlwcml2LT5maW5pc2hlZF9jYiA9
IE5VTEw7Ci0JcHJpdi0+Y2FuY2VsbGVkX2NiID0gTlVMTDsKLQl3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOwotCi0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2Nv
bXBsZXRlIChyZXN1bHQpOwotCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOwotfQotCi1zdGF0aWMg
dm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyAoR0lucHV0U3Ry
ZWFtICAgICAgICAqc3RyZWFtLAotCQkJCQkgIHZvaWQgICAgICAgICAgICAgICAgKmJ1ZmZlciwK
LQkJCQkJICBnc2l6ZSBjb3VudCwKLQkJCQkJICBpbnQgaW9fcHJpb3JpdHksCi0JCQkJCSAgR0Nh
bmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCSAgR0FzeW5jUmVhZHlDYWxsYmFj
ayBjYWxsYmFjaywKLQkJCQkJICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVB
TV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKLQot
CS8qIElmIHRoZSBzZXNzaW9uIHVzZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0aGVuIHdl
IGNhbiBkbwotCSAqIGFzeW5jIEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMgb3duIG1h
aW4gY29udGV4dCwgd2UgZmFsbAotCSAqIGJhY2sgdG8gdGhlIGFzeW5jLXZpYS1zeW5jLWluLWFu
b3RoZXItdGhyZWFkIGltcGxlbWVudGF0aW9uLgotCSAqLwotCWlmIChzb3VwX3Nlc3Npb25fZ2V0
X2FzeW5jX2NvbnRleHQgKHByaXYtPnNlc3Npb24pKSB7Ci0JCUdfSU5QVVRfU1RSRUFNX0NMQVNT
ICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wYXJlbnRfY2xhc3MpLT4KLQkJcmVhZF9h
c3luYyAoc3RyZWFtLCBidWZmZXIsIGNvdW50LCBpb19wcmlvcml0eSwKLQkJCSAgICBjYW5jZWxs
YWJsZSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZXN1bHQgPSBn
X3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwKLQkJCQkJICAgIGNh
bGxiYWNrLCB1c2VyX2RhdGEsCi0JCQkJCSAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9yZWFkX2FzeW5jKTsKLQotCWlmIChwcml2LT5maW5pc2hlZCkgewotCQlnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfc2V0X29wX3Jlc19nc3NpemUgKHJlc3VsdCwgMCk7Ci0JCWdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1bHQpOwotCQlnX29iamVjdF91bnJlZiAocmVz
dWx0KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplKSB7Ci0J
CWdzaXplIG5yZWFkID0gcmVhZF9mcm9tX2xlZnRvdmVyIChwcml2LCBidWZmZXIsIGNvdW50KTsK
LQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1bHQsIG5yZWFk
KTsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7Ci0J
CWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdi0+cmVzdWx0
ID0gcmVzdWx0OwotCi0JcHJpdi0+Z290X2NodW5rX2NiID0gcmVhZF9hc3luY19kb25lOwotCXBy
aXYtPmZpbmlzaGVkX2NiID0gcmVhZF9hc3luY19kb25lOwotCXByaXYtPmNhbmNlbGxlZF9jYiA9
IHJlYWRfYXN5bmNfZG9uZTsKLQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJl
X2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgYnVmZmVyLCBjb3VudCk7Ci19Ci0KLXN0YXRp
YyBnc3NpemUKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoIChHSW5w
dXRTdHJlYW0gICpzdHJlYW0sCi0JCQkJCSAgIEdBc3luY1Jlc3VsdCAgKnJlc3VsdCwKLQkJCQkJ
ICAgR0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7
Ci0KLQlnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1
bHQpLCAtMSk7Ci0Jc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOwotCWdf
cmV0dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcg
KHNpbXBsZSkgPT0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYywgLTEp
OwotCi0JcmV0dXJuIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dzc2l6ZSAoc2lt
cGxlKTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Ns
b3NlX2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgKnN0cmVhbSwKLQkJCQkJICAgaW50IGlvX3By
aW9yaXR5LAotCQkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkg
ICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAotCQkJCQkgICBncG9pbnRlciB1c2VyX2Rh
dGEpCi17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7Ci0JZ2Jvb2xlYW4gc3VjY2VzczsK
LQlHRXJyb3IgKmVycm9yID0gTlVMTDsKLQotCXJlc3VsdCA9IGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLAotCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSwK
LQkJCQkJICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jKTsKLQlz
dWNjZXNzID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UgKHN0cmVhbSwgY2Fu
Y2VsbGFibGUsICZlcnJvcik7Ci0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ2Jv
b2xlYW4gKHJlc3VsdCwgc3VjY2Vzcyk7Ci0JaWYgKGVycm9yKSB7Ci0JCWdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVzdWx0LCBlcnJvcik7Ci0JCWdfZXJyb3JfZnJlZSAo
ZXJyb3IpOwotCX0KLQotCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIChy
ZXN1bHQpOwotCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4K
LXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoR0lucHV0U3RyZWFt
ICAqc3RyZWFtLAotCQkJCQkgICAgR0FzeW5jUmVzdWx0ICAqcmVzdWx0LAotCQkJCQkgICAgR0Vy
cm9yICAgICAgICoqZXJyb3IpCi17Ci0JLyogRmFpbHVyZXMgaGFuZGxlZCBpbiBnZW5lcmljIGNs
b3NlX2ZpbmlzaCBjb2RlICovCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnb2Zmc2V0Ci13
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90ZWxsIChHU2Vla2FibGUgKnNlZWthYmxlKQot
ewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBf
SFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHNlZWthYmxlKTsKLQotCXJldHVybiBwcml2
LT5vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fY2FuX3NlZWsgKEdTZWVrYWJsZSAqc2Vla2FibGUpCi17Ci0JcmV0dXJuIFRSVUU7Ci19
Ci0KLWV4dGVybiB2b2lkIHNvdXBfbWVzc2FnZV9pb19jbGVhbnVwIChTb3VwTWVzc2FnZSAqbXNn
KTsKLQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVr
IChHU2Vla2FibGUgICAgICpzZWVrYWJsZSwKLQkJCQkgICAgZ29mZnNldCBvZmZzZXQsCi0JCQkJ
ICAgIEdTZWVrVHlwZSB0eXBlLAotCQkJCSAgICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwK
LQkJCQkgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0JR0lucHV0U3RyZWFtICpzdHJlYW0g
PSBHX0lOUFVUX1NUUkVBTSAoc2Vla2FibGUpOwotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Q
cml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUg
KHNlZWthYmxlKTsKLQljaGFyICpyYW5nZTsKLQotCWlmICh0eXBlID09IEdfU0VFS19FTkQpIHsK
LQkJLyogRklYTUU6IHdlIGNvdWxkIHNlbmQgImJ5dGVzPS1vZmZzZXQiLCBidXQgdW5sZXNzIHdl
Ci0JCSAqIGtub3cgdGhlIENvbnRlbnQtTGVuZ3RoLCB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvCi0J
CSAqIGFuc3dlciBhIHRlbGwoKSBwcm9wZXJseS4gV2UgY291bGQgZmluZCB0aGUKLQkJICogQ29u
dGVudC1MZW5ndGggYnkgZG9pbmcgYSBIRUFELi4uCi0JCSAqLwotCi0JCWdfc2V0X2Vycm9yX2xp
dGVyYWwgKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JURUQsCi0JCQkJ
ICAgICAiR19TRUVLX0VORCBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIpOwotCQlyZXR1cm4gRkFM
U0U7Ci0JfQotCi0JaWYgKCFnX2lucHV0X3N0cmVhbV9zZXRfcGVuZGluZyAoc3RyZWFtLCBlcnJv
cikpCi0JCXJldHVybiBGQUxTRTsKLQotCXNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZSAocHJp
di0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwotCXNvdXBfbWVz
c2FnZV9pb19jbGVhbnVwIChwcml2LT5tc2cpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2Ug
R19TRUVLX0NVUjoKLQkJCW9mZnNldCArPSBwcml2LT5vZmZzZXQ7Ci0JCS8qIGZhbGwgdGhyb3Vn
aCAqLwotCi0JCWNhc2UgR19TRUVLX1NFVDoKLQkJCXJhbmdlID0gZ19zdHJkdXBfcHJpbnRmICgi
Ynl0ZXM9JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSIsIChndWludDY0KW9mZnNldCk7Ci0JCQlwcml2
LT5vZmZzZXQgPSBvZmZzZXQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEdfU0VFS19FTkQ6Ci0JCQly
YW5nZSA9IE5VTEw7IC8qIGtlZXAgY29tcGlsZXJzIGhhcHB5ICovCi0JCQlnX3JldHVybl92YWxf
aWZfcmVhY2hlZCAoRkFMU0UpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWdfcmV0dXJu
X3ZhbF9pZl9yZWFjaGVkIChGQUxTRSk7Ci0JfQotCi0Jc291cF9tZXNzYWdlX2hlYWRlcnNfcmVt
b3ZlIChwcml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIik7Ci0Jc291cF9tZXNzYWdl
X2hlYWRlcnNfYXBwZW5kIChwcml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIiwgcmFu
Z2UpOwotCWdfZnJlZSAocmFuZ2UpOwotCi0Jd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
cXVldWVfbWVzc2FnZSAoV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKHN0cmVhbSkpOwot
Ci0JZ19pbnB1dF9zdHJlYW1fY2xlYXJfcGVuZGluZyAoc3RyZWFtKTsKLQlyZXR1cm4gVFJVRTsK
LX0KLQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5f
dHJ1bmNhdGUgKEdTZWVrYWJsZSAqc2Vla2FibGUpCi17Ci0JcmV0dXJuIEZBTFNFOwotfQotCi1z
dGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlIChH
U2Vla2FibGUgICAgICpzZWVrYWJsZSwKLQkJCQkJZ29mZnNldCBvZmZzZXQsCi0JCQkJCUdDYW5j
ZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAotCQkJCQlHRXJyb3IgICAgICAgKiplcnJvcikKLXsKLQln
X3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQ
UE9SVEVELAotCQkJICAgICAiVHJ1bmNhdGUgbm90IGFsbG93ZWQgb24gaW5wdXQgc3RyZWFtIik7
Ci0JcmV0dXJuIEZBTFNFOwotfQotCi1Tb3VwTWVzc2FnZSAqCi13ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9nZXRfbWVzc2FnZSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0
cmVhbSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJ
VF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChodHRwc3RyZWFtKTsKLQlyZXR1
cm4gcHJpdi0+bXNnID8gZ19vYmplY3RfcmVmIChwcml2LT5tc2cpIDogTlVMTDsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0
dHAtaW5wdXQtc3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2Yjk4NTU5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw3NyArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1t
b2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSwgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAotICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX1dFQktJVF9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNX0hfXwotI2RlZmluZSBfX1dFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0hfXwotCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBl
cy5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTSAgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfdHlw
ZSAoKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0obykgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtKSkKLSNkZWZpbmUgV0VCS0lU
X1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fQ0xBU1MoaykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCAoKGspLCBXRUJLSVRfVFlQRV9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtQ2xhc3MpKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9IVFRQX0lOUFVU
X1NUUkVBTShvKSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgobyksIFdFQktJ
VF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0pKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9I
VFRQX0lOUFVUX1NUUkVBTV9DTEFTUyhrKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoayks
IFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0pKQotI2RlZmluZSBXRUJLSVRfU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfQ0xBU1MobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MgKChvKSwgV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbUNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbSBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtOwotdHlwZWRlZiBzdHJ1Y3QgV2ViS2l0
U291cEhUVFBJbnB1dFN0cmVhbUNsYXNzIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzczsK
LQotc3RydWN0IFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gewotCUdJbnB1dFN0cmVhbSBwYXJl
bnQ7Ci19OwotCi1zdHJ1Y3QgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNsYXNzIHsKLQlHSW5w
dXRTdHJlYW1DbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLQkvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhw
YW5zaW9uICovCi0Jdm9pZCAoKl9nX3Jlc2VydmVkMSkodm9pZCk7Ci0Jdm9pZCAoKl9nX3Jlc2Vy
dmVkMikodm9pZCk7Ci0Jdm9pZCAoKl9nX3Jlc2VydmVkMykodm9pZCk7Ci0Jdm9pZCAoKl9nX3Jl
c2VydmVkNCkodm9pZCk7Ci0Jdm9pZCAoKl9nX3Jlc2VydmVkNSkodm9pZCk7Ci19OwotCi1HVHlw
ZSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfdHlwZSAodm9pZCkgR19HTlVDX0NP
TlNUOwotCi1XZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICp3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9uZXcgKFNvdXBTZXNzaW9uICAgICAgICAgKnNlc3Npb24sCi0JCQkJCQkJICAgICAg
U291cE1lc3NhZ2UgICAgICAgICAqbXNnKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgd2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAq
aHR0cHN0cmVhbSwKLQkJCQkJCQkgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCi0J
CQkJCQkJIEdFcnJvciAgICAgICAgICAgICAqKmVycm9yKTsKLQotdm9pZCAgICAgICAgICAgICAg
ICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSwKLQkJCQkJCQkgICAgICAgaW50IGlvX3ByaW9yaXR5
LAotCQkJCQkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJ
CQkgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJCQkgICAgICAgZ3Bv
aW50ZXIgdXNlcl9kYXRhKTsKLWdib29sZWFuICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRw
c3RyZWFtLAotCQkJCQkJCQlHQXN5bmNSZXN1bHQgICAgICAgICpyZXN1bHQsCi0JCQkJCQkJCUdF
cnJvciAgICAgICAgICAgICAqKmVycm9yKTsKLQotU291cE1lc3NhZ2UgICAgICAgICAqd2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X21lc3NhZ2UgKFdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW0gKmh0dHBzdHJlYW0pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19XRUJLSVRf
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZDVjNGEuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRh
LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13
aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0v
KgotICogc291cC1yZXF1ZXN0LWRhdGEuYzogZGF0YTogVVJJIHJlcXVlc3Qgb2JqZWN0Ci0gKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4K
LSNlbmRpZgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1kYXRhLmgiCi0KLSNpbmNsdWRlICJzb3Vw
LXJlcXVlc3Rlci5oIgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPGdsaWIv
Z2kxOG4uaD4KLQotR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cFJlcXVlc3REYXRhLCB3ZWJraXRf
c291cF9yZXF1ZXN0X2RhdGEsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkKLQotc3RydWN0IF9X
ZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRlIHsKLQlnc2l6ZSBjb250ZW50X2xlbmd0aDsKLQlj
aGFyICpjb250ZW50X3R5cGU7Ci19OwotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVz
dF9kYXRhX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0RGF0YSAqZGF0YSkKLXsKLQlkYXRhLT5wcml2
ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChkYXRhLCBXRUJLSVRfVFlQRV9TT1VQX1JF
UVVFU1RfREFUQSwgV2ViS2l0U291cFJlcXVlc3REYXRhUHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyB2
b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkK
LXsKLQlXZWJLaXRTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0RB
VEEgKG9iamVjdCk7Ci0KLQlnX2ZyZWUgKGRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZSk7Ci0KLQlH
X09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX3BhcmVudF9jbGFzcyktPmZp
bmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX3JlcXVl
c3RfZGF0YV9jaGVja191cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKLQkJCQkgICAg
U291cFVSSSAgICAgICp1cmksCi0JCQkJICAgIEdFcnJvciAgICAgICoqZXJyb3IpCi17Ci0JcmV0
dXJuIHVyaS0+aG9zdCA9PSBOVUxMOwotfQotCi1zdGF0aWMgR0lucHV0U3RyZWFtICoKLXdlYmtp
dF9zb3VwX3JlcXVlc3RfZGF0YV9zZW5kIChXZWJLaXRTb3VwUmVxdWVzdCAgICpyZXF1ZXN0LAot
CQkJICAgICAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAotCQkJICAgICAgIEdFcnJvciAg
ICAgICAqKmVycm9yKQotewotCVdlYktpdFNvdXBSZXF1ZXN0RGF0YSAqZGF0YSA9IFdFQktJVF9T
T1VQX1JFUVVFU1RfREFUQSAocmVxdWVzdCk7Ci0JU291cFVSSSAqdXJpID0gd2Via2l0X3NvdXBf
cmVxdWVzdF9nZXRfdXJpIChyZXF1ZXN0KTsKLQlHSW5wdXRTdHJlYW0gKm1lbXN0cmVhbTsKLQlj
b25zdCBjaGFyICpjb21tYSwgKnNlbWksICpzdGFydCwgKmVuZDsKLQlnYm9vbGVhbiBiYXNlNjQg
PSBGQUxTRTsKLQotCWdjaGFyICp1cmlzdHIgPSBzb3VwX3VyaV90b19zdHJpbmcgKHVyaSwgRkFM
U0UpOwotCWNvbW1hID0gc3RyY2hyICh1cmlzdHIsICcsJyk7Ci0JaWYgKGNvbW1hICYmIGNvbW1h
ICE9IHVyaXN0cikgewotCQkvKiBEZWFsIHdpdGggTUlNRSB0eXBlIC8gcGFyYW1zICovCi0JCXNl
bWkgPSBtZW1jaHIgKHVyaXN0ciwgJzsnLCBjb21tYSAtIHVyaXN0cik7Ci0JCWVuZCA9IHNlbWkg
PyBzZW1pIDogY29tbWE7Ci0KLQkJaWYgKHNlbWkgJiYgIWdfYXNjaWlfc3RybmNhc2VjbXAgKHNl
bWksICI7YmFzZTY0IiwgTUFYICgoc2l6ZV90KSAoY29tbWEgLSBzZW1pKSwgc3RybGVuICgiO2Jh
c2U2NCIpKSkpCi0JCQliYXNlNjQgPSBUUlVFOwotCi0JCWlmIChlbmQgIT0gdXJpc3RyKQotCQkJ
aWYgKGJhc2U2NCkKLQkJCQlkYXRhLT5wcml2LT5jb250ZW50X3R5cGUgPSBnX3N0cm5kdXAgKHVy
aXN0ciwgZW5kIC0gdXJpc3RyKTsKLQkJCWVsc2UKLQkJCQlkYXRhLT5wcml2LT5jb250ZW50X3R5
cGUgPQotCQkJCQl3ZWJraXRfc291cF9yZXF1ZXN0X3VyaV9kZWNvZGVkX2NvcHkgKHVyaXN0ciwg
ZW5kIC0gdXJpc3RyKTsKLQl9Ci0KLQltZW1zdHJlYW0gPSBnX21lbW9yeV9pbnB1dF9zdHJlYW1f
bmV3ICgpOwotCi0Jc3RhcnQgPSBjb21tYSA/IGNvbW1hICsgMSA6IHVyaXN0cjsKLQotCWlmICgq
c3RhcnQpIHsKLQkJZ3VjaGFyICpidWY7Ci0KLQkJaWYgKGJhc2U2NCkgewotCQkJaW50IGlubGVu
LCBzdGF0ZSA9IDA7Ci0JCQlndWludCBzYXZlID0gMDsKLQotCQkJaW5sZW4gPSBzdHJsZW4gKHN0
YXJ0KTsKLQkJCWJ1ZiA9IGdfbWFsbG9jMCAoaW5sZW4gKiAzIC8gNCArIDMpOwotCQkJZGF0YS0+
cHJpdi0+Y29udGVudF9sZW5ndGggPQotCQkJCWdfYmFzZTY0X2RlY29kZV9zdGVwIChzdGFydCwg
aW5sZW4sIGJ1ZiwKLQkJCQkJCSAgICAgICZzdGF0ZSwgJnNhdmUpOwotCQkJaWYgKHN0YXRlICE9
IDApIHsKLQkJCQlnX2ZyZWUgKGJ1Zik7Ci0JCQkJZ290byBmYWlsOwotCQkJfQotCQl9IGVsc2Ug
ewotCQkJLyogQ2Fubm90IHVzZSBnX3VyaV91bmVzY2FwZV9zdHJpbmcgbm9yCi0JCQkgICBzb3Vw
X3VyaV9kZWNvZGUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvCi0JCQkgICBmYWlsIGZvciB0aGlu
Z3MgbGlrZSAiJTNFJSUzQyIgLT4gIj4lPCIgKi8KLQkJCWJ1ZiA9IChndWNoYXIgKil3ZWJraXRf
c291cF9yZXF1ZXN0X3VyaV9kZWNvZGVkX2NvcHkgKHN0YXJ0LCBzdHJsZW4gKHN0YXJ0KSk7Ci0J
CQlpZiAoIWJ1ZikKLQkJCQlnb3RvIGZhaWw7Ci0JCQlkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0
aCA9IHN0cmxlbiAoKGNoYXIgKilidWYpOwotCQl9Ci0KLQkJZ19tZW1vcnlfaW5wdXRfc3RyZWFt
X2FkZF9kYXRhIChHX01FTU9SWV9JTlBVVF9TVFJFQU0gKG1lbXN0cmVhbSksCi0JCQkJCQlidWYs
IGRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoLAotCQkJCQkJZ19mcmVlKTsKLQl9Ci0JZ19mcmVl
ICh1cmlzdHIpOwotCi0JcmV0dXJuIG1lbXN0cmVhbTsKLQotIGZhaWw6Ci0JZ19mcmVlICh1cmlz
dHIpOwotCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9TT1VQ
X0VSUk9SX0JBRF9VUkksCi0JCSAgICAgXyAoIlVuYWJsZSB0byBkZWNvZGUgVVJJOiAlcyIpLCBz
dGFydCk7Ci0JZ19vYmplY3RfdW5yZWYgKG1lbXN0cmVhbSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0K
LXN0YXRpYyBnb2Zmc2V0Ci13ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVu
Z3RoIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKLXsKLQlXZWJLaXRTb3VwUmVxdWVzdERh
dGEgKmRhdGEgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEEgKHJlcXVlc3QpOwotCi0JcmV0dXJu
IGRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi13
ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZSAoV2ViS2l0U291cFJlcXVl
c3QgKnJlcXVlc3QpCi17Ci0JV2ViS2l0U291cFJlcXVlc3REYXRhICpkYXRhID0gV0VCS0lUX1NP
VVBfUkVRVUVTVF9EQVRBIChyZXF1ZXN0KTsKLQotCXJldHVybiBkYXRhLT5wcml2LT5jb250ZW50
X3R5cGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfY2xhc3Nf
aW5pdCAoV2ViS2l0U291cFJlcXVlc3REYXRhQ2xhc3MgKnJlcXVlc3RfZGF0YV9jbGFzcykKLXsK
LQlHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2Rh
dGFfY2xhc3MpOwotCVdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQotCQlX
RUJLSVRfU09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2RhdGFfY2xhc3MpOwotCi0JZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2RhdGFfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291
cFJlcXVlc3REYXRhUHJpdmF0ZSkpOwotCi0Jb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtp
dF9zb3VwX3JlcXVlc3RfZGF0YV9maW5hbGl6ZTsKLQotCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3Vy
aSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmk7Ci0JcmVxdWVzdF9jbGFzcy0+
c2VuZCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9zZW5kOwotCXJlcXVlc3RfY2xhc3MtPmdl
dF9jb250ZW50X2xlbmd0aCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF9s
ZW5ndGg7Ci0JcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHdlYmtpdF9zb3VwX3Jl
cXVlc3RfZGF0YV9nZXRfY29udGVudF90eXBlOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk2MzFhNC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRh
dGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDOyB0YWIt
d2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0gKLSNk
ZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0ggMQotCi0jaW5jbHVkZSAic291cC1yZXF1
ZXN0LmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVF
U1RfREFUQSAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X3R5cGUgKCkp
Ci0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQShvYmplY3QpICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNU
X0RBVEEsIFdlYktpdFNvdXBSZXF1ZXN0RGF0YSkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVF
U1RfREFUQV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3Mp
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSwgV2ViS2l0U291cFJlcXVlc3REYXRhQ2xh
c3MpKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0RBVEEob2JqZWN0KSAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVR
VUVTVF9EQVRBKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9EQVRBX0NMQVNTKGts
YXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVF9EQVRBKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NP
VVBfUkVRVUVTVF9EQVRBLCBXZWJLaXRTb3VwUmVxdWVzdERhdGFDbGFzcykpCi0KLXR5cGVkZWYg
c3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRlIFdlYktpdFNvdXBSZXF1ZXN0RGF0
YVByaXZhdGU7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3VwUmVxdWVzdCBwYXJlbnQ7
Ci0KLQlXZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRlICpwcml2OwotfSBXZWJLaXRTb3VwUmVx
dWVzdERhdGE7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3VwUmVxdWVzdENsYXNzIHBh
cmVudDsKLX0gV2ViS2l0U291cFJlcXVlc3REYXRhQ2xhc3M7Ci0KLUdUeXBlIHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZGF0YV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAv
KiBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRjY2IxMC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZp
bGUuYworKysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFi
LXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8K
LS8qCi0gKiBzb3VwLXJlcXVlc3QtZmlsZS5jOiBmaWxlOiBVUkkgcmVxdWVzdCBvYmplY3QKLSAq
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSwgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5o
PgotI2VuZGlmCi0KLSNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZmlsZS5oIgotI2luY2x1ZGUgInNv
dXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oIgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgi
Ci0jaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgotCi1HX0RFRklORV9UWVBFIChXZWJLaXRTb3VwUmVx
dWVzdEZpbGUsIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZSwgV0VCS0lUX1RZUEVfU09VUF9SRVFV
RVNUKQotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0RmlsZVByaXZhdGUgewotCUdGaWxlICpn
ZmlsZTsKLQotCWNoYXIgKm1pbWVfdHlwZTsKLQlnb2Zmc2V0IHNpemU7Ci19OwotCi1HRmlsZSAq
Ci13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2ZpbGUgKFdlYktpdFNvdXBSZXF1ZXN0Rmls
ZSAqZmlsZSkKLXsKLQlyZXR1cm4gZ19vYmplY3RfcmVmIChmaWxlLT5wcml2LT5nZmlsZSk7Ci19
Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfaW5pdCAoV2ViS2l0U291
cFJlcXVlc3RGaWxlICpmaWxlKQotewotCWZpbGUtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUgKGZpbGUsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFLCBXZWJLaXRTb3Vw
UmVxdWVzdEZpbGVQcml2YXRlKTsKLQotCWZpbGUtPnByaXYtPnNpemUgPSAtMTsKLX0KLQotc3Rh
dGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9maW5hbGl6ZSAoR09iamVjdCAqb2Jq
ZWN0KQotewotCVdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFdFQktJVF9TT1VQX1JFUVVF
U1RfRklMRSAob2JqZWN0KTsKLQotCWlmIChmaWxlLT5wcml2LT5nZmlsZSkKLQkJZ19vYmplY3Rf
dW5yZWYgKGZpbGUtPnByaXYtPmdmaWxlKTsKLQlnX2ZyZWUgKGZpbGUtPnByaXYtPm1pbWVfdHlw
ZSk7Ci0KLQlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9z
b3VwX3JlcXVlc3RfZmlsZV9jaGVja191cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwK
LQkJCQkgICAgU291cFVSSSAgICAgICp1cmksCi0JCQkJICAgIEdFcnJvciAgICAgICoqZXJyb3Ip
Ci17Ci0JLyogImZpbGU6L2ZvbyIgaXMgbm90IHZhbGlkICovCi0JaWYgKCF1cmktPmhvc3QpCi0J
CXJldHVybiBGQUxTRTsKLQotCS8qIGJ1dCBpdCBtdXN0IGJlICJmaWxlOi8vLy4uLiIgb3IgImZp
bGU6Ly9sb2NhbGhvc3QvLi4uIiAqLwotCWlmICh1cmktPnNjaGVtZSA9PSBTT1VQX1VSSV9TQ0hF
TUVfRklMRSAmJgotCSAgICAqdXJpLT5ob3N0ICYmCi0JICAgIGdfYXNjaWlfc3RyY2FzZWNtcCAo
dXJpLT5ob3N0LCAibG9jYWxob3N0IikgIT0gMCkKLQkJcmV0dXJuIEZBTFNFOwotCi0JcmV0dXJu
IFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZnRwX21h
aW5fbG9vcF9xdWl0IChHT2JqZWN0ICAgICAgKm9iamVjdCwKLQkJCQkJICAgICBHQXN5bmNSZXN1
bHQgKnJlc3VsdCwKLQkJCQkJICAgICBncG9pbnRlciBsb29wKQotewotCWdfbWFpbl9sb29wX3F1
aXQgKGxvb3ApOwotfQotCi0vKiBUaGlzIGlzIGEgc29tZXdoYXQgaGFja3kgd2F5IHRvIGdldCBG
VFAgdG8gYWxtb3N0IHdvcmsuIFRoZSBwcm9wZXIgd2F5IHRvCi0gKiBnZXQgRlRQIHRvIF9yZWFs
bHlfIHdvcmsgaW52b2x2ZXMgaGFja2luZyBHSU8gdG8gaGF2ZSBBUElzIHRvIGhhbmRsZQotICog
Y2Fub25jaWFsIFVSTHMuCi0gKi8KLXN0YXRpYyBHRmlsZSAqCi13ZWJraXRfc291cF9yZXF1ZXN0
X2ZpbGVfZW5zdXJlX2ZpbGVfZnRwIChTb3VwVVJJICAgICAgICp1cmksCi0JCQkJCSAgR0NhbmNl
bGxhYmxlICAqY2FuY2VsbGFibGUsCi0JCQkJCSAgR0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0J
U291cFVSSSAqaG9zdDsKLQljaGFyICpzOwotCUdGaWxlICpmaWxlLCAqcmVzdWx0OwotCUdNb3Vu
dCAqbW91bnQ7Ci0KLQlob3N0ID0gc291cF91cmlfY29weV9ob3N0ICh1cmkpOwotCXMgPSBzb3Vw
X3VyaV90b19zdHJpbmcgKGhvc3QsIEZBTFNFKTsKLQlmaWxlID0gZ19maWxlX25ld19mb3JfdXJp
IChzKTsKLQlzb3VwX3VyaV9mcmVlIChob3N0KTsKLQlnX2ZyZWUgKHMpOwotCi0JbW91bnQgPSBn
X2ZpbGVfZmluZF9lbmNsb3NpbmdfbW91bnQgKGZpbGUsIGNhbmNlbGxhYmxlLCBlcnJvcik7Ci0J
aWYgKG1vdW50ID09IE5VTEwgJiYgZ19maWxlX3N1cHBvcnRzX3RocmVhZF9jb250ZXh0cyAoZmls
ZSkpIHsKLQkJR01haW5Db250ZXh0ICpjb250ZXh0ID0gZ19tYWluX2NvbnRleHRfbmV3ICgpOwot
CQlHTWFpbkxvb3AgKmxvb3AgPSBnX21haW5fbG9vcF9uZXcgKGNvbnRleHQsIEZBTFNFKTsKLQot
CQlnX2NsZWFyX2Vycm9yIChlcnJvcik7Ci0JCWdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2Rl
ZmF1bHQgKGNvbnRleHQpOwotCQlnX2ZpbGVfbW91bnRfZW5jbG9zaW5nX3ZvbHVtZSAoZmlsZSwK
LQkJCQkJICAgICAgIEdfTU9VTlRfTU9VTlRfTk9ORSwKLQkJCQkJICAgICAgIE5VTEwsIC8qIEZJ
WE1FISAqLwotCQkJCQkgICAgICAgY2FuY2VsbGFibGUsCi0JCQkJCSAgICAgICB3ZWJraXRfc291
cF9yZXF1ZXN0X2ZpbGVfZnRwX21haW5fbG9vcF9xdWl0LAotCQkJCQkgICAgICAgbG9vcCk7Ci0J
CWdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0JCWdfbWFpbl9jb250ZXh0X3BvcF90aHJlYWRfZGVm
YXVsdCAoY29udGV4dCk7Ci0JCWdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLQkJZ19tYWluX2Nv
bnRleHRfdW5yZWYgKGNvbnRleHQpOwotCQltb3VudCA9IGdfZmlsZV9maW5kX2VuY2xvc2luZ19t
b3VudCAoZmlsZSwgY2FuY2VsbGFibGUsIGVycm9yKTsKLQl9Ci0JaWYgKG1vdW50ID09IE5VTEwp
Ci0JCXJldHVybiBOVUxMOwotCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKLQotCWZpbGUgPSBnX21v
dW50X2dldF9kZWZhdWx0X2xvY2F0aW9uIChtb3VudCk7Ci0JZ19vYmplY3RfdW5yZWYgKG1vdW50
KTsKLQotCXMgPSBnX3N0cmR1cCAodXJpLT5wYXRoKTsKLQlpZiAoc3RyY2hyIChzLCAnOycpKQot
CQkqc3RyY2hyIChzLCAnOycpID0gMDsKLQotCXJlc3VsdCA9IGdfZmlsZV9yZXNvbHZlX3JlbGF0
aXZlX3BhdGggKGZpbGUsIHMpOwotCWdfZnJlZSAocyk7Ci0JZ19vYmplY3RfdW5yZWYgKGZpbGUp
OwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9y
ZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGUgKFdlYktpdFNvdXBSZXF1ZXN0RmlsZSAgKmZpbGUsCi0J
CQkJICAgICAgR0NhbmNlbGxhYmxlICAgICAqY2FuY2VsbGFibGUsCi0JCQkJICAgICAgR0Vycm9y
ICAgICAgICAgICoqZXJyb3IpCi17Ci0JU291cFVSSSAqdXJpOwotCi0JaWYgKGZpbGUtPnByaXYt
PmdmaWxlKQotCQlyZXR1cm4gVFJVRTsKLQotCXVyaSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0
X3VyaSAoV0VCS0lUX1NPVVBfUkVRVUVTVCAoZmlsZSkpOwotCWlmICh1cmktPnNjaGVtZSA9PSBT
T1VQX1VSSV9TQ0hFTUVfRklMRSkgewotCQkvKiBXZSBjYW5ub3QgdXNlIHNvdXBfdXJpX2RlY29k
ZSBhcyBpdCBpbmNvcnJlY3RseQotCQkgKiByZXR1cm5zIE5VTEwgZm9yIGluY29ycmVjdGx5IGVu
Y29kZWQgVVJJcyAodGhhdAotCQkgKiBjb3VsZCBiZSB2YWxpZCBmaWxlbmFtZXMpLiBUaGlzIHdp
bGwgYmUgaG9wZWZ1bGx5Ci0JCSAqIHNoaXBwZWQgaW4gbGlic291cCAyLjMyLjEgYnV0IHdlIHdh
bnQgdG8gbGFuZCB0aGlzCi0JCSAqIGZpcnN0LiBUT0RPOiByZXBsYWNlIHVyaV9kZWNvZGVkX2Nv
cHkgYnkKLQkJICogc291cF91cmlfZGVjb2RlIHdoZW4gdGhlIHJlcXVpcmVkIGxpYnNvdXAgdmVy
c2lvbgotCQkgKiBpcyBidW1wZWQgb3V0IHRvIDIuMzIuMQotCQkgKi8KLQkJZ2NoYXIgKmRlY29k
ZWRfdXJpID0gd2Via2l0X3NvdXBfcmVxdWVzdF91cmlfZGVjb2RlZF9jb3B5ICh1cmktPnBhdGgs
IHN0cmxlbiAodXJpLT5wYXRoKSk7Ci0KLQkJaWYgKGRlY29kZWRfdXJpKSB7Ci0JCQkvKiBEbyBu
b3QgdXNlIG5ld19mb3JfdXJpKCkgYXMgdGhlIGRlY29kZWQgVVJJCi0JCQkgKiAgY291bGQgbm90
IGJlIGEgdmFsaWQgVVJJCi0JCQkgKi8KLQkJCWZpbGUtPnByaXYtPmdmaWxlID0gZ19maWxlX25l
d19mb3JfcGF0aCAoZGVjb2RlZF91cmkpOwotCQkJZ19mcmVlIChkZWNvZGVkX3VyaSk7Ci0JCX0K
LQotCQlyZXR1cm4gVFJVRTsKLQl9IGVsc2UgaWYgKHVyaS0+c2NoZW1lID09IFNPVVBfVVJJX1ND
SEVNRV9GVFApIHsKLQkJZmlsZS0+cHJpdi0+Z2ZpbGUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2Zp
bGVfZW5zdXJlX2ZpbGVfZnRwICh1cmksCi0JCQkJCQkJCQkgICAgICBjYW5jZWxsYWJsZSwKLQkJ
CQkJCQkJCSAgICAgIGVycm9yKTsKLQkJcmV0dXJuIGZpbGUtPnByaXYtPmdmaWxlICE9IE5VTEw7
Ci0JfQotCi0JZ19zZXRfZXJyb3IgKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lUX1NP
VVBfRVJST1JfVU5TVVBQT1JURURfVVJJX1NDSEVNRSwKLQkJICAgICBfICgiVW5zdXBwb3J0ZWQg
VVJJIHNjaGVtZSAnJXMnIiksIHVyaS0+c2NoZW1lKTsKLQlyZXR1cm4gRkFMU0U7Ci19Ci0KLXN0
YXRpYyBHSW5wdXRTdHJlYW0gKgotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQgKFdlYktp
dFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJICAgICAgIEdDYW5jZWxsYWJsZSAg
ICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJy
b3IpCi17Ci0JV2ViS2l0U291cFJlcXVlc3RGaWxlICpmaWxlID0gV0VCS0lUX1NPVVBfUkVRVUVT
VF9GSUxFIChyZXF1ZXN0KTsKLQlHSW5wdXRTdHJlYW0gKnN0cmVhbTsKLQlHRXJyb3IgKm15X2Vy
cm9yID0gTlVMTDsKLQotCWlmICghd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxl
IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpKQotCQlyZXR1cm4gTlVMTDsKLQotCXN0cmVhbSA9
IEdfSU5QVVRfU1RSRUFNIChnX2ZpbGVfcmVhZCAoZmlsZS0+cHJpdi0+Z2ZpbGUsCi0JCQkJCSAg
ICAgIGNhbmNlbGxhYmxlLCAmbXlfZXJyb3IpKTsKLQlpZiAoc3RyZWFtID09IE5VTEwpIHsKLQkJ
aWYgKGdfZXJyb3JfbWF0Y2hlcyAobXlfZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfSVNf
RElSRUNUT1JZKSkgewotCQkJR0ZpbGVFbnVtZXJhdG9yICplbnVtZXJhdG9yOwotCQkJZ19jbGVh
cl9lcnJvciAoJm15X2Vycm9yKTsKLQkJCWVudW1lcmF0b3IgPSBnX2ZpbGVfZW51bWVyYXRlX2No
aWxkcmVuIChmaWxlLT5wcml2LT5nZmlsZSwKLQkJCQkJCQkJIioiLAotCQkJCQkJCQlHX0ZJTEVf
UVVFUllfSU5GT19OT05FLAotCQkJCQkJCQljYW5jZWxsYWJsZSwKLQkJCQkJCQkJZXJyb3IpOwot
CQkJaWYgKGVudW1lcmF0b3IpIHsKLQkJCQlzdHJlYW0gPSB3ZWJraXRfc291cF9kaXJlY3Rvcnlf
aW5wdXRfc3RyZWFtX25ldyAoZW51bWVyYXRvciwKLQkJCQkJCQkJCQkgd2Via2l0X3NvdXBfcmVx
dWVzdF9nZXRfdXJpIChyZXF1ZXN0KSk7Ci0JCQkJZ19vYmplY3RfdW5yZWYgKGVudW1lcmF0b3Ip
OwotCQkJCWZpbGUtPnByaXYtPm1pbWVfdHlwZSA9IGdfc3RyZHVwICgidGV4dC9odG1sIik7Ci0J
CQl9Ci0JCX0gZWxzZSB7Ci0JCQlnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIG15X2Vycm9yKTsK
LQkJfQotCX0gZWxzZSB7Ci0JCUdGaWxlSW5mbyAqaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvIChm
aWxlLT5wcml2LT5nZmlsZSwKLQkJCQkJCSAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9D
T05URU5UX1RZUEUgIiwiCi0JCQkJCQkgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0la
RSwKLQkJCQkJCSAgICAgMCwgY2FuY2VsbGFibGUsIE5VTEwpOwotCQlpZiAoaW5mbykgewotCQkJ
Y29uc3QgY2hhciAqY29udGVudF90eXBlOwotCQkJZmlsZS0+cHJpdi0+c2l6ZSA9IGdfZmlsZV9p
bmZvX2dldF9zaXplIChpbmZvKTsKLQkJCWNvbnRlbnRfdHlwZSA9IGdfZmlsZV9pbmZvX2dldF9j
b250ZW50X3R5cGUgKGluZm8pOwotCi0JCQlpZiAoY29udGVudF90eXBlKQotCQkJCWZpbGUtPnBy
aXYtPm1pbWVfdHlwZSA9IGdfY29udGVudF90eXBlX2dldF9taW1lX3R5cGUgKGNvbnRlbnRfdHlw
ZSk7Ci0JCQlnX29iamVjdF91bnJlZiAoaW5mbyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3RyZWFt
OwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmNf
dGhyZWFkIChHU2ltcGxlQXN5bmNSZXN1bHQgKnJlcywKLQkJCQkJICAgIEdPYmplY3QgICAgICAg
ICAgICAqb2JqZWN0LAotCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICpjYW5jZWxsYWJsZSkK
LXsKLQlHSW5wdXRTdHJlYW0gKnN0cmVhbTsKLQlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdDsK
LQlHRXJyb3IgKmVycm9yID0gTlVMTDsKLQotCXJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNU
IChvYmplY3QpOwotCi0Jc3RyZWFtID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQgKHJl
cXVlc3QsIGNhbmNlbGxhYmxlLCAmZXJyb3IpOwotCi0JaWYgKHN0cmVhbSA9PSBOVUxMKSB7Ci0J
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVzLCBlcnJvcik7Ci0JCWdf
ZXJyb3JfZnJlZSAoZXJyb3IpOwotCX0gZWxzZSB7Ci0JCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9z
ZXRfb3BfcmVzX2dwb2ludGVyIChyZXMsIHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOwotCX0KLX0K
LQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jIChXZWJL
aXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkgICAgIEdDYW5jZWxsYWJsZSAg
ICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJh
Y2ssCi0JCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0
ICpyZXM7Ci0KLQlyZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAocmVx
dWVzdCksIGNhbGxiYWNrLCB1c2VyX2RhdGEsIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5k
X2FzeW5jKTsKLQotCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9ydW5faW5fdGhyZWFkIChyZXMsIHdl
YmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jX3RocmVhZCwgR19QUklPUklUWV9ERUZB
VUxULCBjYW5jZWxsYWJsZSk7Ci0JZ19vYmplY3RfdW5yZWYgKHJlcyk7Ci19Ci0KLXN0YXRpYyBH
SW5wdXRTdHJlYW0gKgotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoIChXZWJL
aXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkgICAgICBHQXN5bmNSZXN1bHQg
ICAgICAgICAqcmVzdWx0LAotCQkJCSAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikK
LXsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAo
cmVzdWx0KTsKLQotCWdfd2Fybl9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3Nv
dXJjZV90YWcgKHNpbXBsZSkgPT0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmMp
OwotCi0JaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3IgKHNpbXBsZSwg
ZXJyb3IpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBnX29iamVjdF9yZWYgKGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUpKTsKLX0KLQotc3RhdGlj
IGdvZmZzZXQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF9sZW5ndGggKFdl
YktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQotewotCVdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmls
ZSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7Ci0KLQlyZXR1cm4gZmlsZS0+
cHJpdi0+c2l6ZTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotd2Via2l0X3NvdXBfcmVxdWVz
dF9maWxlX2dldF9jb250ZW50X3R5cGUgKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQotewot
CVdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRSAo
cmVxdWVzdCk7Ci0KLQlpZiAoIWZpbGUtPnByaXYtPm1pbWVfdHlwZSkKLQkJcmV0dXJuICJhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0iOwotCi0JcmV0dXJuIGZpbGUtPnByaXYtPm1pbWVfdHlwZTsK
LX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9jbGFzc19pbml0IChX
ZWJLaXRTb3VwUmVxdWVzdEZpbGVDbGFzcyAqcmVxdWVzdF9maWxlX2NsYXNzKQotewotCUdPYmpl
Y3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfZmlsZV9jbGFz
cyk7Ci0JV2ViS2l0U291cFJlcXVlc3RDbGFzcyAqcmVxdWVzdF9jbGFzcyA9Ci0JCVdFQktJVF9T
T1VQX1JFUVVFU1RfQ0xBU1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7Ci0KLQlnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUgKHJlcXVlc3RfZmlsZV9jbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwUmVxdWVz
dEZpbGVQcml2YXRlKSk7Ci0KLQlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBf
cmVxdWVzdF9maWxlX2ZpbmFsaXplOwotCi0JcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gd2Vi
a2l0X3NvdXBfcmVxdWVzdF9maWxlX2NoZWNrX3VyaTsKLQlyZXF1ZXN0X2NsYXNzLT5zZW5kID0g
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQ7Ci0JcmVxdWVzdF9jbGFzcy0+c2VuZF9hc3lu
YyA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jOwotCXJlcXVlc3RfY2xhc3Mt
PnNlbmRfZmluaXNoID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoOwotCXJl
cXVlc3RfY2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmls
ZV9nZXRfY29udGVudF9sZW5ndGg7Ci0JcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9
IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF90eXBlOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1maWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWZpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU5ZTgyYS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LWZpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qIC0q
LSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zm
c2V0OiA4IC0qLSAqLwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX1NPVVBfUkVR
VUVTVF9GSUxFX0gKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFX0ggMQotCi0jaW5j
bHVkZSAic291cC1yZXF1ZXN0LmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRf
VFlQRV9TT1VQX1JFUVVFU1RfRklMRSAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2Zp
bGVfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRShvYmplY3Qp
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqZWN0KSwgV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNUX0ZJTEUsIFdlYktpdFNvdXBSZXF1ZXN0RmlsZSkpCi0jZGVmaW5lIFdF
QktJVF9TT1VQX1JFUVVFU1RfRklMRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0U291
cFJlcXVlc3RGaWxlQ2xhc3MpKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0ZJTEUo
b2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVT
VF9GSUxFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdF
QktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVT
VF9GSUxFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiks
IFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFLCBXZWJLaXRTb3VwUmVxdWVzdEZpbGVDbGFz
cykpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlIFdlYktp
dFNvdXBSZXF1ZXN0RmlsZVByaXZhdGU7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3Vw
UmVxdWVzdCBwYXJlbnQ7Ci0KLQlXZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlICpwcml2Owot
fSBXZWJLaXRTb3VwUmVxdWVzdEZpbGU7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3Vw
UmVxdWVzdENsYXNzIHBhcmVudDsKLX0gV2ViS2l0U291cFJlcXVlc3RGaWxlQ2xhc3M7Ci0KLUdU
eXBlIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdGaWxlICAq
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF9maWxlIChXZWJLaXRTb3VwUmVxdWVzdEZpbGUg
KmZpbGUpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX1NPVVBfUkVRVUVTVF9G
SUxFX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDc3N2ZkNzIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKKysrIC9kZXYvbnVsbApAQCAt
MSwzNTYgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMt
bW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogc291cC1yZXF1ZXN0LWh0
dHAuYzogaHR0cDogVVJJIHJlcXVlc3Qgb2JqZWN0Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IFJlZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVm
IEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8
Z2xpYi9naTE4bi5oPgotCi0jaW5jbHVkZSAic291cC1jYWNoZS5oIgotI2luY2x1ZGUgInNvdXAt
Y2FjaGUtcHJpdmF0ZS5oIgotI2luY2x1ZGUgInNvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCIKLSNp
bmNsdWRlICJzb3VwLXJlcXVlc3QtaHR0cC5oIgotCi1HX0RFRklORV9UWVBFIChXZWJLaXRTb3Vw
UmVxdWVzdEhUVFAsIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cCwgV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUKQotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SFRUUFByaXZhdGUgewotCVNvdXBN
ZXNzYWdlICptc2c7Ci19OwotCi0vKioKLSAqIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRf
bWVzc2FnZToKLSAqIEBodHRwOiBhICNXZWJLaXRTb3VwUmVxdWVzdEhUVFAgb2JqZWN0Ci0gKgot
ICogR2V0cyBhIG5ldyByZWZlcmVuY2UgdG8gdGhlICNTb3VwTWVzc2FnZSBhc3NvY2lhdGVkIHRv
IHRoaXMgU291cFJlcXVlc3QKLSAqCi0gKiBSZXR1cm5zOiBhIG5ldyByZWZlcmVuY2UgdG8gdGhl
ICNTb3VwTWVzc2FnZQotICoqLwotU291cE1lc3NhZ2UgKgotd2Via2l0X3NvdXBfcmVxdWVzdF9o
dHRwX2dldF9tZXNzYWdlIChXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHApCi17Ci0JZ19yZXR1
cm5fdmFsX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX1JFUVVFU1RfSFRUUCAoaHR0cCksIE5VTEwp
OwotCi0JcmV0dXJuIGdfb2JqZWN0X3JlZiAoaHR0cC0+cHJpdi0+bXNnKTsKLX0KLQotc3RhdGlj
IHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9pbml0IChXZWJLaXRTb3VwUmVxdWVzdEhU
VFAgKmh0dHApCi17Ci0JaHR0cC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAo
aHR0cCwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFAsIFdlYktpdFNvdXBSZXF1ZXN0SFRU
UFByaXZhdGUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0
cF9jaGVja191cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKLQkJCQkgICAgU291cFVS
SSAgICAgICp1cmksCi0JCQkJICAgIEdFcnJvciAgICAgICoqZXJyb3IpCi17Ci0JV2ViS2l0U291
cFJlcXVlc3RIVFRQICpodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsK
LQotCWlmICghU09VUF9VUklfVkFMSURfRk9SX0hUVFAgKHVyaSkpCi0JCXJldHVybiBGQUxTRTsK
LQotCWh0dHAtPnByaXYtPm1zZyA9IHNvdXBfbWVzc2FnZV9uZXdfZnJvbV91cmkgKFNPVVBfTUVU
SE9EX0dFVCwgdXJpKTsKLQlyZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9z
b3VwX3JlcXVlc3RfaHR0cF9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQotewotCVdlYktpdFNv
dXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUCAob2JqZWN0KTsK
LQotCWlmIChodHRwLT5wcml2LT5tc2cpCi0JCWdfb2JqZWN0X3VucmVmIChodHRwLT5wcml2LT5t
c2cpOwotCi0JR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIEdJbnB1dFN0cmVhbSAqCi13
ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCi0JCQkgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAot
CQkJICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKLXsKLQlXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtICpodHRwc3RyZWFtOwotCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9
IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7Ci0KLQlodHRwc3RyZWFtID0gd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3ICh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9z
ZXNzaW9uIChyZXF1ZXN0KSwgaHR0cC0+cHJpdi0+bXNnKTsKLQlpZiAoIXdlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3NlbmQgKGh0dHBzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcikpIHsK
LQkJZ19vYmplY3RfdW5yZWYgKGh0dHBzdHJlYW0pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0
dXJuIChHSW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOwotfQotCi0KLXN0YXRpYyB2b2lkCi1zZW50
X2FzeW5jIChHT2JqZWN0ICpzb3VyY2UsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1
c2VyX2RhdGEpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSA9IFdF
QktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNIChzb3VyY2UpOwotCUdTaW1wbGVBc3luY1Jlc3Vs
dCAqc2ltcGxlID0gdXNlcl9kYXRhOwotCUdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0JaWYgKHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoIChodHRwc3RyZWFtLCByZXN1
bHQsICZlcnJvcikpIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50
ZXIgKHNpbXBsZSwgaHR0cHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOwotCX0gZWxzZSB7Ci0JCWdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAoc2ltcGxlLCBlcnJvcik7Ci0JCWdf
ZXJyb3JfZnJlZSAoZXJyb3IpOwotCQlnX29iamVjdF91bnJlZiAoaHR0cHN0cmVhbSk7Ci0JfQot
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKLQlnX29iamVjdF91bnJl
ZiAoc2ltcGxlKTsKLX0KLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291cFJlcXVlc3RI
VFRQICpyZXE7Ci0JU291cE1lc3NhZ2UgKm9yaWdpbmFsOwotCUdDYW5jZWxsYWJsZSAqY2FuY2Vs
bGFibGU7Ci0JR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjazsKLQlncG9pbnRlciB1c2VyX2Rh
dGE7Ci19IENvbmRpdGlvbmFsSGVscGVyOwotCi0KLXN0YXRpYyB2b2lkCi1jb25kaXRpb25hbF9n
ZXRfcmVhZHlfY2IgKFNvdXBTZXNzaW9uICpzZXNzaW9uLCBTb3VwTWVzc2FnZSAqbXNnLCBncG9p
bnRlciB1c2VyX2RhdGEpCi17Ci0JQ29uZGl0aW9uYWxIZWxwZXIgKmhlbHBlciA9IChDb25kaXRp
b25hbEhlbHBlciAqKXVzZXJfZGF0YTsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKLQlX
ZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOwotCi0Jc2ltcGxlID0gZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKGhlbHBlci0+cmVxKSwKLQkJCQkJICAgIGhl
bHBlci0+Y2FsbGJhY2ssIGhlbHBlci0+dXNlcl9kYXRhLAotCQkJCQkgICAgY29uZGl0aW9uYWxf
Z2V0X3JlYWR5X2NiKTsKLQotCWlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX05P
VF9NT0RJRklFRCkgewotCQlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gKFdlYktpdFNvdXBDYWNo
ZSAqKXNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9D
QUNIRSk7Ci0KLQkJaHR0cHN0cmVhbSA9IChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICopd2Vi
a2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoY2FjaGUsIG1zZyk7Ci0JCWlmIChodHRwc3Ry
ZWFtKSB7Ci0JCQljb25zdCBnY2hhciAqY29udGVudF90eXBlOwotCi0JCQlnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlLCBodHRwc3RyZWFtLCBnX29iamVj
dF91bnJlZik7Ci0KLQkJCXNvdXBfbWVzc2FnZV9nb3RfaGVhZGVycyAoaGVscGVyLT5vcmlnaW5h
bCk7Ci0KLQkJCS8qIEZJWE1FOiBVbmNvbW1lbnQgdGhpcyB3aGVuIHRoaXMgYmVjb21lcyBwYXJ0
IG9mIGxpYnNvdXAKLQkJCSAqIGlmICghc291cF9tZXNzYWdlX2Rpc2FibGVzX2ZlYXR1cmUoaGVs
cGVyLT5vcmlnaW5hbCwgU09VUF9UWVBFX0NPTlRFTlRfU05JRkZFUikpIHsKLQkJCSAqIAljb25z
dCBnY2hhciAqY29udGVudF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRf
dHlwZSAobXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKLQkJCSAqIAlzb3VwX21lc3NhZ2Vf
Y29udGVudF9zbmlmZmVkIChoZWxwZXItPm9yaWdpbmFsLCBjb250ZW50X3R5cGUsIE5VTEwpOwot
CQkJICogfQotCQkJICovCi0JCQljb250ZW50X3R5cGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19n
ZXRfY29udGVudF90eXBlIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwpOwotCQkJc291cF9t
ZXNzYWdlX2NvbnRlbnRfc25pZmZlZCAoaGVscGVyLT5vcmlnaW5hbCwgY29udGVudF90eXBlLCBO
VUxMKTsKLQotCQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOwotCi0J
CQlzb3VwX21lc3NhZ2VfZmluaXNoZWQgKGhlbHBlci0+b3JpZ2luYWwpOwotCi0JCQlnX29iamVj
dF91bnJlZiAoc2ltcGxlKTsKLQkJfSBlbHNlIHsKLQkJCS8qIEFzayBhZ2FpbiBmb3IgdGhlIHJl
c291cmNlLCBzb21laG93IHRoZSBjYWNoZSBjYW5ub3QgbG9jYXRlIGl0ICovCi0JCQlodHRwc3Ry
ZWFtID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChzZXNzaW9uLCBoZWxwZXIt
Pm9yaWdpbmFsKTsKLQkJCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMg
KGh0dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKLQkJCQkJCQkJICBoZWxwZXItPmNhbmNl
bGxhYmxlLCBzZW50X2FzeW5jLCBzaW1wbGUpOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSXQgaXMg
aW4gdGhlIGNhY2hlIGJ1dCBpdCB3YXMgbW9kaWZpZWQgcmVtb3RlbHkgKi8KLQkJaHR0cHN0cmVh
bSA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoc2Vzc2lvbiwgaGVscGVyLT5v
cmlnaW5hbCk7Ci0JCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKGh0
dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKLQkJCQkJCQkgIGhlbHBlci0+Y2FuY2VsbGFi
bGUsIHNlbnRfYXN5bmMsIHNpbXBsZSk7Ci0JfQotCi0JZ19vYmplY3RfdW5yZWYgKGhlbHBlci0+
cmVxKTsKLQlnX29iamVjdF91bnJlZiAoaGVscGVyLT5vcmlnaW5hbCk7Ci0JZ19zbGljZV9mcmVl
IChDb25kaXRpb25hbEhlbHBlciwgaGVscGVyKTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCVdl
YktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cDsKLQlHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNr
OwotCWdwb2ludGVyIHVzZXJfZGF0YTsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRw
c3RyZWFtOwotfSBTZW5kQXN5bmNIZWxwZXI7Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3Jl
cXVlc3RfaHR0cF9zZW5kX2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVz
dCwKLQkJCQkJCSBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCQkgR0Fz
eW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJCSBncG9pbnRlciB1c2VyX2RhdGEpOwot
Ci1zdGF0aWMgZ2Jvb2xlYW4KLXNlbmRfYXN5bmNfY2IgKGdwb2ludGVyIGRhdGEpCi17Ci0JR1Np
bXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7Ci0JU2VuZEFzeW5jSGVscGVyICpoZWxwZXIgPSAoU2Vu
ZEFzeW5jSGVscGVyICopZGF0YTsKLQljb25zdCBnY2hhciAqY29udGVudF90eXBlOwotCi0Jc2lt
cGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKGhlbHBlci0+aHR0cCks
Ci0JCQkJCSAgICBoZWxwZXItPmNhbGxiYWNrLCBoZWxwZXItPnVzZXJfZGF0YSwKLQkJCQkJICAg
IHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jKTsKLQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlLCBoZWxwZXItPmh0dHBzdHJlYW0sIGdf
b2JqZWN0X3VucmVmKTsKLQotCS8qIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyAqLwotCXNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZywgU09VUF9TVEFUVVNfT0sp
OwotCi0JLyogSXNzdWUgc2lnbmFscyAgKi8KLQlzb3VwX21lc3NhZ2VfZ290X2hlYWRlcnMgKGhl
bHBlci0+aHR0cC0+cHJpdi0+bXNnKTsKLQotCS8qIEZJWE1FOiBVbmNvbW1lbnQgdGhpcyB3aGVu
IHRoaXMgYmVjb21lcyBwYXJ0IG9mIGxpYnNvdXAKLQkgKiBpZiAoIXNvdXBfbWVzc2FnZV9kaXNh
Ymxlc19mZWF0dXJlKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnLCBTT1VQX1RZUEVfQ09OVEVOVF9T
TklGRkVSKSkgewotCSAqCWNvbnN0IGdjaGFyICpjb250ZW50X3R5cGUgPSBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19nZXRfY29udGVudF90eXBlIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZy0+cmVzcG9u
c2VfaGVhZGVycywgTlVMTCk7Ci0JICoJc291cF9tZXNzYWdlX2NvbnRlbnRfc25pZmZlZCAoaGVs
cGVyLT5odHRwLT5wcml2LT5tc2csIGNvbnRlbnRfdHlwZSwgTlVMTCk7Ci0JICogfQotCSAqLwot
CWNvbnRlbnRfdHlwZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKGhl
bHBlci0+aHR0cC0+cHJpdi0+bXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKLQlzb3VwX21l
c3NhZ2VfY29udGVudF9zbmlmZmVkIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZywgY29udGVudF90
eXBlLCBOVUxMKTsKLQotCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsK
LQotCXNvdXBfbWVzc2FnZV9maW5pc2hlZCAoaGVscGVyLT5odHRwLT5wcml2LT5tc2cpOwotCi0J
Z19vYmplY3RfdW5yZWYgKHNpbXBsZSk7Ci0KLQlnX29iamVjdF91bnJlZiAoaGVscGVyLT5odHRw
KTsKLQlnX3NsaWNlX2ZyZWUgKFNlbmRBc3luY0hlbHBlciwgaGVscGVyKTsKLQotCXJldHVybiBG
QUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2Fz
eW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkgICAgIEdDYW5j
ZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkgICAgIEdBc3luY1JlYWR5Q2FsbGJh
Y2sgY2FsbGJhY2ssCi0JCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JV2ViS2l0U291
cFJlcXVlc3RIVFRQICpodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsK
LQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOwotCUdTaW1wbGVBc3luY1Jl
c3VsdCAqc2ltcGxlOwotCVNvdXBTZXNzaW9uICpzZXNzaW9uOwotCVdlYktpdFNvdXBDYWNoZSAq
Y2FjaGU7Ci0KLQlzZXNzaW9uID0gd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAocmVx
dWVzdCk7Ci0JY2FjaGUgPSAoV2ViS2l0U291cENhY2hlICopc291cF9zZXNzaW9uX2dldF9mZWF0
dXJlIChzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKTsKLQotCWlmIChjYWNoZSkgewot
CQlXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSByZXNwb25zZTsKLQotCQlyZXNwb25zZSA9IHdlYmtp
dF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZSAoY2FjaGUsIGh0dHAtPnByaXYtPm1zZyk7Ci0JCWlm
IChyZXNwb25zZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSCkgewotCQkJV2Vi
S2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKLQotCQkJaHR0cHN0cmVhbSA9IChX
ZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICopCi0JCQkJd2Via2l0X3NvdXBfY2FjaGVfc2VuZF9y
ZXNwb25zZSAoY2FjaGUsIFNPVVBfTUVTU0FHRSAoaHR0cC0+cHJpdi0+bXNnKSk7Ci0KLQkJCS8q
IENhY2hlZCByZXNvdXJjZSBmaWxlIGNvdWxkIGhhdmUgYmVlbiBkZWxldGVkIG91dHNpZGUKLQkJ
CSAqLwotCQkJaWYgKGh0dHBzdHJlYW0pIHsKLQkJCQkvKiBEbyByZXR1cm4gdGhlIHN0cmVhbSBh
c3luY2hyb25vdXNseSBhcyBpbgotCQkJCSAqIHRoZSBvdGhlciBjYXNlcy4gSXQncyBub3QgZW5v
dWdoIHRvIHVzZQotCQkJCSAqIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxl
IGFzCi0JCQkJICogdGhlIHNpZ25hbHMgbXVzdCBiZSBhbHNvIGVtaXR0ZWQKLQkJCQkgKiBhc3lu
Y2hyb25vdXNseQotCQkJCSAqLwotCQkJCVNlbmRBc3luY0hlbHBlciAqaGVscGVyID0gZ19zbGlj
ZV9uZXcgKFNlbmRBc3luY0hlbHBlcik7Ci0JCQkJaGVscGVyLT5odHRwID0gZ19vYmplY3RfcmVm
IChodHRwKTsKLQkJCQloZWxwZXItPmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0JCQkJaGVscGVyLT51
c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0JCQkJaGVscGVyLT5odHRwc3RyZWFtID0gaHR0cHN0cmVh
bTsKLQkJCQlnX3RpbWVvdXRfYWRkICgwLCBzZW5kX2FzeW5jX2NiLCBoZWxwZXIpOwotCQkJCXJl
dHVybjsKLQkJCX0KLQkJfSBlbHNlIGlmIChyZXNwb25zZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9S
RVNQT05TRV9ORUVEU19WQUxJREFUSU9OKSB7Ci0JCQlTb3VwTWVzc2FnZSAqY29uZGl0aW9uYWxf
bXNnOwotCQkJQ29uZGl0aW9uYWxIZWxwZXIgKmhlbHBlcjsKLQotCQkJY29uZGl0aW9uYWxfbXNn
ID0gd2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoY2FjaGUs
IGh0dHAtPnByaXYtPm1zZyk7Ci0KLQkJCWhlbHBlciA9IGdfc2xpY2VfbmV3MCAoQ29uZGl0aW9u
YWxIZWxwZXIpOwotCQkJaGVscGVyLT5yZXEgPSBnX29iamVjdF9yZWYgKGh0dHApOwotCQkJaGVs
cGVyLT5vcmlnaW5hbCA9IGdfb2JqZWN0X3JlZiAoaHR0cC0+cHJpdi0+bXNnKTsKLQkJCWhlbHBl
ci0+Y2FuY2VsbGFibGUgPSBjYW5jZWxsYWJsZTsKLQkJCWhlbHBlci0+Y2FsbGJhY2sgPSBjYWxs
YmFjazsKLQkJCWhlbHBlci0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwotCQkJc291cF9zZXNzaW9u
X3F1ZXVlX21lc3NhZ2UgKHNlc3Npb24sIGNvbmRpdGlvbmFsX21zZywKLQkJCQkJCSAgICBjb25k
aXRpb25hbF9nZXRfcmVhZHlfY2IsCi0JCQkJCQkgICAgaGVscGVyKTsKLQkJCXJldHVybjsKLQkJ
fQotCX0KLQotCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUICho
dHRwKSwKLQkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCi0JCQkJCSAgICB3ZWJraXRfc291
cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyk7Ci0JaHR0cHN0cmVhbSA9IHdlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX25ldyAod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAocmVx
dWVzdCksCi0JCQkJCQkJaHR0cC0+cHJpdi0+bXNnKTsKLQl3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0JCQkJ
CQkgIGNhbmNlbGxhYmxlLCBzZW50X2FzeW5jLCBzaW1wbGUpOwotfQotCi1zdGF0aWMgR0lucHV0
U3RyZWFtICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2ZpbmlzaCAoV2ViS2l0U291
cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkJICAgICAgR0FzeW5jUmVzdWx0ICAgICAg
ICAgKnJlc3VsdCwKLQkJCQkgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCi17Ci0J
R1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7Ci0KLQlnX3JldHVybl92YWxfaWZfZmFpbCAoZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JKRUNUIChyZXF1ZXN0KSwg
d2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpIHx8IGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVxdWVzdCksIGNvbmRpdGlvbmFsX2dl
dF9yZWFkeV9jYiksIE5VTEwpOwotCi0Jc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChy
ZXN1bHQpOwotCWlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yIChzaW1w
bGUsIGVycm9yKSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGdfb2JqZWN0X3JlZiAoZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSkpOwotfQotCi1zdGF0
aWMgZ29mZnNldAotd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X2xlbmd0aCAo
V2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCi17Ci0JV2ViS2l0U291cFJlcXVlc3RIVFRQICpo
dHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKLQotCXJldHVybiBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGggKGh0dHAtPnByaXYtPm1zZy0+cmVz
cG9uc2VfaGVhZGVycyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICoKLXdlYmtpdF9zb3VwX3Jl
cXVlc3RfaHR0cF9nZXRfY29udGVudF90eXBlIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkK
LXsKLQlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0hU
VFAgKHJlcXVlc3QpOwotCi0JcmV0dXJuIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50
X3R5cGUgKGh0dHAtPnByaXYtPm1zZy0+cmVzcG9uc2VfaGVhZGVycywgTlVMTCk7Ci19Ci0KLXN0
YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfY2xhc3NfaW5pdCAoV2ViS2l0U291
cFJlcXVlc3RIVFRQQ2xhc3MgKnJlcXVlc3RfaHR0cF9jbGFzcykKLXsKLQlHT2JqZWN0Q2xhc3Mg
Km9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2h0dHBfY2xhc3MpOwotCVdl
YktpdFNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQotCQlXRUJLSVRfU09VUF9SRVFV
RVNUX0NMQVNTIChyZXF1ZXN0X2h0dHBfY2xhc3MpOwotCi0JZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlIChyZXF1ZXN0X2h0dHBfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cFJlcXVlc3RIVFRQUHJp
dmF0ZSkpOwotCi0Jb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rf
aHR0cF9maW5hbGl6ZTsKLQotCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHdlYmtpdF9zb3Vw
X3JlcXVlc3RfaHR0cF9jaGVja191cmk7Ci0JcmVxdWVzdF9jbGFzcy0+c2VuZCA9IHdlYmtpdF9z
b3VwX3JlcXVlc3RfaHR0cF9zZW5kOwotCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSB3ZWJr
aXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYzsKLQlyZXF1ZXN0X2NsYXNzLT5zZW5kX2Zp
bmlzaCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2ZpbmlzaDsKLQlyZXF1ZXN0X2Ns
YXNzLT5nZXRfY29udGVudF9sZW5ndGggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X2Nv
bnRlbnRfbGVuZ3RoOwotCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X3R5cGUgPSB3ZWJraXRf
c291cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfdHlwZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1odHRwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNmE4MjEuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC1odHRwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKiAtKi0gTW9kZTog
QzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAt
Ki0gKi8KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRU
UF9ICi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9IIDEKLQotI2luY2x1ZGUgInNv
dXAtcmVxdWVzdC5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfU09V
UF9SRVFVRVNUX0hUVFAgICAgICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF90
eXBlICgpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAob2JqZWN0KSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhUVFApKQotI2RlZmluZSBXRUJLSVRfU09V
UF9SRVFVRVNUX0hUVFBfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAo
KGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFAsIFdlYktpdFNvdXBSZXF1ZXN0
SFRUUENsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9IVFRQKG9iamVjdCkg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBXRUJLSVRfVFlQRV9T
T1VQX1JFUVVFU1RfSFRUUCkpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfSFRUUF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfSFRUUCkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRf
VFlQRV9TT1VQX1JFUVVFU1RfSFRUUCwgV2ViS2l0U291cFJlcXVlc3RIVFRQQ2xhc3MpKQotCi10
eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RIVFRQUHJpdmF0ZSBXZWJLaXRTb3VwUmVx
dWVzdEhUVFBQcml2YXRlOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291cFJlcXVlc3Qg
cGFyZW50OwotCi0JV2ViS2l0U291cFJlcXVlc3RIVFRQUHJpdmF0ZSAqcHJpdjsKLX0gV2ViS2l0
U291cFJlcXVlc3RIVFRQOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291cFJlcXVlc3RD
bGFzcyBwYXJlbnQ7Ci19IFdlYktpdFNvdXBSZXF1ZXN0SFRUUENsYXNzOwotCi1HVHlwZSB3ZWJr
aXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X3R5cGUgKHZvaWQpOwotCi1Tb3VwTWVzc2FnZSAgKndl
YmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZSAoV2ViS2l0U291cFJlcXVlc3RIVFRQ
ICpodHRwKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JFUVVFU1Rf
SFRUUF9IICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LmMgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ2YjlmNWEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAK
LS8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFz
aWMtb2Zmc2V0OiA4IC0qLSAqLwotLyoKLSAqIHNvdXAtcmVxdWVzdC5jOiBQcm90b2NvbC1pbmRl
cGVuZGVudCBzdHJlYW1pbmcgcmVxdWVzdCBpbnRlcmZhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNs
dWRlIDxnbGliL2dpMThuLmg+Ci0KLSNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKLSNpbmNsdWRl
ICJzb3VwLXJlcXVlc3Rlci5oIgotCi0vKioKLSAqIFNFQ1RJT046c291cC1yZXF1ZXN0Ci0gKiBA
c2hvcnRfZGVzY3JpcHRpb246IFByb3RvY29sLWluZGVwZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0
IGludGVyZmFjZQotICoKLSAqIEZJWE1FCi0gKiovCi0KLS8qKgotICogV2ViS2l0U291cFJlcXVl
c3Q6Ci0gKgotICogRklYTUUKLSAqCi0gKiBTaW5jZTogMi4zMAotICoqLwotCi1zdGF0aWMgdm9p
ZCB3ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0IChHSW5pdGFibGVJ
ZmFjZSAqaW5pdGFibGVfaW50ZXJmYWNlKTsKLQotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKFdl
YktpdFNvdXBSZXF1ZXN0LCB3ZWJraXRfc291cF9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNULAotCQkJ
IEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR19UWVBFX0lOSVRBQkxFLAotCQkJCQkJd2Via2l0X3Nv
dXBfcmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCkpCi0KLWVudW0gewotCVBST1BfMCwK
LQlQUk9QX1VSSSwKLQlQUk9QX1NFU1NJT04KLX07Ci0KLXN0cnVjdCBfV2ViS2l0U291cFJlcXVl
c3RQcml2YXRlIHsKLQlTb3VwVVJJICp1cmk7Ci0JU291cFNlc3Npb24gKnNlc3Npb247Ci19Owot
Ci1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9pbml0IChXZWJLaXRTb3VwUmVxdWVz
dCAqcmVxdWVzdCkKLXsKLQlyZXF1ZXN0LT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFIChyZXF1ZXN0LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0
UHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbmFsaXpl
IChHT2JqZWN0ICpvYmplY3QpCi17Ci0JV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QgPSBXRUJL
SVRfU09VUF9SRVFVRVNUIChvYmplY3QpOwotCi0JaWYgKHJlcXVlc3QtPnByaXYtPnVyaSkKLQkJ
c291cF91cmlfZnJlZSAocmVxdWVzdC0+cHJpdi0+dXJpKTsKLQlpZiAocmVxdWVzdC0+cHJpdi0+
c2Vzc2lvbikKLQkJZ19vYmplY3RfdW5yZWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pOwotCi0J
R19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxp
emUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X3NldF9w
cm9wZXJ0eSAoR09iamVjdCAgICAgICpvYmplY3QsCi0JCQkJICBndWludCBwcm9wX2lkLAotCQkJ
CSAgY29uc3QgR1ZhbHVlICp2YWx1ZSwKLQkJCQkgIEdQYXJhbVNwZWMgICAqcHNwZWMpCi17Ci0J
V2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUIChvYmplY3Qp
OwotCi0Jc3dpdGNoIChwcm9wX2lkKSB7Ci0JY2FzZSBQUk9QX1VSSToKLQkJaWYgKHJlcXVlc3Qt
PnByaXYtPnVyaSkKLQkJCXNvdXBfdXJpX2ZyZWUgKHJlcXVlc3QtPnByaXYtPnVyaSk7Ci0JCXJl
cXVlc3QtPnByaXYtPnVyaSA9IGdfdmFsdWVfZHVwX2JveGVkICh2YWx1ZSk7Ci0JCWJyZWFrOwot
CWNhc2UgUFJPUF9TRVNTSU9OOgotCQlpZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbikKLQkJCWdf
b2JqZWN0X3VucmVmIChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKLQkJcmVxdWVzdC0+cHJpdi0+
c2Vzc2lvbiA9IGdfdmFsdWVfZHVwX29iamVjdCAodmFsdWUpOwotCQlicmVhazsKLQlkZWZhdWx0
OgotCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwg
cHNwZWMpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1
ZXN0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAgICAqb2JqZWN0LAotCQkJCSAgZ3VpbnQgcHJvcF9p
ZCwKLQkJCQkgIEdWYWx1ZSAgICAgKnZhbHVlLAotCQkJCSAgR1BhcmFtU3BlYyAqcHNwZWMpCi17
Ci0JV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUIChvYmpl
Y3QpOwotCi0Jc3dpdGNoIChwcm9wX2lkKSB7Ci0JY2FzZSBQUk9QX1VSSToKLQkJZ192YWx1ZV9z
ZXRfYm94ZWQgKHZhbHVlLCByZXF1ZXN0LT5wcml2LT51cmkpOwotCQlicmVhazsKLQljYXNlIFBS
T1BfU0VTU0lPTjoKLQkJZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgcmVxdWVzdC0+cHJpdi0+
c2Vzc2lvbik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQot
c3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2luaXQgKEdJbml0
YWJsZSAgICAgKmluaXRhYmxlLAotCQkJCSAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAot
CQkJCSAgIEdFcnJvciAgICAgICAqKmVycm9yKQotewotCVdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1
ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVCAoaW5pdGFibGUpOwotCWdib29sZWFuIG9rOwotCi0J
aWYgKCFyZXF1ZXN0LT5wcml2LT51cmkpIHsKLQkJZ19zZXRfZXJyb3IgKGVycm9yLCBXRUJLSVRf
U09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfQkFEX1VSSSwKLQkJCSAgICAgXyAoIk5vIFVS
SSBwcm92aWRlZCIpKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCW9rID0gV0VCS0lUX1NPVVBf
UkVRVUVTVF9HRVRfQ0xBU1MgKGluaXRhYmxlKS0+Ci0JCWNoZWNrX3VyaSAocmVxdWVzdCwgcmVx
dWVzdC0+cHJpdi0+dXJpLCBlcnJvcik7Ci0KLQlpZiAoIW9rICYmIGVycm9yKSB7Ci0JCWNoYXIg
KnVyaV9zdHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcgKHJlcXVlc3QtPnByaXYtPnVyaSwgRkFM
U0UpOwotCQlnX3NldF9lcnJvciAoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09V
UF9FUlJPUl9CQURfVVJJLAotCQkJICAgICBfICgiSW52YWxpZCAnJXMnIFVSSTogJXMiKSwKLQkJ
CSAgICAgcmVxdWVzdC0+cHJpdi0+dXJpLT5zY2hlbWUsCi0JCQkgICAgIHVyaV9zdHJpbmcpOwot
CQlnX2ZyZWUgKHVyaV9zdHJpbmcpOwotCX0KLQotCXJldHVybiBvazsKLX0KLQotc3RhdGljIGdi
b29sZWFuCi13ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfY2hlY2tfdXJpIChXZWJLaXRTb3Vw
UmVxdWVzdCAgKnJlcXVlc3QsCi0JCQkJICAgICAgIFNvdXBVUkkgICAgICAqdXJpLAotCQkJCSAg
ICAgICBHRXJyb3IgICAgICAqKmVycm9yKQotewotCXJldHVybiBUUlVFOwotfQotCi0vKiBEZWZh
dWx0IGltcGxlbWVudGF0aW9uOiBhc3N1bWUgdGhlIHN5bmMgaW1wbGVtZW50YXRpb24gZG9lc24n
dCBibG9jayAqLwotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5k
X2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkJR0NhbmNl
bGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQlHQXN5bmNSZWFkeUNhbGxiYWNrIGNh
bGxiYWNrLAotCQkJCQlncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JR1NpbXBsZUFzeW5jUmVzdWx0
ICpzaW1wbGU7Ci0KLQlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVD
VCAocmVxdWVzdCksCi0JCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhLAotCQkJCQkgICAgd2Vi
a2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmMpOwotCWdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9jb21wbGV0ZV9pbl9pZGxlIChzaW1wbGUpOwotCWdfb2JqZWN0X3VucmVmIChzaW1wbGUp
OwotfQotCi1zdGF0aWMgR0lucHV0U3RyZWFtICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVs
dF9zZW5kX2ZpbmlzaCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkJ
CSBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAotCQkJCQkgR0Vycm9yICAgICAgICAgICAg
ICAqKmVycm9yKQotewotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1
bHRfaXNfdmFsaWQgKHJlc3VsdCwgR19PQkpFQ1QgKHJlcXVlc3QpLCB3ZWJraXRfc291cF9yZXF1
ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyksIE5VTEwpOwotCi0JcmV0dXJuIHdlYmtpdF9zb3VwX3Jl
cXVlc3Rfc2VuZCAocmVxdWVzdCwgTlVMTCwgZXJyb3IpOwotfQotCi1HSW5wdXRTdHJlYW0gKgot
d2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVx
dWVzdCwKLQkJCSAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJICBHRXJy
b3IgICAgICAgICAgICAgICoqZXJyb3IpCi17Ci0JcmV0dXJuIFdFQktJVF9TT1VQX1JFUVVFU1Rf
R0VUX0NMQVNTIChyZXF1ZXN0KS0+Ci0JCXNlbmQgKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBlcnJv
cik7Ci19Ci0KLXZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyAoV2ViS2l0U291
cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkJR0NhbmNlbGxhYmxlICAgICAgICAgKmNh
bmNlbGxhYmxlLAotCQkJCUdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkJZ3BvaW50
ZXIgdXNlcl9kYXRhKQotewotCVdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0
KS0+Ci0JCXNlbmRfYXN5bmMgKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlcl9k
YXRhKTsKLX0KLQotR0lucHV0U3RyZWFtICoKLXdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9maW5p
c2ggKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJCSBHQXN5bmNSZXN1
bHQgICAgICAgICAqcmVzdWx0LAotCQkJCSBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCi17
Ci0JcmV0dXJuIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+Ci0JCXNl
bmRfZmluaXNoIChyZXF1ZXN0LCByZXN1bHQsIGVycm9yKTsKLX0KLQotc3RhdGljIHZvaWQKLXdl
YmtpdF9zb3VwX3JlcXVlc3RfY2xhc3NfaW5pdCAoV2ViS2l0U291cFJlcXVlc3RDbGFzcyAqcmVx
dWVzdF9jbGFzcykKLXsKLQlHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NM
QVNTIChyZXF1ZXN0X2NsYXNzKTsKLQotCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVz
dF9jbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUpKTsKLQotCXJlcXVlc3Rf
Y2xhc3MtPmNoZWNrX3VyaSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9jaGVja191cmk7
Ci0JcmVxdWVzdF9jbGFzcy0+c2VuZF9hc3luYyA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVs
dF9zZW5kX2FzeW5jOwotCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gd2Via2l0X3NvdXBf
cmVxdWVzdF9kZWZhdWx0X3NlbmRfZmluaXNoOwotCi0Jb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9
IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmluYWxpemU7Ci0Jb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVy
dHkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X3NldF9wcm9wZXJ0eTsKLQlvYmplY3RfY2xhc3MtPmdl
dF9wcm9wZXJ0eSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5OwotCi0JZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoCi0JCSBvYmplY3RfY2xhc3MsIFBST1BfVVJJLAot
CQkgZ19wYXJhbV9zcGVjX2JveGVkIChXRUJLSVRfU09VUF9SRVFVRVNUX1VSSSwKLQkJCQkgICAg
ICJVUkkiLAotCQkJCSAgICAgIlRoZSByZXF1ZXN0IFVSSSIsCi0JCQkJICAgICBTT1VQX1RZUEVf
VVJJLAotCQkJCSAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZ
KSk7Ci0JZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoCi0JCSBvYmplY3RfY2xhc3Ms
IFBST1BfU0VTU0lPTiwKLQkJIGdfcGFyYW1fc3BlY19vYmplY3QgKFdFQktJVF9TT1VQX1JFUVVF
U1RfU0VTU0lPTiwKLQkJCQkgICAgICAiU2Vzc2lvbiIsCi0JCQkJICAgICAgIlRoZSByZXF1ZXN0
J3Mgc2Vzc2lvbiIsCi0JCQkJICAgICAgU09VUF9UWVBFX1NFU1NJT04sCi0JCQkJICAgICAgR19Q
QVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7Ci19Ci0KLXN0YXRpYyB2
b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0IChHSW5pdGFi
bGVJZmFjZSAqaW5pdGFibGVfaW50ZXJmYWNlKQotewotCWluaXRhYmxlX2ludGVyZmFjZS0+aW5p
dCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFibGVfaW5pdDsKLX0KLQotU291cFVSSSAqCi13
ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQot
ewotCXJldHVybiByZXF1ZXN0LT5wcml2LT51cmk7Ci19Ci0KLVNvdXBTZXNzaW9uICoKLXdlYmtp
dF9zb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQot
ewotCXJldHVybiByZXF1ZXN0LT5wcml2LT5zZXNzaW9uOwotfQotCi1nb2Zmc2V0Ci13ZWJraXRf
c291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aCAoV2ViS2l0U291cFJlcXVlc3QgKnJlcXVl
c3QpCi17Ci0JcmV0dXJuIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+
Z2V0X2NvbnRlbnRfbGVuZ3RoIChyZXF1ZXN0KTsKLX0KLQotY29uc3QgY2hhciAqCi13ZWJraXRf
c291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUgKFdlYktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVz
dCkKLXsKLQlyZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT5n
ZXRfY29udGVudF90eXBlIChyZXF1ZXN0KTsKLX0KLQotI2RlZmluZSBYRElHSVQoYykgKChjKSA8
PSAnOScgPyAoYykgLSAnMCcgOiAoKGMpICYgMHg0RikgLSAnQScgKyAxMCkKLSNkZWZpbmUgSEVY
Q0hBUihzKSAoKFhESUdJVCAoc1sxXSkgPDwgNCkgKyBYRElHSVQgKHNbMl0pKQotCi0vKiBDb3B5
JnBhc3RlZCBmcm9tIGxpYnNvdXAncyBzb3VwLXVyaS5jIGFmdGVyIGFwcGx5aW5nIHRoZSBwYXRj
aCBpbgotICogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMDU0
MC4gV2UgbmVlZCB0aGlzCi0gKiBpbnN0ZWFkIG9mIHNvdXBfdXJpX2RlY29kZSgpIGFzIGl0IGlu
Y29ycmVjdGx5IHJldHVybnMgTlVMTCBmb3IKLSAqIGluY29ycmVjdGx5IGVuY29kZWQgVVJMcy4g
VE9ETzogcmVtb3ZlIHRoaXMgd2hlbiByZXF1aXJlZCBsaWJzb3VwCi0gKiB2ZXJzaW9uIGlzIGJ1
bXBlZCBvdXQgdG8gMi4zMi4xCi0gKi8KLWdjaGFyICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfdXJp
X2RlY29kZWRfY29weSAoY29uc3QgY2hhciAqcGFydCwgaW50IGxlbmd0aCkKLXsKLQl1bnNpZ25l
ZCBjaGFyICpzLCAqZDsKLSAgICAgICAgY2hhciAqZGVjb2RlZCA9IGdfc3RybmR1cCAocGFydCwg
bGVuZ3RoKTsKLQotICAgICAgICBzID0gZCA9ICh1bnNpZ25lZCBjaGFyICopZGVjb2RlZDsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnJScpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghZ19hc2NpaV9pc3hkaWdpdCAoc1sxXSkgfHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAhZ19hc2NpaV9pc3hkaWdpdCAoc1syXSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKmQrKyA9ICpzOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICpkKysgPSBIRVhDSEFSIChzKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHMgKz0gMjsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICpkKysgPSAqczsKLSAgICAgICAgfSB3aGlsZSAoKnMrKyk7Ci0KLSAgICAgICAgcmV0dXJuIGRl
Y29kZWQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDgzN2Q4ZjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAK
LS8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFz
aWMtb2Zmc2V0OiA4IC0qLSAqLwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJ
bmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX1NP
VVBfUkVRVUVTVF9ICi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSCAxCi0KLSNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0KLUdfQkVHSU5fREVDTFMK
LQotI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X3Nv
dXBfcmVxdWVzdF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVChvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNULCBXZWJLaXRTb3VwUmVxdWVzdCkpCi0jZGVmaW5lIFdFQktJVF9TT1VQ
X1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNz
KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNULCBXZWJLaXRTb3VwUmVxdWVzdENsYXNzKSkKLSNk
ZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUKSkKLSNkZWZpbmUg
V0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QpKQotI2RlZmluZSBXRUJLSVRf
U09VUF9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAo
KG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCwgV2ViS2l0U291cFJlcXVlc3RDbGFzcykp
Ci0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdCBXZWJLaXRTb3VwUmVxdWVzdDsK
LXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUgV2ViS2l0U291cFJlcXVl
c3RQcml2YXRlOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgV2ViS2l0
U291cFJlcXVlc3RDbGFzczsKLQotc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdCB7Ci0JR09iamVj
dCBwYXJlbnQ7Ci0KLQlXZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUgKnByaXY7Ci19OwotCi1zdHJ1
Y3QgX1dlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgewotCUdPYmplY3RDbGFzcyBwYXJlbnQ7Ci0KLQln
Ym9vbGVhbiAoKmNoZWNrX3VyaSkoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcV9iYXNl
LAotCQkJICAgICAgU291cFVSSSAgICAgICAgICAgICAgKnVyaSwKLQkJCSAgICAgIEdFcnJvciAg
ICAgICAgICAgICAgKiplcnJvcik7Ci0KLQlHSW5wdXRTdHJlYW0gKiAoKnNlbmQpKFdlYktpdFNv
dXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAg
ICAgICpjYW5jZWxsYWJsZSwKLQkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3Ip
OwotCXZvaWQgKCpzZW5kX2FzeW5jKShXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVz
dCwKLQkJCSAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCSAgIEdBc3lu
Y1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkgICBncG9pbnRlciB1c2VyX2RhdGEpOwotCUdJ
bnB1dFN0cmVhbSAqICgqc2VuZF9maW5pc2gpKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpy
ZXF1ZXN0LAotCQkJCSAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCi0JCQkJICAg
ICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKLQotCWdvZmZzZXQgKCpnZXRfY29udGVu
dF9sZW5ndGgpKFdlYktpdFNvdXBSZXF1ZXN0ICAgKnJlcXVlc3QpOwotCWNvbnN0IGNoYXIgKiAg
ICgqZ2V0X2NvbnRlbnRfdHlwZSkoV2ViS2l0U291cFJlcXVlc3QgICAqcmVxdWVzdCk7Ci19Owot
Ci1HVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF90eXBlICh2b2lkKTsKLQotI2RlZmluZSBX
RUJLSVRfU09VUF9SRVFVRVNUX1VSSSAgICAgInVyaSIKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVR
VUVTVF9TRVNTSU9OICJzZXNzaW9uIgotCi1HSW5wdXRTdHJlYW0gKndlYmtpdF9zb3VwX3JlcXVl
c3Rfc2VuZCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkJCUdDYW5j
ZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJR0Vycm9yICAgICAgICAgICAgICAq
KmVycm9yKTsKLXZvaWQgICAgICAgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2FzeW5jIChX
ZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkJICAgICAgR0NhbmNlbGxh
YmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNr
IGNhbGxiYWNrLAotCQkJCQkgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotR0lucHV0U3RyZWFt
ICp3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAg
ICAgICAqcmVxdWVzdCwKLQkJCQkJICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQs
Ci0JCQkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwotCi1Tb3VwVVJJICAg
ICAgKndlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3VyaSAoV2ViS2l0U291cFJlcXVlc3QgICAgICAg
ICAgKnJlcXVlc3QpOwotU291cFNlc3Npb24gICp3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9zZXNz
aW9uIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7Ci0KLWdvZmZzZXQgICAg
ICAgd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGggKFdlYktpdFNvdXBSZXF1
ZXN0ICAgICAgICAgICpyZXF1ZXN0KTsKLWNvbnN0IGNoYXIgICAqd2Via2l0X3NvdXBfcmVxdWVz
dF9nZXRfY29udGVudF90eXBlIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7
Ci0KLS8qIFVzZWQgYnkgV2ViS2l0U291cFJlcXVlc3RGaWxlIGFuZCBXZWJLaXRTb3VwUmVxdWVz
dERhdGEuIElkZWFsbHkKLSAqIHNob3VsZCBiZSBsb2NhdGVkIGluIHNvbWUgdXRpbCBmaWxlIGJ1
dCBJJ2xsIHBsYWNlIGl0IGhlcmUgYXMgaXQKLSAqIHdpbGwgYmUgcmVtb3ZlZCB3aXRoIGxpYnNv
dXAgMi4zMi4xIHRoYXQgd2lsbCBzaGlwIGZpeGVkIHZlcnNpb25zCi0gKiBvZiBzb3VwX3VyaV9k
ZWNvZGUvbm9ybWFsaXplCi0gKi8KLWdjaGFyICp3ZWJraXRfc291cF9yZXF1ZXN0X3VyaV9kZWNv
ZGVkX2NvcHkgKGNvbnN0IGNoYXIgKnBhcnQsIGludCBsZW5ndGgpOwotCi1HX0VORF9ERUNMUwot
Ci0jZW5kaWYgLyogV0VCS0lUX1NPVVBfUkVRVUVTVF9IICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5j
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDhhODYwLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5j
CisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDOyB0YWItd2lk
dGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotLyoK
LSAqIHNvdXAtcmVxdWVzdGVyLmM6Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEg
Uy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAic291cC1yZXF1ZXN0ZXIuaCIKLQot
I2luY2x1ZGUgInNvdXAtcmVxdWVzdC1kYXRhLmgiCi0jaW5jbHVkZSAic291cC1yZXF1ZXN0LWZp
bGUuaCIKLSNpbmNsdWRlICJzb3VwLXJlcXVlc3QtaHR0cC5oIgotI2luY2x1ZGUgPGdsaWIvZ2kx
OG4uaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLQotc3RydWN0IF9XZWJLaXRTb3VwUmVx
dWVzdGVyUHJpdmF0ZSB7Ci0JR0hhc2hUYWJsZSAqcmVxdWVzdF90eXBlczsKLX07Ci0KLSNkZWZp
bmUgV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0dFVF9QUklWQVRFKG8pIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUgKChvKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIFdlYktpdFNvdXBS
ZXF1ZXN0ZXJQcml2YXRlKSkKLQotR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cFJlcXVlc3Rlciwg
d2Via2l0X3NvdXBfcmVxdWVzdGVyLCBHX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJr
aXRfc291cF9yZXF1ZXN0ZXJfaW5pdCAoV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyKQot
ewotCXJlcXVlc3Rlci0+cHJpdiA9IFdFQktJVF9TT1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFURSAo
cmVxdWVzdGVyKTsKLQotCXJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcyA9IDA7Ci19Ci0K
LXN0YXRpYyB2b2lkIGZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCi17Ci0JV2ViS2l0U291cFJl
cXVlc3RlciAqcmVxdWVzdGVyID0gV0VCS0lUX1NPVVBfUkVRVUVTVEVSIChvYmplY3QpOwotCi0J
aWYgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcykKLQkJZ19oYXNoX3RhYmxlX2Rlc3Ry
b3kgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcyk7Ci0KLQlHX09CSkVDVF9DTEFTUyAo
d2Via2l0X3NvdXBfcmVxdWVzdGVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwot
fQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfY2xhc3NfaW5pdCAoV2ViS2l0
U291cFJlcXVlc3RlckNsYXNzICpyZXF1ZXN0ZXJfY2xhc3MpCi17Ci0JR09iamVjdENsYXNzICpv
YmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdGVyX2NsYXNzKTsKLQotCWdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdGVyX2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBS
ZXF1ZXN0ZXJQcml2YXRlKSk7Ci0KLQkvKiB2aXJ0dWFsIG1ldGhvZCBvdmVycmlkZSAqLwotCW9i
amVjdF9jbGFzcy0+ZmluYWxpemUgPSBmaW5hbGl6ZTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF9y
ZXF1ZXN0X3R5cGVzIChXZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSAqcHJpdikKLXsKLQlpZiAo
cHJpdi0+cmVxdWVzdF90eXBlcykKLQkJcmV0dXJuOwotCi0JcHJpdi0+cmVxdWVzdF90eXBlcyA9
IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoc291cF9zdHJfY2FzZV9oYXNoLAotCQkJCQkJICAgICBz
b3VwX3N0cl9jYXNlX2VxdWFsLAotCQkJCQkJICAgICBnX2ZyZWUsIDApOwotCWdfaGFzaF90YWJs
ZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiZmlsZSIpLAotCQkJICAg
ICBHU0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSkpOwotCWdf
aGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiZGF0YSIp
LAotCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFU
QSkpOwotCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVw
ICgiaHR0cCIpLAotCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9TT1VQX1JF
UVVFU1RfSFRUUCkpOwotCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMs
IGdfc3RyZHVwICgiaHR0cHMiKSwKLQkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAoV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNUX0hUVFApKTsKLQlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5yZXF1
ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImZ0cCIpLAotCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChX
RUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSkpOwotfQotCi1XZWJLaXRTb3VwUmVxdWVzdGVy
ICp3ZWJraXRfc291cF9yZXF1ZXN0ZXJfbmV3ICh2b2lkKQotewotCXJldHVybiAoV2ViS2l0U291
cFJlcXVlc3RlciAqKWdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIE5V
TEwpOwotfQotCi1XZWJLaXRTb3VwUmVxdWVzdCAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVl
c3QgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwgY29uc3QgY2hhciAqdXJpU3RyaW5n
LCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgR0Vycm9yICoqZXJyb3IpCi17Ci0JU291cFVSSSAqdXJp
ID0gTlVMTDsKLQlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxOwotCi0JdXJpID0gc291cF91cmlfbmV3
ICh1cmlTdHJpbmcpOwotCWlmICghdXJpKSB7Ci0JCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lU
X1NPVVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkksCi0JCQkgICAgIF8gKCJDb3Vs
ZCBub3QgcGFyc2UgVVJJICclcyciKSwgdXJpU3RyaW5nKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0J
cmVxID0gd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3RfdXJpIChyZXF1ZXN0ZXIsIHVyaSwg
c2Vzc2lvbiwgZXJyb3IpOwotCXNvdXBfdXJpX2ZyZWUgKHVyaSk7Ci0JcmV0dXJuIHJlcTsKLX0K
LQotV2ViS2l0U291cFJlcXVlc3QgKndlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSAo
V2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyLCBTb3VwVVJJICp1cmksIFNvdXBTZXNzaW9u
ICpzZXNzaW9uLCBHRXJyb3IgKiplcnJvcikKLXsKLQlHVHlwZSByZXF1ZXN0VHlwZTsKLQotCWdf
cmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9SRVFVRVNURVIgKHJlcXVlc3Rlciks
IDApOwotCi0JaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0ZXItPnByaXYpOwotCXJlcXVlc3RU
eXBlID0gKEdUeXBlKUdQT0lOVEVSX1RPX1NJWkUgKGdfaGFzaF90YWJsZV9sb29rdXAgKHJlcXVl
c3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcywgdXJpLT5zY2hlbWUpKTsKLQlpZiAoIXJlcXVlc3RU
eXBlKSB7Ci0JCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9T
T1VQX0VSUk9SX1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUsCi0JCQkgICAgIF8gKCJVbnN1cHBvcnRl
ZCBVUkkgc2NoZW1lICclcyciKSwgdXJpLT5zY2hlbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlp
ZiAoZ190eXBlX2lzX2EgKHJlcXVlc3RUeXBlLCBHX1RZUEVfSU5JVEFCTEUpKSB7Ci0JCXJldHVy
biAoV2ViS2l0U291cFJlcXVlc3QgKilnX2luaXRhYmxlX25ldyAocmVxdWVzdFR5cGUsIDAsIGVy
cm9yLAotCQkJCQkJCSAgICAidXJpIiwgdXJpLAotCQkJCQkJCSAgICAic2Vzc2lvbiIsIHNlc3Np
b24sCi0JCQkJCQkJICAgIE5VTEwpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoV2ViS2l0U291cFJl
cXVlc3QgKilnX29iamVjdF9uZXcgKHJlcXVlc3RUeXBlLAotCQkJCQkJCSAgInVyaSIsIHVyaSwK
LQkJCQkJCQkgICJzZXNzaW9uIiwgc2Vzc2lvbiwKLQkJCQkJCQkgIE5VTEwpOwotCX0KLX0KLQot
LyogUkZDIDIzOTYsIDMuMSAqLwotc3RhdGljIGdib29sZWFuCi1zb3VwX3NjaGVtZV9pc192YWxp
ZCAoY29uc3QgY2hhciAqc2NoZW1lKQotewotCWlmIChzY2hlbWUgPT0gTlVMTCB8fAotCSAgICAh
Z19hc2NpaV9pc2FscGhhICgqc2NoZW1lKSkKLQkJcmV0dXJuIEZBTFNFOwotCi0Jc2NoZW1lKys7
Ci0Jd2hpbGUgKCpzY2hlbWUpIHsKLQkJaWYgKCFnX2FzY2lpX2lzYWxwaGEgKCpzY2hlbWUpICYm
Ci0JCSAgICAhZ19hc2NpaV9pc2RpZ2l0ICgqc2NoZW1lKSAmJgotCQkgICAgKnNjaGVtZSAhPSAn
KycgJiYKLQkJICAgICpzY2hlbWUgIT0gJy0nICYmCi0JCSAgICAqc2NoZW1lICE9ICcuJykKLQkJ
CXJldHVybiBGQUxTRTsKLQkJc2NoZW1lKys7Ci0JfQotCXJldHVybiBUUlVFOwotfQotCi12b2lk
Ci13ZWJraXRfc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sIChXZWJLaXRTb3VwUmVxdWVzdGVy
ICpyZXF1ZXN0ZXIsCi0JCQkJICAgIGNvbnN0IGNoYXIgICpzY2hlbWUsCi0JCQkJICAgIEdUeXBl
IHJlcXVlc3RfdHlwZSkKLXsKLQlnX3JldHVybl9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9SRVFV
RVNURVIgKHJlcXVlc3RlcikpOwotCWdfcmV0dXJuX2lmX2ZhaWwgKHNvdXBfc2NoZW1lX2lzX3Zh
bGlkIChzY2hlbWUpKTsKLQotCWluaXRfcmVxdWVzdF90eXBlcyAocmVxdWVzdGVyLT5wcml2KTsK
LQlnX2hhc2hfdGFibGVfaW5zZXJ0IChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMsIGdf
c3RyZHVwIChzY2hlbWUpLAotCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChyZXF1ZXN0X3R5cGUp
KTsKLX0KLQotdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlbW92ZV9wcm90b2NvbCAoV2Vi
S2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAotCQkJCSAgICAgICBjb25zdCBjaGFyICAqc2No
ZW1lKQotewotCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX1JFUVVFU1RFUiAocmVx
dWVzdGVyKSk7Ci0JZ19yZXR1cm5faWZfZmFpbCAoc291cF9zY2hlbWVfaXNfdmFsaWQgKHNjaGVt
ZSkpOwotCi0JaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0ZXItPnByaXYpOwotCWdfaGFzaF90
YWJsZV9yZW1vdmUgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcywgc2NoZW1lKTsKLX0K
LQotR1F1YXJrCi13ZWJraXRfc291cF9lcnJvcl9xdWFyayAodm9pZCkKLXsKLQlzdGF0aWMgR1F1
YXJrIGVycm9yOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZ19xdWFya19mcm9tX3N0YXRpY19z
dHJpbmcgKCJ3ZWJraXRfc291cF9lcnJvcl9xdWFyayIpOwotCXJldHVybiBlcnJvcjsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZmYxMDMu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKiAtKi0g
TW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNl
dDogOCAtKi0gKi8KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBXRUJLSVRfU09VUF9SRVFVRVNURVJfSAotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNURVJf
SCAxCi0KLSNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVS
ICAgICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9nZXRfdHlwZSAoKSkKLSNkZWZpbmUg
V0VCS0lUX1NPVVBfUkVRVUVTVEVSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiwgV2ViS2l0U291cFJl
cXVlc3RlcikpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RFUl9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVF
U1RFUiwgV2ViS2l0U291cFJlcXVlc3RlckNsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBf
UkVRVUVTVEVSKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmop
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUikpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX1JF
UVVFU1RFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgob2JqKSwgV0VC
S0lUX1RZUEVfU09VUF9SRVFVRVNURVIpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNURVJf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lU
X1RZUEVfU09VUF9SRVFVRVNURVIsIFdlYktpdFNvdXBSZXF1ZXN0ZXJDbGFzcykpCi0KLSNkZWZp
bmUgV0VCS0lUX1NPVVBfRVJST1Igd2Via2l0X3NvdXBfZXJyb3JfcXVhcmsgKCkKLQotdHlwZWRl
ZiBlbnVtIHsKLQlXRUJLSVRfU09VUF9FUlJPUl9CQURfVVJJLAotCVdFQktJVF9TT1VQX0VSUk9S
X1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUKLX0gV2ViS2l0U291cEVycm9yOwotCi10eXBlZGVmIHN0
cnVjdCBfV2ViS2l0U291cFJlcXVlc3RlciBXZWJLaXRTb3VwUmVxdWVzdGVyOwotdHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlIFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2
YXRlOwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0ZXIgewotCUdPYmplY3QgcGFyZW50Owot
Ci0JV2ViS2l0U291cFJlcXVlc3RlclByaXZhdGUgKnByaXY7Ci19OwotCi10eXBlZGVmIHN0cnVj
dCB7Ci0JR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX0gV2ViS2l0U291cFJlcXVlc3RlckNs
YXNzOwotCi1HVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfZ2V0X3R5cGUgKHZvaWQpOwotCi1X
ZWJLaXRTb3VwUmVxdWVzdGVyICp3ZWJraXRfc291cF9yZXF1ZXN0ZXJfbmV3ICh2b2lkKTsKLQot
R1F1YXJrIHdlYmtpdF9zb3VwX2Vycm9yX3F1YXJrICh2b2lkKTsKLQotV2ViS2l0U291cFJlcXVl
c3QgKndlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0IChXZWJLaXRTb3VwUmVxdWVzdGVyICpy
ZXF1ZXN0ZXIsCi0JCQkJCQkgIGNvbnN0IGNoYXIgKnVyaVN0cmluZywKLQkJCQkJCSAgU291cFNl
c3Npb24gKnNlc3Npb24sCi0JCQkJCQkgIEdFcnJvciAqKmVycm9yKTsKLQotV2ViS2l0U291cFJl
cXVlc3QgKndlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSAoV2ViS2l0U291cFJlcXVl
c3RlciAqcmVxdWVzdGVyLAotCQkJCQkJICAgICAgU291cFVSSSAqdXJpLAotCQkJCQkJICAgICAg
U291cFNlc3Npb24gKnNlc3Npb24sCi0JCQkJCQkgICAgICBHRXJyb3IgKiplcnJvcik7Ci0KLXZv
aWQgd2Via2l0X3NvdXBfcmVxdWVzdGVyX2FkZF9wcm90b2NvbCAoV2ViS2l0U291cFJlcXVlc3Rl
ciAqcmVxdWVzdGVyLAotCQkJCQkgY29uc3QgY2hhciAgKnNjaGVtZSwKLQkJCQkJIEdUeXBlIHJl
cXVlc3RfdHlwZSk7Ci0KLXZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlbW92ZV9wcm90b2Nv
bCAoV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAotCQkJCQkgICAgY29uc3QgY2hhciAg
KnNjaGVtZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfU09VUF9SRVFVRVNU
RVJfSCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZjhkZTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZh
dGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDOyB0YWIt
d2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwot
LyoKLSAqIHNvdXAtY2FjaGUtcHJpdmF0ZS5oOgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEsIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2lmbmRlZiBXRUJLSVRfU09VUF9DQUNIRV9QUklWQVRFX0gKLSNkZWZpbmUg
V0VCS0lUX1NPVVBfQ0FDSEVfUFJJVkFURV9IIDEKLQotI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIK
LSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtbWVzc2FnZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLVdl
YktpdFNvdXBDYWNoZVJlc3BvbnNlIHdlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZSAoV2Vi
S2l0U291cENhY2hlICAgKmNhY2hlLAotCQkJCQkJCVNvdXBNZXNzYWdlICptc2cpOwotR0lucHV0
U3RyZWFtICp3ZWJraXRfc291cF9jYWNoZV9zZW5kX3Jlc3BvbnNlIChXZWJLaXRTb3VwQ2FjaGUg
ICAqY2FjaGUsCi0JCQkJCSAgICAgICBTb3VwTWVzc2FnZSAqbXNnKTsKLVdlYktpdFNvdXBDYWNo
ZWFiaWxpdHkgIHdlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKFdlYktpdFNvdXBD
YWNoZSAgICpjYWNoZSwKLQkJCQkJCQkgICAgU291cE1lc3NhZ2UgKm1zZyk7Ci1Tb3VwTWVzc2Fn
ZSAqd2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoV2ViS2l0
U291cENhY2hlICAgKmNhY2hlLAotCQkJCQkJCSAgICAgU291cE1lc3NhZ2UgKm9yaWdpbmFsKTsK
LQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIFdFQktJVF9TT1VQX0NBQ0hFX1BSSVZBVEVfSCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdC9zb3VwLWNhY2hlLmMgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjk2NDI4ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYworKysgL2Rldi9udWxsCkBAIC0xLDE2Nzcg
KzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTog
dDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogc291cC1jYWNoZS5jCi0gKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIFRPRE86Ci0gKiAtIE5lZWQg
dG8gaG9vayB0aGUgZmVhdHVyZSBpbiB0aGUgc3luYyBTb3VwU2Vzc2lvbi4KLSAqIC0gTmVlZCBt
b3JlIHRlc3RzLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmln
Lmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKLSNpbmNsdWRlICJzb3VwLWNh
Y2hlLXByaXZhdGUuaCIKLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxnaW8v
Z2lvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLXN0YXRpYyBTb3VwU2Vzc2lvbkZlYXR1cmVJ
bnRlcmZhY2UgKndlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2U7Ci1z
dGF0aWMgdm9pZCB3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAoU291cFNl
c3Npb25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwgZ3BvaW50ZXIgaW50ZXJm
YWNlX2RhdGEpOwotCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NJWkUgNTAgKiAxMDI0ICogMTAyNAot
I2RlZmluZSBNQVhfRU5UUllfREFUQV9QRVJDRU5UQUdFIDEwIC8qIFBlcmNlbnRhZ2Ugb2YgdGhl
IHRvdGFsIHNpemUKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBjYWNo
ZSB0aGF0IGNhbiBiZQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbGVkIGJ5
IGEgc2luZ2xlIGVudHJ5ICovCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGVFbnRy
eSB7Ci0JY2hhciAqa2V5OwotCWNoYXIgKmZpbGVuYW1lOwotCWd1aW50IGZyZXNobmVzc19saWZl
dGltZTsKLQlnYm9vbGVhbiBtdXN0X3JldmFsaWRhdGU7Ci0JR1N0cmluZyAqZGF0YTsKLQlnc2l6
ZSBwb3M7Ci0JZ3NpemUgbGVuZ3RoOwotCXRpbWVfdCBjb3JyZWN0ZWRfaW5pdGlhbF9hZ2U7Ci0J
dGltZV90IHJlc3BvbnNlX3RpbWU7Ci0JZ2Jvb2xlYW4gd3JpdGluZzsKLQlnYm9vbGVhbiBkaXJ0
eTsKLQlnYm9vbGVhbiBnb3RfYm9keTsKLQlnYm9vbGVhbiBiZWluZ192YWxpZGF0ZWQ7Ci0JU291
cE1lc3NhZ2VIZWFkZXJzICpoZWFkZXJzOwotCUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsKLQlHRXJy
b3IgKmVycm9yOwotCWd1aW50IGhpdHM7Ci0JR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKLX0g
V2ViS2l0U291cENhY2hlRW50cnk7Ci0KLXN0cnVjdCBfV2ViS2l0U291cENhY2hlUHJpdmF0ZSB7
Ci0JY2hhciAqY2FjaGVfZGlyOwotCUdIYXNoVGFibGUgKmNhY2hlOwotCWd1aW50IG5fcGVuZGlu
ZzsKLQlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKLQlXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5
cGU7Ci0JZ3VpbnQgc2l6ZTsKLQlndWludCBtYXhfc2l6ZTsKLQlndWludCBtYXhfZW50cnlfZGF0
YV9zaXplOyAvKiBDb21wdXRlZCB2YWx1ZS4gSGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAq
LwotCUdMaXN0ICpscnVfc3RhcnQ7Ci19OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291
cENhY2hlICpjYWNoZTsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7Ci0JU291cE1lc3Nh
Z2UgKm1zZzsKLQlndWxvbmcgZ290X2NodW5rX2hhbmRsZXI7Ci0JZ3Vsb25nIGdvdF9ib2R5X2hh
bmRsZXI7Ci0JZ3Vsb25nIHJlc3RhcnRlZF9oYW5kbGVyOwotfSBXZWJLaXRTb3VwQ2FjaGVXcml0
aW5nRml4dHVyZTsKLQotZW51bSB7Ci0JUFJPUF8wLAotCVBST1BfQ0FDSEVfRElSLAotCVBST1Bf
Q0FDSEVfVFlQRQotfTsKLQotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURShv
KSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFdFQktJVF9UWVBFX1NPVVBfQ0FD
SEUsIFdlYktpdFNvdXBDYWNoZVByaXZhdGUpKQotCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAo
V2ViS2l0U291cENhY2hlLCB3ZWJraXRfc291cF9jYWNoZSwgR19UWVBFX09CSkVDVCwKLQkJCSBH
X0lNUExFTUVOVF9JTlRFUkZBQ0UgKFNPVVBfVFlQRV9TRVNTSU9OX0ZFQVRVUkUsCi0JCQkJCQl3
ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCkpCi0KLXN0YXRpYyBnYm9vbGVh
biB3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUs
IFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSk7Ci1zdGF0aWMgdm9pZCBtYWtlX3Jvb21fZm9y
X25ld19lbnRyeSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCk7
Ci1zdGF0aWMgZ2Jvb2xlYW4gY2FjaGVfYWNjZXB0c19lbnRyaWVzX29mX3NpemUgKFdlYktpdFNv
dXBDYWNoZSAqY2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpOwotCi1zdGF0aWMgV2ViS2l0U291
cENhY2hlYWJpbGl0eQotZ2V0X2NhY2hlYWJpbGl0eSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwg
U291cE1lc3NhZ2UgKm1zZykKLXsKLQlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IGNhY2hlYWJpbGl0
eTsKLQljb25zdCBjaGFyICpjYWNoZV9jb250cm9sOwotCi0JLyogMS4gVGhlIHJlcXVlc3QgbWV0
aG9kIG11c3QgYmUgY2FjaGVhYmxlICovCi0JaWYgKG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9E
X0dFVCkKLQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfQ0FDSEVBQkxFOwotCWVs
c2UgaWYgKG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0hFQUQgfHwKLQkJIG1zZy0+bWV0aG9k
ID09IFNPVVBfTUVUSE9EX1RSQUNFIHx8Ci0JCSBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9D
T05ORUNUKQotCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7Ci0JZWxzZQot
CQlyZXR1cm4gKFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FD
SEVfSU5WQUxJREFURVMpOwotCi0JY2FjaGVfY29udHJvbCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOwotCWlmIChjYWNo
ZV9jb250cm9sKSB7Ci0JCUdIYXNoVGFibGUgKmhhc2g7Ci0JCVdlYktpdFNvdXBDYWNoZVByaXZh
dGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2FjaGUpOwotCi0JCWhh
c2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250cm9sKTsKLQotCQkv
KiBTaGFyZWQgY2FjaGVzIE1VU1QgTk9UIHN0b3JlIHByaXZhdGUgcmVzb3VyY2VzICovCi0JCWlm
IChwcml2LT5jYWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRCkgewotCQkJaWYg
KGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJwcml2YXRlIiwgTlVMTCwgTlVM
TCkpIHsKLQkJCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOwotCQkJCXJldHVy
biBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKLQkJCX0KLQkJfQotCi0JCS8qIDIuIFRo
ZSAnbm8tc3RvcmUnIGNhY2hlIGRpcmVjdGl2ZSBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlCi0JCSAq
IGhlYWRlcnMKLQkJICovCi0JCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNo
LCAibm8tc3RvcmUiLCBOVUxMLCBOVUxMKSkgewotCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9s
aXN0IChoYXNoKTsKLQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKLQkJ
fQotCi0JCS8qIFRoaXMgZG9lcyBub3QgYXBwZWFyIGluIHNlY3Rpb24gMi4xLCBidXQgSSB0aGlu
ayBpdCBtYWtlcwotCQkgKiBzZW5zZSB0byBjaGVjayBpdCB0b28/Ci0JCSAqLwotCQlpZiAoZ19o
YXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLWNhY2hlIiwgTlVMTCwgTlVMTCkp
IHsKLQkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7Ci0JCQlyZXR1cm4gV0VC
S0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7Ci0JCX0KLQotCQlzb3VwX2hlYWRlcl9mcmVlX3Bh
cmFtX2xpc3QgKGhhc2gpOwotCX0KLQotCXN3aXRjaCAobXNnLT5zdGF0dXNfY29kZSkgewotCWNh
c2UgU09VUF9TVEFUVVNfUEFSVElBTF9DT05URU5UOgotCQkvKiBXZSBkb24ndCBjYWNoZSBwYXJ0
aWFsIHJlc3BvbnNlcywgYnV0IHRoZXkgb25seQotCQkgKiBpbnZhbGlkYXRlIGNhY2hlZCBmdWxs
IHJlc3BvbnNlcyBpZiB0aGUgaGVhZGVycwotCQkgKiBkb24ndCBtYXRjaC4KLQkJICovCi0JCWNh
Y2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOwotCQlicmVhazsKLQot
CWNhc2UgU09VUF9TVEFUVVNfTk9UX01PRElGSUVEOgotCQkvKiBBIDMwNCByZXNwb25zZSB2YWxp
ZGF0ZXMgYW4gZXhpc3RpbmcgY2FjaGUgZW50cnkgKi8KLQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lU
X1NPVVBfQ0FDSEVfVkFMSURBVEVTOwotCQlicmVhazsKLQotCWNhc2UgU09VUF9TVEFUVVNfTVVM
VElQTEVfQ0hPSUNFUzoKLQljYXNlIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZOgotCWNh
c2UgU09VUF9TVEFUVVNfR09ORToKLQkJLyogRklYTUU6IGNhY2hlYWJsZSB1bmxlc3MgaW5kaWNh
dGVkIG90aGVyd2lzZSAqLwotCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9VTkNB
Q0hFQUJMRTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNPVVBfU1RBVFVTX0ZPVU5EOgotCWNhc2UgU09V
UF9TVEFUVVNfVEVNUE9SQVJZX1JFRElSRUNUOgotCQkvKiBGSVhNRTogY2FjaGVhYmxlIGlmIGV4
cGxpY2l0bHkgaW5kaWNhdGVkICovCi0JCWNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hF
X1VOQ0FDSEVBQkxFOwotCQlicmVhazsKLQotCWNhc2UgU09VUF9TVEFUVVNfU0VFX09USEVSOgot
CWNhc2UgU09VUF9TVEFUVVNfRk9SQklEREVOOgotCWNhc2UgU09VUF9TVEFUVVNfTk9UX0ZPVU5E
OgotCWNhc2UgU09VUF9TVEFUVVNfTUVUSE9EX05PVF9BTExPV0VEOgotCQlyZXR1cm4gKFdFQktJ
VF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMp
OwotCi0JZGVmYXVsdDoKLQkJLyogQW55IDV4eCBzdGF0dXMgb3IgYW55IDR4eCBzdGF0dXMgbm90
IGhhbmRsZWQgYWJvdmUKLQkJICogaXMgdW5jYWNoZWFibGUgYnV0IGRvZXNuJ3QgYnJlYWsgdGhl
IGNhY2hlLgotCQkgKi8KLQkJaWYgKChtc2ctPnN0YXR1c19jb2RlID49IFNPVVBfU1RBVFVTX0JB
RF9SRVFVRVNUICYmCi0JCSAgICAgbXNnLT5zdGF0dXNfY29kZSA8PSBTT1VQX1NUQVRVU19GQUlM
RURfREVQRU5ERU5DWSkgfHwKLQkJICAgIG1zZy0+c3RhdHVzX2NvZGUgPj0gU09VUF9TVEFUVVNf
SU5URVJOQUxfU0VSVkVSX0VSUk9SKQotCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FD
SEVBQkxFOwotCi0JCS8qIEFuIHVucmVjb2duaXplZCAyeHgsIDN4eCwgb3IgNHh4IHJlc3BvbnNl
IGJyZWFrcwotCQkgKiB0aGUgY2FjaGUuCi0JCSAqLwotCQlpZiAoKG1zZy0+c3RhdHVzX2NvZGUg
PiBTT1VQX1NUQVRVU19QQVJUSUFMX0NPTlRFTlQgJiYKLQkJICAgICBtc2ctPnN0YXR1c19jb2Rl
IDwgU09VUF9TVEFUVVNfTVVMVElQTEVfQ0hPSUNFUykgfHwKLQkJICAgIChtc2ctPnN0YXR1c19j
b2RlID4gU09VUF9TVEFUVVNfVEVNUE9SQVJZX1JFRElSRUNUICYmCi0JCSAgICAgbXNnLT5zdGF0
dXNfY29kZSA8IFNPVVBfU1RBVFVTX0lOVEVSTkFMX1NFUlZFUl9FUlJPUikpCi0JCQlyZXR1cm4g
KFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJ
REFURVMpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gY2FjaGVhYmlsaXR5OwotfQotCi1zdGF0
aWMgdm9pZAotd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoV2ViS2l0U291cENhY2hlRW50
cnkgKmVudHJ5LCBnYm9vbGVhbiBwdXJnZSkKLXsKLQlpZiAocHVyZ2UpIHsKLQkJR0ZpbGUgKmZp
bGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChlbnRyeS0+ZmlsZW5hbWUpOwotCQlnX2ZpbGVfZGVs
ZXRlIChmaWxlLCBOVUxMLCBOVUxMKTsKLQkJZ19vYmplY3RfdW5yZWYgKGZpbGUpOwotCX0KLQot
CWdfZnJlZSAoZW50cnktPmZpbGVuYW1lKTsKLQllbnRyeS0+ZmlsZW5hbWUgPSBOVUxMOwotCWdf
ZnJlZSAoZW50cnktPmtleSk7Ci0JZW50cnktPmtleSA9IE5VTEw7Ci0KLQlpZiAoZW50cnktPmhl
YWRlcnMpIHsKLQkJc291cF9tZXNzYWdlX2hlYWRlcnNfZnJlZSAoZW50cnktPmhlYWRlcnMpOwot
CQllbnRyeS0+aGVhZGVycyA9IE5VTEw7Ci0JfQotCi0JaWYgKGVudHJ5LT5kYXRhKSB7Ci0JCWdf
c3RyaW5nX2ZyZWUgKGVudHJ5LT5kYXRhLCBUUlVFKTsKLQkJZW50cnktPmRhdGEgPSBOVUxMOwot
CX0KLQlpZiAoZW50cnktPmVycm9yKSB7Ci0JCWdfZXJyb3JfZnJlZSAoZW50cnktPmVycm9yKTsK
LQkJZW50cnktPmVycm9yID0gTlVMTDsKLQl9Ci0JaWYgKGVudHJ5LT5jYW5jZWxsYWJsZSkgewot
CQlnX29iamVjdF91bnJlZiAoZW50cnktPmNhbmNlbGxhYmxlKTsKLQkJZW50cnktPmNhbmNlbGxh
YmxlID0gTlVMTDsKLQl9Ci0KLQlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5LCBl
bnRyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5X2hlYWRlcnMgKGNvbnN0IGNoYXIgKm5hbWUs
IGNvbnN0IGNoYXIgKnZhbHVlLCBTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnMpCi17Ci0Jc291
cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXN0
YXRpYyB2b2lkCi11cGRhdGVfaGVhZGVycyAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq
dmFsdWUsIFNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVycykKLXsKLQlpZiAoc291cF9tZXNzYWdl
X2hlYWRlcnNfZ2V0IChoZWFkZXJzLCBuYW1lKSkKLQkJc291cF9tZXNzYWdlX2hlYWRlcnNfcmVw
bGFjZSAoaGVhZGVycywgbmFtZSwgdmFsdWUpOwotCWVsc2UKLQkJc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBndWludAotd2Vi
a2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChXZWJLaXRTb3VwQ2FjaGVFbnRy
eSAqZW50cnkpCi17Ci0JdGltZV90IG5vdyA9IHRpbWUgKE5VTEwpOwotCXRpbWVfdCByZXNpZGVu
dF90aW1lOwotCi0JcmVzaWRlbnRfdGltZSA9IG5vdyAtIGVudHJ5LT5yZXNwb25zZV90aW1lOwot
CXJldHVybiBlbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdlICsgcmVzaWRlbnRfdGltZTsKLX0K
LQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91
Z2ggKFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgZ2ludCBtaW5fZnJlc2gpCi17Ci0JZ3Vp
bnQgbGltaXQgPSAobWluX2ZyZXNoID09IC0xKSA/IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dl
dF9jdXJyZW50X2FnZSAoZW50cnkpIDogKGd1aW50KSBtaW5fZnJlc2g7Ci0JcmV0dXJuIGVudHJ5
LT5mcmVzaG5lc3NfbGlmZXRpbWUgPiBsaW1pdDsKLX0KLQotc3RhdGljIGNoYXIgKgotc291cF9t
ZXNzYWdlX2dldF9jYWNoZV9rZXkgKFNvdXBNZXNzYWdlICptc2cpCi17Ci0JU291cFVSSSAqdXJp
ID0gc291cF9tZXNzYWdlX2dldF91cmkgKG1zZyk7Ci0JcmV0dXJuIHNvdXBfdXJpX3RvX3N0cmlu
ZyAodXJpLCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9jYWNoZV9lbnRy
eV9zZXRfZnJlc2huZXNzIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksIFNvdXBNZXNzYWdl
ICptc2csIFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCi17Ci0JY29uc3QgY2hhciAqY2FjaGVfY29u
dHJvbDsKLQljb25zdCBjaGFyICpleHBpcmVzLCAqZGF0ZSwgKmxhc3RfbW9kaWZpZWQ7Ci0KLQlj
YWNoZV9jb250cm9sID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywg
IkNhY2hlLUNvbnRyb2wiKTsKLQlpZiAoY2FjaGVfY29udHJvbCkgewotCQljb25zdCBjaGFyICpt
YXhfYWdlLCAqc19tYXhhZ2U7Ci0JCWdpbnQ2NCBmcmVzaG5lc3NfbGlmZXRpbWUgPSAwOwotCQlH
SGFzaFRhYmxlICpoYXNoOwotCQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lU
X1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKLQotCQloYXNoID0gc291cF9oZWFkZXJf
cGFyc2VfcGFyYW1fbGlzdCAoY2FjaGVfY29udHJvbCk7Ci0KLQkJLyogU2hvdWxkIHdlIHJlLXZh
bGlkYXRlIHRoZSBlbnRyeSB3aGVuIGl0IGdvZXMgc3RhbGUgKi8KLQkJZW50cnktPm11c3RfcmV2
YWxpZGF0ZSA9IGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJtdXN0LXJldmFs
aWRhdGUiLCBOVUxMLCBOVUxMKTsKLQotCQkvKiBTZWN0aW9uIDIuMy4xICovCi0JCWlmIChwcml2
LT5jYWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRCkgewotCQkJc19tYXhhZ2Ug
PSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAicy1tYXhhZ2UiKTsKLQkJCWlmIChzX21heGFn
ZSkgewotCQkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9sbCAoc19tYXhhZ2Us
IE5VTEwsIDEwKTsKLQkJCQlpZiAoZnJlc2huZXNzX2xpZmV0aW1lKSB7Ci0JCQkJCS8qIEltcGxp
ZXMgcHJveHktcmV2YWxpZGF0ZS4gVE9ETzogaXMgaXQgdHJ1ZT8gKi8KLQkJCQkJZW50cnktPm11
c3RfcmV2YWxpZGF0ZSA9IFRSVUU7Ci0JCQkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAo
aGFzaCk7Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQkvKiBJZiAnbWF4LWFn
ZScgY2FjaGUgZGlyZWN0aXZlIGlzIHByZXNlbnQsIHVzZSB0aGF0ICovCi0JCW1heF9hZ2UgPSBn
X2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAibWF4LWFnZSIpOwotCQlpZiAobWF4X2FnZSkKLQkJ
CWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9sbCAobWF4X2FnZSwgTlVMTCwgMTAp
OwotCi0JCWlmIChmcmVzaG5lc3NfbGlmZXRpbWUpIHsKLQkJCWVudHJ5LT5mcmVzaG5lc3NfbGlm
ZXRpbWUgPSAoZ3VpbnQpTUlOIChmcmVzaG5lc3NfbGlmZXRpbWUsIEdfTUFYVUlOVDMyKTsKLQkJ
CXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQot
CQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOwotCX0KLQotCS8qIElmIHRoZSAn
RXhwaXJlcycgcmVzcG9uc2UgaGVhZGVyIGlzIHByZXNlbnQsIHVzZSBpdHMgdmFsdWUKLQkgKiBt
aW51cyB0aGUgdmFsdWUgb2YgdGhlICdEYXRlJyByZXNwb25zZSBoZWFkZXIKLQkgKi8KLQlleHBp
cmVzID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkV4cGlyZXMi
KTsKLQlkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkRh
dGUiKTsKLQlpZiAoZXhwaXJlcyAmJiBkYXRlKSB7Ci0JCVNvdXBEYXRlICpleHBpcmVzX2QsICpk
YXRlX2Q7Ci0JCXRpbWVfdCBleHBpcmVzX3QsIGRhdGVfdDsKLQotCQlleHBpcmVzX2QgPSBzb3Vw
X2RhdGVfbmV3X2Zyb21fc3RyaW5nIChleHBpcmVzKTsKLQkJaWYgKGV4cGlyZXNfZCkgewotCQkJ
ZGF0ZV9kID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZGF0ZSk7Ci0KLQkJCWV4cGlyZXNf
dCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKGV4cGlyZXNfZCk7Ci0JCQlkYXRlX3QgPSBzb3VwX2Rh
dGVfdG9fdGltZV90IChkYXRlX2QpOwotCi0JCQlzb3VwX2RhdGVfZnJlZSAoZXhwaXJlc19kKTsK
LQkJCXNvdXBfZGF0ZV9mcmVlIChkYXRlX2QpOwotCi0JCQlpZiAoZXhwaXJlc190ICYmIGRhdGVf
dCkgewotCQkJCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSAoZ3VpbnQpTUFYIChleHBpcmVz
X3QgLSBkYXRlX3QsIDApOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIElm
IEV4cGlyZXMgaXMgbm90IGEgdmFsaWQgZGF0ZSB3ZSBzaG91bGQKLQkJCSAgIHRyZWF0IGl0IGFz
IGFscmVhZHkgZXhwaXJlZCwgc2VlIHNlY3Rpb24KLQkJCSAgIDMuMyAqLwotCQkJZW50cnktPmZy
ZXNobmVzc19saWZldGltZSA9IDA7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQkvKiBPdGhlcndp
c2UgYW4gaGV1cmlzdGljIG1heSBiZSB1c2VkICovCi0KLQkvKiBIZXVyaXN0aWNzIE1VU1QgTk9U
IGJlIHVzZWQgd2l0aCB0aGVzZSBzdGF0dXMgY29kZXMKLQkgICAoc2VjdGlvbiAyLjMuMS4xKSAq
LwotCWlmIChtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX09LICYmCi0JICAgIG1zZy0+
c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTk9OX0FVVEhPUklUQVRJVkUgJiYKLQkgICAgbXNn
LT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19QQVJUSUFMX0NPTlRFTlQgJiYKLQkgICAgbXNn
LT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19NVUxUSVBMRV9DSE9JQ0VTICYmCi0JICAgIG1z
Zy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkgJiYKLQkgICAg
bXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19HT05FKQotCQlnb3RvIGV4cGlyZTsKLQot
CS8qIFRPRE86IGF0dGFjaCB3YXJuaW5nIDExMyBpZiByZXNwb25zZSdzIGN1cnJlbnRfYWdlIGlz
IG1vcmUKLQkgICB0aGFuIDI0aCAoc2VjdGlvbiAyLjMuMS4xKSB3aGVuIHVzaW5nIGhldXJpc3Rp
Y3MgKi8KLQotCS8qIExhc3QtTW9kaWZpZWQgYmFzZWQgaGV1cmlzdGljICovCi0JbGFzdF9tb2Rp
ZmllZCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJMYXN0LU1v
ZGlmaWVkIik7Ci0JaWYgKGxhc3RfbW9kaWZpZWQpIHsKLQkJU291cERhdGUgKnNvdXBfZGF0ZTsK
LQkJdGltZV90IG5vdywgbGFzdF9tb2RpZmllZF90OwotCi0JCXNvdXBfZGF0ZSA9IHNvdXBfZGF0
ZV9uZXdfZnJvbV9zdHJpbmcgKGxhc3RfbW9kaWZpZWQpOwotCQlsYXN0X21vZGlmaWVkX3QgPSBz
b3VwX2RhdGVfdG9fdGltZV90IChzb3VwX2RhdGUpOwotCQlub3cgPSB0aW1lIChOVUxMKTsKLQot
I2RlZmluZSBIRVVSSVNUSUNfRkFDVE9SIDAuMSAvKiBGcm9tIFNlY3Rpb24gMi4zLjEuMSAqLwot
Ci0JCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSBNQVggKDAsIChub3cgLSBsYXN0X21vZGlm
aWVkX3QpICogSEVVUklTVElDX0ZBQ1RPUik7Ci0JCXNvdXBfZGF0ZV9mcmVlIChzb3VwX2RhdGUp
OwotCX0KLQotCXJldHVybjsKLQotIGV4cGlyZToKLQkvKiBJZiBhbGwgZWxzZSBmYWlscywgbWFr
ZSB0aGUgZW50cnkgZXhwaXJlIGltbWVkaWF0ZWx5ICovCi0JZW50cnktPmZyZXNobmVzc19saWZl
dGltZSA9IDA7Ci19Ci0KLXN0YXRpYyBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqCi13ZWJraXRfc291
cF9jYWNoZV9lbnRyeV9uZXcgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICpt
c2csIHRpbWVfdCByZXF1ZXN0X3RpbWUsIHRpbWVfdCByZXNwb25zZV90aW1lKQotewotCVdlYktp
dFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKLQlTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnM7Ci0J
Y29uc3QgY2hhciAqZGF0ZTsKLQljaGFyICptZDU7Ci0KLQllbnRyeSA9IGdfc2xpY2VfbmV3MCAo
V2ViS2l0U291cENhY2hlRW50cnkpOwotCWVudHJ5LT5kaXJ0eSA9IEZBTFNFOwotCWVudHJ5LT53
cml0aW5nID0gRkFMU0U7Ci0JZW50cnktPmdvdF9ib2R5ID0gRkFMU0U7Ci0JZW50cnktPmJlaW5n
X3ZhbGlkYXRlZCA9IEZBTFNFOwotCWVudHJ5LT5kYXRhID0gZ19zdHJpbmdfbmV3IChOVUxMKTsK
LQllbnRyeS0+cG9zID0gMDsKLQllbnRyeS0+ZXJyb3IgPSBOVUxMOwotCi0JLyoga2V5ICYgZmls
ZW5hbWUgKi8KLQllbnRyeS0+a2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7
Ci0JbWQ1ID0gZ19jb21wdXRlX2NoZWNrc3VtX2Zvcl9zdHJpbmcgKEdfQ0hFQ0tTVU1fTUQ1LCBl
bnRyeS0+a2V5LCAtMSk7Ci0JZW50cnktPmZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAoY2Fj
aGUtPnByaXYtPmNhY2hlX2RpciwgbWQ1LCBOVUxMKTsKLQlnX2ZyZWUgKG1kNSk7Ci0KLQkvKiBI
ZWFkZXJzICovCi0JaGVhZGVycyA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX25ldyAoU09VUF9NRVNT
QUdFX0hFQURFUlNfUkVTUE9OU0UpOwotCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZvcmVhY2ggKG1z
Zy0+cmVzcG9uc2VfaGVhZGVycywKLQkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFkZXJzRm9yZWFj
aEZ1bmMpY29weV9oZWFkZXJzLAotCQkJCSAgICAgIGhlYWRlcnMpOwotCWVudHJ5LT5oZWFkZXJz
ID0gaGVhZGVyczsKLQotCS8qIExSVSBsaXN0ICovCi0JZW50cnktPmhpdHMgPSAwOwotCi0JLyog
U2VjdGlvbiAyLjMuMSwgRnJlc2huZXNzIExpZmV0aW1lICovCi0Jd2Via2l0X3NvdXBfY2FjaGVf
ZW50cnlfc2V0X2ZyZXNobmVzcyAoZW50cnksIG1zZywgY2FjaGUpOwotCi0JLyogU2VjdGlvbiAy
LjMuMiwgQ2FsY3VsYXRpbmcgQWdlICovCi0JZGF0ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dCAoZW50cnktPmhlYWRlcnMsICJEYXRlIik7Ci0KLQlpZiAoZGF0ZSkgewotCQlTb3VwRGF0ZSAq
c291cF9kYXRlOwotCQljb25zdCBjaGFyICphZ2U7Ci0JCXRpbWVfdCBkYXRlX3ZhbHVlLCBhcHBh
cmVudF9hZ2UsIGNvcnJlY3RlZF9yZWNlaXZlZF9hZ2UsIHJlc3BvbnNlX2RlbGF5LCBhZ2VfdmFs
dWUgPSAwOwotCi0JCXNvdXBfZGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9zdHJpbmcgKGRhdGUp
OwotCQlkYXRlX3ZhbHVlID0gc291cF9kYXRlX3RvX3RpbWVfdCAoc291cF9kYXRlKTsKLQkJc291
cF9kYXRlX2ZyZWUgKHNvdXBfZGF0ZSk7Ci0KLQkJYWdlID0gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0IChlbnRyeS0+aGVhZGVycywgIkFnZSIpOwotCQlpZiAoYWdlKQotCQkJYWdlX3ZhbHVlID0g
Z19hc2NpaV9zdHJ0b2xsIChhZ2UsIE5VTEwsIDEwKTsKLQotCQllbnRyeS0+cmVzcG9uc2VfdGlt
ZSA9IHJlc3BvbnNlX3RpbWU7Ci0JCWFwcGFyZW50X2FnZSA9IE1BWCAoMCwgZW50cnktPnJlc3Bv
bnNlX3RpbWUgLSBkYXRlX3ZhbHVlKTsKLQkJY29ycmVjdGVkX3JlY2VpdmVkX2FnZSA9IE1BWCAo
YXBwYXJlbnRfYWdlLCBhZ2VfdmFsdWUpOwotCQlyZXNwb25zZV9kZWxheSA9IGVudHJ5LT5yZXNw
b25zZV90aW1lIC0gcmVxdWVzdF90aW1lOwotCQllbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdl
ID0gY29ycmVjdGVkX3JlY2VpdmVkX2FnZSArIHJlc3BvbnNlX2RlbGF5OwotCX0gZWxzZSB7Ci0J
CS8qIElzIHRoaXMgY29ycmVjdCA/ICovCi0JCWVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2Ug
PSB0aW1lIChOVUxMKTsKLQl9Ci0KLQlyZXR1cm4gZW50cnk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13
ZWJraXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoV2ViS2l0U291cENhY2hlV3Jp
dGluZ0ZpeHR1cmUgKmZpeHR1cmUpCi17Ci0JLyogRnJlZSBmaXh0dXJlLiBBbmQgZGlzY29ubmVj
dCBzaWduYWxzLCB3ZSBkb24ndCB3YW50IHRvCi0JICAgbGlzdGVuIHRvIG1vcmUgU291cE1lc3Nh
Z2UgZXZlbnRzIGFzIHdlJ3JlIGZpbmlzaGVkIHdpdGgKLQkgICB0aGlzIHJlc291cmNlICovCi0J
aWYgKGdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkIChmaXh0dXJlLT5tc2csIGZpeHR1cmUt
PmdvdF9jaHVua19oYW5kbGVyKSkKLQkJZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChmaXh0
dXJlLT5tc2csIGZpeHR1cmUtPmdvdF9jaHVua19oYW5kbGVyKTsKLQlpZiAoZ19zaWduYWxfaGFu
ZGxlcl9pc19jb25uZWN0ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2JvZHlfaGFuZGxl
cikpCi0JCWdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoZml4dHVyZS0+bXNnLCBmaXh0dXJl
LT5nb3RfYm9keV9oYW5kbGVyKTsKLQlpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQg
KGZpeHR1cmUtPm1zZywgZml4dHVyZS0+cmVzdGFydGVkX2hhbmRsZXIpKQotCQlnX3NpZ25hbF9o
YW5kbGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+cmVzdGFydGVkX2hhbmRs
ZXIpOwotCWdfb2JqZWN0X3VucmVmIChmaXh0dXJlLT5tc2cpOwotCWdfb2JqZWN0X3VucmVmIChm
aXh0dXJlLT5jYWNoZSk7Ci0JZ19zbGljZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4
dHVyZSwgZml4dHVyZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbG9zZV9yZWFkeV9jYiAoR09iamVj
dCAqc291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgV2ViS2l0U291cENhY2hlV3JpdGluZ0Zp
eHR1cmUgKmZpeHR1cmUpCi17Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVy
ZS0+ZW50cnk7Ci0JV2ViS2l0U291cENhY2hlICpjYWNoZSA9IGZpeHR1cmUtPmNhY2hlOwotCUdP
dXRwdXRTdHJlYW0gKnN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTSAoc291cmNlKTsKLQlnb2Zmc2V0
IGNvbnRlbnRfbGVuZ3RoOwotCi0JZ193YXJuX2lmX2ZhaWwgKGVudHJ5LT5lcnJvciA9PSBOVUxM
KTsKLQotCS8qIEZJWE1FOiB3aGF0IGRvIHdlIGRvIG9uIGVycm9yID8gKi8KLQotCWlmIChzdHJl
YW0pIHsKLQkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoc3RyZWFtLCByZXN1bHQsIE5V
TEwpOwotCQlnX29iamVjdF91bnJlZiAoc3RyZWFtKTsKLQl9Ci0JZW50cnktPnN0cmVhbSA9IE5V
TEw7Ci0KLQljb250ZW50X2xlbmd0aCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50
X2xlbmd0aCAoZW50cnktPmhlYWRlcnMpOwotCi0JLyogSWYgdGhlIHByb2Nlc3Mgd2FzIGNhbmNl
bGxlZCwgdGhlbiBkZWxldGUgdGhlIGVudHJ5IGZyb20KLQkgICB0aGUgY2FjaGUuIERvIGl0IGFs
c28gaWYgdGhlIHNpemUgb2YgYSBjaHVua2VkIHJlc291cmNlIGlzCi0JICAgdG9vIG11Y2ggZm9y
IHRoZSBjYWNoZSAqLwotCWlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoZW50cnktPmNh
bmNlbGxhYmxlKSkgewotCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKLQkJd2Via2l0X3NvdXBfY2Fj
aGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50cnkpOwotCQl3ZWJraXRfc291cF9jYWNoZV9lbnRy
eV9mcmVlIChlbnRyeSwgVFJVRSk7Ci0JCWVudHJ5ID0gTlVMTDsKLQl9IGVsc2UgaWYgKChzb3Vw
X21lc3NhZ2VfaGVhZGVyc19nZXRfZW5jb2RpbmcgKGVudHJ5LT5oZWFkZXJzKSA9PSBTT1VQX0VO
Q09ESU5HX0NIVU5LRUQpIHx8Ci0JCSAgIGVudHJ5LT5sZW5ndGggIT0gKGdzaXplKSBjb250ZW50
X2xlbmd0aCkgewotCQkvKiogVHdvIG9wdGlvbnMgaGVyZToKLQkJICoKLQkJICogMS4gImNodW5r
ZWQiIGRhdGEsIGVudHJ5IHdhcyB0ZW1wb3JhcmlseSBhZGRlZCB0bwotCQkgKiBjYWNoZSAoYXMg
Y29udGVudC1sZW5ndGggaXMgMCkgYW5kIG5vdyB0aGF0IHdlIGhhdmUKLQkJICogdGhlIGFjdHVh
bCBzaXplIHdlIGhhdmUgdG8gZXZhbHVhdGUgaWYgd2Ugd2FudCBpdAotCQkgKiBpbiB0aGUgY2Fj
aGUgb3Igbm90Ci0JCSAqCi0JCSAqIDIuIENvbnRlbnQtTGVuZ3RoIGhhcyBhIGRpZmZlcmVudCB2
YWx1ZSB0aGFuIGFjdHVhbAotCQkgKiBsZW5ndGgsIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgd2Fz
IGVuY29kZWQgZm9yCi0JCSAqIHRyYW5zbWlzc2lvbiAodHlwaWNhbGx5IGNvbXByZXNzZWQpIGFu
ZCB0aHVzIHdlCi0JCSAqIGhhdmUgdG8gc3Vic3RyYWN0IHRoZSBjb250ZW50LWxlbmd0aCB2YWx1
ZSB0aGF0IHdhcwotCQkgKiBhZGRlZCB0byB0aGUgY2FjaGUgYW5kIGFkZCB0aGUgdW5lbmNvZGVk
IGxlbmd0aAotCQkgKiovCi0JCWdpbnQgbGVuZ3RoX3RvX2FkZCA9IGVudHJ5LT5sZW5ndGggLSBj
b250ZW50X2xlbmd0aDsKLQotCQkvKiBNYWtlIHJvb20gaW4gY2FjaGUgaWYgbmVlZGVkICovCi0J
CWlmIChjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQp
KSB7Ci0JCQltYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOwot
Ci0JCQljYWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5ndGhfdG9fYWRkOwotCQl9IGVsc2UgewotCQkJ
ZW50cnktPmRpcnR5ID0gRkFMU0U7Ci0JCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUg
KGNhY2hlLCBlbnRyeSk7Ci0JCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwg
VFJVRSk7Ci0JCQllbnRyeSA9IE5VTEw7Ci0JCX0KLQl9Ci0KLQlpZiAoZW50cnkpIHsKLQkJLyog
R2V0IHJpZCBvZiB0aGUgR1N0cmluZyBpbiBtZW1vcnkgZm9yIHRoZSByZXNvdXJjZSBub3cgKi8K
LQkJaWYgKGVudHJ5LT5kYXRhKSB7Ci0JCQlnX3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJV
RSk7Ci0JCQllbnRyeS0+ZGF0YSA9IE5VTEw7Ci0JCX0KLQotCQllbnRyeS0+ZGlydHkgPSBGQUxT
RTsKLQkJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKLQkJZW50cnktPmdvdF9ib2R5ID0gRkFMU0U7
Ci0JCWVudHJ5LT5wb3MgPSAwOwotCi0JCWdfb2JqZWN0X3VucmVmIChlbnRyeS0+Y2FuY2VsbGFi
bGUpOwotCQllbnRyeS0+Y2FuY2VsbGFibGUgPSBOVUxMOwotCX0KLQotCWNhY2hlLT5wcml2LT5u
X3BlbmRpbmctLTsKLQotCS8qIEZyZWVzICovCi0Jd2Via2l0X3NvdXBfY2FjaGVfd3JpdGluZ19m
aXh0dXJlX2ZyZWUgKGZpeHR1cmUpOwotfQotCi1zdGF0aWMgdm9pZAotd3JpdGVfcmVhZHlfY2Ig
KEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdy
aXRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotCUdPdXRwdXRTdHJlYW0gKnN0cmVhbSA9IEdfT1VU
UFVUX1NUUkVBTSAoc291cmNlKTsKLQlHRXJyb3IgKmVycm9yID0gTlVMTDsKLQlnc3NpemUgd3Jp
dGVfc2l6ZTsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsK
LQotCWlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoZW50cnktPmNhbmNlbGxhYmxlKSkg
ewotCQlnX291dHB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKHN0cmVhbSwKLQkJCQkJICAgICBHX1BS
SU9SSVRZX0xPVywKLQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCi0JCQkJCSAgICAgKEdB
c3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCi0JCQkJCSAgICAgZml4dHVyZSk7Ci0J
CXJldHVybjsKLQl9Ci0KLQl3cml0ZV9zaXplID0gZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2Zpbmlz
aCAoc3RyZWFtLCByZXN1bHQsICZlcnJvcik7Ci0JaWYgKHdyaXRlX3NpemUgPD0gMCB8fCBlcnJv
cikgewotCQlpZiAoZXJyb3IpCi0JCQllbnRyeS0+ZXJyb3IgPSBlcnJvcjsKLQkJZ19vdXRwdXRf
c3RyZWFtX2Nsb3NlX2FzeW5jIChzdHJlYW0sCi0JCQkJCSAgICAgR19QUklPUklUWV9MT1csCi0J
CQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAotCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxi
YWNrKWNsb3NlX3JlYWR5X2NiLAotCQkJCQkgICAgIGZpeHR1cmUpOwotCQkvKiBGSVhNRTogV2Ug
c2hvdWxkIGNvbXBsZXRlbHkgc3RvcCBjYWNoaW5nIHRoZQotCQkgICByZXNvdXJjZSBhdCB0aGlz
IHBvaW50ICovCi0JfSBlbHNlIHsKLQkJZW50cnktPnBvcyArPSB3cml0ZV9zaXplOwotCi0JCS8q
IEFyZSB3ZSBzdGlsbCB3cml0aW5nIGFuZCBpcyB0aGVyZSBuZXcgZGF0YSB0byB3cml0ZQotCQkg
ICBhbHJlYWR5ID8gKi8KLQkJaWYgKGVudHJ5LT5kYXRhICYmIGVudHJ5LT5wb3MgPCBlbnRyeS0+
ZGF0YS0+bGVuKSB7Ci0JCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJl
YW0sCi0JCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAotCQkJCQkJICAg
ICBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywKLQkJCQkJCSAgICAgR19QUklPUklUWV9M
T1csCi0JCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKLQkJCQkJCSAgICAgKEdBc3luY1Jl
YWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCi0JCQkJCQkgICAgIGZpeHR1cmUpOwotCQl9IGVs
c2UgewotCQkJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKLQotCQkJaWYgKGVudHJ5LT5nb3RfYm9k
eSkgewotCQkJCS8qIElmIHdlIGFscmVhZHkgcmVjZWl2ZWQgJ2dvdC1ib2R5JwotCQkJCSAgIGFu
ZCB3ZSBoYXZlIHdyaXR0ZW4gYWxsIHRoZSBkYXRhLAotCQkJCSAgIHdlIGNhbiBjbG9zZSB0aGUg
c3RyZWFtICovCi0JCQkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChlbnRyeS0+c3RyZWFt
LAotCQkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCi0JCQkJCQkJICAgICBlbnRyeS0+Y2FuY2Vs
bGFibGUsCi0JCQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9jYiwK
LQkJCQkJCQkgICAgIGZpeHR1cmUpOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAot
bXNnX2dvdF9jaHVua19jYiAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIFdl
YktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotCVdlYktpdFNvdXBDYWNo
ZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5OwotCi0JZ19yZXR1cm5faWZfZmFpbCAoY2h1
bmstPmRhdGEgJiYgY2h1bmstPmxlbmd0aCk7Ci0JZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOwot
Ci0JLyogSWdub3JlIHRoaXMgaWYgdGhlIHdyaXRpbmcgb3IgYXBwZW5kaW5nIHdhcyBjYW5jZWxs
ZWQgKi8KLQlpZiAoIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFi
bGUpKSB7Ci0JCWdfc3RyaW5nX2FwcGVuZF9sZW4gKGVudHJ5LT5kYXRhLCBjaHVuay0+ZGF0YSwg
Y2h1bmstPmxlbmd0aCk7Ci0JCWVudHJ5LT5sZW5ndGggPSBlbnRyeS0+ZGF0YS0+bGVuOwotCi0J
CWlmICghY2FjaGVfYWNjZXB0c19lbnRyaWVzX29mX3NpemUgKGZpeHR1cmUtPmNhY2hlLCBlbnRy
eS0+bGVuZ3RoKSkgewotCQkJLyogUXVpY2tseSBjYW5jZWwgdGhlIGNhY2hpbmcgb2YgdGhlIHJl
c291cmNlICovCi0JCQlnX2NhbmNlbGxhYmxlX2NhbmNlbCAoZW50cnktPmNhbmNlbGxhYmxlKTsK
LQkJfQotCX0KLQotCS8qIEZJWE1FOiByZW1vdmUgdGhlIGVycm9yIGNoZWNrIHdoZW4gd2UgY2Fu
Y2VsIHRoZSBjYWNoaW5nIGF0Ci0JICAgdGhlIGZpcnN0IHdyaXRlIGVycm9yICovCi0JLyogT25s
eSB3cml0ZSBpZiB0aGUgZW50cnkgc3RyZWFtIGlzIHJlYWR5ICovCi0JaWYgKGVudHJ5LT53cml0
aW5nID09IEZBTFNFICYmIGVudHJ5LT5lcnJvciA9PSBOVUxMICYmIGVudHJ5LT5zdHJlYW0pIHsK
LQkJR1N0cmluZyAqZGF0YSA9IGVudHJ5LT5kYXRhOwotCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7
Ci0JCWdfb3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKLQkJCQkJICAg
ICBkYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAotCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5w
b3MsCi0JCQkJCSAgICAgR19QUklPUklUWV9MT1csCi0JCQkJCSAgICAgZW50cnktPmNhbmNlbGxh
YmxlLAotCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAotCQkJ
CQkgICAgIGZpeHR1cmUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLW1zZ19nb3RfYm9keV9jYiAo
U291cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUp
Ci17Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7Ci0JZ19y
ZXR1cm5faWZfZmFpbCAoZW50cnkpOwotCi0JZW50cnktPmdvdF9ib2R5ID0gVFJVRTsKLQotCWlm
ICghZW50cnktPnN0cmVhbSAmJiBlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpCi0JCS8qIFRo
ZSBzdHJlYW0gaXMgbm90IHJlYWR5IHRvIGJlIHdyaXR0ZW4gYnV0IHdlIHN0aWxsCi0JCSAgIGhh
dmUgZGF0YSB0byB3cml0ZSwgd2UnbGwgd3JpdGUgaXQgd2hlbiB0aGUgc3RyZWFtCi0JCSAgIGlz
IG9wZW5lZCBmb3Igd3JpdGluZyAqLwotCQlyZXR1cm47Ci0KLQotCWlmIChlbnRyeS0+cG9zICE9
IGVudHJ5LT5sZW5ndGgpIHsKLQkJLyogSWYgd2Ugc3RpbGwgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3
cml0ZSBpdCwKLQkJICAgd3JpdGVfcmVhZHlfY2Igd2lsbCBjbG9zZSB0aGUgc3RyZWFtICovCi0J
CWlmIChlbnRyeS0+d3JpdGluZyA9PSBGQUxTRSAmJiBlbnRyeS0+ZXJyb3IgPT0gTlVMTCAmJiBl
bnRyeS0+c3RyZWFtKSB7Ci0JCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5z
dHJlYW0sCi0JCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAotCQkJCQkJ
ICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywKLQkJCQkJCSAgICAgR19QUklPUklU
WV9MT1csCi0JCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKLQkJCQkJCSAgICAgKEdBc3lu
Y1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCi0JCQkJCQkgICAgIGZpeHR1cmUpOwotCQl9
Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoZW50cnktPnN0cmVhbSAmJiAhZW50cnktPndyaXRpbmcp
Ci0JCWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoZW50cnktPnN0cmVhbSwKLQkJCQkJICAg
ICBHX1BSSU9SSVRZX0xPVywKLQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCi0JCQkJCSAg
ICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCi0JCQkJCSAgICAgZml4dHVy
ZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3Zl
IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCi17
Ci0JR0xpc3QgKmxydV9pdGVtOwotCi0JLyogaWYgKGVudHJ5LT5kaXJ0eSAmJiAhZ19jYW5jZWxs
YWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsgKi8KLQlpZiAoZW50cnkt
PmRpcnR5KSB7Ci0JCWdfY2FuY2VsbGFibGVfY2FuY2VsIChlbnRyeS0+Y2FuY2VsbGFibGUpOwot
CQlyZXR1cm4gRkFMU0U7Ci0JfQotCi0JZ19hc3NlcnQgKCFlbnRyeS0+ZGlydHkpOwotCWdfYXNz
ZXJ0IChnX2xpc3RfbGVuZ3RoIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0KSA9PSBnX2hhc2hfdGFi
bGVfc2l6ZSAoY2FjaGUtPnByaXYtPmNhY2hlKSk7Ci0KLQkvKiBSZW1vdmUgZnJvbSBjYWNoZSAq
LwotCWlmICghZ19oYXNoX3RhYmxlX3JlbW92ZSAoY2FjaGUtPnByaXYtPmNhY2hlLCBlbnRyeS0+
a2V5KSkKLQkJcmV0dXJuIEZBTFNFOwotCi0JLyogUmVtb3ZlIGZyb20gTFJVICovCi0JbHJ1X2l0
ZW0gPSBnX2xpc3RfZmluZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnkpOwotCWNhY2hl
LT5wcml2LT5scnVfc3RhcnQgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGNhY2hlLT5wcml2LT5scnVf
c3RhcnQsIGxydV9pdGVtKTsKLQotCS8qIEFkanVzdCBjYWNoZSBzaXplICovCi0JY2FjaGUtPnBy
aXYtPnNpemUgLT0gZW50cnktPmxlbmd0aDsKLQotCWdfYXNzZXJ0IChnX2xpc3RfbGVuZ3RoIChj
YWNoZS0+cHJpdi0+bHJ1X3N0YXJ0KSA9PSBnX2hhc2hfdGFibGVfc2l6ZSAoY2FjaGUtPnByaXYt
PmNhY2hlKSk7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdpbnQKLWxydV9jb21wYXJl
X2Z1bmMgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiKQotewotCVdlYktpdFNvdXBD
YWNoZUVudHJ5ICplbnRyeV9hID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopYTsKLQlXZWJLaXRT
b3VwQ2FjaGVFbnRyeSAqZW50cnlfYiA9IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqKWI7Ci0KLQkv
KiogVGhlIHJhdGlvbmFsZSBvZiB0aGlzIHNvcnRpbmcgZnVuYyBpcwotCSAqCi0JICogMS4gc29y
dCBieSBoaXRzIC0+IExSVSBhbGdvcml0aG0sIHRoZW4KLQkgKgotCSAqIDIuIHNvcnQgYnkgZnJl
c2huZXNzIGxpZmV0aW1lLCB3ZSBiZXR0ZXIgZGlzY2FyZCBmaXJzdAotCSAqIGVudHJpZXMgdGhh
dCBhcmUgY2xvc2UgdG8gZXhwaXJlCi0JICoKLQkgKiAzLiBzb3J0IGJ5IHNpemUsIHJlcGxhY2Ug
Zmlyc3Qgc21hbGwgc2l6ZSByZXNvdXJjZXMgYXMgdGhleQotCSAqIGFyZSBjaGVhcGVyIHRvIGRv
d25sb2FkCi0JICoqLwotCi0JLyogU29ydCBieSBoaXRzICovCi0JaWYgKGVudHJ5X2EtPmhpdHMg
IT0gZW50cnlfYi0+aGl0cykKLQkJcmV0dXJuIGVudHJ5X2EtPmhpdHMgLSBlbnRyeV9iLT5oaXRz
OwotCi0JLyogU29ydCBieSBmcmVzaG5lc3NfbGlmZXRpbWUgKi8KLQlpZiAoZW50cnlfYS0+ZnJl
c2huZXNzX2xpZmV0aW1lICE9IGVudHJ5X2ItPmZyZXNobmVzc19saWZldGltZSkKLQkJcmV0dXJu
IGVudHJ5X2EtPmZyZXNobmVzc19saWZldGltZSAtIGVudHJ5X2ItPmZyZXNobmVzc19saWZldGlt
ZTsKLQotCS8qIFNvcnQgYnkgc2l6ZSAqLwotCXJldHVybiBlbnRyeV9hLT5sZW5ndGggLSBlbnRy
eV9iLT5sZW5ndGg7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotY2FjaGVfYWNjZXB0c19lbnRyaWVz
X29mX3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpCi17
Ci0JLyogV2UgY291bGQgYWRkIGhlcmUgc29tZSBtb3JlIGhldXJpc3RpY3MuIFRPRE86IHJldmll
dyBob3cKLQkgICB0aGlzIGlzIGRvbmUgYnkgb3RoZXIgSFRUUCBjYWNoZXMgKi8KLQotCXJldHVy
biBsZW5ndGhfdG9fYWRkIDw9IGNhY2hlLT5wcml2LT5tYXhfZW50cnlfZGF0YV9zaXplOwotfQot
Ci1zdGF0aWMgdm9pZAotbWFrZV9yb29tX2Zvcl9uZXdfZW50cnkgKFdlYktpdFNvdXBDYWNoZSAq
Y2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpCi17Ci0JR0xpc3QgKmxydV9lbnRyeSA9IGNhY2hl
LT5wcml2LT5scnVfc3RhcnQ7Ci0KLQkvKiBDaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCByb29t
IGZvciB0aGUgbmV3IGVudHJ5LiBUaGlzIGlzCi0JICAgYW4gYXBwcm94aW1hdGlvbiBhcyB3ZSdy
ZSBub3Qgd29ya2luZyBvdXQgdGhlIHNpemUgb2YgdGhlCi0JICAgY2FjaGUgZmlsZSBvciB0aGUg
c2l6ZSBvZiB0aGUgaGVhZGVycyBmb3IgcGVyZm9ybWFuY2UKLQkgICByZWFzb25zLiBUT0RPOiBj
aGVjayBpZiB0aGF0IHdvdWxkIGJlIHJlYWxseSB0aGF0IGV4cGVuc2l2ZSAqLwotCi0Jd2hpbGUg
KGxydV9lbnRyeSAmJgotCSAgICAgICAobGVuZ3RoX3RvX2FkZCArIGNhY2hlLT5wcml2LT5zaXpl
ID4gY2FjaGUtPnByaXYtPm1heF9zaXplKSkgewotCQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqb2xk
X2VudHJ5ID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopbHJ1X2VudHJ5LT5kYXRhOwotCi0JCS8q
IERpc2NhcmQgZW50cmllcy4gT25jZSBjYW5jZWxsZWQgcmVzb3VyY2VzIHdpbGwgYmUKLQkJICog
ZnJlZWQgaW4gY2xvc2VfcmVhZHlfY2IKLQkJICovCi0JCWlmICh3ZWJraXRfc291cF9jYWNoZV9l
bnRyeV9yZW1vdmUgKGNhY2hlLCBvbGRfZW50cnkpKSB7Ci0JCQl3ZWJraXRfc291cF9jYWNoZV9l
bnRyeV9mcmVlIChvbGRfZW50cnksIFRSVUUpOwotCQkJbHJ1X2VudHJ5ID0gY2FjaGUtPnByaXYt
PmxydV9zdGFydDsKLQkJfSBlbHNlCi0JCQlscnVfZW50cnkgPSBnX2xpc3RfbmV4dCAobHJ1X2Vu
dHJ5KTsKLQl9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfY2FjaGVfZW50cnlf
aW5zZXJ0X2J5X2tleSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwKLQkJCQkgICAgICAgY29uc3Qg
Y2hhciAqa2V5LAotCQkJCSAgICAgICBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksCi0JCQkJ
ICAgICAgIGdib29sZWFuIHNvcnQpCi17Ci0JZ3VpbnQgbGVuZ3RoX3RvX2FkZCA9IDA7Ci0KLQlp
ZiAoc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2VuY29kaW5nIChlbnRyeS0+aGVhZGVycykgIT0g
U09VUF9FTkNPRElOR19DSFVOS0VEKQotCQlsZW5ndGhfdG9fYWRkID0gc291cF9tZXNzYWdlX2hl
YWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVycyk7Ci0KLQkvKiBDaGVjayBp
ZiB3ZSBhcmUgZ29pbmcgdG8gc3RvcmUgdGhlIHJlc291cmNlIGRlcGVuZGluZyBvbiBpdHMgc2l6
ZSAqLwotCWlmIChsZW5ndGhfdG9fYWRkKSB7Ci0JCWlmICghY2FjaGVfYWNjZXB0c19lbnRyaWVz
X29mX3NpemUgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKSkKLQkJCXJldHVybiBGQUxTRTsKLQotCQkv
KiBNYWtlIHJvb20gZm9yIG5ldyBlbnRyeSBpZiBuZWVkZWQgKi8KLQkJbWFrZV9yb29tX2Zvcl9u
ZXdfZW50cnkgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKTsKLQl9Ci0KLQlnX2hhc2hfdGFibGVfaW5z
ZXJ0IChjYWNoZS0+cHJpdi0+Y2FjaGUsIGdfc3RyZHVwIChrZXkpLCBlbnRyeSk7Ci0KLQkvKiBD
b21wdXRlIG5ldyBjYWNoZSBzaXplICovCi0JY2FjaGUtPnByaXYtPnNpemUgKz0gbGVuZ3RoX3Rv
X2FkZDsKLQotCS8qIFVwZGF0ZSBMUlUgKi8KLQlpZiAoc29ydCkKLQkJY2FjaGUtPnByaXYtPmxy
dV9zdGFydCA9IGdfbGlzdF9pbnNlcnRfc29ydGVkIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBl
bnRyeSwgbHJ1X2NvbXBhcmVfZnVuYyk7Ci0JZWxzZQotCQljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0
ID0gZ19saXN0X3ByZXBlbmQgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGVudHJ5KTsKLQotCWdf
YXNzZXJ0IChnX2xpc3RfbGVuZ3RoIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0KSA9PSBnX2hhc2hf
dGFibGVfc2l6ZSAoY2FjaGUtPnByaXYtPmNhY2hlKSk7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQot
c3RhdGljIHZvaWQKLW1zZ19yZXN0YXJ0ZWRfY2IgKFNvdXBNZXNzYWdlICptc2csIFdlYktpdFNv
dXBDYWNoZUVudHJ5ICplbnRyeSkKLXsKLQkvKiBGSVhNRTogV2hhdCBzaG91bGQgd2UgZG8gaGVy
ZSBleGFjdGx5PyAqLwotfQotCi1zdGF0aWMgdm9pZAotYXBwZW5kX3RvX3JlYWR5X2NiIChHT2Jq
ZWN0ICpzb3VyY2UsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5n
Rml4dHVyZSAqZml4dHVyZSkKLXsKLQlHRmlsZSAqZmlsZSA9IChHRmlsZSAqKXNvdXJjZTsKLQlH
T3V0cHV0U3RyZWFtICpzdHJlYW07Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4
dHVyZS0+ZW50cnk7Ci0KLQlzdHJlYW0gPSAoR091dHB1dFN0cmVhbSAqKWdfZmlsZV9hcHBlbmRf
dG9fZmluaXNoIChmaWxlLCByZXN1bHQsICZlbnRyeS0+ZXJyb3IpOwotCi0JaWYgKGdfY2FuY2Vs
bGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpIHx8IGVudHJ5LT5lcnJvcikg
ewotCQlmaXh0dXJlLT5jYWNoZS0+cHJpdi0+bl9wZW5kaW5nLS07Ci0JCWVudHJ5LT5kaXJ0eSA9
IEZBTFNFOwotCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGZpeHR1cmUtPmNhY2hl
LCBlbnRyeSk7Ci0JCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsK
LQkJd2Via2l0X3NvdXBfY2FjaGVfd3JpdGluZ19maXh0dXJlX2ZyZWUgKGZpeHR1cmUpOwotCQly
ZXR1cm47Ci0JfQotCi0JZW50cnktPnN0cmVhbSA9IGdfb2JqZWN0X3JlZiAoc3RyZWFtKTsKLQln
X29iamVjdF91bnJlZiAoZmlsZSk7Ci0KLQkvKiBJZiB3ZSBhbHJlYWR5IGdvdCBhbGwgdGhlIGRh
dGEgd2UgaGF2ZSB0byBpbml0aWF0ZSB0aGUKLQkgICB3cml0aW5nIGhlcmUsIHNpbmNlIHdlIHdv
bid0IGdldCBtb3JlICdnb3QtY2h1bmsnCi0JICAgc2lnbmFscyAqLwotCWlmIChlbnRyeS0+Z290
X2JvZHkpIHsKLQkJR1N0cmluZyAqZGF0YSA9IGVudHJ5LT5kYXRhOwotCi0JCS8qIEl0IGNvdWxk
IGhhcHBlbiB0aGF0IHJlYWRpbmcgdGhlIGRhdGEgZnJvbSBzZXJ2ZXIKLQkJICAgd2FzIGNvbXBs
ZXRlZCBiZWZvcmUgdGhpcyBoYXBwZW5zLiBJbiB0aGF0IGNhc2UKLQkJICAgdGhlcmUgaXMgbm8g
ZGF0YSAqLwotCQlpZiAoZGF0YSkgewotCQkJZW50cnktPndyaXRpbmcgPSBUUlVFOwotCQkJZ19v
dXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAotCQkJCQkJICAgICBkYXRh
LT5zdHIgKyBlbnRyeS0+cG9zLAotCQkJCQkJICAgICBkYXRhLT5sZW4gLSBlbnRyeS0+cG9zLAot
CQkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKLQkJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxl
LAotCQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayl3cml0ZV9yZWFkeV9jYiwKLQkJCQkJ
CSAgICAgZml4dHVyZSk7Ci0JCX0KLQl9Ci19Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl0aW1lX3Qg
cmVxdWVzdF90aW1lOwotCVNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZTsKLQlndWxvbmcgZ290
X2hlYWRlcnNfaGFuZGxlcjsKLX0gUmVxdWVzdEhlbHBlcjsKLQotc3RhdGljIHZvaWQKLW1zZ19n
b3RfaGVhZGVyc19jYiAoU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewot
CVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7Ci0JV2ViS2l0U291cENhY2hlYWJpbGl0eSBjYWNoZWFi
bGU7Ci0JUmVxdWVzdEhlbHBlciAqaGVscGVyOwotCXRpbWVfdCByZXF1ZXN0X3RpbWUsIHJlc3Bv
bnNlX3RpbWU7Ci0KLQlyZXNwb25zZV90aW1lID0gdGltZSAoTlVMTCk7Ci0KLQloZWxwZXIgPSAo
UmVxdWVzdEhlbHBlciAqKXVzZXJfZGF0YTsKLQljYWNoZSA9IFdFQktJVF9TT1VQX0NBQ0hFICho
ZWxwZXItPmZlYXR1cmUpOwotCXJlcXVlc3RfdGltZSA9IGhlbHBlci0+cmVxdWVzdF90aW1lOwot
CWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAobXNnLCBtc2dfZ290X2hlYWRl
cnNfY2IsIHVzZXJfZGF0YSk7Ci0JZ19zbGljZV9mcmVlIChSZXF1ZXN0SGVscGVyLCBoZWxwZXIp
OwotCi0JY2FjaGVhYmxlID0gd2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eSAoY2Fj
aGUsIG1zZyk7Ci0KLQlpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfQ0FDSEVBQkxF
KSB7Ci0JCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKLQkJY2hhciAqa2V5OwotCQlHRmls
ZSAqZmlsZTsKLQkJV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmU7Ci0KLQkJ
LyogQ2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgY2FjaGluZyB0aGlzIHJlc291cmNlICovCi0JCWtl
eSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOwotCQllbnRyeSA9IGdfaGFzaF90
YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKLQkJZ19mcmVlIChrZXkpOwot
Ci0JCWlmIChlbnRyeSAmJiBlbnRyeS0+ZGlydHkpCi0JCQlyZXR1cm47Ci0KLQkJLyogQ3JlYXRl
IGEgbmV3IGVudHJ5LCBkZWxldGluZyBhbnkgb2xkIG9uZSBpZiBwcmVzZW50ICovCi0JCWlmIChl
bnRyeSkgewotCQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50cnkp
OwotCQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOwotCQl9Ci0K
LQkJZW50cnkgPSB3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9uZXcgKGNhY2hlLCBtc2csIHJlcXVl
c3RfdGltZSwgcmVzcG9uc2VfdGltZSk7Ci0JCWVudHJ5LT5oaXRzID0gMTsKLQotCQkvKiBEbyBu
b3QgY29udGludWUgaWYgaXQgY2FuIG5vdCBiZSBzdG9yZWQgKi8KLQkJaWYgKCF3ZWJraXRfc291
cF9jYWNoZV9lbnRyeV9pbnNlcnRfYnlfa2V5IChjYWNoZSwgKGNvbnN0IGdjaGFyICopZW50cnkt
PmtleSwgZW50cnksIFRSVUUpKSB7Ci0JCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChl
bnRyeSwgVFJVRSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlmaXh0dXJlID0gZ19zbGljZV9uZXcw
IChXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSk7Ci0JCWZpeHR1cmUtPmNhY2hlID0gZ19v
YmplY3RfcmVmIChjYWNoZSk7Ci0JCWZpeHR1cmUtPmVudHJ5ID0gZW50cnk7Ci0JCWZpeHR1cmUt
Pm1zZyA9IGdfb2JqZWN0X3JlZiAobXNnKTsKLQotCQkvKiBXZSBjb25uZWN0IG5vdyB0byB0aGVz
ZSBzaWduYWxzIGFuZCBidWZmZXIgdGhlIGRhdGEKLQkJICAgaWYgaXQgY29tZXMgYmVmb3JlIHRo
ZSBmaWxlIGlzIHJlYWR5IGZvciB3cml0aW5nICovCi0JCWZpeHR1cmUtPmdvdF9jaHVua19oYW5k
bGVyID0KLQkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0sg
KG1zZ19nb3RfY2h1bmtfY2IpLCBmaXh0dXJlKTsKLQkJZml4dHVyZS0+Z290X2JvZHlfaGFuZGxl
ciA9Ci0JCQlnX3NpZ25hbF9jb25uZWN0IChtc2csICJnb3QtYm9keSIsIEdfQ0FMTEJBQ0sgKG1z
Z19nb3RfYm9keV9jYiksIGZpeHR1cmUpOwotCQlmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlciA9
Ci0JCQlnX3NpZ25hbF9jb25uZWN0IChtc2csICJyZXN0YXJ0ZWQiLCBHX0NBTExCQUNLIChtc2df
cmVzdGFydGVkX2NiKSwgZW50cnkpOwotCi0JCS8qIFByZXBhcmUgZW50cnkgKi8KLQkJZmlsZSA9
IGdfZmlsZV9uZXdfZm9yX3BhdGggKGVudHJ5LT5maWxlbmFtZSk7Ci0JCWNhY2hlLT5wcml2LT5u
X3BlbmRpbmcrKzsKLQotCQllbnRyeS0+ZGlydHkgPSBUUlVFOwotCQllbnRyeS0+Y2FuY2VsbGFi
bGUgPSBnX2NhbmNlbGxhYmxlX25ldyAoKTsKLQkJZ19maWxlX2FwcGVuZF90b19hc3luYyAoZmls
ZSwgMCwKLQkJCQkJR19QUklPUklUWV9MT1csIGVudHJ5LT5jYW5jZWxsYWJsZSwKLQkJCQkJKEdB
c3luY1JlYWR5Q2FsbGJhY2spYXBwZW5kX3RvX3JlYWR5X2NiLAotCQkJCQlmaXh0dXJlKTsKLQl9
IGVsc2UgaWYgKGNhY2hlYWJsZSAmIFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKSB7Ci0J
CWNoYXIgKmtleTsKLQkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OwotCi0JCWtleSA9IHNv
dXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOwotCQllbnRyeSA9IGdfaGFzaF90YWJsZV9s
b29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKLQkJZ19mcmVlIChrZXkpOwotCi0JCWlm
IChlbnRyeSkgewotCQkJaWYgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUs
IGVudHJ5KSkKLQkJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7
Ci0JCX0KLQl9IGVsc2UgaWYgKGNhY2hlYWJsZSAmIFdFQktJVF9TT1VQX0NBQ0hFX1ZBTElEQVRF
UykgewotCQljaGFyICprZXk7Ci0JCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKLQotCQlr
ZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKLQkJZW50cnkgPSBnX2hhc2hf
dGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSk7Ci0JCWdfZnJlZSAoa2V5KTsK
LQotCQkvKiBJdCdzIHBvc3NpYmxlIHRvIGdldCBhIENBQ0hFX1ZBTElEQVRFUyB3aXRoIG5vCi0J
CSAqIGVudHJ5IGluIHRoZSBoYXNoIHRhYmxlLiBUaGlzIGNvdWxkIGhhcHBlbiBpZiBmb3IKLQkJ
ICogZXhhbXBsZSB0aGUgc291cCBjbGllbnQgaXMgdGhlIG9uZSBjcmVhdGluZyB0aGUKLQkJICog
Y29uZGl0aW9uYWwgcmVxdWVzdC4KLQkJICovCi0JCWlmIChlbnRyeSkgewotCQkJZW50cnktPmJl
aW5nX3ZhbGlkYXRlZCA9IEZBTFNFOwotCi0JCQkvKiBXZSB1cGRhdGUgdGhlIGhlYWRlcnMgb2Yg
dGhlIGV4aXN0aW5nIGNhY2hlIGl0ZW0sCi0JCQkgICBwbHVzIGl0cyBhZ2UgKi8KLQkJCXNvdXBf
bWVzc2FnZV9oZWFkZXJzX2ZvcmVhY2ggKG1zZy0+cmVzcG9uc2VfaGVhZGVycywKLQkJCQkJCSAg
ICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyl1cGRhdGVfaGVhZGVycywKLQkJCQkJ
CSAgICAgIGVudHJ5LT5oZWFkZXJzKTsKLQkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3NldF9m
cmVzaG5lc3MgKGVudHJ5LCBtc2csIGNhY2hlKTsKLQkJfQotCX0KLX0KLQotR0lucHV0U3RyZWFt
ICoKLXdlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2Fj
aGUsIFNvdXBNZXNzYWdlICptc2cpCi17Ci0JY2hhciAqa2V5OwotCVdlYktpdFNvdXBDYWNoZUVu
dHJ5ICplbnRyeTsKLQljaGFyICpjdXJyZW50X2FnZTsKLQlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9
IE5VTEw7Ci0JR0ZpbGUgKmZpbGU7Ci0KLQlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lT
X1NPVVBfQ0FDSEUgKGNhY2hlKSwgTlVMTCk7Ci0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBf
SVNfTUVTU0FHRSAobXNnKSwgTlVMTCk7Ci0KLQlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hl
X2tleSAobXNnKTsKLQllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5j
YWNoZSwga2V5KTsKLQlnX2ZyZWUgKGtleSk7Ci0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVudHJ5
LCBOVUxMKTsKLQotCS8qIElmIHdlIGFyZSB0b2xkIHRvIHNlbmQgYSByZXNwb25zZSBmcm9tIGNh
Y2hlIGFueSB2YWxpZGF0aW9uCi0JICAgaW4gY291cnNlIGlzIG92ZXIgYnkgbm93ICovCi0JZW50
cnktPmJlaW5nX3ZhbGlkYXRlZCA9IEZBTFNFOwotCi0JLyogSGVhZGVycyAqLwotCXNvdXBfbWVz
c2FnZV9oZWFkZXJzX2ZvcmVhY2ggKGVudHJ5LT5oZWFkZXJzLAotCQkJCSAgICAgIChTb3VwTWVz
c2FnZUhlYWRlcnNGb3JlYWNoRnVuYyl1cGRhdGVfaGVhZGVycywKLQkJCQkgICAgICBtc2ctPnJl
c3BvbnNlX2hlYWRlcnMpOwotCi0JLyogQWRkICdBZ2UnIGhlYWRlciB3aXRoIHRoZSBjdXJyZW50
IGFnZSAqLwotCWN1cnJlbnRfYWdlID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCB3ZWJraXRfc291
cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UgKGVudHJ5KSk7Ci0Jc291cF9tZXNzYWdlX2hl
YWRlcnNfcmVwbGFjZSAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAotCQkJCSAgICAgICJBZ2UiLAot
CQkJCSAgICAgIGN1cnJlbnRfYWdlKTsKLQlnX2ZyZWUgKGN1cnJlbnRfYWdlKTsKLQotCS8qIFRP
RE86IHRoZSBvcmlnaW5hbCBpZGVhIHdhcyB0byBzYXZlIHJlYWRzLCBidXQgY3VycmVudCBjb2Rl
Ci0JICAgYXNzdW1lcyB0aGF0IGEgc3RyZWFtIGlzIGFsd2F5cyByZXR1cm5lZC4gTmVlZCB0byBy
ZWFjaAotCSAgIHNvbWUgYWdyZWVtZW50IGhlcmUuIEFsc28gd2UgaGF2ZSB0byBoYW5kbGUgdGhl
IHNpdHVhdGlvbgotCSAgIHdlcmUgdGhlIGZpbGUgd2FzIG5vIGxvbmdlciB0aGVyZSAoZm9yIGV4
YW1wbGUgZmlsZXMKLQkgICByZW1vdmVkIHdpdGhvdXQgbm90aWZ5aW5nIHRoZSBjYWNoZSAqLwot
CWZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChlbnRyeS0+ZmlsZW5hbWUpOwotCXN0cmVhbSA9
IChHSW5wdXRTdHJlYW0gKilnX2ZpbGVfcmVhZCAoZmlsZSwgTlVMTCwgTlVMTCk7Ci0KLQlyZXR1
cm4gc3RyZWFtOwotfQotCi1zdGF0aWMgdm9pZAotcmVxdWVzdF9zdGFydGVkIChTb3VwU2Vzc2lv
bkZlYXR1cmUgKmZlYXR1cmUsIFNvdXBTZXNzaW9uICpzZXNzaW9uLAotCQkgU291cE1lc3NhZ2Ug
Km1zZywgU291cFNvY2tldCAqc29ja2V0KQotewotCVJlcXVlc3RIZWxwZXIgKmhlbHBlciA9IGdf
c2xpY2VfbmV3MCAoUmVxdWVzdEhlbHBlcik7Ci0JaGVscGVyLT5yZXF1ZXN0X3RpbWUgPSB0aW1l
IChOVUxMKTsKLQloZWxwZXItPmZlYXR1cmUgPSBmZWF0dXJlOwotCWhlbHBlci0+Z290X2hlYWRl
cnNfaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1oZWFkZXJzIiwKLQkJCQkJ
CQlHX0NBTExCQUNLIChtc2dfZ290X2hlYWRlcnNfY2IpLAotCQkJCQkJCWhlbHBlcik7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1hdHRhY2ggKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNl
c3Npb24gKnNlc3Npb24pCi17Ci0JV2ViS2l0U291cENhY2hlICpjYWNoZSA9IFdFQktJVF9TT1VQ
X0NBQ0hFIChmZWF0dXJlKTsKLQljYWNoZS0+cHJpdi0+c2Vzc2lvbiA9IHNlc3Npb247Ci0KLQl3
ZWJraXRfc291cF9jYWNoZV9kZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggKGZlYXR1
cmUsIHNlc3Npb24pOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lv
bl9mZWF0dXJlX2luaXQgKFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRl
cmZhY2UsCi0JCQkJCWdwb2ludGVyIGludGVyZmFjZV9kYXRhKQotewotCXdlYmtpdF9zb3VwX2Nh
Y2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2UgPQotCQlnX3R5cGVfZGVmYXVsdF9pbnRlcmZh
Y2VfcGVlayAoU09VUF9UWVBFX1NFU1NJT05fRkVBVFVSRSk7Ci0KLQlmZWF0dXJlX2ludGVyZmFj
ZS0+YXR0YWNoID0gYXR0YWNoOwotCWZlYXR1cmVfaW50ZXJmYWNlLT5yZXF1ZXN0X3N0YXJ0ZWQg
PSByZXF1ZXN0X3N0YXJ0ZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9jYWNoZV9p
bml0IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQotewotCVdlYktpdFNvdXBDYWNoZVByaXZhdGUg
KnByaXY7Ci0KLQlwcml2ID0gY2FjaGUtPnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJ
VkFURSAoY2FjaGUpOwotCi0JcHJpdi0+Y2FjaGUgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwgKGdf
c3RyX2hhc2gsCi0JCQkJCSAgICAgZ19zdHJfZXF1YWwsCi0JCQkJCSAgICAgKEdEZXN0cm95Tm90
aWZ5KWdfZnJlZSwKLQkJCQkJICAgICBOVUxMKTsKLQotCS8qIExSVSAqLwotCXByaXYtPmxydV9z
dGFydCA9IE5VTEw7Ci0KLQkvKiAqLwotCXByaXYtPm5fcGVuZGluZyA9IDA7Ci0KLQkvKiBDYWNo
ZSBzaXplICovCi0JcHJpdi0+bWF4X3NpemUgPSBERUZBVUxUX01BWF9TSVpFOwotCXByaXYtPm1h
eF9lbnRyeV9kYXRhX3NpemUgPSBwcml2LT5tYXhfc2l6ZSAvIE1BWF9FTlRSWV9EQVRBX1BFUkNF
TlRBR0U7Ci0JcHJpdi0+c2l6ZSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZW1vdmVfY2FjaGVf
aXRlbSAoZ3BvaW50ZXIgZGF0YSwKLQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCVdlYktp
dFNvdXBDYWNoZSAqY2FjaGUgPSAoV2ViS2l0U291cENhY2hlICopIHVzZXJfZGF0YTsKLQlXZWJL
aXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKikgZGF0YTsK
LQotCWlmICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSkpCi0J
CXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBGQUxTRSk7Ci19Ci0KLXN0YXRp
YyB2b2lkCi13ZWJraXRfc291cF9jYWNoZV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQotewot
CVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXY7Ci0JR0xpc3QgKmVudHJpZXM7Ci0KLQlwcml2
ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVjdCktPnByaXY7Ci0KLQkvLyBDYW5ub3QgdXNlIGdf
aGFzaF90YWJsZV9mb3JlYWNoIGFzIGNhbGxiYWNrcyBtdXN0IG5vdCBtb2RpZnkgdGhlIGhhc2gg
dGFibGUKLQllbnRyaWVzID0gZ19oYXNoX3RhYmxlX2dldF92YWx1ZXMgKHByaXYtPmNhY2hlKTsK
LQlnX2xpc3RfZm9yZWFjaCAoZW50cmllcywgcmVtb3ZlX2NhY2hlX2l0ZW0sIG9iamVjdCk7Ci0J
Z19saXN0X2ZyZWUgKGVudHJpZXMpOwotCi0JZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKHByaXYtPmNh
Y2hlKTsKLQlnX2ZyZWUgKHByaXYtPmNhY2hlX2Rpcik7Ci0KLQlnX2xpc3RfZnJlZSAocHJpdi0+
bHJ1X3N0YXJ0KTsKLQlwcml2LT5scnVfc3RhcnQgPSBOVUxMOwotCi0JR19PQkpFQ1RfQ0xBU1Mg
KHdlYmtpdF9zb3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQot
Ci1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfY2FjaGVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICpv
YmplY3QsIGd1aW50IHByb3BfaWQsCi0JCQkJY29uc3QgR1ZhbHVlICp2YWx1ZSwgR1BhcmFtU3Bl
YyAqcHNwZWMpCi17Ci0JV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQ
X0NBQ0hFIChvYmplY3QpLT5wcml2OwotCi0Jc3dpdGNoIChwcm9wX2lkKSB7Ci0JY2FzZSBQUk9Q
X0NBQ0hFX0RJUjoKLQkJcHJpdi0+Y2FjaGVfZGlyID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1
ZSk7Ci0JCS8qIENyZWF0ZSBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QgKEZJWE1FOiBz
aG91bGQgd2U/KSAqLwotCQlpZiAoIWdfZmlsZV90ZXN0IChwcml2LT5jYWNoZV9kaXIsIEdfRklM
RV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX0RJUikpCi0JCQlnX21rZGlyX3dpdGhfcGFy
ZW50cyAocHJpdi0+Y2FjaGVfZGlyLCAwNzAwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUk9QX0NBQ0hF
X1RZUEU6Ci0JCXByaXYtPmNhY2hlX3R5cGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0J
CS8qIFRPRE86IGNsZWFyIHByaXZhdGUgZW50cmllcyBhbmQgaXNzdWUgYSB3YXJuaW5nIGlmIG1v
dmluZyB0byBzaGFyZWQ/ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0JCWJyZWFrOwot
CX0KLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX2dldF9wcm9wZXJ0eSAoR09i
amVjdCAqb2JqZWN0LCBndWludCBwcm9wX2lkLAotCQkJCUdWYWx1ZSAqdmFsdWUsIEdQYXJhbVNw
ZWMgKnBzcGVjKQotewotCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09V
UF9DQUNIRSAob2JqZWN0KS0+cHJpdjsKLQotCXN3aXRjaCAocHJvcF9pZCkgewotCWNhc2UgUFJP
UF9DQUNIRV9ESVI6Ci0JCWdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHByaXYtPmNhY2hlX2Rp
cik7Ci0JCWJyZWFrOwotCWNhc2UgUFJPUF9DQUNIRV9UWVBFOgotCQlnX3ZhbHVlX3NldF9lbnVt
ICh2YWx1ZSwgcHJpdi0+Y2FjaGVfdHlwZSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0J
CWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX2NvbnN0cnVj
dGVkIChHT2JqZWN0ICpvYmplY3QpCi17Ci0JV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdjsK
LQotCXByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAob2JqZWN0KS0+cHJpdjsKLQotCWlmICghcHJp
di0+Y2FjaGVfZGlyKSB7Ci0JCS8qIFNldCBhIGRlZmF1bHQgY2FjaGUgZGlyLCBkaWZmZXJlbnQg
Zm9yIGVhY2ggdXNlciAqLwotCQlwcml2LT5jYWNoZV9kaXIgPSBnX2J1aWxkX2ZpbGVuYW1lIChn
X2dldF91c2VyX2NhY2hlX2RpciAoKSwKLQkJCQkJCSAgICAiaHR0cGNhY2hlIiwKLQkJCQkJCSAg
ICBOVUxMKTsKLQkJaWYgKCFnX2ZpbGVfdGVzdCAocHJpdi0+Y2FjaGVfZGlyLCBHX0ZJTEVfVEVT
VF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19ESVIpKQotCQkJZ19ta2Rpcl93aXRoX3BhcmVudHMg
KHByaXYtPmNhY2hlX2RpciwgMDcwMCk7Ci0JfQotCi0JaWYgKEdfT0JKRUNUX0NMQVNTICh3ZWJr
aXRfc291cF9jYWNoZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKLQkJR19PQkpFQ1RfQ0xB
U1MgKHdlYmtpdF9zb3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkIChvYmplY3Qp
OwotfQotCi0jZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX1RZUEVfVFlQRSAod2Via2l0X3NvdXBf
Y2FjaGVfdHlwZV9nZXRfdHlwZSAoKSkKLXN0YXRpYyBHVHlwZQotd2Via2l0X3NvdXBfY2FjaGVf
dHlwZV9nZXRfdHlwZSAodm9pZCkKLXsKLQlzdGF0aWMgR1R5cGUgY2FjaGVfdHlwZSA9IDA7Ci0K
LQlzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBjYWNoZV90eXBlc1tdID0gewotCQl7IFdFQktJVF9T
T1VQX0NBQ0hFX1NJTkdMRV9VU0VSLCAiU2luZ2xlIHVzZXIgY2FjaGUiLCAidXNlciIgfSwKLQkJ
eyBXRUJLSVRfU09VUF9DQUNIRV9TSEFSRUQsICJTaGFyZWQgY2FjaGUiLCAic2hhcmVkIiB9LAot
CQl7IDAsIE5VTEwsIE5VTEwgfQotCX07Ci0KLQlpZiAoIWNhY2hlX3R5cGUpIHsKLQkJY2FjaGVf
dHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJXZWJLaXRTb3VwQ2FjaGVUeXBlVHlwZSIs
IGNhY2hlX3R5cGVzKTsKLQl9Ci0JcmV0dXJuIGNhY2hlX3R5cGU7Ci19Ci0KLXN0YXRpYyB2b2lk
Ci13ZWJraXRfc291cF9jYWNoZV9jbGFzc19pbml0IChXZWJLaXRTb3VwQ2FjaGVDbGFzcyAqY2Fj
aGVfY2xhc3MpCi17Ci0JR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFz
cyAqKWNhY2hlX2NsYXNzOwotCi0JZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291
cF9jYWNoZV9maW5hbGl6ZTsKLQlnb2JqZWN0X2NsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdF9z
b3VwX2NhY2hlX2NvbnN0cnVjdGVkOwotCWdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdl
YmtpdF9zb3VwX2NhY2hlX3NldF9wcm9wZXJ0eTsKLQlnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVy
dHkgPSB3ZWJraXRfc291cF9jYWNoZV9nZXRfcHJvcGVydHk7Ci0KLQljYWNoZV9jbGFzcy0+Z2V0
X2NhY2hlYWJpbGl0eSA9IGdldF9jYWNoZWFiaWxpdHk7Ci0KLQlnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NBQ0hFX0RJUiwKLQkJCQkJIGdfcGFy
YW1fc3BlY19zdHJpbmcgKCJjYWNoZS1kaXIiLAotCQkJCQkJCSAgICAgICJDYWNoZSBkaXJlY3Rv
cnkiLAotCQkJCQkJCSAgICAgICJUaGUgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBjYWNoZSBmaWxl
cyIsCi0JCQkJCQkJICAgICAgTlVMTCwKLQkJCQkJCQkgICAgICBHX1BBUkFNX1JFQURXUklURSB8
IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKLQotCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0FDSEVfVFlQRSwKLQkJCQkJIGdfcGFyYW1fc3Bl
Y19lbnVtICgiY2FjaGUtdHlwZSIsCi0JCQkJCQkJICAgICJDYWNoZSB0eXBlIiwKLQkJCQkJCQkg
ICAgIldoZXRoZXIgdGhlIGNhY2hlIGlzIHByaXZhdGUgb3Igc2hhcmVkIiwKLQkJCQkJCQkgICAg
V0VCS0lUX1NPVVBfQ0FDSEVfVFlQRV9UWVBFLAotCQkJCQkJCSAgICBXRUJLSVRfU09VUF9DQUNI
RV9TSU5HTEVfVVNFUiwKLQkJCQkJCQkgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NP
TlNUUlVDVF9PTkxZKSk7Ci0KLQlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGNhY2hlX2NsYXNz
LCBzaXplb2YgKFdlYktpdFNvdXBDYWNoZVByaXZhdGUpKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRf
c291cF9jYWNoZV9uZXc6Ci0gKiBAY2FjaGVfZGlyOiB0aGUgZGlyZWN0b3J5IHRvIHN0b3JlIHRo
ZSBjYWNoZWQgZGF0YSwgb3IgJU5VTEwgdG8gdXNlIHRoZSBkZWZhdWx0IG9uZQotICogQGNhY2hl
X3R5cGU6IHRoZSAjV2ViS2l0U291cENhY2hlVHlwZSBvZiB0aGUgY2FjaGUKLSAqCi0gKiBDcmVh
dGVzIGEgbmV3ICNXZWJLaXRTb3VwQ2FjaGUuCi0gKgotICogUmV0dXJuczogYSBuZXcgI1dlYktp
dFNvdXBDYWNoZQotICoKLSAqIFNpbmNlOiAyLjI4Ci0gKiovCi1XZWJLaXRTb3VwQ2FjaGUgKgot
d2Via2l0X3NvdXBfY2FjaGVfbmV3IChjb25zdCBjaGFyICpjYWNoZV9kaXIsIFdlYktpdFNvdXBD
YWNoZVR5cGUgY2FjaGVfdHlwZSkKLXsKLQlyZXR1cm4gZ19vYmplY3RfbmV3IChXRUJLSVRfVFlQ
RV9TT1VQX0NBQ0hFLAotCQkJICAgICAiY2FjaGUtZGlyIiwgY2FjaGVfZGlyLAotCQkJICAgICAi
Y2FjaGUtdHlwZSIsIGNhY2hlX3R5cGUsCi0JCQkgICAgIE5VTEwpOwotfQotCi0vKioKLSAqIHdl
YmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZToKLSAqIEBjYWNoZTogYSAjV2ViS2l0U291cENh
Y2hlCi0gKiBAbXNnOiBhICNTb3VwTWVzc2FnZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FsY3Vs
YXRlcyB3aGV0aGVyIHRoZSBAY2FjaGUgb2JqZWN0IGhhcyBhIHByb3BlcgotICogcmVzcG9uc2Ug
Zm9yIHRoZSByZXF1ZXN0IEBtc2cgZ2l2ZW4gdGhlIGZsYWdzIGJvdGggaW4gdGhlIHJlcXVlc3QK
LSAqIGFuZCB0aGUgY2FjaGVkIHJlcGx5IGFuZCB0aGUgdGltZSBlbGxhcHNlZCBzaW5jZSBpdCB3
YXMgY2FjaGVkLgotICoKLSAqIFJldHVybnM6IHdoZXRoZXIgb3Igbm90IHRoZSBAY2FjaGUgaGFz
IGEgdmFsaWQgcmVzcG9uc2UgZm9yIEBtc2cKLSAqKi8KLVdlYktpdFNvdXBDYWNoZVJlc3BvbnNl
Ci13ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUs
IFNvdXBNZXNzYWdlICptc2cpCi17Ci0JY2hhciAqa2V5OwotCVdlYktpdFNvdXBDYWNoZUVudHJ5
ICplbnRyeTsKLQljb25zdCBjaGFyICpjYWNoZV9jb250cm9sOwotCWdwb2ludGVyIHZhbHVlOwot
CWdib29sZWFuIG11c3RfcmV2YWxpZGF0ZTsKLQlpbnQgbWF4X2FnZSwgbWF4X3N0YWxlLCBtaW5f
ZnJlc2g7Ci0JR0xpc3QgKmxydV9pdGVtLCAqaXRlbTsKLQotCWtleSA9IHNvdXBfbWVzc2FnZV9n
ZXRfY2FjaGVfa2V5IChtc2cpOwotCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUt
PnByaXYtPmNhY2hlLCBrZXkpOwotCWdfZnJlZSAoa2V5KTsKLQotCS8qIDEuIFRoZSBwcmVzZW50
ZWQgUmVxdWVzdC1VUkkgYW5kIHRoYXQgb2Ygc3RvcmVkIHJlc3BvbnNlCi0JICogbWF0Y2gKLQkg
Ki8KLQlpZiAoIWVudHJ5KQotCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RB
TEU7Ci0KLQkvKiBJbmNyZWFzZSBoaXQgY291bnQuIFRha2Ugc29ydGluZyBpbnRvIGFjY291bnQg
Ki8KLQllbnRyeS0+aGl0cysrOwotCWxydV9pdGVtID0gZ19saXN0X2ZpbmQgKGNhY2hlLT5wcml2
LT5scnVfc3RhcnQsIGVudHJ5KTsKLQlpdGVtID0gbHJ1X2l0ZW07Ci0Jd2hpbGUgKGl0ZW0tPm5l
eHQgJiYgbHJ1X2NvbXBhcmVfZnVuYyAoaXRlbS0+ZGF0YSwgaXRlbS0+bmV4dC0+ZGF0YSkgPiAw
KQotCQlpdGVtID0gZ19saXN0X25leHQgKGl0ZW0pOwotCi0JaWYgKGl0ZW0gIT0gbHJ1X2l0ZW0p
IHsKLQkJY2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9yZW1vdmVfbGluayAoY2FjaGUt
PnByaXYtPmxydV9zdGFydCwgbHJ1X2l0ZW0pOwotCQlpdGVtID0gZ19saXN0X2luc2VydF9zb3J0
ZWQgKGl0ZW0sIGxydV9pdGVtLT5kYXRhLCBscnVfY29tcGFyZV9mdW5jKTsKLQkJZ19saXN0X2Zy
ZWUgKGxydV9pdGVtKTsKLQl9Ci0KLQlpZiAoZW50cnktPmRpcnR5IHx8IGVudHJ5LT5iZWluZ192
YWxpZGF0ZWQpCi0JCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKLQot
CS8qIDIuIFRoZSByZXF1ZXN0IG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhlIHN0b3JlZCByZXNw
b25zZQotCSAqICBhbGxvd3MgaXQgdG8gYmUgdXNlZCBmb3IgdGhlIHByZXNlbnRlZCByZXF1ZXN0
Ci0JICovCi0KLQkvKiBJbiBwcmFjdGljZSB0aGlzIG1lYW5zIHdlIG9ubHkgcmV0dXJuIG91ciBy
ZXNvdXJjZSBmb3IgR0VULAotCSAqIGNhY2hlYWJpbGl0eSBmb3Igb3RoZXIgbWV0aG9kcyBpcyBh
IFRPRE8gaW4gdGhlIFJGQwotCSAqIChUT0RPOiBhbHRob3VnaCB3ZSBjb3VsZCByZXR1cm4gdGhl
IGhlYWRlcnMgZm9yIEhFQUQKLQkgKiBwcm9iYWJseSkuCi0JICovCi0JaWYgKG1zZy0+bWV0aG9k
ICE9IFNPVVBfTUVUSE9EX0dFVCkKLQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNF
X1NUQUxFOwotCi0JLyogMy4gU2VsZWN0aW5nIHJlcXVlc3QtaGVhZGVycyBub21pbmF0ZWQgYnkg
dGhlIHN0b3JlZAotCSAqIHJlc3BvbnNlIChpZiBhbnkpIG1hdGNoIHRob3NlIHByZXNlbnRlZC4K
LQkgKi8KLQotCS8qIFRPRE8gKi8KLQotCS8qIDQuIFRoZSByZXF1ZXN0IGlzIGEgY29uZGl0aW9u
YWwgcmVxdWVzdCBpc3N1ZWQgYnkgdGhlIGNsaWVudC4KLQkgKi8KLQlpZiAoc291cF9tZXNzYWdl
X2hlYWRlcnNfZ2V0IChtc2ctPnJlcXVlc3RfaGVhZGVycywgIklmLU1vZGlmaWVkLVNpbmNlIikg
fHwKLQkgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChtc2ctPnJlcXVlc3RfaGVhZGVycywg
IklmLU5vbmUtTWF0Y2giKSkKLQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NU
QUxFOwotCi0JLyogNS4gVGhlIHByZXNlbnRlZCByZXF1ZXN0IGFuZCBzdG9yZWQgcmVzcG9uc2Ug
YXJlIGZyZWUgZnJvbQotCSAqIGRpcmVjdGl2ZXMgdGhhdCB3b3VsZCBwcmV2ZW50IGl0cyB1c2Uu
Ci0JICovCi0KLQltdXN0X3JldmFsaWRhdGUgPSBGQUxTRTsKLQltYXhfYWdlID0gbWF4X3N0YWxl
ID0gbWluX2ZyZXNoID0gLTE7Ci0KLQljYWNoZV9jb250cm9sID0gc291cF9tZXNzYWdlX2hlYWRl
cnNfZ2V0IChtc2ctPnJlcXVlc3RfaGVhZGVycywgIkNhY2hlLUNvbnRyb2wiKTsKLQlpZiAoY2Fj
aGVfY29udHJvbCkgewotCQlHSGFzaFRhYmxlICpoYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFy
YW1fbGlzdCAoY2FjaGVfY29udHJvbCk7Ci0KLQkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0
ZW5kZWQgKGhhc2gsICJuby1zdG9yZSIsIE5VTEwsIE5VTEwpKSB7Ci0JCQlzb3VwX2hlYWRlcl9m
cmVlX3BhcmFtX2xpc3QgKGhhc2gpOwotCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BP
TlNFX1NUQUxFOwotCQl9Ci0KLQkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhh
c2gsICJuby1jYWNoZSIsIE5VTEwsIE5VTEwpKSB7Ci0JCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRl
ID0gVFJVRTsKLQkJfQotCi0JCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNo
LCAibWF4LWFnZSIsIE5VTEwsICZ2YWx1ZSkpIHsKLQkJCW1heF9hZ2UgPSAoaW50KU1JTiAoZ19h
c2NpaV9zdHJ0b2xsICh2YWx1ZSwgTlVMTCwgMTApLCBHX01BWElOVDMyKTsKLQkJfQotCi0JCS8q
IG1heC1zdGFsZSBjYW4gaGF2ZSBubyB2YWx1ZSBzZXQsIHdlIG5lZWQgdG8gdXNlIF9leHRlbmRl
ZCAqLwotCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm1heC1zdGFs
ZSIsIE5VTEwsICZ2YWx1ZSkpIHsKLQkJCWlmICh2YWx1ZSkKLQkJCQltYXhfc3RhbGUgPSAoaW50
KU1JTiAoZ19hc2NpaV9zdHJ0b2xsICh2YWx1ZSwgTlVMTCwgMTApLCBHX01BWElOVDMyKTsKLQkJ
CWVsc2UKLQkJCQltYXhfc3RhbGUgPSBHX01BWElOVDMyOwotCQl9Ci0KLQkJdmFsdWUgPSBnX2hh
c2hfdGFibGVfbG9va3VwIChoYXNoLCAibWluLWZyZXNoIik7Ci0JCWlmICh2YWx1ZSkKLQkJCW1p
bl9mcmVzaCA9IChpbnQpTUlOIChnX2FzY2lpX3N0cnRvbGwgKHZhbHVlLCBOVUxMLCAxMCksIEdf
TUFYSU5UMzIpOwotCi0JCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7Ci0KLQkJ
aWYgKG1heF9hZ2UgIT0gLTEpIHsKLQkJCWd1aW50IGN1cnJlbnRfYWdlID0gd2Via2l0X3NvdXBf
Y2FjaGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChlbnRyeSk7Ci0KLQkJCS8qIElmIHdlIGFyZSBv
dmVyIG1heC1hZ2UgYW5kIG1heC1zdGFsZSBpcyBub3QKLQkJCSAgIHNldCwgZG8gbm90IHVzZSB0
aGUgdmFsdWUgZnJvbSB0aGUgY2FjaGUKLQkJCSAgIHdpdGhvdXQgdmFsaWRhdGlvbiAqLwotCQkJ
aWYgKChndWludCkgbWF4X2FnZSA8PSBjdXJyZW50X2FnZSAmJiBtYXhfc3RhbGUgPT0gLTEpCi0J
CQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT047Ci0J
CX0KLQl9Ci0KLQkvKiA2LiBUaGUgc3RvcmVkIHJlc3BvbnNlIGlzIGVpdGhlcjogZnJlc2gsIGFs
bG93ZWQgdG8gYmUKLQkgKiBzZXJ2ZWQgc3RhbGUgb3Igc3VjY2VzZnVsbHkgdmFsaWRhdGVkCi0J
ICovCi0JLyogVE9ETyBjb25zaWRlciBhbHNvIHByb3h5LXJldmFsaWRhdGUgJiBzLW1heGFnZSAq
LwotCWlmIChlbnRyeS0+bXVzdF9yZXZhbGlkYXRlKQotCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FD
SEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKLQotCWlmICghd2Via2l0X3NvdXBfY2FjaGVf
ZW50cnlfaXNfZnJlc2hfZW5vdWdoIChlbnRyeSwgbWluX2ZyZXNoKSkgewotCQkvKiBOb3QgZnJl
c2gsIGNhbiBpdCBiZSBzZXJ2ZWQgc3RhbGU/ICovCi0JCWlmIChtYXhfc3RhbGUgIT0gLTEpIHsK
LQkJCS8qIEdfTUFYSU5UMzIgbWVhbnMgd2UgYWNjZXB0IGFueSBzdGFsZW5lc3MgKi8KLQkJCWlm
IChtYXhfc3RhbGUgPT0gR19NQVhJTlQzMikKLQkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVf
UkVTUE9OU0VfRlJFU0g7Ci0KLQkJCWlmICgod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0X2N1
cnJlbnRfYWdlIChlbnRyeSkgLSBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lKSA8PSAoZ3VpbnQp
IG1heF9zdGFsZSkKLQkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7
Ci0JCX0KLQotCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURB
VElPTjsKLQl9Ci0KLQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7Ci19
Ci0KLS8qKgotICogd2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eToKLSAqIEBjYWNo
ZTogYSAjV2ViS2l0U291cENhY2hlCi0gKiBAbXNnOiBhICNTb3VwTWVzc2FnZQotICoKLSAqIENh
bGN1bGF0ZXMgd2hldGhlciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4KLSAqCi0gKiBS
ZXR1cm5zOiBhICNXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IHZhbHVlIGluZGljYXRpbmcgd2hldGhl
ciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4KLSAqKi8KLVdlYktpdFNvdXBDYWNoZWFi
aWxpdHkKLXdlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNo
ZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCi17Ci0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdF
QktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSksIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxF
KTsKLQlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChtc2cpLCBXRUJLSVRf
U09VUF9DQUNIRV9VTkNBQ0hFQUJMRSk7Ci0KLQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfR0VU
X0NMQVNTIChjYWNoZSktPmdldF9jYWNoZWFiaWxpdHkgKGNhY2hlLCBtc2cpOwotfQotCi1zdGF0
aWMgZ2Jvb2xlYW4KLWZvcmNlX2ZsdXNoX3RpbWVvdXQgKGdwb2ludGVyIGRhdGEpCi17Ci0JZ2Jv
b2xlYW4gKmZvcmNlZCA9IChnYm9vbGVhbiAqKWRhdGE7Ci0JKmZvcmNlZCA9IFRSVUU7Ci0KLQly
ZXR1cm4gRkFMU0U7Ci19Ci0KLS8qKgotICogd2Via2l0X3NvdXBfY2FjaGVfZmx1c2g6Ci0gKiBA
Y2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQotICogQHNlc3Npb246IHRoZSAjU291cFNlc3Npb24g
YXNzb2NpYXRlZCB3aXRoIHRoZSBAY2FjaGUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZm9y
Y2UgYWxsIHBlbmRpbmcgd3JpdGVzIGluIHRoZSBAY2FjaGUgdG8gYmUKLSAqIGNvbW1pdHRlZCB0
byBkaXNrLiBGb3IgZG9pbmcgc28gaXQgd2lsbCBpdGVyYXRlIHRoZSAjR01haW5Db250ZXh0Ci0g
KiBhc3NvY2lhdGVkIHdpdGggdGhlIEBzZXNzaW9uICh3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQg
b25lKSBhcyBsb25nCi0gKiBhcyBuZWVkZWQuCi0gKiovCi12b2lkCi13ZWJraXRfc291cF9jYWNo
ZV9mbHVzaCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKLXsKLQlHTWFpbkNvbnRleHQgKmFzeW5j
X2NvbnRleHQ7Ci0JU291cFNlc3Npb24gKnNlc3Npb247Ci0JZ3VpbnQgdGltZW91dF9pZDsKLQln
Ym9vbGVhbiBmb3JjZWQgPSBGQUxTRTsKLQotCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19T
T1VQX0NBQ0hFIChjYWNoZSkpOwotCi0Jc2Vzc2lvbiA9IGNhY2hlLT5wcml2LT5zZXNzaW9uOwot
CWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfU0VTU0lPTiAoc2Vzc2lvbikpOwotCWFzeW5jX2Nv
bnRleHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHNlc3Npb24pOwotCi0JLyog
V2UgZ2l2ZSBjYWNoZSAxMCBzZWNzIHRvIGZpbmlzaCAqLwotCXRpbWVvdXRfaWQgPSBnX3RpbWVv
dXRfYWRkICgxMDAwMCwgZm9yY2VfZmx1c2hfdGltZW91dCwgJmZvcmNlZCk7Ci0KLQl3aGlsZSAo
IWZvcmNlZCAmJiBjYWNoZS0+cHJpdi0+bl9wZW5kaW5nID4gMCkKLQkJZ19tYWluX2NvbnRleHRf
aXRlcmF0aW9uIChhc3luY19jb250ZXh0LCBGQUxTRSk7Ci0KLQlpZiAoIWZvcmNlZCkKLQkJZ19z
b3VyY2VfcmVtb3ZlICh0aW1lb3V0X2lkKTsKLQllbHNlCi0JCWdfd2FybmluZyAoIkNhY2hlIGZs
dXNoIGZpbmlzaGVkIGRlc3BpdGUgJWQgcGVuZGluZyByZXF1ZXN0cyIsIGNhY2hlLT5wcml2LT5u
X3BlbmRpbmcpOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYXJfY2FjaGVfaXRlbSAoZ3BvaW50ZXIg
ZGF0YSwKLQkJICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JV2ViS2l0U291cENhY2hlICpjYWNo
ZSA9IChXZWJLaXRTb3VwQ2FjaGUgKikgdXNlcl9kYXRhOwotCVdlYktpdFNvdXBDYWNoZUVudHJ5
ICplbnRyeSA9IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqKSBkYXRhOwotCi0JaWYgKHdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIGVudHJ5KSkKLQkJd2Via2l0X3NvdXBfY2Fj
aGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOwotfQotCi0vKioKLSAqIHdlYmtpdF9zb3VwX2Nh
Y2hlX2NsZWFyOgotICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKLSAqCi0gKiBXaWxsIHJl
bW92ZSBhbGwgZW50cmllcyBpbiB0aGUgQGNhY2hlIHBsdXMgYWxsIHRoZSBjYWNoZSBmaWxlcwot
ICogYXNzb2NpYXRlZCB3aXRoIHRoZW0uCi0gKiovCi12b2lkCi13ZWJraXRfc291cF9jYWNoZV9j
bGVhciAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKLXsKLQlHSGFzaFRhYmxlICpoYXNoOwotCUdM
aXN0ICplbnRyaWVzOwotCi0JZ19yZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUg
KGNhY2hlKSk7Ci0KLQloYXNoID0gY2FjaGUtPnByaXYtPmNhY2hlOwotCWdfcmV0dXJuX2lmX2Zh
aWwgKGhhc2gpOwotCi0JLy8gQ2Fubm90IHVzZSBnX2hhc2hfdGFibGVfZm9yZWFjaCBhcyBjYWxs
YmFja3MgbXVzdCBub3QgbW9kaWZ5IHRoZSBoYXNoIHRhYmxlCi0JZW50cmllcyA9IGdfaGFzaF90
YWJsZV9nZXRfdmFsdWVzIChoYXNoKTsKLQlnX2xpc3RfZm9yZWFjaCAoZW50cmllcywgY2xlYXJf
Y2FjaGVfaXRlbSwgY2FjaGUpOwotCWdfbGlzdF9mcmVlIChlbnRyaWVzKTsKLX0KLQotU291cE1l
c3NhZ2UgKgotd2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAo
V2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm9yaWdpbmFsKQotewotCVNvdXBN
ZXNzYWdlICptc2c7Ci0JU291cFVSSSAqdXJpOwotCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRy
eTsKLQljaGFyICprZXk7Ci0JY29uc3QgY2hhciAqdmFsdWU7Ci0KLQlnX3JldHVybl92YWxfaWZf
ZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwgTlVMTCk7Ci0JZ19yZXR1cm5fdmFs
X2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAob3JpZ2luYWwpLCBOVUxMKTsKLQotCS8qIEZpcnN0
IGNvcHkgdGhlIGRhdGEgd2UgbmVlZCBmcm9tIHRoZSBvcmlnaW5hbCBtZXNzYWdlICovCi0JdXJp
ID0gc291cF9tZXNzYWdlX2dldF91cmkgKG9yaWdpbmFsKTsKLQltc2cgPSBzb3VwX21lc3NhZ2Vf
bmV3X2Zyb21fdXJpIChvcmlnaW5hbC0+bWV0aG9kLCB1cmkpOwotCi0Jc291cF9tZXNzYWdlX2hl
YWRlcnNfZm9yZWFjaCAob3JpZ2luYWwtPnJlcXVlc3RfaGVhZGVycywKLQkJCQkgICAgICAoU291
cE1lc3NhZ2VIZWFkZXJzRm9yZWFjaEZ1bmMpY29weV9oZWFkZXJzLAotCQkJCSAgICAgIG1zZy0+
cmVxdWVzdF9oZWFkZXJzKTsKLQotCS8qIE5vdyBhZGQgdGhlIHZhbGlkYXRvciBlbnRyaWVzIGlu
IHRoZSBoZWFkZXIgZnJvbSB0aGUgY2FjaGVkCi0JICAgZGF0YSAqLwotCWtleSA9IHNvdXBfbWVz
c2FnZV9nZXRfY2FjaGVfa2V5IChvcmlnaW5hbCk7Ci0JZW50cnkgPSBnX2hhc2hfdGFibGVfbG9v
a3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSk7Ci0JZ19mcmVlIChrZXkpOwotCi0JZ19yZXR1
cm5fdmFsX2lmX2ZhaWwgKGVudHJ5LCBOVUxMKTsKLQotCWVudHJ5LT5iZWluZ192YWxpZGF0ZWQg
PSBUUlVFOwotCi0JdmFsdWUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFk
ZXJzLCAiTGFzdC1Nb2RpZmllZCIpOwotCWlmICh2YWx1ZSkKLQkJc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kIChtc2ctPnJlcXVlc3RfaGVhZGVycywKLQkJCQkJICAgICAiSWYtTW9kaWZpZWQt
U2luY2UiLAotCQkJCQkgICAgIHZhbHVlKTsKLQl2YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldCAoZW50cnktPmhlYWRlcnMsICJFVGFnIik7Ci0JaWYgKHZhbHVlKQotCQlzb3VwX21lc3Nh
Z2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+cmVxdWVzdF9oZWFkZXJzLAotCQkJCQkgICAgICJJZi1O
b25lLU1hdGNoIiwKLQkJCQkJICAgICB2YWx1ZSk7Ci0JcmV0dXJuIG1zZzsKLX0KLQotI2RlZmlu
ZSBXRUJLSVRfU09VUF9DQUNIRV9GSUxFICJzb3VwLmNhY2hlIgotCi0jZGVmaW5lIFdFQktJVF9T
T1VQX0NBQ0hFX0hFQURFUlNfRk9STUFUICJ7c3N9IgotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNI
RV9QSEVBREVSU19GT1JNQVQgIihzc2J1dXV1dWEiIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNf
Rk9STUFUICIpIgotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1BVCAiYSIg
V0VCS0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9STUFUCi0KLS8qIEJhc2ljYWxseSB0aGUgc2Ft
ZSBmb3JtYXQgdGhhbiBhYm92ZSBleGNlcHQgdGhhdCBzb21lIHN0cmluZ3MgYXJlCi0gICBwcmVw
ZW5kZWQgd2l0aCAmLiBUaGlzIHdheSB0aGUgR1ZhcmlhbnQgcmV0dXJucyBhIHBvaW50ZXIgdG8g
dGhlCi0gICBkYXRhIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgdGhlIHN0cmluZyAqLwotI2RlZmlu
ZSBXRUJLSVRfU09VUF9DQUNIRV9ERUNPREVfSEVBREVSU19GT1JNQVQgInsmcyZzfSIKLQotc3Rh
dGljIHZvaWQKLXBhY2tfZW50cnkgKGdwb2ludGVyIGRhdGEsCi0JICAgIGdwb2ludGVyIHVzZXJf
ZGF0YSkKLXsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSAoV2ViS2l0U291cENhY2hl
RW50cnkgKikgZGF0YTsKLQlTb3VwTWVzc2FnZUhlYWRlcnNJdGVyIGl0ZXI7Ci0JY29uc3QgZ2No
YXIgKmhlYWRlcl9rZXksICpoZWFkZXJfdmFsdWU7Ci0JR1ZhcmlhbnRCdWlsZGVyICpoZWFkZXJz
X2J1aWxkZXI7Ci0JR1ZhcmlhbnRCdWlsZGVyICplbnRyaWVzX2J1aWxkZXIgPSAoR1ZhcmlhbnRC
dWlsZGVyICopdXNlcl9kYXRhOwotCi0JLyogRG8gbm90IHN0b3JlIG5vbi1jb25zb2xpZGF0ZWQg
ZW50cmllcyAqLwotCWlmIChlbnRyeS0+ZGlydHkgfHwgZW50cnktPndyaXRpbmcgfHwgIWVudHJ5
LT5rZXkpCi0JCXJldHVybjsKLQotCS8qIFBhY2sgaGVhZGVycyAqLwotCWhlYWRlcnNfYnVpbGRl
ciA9IGdfdmFyaWFudF9idWlsZGVyX25ldyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOwotCXNvdXBf
bWVzc2FnZV9oZWFkZXJzX2l0ZXJfaW5pdCAoJml0ZXIsIGVudHJ5LT5oZWFkZXJzKTsKLQl3aGls
ZSAoc291cF9tZXNzYWdlX2hlYWRlcnNfaXRlcl9uZXh0ICgmaXRlciwgJmhlYWRlcl9rZXksICZo
ZWFkZXJfdmFsdWUpKSB7Ci0JCWlmIChnX3V0ZjhfdmFsaWRhdGUgKGhlYWRlcl92YWx1ZSwgLTEs
IE5VTEwpKQotCQkJZ192YXJpYW50X2J1aWxkZXJfYWRkIChoZWFkZXJzX2J1aWxkZXIsIFdFQktJ
VF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9STUFULAotCQkJCQkgICAgICAgaGVhZGVyX2tleSwgaGVh
ZGVyX3ZhbHVlKTsKLQl9Ci0KLQkvKiBFbnRyeSBkYXRhICovCi0JZ192YXJpYW50X2J1aWxkZXJf
YWRkIChlbnRyaWVzX2J1aWxkZXIsIFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCwK
LQkJCSAgICAgICBlbnRyeS0+a2V5LCBlbnRyeS0+ZmlsZW5hbWUsIGVudHJ5LT5tdXN0X3JldmFs
aWRhdGUsCi0JCQkgICAgICAgZW50cnktPmZyZXNobmVzc19saWZldGltZSwgZW50cnktPmNvcnJl
Y3RlZF9pbml0aWFsX2FnZSwKLQkJCSAgICAgICBlbnRyeS0+cmVzcG9uc2VfdGltZSwgZW50cnkt
PmhpdHMsIGVudHJ5LT5sZW5ndGgsIGhlYWRlcnNfYnVpbGRlcik7Ci0KLQlnX3ZhcmlhbnRfYnVp
bGRlcl91bnJlZiAoaGVhZGVyc19idWlsZGVyKTsKLX0KLQotdm9pZAotd2Via2l0X3NvdXBfY2Fj
aGVfZHVtcCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKLXsKLQlXZWJLaXRTb3VwQ2FjaGVQcml2
YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKLQlnY2hh
ciAqZmlsZW5hbWU7Ci0JR1ZhcmlhbnRCdWlsZGVyICplbnRyaWVzX2J1aWxkZXI7Ci0JR1Zhcmlh
bnQgKmNhY2hlX3ZhcmlhbnQ7Ci0KLQlpZiAoIWdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5s
cnVfc3RhcnQpKQotCQlyZXR1cm47Ci0KLQkvKiBDcmVhdGUgdGhlIGJ1aWxkZXIgYW5kIGl0ZXJh
dGUgb3ZlciBhbGwgZW50cmllcyAqLwotCWVudHJpZXNfYnVpbGRlciA9IGdfdmFyaWFudF9idWls
ZGVyX25ldyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOwotCWdfbGlzdF9mb3JlYWNoIChjYWNoZS0+
cHJpdi0+bHJ1X3N0YXJ0LCBwYWNrX2VudHJ5LCBlbnRyaWVzX2J1aWxkZXIpOwotCi0JLyogU2Vy
aWFsaXplIGFuZCBkdW1wICovCi0JY2FjaGVfdmFyaWFudCA9IGdfdmFyaWFudF9uZXcgKFdFQktJ
VF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9STUFULCBlbnRyaWVzX2J1aWxkZXIpOwotCWdfdmFyaWFu
dF9idWlsZGVyX3VucmVmIChlbnRyaWVzX2J1aWxkZXIpOwotCi0JZmlsZW5hbWUgPSBnX2J1aWxk
X2ZpbGVuYW1lIChwcml2LT5jYWNoZV9kaXIsIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUsIE5VTEwp
OwotCWdfZmlsZV9zZXRfY29udGVudHMgKGZpbGVuYW1lLCAoY29uc3QgZ2NoYXIgKilnX3Zhcmlh
bnRfZ2V0X2RhdGEgKGNhY2hlX3ZhcmlhbnQpLAotCQkJICAgICBnX3ZhcmlhbnRfZ2V0X3NpemUg
KGNhY2hlX3ZhcmlhbnQpLCBOVUxMKTsKLQlnX2ZyZWUgKGZpbGVuYW1lKTsKLQlnX3ZhcmlhbnRf
dW5yZWYgKGNhY2hlX3ZhcmlhbnQpOwotfQotCi12b2lkCi13ZWJraXRfc291cF9jYWNoZV9sb2Fk
IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQotewotCWdjaGFyICpmaWxlbmFtZSA9IE5VTEwsICpj
b250ZW50cyA9IE5VTEw7Ci0JR1ZhcmlhbnQgKmNhY2hlX3ZhcmlhbnQ7Ci0JR1ZhcmlhbnRJdGVy
ICplbnRyaWVzX2l0ZXIsICpoZWFkZXJzX2l0ZXI7Ci0JR1ZhcmlhbnRUeXBlICp2YXJpYW50X2Zv
cm1hdDsKLQlnc2l6ZSBsZW5ndGg7Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OwotCVdl
YktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBjYWNoZS0+cHJpdjsKLQotCWZpbGVuYW1lID0g
Z19idWlsZF9maWxlbmFtZSAocHJpdi0+Y2FjaGVfZGlyLCBXRUJLSVRfU09VUF9DQUNIRV9GSUxF
LCBOVUxMKTsKLQlpZiAoIWdfZmlsZV9nZXRfY29udGVudHMgKGZpbGVuYW1lLCAmY29udGVudHMs
ICZsZW5ndGgsIE5VTEwpKSB7Ci0JCWdfZnJlZSAoZmlsZW5hbWUpOwotCQlnX2ZyZWUgKGNvbnRl
bnRzKTsKLQkJcmV0dXJuOwotCX0KLQlnX2ZyZWUgKGZpbGVuYW1lKTsKLQotCXZhcmlhbnRfZm9y
bWF0ID0gZ192YXJpYW50X3R5cGVfbmV3IChXRUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1B
VCk7Ci0JY2FjaGVfdmFyaWFudCA9IGdfdmFyaWFudF9uZXdfZnJvbV9kYXRhICh2YXJpYW50X2Zv
cm1hdCwgKGNvbnN0IGdjaGFyICopY29udGVudHMsIGxlbmd0aCwgRkFMU0UsIGdfZnJlZSwgY29u
dGVudHMpOwotCWdfdmFyaWFudF90eXBlX2ZyZWUgKHZhcmlhbnRfZm9ybWF0KTsKLQotCWdfdmFy
aWFudF9nZXQgKGNhY2hlX3ZhcmlhbnQsIFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9STUFU
LCAmZW50cmllc19pdGVyKTsKLQllbnRyeSA9IGdfc2xpY2VfbmV3MCAoV2ViS2l0U291cENhY2hl
RW50cnkpOwotCi0Jd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AgKGVudHJpZXNfaXRlciwgV0VC
S0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9STUFULAotCQkJCSAgICAmZW50cnktPmtleSwgJmVu
dHJ5LT5maWxlbmFtZSwgJmVudHJ5LT5tdXN0X3JldmFsaWRhdGUsCi0JCQkJICAgICZlbnRyeS0+
ZnJlc2huZXNzX2xpZmV0aW1lLCAmZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSwKLQkJCQkg
ICAgJmVudHJ5LT5yZXNwb25zZV90aW1lLCAmZW50cnktPmhpdHMsICZlbnRyeS0+bGVuZ3RoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhlYWRlcnNfaXRlcikpIHsKLQkJ
Y29uc3QgZ2NoYXIgKmhlYWRlcl9rZXksICpoZWFkZXJfdmFsdWU7Ci0KLQkJLyogU291cE1lc3Nh
Z2UgSGVhZGVycyAqLwotCQllbnRyeS0+aGVhZGVycyA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX25l
dyAoU09VUF9NRVNTQUdFX0hFQURFUlNfUkVTUE9OU0UpOwotCQl3aGlsZSAoZ192YXJpYW50X2l0
ZXJfbG9vcCAoaGVhZGVyc19pdGVyLCBXRUJLSVRfU09VUF9DQUNIRV9ERUNPREVfSEVBREVSU19G
T1JNQVQsICZoZWFkZXJfa2V5LCAmaGVhZGVyX3ZhbHVlKSkKLQkJCXNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2FwcGVuZCAoZW50cnktPmhlYWRlcnMsIGhlYWRlcl9rZXksIGhlYWRlcl92YWx1ZSk7Ci0K
LQkJLyogSW5zZXJ0IGluIGNhY2hlICovCi0JCWlmICghd2Via2l0X3NvdXBfY2FjaGVfZW50cnlf
aW5zZXJ0X2J5X2tleSAoY2FjaGUsIChjb25zdCBnY2hhciAqKWVudHJ5LT5rZXksIGVudHJ5LCBG
QUxTRSkpCi0JCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7Ci0K
LQkJLyogTmV3IGVudHJ5IGZvciB0aGUgbmV4dCBpdGVyYXRpb24uIFRoaXMgY3JlYXRlcyBhbgot
CQkgICBleHRyYSBvYmplY3QgdGhlIGxhc3QgaXRlcmF0aW9uIGJ1dCBpdCdzIHdvcnRoIGl0Ci0J
CSAgIGFzIHdlIHNhdmUgc2V2ZXJhbCBpZidzICovCi0JCWVudHJ5ID0gZ19zbGljZV9uZXcwIChX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSk7Ci0JfQotCS8qIFJlbW92ZSBsYXN0IGNyZWF0ZWQgZW50cnkg
Ki8KLQlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5LCBlbnRyeSk7Ci0KLQkvKiBT
b3J0IExSVSAoc2hvdWxkbid0IGJlIG5lZWRlZCkuIEZpcnN0IHJldmVyc2UgYXMgZWxlbWVudHMK
LQkgKiBhcmUgYWx3YXlzIHByZXBlbmRlZCB3aGVuIGluc2VydGluZwotCSAqLwotCWNhY2hlLT5w
cml2LT5scnVfc3RhcnQgPSBnX2xpc3RfcmV2ZXJzZSAoY2FjaGUtPnByaXYtPmxydV9zdGFydCk7
Ci0JY2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9zb3J0IChjYWNoZS0+cHJpdi0+bHJ1
X3N0YXJ0LCBscnVfY29tcGFyZV9mdW5jKTsKLQotCS8qIGZyZWVzICovCi0JZ192YXJpYW50X2l0
ZXJfZnJlZSAoZW50cmllc19pdGVyKTsKLQlnX3ZhcmlhbnRfdW5yZWYgKGNhY2hlX3ZhcmlhbnQp
OwotfQotCi12b2lkCi13ZWJraXRfc291cF9jYWNoZV9zZXRfbWF4X3NpemUgKFdlYktpdFNvdXBD
YWNoZSAqY2FjaGUsCi0JCQkJZ3VpbnQgbWF4X3NpemUpCi17Ci0JY2FjaGUtPnByaXYtPm1heF9z
aXplID0gbWF4X3NpemU7Ci0JY2FjaGUtPnByaXYtPm1heF9lbnRyeV9kYXRhX3NpemUgPSBjYWNo
ZS0+cHJpdi0+bWF4X3NpemUgLyBNQVhfRU5UUllfREFUQV9QRVJDRU5UQUdFOwotfQotCi1ndWlu
dAotd2Via2l0X3NvdXBfY2FjaGVfZ2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
KQotewotCXJldHVybiBjYWNoZS0+cHJpdi0+bWF4X3NpemU7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTI2Zjk4Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQv
c291cC1jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qIC0qLSBNb2Rl
OiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4
IC0qLSAqLwotLyoKLSAqIHNvdXAtY2FjaGUuaDoKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgSWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX1NPVVBfQ0FDSEVfSAotI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9IIDEKLQotI2lmZGVmIEdfT1NfV0lOMzIKLSAgICAjaWZkZWYgQlVJ
TERJTkdfV0VCS0lUCi0gICAgICAgICNkZWZpbmUgV0VCS0lUX0FQSSBfX2RlY2xzcGVjKGRsbGV4
cG9ydCkKLSAgICAjZWxzZQotICAgICAgICAjZGVmaW5lIFdFQktJVF9BUEkgX19kZWNsc3BlYyhk
bGxpbXBvcnQpCi0gICAgI2VuZGlmCi0gICAgI2RlZmluZSBXRUJLSVRfT0JTT0xFVEVfQVBJIFdF
QktJVF9BUEkKLSNlbHNlCi0gICAgI2RlZmluZSBXRUJLSVRfQVBJIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkoImRlZmF1bHQiKSkpCi0gICAgI2RlZmluZSBXRUJLSVRfT0JTT0xFVEVfQVBJIFdF
QktJVF9BUEkgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCkpCi0jZW5kaWYKLQotI2luY2x1ZGUg
PGxpYnNvdXAvc291cC10eXBlcy5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLQotR19CRUdJTl9E
RUNMUwotCi0jZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUgICAgICAgICAgICAod2Via2l0
X3NvdXBfY2FjaGVfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQ
RV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGUpKQotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNI
RV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJL
SVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGVDbGFzcykpCi0jZGVmaW5lIFdFQktJ
VF9JU19TT1VQX0NBQ0hFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUg
KChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBf
Q0FDSEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFdFQktJ
VF9UWVBFX1NPVVBfQ0FDSEUpKQotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQ
X0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGVDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRT
b3VwQ2FjaGUgV2ViS2l0U291cENhY2hlOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNo
ZVByaXZhdGUgV2ViS2l0U291cENhY2hlUHJpdmF0ZTsKLQotdHlwZWRlZiBlbnVtIHsKLQlXRUJL
SVRfU09VUF9DQUNIRV9DQUNIRUFCTEUgPSAoMSA8PCAwKSwKLQlXRUJLSVRfU09VUF9DQUNIRV9V
TkNBQ0hFQUJMRSA9ICgxIDw8IDEpLAotCVdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTID0g
KDEgPDwgMiksCi0JV0VCS0lUX1NPVVBfQ0FDSEVfVkFMSURBVEVTID0gKDEgPDwgMykKLX0gV2Vi
S2l0U291cENhY2hlYWJpbGl0eTsKLQotdHlwZWRlZiBlbnVtIHsKLQlXRUJLSVRfU09VUF9DQUNI
RV9SRVNQT05TRV9GUkVTSCwKLQlXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJ
REFUSU9OLAotCVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFCi19IFdlYktpdFNvdXBD
YWNoZVJlc3BvbnNlOwotCi10eXBlZGVmIGVudW0gewotCVdFQktJVF9TT1VQX0NBQ0hFX1NJTkdM
RV9VU0VSLAotCVdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRAotfSBXZWJLaXRTb3VwQ2FjaGVUeXBl
OwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZSB7Ci0JR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7
Ci0KLQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OwotfTsKLQotdHlwZWRlZiBzdHJ1Y3Qg
ewotCUdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLQkvKiBtZXRob2RzICovCi0JV2ViS2l0
U291cENhY2hlYWJpbGl0eSAoKmdldF9jYWNoZWFiaWxpdHkpKFdlYktpdFNvdXBDYWNoZSAqY2Fj
aGUsIFNvdXBNZXNzYWdlICptc2cpOwotCi0JLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lv
biAqLwotCXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDEpKHZvaWQpOwotCXZvaWQgKCpfbGlic291
cF9yZXNlcnZlZDIpKHZvaWQpOwotCXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDMpKHZvaWQpOwot
fSBXZWJLaXRTb3VwQ2FjaGVDbGFzczsKLQotV0VCS0lUX0FQSSBHVHlwZSAgICAgICAgICAgICB3
ZWJraXRfc291cF9jYWNoZV9nZXRfdHlwZSAodm9pZCk7Ci1XRUJLSVRfQVBJIFdlYktpdFNvdXBD
YWNoZSAgKndlYmtpdF9zb3VwX2NhY2hlX25ldyAoY29uc3QgY2hhciAgKmNhY2hlX2RpciwKLQkJ
CQkJCSAgICBXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5cGUpOwotV0VCS0lUX0FQSSB2b2lk
ICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9mbHVzaCAoV2ViS2l0U291cENhY2hlICAg
KmNhY2hlKTsKLVdFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVf
Y2xlYXIgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSk7Ci0KLVdFQktJVF9BUEkgdm9pZCAgICAg
ICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfZHVtcCAoV2ViS2l0U291cENhY2hlICpjYWNoZSk7
Ci1XRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2xvYWQgKFdl
YktpdFNvdXBDYWNoZSAqY2FjaGUpOwotCi1XRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdl
YmtpdF9zb3VwX2NhY2hlX3NldF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwKLQkJ
CQkJCQkgICAgIGd1aW50IG1heF9zaXplKTsKLVdFQktJVF9BUEkgZ3VpbnQgICAgICAgICAgICAg
d2Via2l0X3NvdXBfY2FjaGVfZ2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsK
LQotR19FTkRfREVDTFMKLQotCi0jZW5kaWYgLyogV0VCS0lUX1NPVVBfQ0FDSEVfSCAqLwotCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cKaW5kZXggMmZkMDg2OC4uNzA0Mzg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAt
MSw1ICsxLDE2IEBACiAyMDExLTAxLTI5ICBEYW4gV2luc2hpcCAgPGRhbndAZ25vbWUub3JnPgog
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBsaWJz
b3VwLWJhc2VkIGNhY2hlL3JlcXVlc3RlciBBUEkKKworICAgICAgICBbR1RLXSBkcm9wIHNvdXAg
Y2FjaGUgc3R1ZmYsIHdoaWNoIGhhcyBiZWVuIG1vdmVkIHRvIGxpYnNvdXAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNzQ3CisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKworMjAxMS0wMS0yOSAgRGFuIFdpbnNoaXAgIDxkYW53QGdub21lLm9y
Zz4KKwogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCiAKICAgICAgICAgW0dUS10gUmVt
b3ZlIEhBVkVfTElCU09VUF8yXzI5XzkwIGFuZCBIQVZFX0dTRVRUSU5HUyBjb25kaXRpb25hbHM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IGNmNjhmMDEuLjgyYWYwOGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQv
Z3RrL0dOVW1ha2VmaWxlLmFtCkBAIC05OCw3ICs5OCw2IEBAIGxpYndlYmtpdGd0a19AV0VCS0lU
R1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9M
SUJBCiAJJChPTEUzMl9MSUJTKQogCiB3ZWJraXRndGtfc3RhdGljX2hfYXBpICs9IFwKLQkkKHNy
Y2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9z
b3VwLWNhY2hlLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
LmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5o
IFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmgg
XApAQCAtMjYxLDcgKzI2MCw2IEBAICQoV0VCS0lUX0dJUlNPVVJDRVMpOiAkKEdfSVJfU0NBTk5F
UikgJChKU0NPUkVfR0lSU09VUkNFUykgbGlid2Via2l0Z3RrLUBXRUJLSVRHCiAJICAgICAtLWFk
ZC1pbmNsdWRlLXBhdGg9JChXZWJLaXQpIFwKIAkgICAgIC0tYWRkLWluY2x1ZGUtcGF0aD0kKHRv
cF9idWlsZGRpcikgXAogCSAgICAgLUkkKHNyY2RpcikvU291cmNlIFwKLQkgICAgIC1JJCh0b3Bf
c3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUgXAogCSAg
ICAgLUkkKFdlYktpdCkgXAogCSAgICAgLUkkKEdFTlNPVVJDRVMpIFwKIAkgICAgIC1JJChHRU5T
T1VSQ0VTX1dFQktJVCkgXApAQCAtMzc3LDcgKzM3NSw2IEBAIG5vaW5zdF9QUk9HUkFNUyArPSAk
KFRFU1RfUFJPR1MpCiB3ZWJraXRfdGVzdHNfY2ZsYWdzID0gXAogCS1mbm8tc3RyaWN0LWFsaWFz
aW5nIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRl
cnMgXAotCS1JJChXZWJDb3JlKS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUgXAogCS1JJChX
ZWJLaXQpIFwKIAktSSQoR0VOU09VUkNFUykgXAogCS1JJCh0b3BfYnVpbGRkaXIpL1NvdXJjZS9X
ZWJLaXQvZ3RrIFwKLS0gCjEuNy4zLjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80933</attachid>
            <date>2011-02-02 11:07:56 -0800</date>
            <delta_ts>2011-02-02 13:11:25 -0800</delta_ts>
            <desc>updated with Martin&apos;s suggestion</desc>
            <filename>0001-Use-libsoup-based-cache-requester-API.patch</filename>
            <type>text/plain</type>
            <size>184597</size>
            <attacher name="Dan Winship">danw</attacher>
            
              <data encoding="base64">RnJvbSAwZjAyMGM1ZDA2NmM1NTA3N2I2ZjNhZWM4MDg2MzUxNDM4Njg2MGZiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW4gV2luc2hpcCA8ZGFud0Bnbm9tZS5vcmc+CkRhdGU6IFNh
dCwgMjkgSmFuIDIwMTEgMTM6NTU6NDggLTA1MDAKU3ViamVjdDogW1BBVENIIDEvMl0gVXNlIGxp
YnNvdXAtYmFzZWQgY2FjaGUvcmVxdWVzdGVyIEFQSQoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDEgKwogU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICstCiAuLi4vcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmggICAgICB8ICAgIDkgKy0KIC4uLi9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCAgIHwgIDEwNCArLQog
Li4uL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMgICAgICAgfCAgMjAw
IC0tLQogLi4uL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggICAgICAg
fCAgIDYyIC0KIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5j
ICAgIHwgIDkyMiAtLS0tLS0tLS0tLQogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmggICAgfCAgIDc3IC0KIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0LWRhdGEuYyAgICAgICAgIHwgIDE3MCAtLQogLi4uL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtZGF0YS5oICAgICAgICAgfCAgIDUyIC0KIC4uLi9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LWZpbGUuYyAgICAgICAgIHwgIDMzMSAtLS0tCiAuLi4vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmggICAgICAgICB8ICAgNTQgLQogLi4uL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jICAgICAgICAgfCAgMzU2IC0tLS0tCiAu
Li4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmggICAgICAgICB8ICAgNTQg
LQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyAgICAgfCAg
MzEyIC0tLS0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0Lmgg
ICAgIHwgIDEwMCAtLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3Rlci5jICAgfCAgMTg4IC0tLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3Rlci5oICAgfCAgIDgxIC0KIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3Nv
dXAtY2FjaGUtcHJpdmF0ZS5oIHwgICA0MiAtCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtp
dC9zb3VwLWNhY2hlLmMgICAgICAgICB8IDE2NzcgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9u
ZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaCAgICAgICAgIHwgIDEwNiAtLQog
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEx
ICsKIFNvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgIHwg
ICAgMyAtCiAyMyBmaWxlcyBjaGFuZ2VkLCAxMTQgaW5zZXJ0aW9ucygrKSwgNDg1OSBkZWxldGlv
bnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJl
Y3RvcnktaW5wdXQtc3RyZWFtLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jCiBkZWxl
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jCiBkZWxl
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1kYXRhLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYwogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtZmlsZS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWh0dHAuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaAogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3Rlci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3Nv
dXAtY2FjaGUtcHJpdmF0ZS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0
L3NvdXAtY2FjaGUuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NGMzZjdlLi4zNzEzN2MyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDEtMjkgIERhbiBXaW5zaGlwICA8ZGFud0Bnbm9tZS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNl
IGxpYnNvdXAtYmFzZWQgY2FjaGUvcmVxdWVzdGVyIEFQSQorCisgICAgICAgIFtHVEtdIGRyb3Ag
c291cCBjYWNoZSBzdHVmZiwgd2hpY2ggaGFzIGJlZW4gbW92ZWQgdG8gbGlic291cAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3NDcKKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOiB1cGRhdGUgZm9yIHJlbW92ZWQgZmlsZXMKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlJlc291cmNlSGFuZGxlSW50ZXJuYWwpOiB1cGRh
dGUKKyAgICAgICAgdHlwZSBuYW1lcywgZHJvcCBtX3JlcXVlc3RlcgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQpOiBhZGQgYSBTb3VwUmVxdWVzdGVyIHRvIHRo
ZQorICAgICAgICBzZXNzaW9uCisgICAgICAgIChXZWJDb3JlOjpwYXJzZURhdGFVcmwpOgorICAg
ICAgICAoV2ViQ29yZTo6c3RhcnRIdHRwKTogZ2V0IHRoZSByZXF1ZXN0ZXIgZnJvbSB0aGUgc2Vz
c2lvbiByYXRoZXIKKyAgICAgICAgdGhhbiB1c2luZyBtX3JlcXVlc3RlcgorICAgICAgICAoV2Vi
Q29yZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydEdpbyk6IHVwZGF0ZSB0eXBlIG5hbWVz
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlu
cHV0LXN0cmVhbS5jOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5w
dXQtc3RyZWFtLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtcmVxdWVzdC1kYXRhLmM6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmM6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxl
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC1odHRwLmM6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYzogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0
L3NvdXAtY2FjaGUtcHJpdmF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oOiBSZW1vdmVkLgor
CiAyMDExLTAyLTAyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXgg
NTg2NWUzNC4uNjdjZDAyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTg3LDkgKzg3LDcgQEAg
d2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ayBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS93ZWJraXQKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAKIAogd2ViY29yZV9idWlsdF9ub3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvdG9rZW5pemVyLmNwcApAQCAtMzgxMywyMyArMzgxMSw2IEBAIHdlYmNvcmVndGtf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tl
dFN0cmVhbUhhbmRsZVNvdXAuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU291cFVSSVV0aWxzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1NvdXBVUklVdGlscy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMgXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJl
YW0uaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
aHR0cC1pbnB1dC1zdHJlYW0uYyBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCBcCi0JU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
LWZpbGUuYyBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1maWxlLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCBcCi0JU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmggXAotCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
ZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtp
dC9zb3VwLWNhY2hlLmMgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS93ZWJraXQvc291cC1jYWNoZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblZpZXdHdGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCmluZGV4IGVkNjY5NDQuLjgyOWIw
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00Niw5ICs0NiwxMCBAQAogI2VuZGlmCiAKICNpZiBV
U0UoU09VUCkKLSNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgogI2luY2x1ZGUgPEdSZWZQdHIu
aD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNkZWZpbmUgTElCU09VUF9VU0VfVU5TVEFC
TEVfUkVRVUVTVF9BUEkKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtcmVxdWVzdC5oPgogY2xhc3Mg
RnJhbWU7CiAjZW5kaWYKIApAQCAtMTMyLDkgKzEzMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgIG1fdXNlciA9IHVybC51c2VyKCk7CiAgICAgICAgICAgICBtX3Bhc3MgPSB1
cmwucGFzcygpOwogICAgICAgICAgICAgbV9maXJzdFJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMo
KTsKLSNpZiBVU0UoU09VUCkKLSAgICAgICAgICAgIG1fcmVxdWVzdGVyID0gYWRvcHRHUmVmKHdl
YmtpdF9zb3VwX3JlcXVlc3Rlcl9uZXcoKSk7Ci0jZW5kaWYKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgflJlc291cmNlSGFuZGxlSW50ZXJuYWwoKTsKQEAgLTE5MCw4ICsxODgsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IG1fc291cE1l
c3NhZ2U7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgYm9v
bCBtX2NhbmNlbGxlZDsKLSAgICAgICAgR1JlZlB0cjxXZWJLaXRTb3VwUmVxdWVzdD4gbV9zb3Vw
UmVxdWVzdDsKLSAgICAgICAgR1JlZlB0cjxXZWJLaXRTb3VwUmVxdWVzdGVyPiBtX3JlcXVlc3Rl
cjsKKyAgICAgICAgR1JlZlB0cjxTb3VwUmVxdWVzdD4gbV9zb3VwUmVxdWVzdDsKICAgICAgICAg
R1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CiAgICAgICAgIEdSZWZQdHI8R0Nh
bmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRs
ZVNvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
SGFuZGxlU291cC5jcHAKaW5kZXggZWUxODM4Mi4uYjcwZmMyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291
cC5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFs
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29k
aW5nLmgiCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgpAQCAtNTYsNiAr
NTUsMTAgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAor
I2RlZmluZSBMSUJTT1VQX1VTRV9VTlNUQUJMRV9SRVFVRVNUX0FQSQorI2luY2x1ZGUgPGxpYnNv
dXAvc291cC1yZXF1ZXN0ZXIuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtcmVxdWVzdC1odHRw
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2RlZmluZSBSRUFEX0JVRkZFUl9TSVpFIDgx
OTIKQEAgLTE0NSw2ICsxNDgsNDIgQEAgUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgp
CiAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKHRoaXMsIHRydWUpOwogfQogCisvLyBW
YWx1ZXMgdGFrZW4gZnJvbSBodHRwOi8vc3RldmVzb3VkZXJzLmNvbS91YS9pbmRleC5waHAgZm9s
bG93aW5nCisvLyB0aGUgcnVsZSAiRG8gV2hhdCBFdmVyeSBPdGhlciBNb2Rlcm4gQnJvd3NlciBJ
cyBEb2luZyIuIFRoZXkgc2VlbQorLy8gdG8gc2lnbmlmaWNhbnRseSBpbXByb3ZlIHBhZ2UgbG9h
ZGluZyB0aW1lIGNvbXBhcmVkIHRvIHNvdXAncworLy8gZGVmYXVsdCB2YWx1ZXMuCitzdGF0aWMg
Y29uc3QgaW50IG1heENvbm5lY3Rpb25zID0gNjA7CitzdGF0aWMgY29uc3QgaW50IG1heENvbm5l
Y3Rpb25zUGVySG9zdCA9IDY7CisKK3N0YXRpYyB2b2lkIGVuc3VyZVNlc3Npb25Jc0luaXRpYWxp
emVkKFNvdXBTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGlmIChnX29iamVjdF9nZXRfZGF0YShH
X09CSkVDVChzZXNzaW9uKSwgIndlYmtpdC1pbml0IikpCisgICAgICAgIHJldHVybjsKKworICAg
IFNvdXBDb29raWVKYXIqIGphciA9IFNPVVBfQ09PS0lFX0pBUihzb3VwX3Nlc3Npb25fZ2V0X2Zl
YXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0NPT0tJRV9KQVIpKTsKKyAgICBpZiAoIWphcikKKyAg
ICAgICAgc291cF9zZXNzaW9uX2FkZF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfU0VTU0lPTl9GRUFU
VVJFKGRlZmF1bHRDb29raWVKYXIoKSkpOworICAgIGVsc2UKKyAgICAgICAgc2V0RGVmYXVsdENv
b2tpZUphcihqYXIpOworCisgICAgaWYgKCFzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lv
biwgU09VUF9UWVBFX0xPR0dFUikgJiYgTG9nTmV0d29yay5zdGF0ZSA9PSBXVEZMb2dDaGFubmVs
T24pIHsKKyAgICAgICAgU291cExvZ2dlciogbG9nZ2VyID0gc291cF9sb2dnZXJfbmV3KHN0YXRp
Y19jYXN0PFNvdXBMb2dnZXJMb2dMZXZlbD4oU09VUF9MT0dHRVJfTE9HX0JPRFkpLCAtMSk7CisJ
c291cF9zZXNzaW9uX2FkZF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfU0VTU0lPTl9GRUFUVVJFKGxv
Z2dlcikpOworICAgICAgICBnX29iamVjdF91bnJlZihsb2dnZXIpOworICAgIH0KKworICAgIFNv
dXBSZXF1ZXN0ZXIqIHJlcXVlc3RlciA9IHNvdXBfcmVxdWVzdGVyX25ldygpOworICAgIHNvdXBf
c2Vzc2lvbl9hZGRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1NFU1NJT05fRkVBVFVSRShyZXF1ZXN0
ZXIpKTsKKyAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0ZXIpOworCisgICAgZ19vYmplY3Rfc2V0
KHNlc3Npb24sCisgICAgICAgICAgICAgICAgIFNPVVBfU0VTU0lPTl9NQVhfQ09OTlMsIG1heENv
bm5lY3Rpb25zLAorICAgICAgICAgICAgICAgICBTT1VQX1NFU1NJT05fTUFYX0NPTk5TX1BFUl9I
T1NULCBtYXhDb25uZWN0aW9uc1Blckhvc3QsCisgICAgICAgICAgICAgICAgIE5VTEwpOworCisg
ICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJ3ZWJraXQtaW5pdCIsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4ZGVhZGJlZWYpKTsKK30KKwogdm9pZCBSZXNvdXJjZUhh
bmRsZTo6cHJlcGFyZUZvclVSTChjb25zdCBLVVJMICZ1cmwpCiB7CiAgICAgR093blB0cjxTb3Vw
VVJJPiBzb3VwVVJJKHNvdXBfdXJpX25ldyh1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSkp
OwpAQCAtMzYwLDE1ICszOTksMTcgQEAgc3RhdGljIGdib29sZWFuIHBhcnNlRGF0YVVybChncG9p
bnRlciBjYWxsYmFja0RhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFNvdXBTZXNz
aW9uKiBzZXNzaW9uID0gaGFuZGxlLT5kZWZhdWx0U2Vzc2lvbigpOworICAgIGVuc3VyZVNlc3Np
b25Jc0luaXRpYWxpemVkKHNlc3Npb24pOworICAgIFNvdXBSZXF1ZXN0ZXIqIHJlcXVlc3RlciA9
IFNPVVBfUkVRVUVTVEVSKHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZ
UEVfUkVRVUVTVEVSKSk7CiAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgIGQtPm1fc291
cFJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9y
ZXF1ZXN0ZXIuZ2V0KCksIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgc2Vzc2lvbiwgJmVycm9yLm91dFB0cigpKSk7CisgICAgZC0+bV9zb3VwUmVx
dWVzdCA9IGFkb3B0R1JlZihzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0KHJlcXVlc3RlciwgaGFuZGxl
LT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0
UHRyKCkpKTsKICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgZC0+bV9zb3VwUmVxdWVzdCA9IDA7
CiAgICAgICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUsIDApOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZC0+bV9pbnB1dFN0cmVhbSA9IGFkb3B0R1JlZih3
ZWJraXRfc291cF9yZXF1ZXN0X3NlbmQoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgMCwgJmVycm9y
Lm91dFB0cigpKSk7CisgICAgZC0+bV9pbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihzb3VwX3JlcXVl
c3Rfc2VuZChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpKTsKICAg
ICBpZiAoZXJyb3IpIHsKICAgICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7CiAgICAgICAgIGNs
aWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUsIDApOwpAQCAtNDA2LDM4ICs0NDcsNiBAQCBz
dGF0aWMgU291cFNlc3Npb24qIGNyZWF0ZVNvdXBTZXNzaW9uKCkKICAgICByZXR1cm4gc291cF9z
ZXNzaW9uX2FzeW5jX25ldygpOwogfQogCi0vLyBWYWx1ZXMgdGFrZW4gZnJvbSBodHRwOi8vc3Rl
dmVzb3VkZXJzLmNvbS91YS9pbmRleC5waHAgZm9sbG93aW5nCi0vLyB0aGUgcnVsZSAiRG8gV2hh
dCBFdmVyeSBPdGhlciBNb2Rlcm4gQnJvd3NlciBJcyBEb2luZyIuIFRoZXkgc2VlbQotLy8gdG8g
c2lnbmlmaWNhbnRseSBpbXByb3ZlIHBhZ2UgbG9hZGluZyB0aW1lIGNvbXBhcmVkIHRvIHNvdXAn
cwotLy8gZGVmYXVsdCB2YWx1ZXMuCi0jZGVmaW5lIE1BWF9DT05ORUNUSU9OUyAgICAgICAgICA2
MAotI2RlZmluZSBNQVhfQ09OTkVDVElPTlNfUEVSX0hPU1QgNgotCi1zdGF0aWMgdm9pZCBlbnN1
cmVTZXNzaW9uSXNJbml0aWFsaXplZChTb3VwU2Vzc2lvbiogc2Vzc2lvbikKLXsKLSAgICBpZiAo
Z19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJ3ZWJraXQtaW5pdCIpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSByZWludGVycHJldF9jYXN0
PFNvdXBDb29raWVKYXIqPihzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9U
WVBFX0NPT0tJRV9KQVIpKTsKLSAgICBpZiAoIWphcikKLSAgICAgICAgc291cF9zZXNzaW9uX2Fk
ZF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfU0VTU0lPTl9GRUFUVVJFKGRlZmF1bHRDb29raWVKYXIo
KSkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0RGVmYXVsdENvb2tpZUphcihqYXIpOwotCi0gICAg
aWYgKCFzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0xPR0dFUikg
JiYgTG9nTmV0d29yay5zdGF0ZSA9PSBXVEZMb2dDaGFubmVsT24pIHsKLSAgICAgICAgU291cExv
Z2dlciogbG9nZ2VyID0gc291cF9sb2dnZXJfbmV3KHN0YXRpY19jYXN0PFNvdXBMb2dnZXJMb2dM
ZXZlbD4oU09VUF9MT0dHRVJfTE9HX0JPRFkpLCAtMSk7Ci0gICAgICAgIHNvdXBfbG9nZ2VyX2F0
dGFjaChsb2dnZXIsIHNlc3Npb24pOwotICAgICAgICBnX29iamVjdF91bnJlZihsb2dnZXIpOwot
ICAgIH0KLQotICAgIGdfb2JqZWN0X3NldChzZXNzaW9uLAotICAgICAgICAgICAgICAgICBTT1VQ
X1NFU1NJT05fTUFYX0NPTk5TLCBNQVhfQ09OTkVDVElPTlMsCi0gICAgICAgICAgICAgICAgIFNP
VVBfU0VTU0lPTl9NQVhfQ09OTlNfUEVSX0hPU1QsIE1BWF9DT05ORUNUSU9OU19QRVJfSE9TVCwK
LSAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVD
VChzZXNzaW9uKSwgIndlYmtpdC1pbml0IiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHhkZWFk
YmVlZikpOwotfQotCiBzdGF0aWMgdm9pZCBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcgPSBmYWxzZSkKIHsKICAgICBS
ZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwpAQCAtNDkx
LDE0ICs1MDAsMTQgQEAgc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiBz
b3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciB1c2UKICAgICB9CiAKICAgICBHT3du
UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgR0lucHV0U3RyZWFtKiBpbiA9IHdlYmtpdF9zb3VwX3Jl
cXVlc3Rfc2VuZF9maW5pc2goZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgcmVzLCAmZXJyb3Iub3V0
UHRyKCkpOworICAgIEdJbnB1dFN0cmVhbSogaW4gPSBzb3VwX3JlcXVlc3Rfc2VuZF9maW5pc2go
ZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwogCiAgICAgaWYg
KGVycm9yKSB7CiAgICAgICAgIFNvdXBNZXNzYWdlKiBzb3VwTXNnID0gZC0+bV9zb3VwTWVzc2Fn
ZS5nZXQoKTsKICAgICAgICAgZ2Jvb2xlYW4gaXNUcmFuc3BvcnRFcnJvciA9IGQtPm1fc291cE1l
c3NhZ2UgJiYgU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JUX0VSUk9SKHNvdXBNc2ctPnN0YXR1c19j
b2RlKTsKIAogICAgICAgICBpZiAoaXNUcmFuc3BvcnRFcnJvciB8fCAoZXJyb3ItPmRvbWFpbiA9
PSBHX0lPX0VSUk9SKSkgewotICAgICAgICAgICAgU291cFVSSSogdXJpID0gd2Via2l0X3NvdXBf
cmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgU291
cFVSSSogdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7
CiAgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHVyaVN0cihzb3VwX3VyaV90b19zdHJpbmcodXJp
LCBmYWxzZSkpOwogICAgICAgICAgICAgZ2ludCBlcnJvckNvZGUgPSBpc1RyYW5zcG9ydEVycm9y
ID8gc3RhdGljX2Nhc3Q8Z2ludD4oc291cE1zZy0+c3RhdHVzX2NvZGUpIDogZXJyb3ItPmNvZGU7
CiAgICAgICAgICAgICBjb25zdCBnY2hhciogZXJyb3JNc2cgPSBpc1RyYW5zcG9ydEVycm9yID8g
c291cE1zZy0+cmVhc29uX3BocmFzZSA6IGVycm9yLT5tZXNzYWdlOwpAQCAtNTUxLDggKzU2MCw4
IEBAIHN0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5
bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIgdXNlCiAgICAgLy8gKGUuZy4gZmlsZSBhbmQgR0lPIGJh
c2VkIHByb3RvY29sKS4KICAgICBpZiAoIWhhbmRsZS0+c2hvdWxkQ29udGVudFNuaWZmKCkgJiYg
ZC0+bV9yZXNwb25zZS5pc051bGwoKSkgewogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTCho
YW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRN
aW1lVHlwZSh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUoZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSkpOwotICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExl
bmd0aCh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aChkLT5tX3NvdXBSZXF1
ZXN0LmdldCgpKSk7CisgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoc291cF9yZXF1
ZXN0X2dldF9jb250ZW50X3R5cGUoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICBk
LT5tX3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzb3VwX3JlcXVlc3RfZ2V0X2Nv
bnRlbnRfbGVuZ3RoKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKICAgICAgICAgY2xpZW50LT5k
aWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKIAogICAgICAg
ICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKQEAgLTU3NCw2ICs1ODMsNyBAQCBzdGF0aWMgYm9vbCBz
dGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKIAogICAgIFNvdXBTZXNzaW9uKiBzZXNz
aW9uID0gaGFuZGxlLT5kZWZhdWx0U2Vzc2lvbigpOwogICAgIGVuc3VyZVNlc3Npb25Jc0luaXRp
YWxpemVkKHNlc3Npb24pOworICAgIFNvdXBSZXF1ZXN0ZXIqIHJlcXVlc3RlciA9IFNPVVBfUkVR
VUVTVEVSKHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBTT1VQX1RZUEVfUkVRVUVT
VEVSKSk7CiAKICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRl
cm5hbCgpOwogCkBAIC01ODMsNyArNTkzLDcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgcmVxdWVzdC5zZXRVUkwodXJsKTsKIAogICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKLSAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtp
dF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0KGQtPm1fcmVxdWVzdGVyLmdldCgpLCB1cmwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgc2Vzc2lvbiwgJmVycm9yLm91dFB0cigpKSk7CisgICAgZC0+bV9z
b3VwUmVxdWVzdCA9IGFkb3B0R1JlZihzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0KHJlcXVlc3Rlciwg
dXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSkpOwogICAgIGlmIChl
cnJvcikgewogICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gMDsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNTkxLDcgKzYwMSw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhh
bmRsZSogaGFuZGxlKQogCiAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9zb3Vw
UmVxdWVzdC5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOwogCi0gICAgZC0+bV9z
b3VwTWVzc2FnZSA9IGFkb3B0R1JlZih3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3Nh
Z2UoV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKSk7Cisg
ICAgZC0+bV9zb3VwTWVzc2FnZSA9IGFkb3B0R1JlZihzb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVz
c2FnZShTT1VQX1JFUVVFU1RfSFRUUChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSkpOwogICAgIGlm
ICghZC0+bV9zb3VwTWVzc2FnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC02NzUsNyAr
Njg1LDcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAg
ICAgLy8gU2VuZCB0aGUgcmVxdWVzdCBvbmx5IGlmIGl0J3Mgbm90IGJlZW4gZXhwbGljaXRlbHkg
ZGVmZXJyZWQuCiAgICAgaWYgKCFkLT5tX2RlZmVyc0xvYWRpbmcpIHsKICAgICAgICAgZC0+bV9j
YW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKLSAgICAgICAgd2Vi
a2l0X3NvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIGQtPm1f
Y2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIDApOworICAgICAgICBzb3Vw
X3JlcXVlc3Rfc2VuZF9hc3luYyhkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBkLT5tX2NhbmNlbGxh
YmxlLmdldCgpLCBzZW5kUmVxdWVzdENhbGxiYWNrLCAwKTsKICAgICB9CiAKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTc1OCw3ICs3NjgsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNl
dERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnNMb2FkaW5nKQogCiAgICAgaWYgKCFkZWZlcnNMb2Fk
aW5nICYmICFkLT5tX2NhbmNlbGxhYmxlICYmIGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpIHsKICAg
ICAgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsK
LSAgICAgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fc291cFJlcXVlc3Qu
Z2V0KCksIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIDApOwor
ICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBk
LT5tX2NhbmNlbGxhYmxlLmdldCgpLCBzZW5kUmVxdWVzdENhbGxiYWNrLCAwKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtODMwLDcgKzg0MCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRDYWxs
YmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogYXN5bmNSZXN1bHQsIGdwb2ludGVy
IGRhCiAKICAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2go
ZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgYXN5bmNSZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CiAg
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIFNvdXBVUkkqIHVyaSA9IHdlYmtpdF9zb3VwX3JlcXVl
c3RfZ2V0X3VyaShkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgU291cFVSSSogdXJp
ID0gc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7CiAgICAgICAg
IEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIGZhbHNlKSk7CiAg
ICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lP
X0VSUk9SKSwgZXJyb3ItPmNvZGUsIHVyaVN0ci5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkg
OiBTdHJpbmcoKSk7CkBAIC04NzksNiArODg5LDggQEAgc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5kZWZhdWx0U2Vzc2lvbigpOworICAg
IGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKHNlc3Npb24pOworICAgIFNvdXBSZXF1ZXN0ZXIq
IHJlcXVlc3RlciA9IFNPVVBfUkVRVUVTVEVSKHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNz
aW9uLCBTT1VQX1RZUEVfUkVRVUVTVEVSKSk7CiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCog
ZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKIAogICAgIC8vIEdJTyBkb2Vzbid0IGtub3cgaG93
IHRvIGhhbmRsZSByZWZzIGFuZCBxdWVyaWVzLCBzbyByZW1vdmUgdGhlbQpAQCAtODkwLDcgKzkw
Miw3IEBAIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwg
dXJsKQogICAgIENTdHJpbmcgdXJsU3RyID0gdXJsLnN0cmluZygpLnV0ZjgoKTsKIAogICAgIEdP
d25QdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHdl
YmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0KGQtPm1fcmVxdWVzdGVyLmdldCgpLCB1cmxTdHIu
ZGF0YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0
ID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QocmVxdWVzdGVyLCB1cmxTdHIuZGF0
YSgpLCAmZXJyb3Iub3V0UHRyKCkpKTsKICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgZC0+bV9z
b3VwUmVxdWVzdCA9IDA7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTkwMiw3ICs5MTQsNyBA
QCBzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBLVVJMIHVybCkK
ICAgICBoYW5kbGUtPnJlZigpOwogCiAgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihn
X2NhbmNlbGxhYmxlX25ldygpKTsKLSAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMo
ZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVl
c3RDYWxsYmFjaywgMCk7CisgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVlc3RDYWxsYmFjaywg
MCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9y
eS1pbnB1dC1zdHJlYW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE0ODYzYi4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAs
MCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsg
Yy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBI
YXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVf
Q09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAic291cC1k
aXJlY3RvcnktaW5wdXQtc3RyZWFtLmgiCi0KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNp
bmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIElOSVRfU1RS
SU5HICI8aHRtbD48aGVhZD48dGl0bGU+T01HITwvdGl0bGU+PC9oZWFkPjxib2R5Pjx0YWJsZT4i
Ci0jZGVmaW5lIEVYSVRfU1RSSU5HICI8L3RhYmxlPjwvaHRtbD4iCi0KLUdfREVGSU5FX1RZUEUg
KFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSwgd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lu
cHV0X3N0cmVhbSwgR19UWVBFX0lOUFVUX1NUUkVBTSkKLQotc3RhdGljIFNvdXBCdWZmZXIgKgot
d2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9wYXJzZV9pbmZvIChXZWJLaXRTb3Vw
RGlyZWN0b3J5SW5wdXRTdHJlYW0gKiBzdHJlYW0sCi0JCQkJCSAgICAgICBHRmlsZUluZm8gKiBp
bmZvKQotewotCVNvdXBCdWZmZXIgKmJ1ZmZlcjsKLQlHU3RyaW5nICpzdHJpbmc7Ci0JY29uc3Qg
Y2hhciAqczsKLQljaGFyICplc2NhcGVkLCAqcGF0aCwgKnhtbF9zdHJpbmc7Ci0KLQlpZiAoIWdf
ZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzID0gZ19maWxl
X2luZm9fZ2V0X2Rpc3BsYXlfbmFtZSAoaW5mbyk7Ci0JaWYgKCFzKSB7Ci0JCXMgPSBnX2ZpbGVf
aW5mb19nZXRfbmFtZSAoaW5mbyk7Ci0JCS8qIEZJWE1FOiBjb252ZXJ0IHNvbWVob3c/ICovCi0J
CWlmICghZ191dGY4X3ZhbGlkYXRlIChzLCAtMSwgTlVMTCkpCi0JCQlyZXR1cm4gTlVMTDsKLQl9
Ci0Jc3RyaW5nID0gZ19zdHJpbmdfbmV3ICgiPHRyPiIpOwotCi0JeG1sX3N0cmluZyA9IGdfbWFy
a3VwX2VzY2FwZV90ZXh0IChzLCAtMSk7Ci0JZXNjYXBlZCA9IGdfdXJpX2VzY2FwZV9zdHJpbmcg
KGdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKSwgTlVMTCwgRkFMU0UpOwotCXBhdGggPSBnX3N0
cmNvbmNhdCAoc3RyZWFtLT51cmksICIvIiwgZXNjYXBlZCwgTlVMTCk7Ci0JZ19mcmVlIChlc2Nh
cGVkKTsKLQlnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHJpbmcsICI8dGQ+PGEgaHJlZj1cIiVz
XCI+JXM8L2E+PC90ZD4iLCBwYXRoLCB4bWxfc3RyaW5nKTsKLQlnX2ZyZWUgKHBhdGgpOwotCWdf
ZnJlZSAoeG1sX3N0cmluZyk7Ci0JZ19zdHJpbmdfYXBwZW5kIChzdHJpbmcsICI8L3RyPiIpOwot
Ci0JYnVmZmVyID0gc291cF9idWZmZXJfbmV3IChTT1VQX01FTU9SWV9UQUtFLCBzdHJpbmctPnN0
ciwgc3RyaW5nLT5sZW4pOwotCWdfc3RyaW5nX2ZyZWUgKHN0cmluZywgRkFMU0UpOwotCi0JcmV0
dXJuIGJ1ZmZlcjsKLX0KLQotc3RhdGljIFNvdXBCdWZmZXIgKgotd2Via2l0X3NvdXBfZGlyZWN0
b3J5X2lucHV0X3N0cmVhbV9yZWFkX25leHRfZmlsZSAoV2ViS2l0U291cERpcmVjdG9yeUlucHV0
U3RyZWFtICAqc3RyZWFtLAotCQkJCQkJICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICAqY2Fu
Y2VsbGFibGUsCi0JCQkJCQkgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgKiplcnJvcikKLXsK
LQlHRmlsZUluZm8gKmluZm87Ci0JU291cEJ1ZmZlciAqYnVmZmVyOwotCUdFcnJvciAqZXJyID0g
TlVMTDsKLQotCWRvIHsKLQkJaW5mbyA9IGdfZmlsZV9lbnVtZXJhdG9yX25leHRfZmlsZSAoc3Ry
ZWFtLT5lbnVtZXJhdG9yLCBjYW5jZWxsYWJsZSwgJmVycik7Ci0JCWlmIChpbmZvID09IE5VTEwp
IHsKLQkJCWlmIChlcnIpIHsKLQkJCQlnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIGVycik7Ci0J
CQkJcmV0dXJuIE5VTEw7Ci0JCQl9IGVsc2UgaWYgKCFzdHJlYW0tPmRvbmUpIHsKLQkJCQlzdHJl
YW0tPmRvbmUgPSBUUlVFOwotCQkJCXJldHVybiBzb3VwX2J1ZmZlcl9uZXcgKFNPVVBfTUVNT1JZ
X1NUQVRJQywKLQkJCQkJCQlFWElUX1NUUklORywKLQkJCQkJCQlzaXplb2YgKEVYSVRfU1RSSU5H
KSk7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQl9Ci0KLQkJYnVmZmVy
ID0gd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9wYXJzZV9pbmZvIChzdHJlYW0s
IGluZm8pOwotCX0gd2hpbGUgKGJ1ZmZlciA9PSBOVUxMKTsKLQotCXJldHVybiBidWZmZXI7Ci19
Ci0KLXN0YXRpYyBnc3NpemUKLXdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVh
ZCAoR0lucHV0U3RyZWFtICAqaW5wdXQsCi0JCQkJCSB2b2lkICAgICAgICAgICpidWZmZXIsCi0J
CQkJCSBnc2l6ZSBjb3VudCwKLQkJCQkJIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAotCQkJ
CQkgR0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0JV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3Ry
ZWFtICpzdHJlYW0gPSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNIChpbnB1dCk7
Ci0JZ3NpemUgdG90YWwsIHNpemU7Ci0KLQlmb3IgKHRvdGFsID0gMDsgdG90YWwgPCBjb3VudDsg
dG90YWwgKz0gc2l6ZSkgewotCQlpZiAoc3RyZWFtLT5idWZmZXIgPT0gTlVMTCkgewotCQkJc3Ry
ZWFtLT5idWZmZXIgPSB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4
dF9maWxlIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcik7Ci0JCQlpZiAoc3RyZWFtLT5idWZm
ZXIgPT0gTlVMTCkgewotCQkJCS8qIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Qgb3Igc2hvdWxkIHdl
IGZvcndhcmQgdGhlIGVycm9yPyAqLwotCQkJCWlmICh0b3RhbCkKLQkJCQkJZ19jbGVhcl9lcnJv
ciAoZXJyb3IpOwotCQkJCXJldHVybiB0b3RhbDsKLQkJCX0KLQkJfQotCi0JCXNpemUgPSBNSU4g
KHN0cmVhbS0+YnVmZmVyLT5sZW5ndGgsIGNvdW50IC0gdG90YWwpOwotCQltZW1jcHkgKChjaGFy
ICopYnVmZmVyICsgdG90YWwsIHN0cmVhbS0+YnVmZmVyLT5kYXRhLCBzaXplKTsKLQkJaWYgKHNp
emUgPT0gc3RyZWFtLT5idWZmZXItPmxlbmd0aCkgewotCQkJc291cF9idWZmZXJfZnJlZSAoc3Ry
ZWFtLT5idWZmZXIpOwotCQkJc3RyZWFtLT5idWZmZXIgPSBOVUxMOwotCQl9IGVsc2UgewotCQkJ
U291cEJ1ZmZlciAqc3ViID0gc291cF9idWZmZXJfbmV3X3N1YmJ1ZmZlciAoc3RyZWFtLT5idWZm
ZXIsCi0JCQkJCQkJCSAgICAgc2l6ZSwKLQkJCQkJCQkJICAgICBzdHJlYW0tPmJ1ZmZlci0+bGVu
Z3RoIC0gc2l6ZSk7Ci0JCQlzb3VwX2J1ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7Ci0JCQlz
dHJlYW0tPmJ1ZmZlciA9IHN1YjsKLQkJfQotCX0KLQotCXJldHVybiB0b3RhbDsKLX0KLQotc3Rh
dGljIGdib29sZWFuCi13ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlIChH
SW5wdXRTdHJlYW0gICppbnB1dCwKLQkJCQkJICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwK
LQkJCQkJICBHRXJyb3IgICAgICAgKiplcnJvcikKLXsKLQlXZWJLaXRTb3VwRGlyZWN0b3J5SW5w
dXRTdHJlYW0gKnN0cmVhbSA9IFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKGlu
cHV0KTsKLQlnYm9vbGVhbiByZXN1bHQ7Ci0KLQlpZiAoc3RyZWFtLT5idWZmZXIpIHsKLQkJc291
cF9idWZmZXJfZnJlZSAoc3RyZWFtLT5idWZmZXIpOwotCQlzdHJlYW0tPmJ1ZmZlciA9IE5VTEw7
Ci0JfQotCi0JcmVzdWx0ID0gZ19maWxlX2VudW1lcmF0b3JfY2xvc2UgKHN0cmVhbS0+ZW51bWVy
YXRvciwKLQkJCQkJICBjYW5jZWxsYWJsZSwKLQkJCQkJICBlcnJvcik7Ci0JZ19vYmplY3RfdW5y
ZWYgKHN0cmVhbS0+ZW51bWVyYXRvcik7Ci0Jc3RyZWFtLT5lbnVtZXJhdG9yID0gTlVMTDsKLQot
CWdfZnJlZSAoc3RyZWFtLT51cmkpOwotCXN0cmVhbS0+dXJpID0gTlVMTDsKLQotCXJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3Ry
ZWFtX2NsYXNzX2luaXQgKFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzICpzdHJl
YW1fY2xhc3MpCi17Ci0JR0lucHV0U3RyZWFtQ2xhc3MgKmlucHV0c3RyZWFtX2NsYXNzID0gR19J
TlBVVF9TVFJFQU1fQ0xBU1MgKHN0cmVhbV9jbGFzcyk7Ci0KLQlpbnB1dHN0cmVhbV9jbGFzcy0+
cmVhZF9mbiA9IHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZDsKLQlpbnB1
dHN0cmVhbV9jbGFzcy0+Y2xvc2VfZm4gPSB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3Ry
ZWFtX2Nsb3NlOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0
X3N0cmVhbV9pbml0IChXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSkKLXsK
LQlzdHJlYW0tPmJ1ZmZlciA9IHNvdXBfYnVmZmVyX25ldyAoU09VUF9NRU1PUllfU1RBVElDLAot
CQkJCQkgIElOSVRfU1RSSU5HLAotCQkJCQkgIHNpemVvZiAoSU5JVF9TVFJJTkcpKTsKLX0KLQot
R0lucHV0U3RyZWFtICoKLXdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fbmV3IChH
RmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3IsCi0JCQkJCVNvdXBVUkkgICAgICAgICAqdXJpKQot
ewotCUdJbnB1dFN0cmVhbSAqc3RyZWFtOwotCi0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNf
RklMRV9FTlVNRVJBVE9SIChlbnVtZXJhdG9yKSwgTlVMTCk7Ci0JZ19yZXR1cm5fdmFsX2lmX2Zh
aWwgKHVyaSAhPSBOVUxMLCBOVUxMKTsKLQotCXN0cmVhbSA9IGdfb2JqZWN0X25ldyAoV0VCS0lU
X1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBOVUxMKTsKLQotCVdFQktJVF9TT1VQ
X0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKHN0cmVhbSktPmVudW1lcmF0b3IgPSBnX29iamVjdF9y
ZWYgKGVudW1lcmF0b3IpOwotCVdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKHN0
cmVhbSktPnVyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyAodXJpLCBGQUxTRSk7Ci0KLQlyZXR1cm4g
c3RyZWFtOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFt
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNWIwYmUuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5
LWlucHV0LXN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyogLSotIE1v
ZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6
IDggLSotICovCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXRUJLSVRfU09VUF9ESVJFQ1RP
UllfSU5QVVRfU1RSRUFNX0gKLSNkZWZpbmUgV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NU
UkVBTV9IIDEKLQotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAt
dHlwZXMuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtbWVzc2FnZS1ib2R5Lmg+Ci0KLUdfQkVH
SU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJF
QU0gICAgICAgICAgICAod2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9nZXRfdHlw
ZSAoKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTShvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lUX1RZUEVf
U09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJl
YW0pKQotI2RlZmluZSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NP
VVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFt
Q2xhc3MpKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQ
RV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0pKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0pKQotI2Rl
ZmluZSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNU
T1JZX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MpKQot
Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtIFdlYktpdFNv
dXBEaXJlY3RvcnlJbnB1dFN0cmVhbTsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwRGlyZWN0
b3J5SW5wdXRTdHJlYW1DbGFzcyBXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzczsK
LQotc3RydWN0IF9XZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gewotCUdJbnB1dFN0cmVh
bSBwYXJlbnQ7Ci0KLQlHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3I7Ci0JY2hhciAqdXJpOwot
CVNvdXBCdWZmZXIgKmJ1ZmZlcjsKLQlnYm9vbGVhbiBkb25lOwotfTsKLQotc3RydWN0IF9XZWJL
aXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcyB7Ci0JR0lucHV0U3RyZWFtQ2xhc3MgcGFy
ZW50X2NsYXNzOwotfTsKLQotR1R5cGUgICAgICAgICAgd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lu
cHV0X3N0cmVhbV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdJbnB1dFN0cmVhbSAqd2Via2l0X3NvdXBf
ZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcgKEdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvciwK
LQkJCQkJCSAgICAgIFNvdXBVUkkgICAgICAgICAqdXJpKTsKLQotCi1HX0VORF9ERUNMUwotCi0j
ZW5kaWYgLyogV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9IICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRw
LWlucHV0LXN0cmVhbS5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmE1ZDk5NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jCisrKyAvZGV2L251bGwKQEAgLTEs
OTIyICswLDAgQEAKLS8qIHNvdXAtaW5wdXQtc3RyZWFtLmMsIGJhc2VkIG9uIGdzb2NrZXRpbnB1
dHN0cmVhbS5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgUmVkIEhhdCwgSW5jLgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bAotICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSwgU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgPGNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxn
bGliLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotCi0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
Ci0KLSNpbmNsdWRlICJzb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgiCi0KLXN0YXRpYyB2b2lkIHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQgKEdTZWVrYWJs
ZUlmYWNlICpzZWVrYWJsZV9pZmFjZSk7Ci0KLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChXZWJL
aXRTb3VwSFRUUElucHV0U3RyZWFtLCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbSwgR19U
WVBFX0lOUFVUX1NUUkVBTSwKLQkJCSBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdfVFlQRV9TRUVL
QUJMRSwKLQkJCQkJCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNl
X2luaXQpKQotCi10eXBlZGVmIHZvaWQgKCpXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJh
Y2spKEdJbnB1dFN0cmVhbSAqKTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCVNvdXBTZXNzaW9uICpz
ZXNzaW9uOwotCUdNYWluQ29udGV4dCAqYXN5bmNfY29udGV4dDsKLQlTb3VwTWVzc2FnZSAqbXNn
OwotCWdib29sZWFuIGdvdF9oZWFkZXJzLCBmaW5pc2hlZDsKLQlnb2Zmc2V0IG9mZnNldDsKLQot
CUdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGU7Ci0JR1NvdXJjZSAqY2FuY2VsX3dhdGNoOwotCVdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBnb3RfaGVhZGVyc19jYjsKLQlXZWJLaXRT
b3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sgZ290X2NodW5rX2NiOwotCVdlYktpdFNvdXBIVFRQ
SW5wdXRTdHJlYW1DYWxsYmFjayBmaW5pc2hlZF9jYjsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3Ry
ZWFtQ2FsbGJhY2sgY2FuY2VsbGVkX2NiOwotCi0JZ3VjaGFyICpsZWZ0b3Zlcl9idWZmZXI7Ci0J
Z3NpemUgbGVmdG92ZXJfYnVmc2l6ZSwgbGVmdG92ZXJfb2Zmc2V0OwotCi0JZ3VjaGFyICpjYWxs
ZXJfYnVmZmVyOwotCWdzaXplIGNhbGxlcl9idWZzaXplLCBjYWxsZXJfbnJlYWQ7Ci0JR0FzeW5j
UmVhZHlDYWxsYmFjayBvdXRzdGFuZGluZ19jYWxsYmFjazsKLQlHU2ltcGxlQXN5bmNSZXN1bHQg
KnJlc3VsdDsKLX0gV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGU7Ci0jZGVmaW5lIFdF
QktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKG8pIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUgKChvKSwgV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSwg
V2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUpKQotCi0KLXN0YXRpYyBnc3NpemUgICB3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0gICAgICAgICAq
c3RyZWFtLAotCQkJCQkJICAgIHZvaWQgICAgICAgICAgICAgICAgICpidWZmZXIsCi0JCQkJCQkg
ICAgZ3NpemUgY291bnQsCi0JCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxh
YmxlLAotCQkJCQkJICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7Ci1zdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAg
ICAgICAgICpzdHJlYW0sCi0JCQkJCQkgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxs
YWJsZSwKLQkJCQkJCSAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKLXN0YXRpYyB2
b2lkICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jIChHSW5wdXRT
dHJlYW0gICAgICAgICAqc3RyZWFtLAotCQkJCQkJCSAgdm9pZCAgICAgICAgICAgICAgICAgKmJ1
ZmZlciwKLQkJCQkJCQkgIGdzaXplIGNvdW50LAotCQkJCQkJCSAgaW50IGlvX3ByaW9yaXR5LAot
CQkJCQkJCSAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkJCSAgR0Fz
eW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJCQkgIGdwb2ludGVyIGRhdGEpOwotc3Rh
dGljIGdzc2l6ZSAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoIChH
SW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAotCQkJCQkJCSAgIEdBc3luY1Jlc3VsdCAgICAg
ICAgICpyZXN1bHQsCi0JCQkJCQkJICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKLXN0
YXRpYyB2b2lkICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9hc3luYyAo
R0lucHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwKLQkJCQkJCQkgICBpbnQgaW9fcHJpb3JpdHks
Ci0JCQkJCQkJICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkJCSAg
IEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkJCQkJICAgZ3BvaW50ZXIgZGF0YSk7
Ci1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfZmlu
aXNoIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAotCQkJCQkJCSAgICBHQXN5bmNSZXN1
bHQgICAgICAgICAqcmVzdWx0LAotCQkJCQkJCSAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJy
b3IpOwotCi1zdGF0aWMgZ29mZnNldCAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdGVs
bCAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlKTsKLQotc3RhdGljIGdib29sZWFuIHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl9zZWVrIChHU2Vla2FibGUgICAgICAgICAg
ICAqc2Vla2FibGUpOwotc3RhdGljIGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlZWsgKEdTZWVrYWJsZSAgICAgICAgICAgICpzZWVrYWJsZSwKLQkJCQkJCSAgICBnb2Zm
c2V0IG9mZnNldCwKLQkJCQkJCSAgICBHU2Vla1R5cGUgdHlwZSwKLQkJCQkJCSAgICBHQ2FuY2Vs
bGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCQkgICAgR0Vycm9yICAgICAgICAgICAg
ICAqKmVycm9yKTsKLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX2Nhbl90cnVuY2F0ZSAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlKTsKLXN0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZSAoR1NlZWth
YmxlICAgICAgICAgICAgKnNlZWthYmxlLAotCQkJCQkJCWdvZmZzZXQgb2Zmc2V0LAotCQkJCQkJ
CUdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJCQlHRXJyb3IgICAgICAg
ICAgICAgICoqZXJyb3IpOwotCi1zdGF0aWMgdm9pZCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9nb3RfaGVhZGVycyAoU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKTsKLXN0
YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayAoU291cE1l
c3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIGdwb2ludGVyIHN0cmVhbSk7Ci1zdGF0aWMg
dm9pZCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hlZCAoU291cE1lc3NhZ2Ug
Km1zZywgZ3BvaW50ZXIgc3RyZWFtKTsKLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCi17Ci0JV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbSAqc3RyZWFtID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKG9i
amVjdCk7Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRf
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQotCWdfb2JqZWN0
X3VucmVmIChwcml2LT5zZXNzaW9uKTsKLQotCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZnVuYyAocHJpdi0+bXNnLCBHX0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9nb3RfaGVhZGVycyksIHN0cmVhbSk7Ci0JZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jIChwcml2LT5tc2csIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2dvdF9jaHVuayksIHN0cmVhbSk7Ci0JZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jIChwcml2LT5tc2csIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2ZpbmlzaGVkKSwgc3RyZWFtKTsKLQlnX29iamVjdF91bnJlZiAocHJpdi0+bXNnKTsK
LQlnX2ZyZWUgKHByaXYtPmxlZnRvdmVyX2J1ZmZlcik7Ci0KLQlpZiAoR19PQkpFQ1RfQ0xBU1Mg
KHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKQot
CQkoKkdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZSkob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1D
bGFzcyAqa2xhc3MpCi17Ci0JR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MgKGtsYXNzKTsKLQlHSW5wdXRTdHJlYW1DbGFzcyAqc3RyZWFtX2NsYXNzID0gR19JTlBV
VF9TVFJFQU1fQ0xBU1MgKGtsYXNzKTsKLQotCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xh
c3MsIHNpemVvZiAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUpKTsKLQotCWdvYmpl
Y3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluYWxp
emU7Ci0KLQlzdHJlYW1fY2xhc3MtPnJlYWRfZm4gPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9yZWFkOwotCXN0cmVhbV9jbGFzcy0+Y2xvc2VfZm4gPSB3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9jbG9zZTsKLQlzdHJlYW1fY2xhc3MtPnJlYWRfYXN5bmMgPSB3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jOwotCXN0cmVhbV9jbGFzcy0+cmVhZF9maW5p
c2ggPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaDsKLQlzdHJlYW1f
Y2xhc3MtPmNsb3NlX2FzeW5jID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2Vf
YXN5bmM7Ci0Jc3RyZWFtX2NsYXNzLT5jbG9zZV9maW5pc2ggPSB3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9jbG9zZV9maW5pc2g7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9zZWVrYWJsZV9pZmFjZV9pbml0IChHU2Vla2FibGVJZmFjZSAqc2Vl
a2FibGVfaWZhY2UpCi17Ci0Jc2Vla2FibGVfaWZhY2UtPnRlbGwgPSB3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV90ZWxsOwotCXNlZWthYmxlX2lmYWNlLT5jYW5fc2VlayA9IHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl9zZWVrOwotCXNlZWthYmxlX2lmYWNlLT5zZWVrID0g
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VlazsKLQlzZWVrYWJsZV9pZmFjZS0+Y2Fu
X3RydW5jYXRlID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlOwot
CXNlZWthYmxlX2lmYWNlLT50cnVuY2F0ZV9mbiA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3RydW5jYXRlOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1faW5pdCAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtKQotewotCTsKLX0K
LQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21lc3Nh
Z2UgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbSkKLXsKLQlXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0dFVF9QUklWQVRFIChzdHJlYW0pOwotCi0JcHJpdi0+Z290X2hlYWRlcnMgPSBwcml2LT5maW5p
c2hlZCA9IEZBTFNFOwotCi0JLyogQWRkIGFuIGV4dHJhIHJlZiBzaW5jZSBzb3VwX3Nlc3Npb25f
cXVldWVfbWVzc2FnZSBzdGVhbHMgb25lICovCi0JZ19vYmplY3RfcmVmIChwcml2LT5tc2cpOwot
CXNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2csIE5V
TEwsIE5VTEwpOwotfQotCi0vKioKLSAqIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25l
dzoKLSAqIEBzZXNzaW9uOiB0aGUgI1NvdXBTZXNzaW9uIHRvIHVzZQotICogQG1zZzogdGhlICNT
b3VwTWVzc2FnZSB3aG9zZSByZXNwb25zZSB3aWxsIGJlIHN0cmVhbWVkCi0gKgotICogUHJlcGFy
ZXMgdG8gc2VuZCBAbXNnIG92ZXIgQHNlc3Npb24sIGFuZCByZXR1cm5zIGEgI0dJbnB1dFN0cmVh
bQotICogdGhhdCBjYW4gYmUgdXNlZCB0byByZWFkIHRoZSByZXNwb25zZS4KLSAqCi0gKiBAbXNn
IG1heSBub3QgYmUgc2VudCB1bnRpbCB0aGUgZmlyc3QgcmVhZCBjYWxsOyBpZiB5b3UgbmVlZCB0
byBsb29rCi0gKiBhdCB0aGUgc3RhdHVzIGNvZGUgb3IgcmVzcG9uc2UgaGVhZGVycyBiZWZvcmUg
cmVhZGluZyB0aGUgYm9keSwgeW91Ci0gKiBjYW4gdXNlIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlbmQoKSBvciB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5j
KCkKLSAqIHRvIGZvcmNlIHRoZSBtZXNzYWdlIHRvIGJlIHNlbnQgYW5kIHRoZSByZXNwb25zZSBo
ZWFkZXJzIHJlYWQuCi0gKgotICogSWYgQG1zZyBnZXRzIGEgbm9uLTJ4eCByZXN1bHQsIHRoZSBm
aXJzdCByZWFkIChvciBzZW5kKSB3aWxsIHJldHVybgotICogYW4gZXJyb3Igd2l0aCB0eXBlICVX
RUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IVFRQX0VSUk9SLgotICoKLSAqIEludGVybmFs
bHksICNXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtIGlzIGltcGxlbWVudGVkIHVzaW5nIGFzeW5j
aHJvbm91cyBJL08sCi0gKiBzbyBpZiB5b3UgYXJlIHVzaW5nIHRoZSBzeW5jaHJvbm91cyBBUEkg
KGVnLAotICogZ19pbnB1dF9zdHJlYW1fcmVhZCgpKSwgeW91IHNob3VsZCBjcmVhdGUgYSBuZXcg
I0dNYWluQ29udGV4dCBhbmQKLSAqIHNldCBpdCBhcyB0aGUgJVNPVVBfU0VTU0lPTl9BU1lOQ19D
T05URVhUIHByb3BlcnR5IG9uIEBzZXNzaW9uLiAoSWYKLSAqIHlvdSBkb24ndCwgdGhlbiBzeW5j
aHJvbm91cyAjR0lucHV0U3RyZWFtIGNhbGxzIHdpbGwgY2F1c2UgdGhlIG1haW4KLSAqIGxvb3Ag
dG8gYmUgcnVuIHJlY3Vyc2l2ZWx5LikgVGhlIGFzeW5jICNHSW5wdXRTdHJlYW0gQVBJIHdvcmtz
IGZpbmUKLSAqIHdpdGggJVNPVVBfU0VTU0lPTl9BU1lOQ19DT05URVhUIGVpdGhlciBzZXQgb3Ig
dW5zZXQuCi0gKgotICogUmV0dXJuczogYSBuZXcgI0dJbnB1dFN0cmVhbS4KLSAqKi8KLVdlYktp
dFNvdXBIVFRQSW5wdXRTdHJlYW0gKgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3
IChTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgU291cE1lc3NhZ2UgKm1zZykKLXsKLQlXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtICpzdHJlYW07Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZh
dGUgKnByaXY7Ci0KLQlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChtc2cp
LCBOVUxMKTsKLQotCXN0cmVhbSA9IGdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTSwgTlVMTCk7Ci0JcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RS
RUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCi0JcHJpdi0+c2Vzc2lvbiA9IGdfb2JqZWN0X3Jl
ZiAoc2Vzc2lvbik7Ci0JcHJpdi0+YXN5bmNfY29udGV4dCA9IHNvdXBfc2Vzc2lvbl9nZXRfYXN5
bmNfY29udGV4dCAoc2Vzc2lvbik7Ci0JcHJpdi0+bXNnID0gZ19vYmplY3RfcmVmIChtc2cpOwot
Ci0JZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290X2hlYWRlcnMiLAotCQkJICBHX0NBTExCQUNL
ICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyksIHN0cmVhbSk7Ci0J
Z19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290X2NodW5rIiwKLQkJCSAgR19DQUxMQkFDSyAod2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rKSwgc3RyZWFtKTsKLQlnX3NpZ25h
bF9jb25uZWN0IChtc2csICJmaW5pc2hlZCIsCi0JCQkgIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkKSwgc3RyZWFtKTsKLQotCXdlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21lc3NhZ2UgKHN0cmVhbSk7Ci0JcmV0dXJuIHN0cmVhbTsK
LX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFk
ZXJzIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pCi17Ci0JV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVB
TV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQotCS8qIElmIHRoZSBzdGF0dXMgaXMgdW5zdWNjZXNz
ZnVsLCB3ZSBqdXN0IGlnbm9yZSB0aGUgc2lnbmFsIGFuZCBsZXQKLQkgKiBsaWJzb3VwIGtlZXAg
Z29pbmcgKGV2ZW50dWFsbHkgZWl0aGVyIGl0IHdpbGwgcmVxdWV1ZSB0aGUgcmVxdWVzdAotCSAq
IChhZnRlciBoYW5kbGluZyBhdXRoZW50aWNhdGlvbi9yZWRpcmVjdGlvbiksIG9yIGVsc2UgdGhl
Ci0JICogImZpbmlzaGVkIiBoYW5kbGVyIHdpbGwgcnVuKS4KLQkgKi8KLQlpZiAoIVNPVVBfU1RB
VFVTX0lTX1NVQ0NFU1NGVUwgKG1zZy0+c3RhdHVzX2NvZGUpKQotCQlyZXR1cm47Ci0KLQlwcml2
LT5nb3RfaGVhZGVycyA9IFRSVUU7Ci0JaWYgKCFwcml2LT5jYWxsZXJfYnVmZmVyKSB7Ci0JCS8q
IE5vdCByZWFkeSB0byByZWFkIHRoZSBib2R5IHlldCAqLwotCQlzb3VwX3Nlc3Npb25fcGF1c2Vf
bWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgbXNnKTsKLQl9Ci0KLQlpZiAocHJpdi0+Z290X2hlYWRl
cnNfY2IpCi0JCXByaXYtPmdvdF9oZWFkZXJzX2NiIChzdHJlYW0pOwotfQotCi1zdGF0aWMgdm9p
ZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rIChTb3VwTWVzc2FnZSAq
bXNnLCBTb3VwQnVmZmVyICpjaHVua19idWZmZXIsCi0JCQkJCSBncG9pbnRlciBzdHJlYW0pCi17
Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9I
VFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQljb25zdCBnY2hhciAqY2h1
bmsgPSBjaHVua19idWZmZXItPmRhdGE7Ci0JZ3NpemUgY2h1bmtfc2l6ZSA9IGNodW5rX2J1ZmZl
ci0+bGVuZ3RoOwotCi0JLyogV2Ugb25seSBwYXkgYXR0ZW50aW9uIHRvIHRoZSBjaHVuayBpZiBp
dCdzIHBhcnQgb2YgYSBzdWNjZXNzZnVsCi0JICogcmVzcG9uc2UuCi0JICovCi0JaWYgKCFTT1VQ
X1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkKLQkJcmV0dXJuOwotCi0J
LyogU2FuaXR5IGNoZWNrICovCi0JaWYgKHByaXYtPmNhbGxlcl9idWZzaXplID09IDAgfHwgcHJp
di0+bGVmdG92ZXJfYnVmc2l6ZSAhPSAwKQotCQlnX3dhcm5pbmcgKCJ3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9nb3RfY2h1bmsgY2FsbGVkIGFnYWluIGJlZm9yZSBwcmV2aW91cyBjaHVu
ayB3YXMgcHJvY2Vzc2VkIik7Ci0KLQkvKiBDb3B5IHdoYXQgd2UgY2FuIGludG8gcHJpdi0+Y2Fs
bGVyX2J1ZmZlciAqLwotCWlmIChwcml2LT5jYWxsZXJfYnVmc2l6ZSA+IHByaXYtPmNhbGxlcl9u
cmVhZCkgewotCQlnc2l6ZSBucmVhZCA9IE1JTiAoY2h1bmtfc2l6ZSwgcHJpdi0+Y2FsbGVyX2J1
ZnNpemUgLSBwcml2LT5jYWxsZXJfbnJlYWQpOwotCi0JCW1lbWNweSAocHJpdi0+Y2FsbGVyX2J1
ZmZlciArIHByaXYtPmNhbGxlcl9ucmVhZCwgY2h1bmssIG5yZWFkKTsKLQkJcHJpdi0+Y2FsbGVy
X25yZWFkICs9IG5yZWFkOwotCQlwcml2LT5vZmZzZXQgKz0gbnJlYWQ7Ci0JCWNodW5rICs9IG5y
ZWFkOwotCQljaHVua19zaXplIC09IG5yZWFkOwotCX0KLQotCWlmIChjaHVua19zaXplID4gMCkg
ewotCQkvKiBDb3B5IHRoZSByZXN0IGludG8gcHJpdi0+bGVmdG92ZXJfYnVmZmVyLiBJZgotCQkg
KiB0aGVyZSdzIGFscmVhZHkgc29tZSBkYXRhIHRoZXJlLCByZWFsbG9jIGFuZAotCQkgKiBhcHBl
bmQuIE90aGVyd2lzZSBqdXN0IGNvcHkuCi0JCSAqLwotCQlpZiAocHJpdi0+bGVmdG92ZXJfYnVm
c2l6ZSkgewotCQkJcHJpdi0+bGVmdG92ZXJfYnVmZmVyID0gZ19yZWFsbG9jIChwcml2LT5sZWZ0
b3Zlcl9idWZmZXIsCi0JCQkJCQkJICAgcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSArIGNodW5rX3Np
emUpOwotCQkJbWVtY3B5IChwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9i
dWZzaXplLAotCQkJCWNodW5rLCBjaHVua19zaXplKTsKLQkJCXByaXYtPmxlZnRvdmVyX2J1ZnNp
emUgKz0gY2h1bmtfc2l6ZTsKLQkJfSBlbHNlIHsKLQkJCXByaXYtPmxlZnRvdmVyX2J1ZnNpemUg
PSBjaHVua19zaXplOwotCQkJcHJpdi0+bGVmdG92ZXJfYnVmZmVyID0gZ19tZW1kdXAgKGNodW5r
LCBjaHVua19zaXplKTsKLQkJCXByaXYtPmxlZnRvdmVyX29mZnNldCA9IDA7Ci0JCX0KLQl9Ci0K
LQlzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgbXNnKTsKLQlpZiAo
cHJpdi0+Z290X2NodW5rX2NiKQotCQlwcml2LT5nb3RfY2h1bmtfY2IgKHN0cmVhbSk7Ci19Ci0K
LXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hlZCAoU291
cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKQotewotCVdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BS
SVZBVEUgKHN0cmVhbSk7Ci0KLQlwcml2LT5maW5pc2hlZCA9IFRSVUU7Ci0KLQlpZiAocHJpdi0+
ZmluaXNoZWRfY2IpCi0JCXByaXYtPmZpbmlzaGVkX2NiIChzdHJlYW0pOwotfQotCi1zdGF0aWMg
Z2Jvb2xlYW4KLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2NhbmNlbGxlZCAoR0lPQ2hh
bm5lbCAqY2hhbiwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwKLQkJCQkJIGdwb2ludGVyIHN0cmVh
bSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9T
T1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwotCi0JcHJpdi0+Y2Fu
Y2VsX3dhdGNoID0gTlVMTDsKLQotCXNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5z
ZXNzaW9uLCBwcml2LT5tc2cpOwotCWlmIChwcml2LT5jYW5jZWxsZWRfY2IpCi0JCXByaXYtPmNh
bmNlbGxlZF9jYiAoc3RyZWFtKTsKLQotCXJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQK
LXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChHSW5wdXRTdHJl
YW0gKnN0cmVhbSwKLQkJCQkJICAgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKLQkJCQkJ
ICAgICAgZ3VjaGFyICAgICAgICpidWZmZXIsCi0JCQkJCSAgICAgIGdzaXplIGNvdW50KQotewot
CVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRU
UF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0JaW50IGNhbmNlbF9mZDsKLQot
CXByaXYtPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFibGU7Ci0JY2FuY2VsX2ZkID0gZ19jYW5jZWxs
YWJsZV9nZXRfZmQgKGNhbmNlbGxhYmxlKTsKLQlpZiAoY2FuY2VsX2ZkICE9IC0xKSB7Ci0JCUdJ
T0NoYW5uZWwgKmNoYW4gPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcgKGNhbmNlbF9mZCk7Ci0JCXBy
aXYtPmNhbmNlbF93YXRjaCA9IHNvdXBfYWRkX2lvX3dhdGNoIChwcml2LT5hc3luY19jb250ZXh0
LCBjaGFuLAotCQkJCQkJCUdfSU9fSU4gfCBHX0lPX0VSUiB8IEdfSU9fSFVQLAotCQkJCQkJCXdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2NhbmNlbGxlZCwKLQkJCQkJCQlzdHJlYW0pOwot
CQlnX2lvX2NoYW5uZWxfdW5yZWYgKGNoYW4pOwotCX0KLQotCXByaXYtPmNhbGxlcl9idWZmZXIg
PSBidWZmZXI7Ci0JcHJpdi0+Y2FsbGVyX2J1ZnNpemUgPSBjb3VudDsKLQlwcml2LT5jYWxsZXJf
bnJlYWQgPSAwOwotCi0JaWYgKHByaXYtPmdvdF9oZWFkZXJzKQotCQlzb3VwX3Nlc3Npb25fdW5w
YXVzZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2cpOwotfQotCi1zdGF0aWMgdm9p
ZAotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoR0lucHV0U3RyZWFtICpz
dHJlYW0pCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJL
SVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQotCWlmIChw
cml2LT5jYW5jZWxfd2F0Y2gpIHsKLQkJZ19zb3VyY2VfZGVzdHJveSAocHJpdi0+Y2FuY2VsX3dh
dGNoKTsKLQkJcHJpdi0+Y2FuY2VsX3dhdGNoID0gTlVMTDsKLQkJZ19jYW5jZWxsYWJsZV9yZWxl
YXNlX2ZkIChwcml2LT5jYW5jZWxsYWJsZSk7Ci0JfQotCXByaXYtPmNhbmNlbGxhYmxlID0gTlVM
TDsKLQotCXByaXYtPmNhbGxlcl9idWZmZXIgPSBOVUxMOwotCXByaXYtPmNhbGxlcl9idWZzaXpl
ID0gMDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKFNv
dXBNZXNzYWdlICptc2csIEdFcnJvciAqKmVycm9yKQotewotCWlmICghU09VUF9TVEFUVVNfSVNf
U1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNfY29kZSkpIHsKLQkJZ19zZXRfZXJyb3JfbGl0ZXJhbCAo
ZXJyb3IsIFNPVVBfSFRUUF9FUlJPUiwKLQkJCQkgICAgIG1zZy0+c3RhdHVzX2NvZGUsIG1zZy0+
cmVhc29uX3BocmFzZSk7Ci0JCXJldHVybiBUUlVFOwotCX0KLQlyZXR1cm4gRkFMU0U7Ci19Ci0K
LXN0YXRpYyBnc2l6ZQotcmVhZF9mcm9tX2xlZnRvdmVyIChXZWJLaXRTb3VwSFRUUElucHV0U3Ry
ZWFtUHJpdmF0ZSAqcHJpdiwKLQkJICAgIGdwb2ludGVyIGJ1ZmZlciwgZ3NpemUgYnVmc2l6ZSkK
LXsKLQlnc2l6ZSBucmVhZDsKLQotCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplIC0gcHJpdi0+
bGVmdG92ZXJfb2Zmc2V0IDw9IGJ1ZnNpemUpIHsKLQkJbnJlYWQgPSBwcml2LT5sZWZ0b3Zlcl9i
dWZzaXplIC0gcHJpdi0+bGVmdG92ZXJfb2Zmc2V0OwotCQltZW1jcHkgKGJ1ZmZlciwgcHJpdi0+
bGVmdG92ZXJfYnVmZmVyICsgcHJpdi0+bGVmdG92ZXJfb2Zmc2V0LCBucmVhZCk7Ci0KLQkJZ19m
cmVlIChwcml2LT5sZWZ0b3Zlcl9idWZmZXIpOwotCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBO
VUxMOwotCQlwcml2LT5sZWZ0b3Zlcl9idWZzaXplID0gcHJpdi0+bGVmdG92ZXJfb2Zmc2V0ID0g
MDsKLQl9IGVsc2UgewotCQlucmVhZCA9IGJ1ZnNpemU7Ci0JCW1lbWNweSAoYnVmZmVyLCBwcml2
LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQsIG5yZWFkKTsKLQkJcHJp
di0+bGVmdG92ZXJfb2Zmc2V0ICs9IG5yZWFkOwotCX0KLQotCXByaXYtPm9mZnNldCArPSBucmVh
ZDsKLQlyZXR1cm4gbnJlYWQ7Ci19Ci0KLS8qIFRoaXMgZG9lcyB0aGUgd29yayBvZiB3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKCksIGFzc3VtaW5nIHRoYXQgdGhlCi0gKiBHSW5w
dXRTdHJlYW0gcGVuZGluZyBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gc2V0LiBJdCBpcyBhbHNvIHVz
ZWQgYnkKLSAqIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMoKSBpbiBz
b21lIGNpcmN1bXN0YW5jZXMuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2VuZF9pbnRlcm5hbCAoR0lucHV0U3RyZWFtICAqc3RyZWFtLAotCQkJ
CQkgICAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAotCQkJCQkgICAgIEdFcnJvciAgICAg
ICAqKmVycm9yKQotewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0g
V0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0KLQl3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5j
ZWxsYWJsZSwgTlVMTCwgMCk7Ci0Jd2hpbGUgKCFwcml2LT5maW5pc2hlZCAmJiAhcHJpdi0+Z290
X2hlYWRlcnMgJiYKLQkgICAgICAgIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChjYW5jZWxs
YWJsZSkpCi0JCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAocHJpdi0+YXN5bmNfY29udGV4dCwg
VFJVRSk7Ci0Jd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoc3RyZWFtKTsK
LQotCWlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKGNhbmNlbGxhYmxl
LCBlcnJvcikpCi0JCXJldHVybiBGQUxTRTsKLQllbHNlIGlmIChzZXRfZXJyb3JfaWZfaHR0cF9m
YWlsZWQgKHByaXYtPm1zZywgZXJyb3IpKQotCQlyZXR1cm4gRkFMU0U7Ci0JcmV0dXJuIFRSVUU7
Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5kX3N5bmNfZmluaXNoZWQgKEdJbnB1dFN0cmVhbSAqc3Ry
ZWFtKQotewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lU
X1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0JR0Vycm9yICpl
cnJvciA9IE5VTEw7Ci0KLQlpZiAoIWdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxl
ZCAocHJpdi0+Y2FuY2VsbGFibGUsICZlcnJvcikpCi0JCXNldF9lcnJvcl9pZl9odHRwX2ZhaWxl
ZCAocHJpdi0+bXNnLCAmZXJyb3IpOwotCi0JcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBOVUxMOwot
CXByaXYtPmZpbmlzaGVkX2NiID0gTlVMTDsKLQotCS8qIFdha2UgdXAgdGhlIG1haW4gY29udGV4
dCBpdGVyYXRpb24gKi8KLQlnX3NvdXJjZV9hdHRhY2ggKGdfaWRsZV9zb3VyY2VfbmV3ICgpLCBO
VUxMKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kOgot
ICogQGh0dHBzdHJlYW06IGEgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0KLSAqIEBjYW5jZWxs
YWJsZTogb3B0aW9uYWwgI0dDYW5jZWxsYWJsZSBvYmplY3QsICVOVUxMIHRvIGlnbm9yZS4KLSAq
IEBlcnJvcjogbG9jYXRpb24gdG8gc3RvcmUgdGhlIGVycm9yIG9jY3VyaW5nLCBvciAlTlVMTCB0
byBpZ25vcmUKLSAqCi0gKiBTeW5jaHJvbm91c2x5IHNlbmRzIHRoZSBIVFRQIHJlcXVlc3QgYXNz
b2NpYXRlZCB3aXRoIEBzdHJlYW0sIGFuZAotICogcmVhZHMgdGhlIHJlc3BvbnNlIGhlYWRlcnMu
IENhbGwgdGhpcyBhZnRlciB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcoKQotICog
YW5kIGJlZm9yZSB0aGUgZmlyc3QgZ19pbnB1dF9zdHJlYW1fcmVhZCgpIGlmIHlvdSB3YW50IHRv
IGNoZWNrIHRoZQotICogSFRUUCBzdGF0dXMgY29kZSBiZWZvcmUgeW91IHN0YXJ0IHJlYWRpbmcu
Ci0gKgotICogUmV0dXJuIHZhbHVlOiAlVFJVRSBpZiBtc2cgaGFzIGEgc3VjY2Vzc2Z1bCAoMnh4
KSBzdGF0dXMsICVGQUxTRSBpZgotICogbm90LgotICoqLwotZ2Jvb2xlYW4KLXdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gICpodHRw
c3RyZWFtLAotCQkJCSAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJ
ICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0
U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9Q
UklWQVRFIChodHRwc3RyZWFtKTsKLQlHSW5wdXRTdHJlYW0gKmlzdHJlYW0gPSAoR0lucHV0U3Ry
ZWFtICopaHR0cHN0cmVhbTsKLQlnYm9vbGVhbiByZXN1bHQ7Ci0KLQlnX3JldHVybl92YWxfaWZf
ZmFpbCAoV0VCS0lUX0lTX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKGh0dHBzdHJlYW0pLCBGQUxT
RSk7Ci0KLQlpZiAoIWdfaW5wdXRfc3RyZWFtX3NldF9wZW5kaW5nIChpc3RyZWFtLCBlcnJvcikp
Ci0JCXJldHVybiBGQUxTRTsKLQotCXByaXYtPmdvdF9oZWFkZXJzX2NiID0gc2VuZF9zeW5jX2Zp
bmlzaGVkOwotCXByaXYtPmZpbmlzaGVkX2NiID0gc2VuZF9zeW5jX2ZpbmlzaGVkOwotCi0JcmVz
dWx0ID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9pbnRlcm5hbCAoaXN0cmVh
bSwgY2FuY2VsbGFibGUsIGVycm9yKTsKLQlnX2lucHV0X3N0cmVhbV9jbGVhcl9wZW5kaW5nIChp
c3RyZWFtKTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnc3NpemUKLXdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1dFN0cmVhbSAqc3RyZWFtLAotCQkJCSAg
ICB2b2lkICAgICAgICAgKmJ1ZmZlciwKLQkJCQkgICAgZ3NpemUgY291bnQsCi0JCQkJICAgIEdD
YW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsCi0JCQkJICAgIEdFcnJvciAgICAgICoqZXJyb3IpCi17
Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9I
VFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKLQotCWlmIChwcml2LT5maW5p
c2hlZCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBJZiB0aGVyZSBpcyBkYXRhIGxlZnRvdmVyIGZyb20g
YSBwcmV2aW91cyByZWFkLCByZXR1cm4gaXQuICovCi0JaWYgKHByaXYtPmxlZnRvdmVyX2J1ZnNp
emUpCi0JCXJldHVybiByZWFkX2Zyb21fbGVmdG92ZXIgKHByaXYsIGJ1ZmZlciwgY291bnQpOwot
Ci0JLyogTm8gbGVmdG92ZXIgZGF0YSwgYWNjZXB0IG9uZSBjaHVuayBmcm9tIHRoZSBuZXR3b3Jr
ICovCi0Jd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKHN0cmVh
bSwgY2FuY2VsbGFibGUsIGJ1ZmZlciwgY291bnQpOwotCXdoaWxlICghcHJpdi0+ZmluaXNoZWQg
JiYgcHJpdi0+Y2FsbGVyX25yZWFkID09IDAgJiYKLQkgICAgICAgIWdfY2FuY2VsbGFibGVfaXNf
Y2FuY2VsbGVkIChjYW5jZWxsYWJsZSkpCi0JCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAocHJp
di0+YXN5bmNfY29udGV4dCwgVFJVRSk7Ci0Jd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
ZG9uZV9pbyAoc3RyZWFtKTsKLQotCWlmIChwcml2LT5jYWxsZXJfbnJlYWQgPiAwKQotCQlyZXR1
cm4gcHJpdi0+Y2FsbGVyX25yZWFkOwotCi0JaWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lm
X2NhbmNlbGxlZCAoY2FuY2VsbGFibGUsIGVycm9yKSkKLQkJcmV0dXJuIC0xOwotCWVsc2UgaWYg
KHNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCBlcnJvcikpCi0JCXJldHVybiAt
MTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0gKnN0cmVhbSwKLQkJCQkgICAg
IEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsCi0JCQkJICAgICBHRXJyb3IgICAgICAqKmVycm9y
KQotewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NP
VVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0KLQlpZiAoIXByaXYt
PmZpbmlzaGVkKQotCQlzb3VwX3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UgKHByaXYtPnNlc3Npb24s
IHByaXYtPm1zZywgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKLQotCXJldHVybiBUUlVFOwotfQot
Ci1zdGF0aWMgdm9pZAotd3JhcHBlcl9jYWxsYmFjayAoR09iamVjdCAqc291cmNlX29iamVjdCwg
R0FzeW5jUmVzdWx0ICpyZXMsCi0JCSAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCUdJbnB1dFN0
cmVhbSAqc3RyZWFtID0gR19JTlBVVF9TVFJFQU0gKHNvdXJjZV9vYmplY3QpOwotCVdlYktpdFNv
dXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9T
VFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0KLQlnX2lucHV0X3N0cmVhbV9jbGVhcl9wZW5k
aW5nIChzdHJlYW0pOwotCWlmIChwcml2LT5vdXRzdGFuZGluZ19jYWxsYmFjaykKLQkJKCpwcml2
LT5vdXRzdGFuZGluZ19jYWxsYmFjaykoc291cmNlX29iamVjdCwgcmVzLCB1c2VyX2RhdGEpOwot
CXByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrID0gTlVMTDsKLQlnX29iamVjdF91bnJlZiAoc3Ry
ZWFtKTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfYXN5bmNfdGhyZWFkIChHU2ltcGxlQXN5bmNS
ZXN1bHQgKnJlcywKLQkJICAgR09iamVjdCAqb2JqZWN0LAotCQkgICBHQ2FuY2VsbGFibGUgKmNh
bmNlbGxhYmxlKQotewotCUdFcnJvciAqZXJyb3IgPSBOVUxMOwotCWdib29sZWFuIHN1Y2Nlc3M7
Ci0KLQlzdWNjZXNzID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9pbnRlcm5h
bCAoR19JTlBVVF9TVFJFQU0gKG9iamVjdCksCi0JCQkJCQkJY2FuY2VsbGFibGUsICZlcnJvcik7
Ci0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ2Jvb2xlYW4gKHJlcywgc3VjY2Vz
cyk7Ci0JaWYgKGVycm9yKSB7Ci0JCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJv
ciAocmVzLCBlcnJvcik7Ci0JCWdfZXJyb3JfZnJlZSAoZXJyb3IpOwotCX0KLX0KLQotc3RhdGlj
IHZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW5fdGhyZWFk
IChHSW5wdXRTdHJlYW0gICAgICAgICpzdHJlYW0sCi0JCQkJCQkgICAgaW50IGlvX3ByaW9yaXR5
LAotCQkJCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkJICAg
IEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkJCQkgICAgZ3BvaW50ZXIgdXNlcl9k
YXRhKQotewotCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzOwotCi0JcmVzID0gZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHN0cmVhbSksIGNhbGxiYWNrLCB1c2VyX2RhdGEsCi0J
CQkJCSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCk7
Ci0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3J1bl9pbl90aHJlYWQgKHJlcywgc2VuZF9hc3luY190
aHJlYWQsCi0JCQkJCSAgICAgaW9fcHJpb3JpdHksIGNhbmNlbGxhYmxlKTsKLQlnX29iamVjdF91
bnJlZiAocmVzKTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfYXN5bmNfZmluaXNoZWQgKEdJbnB1
dFN0cmVhbSAqc3RyZWFtKQotewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpw
cml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7
Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7Ci0JR0Vycm9yICplcnJvciA9IE5VTEw7Ci0K
LQlpZiAoIWdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAocHJpdi0+Y2FuY2Vs
bGFibGUsICZlcnJvcikpCi0JCXNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCAm
ZXJyb3IpOwotCi0JcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBOVUxMOwotCXByaXYtPmZpbmlzaGVk
X2NiID0gTlVMTDsKLQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChzdHJl
YW0pOwotCi0JcmVzdWx0ID0gcHJpdi0+cmVzdWx0OwotCXByaXYtPnJlc3VsdCA9IE5VTEw7Ci0K
LQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVhbiAocmVzdWx0LCBlcnJv
ciA9PSBOVUxMKTsKLQlpZiAoZXJyb3IpIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9m
cm9tX2Vycm9yIChyZXN1bHQsIGVycm9yKTsKLQkJZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0JfQot
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAocmVzdWx0KTsKLQlnX29iamVjdF91bnJl
ZiAocmVzdWx0KTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlbmRfYXN5bmNfaW50ZXJuYWwgKEdJbnB1dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKLQkJ
CQkJCSAgIGludCBpb19wcmlvcml0eSwKLQkJCQkJCSAgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNh
bmNlbGxhYmxlLAotCQkJCQkJICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJ
CSAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChz
dHJlYW0pOwotCi0JZ19vYmplY3RfcmVmIChzdHJlYW0pOwotCXByaXYtPm91dHN0YW5kaW5nX2Nh
bGxiYWNrID0gY2FsbGJhY2s7Ci0KLQkvKiBJZiB0aGUgc2Vzc2lvbiB1c2VzIHRoZSBkZWZhdWx0
IEdNYWluQ29udGV4dCwgdGhlbiB3ZSBjYW4gZG8KLQkgKiBhc3luYyBJL08gZGlyZWN0bHkuIEJ1
dCBpZiBpdCBoYXMgaXRzIG93biBtYWluIGNvbnRleHQsIGl0J3MKLQkgKiBlYXNpZXIgdG8ganVz
dCBydW4gaXQgaW4gYW5vdGhlciB0aHJlYWQuCi0JICovCi0JaWYgKHNvdXBfc2Vzc2lvbl9nZXRf
YXN5bmNfY29udGV4dCAocHJpdi0+c2Vzc2lvbikpIHsKLQkJd2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQgKHN0cmVhbSwgaW9fcHJpb3JpdHksIGNhbmNl
bGxhYmxlLAotCQkJCQkJCSAgICAgd3JhcHBlcl9jYWxsYmFjaywgdXNlcl9kYXRhKTsKLQkJcmV0
dXJuOwotCX0KLQotCXByaXYtPmdvdF9oZWFkZXJzX2NiID0gc2VuZF9hc3luY19maW5pc2hlZDsK
LQlwcml2LT5maW5pc2hlZF9jYiA9IHNlbmRfYXN5bmNfZmluaXNoZWQ7Ci0KLQl3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwg
TlVMTCwgMCk7Ci0JcHJpdi0+cmVzdWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19P
QkpFQ1QgKHN0cmVhbSksCi0JCQkJCQkgIHdyYXBwZXJfY2FsbGJhY2ssIHVzZXJfZGF0YSwKLQkJ
CQkJCSAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyk7Ci19Ci0KLS8q
KgotICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYzoKLSAqIEBodHRw
c3RyZWFtOiBhICNXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtCi0gKiBAaW9fcHJpb3JpdHk6IHRo
ZSBpbyBwcmlvcml0eSBvZiB0aGUgcmVxdWVzdC4KLSAqIEBjYW5jZWxsYWJsZTogb3B0aW9uYWwg
I0dDYW5jZWxsYWJsZSBvYmplY3QsICVOVUxMIHRvIGlnbm9yZS4KLSAqIEBjYWxsYmFjazogY2Fs
bGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAotICogQHVzZXJfZGF0
YTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgotICoKLSAqIEFzeW5jaHJv
bm91c2x5IHNlbmRzIHRoZSBIVFRQIHJlcXVlc3QgYXNzb2NpYXRlZCB3aXRoIEBzdHJlYW0sIGFu
ZAotICogcmVhZHMgdGhlIHJlc3BvbnNlIGhlYWRlcnMuIENhbGwgdGhpcyBhZnRlciB3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcoKQotICogYW5kIGJlZm9yZSB0aGUgZmlyc3QgZ19p
bnB1dF9zdHJlYW1fcmVhZF9hc3luYygpIGlmIHlvdSB3YW50IHRvCi0gKiBjaGVjayB0aGUgSFRU
UCBzdGF0dXMgY29kZSBiZWZvcmUgeW91IHN0YXJ0IHJlYWRpbmcuCi0gKiovCi12b2lkCi13ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChXZWJLaXRTb3VwSFRUUElucHV0
U3RyZWFtICpodHRwc3RyZWFtLAotCQkJCQkgIGludCBpb19wcmlvcml0eSwKLQkJCQkJICBHQ2Fu
Y2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJICBHQXN5bmNSZWFkeUNhbGxiYWNr
IGNhbGxiYWNrLAotCQkJCQkgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHSW5wdXRTdHJlYW0g
KmlzdHJlYW0gPSAoR0lucHV0U3RyZWFtICopaHR0cHN0cmVhbTsKLQlHRXJyb3IgKmVycm9yID0g
TlVMTDsKLQotCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0hUVFBfSU5QVVRfU1RS
RUFNIChodHRwc3RyZWFtKSk7Ci0KLQlpZiAoIWdfaW5wdXRfc3RyZWFtX3NldF9wZW5kaW5nIChp
c3RyZWFtLCAmZXJyb3IpKSB7Ci0JCWdfc2ltcGxlX2FzeW5jX3JlcG9ydF9nZXJyb3JfaW5faWRs
ZSAoR19PQkpFQ1QgKGh0dHBzdHJlYW0pLAotCQkJCQkJICAgICAgY2FsbGJhY2ssCi0JCQkJCQkg
ICAgICB1c2VyX2RhdGEsCi0JCQkJCQkgICAgICBlcnJvcik7Ci0JCWdfZXJyb3JfZnJlZSAoZXJy
b3IpOwotCQlyZXR1cm47Ci0JfQotCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRf
YXN5bmNfaW50ZXJuYWwgKGlzdHJlYW0sIGlvX3ByaW9yaXR5LCBjYW5jZWxsYWJsZSwKLQkJCQkJ
CSAgICBjYWxsYmFjaywgdXNlcl9kYXRhKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaDoKLSAqIEBodHRwc3RyZWFtOiBhICNXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtCi0gKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQuCi0gKiBAZXJyb3I6
IGEgI0dFcnJvciBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXJyb3Igb2NjdXJpbmcsIG9yICVOVUxM
IHRvCi0gKiBpZ25vcmUuCi0gKgotICogRmluaXNoZXMgYSB3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2FzeW5jKCkgb3BlcmF0aW9uLgotICoKLSAqIFJldHVybiB2YWx1ZTogJVRS
VUUgaWYgdGhlIG1lc3NhZ2Ugd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5IGFuZAotICogcmVjZWl2ZWQg
YSBzdWNjZXNzZnVsIHN0YXR1cyBjb2RlLCAlRkFMU0UgaWYgbm90LgotICoqLwotZ2Jvb2xlYW4K
LXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoIChXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtICAqaHR0cHN0cmVhbSwKLQkJCQkJICAgR0FzeW5jUmVzdWx0ICAgICAgICAg
KnJlc3VsdCwKLQkJCQkJICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQotewotCUdTaW1w
bGVBc3luY1Jlc3VsdCAqc2ltcGxlOwotCi0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfU0lN
UExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KSwgRkFMU0UpOwotCXNpbXBsZSA9IEdfU0lNUExFX0FT
WU5DX1JFU1VMVCAocmVzdWx0KTsKLQotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9h
c3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcgKHNpbXBsZSkgPT0gd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fc2VuZF9hc3luYywgRkFMU0UpOwotCi0JaWYgKGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9wcm9wYWdhdGVfZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQotCQlyZXR1cm4gRkFMU0U7Ci0K
LQlyZXR1cm4gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ2Jvb2xlYW4gKHNpbXBs
ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZWFkX2FzeW5jX2RvbmUgKEdJbnB1dFN0cmVhbSAqc3Ry
ZWFtKQotewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lU
X1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7Ci0JR1NpbXBsZUFz
eW5jUmVzdWx0ICpyZXN1bHQ7Ci0JR0Vycm9yICplcnJvciA9IE5VTEw7Ci0KLQlyZXN1bHQgPSBw
cml2LT5yZXN1bHQ7Ci0JcHJpdi0+cmVzdWx0ID0gTlVMTDsKLQotCWlmIChnX2NhbmNlbGxhYmxl
X3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKHByaXYtPmNhbmNlbGxhYmxlLCAmZXJyb3IpIHx8Ci0J
ICAgIHNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCAmZXJyb3IpKSB7Ci0JCWdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVzdWx0LCBlcnJvcik7Ci0JCWdf
ZXJyb3JfZnJlZSAoZXJyb3IpOwotCX0gZWxzZQotCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0
X29wX3Jlc19nc3NpemUgKHJlc3VsdCwgcHJpdi0+Y2FsbGVyX25yZWFkKTsKLQotCXByaXYtPmdv
dF9jaHVua19jYiA9IE5VTEw7Ci0JcHJpdi0+ZmluaXNoZWRfY2IgPSBOVUxMOwotCXByaXYtPmNh
bmNlbGxlZF9jYiA9IE5VTEw7Ci0Jd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9p
byAoc3RyZWFtKTsKLQotCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAocmVzdWx0KTsK
LQlnX29iamVjdF91bnJlZiAocmVzdWx0KTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMgKEdJbnB1dFN0cmVhbSAgICAgICAgKnN0cmVh
bSwKLQkJCQkJICB2b2lkICAgICAgICAgICAgICAgICpidWZmZXIsCi0JCQkJCSAgZ3NpemUgY291
bnQsCi0JCQkJCSAgaW50IGlvX3ByaW9yaXR5LAotCQkJCQkgIEdDYW5jZWxsYWJsZSAgICAgICAg
KmNhbmNlbGxhYmxlLAotCQkJCQkgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkJ
CSAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2
YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0
cmVhbSk7Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7Ci0KLQkvKiBJZiB0aGUgc2Vzc2lv
biB1c2VzIHRoZSBkZWZhdWx0IEdNYWluQ29udGV4dCwgdGhlbiB3ZSBjYW4gZG8KLQkgKiBhc3lu
YyBJL08gZGlyZWN0bHkuIEJ1dCBpZiBpdCBoYXMgaXRzIG93biBtYWluIGNvbnRleHQsIHdlIGZh
bGwKLQkgKiBiYWNrIHRvIHRoZSBhc3luYy12aWEtc3luYy1pbi1hbm90aGVyLXRocmVhZCBpbXBs
ZW1lbnRhdGlvbi4KLQkgKi8KLQlpZiAoc291cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChw
cml2LT5zZXNzaW9uKSkgewotCQlHX0lOUFVUX1NUUkVBTV9DTEFTUyAod2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+Ci0JCXJlYWRfYXN5bmMgKHN0cmVhbSwgYnVm
ZmVyLCBjb3VudCwgaW9fcHJpb3JpdHksCi0JCQkgICAgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1
c2VyX2RhdGEpOwotCQlyZXR1cm47Ci0JfQotCi0JcmVzdWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X25ldyAoR19PQkpFQ1QgKHN0cmVhbSksCi0JCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRh
LAotCQkJCQkgICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyk7Ci0K
LQlpZiAocHJpdi0+ZmluaXNoZWQpIHsKLQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9y
ZXNfZ3NzaXplIChyZXN1bHQsIDApOwotCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVf
aW5faWRsZSAocmVzdWx0KTsKLQkJZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7Ci0JCXJldHVybjsK
LQl9Ci0KLQlpZiAocHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSkgewotCQlnc2l6ZSBucmVhZCA9IHJl
YWRfZnJvbV9sZWZ0b3ZlciAocHJpdiwgYnVmZmVyLCBjb3VudCk7Ci0JCWdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0LCBucmVhZCk7Ci0JCWdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1bHQpOwotCQlnX29iamVjdF91bnJlZiAo
cmVzdWx0KTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYtPnJlc3VsdCA9IHJlc3VsdDsKLQotCXBy
aXYtPmdvdF9jaHVua19jYiA9IHJlYWRfYXN5bmNfZG9uZTsKLQlwcml2LT5maW5pc2hlZF9jYiA9
IHJlYWRfYXN5bmNfZG9uZTsKLQlwcml2LT5jYW5jZWxsZWRfY2IgPSByZWFkX2FzeW5jX2RvbmU7
Ci0Jd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKHN0cmVhbSwg
Y2FuY2VsbGFibGUsIGJ1ZmZlciwgY291bnQpOwotfQotCi1zdGF0aWMgZ3NzaXplCi13ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAqc3RyZWFt
LAotCQkJCQkgICBHQXN5bmNSZXN1bHQgICpyZXN1bHQsCi0JCQkJCSAgIEdFcnJvciAgICAgICAq
KmVycm9yKQotewotCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOwotCi0JZ19yZXR1cm5fdmFs
X2lmX2ZhaWwgKEdfSVNfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KSwgLTEpOwotCXNpbXBs
ZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKLQlnX3JldHVybl92YWxfaWZfZmFp
bCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnIChzaW1wbGUpID09IHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMsIC0xKTsKLQotCXJldHVybiBnX3Np
bXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19nc3NpemUgKHNpbXBsZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkCi13ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoR0lucHV0
U3RyZWFtICAgICAgICpzdHJlYW0sCi0JCQkJCSAgIGludCBpb19wcmlvcml0eSwKLQkJCQkJICAg
R0NhbmNlbGxhYmxlICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQkJICAgR0FzeW5jUmVhZHlDYWxs
YmFjayBjYWxsYmFjaywKLQkJCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCUdTaW1wbGVB
c3luY1Jlc3VsdCAqcmVzdWx0OwotCWdib29sZWFuIHN1Y2Nlc3M7Ci0JR0Vycm9yICplcnJvciA9
IE5VTEw7Ci0KLQlyZXN1bHQgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAo
c3RyZWFtKSwKLQkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCi0JCQkJCSAgICB3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9hc3luYyk7Ci0Jc3VjY2VzcyA9IHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlIChzdHJlYW0sIGNhbmNlbGxhYmxlLCAmZXJyb3Ip
OwotCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuIChyZXN1bHQsIHN1
Y2Nlc3MpOwotCWlmIChlcnJvcikgewotCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21f
ZXJyb3IgKHJlc3VsdCwgZXJyb3IpOwotCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLQl9Ci0KLQln
X3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZSAocmVzdWx0KTsKLQlnX29iamVj
dF91bnJlZiAocmVzdWx0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2ggKEdJbnB1dFN0cmVhbSAgKnN0cmVhbSwKLQkJCQkJ
ICAgIEdBc3luY1Jlc3VsdCAgKnJlc3VsdCwKLQkJCQkJICAgIEdFcnJvciAgICAgICAqKmVycm9y
KQotewotCS8qIEZhaWx1cmVzIGhhbmRsZWQgaW4gZ2VuZXJpYyBjbG9zZV9maW5pc2ggY29kZSAq
LwotCXJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ29mZnNldAotd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fdGVsbCAoR1NlZWthYmxlICpzZWVrYWJsZSkKLXsKLQlXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0dFVF9QUklWQVRFIChzZWVrYWJsZSk7Ci0KLQlyZXR1cm4gcHJpdi0+b2Zmc2V0OwotfQotCi1z
dGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl9zZWVrIChH
U2Vla2FibGUgKnNlZWthYmxlKQotewotCXJldHVybiBUUlVFOwotfQotCi1leHRlcm4gdm9pZCBz
b3VwX21lc3NhZ2VfaW9fY2xlYW51cCAoU291cE1lc3NhZ2UgKm1zZyk7Ci0KLXN0YXRpYyBnYm9v
bGVhbgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VlayAoR1NlZWthYmxlICAgICAq
c2Vla2FibGUsCi0JCQkJICAgIGdvZmZzZXQgb2Zmc2V0LAotCQkJCSAgICBHU2Vla1R5cGUgdHlw
ZSwKLQkJCQkgICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCi0JCQkJICAgIEdFcnJvciAg
ICAgICAqKmVycm9yKQotewotCUdJbnB1dFN0cmVhbSAqc3RyZWFtID0gR19JTlBVVF9TVFJFQU0g
KHNlZWthYmxlKTsKLQlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdF
QktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzZWVrYWJsZSk7Ci0JY2hh
ciAqcmFuZ2U7Ci0KLQlpZiAodHlwZSA9PSBHX1NFRUtfRU5EKSB7Ci0JCS8qIEZJWE1FOiB3ZSBj
b3VsZCBzZW5kICJieXRlcz0tb2Zmc2V0IiwgYnV0IHVubGVzcyB3ZQotCQkgKiBrbm93IHRoZSBD
b250ZW50LUxlbmd0aCwgd2Ugd291bGRuJ3QgYmUgYWJsZSB0bwotCQkgKiBhbnN3ZXIgYSB0ZWxs
KCkgcHJvcGVybHkuIFdlIGNvdWxkIGZpbmQgdGhlCi0JCSAqIENvbnRlbnQtTGVuZ3RoIGJ5IGRv
aW5nIGEgSEVBRC4uLgotCQkgKi8KLQotCQlnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgR19J
T19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9SVEVELAotCQkJCSAgICAgIkdfU0VFS19FTkQg
bm90IGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCWlmICgh
Z19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKHN0cmVhbSwgZXJyb3IpKQotCQlyZXR1cm4gRkFM
U0U7Ci0KLQlzb3VwX3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYt
Pm1zZywgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKLQlzb3VwX21lc3NhZ2VfaW9fY2xlYW51cCAo
cHJpdi0+bXNnKTsKLQotCXN3aXRjaCAodHlwZSkgewotCQljYXNlIEdfU0VFS19DVVI6Ci0JCQlv
ZmZzZXQgKz0gcHJpdi0+b2Zmc2V0OwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCQljYXNlIEdf
U0VFS19TRVQ6Ci0JCQlyYW5nZSA9IGdfc3RyZHVwX3ByaW50ZiAoImJ5dGVzPSUiIEdfR1VJTlQ2
NF9GT1JNQVQgIi0iLCAoZ3VpbnQ2NClvZmZzZXQpOwotCQkJcHJpdi0+b2Zmc2V0ID0gb2Zmc2V0
OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBHX1NFRUtfRU5EOgotCQkJcmFuZ2UgPSBOVUxMOyAvKiBr
ZWVwIGNvbXBpbGVycyBoYXBweSAqLwotCQkJZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQgKEZBTFNF
KTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlnX3JldHVybl92YWxfaWZfcmVhY2hlZCAo
RkFMU0UpOwotCX0KLQotCXNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlbW92ZSAocHJpdi0+bXNnLT5y
ZXF1ZXN0X2hlYWRlcnMsICJSYW5nZSIpOwotCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAo
cHJpdi0+bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJSYW5nZSIsIHJhbmdlKTsKLQlnX2ZyZWUgKHJh
bmdlKTsKLQotCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21lc3NhZ2UgKFdF
QktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNIChzdHJlYW0pKTsKLQotCWdfaW5wdXRfc3RyZWFt
X2NsZWFyX3BlbmRpbmcgKHN0cmVhbSk7Ci0JcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlIChHU2Vla2Fi
bGUgKnNlZWthYmxlKQotewotCXJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi13
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZSAoR1NlZWthYmxlICAgICAqc2Vl
a2FibGUsCi0JCQkJCWdvZmZzZXQgb2Zmc2V0LAotCQkJCQlHQ2FuY2VsbGFibGUgICpjYW5jZWxs
YWJsZSwKLQkJCQkJR0Vycm9yICAgICAgICoqZXJyb3IpCi17Ci0JZ19zZXRfZXJyb3JfbGl0ZXJh
bCAoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfTk9UX1NVUFBPUlRFRCwKLQkJCSAgICAg
IlRydW5jYXRlIG5vdCBhbGxvd2VkIG9uIGlucHV0IHN0cmVhbSIpOwotCXJldHVybiBGQUxTRTsK
LX0KLQotU291cE1lc3NhZ2UgKgotd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X21l
c3NhZ2UgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0pCi17Ci0JV2ViS2l0
U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVU
X1NUUkVBTV9HRVRfUFJJVkFURSAoaHR0cHN0cmVhbSk7Ci0JcmV0dXJuIHByaXYtPm1zZyA/IGdf
b2JqZWN0X3JlZiAocHJpdi0+bXNnKSA6IE5VTEw7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1p
bnB1dC1zdHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5ODU1OS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1odHRwLWlucHV0LXN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyog
LSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1v
ZmZzZXQ6IDggLSotICovCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IFJl
ZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgotICovCi0KLSNpZm5kZWYgX19XRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IX18K
LSNkZWZpbmUgX19XRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IX18KLQotI2luY2x1ZGUg
PGdpby9naW8uaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtdHlwZXMuaD4KLQotR19CRUdJTl9E
RUNMUwotCi0jZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0gICAgICAg
ICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIFdF
QktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNKG8pICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QgKChvKSwgV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSwgV2Vi
S2l0U291cEhUVFBJbnB1dFN0cmVhbSkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0NMQVNTKGspICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrKSwgV0VCS0lU
X1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNs
YXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0obykgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1f
Q0xBU1MoaykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGspLCBXRUJLSVRfVFlQRV9TT1VQ
X0hUVFBfSU5QVVRfU1RSRUFNKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJF
QU1fR0VUX0NMQVNTKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgobyksIFdFQktJVF9U
WVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFz
cykpCi0KLXR5cGVkZWYgc3RydWN0IFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbTsKLXR5cGVkZWYgc3RydWN0IFdlYktpdFNvdXBIVFRQSW5wdXRTdHJl
YW1DbGFzcyBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3M7Ci0KLXN0cnVjdCBXZWJLaXRT
b3VwSFRUUElucHV0U3RyZWFtIHsKLQlHSW5wdXRTdHJlYW0gcGFyZW50OwotfTsKLQotc3RydWN0
IFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcyB7Ci0JR0lucHV0U3RyZWFtQ2xhc3MgcGFy
ZW50X2NsYXNzOwotCi0JLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwotCXZvaWQg
KCpfZ19yZXNlcnZlZDEpKHZvaWQpOwotCXZvaWQgKCpfZ19yZXNlcnZlZDIpKHZvaWQpOwotCXZv
aWQgKCpfZ19yZXNlcnZlZDMpKHZvaWQpOwotCXZvaWQgKCpfZ19yZXNlcnZlZDQpKHZvaWQpOwot
CXZvaWQgKCpfZ19yZXNlcnZlZDUpKHZvaWQpOwotfTsKLQotR1R5cGUgd2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKLQotV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbSAqd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChTb3Vw
U2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAotCQkJCQkJCSAgICAgIFNvdXBNZXNzYWdlICAgICAg
ICAgKm1zZyk7Ci0KLWdib29sZWFuICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlbmQgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCi0JCQkJ
CQkJIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkJCSBHRXJyb3IgICAg
ICAgICAgICAgKiplcnJvcik7Ci0KLXZvaWQgICAgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0
dHBzdHJlYW0sCi0JCQkJCQkJICAgICAgIGludCBpb19wcmlvcml0eSwKLQkJCQkJCQkgICAgICAg
R0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkJCQkJICAgICAgIEdBc3luY1Jl
YWR5Q2FsbGJhY2sgY2FsbGJhY2ssCi0JCQkJCQkJICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7
Ci1nYm9vbGVhbiAgICAgICAgICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5k
X2ZpbmlzaCAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSwKLQkJCQkJCQkJ
R0FzeW5jUmVzdWx0ICAgICAgICAqcmVzdWx0LAotCQkJCQkJCQlHRXJyb3IgICAgICAgICAgICAg
KiplcnJvcik7Ci0KLVNvdXBNZXNzYWdlICAgICAgICAgKndlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2dldF9tZXNzYWdlIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFt
KTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9T
VFJFQU1fSF9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuYyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjZWQ1YzRhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jCisrKyAvZGV2L251bGwK
QEAgLTEsMTcwICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10
YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwotLyoKLSAqIHNvdXAtcmVxdWVz
dC1kYXRhLmM6IGRhdGE6IFVSSSByZXF1ZXN0IG9iamVjdAotICoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBSZWQgSGF0LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
ZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLSNpbmNsdWRl
ICJzb3VwLXJlcXVlc3QtZGF0YS5oIgotCi0jaW5jbHVkZSAic291cC1yZXF1ZXN0ZXIuaCIKLSNp
bmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxnbGliL2dpMThuLmg+Ci0KLUdfREVG
SU5FX1RZUEUgKFdlYktpdFNvdXBSZXF1ZXN0RGF0YSwgd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRh
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QpCi0KLXN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RE
YXRhUHJpdmF0ZSB7Ci0JZ3NpemUgY29udGVudF9sZW5ndGg7Ci0JY2hhciAqY29udGVudF90eXBl
OwotfTsKLQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9pbml0IChXZWJL
aXRTb3VwUmVxdWVzdERhdGEgKmRhdGEpCi17Ci0JZGF0YS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURSAoZGF0YSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEsIFdlYktp
dFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUpOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBf
cmVxdWVzdF9kYXRhX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCi17Ci0JV2ViS2l0U291cFJl
cXVlc3REYXRhICpkYXRhID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBIChvYmplY3QpOwotCi0J
Z19mcmVlIChkYXRhLT5wcml2LT5jb250ZW50X3R5cGUpOwotCi0JR19PQkpFQ1RfQ0xBU1MgKHdl
YmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsK
LX0KLQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfY2hlY2tfdXJp
IChXZWJLaXRTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCi0JCQkJICAgIFNvdXBVUkkgICAgICAqdXJp
LAotCQkJCSAgICBHRXJyb3IgICAgICAqKmVycm9yKQotewotCXJldHVybiB1cmktPmhvc3QgPT0g
TlVMTDsKLX0KLQotc3RhdGljIEdJbnB1dFN0cmVhbSAqCi13ZWJraXRfc291cF9yZXF1ZXN0X2Rh
dGFfc2VuZCAoV2ViS2l0U291cFJlcXVlc3QgICAqcmVxdWVzdCwKLQkJCSAgICAgICBHQ2FuY2Vs
bGFibGUgICpjYW5jZWxsYWJsZSwKLQkJCSAgICAgICBHRXJyb3IgICAgICAgKiplcnJvcikKLXsK
LQlXZWJLaXRTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEEg
KHJlcXVlc3QpOwotCVNvdXBVUkkgKnVyaSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3VyaSAo
cmVxdWVzdCk7Ci0JR0lucHV0U3RyZWFtICptZW1zdHJlYW07Ci0JY29uc3QgY2hhciAqY29tbWEs
ICpzZW1pLCAqc3RhcnQsICplbmQ7Ci0JZ2Jvb2xlYW4gYmFzZTY0ID0gRkFMU0U7Ci0KLQlnY2hh
ciAqdXJpc3RyID0gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZBTFNFKTsKLQljb21tYSA9IHN0
cmNociAodXJpc3RyLCAnLCcpOwotCWlmIChjb21tYSAmJiBjb21tYSAhPSB1cmlzdHIpIHsKLQkJ
LyogRGVhbCB3aXRoIE1JTUUgdHlwZSAvIHBhcmFtcyAqLwotCQlzZW1pID0gbWVtY2hyICh1cmlz
dHIsICc7JywgY29tbWEgLSB1cmlzdHIpOwotCQllbmQgPSBzZW1pID8gc2VtaSA6IGNvbW1hOwot
Ci0JCWlmIChzZW1pICYmICFnX2FzY2lpX3N0cm5jYXNlY21wIChzZW1pLCAiO2Jhc2U2NCIsIE1B
WCAoKHNpemVfdCkgKGNvbW1hIC0gc2VtaSksIHN0cmxlbiAoIjtiYXNlNjQiKSkpKQotCQkJYmFz
ZTY0ID0gVFJVRTsKLQotCQlpZiAoZW5kICE9IHVyaXN0cikKLQkJCWlmIChiYXNlNjQpCi0JCQkJ
ZGF0YS0+cHJpdi0+Y29udGVudF90eXBlID0gZ19zdHJuZHVwICh1cmlzdHIsIGVuZCAtIHVyaXN0
cik7Ci0JCQllbHNlCi0JCQkJZGF0YS0+cHJpdi0+Y29udGVudF90eXBlID0KLQkJCQkJd2Via2l0
X3NvdXBfcmVxdWVzdF91cmlfZGVjb2RlZF9jb3B5ICh1cmlzdHIsIGVuZCAtIHVyaXN0cik7Ci0J
fQotCi0JbWVtc3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ldyAoKTsKLQotCXN0YXJ0
ID0gY29tbWEgPyBjb21tYSArIDEgOiB1cmlzdHI7Ci0KLQlpZiAoKnN0YXJ0KSB7Ci0JCWd1Y2hh
ciAqYnVmOwotCi0JCWlmIChiYXNlNjQpIHsKLQkJCWludCBpbmxlbiwgc3RhdGUgPSAwOwotCQkJ
Z3VpbnQgc2F2ZSA9IDA7Ci0KLQkJCWlubGVuID0gc3RybGVuIChzdGFydCk7Ci0JCQlidWYgPSBn
X21hbGxvYzAgKGlubGVuICogMyAvIDQgKyAzKTsKLQkJCWRhdGEtPnByaXYtPmNvbnRlbnRfbGVu
Z3RoID0KLQkJCQlnX2Jhc2U2NF9kZWNvZGVfc3RlcCAoc3RhcnQsIGlubGVuLCBidWYsCi0JCQkJ
CQkgICAgICAmc3RhdGUsICZzYXZlKTsKLQkJCWlmIChzdGF0ZSAhPSAwKSB7Ci0JCQkJZ19mcmVl
IChidWYpOwotCQkJCWdvdG8gZmFpbDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIENhbm5vdCB1
c2UgZ191cmlfdW5lc2NhcGVfc3RyaW5nIG5vcgotCQkJICAgc291cF91cmlfZGVjb2RlIGJlY2F1
c2Ugd2UgZG9uJ3Qgd2FudCB0bwotCQkJICAgZmFpbCBmb3IgdGhpbmdzIGxpa2UgIiUzRSUlM0Mi
IC0+ICI+JTwiICovCi0JCQlidWYgPSAoZ3VjaGFyICopd2Via2l0X3NvdXBfcmVxdWVzdF91cmlf
ZGVjb2RlZF9jb3B5IChzdGFydCwgc3RybGVuIChzdGFydCkpOwotCQkJaWYgKCFidWYpCi0JCQkJ
Z290byBmYWlsOwotCQkJZGF0YS0+cHJpdi0+Y29udGVudF9sZW5ndGggPSBzdHJsZW4gKChjaGFy
ICopYnVmKTsKLQkJfQotCi0JCWdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0YSAoR19NRU1P
UllfSU5QVVRfU1RSRUFNIChtZW1zdHJlYW0pLAotCQkJCQkJYnVmLCBkYXRhLT5wcml2LT5jb250
ZW50X2xlbmd0aCwKLQkJCQkJCWdfZnJlZSk7Ci0JfQotCWdfZnJlZSAodXJpc3RyKTsKLQotCXJl
dHVybiBtZW1zdHJlYW07Ci0KLSBmYWlsOgotCWdfZnJlZSAodXJpc3RyKTsKLQlnX3NldF9lcnJv
ciAoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09VUF9FUlJPUl9CQURfVVJJLAot
CQkgICAgIF8gKCJVbmFibGUgdG8gZGVjb2RlIFVSSTogJXMiKSwgc3RhcnQpOwotCWdfb2JqZWN0
X3VucmVmIChtZW1zdHJlYW0pOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ29mZnNldAot
d2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X2xlbmd0aCAoV2ViS2l0U291cFJl
cXVlc3QgKnJlcXVlc3QpCi17Ci0JV2ViS2l0U291cFJlcXVlc3REYXRhICpkYXRhID0gV0VCS0lU
X1NPVVBfUkVRVUVTVF9EQVRBIChyZXF1ZXN0KTsKLQotCXJldHVybiBkYXRhLT5wcml2LT5jb250
ZW50X2xlbmd0aDsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotd2Via2l0X3NvdXBfcmVxdWVz
dF9kYXRhX2dldF9jb250ZW50X3R5cGUgKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQotewot
CVdlYktpdFNvdXBSZXF1ZXN0RGF0YSAqZGF0YSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQSAo
cmVxdWVzdCk7Ci0KLQlyZXR1cm4gZGF0YS0+cHJpdi0+Y29udGVudF90eXBlOwotfQotCi1zdGF0
aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2NsYXNzX2luaXQgKFdlYktpdFNvdXBS
ZXF1ZXN0RGF0YUNsYXNzICpyZXF1ZXN0X2RhdGFfY2xhc3MpCi17Ci0JR09iamVjdENsYXNzICpv
YmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdF9kYXRhX2NsYXNzKTsKLQlXZWJL
aXRTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzID0KLQkJV0VCS0lUX1NPVVBfUkVRVUVT
VF9DTEFTUyAocmVxdWVzdF9kYXRhX2NsYXNzKTsKLQotCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZSAocmVxdWVzdF9kYXRhX2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZh
dGUpKTsKLQotCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2Rh
dGFfZmluYWxpemU7Ci0KLQlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSB3ZWJraXRfc291cF9y
ZXF1ZXN0X2RhdGFfY2hlY2tfdXJpOwotCXJlcXVlc3RfY2xhc3MtPnNlbmQgPSB3ZWJraXRfc291
cF9yZXF1ZXN0X2RhdGFfc2VuZDsKLQlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF9sZW5ndGgg
PSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVuZ3RoOwotCXJlcXVlc3Rf
Y2xhc3MtPmdldF9jb250ZW50X3R5cGUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2Nv
bnRlbnRfdHlwZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGM5NjMxYTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1MiArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQt
dGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5M
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaWZuZGVmIFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQV9ICi0jZGVmaW5lIFdFQktJVF9TT1VQ
X1JFUVVFU1RfREFUQV9IIDEKLQotI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgotCi1HX0JFR0lO
X0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEgICAgICAgICAg
ICAod2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF90eXBlICgpKQotI2RlZmluZSBXRUJLSVRf
U09VUF9SRVFVRVNUX0RBVEEob2JqZWN0KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBLCBXZWJLaXRTb3Vw
UmVxdWVzdERhdGEpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEFfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09V
UF9SRVFVRVNUX0RBVEEsIFdlYktpdFNvdXBSZXF1ZXN0RGF0YUNsYXNzKSkKLSNkZWZpbmUgV0VC
S0lUX0lTX1NPVVBfUkVRVUVTVF9EQVRBKG9iamVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUgKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSkpCi0jZGVm
aW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfREFUQV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSkpCi0j
ZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSwg
V2ViS2l0U291cFJlcXVlc3REYXRhQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291
cFJlcXVlc3REYXRhUHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRlOwotCi10eXBl
ZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291cFJlcXVlc3QgcGFyZW50OwotCi0JV2ViS2l0U291cFJl
cXVlc3REYXRhUHJpdmF0ZSAqcHJpdjsKLX0gV2ViS2l0U291cFJlcXVlc3REYXRhOwotCi10eXBl
ZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7Ci19IFdlYktpdFNv
dXBSZXF1ZXN0RGF0YUNsYXNzOwotCi1HVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0
X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX1NPVVBfUkVR
VUVTVF9EQVRBX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDI0Y2NiMTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKKysrIC9kZXYvbnVs
bApAQCAtMSwzMzEgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50
LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogc291cC1yZXF1
ZXN0LWZpbGUuYzogZmlsZTogVVJJIHJlcXVlc3Qgb2JqZWN0Ci0gKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IFJlZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5j
bHVkZSAic291cC1yZXF1ZXN0LWZpbGUuaCIKLSNpbmNsdWRlICJzb3VwLWRpcmVjdG9yeS1pbnB1
dC1zdHJlYW0uaCIKLSNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgotI2luY2x1ZGUgPGdsaWIv
Z2kxOG4uaD4KLQotR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cFJlcXVlc3RGaWxlLCB3ZWJraXRf
c291cF9yZXF1ZXN0X2ZpbGUsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkKLQotc3RydWN0IF9X
ZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlIHsKLQlHRmlsZSAqZ2ZpbGU7Ci0KLQljaGFyICpt
aW1lX3R5cGU7Ci0JZ29mZnNldCBzaXplOwotfTsKLQotR0ZpbGUgKgotd2Via2l0X3NvdXBfcmVx
dWVzdF9maWxlX2dldF9maWxlIChXZWJLaXRTb3VwUmVxdWVzdEZpbGUgKmZpbGUpCi17Ci0JcmV0
dXJuIGdfb2JqZWN0X3JlZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpOwotfQotCi1zdGF0aWMgdm9pZAot
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmls
ZSkKLXsKLQlmaWxlLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChmaWxlLCBX
RUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0
ZSk7Ci0KLQlmaWxlLT5wcml2LT5zaXplID0gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRf
c291cF9yZXF1ZXN0X2ZpbGVfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKLXsKLQlXZWJLaXRT
b3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEUgKG9iamVjdCk7
Ci0KLQlpZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpCi0JCWdfb2JqZWN0X3VucmVmIChmaWxlLT5wcml2
LT5nZmlsZSk7Ci0JZ19mcmVlIChmaWxlLT5wcml2LT5taW1lX3R5cGUpOwotCi0JR19PQkpFQ1Rf
Q0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAo
b2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVf
Y2hlY2tfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCi0JCQkJICAgIFNvdXBVUkkg
ICAgICAqdXJpLAotCQkJCSAgICBHRXJyb3IgICAgICAqKmVycm9yKQotewotCS8qICJmaWxlOi9m
b28iIGlzIG5vdCB2YWxpZCAqLwotCWlmICghdXJpLT5ob3N0KQotCQlyZXR1cm4gRkFMU0U7Ci0K
LQkvKiBidXQgaXQgbXVzdCBiZSAiZmlsZTovLy8uLi4iIG9yICJmaWxlOi8vbG9jYWxob3N0Ly4u
LiIgKi8KLQlpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklfU0NIRU1FX0ZJTEUgJiYKLQkgICAg
KnVyaS0+aG9zdCAmJgotCSAgICBnX2FzY2lpX3N0cmNhc2VjbXAgKHVyaS0+aG9zdCwgImxvY2Fs
aG9zdCIpICE9IDApCi0JCXJldHVybiBGQUxTRTsKLQotCXJldHVybiBUUlVFOwotfQotCi1zdGF0
aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Z0cF9tYWluX2xvb3BfcXVpdCAoR09i
amVjdCAgICAgICpvYmplY3QsCi0JCQkJCSAgICAgR0FzeW5jUmVzdWx0ICpyZXN1bHQsCi0JCQkJ
CSAgICAgZ3BvaW50ZXIgbG9vcCkKLXsKLQlnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLX0KLQot
LyogVGhpcyBpcyBhIHNvbWV3aGF0IGhhY2t5IHdheSB0byBnZXQgRlRQIHRvIGFsbW9zdCB3b3Jr
LiBUaGUgcHJvcGVyIHdheSB0bwotICogZ2V0IEZUUCB0byBfcmVhbGx5XyB3b3JrIGludm9sdmVz
IGhhY2tpbmcgR0lPIHRvIGhhdmUgQVBJcyB0byBoYW5kbGUKLSAqIGNhbm9uY2lhbCBVUkxzLgot
ICovCi1zdGF0aWMgR0ZpbGUgKgotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxl
X2Z0cCAoU291cFVSSSAgICAgICAqdXJpLAotCQkJCQkgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxh
YmxlLAotCQkJCQkgIEdFcnJvciAgICAgICAqKmVycm9yKQotewotCVNvdXBVUkkgKmhvc3Q7Ci0J
Y2hhciAqczsKLQlHRmlsZSAqZmlsZSwgKnJlc3VsdDsKLQlHTW91bnQgKm1vdW50OwotCi0JaG9z
dCA9IHNvdXBfdXJpX2NvcHlfaG9zdCAodXJpKTsKLQlzID0gc291cF91cmlfdG9fc3RyaW5nICho
b3N0LCBGQUxTRSk7Ci0JZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaSAocyk7Ci0Jc291cF91cmlf
ZnJlZSAoaG9zdCk7Ci0JZ19mcmVlIChzKTsKLQotCW1vdW50ID0gZ19maWxlX2ZpbmRfZW5jbG9z
aW5nX21vdW50IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpOwotCWlmIChtb3VudCA9PSBOVUxM
ICYmIGdfZmlsZV9zdXBwb3J0c190aHJlYWRfY29udGV4dHMgKGZpbGUpKSB7Ci0JCUdNYWluQ29u
dGV4dCAqY29udGV4dCA9IGdfbWFpbl9jb250ZXh0X25ldyAoKTsKLQkJR01haW5Mb29wICpsb29w
ID0gZ19tYWluX2xvb3BfbmV3IChjb250ZXh0LCBGQUxTRSk7Ci0KLQkJZ19jbGVhcl9lcnJvciAo
ZXJyb3IpOwotCQlnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0IChjb250ZXh0KTsK
LQkJZ19maWxlX21vdW50X2VuY2xvc2luZ192b2x1bWUgKGZpbGUsCi0JCQkJCSAgICAgICBHX01P
VU5UX01PVU5UX05PTkUsCi0JCQkJCSAgICAgICBOVUxMLCAvKiBGSVhNRSEgKi8KLQkJCQkJICAg
ICAgIGNhbmNlbGxhYmxlLAotCQkJCQkgICAgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Z0
cF9tYWluX2xvb3BfcXVpdCwKLQkJCQkJICAgICAgIGxvb3ApOwotCQlnX21haW5fbG9vcF9ydW4g
KGxvb3ApOwotCQlnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQgKGNvbnRleHQpOwot
CQlnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0JCWdfbWFpbl9jb250ZXh0X3VucmVmIChjb250
ZXh0KTsKLQkJbW91bnQgPSBnX2ZpbGVfZmluZF9lbmNsb3NpbmdfbW91bnQgKGZpbGUsIGNhbmNl
bGxhYmxlLCBlcnJvcik7Ci0JfQotCWlmIChtb3VudCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsK
LQlnX29iamVjdF91bnJlZiAoZmlsZSk7Ci0KLQlmaWxlID0gZ19tb3VudF9nZXRfZGVmYXVsdF9s
b2NhdGlvbiAobW91bnQpOwotCWdfb2JqZWN0X3VucmVmIChtb3VudCk7Ci0KLQlzID0gZ19zdHJk
dXAgKHVyaS0+cGF0aCk7Ci0JaWYgKHN0cmNociAocywgJzsnKSkKLQkJKnN0cmNociAocywgJzsn
KSA9IDA7Ci0KLQlyZXN1bHQgPSBnX2ZpbGVfcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoIChmaWxlLCBz
KTsKLQlnX2ZyZWUgKHMpOwotCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKLQotCXJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3Vy
ZV9maWxlIChXZWJLaXRTb3VwUmVxdWVzdEZpbGUgICpmaWxlLAotCQkJCSAgICAgIEdDYW5jZWxs
YWJsZSAgICAgKmNhbmNlbGxhYmxlLAotCQkJCSAgICAgIEdFcnJvciAgICAgICAgICAqKmVycm9y
KQotewotCVNvdXBVUkkgKnVyaTsKLQotCWlmIChmaWxlLT5wcml2LT5nZmlsZSkKLQkJcmV0dXJu
IFRSVUU7Ci0KLQl1cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkgKFdFQktJVF9TT1VQ
X1JFUVVFU1QgKGZpbGUpKTsKLQlpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklfU0NIRU1FX0ZJ
TEUpIHsKLQkJLyogV2UgY2Fubm90IHVzZSBzb3VwX3VyaV9kZWNvZGUgYXMgaXQgaW5jb3JyZWN0
bHkKLQkJICogcmV0dXJucyBOVUxMIGZvciBpbmNvcnJlY3RseSBlbmNvZGVkIFVSSXMgKHRoYXQK
LQkJICogY291bGQgYmUgdmFsaWQgZmlsZW5hbWVzKS4gVGhpcyB3aWxsIGJlIGhvcGVmdWxseQot
CQkgKiBzaGlwcGVkIGluIGxpYnNvdXAgMi4zMi4xIGJ1dCB3ZSB3YW50IHRvIGxhbmQgdGhpcwot
CQkgKiBmaXJzdC4gVE9ETzogcmVwbGFjZSB1cmlfZGVjb2RlZF9jb3B5IGJ5Ci0JCSAqIHNvdXBf
dXJpX2RlY29kZSB3aGVuIHRoZSByZXF1aXJlZCBsaWJzb3VwIHZlcnNpb24KLQkJICogaXMgYnVt
cGVkIG91dCB0byAyLjMyLjEKLQkJICovCi0JCWdjaGFyICpkZWNvZGVkX3VyaSA9IHdlYmtpdF9z
b3VwX3JlcXVlc3RfdXJpX2RlY29kZWRfY29weSAodXJpLT5wYXRoLCBzdHJsZW4gKHVyaS0+cGF0
aCkpOwotCi0JCWlmIChkZWNvZGVkX3VyaSkgewotCQkJLyogRG8gbm90IHVzZSBuZXdfZm9yX3Vy
aSgpIGFzIHRoZSBkZWNvZGVkIFVSSQotCQkJICogIGNvdWxkIG5vdCBiZSBhIHZhbGlkIFVSSQot
CQkJICovCi0JCQlmaWxlLT5wcml2LT5nZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGggKGRlY29k
ZWRfdXJpKTsKLQkJCWdfZnJlZSAoZGVjb2RlZF91cmkpOwotCQl9Ci0KLQkJcmV0dXJuIFRSVUU7
Ci0JfSBlbHNlIGlmICh1cmktPnNjaGVtZSA9PSBTT1VQX1VSSV9TQ0hFTUVfRlRQKSB7Ci0JCWZp
bGUtPnByaXYtPmdmaWxlID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlX2Z0
cCAodXJpLAotCQkJCQkJCQkJICAgICAgY2FuY2VsbGFibGUsCi0JCQkJCQkJCQkgICAgICBlcnJv
cik7Ci0JCXJldHVybiBmaWxlLT5wcml2LT5nZmlsZSAhPSBOVUxMOwotCX0KLQotCWdfc2V0X2Vy
cm9yIChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX1VOU1VQUE9S
VEVEX1VSSV9TQ0hFTUUsCi0JCSAgICAgXyAoIlVuc3VwcG9ydGVkIFVSSSBzY2hlbWUgJyVzJyIp
LCB1cmktPnNjaGVtZSk7Ci0JcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgR0lucHV0U3RyZWFt
ICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kIChXZWJLaXRTb3VwUmVxdWVzdCAgICAg
ICAgICAqcmVxdWVzdCwKLQkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFi
bGUsCi0JCQkgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQotewotCVdlYktpdFNv
dXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7
Ci0JR0lucHV0U3RyZWFtICpzdHJlYW07Ci0JR0Vycm9yICpteV9lcnJvciA9IE5VTEw7Ci0KLQlp
ZiAoIXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVfZmlsZSAoZmlsZSwgY2FuY2VsbGFi
bGUsIGVycm9yKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzdHJlYW0gPSBHX0lOUFVUX1NUUkVBTSAo
Z19maWxlX3JlYWQgKGZpbGUtPnByaXYtPmdmaWxlLAotCQkJCQkgICAgICBjYW5jZWxsYWJsZSwg
Jm15X2Vycm9yKSk7Ci0JaWYgKHN0cmVhbSA9PSBOVUxMKSB7Ci0JCWlmIChnX2Vycm9yX21hdGNo
ZXMgKG15X2Vycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0lTX0RJUkVDVE9SWSkpIHsKLQkJ
CUdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvcjsKLQkJCWdfY2xlYXJfZXJyb3IgKCZteV9lcnJv
cik7Ci0JCQllbnVtZXJhdG9yID0gZ19maWxlX2VudW1lcmF0ZV9jaGlsZHJlbiAoZmlsZS0+cHJp
di0+Z2ZpbGUsCi0JCQkJCQkJCSIqIiwKLQkJCQkJCQkJR19GSUxFX1FVRVJZX0lORk9fTk9ORSwK
LQkJCQkJCQkJY2FuY2VsbGFibGUsCi0JCQkJCQkJCWVycm9yKTsKLQkJCWlmIChlbnVtZXJhdG9y
KSB7Ci0JCQkJc3RyZWFtID0gd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcg
KGVudW1lcmF0b3IsCi0JCQkJCQkJCQkJIHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3VyaSAocmVx
dWVzdCkpOwotCQkJCWdfb2JqZWN0X3VucmVmIChlbnVtZXJhdG9yKTsKLQkJCQlmaWxlLT5wcml2
LT5taW1lX3R5cGUgPSBnX3N0cmR1cCAoInRleHQvaHRtbCIpOwotCQkJfQotCQl9IGVsc2Ugewot
CQkJZ19wcm9wYWdhdGVfZXJyb3IgKGVycm9yLCBteV9lcnJvcik7Ci0JCX0KLQl9IGVsc2Ugewot
CQlHRmlsZUluZm8gKmluZm8gPSBnX2ZpbGVfcXVlcnlfaW5mbyAoZmlsZS0+cHJpdi0+Z2ZpbGUs
Ci0JCQkJCQkgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVOVF9UWVBFICIsIgot
CQkJCQkJICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCi0JCQkJCQkgICAgIDAs
IGNhbmNlbGxhYmxlLCBOVUxMKTsKLQkJaWYgKGluZm8pIHsKLQkJCWNvbnN0IGNoYXIgKmNvbnRl
bnRfdHlwZTsKLQkJCWZpbGUtPnByaXYtPnNpemUgPSBnX2ZpbGVfaW5mb19nZXRfc2l6ZSAoaW5m
byk7Ci0JCQljb250ZW50X3R5cGUgPSBnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBlIChpbmZv
KTsKLQotCQkJaWYgKGNvbnRlbnRfdHlwZSkKLQkJCQlmaWxlLT5wcml2LT5taW1lX3R5cGUgPSBn
X2NvbnRlbnRfdHlwZV9nZXRfbWltZV90eXBlIChjb250ZW50X3R5cGUpOwotCQkJZ19vYmplY3Rf
dW5yZWYgKGluZm8pOwotCQl9Ci0JfQotCi0JcmV0dXJuIHN0cmVhbTsKLX0KLQotc3RhdGljIHZv
aWQKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jX3RocmVhZCAoR1NpbXBsZUFz
eW5jUmVzdWx0ICpyZXMsCi0JCQkJCSAgICBHT2JqZWN0ICAgICAgICAgICAgKm9iamVjdCwKLQkJ
CQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAqY2FuY2VsbGFibGUpCi17Ci0JR0lucHV0U3RyZWFt
ICpzdHJlYW07Ci0JV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3Q7Ci0JR0Vycm9yICplcnJvciA9
IE5VTEw7Ci0KLQlyZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVCAob2JqZWN0KTsKLQotCXN0
cmVhbSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kIChyZXF1ZXN0LCBjYW5jZWxsYWJs
ZSwgJmVycm9yKTsKLQotCWlmIChzdHJlYW0gPT0gTlVMTCkgewotCQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlcywgZXJyb3IpOwotCQlnX2Vycm9yX2ZyZWUgKGVycm9y
KTsKLQl9IGVsc2UgewotCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRl
ciAocmVzLCBzdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi13
ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyAoV2ViS2l0U291cFJlcXVlc3QgICAg
ICAgICAgKnJlcXVlc3QsCi0JCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFi
bGUsCi0JCQkJICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAotCQkJCSAgICAgZ3Bv
aW50ZXIgdXNlcl9kYXRhKQotewotCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzOwotCi0JcmVzID0g
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHJlcXVlc3QpLCBjYWxsYmFjaywg
dXNlcl9kYXRhLCB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyk7Ci0KLQlnX3Np
bXBsZV9hc3luY19yZXN1bHRfcnVuX2luX3RocmVhZCAocmVzLCB3ZWJraXRfc291cF9yZXF1ZXN0
X2ZpbGVfc2VuZF9hc3luY190aHJlYWQsIEdfUFJJT1JJVFlfREVGQVVMVCwgY2FuY2VsbGFibGUp
OwotCWdfb2JqZWN0X3VucmVmIChyZXMpOwotfQotCi1zdGF0aWMgR0lucHV0U3RyZWFtICoKLXdl
YmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2ZpbmlzaCAoV2ViS2l0U291cFJlcXVlc3QgICAg
ICAgICAgKnJlcXVlc3QsCi0JCQkJICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwK
LQkJCQkgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCi17Ci0JR1NpbXBsZUFzeW5j
UmVzdWx0ICpzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCk7Ci0KLQlnX3dh
cm5faWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnIChzaW1wbGUp
ID09IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jKTsKLQotCWlmIChnX3NpbXBs
ZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yIChzaW1wbGUsIGVycm9yKSkKLQkJcmV0dXJu
IE5VTEw7Ci0KLQlyZXR1cm4gZ19vYmplY3RfcmVmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0
X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlKSk7Ci19Ci0KLXN0YXRpYyBnb2Zmc2V0Ci13ZWJraXRf
c291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfbGVuZ3RoIChXZWJLaXRTb3VwUmVxdWVzdCAq
cmVxdWVzdCkKLXsKLQlXZWJLaXRTb3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBXRUJLSVRfU09VUF9S
RVFVRVNUX0ZJTEUgKHJlcXVlc3QpOwotCi0JcmV0dXJuIGZpbGUtPnByaXYtPnNpemU7Ci19Ci0K
LXN0YXRpYyBjb25zdCBjaGFyICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVu
dF90eXBlIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKLXsKLQlXZWJLaXRTb3VwUmVxdWVz
dEZpbGUgKmZpbGUgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEUgKHJlcXVlc3QpOwotCi0JaWYg
KCFmaWxlLT5wcml2LT5taW1lX3R5cGUpCi0JCXJldHVybiAiYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtIjsKLQotCXJldHVybiBmaWxlLT5wcml2LT5taW1lX3R5cGU7Ci19Ci0KLXN0YXRpYyB2b2lk
Ci13ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfY2xhc3NfaW5pdCAoV2ViS2l0U291cFJlcXVlc3RG
aWxlQ2xhc3MgKnJlcXVlc3RfZmlsZV9jbGFzcykKLXsKLQlHT2JqZWN0Q2xhc3MgKm9iamVjdF9j
bGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2ZpbGVfY2xhc3MpOwotCVdlYktpdFNvdXBS
ZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQotCQlXRUJLSVRfU09VUF9SRVFVRVNUX0NMQVNT
IChyZXF1ZXN0X2ZpbGVfY2xhc3MpOwotCi0JZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChyZXF1
ZXN0X2ZpbGVfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZSkpOwot
Ci0Jb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9maW5h
bGl6ZTsKLQotCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZmlsZV9jaGVja191cmk7Ci0JcmVxdWVzdF9jbGFzcy0+c2VuZCA9IHdlYmtpdF9zb3VwX3JlcXVl
c3RfZmlsZV9zZW5kOwotCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSB3ZWJraXRfc291cF9y
ZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYzsKLQlyZXF1ZXN0X2NsYXNzLT5zZW5kX2ZpbmlzaCA9IHdl
YmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2ZpbmlzaDsKLQlyZXF1ZXN0X2NsYXNzLT5nZXRf
Y29udGVudF9sZW5ndGggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfbGVu
Z3RoOwotCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X3R5cGUgPSB3ZWJraXRfc291cF9yZXF1
ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfdHlwZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1OWU4MmEuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdp
ZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSwgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRV9ICi0jZGVm
aW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRV9IIDEKLQotI2luY2x1ZGUgInNvdXAtcmVxdWVz
dC5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNU
X0ZJTEUgICAgICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF90eXBlICgpKQot
I2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEUob2JqZWN0KSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9G
SUxFLCBXZWJLaXRTb3VwUmVxdWVzdEZpbGUpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNU
X0ZJTEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUsIFdlYktpdFNvdXBSZXF1ZXN0RmlsZUNsYXNz
KSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9GSUxFKG9iamVjdCkgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVF
U1RfRklMRSkpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfRklMRV9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JF
UVVFU1RfRklMRSkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRV9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1RfRklMRSwgV2ViS2l0U291cFJlcXVlc3RGaWxlQ2xhc3MpKQotCi10eXBlZGVmIHN0
cnVjdCBfV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdEZpbGVQ
cml2YXRlOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291cFJlcXVlc3QgcGFyZW50Owot
Ci0JV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZSAqcHJpdjsKLX0gV2ViS2l0U291cFJlcXVl
c3RGaWxlOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JV2ViS2l0U291cFJlcXVlc3RDbGFzcyBwYXJl
bnQ7Ci19IFdlYktpdFNvdXBSZXF1ZXN0RmlsZUNsYXNzOwotCi1HVHlwZSB3ZWJraXRfc291cF9y
ZXF1ZXN0X2ZpbGVfZ2V0X3R5cGUgKHZvaWQpOwotCi1HRmlsZSAgKndlYmtpdF9zb3VwX3JlcXVl
c3RfZmlsZV9nZXRfZmlsZSAoV2ViS2l0U291cFJlcXVlc3RGaWxlICpmaWxlKTsKLQotR19FTkRf
REVDTFMKLQotI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRV9IICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWh0dHAuYyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtaHR0cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzdmZDcy
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtaHR0cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzU2ICswLDAgQEAKLS8q
IC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMt
b2Zmc2V0OiA4IC0qLSAqLwotLyoKLSAqIHNvdXAtcmVxdWVzdC1odHRwLmM6IGh0dHA6IFVSSSBy
ZXF1ZXN0IG9iamVjdAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0j
aW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KLQot
I2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKLSNpbmNsdWRlICJzb3VwLWNhY2hlLXByaXZhdGUuaCIK
LSNpbmNsdWRlICJzb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgiCi0jaW5jbHVkZSAic291cC1yZXF1
ZXN0LWh0dHAuaCIKLQotR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cFJlcXVlc3RIVFRQLCB3ZWJr
aXRfc291cF9yZXF1ZXN0X2h0dHAsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkKLQotc3RydWN0
IF9XZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlIHsKLQlTb3VwTWVzc2FnZSAqbXNnOwotfTsK
LQotLyoqCi0gKiB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2U6Ci0gKiBAaHR0
cDogYSAjV2ViS2l0U291cFJlcXVlc3RIVFRQIG9iamVjdAotICoKLSAqIEdldHMgYSBuZXcgcmVm
ZXJlbmNlIHRvIHRoZSAjU291cE1lc3NhZ2UgYXNzb2NpYXRlZCB0byB0aGlzIFNvdXBSZXF1ZXN0
Ci0gKgotICogUmV0dXJuczogYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSAjU291cE1lc3NhZ2UKLSAq
Ki8KLVNvdXBNZXNzYWdlICoKLXdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZSAo
V2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwKQotewotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChX
RUJLSVRfSVNfU09VUF9SRVFVRVNUX0hUVFAgKGh0dHApLCBOVUxMKTsKLQotCXJldHVybiBnX29i
amVjdF9yZWYgKGh0dHAtPnByaXYtPm1zZyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291
cF9yZXF1ZXN0X2h0dHBfaW5pdCAoV2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwKQotewotCWh0
dHAtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKGh0dHAsIFdFQktJVF9UWVBF
X1NPVVBfUkVRVUVTVF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlKTsKLX0KLQot
c3RhdGljIGdib29sZWFuCi13ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfY2hlY2tfdXJpIChXZWJL
aXRTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCi0JCQkJICAgIFNvdXBVUkkgICAgICAqdXJpLAotCQkJ
CSAgICBHRXJyb3IgICAgICAqKmVycm9yKQotewotCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0
cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7Ci0KLQlpZiAoIVNPVVBfVVJJ
X1ZBTElEX0ZPUl9IVFRQICh1cmkpKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlodHRwLT5wcml2LT5t
c2cgPSBzb3VwX21lc3NhZ2VfbmV3X2Zyb21fdXJpIChTT1VQX01FVEhPRF9HRVQsIHVyaSk7Ci0J
cmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBf
ZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKLXsKLQlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0
dHAgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAgKG9iamVjdCk7Ci0KLQlpZiAoaHR0cC0+cHJp
di0+bXNnKQotCQlnX29iamVjdF91bnJlZiAoaHR0cC0+cHJpdi0+bXNnKTsKLQotCUdfT0JKRUNU
X0NMQVNTICh3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUg
KG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBHSW5wdXRTdHJlYW0gKgotd2Via2l0X3NvdXBfcmVxdWVz
dF9odHRwX3NlbmQgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJICAg
ICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCSAgICAgICBHRXJyb3Ig
ICAgICAgICAgICAgICoqZXJyb3IpCi17Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0
cHN0cmVhbTsKLQlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9SRVFV
RVNUX0hUVFAgKHJlcXVlc3QpOwotCi0JaHR0cHN0cmVhbSA9IHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX25ldyAod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAocmVxdWVzdCks
IGh0dHAtPnByaXYtPm1zZyk7Ci0JaWYgKCF3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9z
ZW5kIChodHRwc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3IpKSB7Ci0JCWdfb2JqZWN0X3VucmVm
IChodHRwc3RyZWFtKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiAoR0lucHV0U3RyZWFt
ICopaHR0cHN0cmVhbTsKLX0KLQotCi1zdGF0aWMgdm9pZAotc2VudF9hc3luYyAoR09iamVjdCAq
c291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCVdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0gPSBXRUJLSVRfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTSAoc291cmNlKTsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZSA9IHVzZXJf
ZGF0YTsKLQlHRXJyb3IgKmVycm9yID0gTlVMTDsKLQotCWlmICh3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZW5kX2ZpbmlzaCAoaHR0cHN0cmVhbSwgcmVzdWx0LCAmZXJyb3IpKSB7Ci0J
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGh0dHBz
dHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKLQl9IGVsc2UgewotCQlnX3NpbXBsZV9hc3luY19yZXN1
bHRfc2V0X2Zyb21fZXJyb3IgKHNpbXBsZSwgZXJyb3IpOwotCQlnX2Vycm9yX2ZyZWUgKGVycm9y
KTsKLQkJZ19vYmplY3RfdW5yZWYgKGh0dHBzdHJlYW0pOwotCX0KLQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfY29tcGxldGUgKHNpbXBsZSk7Ci0JZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7Ci19Ci0K
LQotdHlwZWRlZiBzdHJ1Y3QgewotCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqcmVxOwotCVNvdXBN
ZXNzYWdlICpvcmlnaW5hbDsKLQlHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlOwotCUdBc3luY1Jl
YWR5Q2FsbGJhY2sgY2FsbGJhY2s7Ci0JZ3BvaW50ZXIgdXNlcl9kYXRhOwotfSBDb25kaXRpb25h
bEhlbHBlcjsKLQotCi1zdGF0aWMgdm9pZAotY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiIChTb3Vw
U2Vzc2lvbiAqc2Vzc2lvbiwgU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgdXNlcl9kYXRhKQot
ewotCUNvbmRpdGlvbmFsSGVscGVyICpoZWxwZXIgPSAoQ29uZGl0aW9uYWxIZWxwZXIgKil1c2Vy
X2RhdGE7Ci0JR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7Ci0JV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbSAqaHR0cHN0cmVhbTsKLQotCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9u
ZXcgKEdfT0JKRUNUIChoZWxwZXItPnJlcSksCi0JCQkJCSAgICBoZWxwZXItPmNhbGxiYWNrLCBo
ZWxwZXItPnVzZXJfZGF0YSwKLQkJCQkJICAgIGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYik7Ci0K
LQlpZiAobXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpIHsKLQkJ
V2ViS2l0U291cENhY2hlICpjYWNoZSA9IChXZWJLaXRTb3VwQ2FjaGUgKilzb3VwX3Nlc3Npb25f
Z2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpOwotCi0JCWh0dHBz
dHJlYW0gPSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqKXdlYmtpdF9zb3VwX2NhY2hlX3Nl
bmRfcmVzcG9uc2UgKGNhY2hlLCBtc2cpOwotCQlpZiAoaHR0cHN0cmVhbSkgewotCQkJY29uc3Qg
Z2NoYXIgKmNvbnRlbnRfdHlwZTsKLQotCQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9y
ZXNfZ3BvaW50ZXIgKHNpbXBsZSwgaHR0cHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOwotCi0JCQlz
b3VwX21lc3NhZ2VfZ290X2hlYWRlcnMgKGhlbHBlci0+b3JpZ2luYWwpOwotCi0JCQkvKiBGSVhN
RTogVW5jb21tZW50IHRoaXMgd2hlbiB0aGlzIGJlY29tZXMgcGFydCBvZiBsaWJzb3VwCi0JCQkg
KiBpZiAoIXNvdXBfbWVzc2FnZV9kaXNhYmxlc19mZWF0dXJlKGhlbHBlci0+b3JpZ2luYWwsIFNP
VVBfVFlQRV9DT05URU5UX1NOSUZGRVIpKSB7Ci0JCQkgKiAJY29uc3QgZ2NoYXIgKmNvbnRlbnRf
dHlwZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKG1zZy0+cmVzcG9u
c2VfaGVhZGVycywgTlVMTCk7Ci0JCQkgKiAJc291cF9tZXNzYWdlX2NvbnRlbnRfc25pZmZlZCAo
aGVscGVyLT5vcmlnaW5hbCwgY29udGVudF90eXBlLCBOVUxMKTsKLQkJCSAqIH0KLQkJCSAqLwot
CQkJY29udGVudF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfdHlwZSAo
bXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKLQkJCXNvdXBfbWVzc2FnZV9jb250ZW50X3Nu
aWZmZWQgKGhlbHBlci0+b3JpZ2luYWwsIGNvbnRlbnRfdHlwZSwgTlVMTCk7Ci0KLQkJCWdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKLQotCQkJc291cF9tZXNzYWdlX2Zp
bmlzaGVkIChoZWxwZXItPm9yaWdpbmFsKTsKLQotCQkJZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7
Ci0JCX0gZWxzZSB7Ci0JCQkvKiBBc2sgYWdhaW4gZm9yIHRoZSByZXNvdXJjZSwgc29tZWhvdyB0
aGUgY2FjaGUgY2Fubm90IGxvY2F0ZSBpdCAqLwotCQkJaHR0cHN0cmVhbSA9IHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoc2Vzc2lvbiwgaGVscGVyLT5vcmlnaW5hbCk7Ci0JCQl3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBHX1BS
SU9SSVRZX0RFRkFVTFQsCi0JCQkJCQkJCSAgaGVscGVyLT5jYW5jZWxsYWJsZSwgc2VudF9hc3lu
Yywgc2ltcGxlKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEl0IGlzIGluIHRoZSBjYWNoZSBidXQg
aXQgd2FzIG1vZGlmaWVkIHJlbW90ZWx5ICovCi0JCWh0dHBzdHJlYW0gPSB3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9uZXcgKHNlc3Npb24sIGhlbHBlci0+b3JpZ2luYWwpOwotCQl3ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBHX1BSSU9S
SVRZX0RFRkFVTFQsCi0JCQkJCQkJICBoZWxwZXItPmNhbmNlbGxhYmxlLCBzZW50X2FzeW5jLCBz
aW1wbGUpOwotCX0KLQotCWdfb2JqZWN0X3VucmVmIChoZWxwZXItPnJlcSk7Ci0JZ19vYmplY3Rf
dW5yZWYgKGhlbHBlci0+b3JpZ2luYWwpOwotCWdfc2xpY2VfZnJlZSAoQ29uZGl0aW9uYWxIZWxw
ZXIsIGhlbHBlcik7Ci19Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlXZWJLaXRTb3VwUmVxdWVzdEhU
VFAgKmh0dHA7Ci0JR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjazsKLQlncG9pbnRlciB1c2Vy
X2RhdGE7Ci0JV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKLX0gU2VuZEFz
eW5jSGVscGVyOwotCi1zdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9h
c3luYyAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkJCQkgR0NhbmNl
bGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAotCQkJCQkJIEdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCi0JCQkJCQkgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotc3RhdGljIGdib29sZWFu
Ci1zZW5kX2FzeW5jX2NiIChncG9pbnRlciBkYXRhKQotewotCUdTaW1wbGVBc3luY1Jlc3VsdCAq
c2ltcGxlOwotCVNlbmRBc3luY0hlbHBlciAqaGVscGVyID0gKFNlbmRBc3luY0hlbHBlciAqKWRh
dGE7Ci0JY29uc3QgZ2NoYXIgKmNvbnRlbnRfdHlwZTsKLQotCXNpbXBsZSA9IGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChoZWxwZXItPmh0dHApLAotCQkJCQkgICAgaGVscGVy
LT5jYWxsYmFjaywgaGVscGVyLT51c2VyX2RhdGEsCi0JCQkJCSAgICB3ZWJraXRfc291cF9yZXF1
ZXN0X2h0dHBfc2VuZF9hc3luYyk7Ci0JZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNf
Z3BvaW50ZXIgKHNpbXBsZSwgaGVscGVyLT5odHRwc3RyZWFtLCBnX29iamVjdF91bnJlZik7Ci0K
LQkvKiBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgKi8KLQlzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyAo
aGVscGVyLT5odHRwLT5wcml2LT5tc2csIFNPVVBfU1RBVFVTX09LKTsKLQotCS8qIElzc3VlIHNp
Z25hbHMgICovCi0Jc291cF9tZXNzYWdlX2dvdF9oZWFkZXJzIChoZWxwZXItPmh0dHAtPnByaXYt
Pm1zZyk7Ci0KLQkvKiBGSVhNRTogVW5jb21tZW50IHRoaXMgd2hlbiB0aGlzIGJlY29tZXMgcGFy
dCBvZiBsaWJzb3VwCi0JICogaWYgKCFzb3VwX21lc3NhZ2VfZGlzYWJsZXNfZmVhdHVyZShoZWxw
ZXItPmh0dHAtPnByaXYtPm1zZywgU09VUF9UWVBFX0NPTlRFTlRfU05JRkZFUikpIHsKLQkgKglj
b25zdCBnY2hhciAqY29udGVudF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRl
bnRfdHlwZSAoaGVscGVyLT5odHRwLT5wcml2LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwp
OwotCSAqCXNvdXBfbWVzc2FnZV9jb250ZW50X3NuaWZmZWQgKGhlbHBlci0+aHR0cC0+cHJpdi0+
bXNnLCBjb250ZW50X3R5cGUsIE5VTEwpOwotCSAqIH0KLQkgKi8KLQljb250ZW50X3R5cGUgPSBz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF90eXBlIChoZWxwZXItPmh0dHAtPnByaXYt
Pm1zZy0+cmVzcG9uc2VfaGVhZGVycywgTlVMTCk7Ci0Jc291cF9tZXNzYWdlX2NvbnRlbnRfc25p
ZmZlZCAoaGVscGVyLT5odHRwLT5wcml2LT5tc2csIGNvbnRlbnRfdHlwZSwgTlVMTCk7Ci0KLQln
X3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHNpbXBsZSk7Ci0KLQlzb3VwX21lc3NhZ2Vf
ZmluaXNoZWQgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnKTsKLQotCWdfb2JqZWN0X3VucmVmIChz
aW1wbGUpOwotCi0JZ19vYmplY3RfdW5yZWYgKGhlbHBlci0+aHR0cCk7Ci0JZ19zbGljZV9mcmVl
IChTZW5kQXN5bmNIZWxwZXIsIGhlbHBlcik7Ci0KLQlyZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRp
YyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyAoV2ViS2l0U291cFJl
cXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAq
Y2FuY2VsbGFibGUsCi0JCQkJICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAotCQkJ
CSAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0
cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7Ci0JV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKLQlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKLQlT
b3VwU2Vzc2lvbiAqc2Vzc2lvbjsKLQlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlOwotCi0Jc2Vzc2lv
biA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKHJlcXVlc3QpOwotCWNhY2hlID0g
KFdlYktpdFNvdXBDYWNoZSAqKXNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VC
S0lUX1RZUEVfU09VUF9DQUNIRSk7Ci0KLQlpZiAoY2FjaGUpIHsKLQkJV2ViS2l0U291cENhY2hl
UmVzcG9uc2UgcmVzcG9uc2U7Ci0KLQkJcmVzcG9uc2UgPSB3ZWJraXRfc291cF9jYWNoZV9oYXNf
cmVzcG9uc2UgKGNhY2hlLCBodHRwLT5wcml2LT5tc2cpOwotCQlpZiAocmVzcG9uc2UgPT0gV0VC
S0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0gpIHsKLQkJCVdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW0gKmh0dHBzdHJlYW07Ci0KLQkJCWh0dHBzdHJlYW0gPSAoV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbSAqKQotCQkJCXdlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKGNhY2hlLCBT
T1VQX01FU1NBR0UgKGh0dHAtPnByaXYtPm1zZykpOwotCi0JCQkvKiBDYWNoZWQgcmVzb3VyY2Ug
ZmlsZSBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZCBvdXRzaWRlCi0JCQkgKi8KLQkJCWlmIChodHRw
c3RyZWFtKSB7Ci0JCQkJLyogRG8gcmV0dXJuIHRoZSBzdHJlYW0gYXN5bmNocm9ub3VzbHkgYXMg
aW4KLQkJCQkgKiB0aGUgb3RoZXIgY2FzZXMuIEl0J3Mgbm90IGVub3VnaCB0byB1c2UKLQkJCQkg
KiBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZSBhcwotCQkJCSAqIHRoZSBz
aWduYWxzIG11c3QgYmUgYWxzbyBlbWl0dGVkCi0JCQkJICogYXN5bmNocm9ub3VzbHkKLQkJCQkg
Ki8KLQkJCQlTZW5kQXN5bmNIZWxwZXIgKmhlbHBlciA9IGdfc2xpY2VfbmV3IChTZW5kQXN5bmNI
ZWxwZXIpOwotCQkJCWhlbHBlci0+aHR0cCA9IGdfb2JqZWN0X3JlZiAoaHR0cCk7Ci0JCQkJaGVs
cGVyLT5jYWxsYmFjayA9IGNhbGxiYWNrOwotCQkJCWhlbHBlci0+dXNlcl9kYXRhID0gdXNlcl9k
YXRhOwotCQkJCWhlbHBlci0+aHR0cHN0cmVhbSA9IGh0dHBzdHJlYW07Ci0JCQkJZ190aW1lb3V0
X2FkZCAoMCwgc2VuZF9hc3luY19jYiwgaGVscGVyKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0g
ZWxzZSBpZiAocmVzcG9uc2UgPT0gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFM
SURBVElPTikgewotCQkJU291cE1lc3NhZ2UgKmNvbmRpdGlvbmFsX21zZzsKLQkJCUNvbmRpdGlv
bmFsSGVscGVyICpoZWxwZXI7Ci0KLQkJCWNvbmRpdGlvbmFsX21zZyA9IHdlYmtpdF9zb3VwX2Nh
Y2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QgKGNhY2hlLCBodHRwLT5wcml2LT5tc2cp
OwotCi0JCQloZWxwZXIgPSBnX3NsaWNlX25ldzAgKENvbmRpdGlvbmFsSGVscGVyKTsKLQkJCWhl
bHBlci0+cmVxID0gZ19vYmplY3RfcmVmIChodHRwKTsKLQkJCWhlbHBlci0+b3JpZ2luYWwgPSBn
X29iamVjdF9yZWYgKGh0dHAtPnByaXYtPm1zZyk7Ci0JCQloZWxwZXItPmNhbmNlbGxhYmxlID0g
Y2FuY2VsbGFibGU7Ci0JCQloZWxwZXItPmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0JCQloZWxwZXIt
PnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLQkJCXNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIChz
ZXNzaW9uLCBjb25kaXRpb25hbF9tc2csCi0JCQkJCQkgICAgY29uZGl0aW9uYWxfZ2V0X3JlYWR5
X2NiLAotCQkJCQkJICAgIGhlbHBlcik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlzaW1wbGUg
PSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoaHR0cCksCi0JCQkJCSAgICBj
YWxsYmFjaywgdXNlcl9kYXRhLAotCQkJCQkgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3Nl
bmRfYXN5bmMpOwotCWh0dHBzdHJlYW0gPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9u
ZXcgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKHJlcXVlc3QpLAotCQkJCQkJCWh0
dHAtPnByaXYtPm1zZyk7Ci0Jd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3lu
YyAoaHR0cHN0cmVhbSwgR19QUklPUklUWV9ERUZBVUxULAotCQkJCQkJICBjYW5jZWxsYWJsZSwg
c2VudF9hc3luYywgc2ltcGxlKTsKLX0KLQotc3RhdGljIEdJbnB1dFN0cmVhbSAqCi13ZWJraXRf
c291cF9yZXF1ZXN0X2h0dHBfc2VuZF9maW5pc2ggKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAg
ICpyZXF1ZXN0LAotCQkJCSAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCi0JCQkJ
ICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQotewotCUdTaW1wbGVBc3luY1Jlc3Vs
dCAqc2ltcGxlOwotCi0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVxdWVzdCksIHdlYmtpdF9zb3VwX3JlcXVl
c3RfaHR0cF9zZW5kX2FzeW5jKSB8fCBnX3NpbXBsZV9hc3luY19yZXN1bHRfaXNfdmFsaWQgKHJl
c3VsdCwgR19PQkpFQ1QgKHJlcXVlc3QpLCBjb25kaXRpb25hbF9nZXRfcmVhZHlfY2IpLCBOVUxM
KTsKLQotCXNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKLQlpZiAoZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJvcikpCi0JCXJl
dHVybiBOVUxMOwotCXJldHVybiBnX29iamVjdF9yZWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9n
ZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUpKTsKLX0KLQotc3RhdGljIGdvZmZzZXQKLXdlYmtp
dF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF9sZW5ndGggKFdlYktpdFNvdXBSZXF1ZXN0
ICpyZXF1ZXN0KQotewotCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFdFQktJVF9TT1VQ
X1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7Ci0KLQlyZXR1cm4gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0X2NvbnRlbnRfbGVuZ3RoIChodHRwLT5wcml2LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMpOwot
fQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi13ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X2Nv
bnRlbnRfdHlwZSAoV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCi17Ci0JV2ViS2l0U291cFJl
cXVlc3RIVFRQICpodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKLQot
CXJldHVybiBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF90eXBlIChodHRwLT5wcml2
LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0
X3NvdXBfcmVxdWVzdF9odHRwX2NsYXNzX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0SFRUUENsYXNz
ICpyZXF1ZXN0X2h0dHBfY2xhc3MpCi17Ci0JR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBH
X09CSkVDVF9DTEFTUyAocmVxdWVzdF9odHRwX2NsYXNzKTsKLQlXZWJLaXRTb3VwUmVxdWVzdENs
YXNzICpyZXF1ZXN0X2NsYXNzID0KLQkJV0VCS0lUX1NPVVBfUkVRVUVTVF9DTEFTUyAocmVxdWVz
dF9odHRwX2NsYXNzKTsKLQotCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdF9odHRw
X2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBSZXF1ZXN0SFRUUFByaXZhdGUpKTsKLQotCW9iamVj
dF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZmluYWxpemU7Ci0K
LQlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfY2hl
Y2tfdXJpOwotCXJlcXVlc3RfY2xhc3MtPnNlbmQgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBf
c2VuZDsKLQlyZXF1ZXN0X2NsYXNzLT5zZW5kX2FzeW5jID0gd2Via2l0X3NvdXBfcmVxdWVzdF9o
dHRwX3NlbmRfYXN5bmM7Ci0JcmVxdWVzdF9jbGFzcy0+c2VuZF9maW5pc2ggPSB3ZWJraXRfc291
cF9yZXF1ZXN0X2h0dHBfc2VuZF9maW5pc2g7Ci0JcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRf
bGVuZ3RoID0gd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X2xlbmd0aDsKLQly
ZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF90eXBlID0gd2Via2l0X3NvdXBfcmVxdWVzdF9odHRw
X2dldF9jb250ZW50X3R5cGU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDZhODIxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsg
aW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEsIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2lmbmRlZiBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFBfSAotI2RlZmluZSBXRUJL
SVRfU09VUF9SRVFVRVNUX0hUVFBfSCAxCi0KLSNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKLQot
R19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQICAg
ICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUg
V0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQKG9iamVjdCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QgKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCwgV2Vi
S2l0U291cFJlcXVlc3RIVFRQKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9U
WVBFX1NPVVBfUkVRVUVTVF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhUVFBDbGFzcykpCi0jZGVm
aW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfSFRUUChvYmplY3QpICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFICgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFAp
KQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0hUVFBfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hU
VFApKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFBfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNU
X0hUVFAsIFdlYktpdFNvdXBSZXF1ZXN0SFRUUENsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFNvdXBSZXF1ZXN0SFRUUFByaXZhdGUgV2ViS2l0U291cFJlcXVlc3RIVFRQUHJpdmF0ZTsK
LQotdHlwZWRlZiBzdHJ1Y3QgewotCVdlYktpdFNvdXBSZXF1ZXN0IHBhcmVudDsKLQotCVdlYktp
dFNvdXBSZXF1ZXN0SFRUUFByaXZhdGUgKnByaXY7Ci19IFdlYktpdFNvdXBSZXF1ZXN0SFRUUDsK
LQotdHlwZWRlZiBzdHJ1Y3QgewotCVdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50OwotfSBX
ZWJLaXRTb3VwUmVxdWVzdEhUVFBDbGFzczsKLQotR1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdF9o
dHRwX2dldF90eXBlICh2b2lkKTsKLQotU291cE1lc3NhZ2UgICp3ZWJraXRfc291cF9yZXF1ZXN0
X2h0dHBfZ2V0X21lc3NhZ2UgKFdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCk7Ci0KLUdfRU5E
X0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFBfSCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmI5ZjVhLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDMxMiArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsg
dGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0g
Ki8KLS8qCi0gKiBzb3VwLXJlcXVlc3QuYzogUHJvdG9jb2wtaW5kZXBlbmRlbnQgc3RyZWFtaW5n
IHJlcXVlc3QgaW50ZXJmYWNlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIElu
Yy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklH
X0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi5o
PgotCi0jaW5jbHVkZSAic291cC1yZXF1ZXN0LmgiCi0jaW5jbHVkZSAic291cC1yZXF1ZXN0ZXIu
aCIKLQotLyoqCi0gKiBTRUNUSU9OOnNvdXAtcmVxdWVzdAotICogQHNob3J0X2Rlc2NyaXB0aW9u
OiBQcm90b2NvbC1pbmRlcGVuZGVudCBzdHJlYW1pbmcgcmVxdWVzdCBpbnRlcmZhY2UKLSAqCi0g
KiBGSVhNRQotICoqLwotCi0vKioKLSAqIFdlYktpdFNvdXBSZXF1ZXN0OgotICoKLSAqIEZJWE1F
Ci0gKgotICogU2luY2U6IDIuMzAKLSAqKi8KLQotc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVx
dWVzdF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCAoR0luaXRhYmxlSWZhY2UgKmluaXRhYmxlX2lu
dGVyZmFjZSk7Ci0KLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChXZWJLaXRTb3VwUmVxdWVzdCwg
d2Via2l0X3NvdXBfcmVxdWVzdCwgR19UWVBFX09CSkVDVCwKLQkJCSBHX0lNUExFTUVOVF9JTlRF
UkZBQ0UgKEdfVFlQRV9JTklUQUJMRSwKLQkJCQkJCXdlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFi
bGVfaW50ZXJmYWNlX2luaXQpKQotCi1lbnVtIHsKLQlQUk9QXzAsCi0JUFJPUF9VUkksCi0JUFJP
UF9TRVNTSU9OCi19OwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0UHJpdmF0ZSB7Ci0JU291
cFVSSSAqdXJpOwotCVNvdXBTZXNzaW9uICpzZXNzaW9uOwotfTsKLQotc3RhdGljIHZvaWQKLXdl
YmtpdF9zb3VwX3JlcXVlc3RfaW5pdCAoV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCi17Ci0J
cmVxdWVzdC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAocmVxdWVzdCwgV0VC
S0lUX1RZUEVfU09VUF9SRVFVRVNULCBXZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUpOwotfQotCi1z
dGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0
KQotewotCVdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVCAo
b2JqZWN0KTsKLQotCWlmIChyZXF1ZXN0LT5wcml2LT51cmkpCi0JCXNvdXBfdXJpX2ZyZWUgKHJl
cXVlc3QtPnByaXYtPnVyaSk7Ci0JaWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pCi0JCWdfb2Jq
ZWN0X3VucmVmIChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKLQotCUdfT0JKRUNUX0NMQVNTICh3
ZWJraXRfc291cF9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQot
Ci1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9zZXRfcHJvcGVydHkgKEdPYmplY3Qg
ICAgICAqb2JqZWN0LAotCQkJCSAgZ3VpbnQgcHJvcF9pZCwKLQkJCQkgIGNvbnN0IEdWYWx1ZSAq
dmFsdWUsCi0JCQkJICBHUGFyYW1TcGVjICAgKnBzcGVjKQotewotCVdlYktpdFNvdXBSZXF1ZXN0
ICpyZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVCAob2JqZWN0KTsKLQotCXN3aXRjaCAocHJv
cF9pZCkgewotCWNhc2UgUFJPUF9VUkk6Ci0JCWlmIChyZXF1ZXN0LT5wcml2LT51cmkpCi0JCQlz
b3VwX3VyaV9mcmVlIChyZXF1ZXN0LT5wcml2LT51cmkpOwotCQlyZXF1ZXN0LT5wcml2LT51cmkg
PSBnX3ZhbHVlX2R1cF9ib3hlZCAodmFsdWUpOwotCQlicmVhazsKLQljYXNlIFBST1BfU0VTU0lP
TjoKLQkJaWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pCi0JCQlnX29iamVjdF91bnJlZiAocmVx
dWVzdC0+cHJpdi0+c2Vzc2lvbik7Ci0JCXJlcXVlc3QtPnByaXYtPnNlc3Npb24gPSBnX3ZhbHVl
X2R1cF9vYmplY3QgKHZhbHVlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLQkJYnJlYWs7
Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfcHJvcGVydHkg
KEdPYmplY3QgICAgKm9iamVjdCwKLQkJCQkgIGd1aW50IHByb3BfaWQsCi0JCQkJICBHVmFsdWUg
ICAgICp2YWx1ZSwKLQkJCQkgIEdQYXJhbVNwZWMgKnBzcGVjKQotewotCVdlYktpdFNvdXBSZXF1
ZXN0ICpyZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVCAob2JqZWN0KTsKLQotCXN3aXRjaCAo
cHJvcF9pZCkgewotCWNhc2UgUFJPUF9VUkk6Ci0JCWdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwg
cmVxdWVzdC0+cHJpdi0+dXJpKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUk9QX1NFU1NJT046Ci0JCWdf
dmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHJlcXVlc3QtPnByaXYtPnNlc3Npb24pOwotCQlicmVh
azsKLQlkZWZhdWx0OgotCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVj
dCwgcHJvcF9pZCwgcHNwZWMpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgot
d2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbml0IChHSW5pdGFibGUgICAgICppbml0YWJs
ZSwKLQkJCQkgICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKLQkJCQkgICBHRXJyb3IgICAg
ICAgKiplcnJvcikKLXsKLQlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCA9IFdFQktJVF9TT1VQ
X1JFUVVFU1QgKGluaXRhYmxlKTsKLQlnYm9vbGVhbiBvazsKLQotCWlmICghcmVxdWVzdC0+cHJp
di0+dXJpKSB7Ci0JCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJ
VF9TT1VQX0VSUk9SX0JBRF9VUkksCi0JCQkgICAgIF8gKCJObyBVUkkgcHJvdmlkZWQiKSk7Ci0J
CXJldHVybiBGQUxTRTsKLQl9Ci0KLQlvayA9IFdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNT
IChpbml0YWJsZSktPgotCQljaGVja191cmkgKHJlcXVlc3QsIHJlcXVlc3QtPnByaXYtPnVyaSwg
ZXJyb3IpOwotCi0JaWYgKCFvayAmJiBlcnJvcikgewotCQljaGFyICp1cmlfc3RyaW5nID0gc291
cF91cmlfdG9fc3RyaW5nIChyZXF1ZXN0LT5wcml2LT51cmksIEZBTFNFKTsKLQkJZ19zZXRfZXJy
b3IgKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfQkFEX1VSSSwK
LQkJCSAgICAgXyAoIkludmFsaWQgJyVzJyBVUkk6ICVzIiksCi0JCQkgICAgIHJlcXVlc3QtPnBy
aXYtPnVyaS0+c2NoZW1lLAotCQkJICAgICB1cmlfc3RyaW5nKTsKLQkJZ19mcmVlICh1cmlfc3Ry
aW5nKTsKLQl9Ci0KLQlyZXR1cm4gb2s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3Nv
dXBfcmVxdWVzdF9kZWZhdWx0X2NoZWNrX3VyaSAoV2ViS2l0U291cFJlcXVlc3QgICpyZXF1ZXN0
LAotCQkJCSAgICAgICBTb3VwVVJJICAgICAgKnVyaSwKLQkJCQkgICAgICAgR0Vycm9yICAgICAg
KiplcnJvcikKLXsKLQlyZXR1cm4gVFJVRTsKLX0KLQotLyogRGVmYXVsdCBpbXBsZW1lbnRhdGlv
bjogYXNzdW1lIHRoZSBzeW5jIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgYmxvY2sgKi8KLXN0YXRp
YyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyAoV2ViS2l0U291
cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkJCUdDYW5jZWxsYWJsZSAgICAgICAgICpj
YW5jZWxsYWJsZSwKLQkJCQkJR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJZ3Bv
aW50ZXIgdXNlcl9kYXRhKQotewotCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOwotCi0Jc2lt
cGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHJlcXVlc3QpLAotCQkJ
CQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSwKLQkJCQkJICAgIHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZGVmYXVsdF9zZW5kX2FzeW5jKTsKLQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5f
aWRsZSAoc2ltcGxlKTsKLQlnX29iamVjdF91bnJlZiAoc2ltcGxlKTsKLX0KLQotc3RhdGljIEdJ
bnB1dFN0cmVhbSAqCi13ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9maW5pc2ggKFdl
YktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJCQkgR0FzeW5jUmVzdWx0ICAg
ICAgICAgKnJlc3VsdCwKLQkJCQkJIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKLXsKLQln
X3JldHVybl92YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1
bHQsIEdfT0JKRUNUIChyZXF1ZXN0KSwgd2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRf
YXN5bmMpLCBOVUxMKTsKLQotCXJldHVybiB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmQgKHJlcXVl
c3QsIE5VTEwsIGVycm9yKTsKLX0KLQotR0lucHV0U3RyZWFtICoKLXdlYmtpdF9zb3VwX3JlcXVl
c3Rfc2VuZCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkgIEdDYW5j
ZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCSAgR0Vycm9yICAgICAgICAgICAgICAq
KmVycm9yKQotewotCXJldHVybiBXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVz
dCktPgotCQlzZW5kIChyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgZXJyb3IpOwotfQotCi12b2lkCi13
ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAg
ICpyZXF1ZXN0LAotCQkJCUdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKLQkJCQlH
QXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAotCQkJCWdwb2ludGVyIHVzZXJfZGF0YSkKLXsK
LQlXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPgotCQlzZW5kX2FzeW5j
IChyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7Ci19Ci0KLUdJbnB1
dFN0cmVhbSAqCi13ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoIChXZWJLaXRTb3VwUmVx
dWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3Vs
dCwKLQkJCQkgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQotewotCXJldHVybiBXRUJLSVRf
U09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPgotCQlzZW5kX2ZpbmlzaCAocmVxdWVz
dCwgcmVzdWx0LCBlcnJvcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9yZXF1ZXN0
X2NsYXNzX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MpCi17Ci0J
R09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdF9jbGFz
cyk7Ci0KLQlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKHJlcXVlc3RfY2xhc3MsIHNpemVvZiAo
V2ViS2l0U291cFJlcXVlc3RQcml2YXRlKSk7Ci0KLQlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkg
PSB3ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfY2hlY2tfdXJpOwotCXJlcXVlc3RfY2xhc3Mt
PnNlbmRfYXN5bmMgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYzsKLQly
ZXF1ZXN0X2NsYXNzLT5zZW5kX2ZpbmlzaCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9z
ZW5kX2ZpbmlzaDsKLQotCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9yZXF1
ZXN0X2ZpbmFsaXplOwotCW9iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBf
cmVxdWVzdF9zZXRfcHJvcGVydHk7Ci0Jb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRfc291cF9yZXF1ZXN0X2dldF9wcm9wZXJ0eTsKLQotCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkgKAotCQkgb2JqZWN0X2NsYXNzLCBQUk9QX1VSSSwKLQkJIGdfcGFyYW1fc3BlY19i
b3hlZCAoV0VCS0lUX1NPVVBfUkVRVUVTVF9VUkksCi0JCQkJICAgICAiVVJJIiwKLQkJCQkgICAg
ICJUaGUgcmVxdWVzdCBVUkkiLAotCQkJCSAgICAgU09VUF9UWVBFX1VSSSwKLQkJCQkgICAgIEdf
UEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOwotCWdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkgKAotCQkgb2JqZWN0X2NsYXNzLCBQUk9QX1NFU1NJT04sCi0J
CSBnX3BhcmFtX3NwZWNfb2JqZWN0IChXRUJLSVRfU09VUF9SRVFVRVNUX1NFU1NJT04sCi0JCQkJ
ICAgICAgIlNlc3Npb24iLAotCQkJCSAgICAgICJUaGUgcmVxdWVzdCdzIHNlc3Npb24iLAotCQkJ
CSAgICAgIFNPVVBfVFlQRV9TRVNTSU9OLAotCQkJCSAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwg
R19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBf
cmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCAoR0luaXRhYmxlSWZhY2UgKmluaXRhYmxl
X2ludGVyZmFjZSkKLXsKLQlpbml0YWJsZV9pbnRlcmZhY2UtPmluaXQgPSB3ZWJraXRfc291cF9y
ZXF1ZXN0X2luaXRhYmxlX2luaXQ7Ci19Ci0KLVNvdXBVUkkgKgotd2Via2l0X3NvdXBfcmVxdWVz
dF9nZXRfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKLXsKLQlyZXR1cm4gcmVxdWVz
dC0+cHJpdi0+dXJpOwotfQotCi1Tb3VwU2Vzc2lvbiAqCi13ZWJraXRfc291cF9yZXF1ZXN0X2dl
dF9zZXNzaW9uIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKLXsKLQlyZXR1cm4gcmVxdWVz
dC0+cHJpdi0+c2Vzc2lvbjsKLX0KLQotZ29mZnNldAotd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRf
Y29udGVudF9sZW5ndGggKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQotewotCXJldHVybiBX
RUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPmdldF9jb250ZW50X2xlbmd0
aCAocmVxdWVzdCk7Ci19Ci0KLWNvbnN0IGNoYXIgKgotd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRf
Y29udGVudF90eXBlIChXZWJLaXRTb3VwUmVxdWVzdCAgKnJlcXVlc3QpCi17Ci0JcmV0dXJuIFdF
QktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+Z2V0X2NvbnRlbnRfdHlwZSAo
cmVxdWVzdCk7Ci19Ci0KLSNkZWZpbmUgWERJR0lUKGMpICgoYykgPD0gJzknID8gKGMpIC0gJzAn
IDogKChjKSAmIDB4NEYpIC0gJ0EnICsgMTApCi0jZGVmaW5lIEhFWENIQVIocykgKChYRElHSVQg
KHNbMV0pIDw8IDQpICsgWERJR0lUIChzWzJdKSkKLQotLyogQ29weSZwYXN0ZWQgZnJvbSBsaWJz
b3VwJ3Mgc291cC11cmkuYyBhZnRlciBhcHBseWluZyB0aGUgcGF0Y2ggaW4KLSAqIGh0dHBzOi8v
YnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzA1NDAuIFdlIG5lZWQgdGhpcwot
ICogaW5zdGVhZCBvZiBzb3VwX3VyaV9kZWNvZGUoKSBhcyBpdCBpbmNvcnJlY3RseSByZXR1cm5z
IE5VTEwgZm9yCi0gKiBpbmNvcnJlY3RseSBlbmNvZGVkIFVSTHMuIFRPRE86IHJlbW92ZSB0aGlz
IHdoZW4gcmVxdWlyZWQgbGlic291cAotICogdmVyc2lvbiBpcyBidW1wZWQgb3V0IHRvIDIuMzIu
MQotICovCi1nY2hhciAqCi13ZWJraXRfc291cF9yZXF1ZXN0X3VyaV9kZWNvZGVkX2NvcHkgKGNv
bnN0IGNoYXIgKnBhcnQsIGludCBsZW5ndGgpCi17Ci0JdW5zaWduZWQgY2hhciAqcywgKmQ7Ci0g
ICAgICAgIGNoYXIgKmRlY29kZWQgPSBnX3N0cm5kdXAgKHBhcnQsIGxlbmd0aCk7Ci0KLSAgICAg
ICAgcyA9IGQgPSAodW5zaWduZWQgY2hhciAqKWRlY29kZWQ7Ci0gICAgICAgIGRvIHsKLSAgICAg
ICAgICAgICAgICBpZiAoKnMgPT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWdfYXNjaWlfaXN4ZGlnaXQgKHNbMV0pIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IWdfYXNjaWlfaXN4ZGlnaXQgKHNbMl0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICpkKysgPSAqczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAqZCsr
ID0gSEVYQ0hBUiAocyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzICs9IDI7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAqZCsrID0gKnM7Ci0gICAg
ICAgIH0gd2hpbGUgKCpzKyspOwotCi0gICAgICAgIHJldHVybiBkZWNvZGVkOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzdkOGY0Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsg
dGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0g
Ki8KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIElnYWxpYSwgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdFQktJVF9TT1VQX1JFUVVFU1RfSAotI2Rl
ZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0ggMQotCi0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lU
X1RZUEVfU09VUF9SRVFVRVNUICAgICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3R5
cGUgKCkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCwg
V2ViS2l0U291cFJlcXVlc3QpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NP
VVBfUkVRVUVTVCwgV2ViS2l0U291cFJlcXVlc3RDbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19T
T1VQX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9i
aiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX1JF
UVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgV0VC
S0lUX1RZUEVfU09VUF9SRVFVRVNUKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MpKQotCi10eXBlZGVmIHN0cnVj
dCBfV2ViS2l0U291cFJlcXVlc3QgV2ViS2l0U291cFJlcXVlc3Q7Ci10eXBlZGVmIHN0cnVjdCBf
V2ViS2l0U291cFJlcXVlc3RQcml2YXRlIFdlYktpdFNvdXBSZXF1ZXN0UHJpdmF0ZTsKLXR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdENsYXNzIFdlYktpdFNvdXBSZXF1ZXN0Q2xhc3M7
Ci0KLXN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3QgewotCUdPYmplY3QgcGFyZW50OwotCi0JV2Vi
S2l0U291cFJlcXVlc3RQcml2YXRlICpwcml2OwotfTsKLQotc3RydWN0IF9XZWJLaXRTb3VwUmVx
dWVzdENsYXNzIHsKLQlHT2JqZWN0Q2xhc3MgcGFyZW50OwotCi0JZ2Jvb2xlYW4gKCpjaGVja191
cmkpKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXFfYmFzZSwKLQkJCSAgICAgIFNvdXBV
UkkgICAgICAgICAgICAgICp1cmksCi0JCQkgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJy
b3IpOwotCi0JR0lucHV0U3RyZWFtICogKCpzZW5kKShXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAg
ICAqcmVxdWVzdCwKLQkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUs
Ci0JCQkgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKLQl2b2lkICgqc2VuZF9h
c3luYykoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0JCQkgICBHQ2FuY2Vs
bGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCi0JCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNh
bGxiYWNrLAotCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQlHSW5wdXRTdHJlYW0gKiAoKnNl
bmRfZmluaXNoKShXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKLQkJCQkgICAg
ICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAotCQkJCSAgICAgIEdFcnJvciAgICAgICAg
ICAgICAgKiplcnJvcik7Ci0KLQlnb2Zmc2V0ICgqZ2V0X2NvbnRlbnRfbGVuZ3RoKShXZWJLaXRT
b3VwUmVxdWVzdCAgICpyZXF1ZXN0KTsKLQljb25zdCBjaGFyICogICAoKmdldF9jb250ZW50X3R5
cGUpKFdlYktpdFNvdXBSZXF1ZXN0ICAgKnJlcXVlc3QpOwotfTsKLQotR1R5cGUgd2Via2l0X3Nv
dXBfcmVxdWVzdF9nZXRfdHlwZSAodm9pZCk7Ci0KLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVT
VF9VUkkgICAgICJ1cmkiCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfU0VTU0lPTiAic2Vz
c2lvbiIKLQotR0lucHV0U3RyZWFtICp3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmQgKFdlYktpdFNv
dXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAotCQkJCQlHQ2FuY2VsbGFibGUgICAgICAgICAq
Y2FuY2VsbGFibGUsCi0JCQkJCUdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7Ci12b2lkICAg
ICAgICAgIHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyAoV2ViS2l0U291cFJlcXVlc3Qg
ICAgICAgICAgKnJlcXVlc3QsCi0JCQkJCSAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5j
ZWxsYWJsZSwKLQkJCQkJICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKLQkJCQkJ
ICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLUdJbnB1dFN0cmVhbSAqd2Via2l0X3NvdXBfcmVx
dWVzdF9zZW5kX2ZpbmlzaCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCi0J
CQkJCSAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAotCQkJCQkgICAgICAgR0Vy
cm9yICAgICAgICAgICAgICAqKmVycm9yKTsKLQotU291cFVSSSAgICAgICp3ZWJraXRfc291cF9y
ZXF1ZXN0X2dldF91cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0KTsKLVNv
dXBTZXNzaW9uICAqd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAoV2ViS2l0U291cFJl
cXVlc3QgICAgICAgICAgKnJlcXVlc3QpOwotCi1nb2Zmc2V0ICAgICAgIHdlYmtpdF9zb3VwX3Jl
cXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVx
dWVzdCk7Ci1jb25zdCBjaGFyICAgKndlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlw
ZSAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOwotCi0vKiBVc2VkIGJ5IFdl
YktpdFNvdXBSZXF1ZXN0RmlsZSBhbmQgV2ViS2l0U291cFJlcXVlc3REYXRhLiBJZGVhbGx5Ci0g
KiBzaG91bGQgYmUgbG9jYXRlZCBpbiBzb21lIHV0aWwgZmlsZSBidXQgSSdsbCBwbGFjZSBpdCBo
ZXJlIGFzIGl0Ci0gKiB3aWxsIGJlIHJlbW92ZWQgd2l0aCBsaWJzb3VwIDIuMzIuMSB0aGF0IHdp
bGwgc2hpcCBmaXhlZCB2ZXJzaW9ucwotICogb2Ygc291cF91cmlfZGVjb2RlL25vcm1hbGl6ZQot
ICovCi1nY2hhciAqd2Via2l0X3NvdXBfcmVxdWVzdF91cmlfZGVjb2RlZF9jb3B5IChjb25zdCBj
aGFyICpwYXJ0LCBpbnQgbGVuZ3RoKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIFdFQktJ
VF9TT1VQX1JFUVVFU1RfSCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNGQ4YTg2MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYworKysgL2Rldi9udWxsCkBA
IC0xLDE4OCArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFi
cy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBzb3VwLXJlcXVlc3Rl
ci5jOgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCi0KLSNpbmNsdWRlICJzb3VwLXJl
cXVlc3QtZGF0YS5oIgotI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1maWxlLmgiCi0jaW5jbHVkZSAi
c291cC1yZXF1ZXN0LWh0dHAuaCIKLSNpbmNsdWRlIDxnbGliL2dpMThuLmg+Ci0jaW5jbHVkZSA8
bGlic291cC9zb3VwLmg+Ci0KLXN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RlclByaXZhdGUgewot
CUdIYXNoVGFibGUgKnJlcXVlc3RfdHlwZXM7Ci19OwotCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JF
UVVFU1RFUl9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyks
IFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSLCBXZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSkp
Ci0KLUdfREVGSU5FX1RZUEUgKFdlYktpdFNvdXBSZXF1ZXN0ZXIsIHdlYmtpdF9zb3VwX3JlcXVl
c3RlciwgR19UWVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdGVy
X2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlcikKLXsKLQlyZXF1ZXN0ZXItPnBy
aXYgPSBXRUJLSVRfU09VUF9SRVFVRVNURVJfR0VUX1BSSVZBVEUgKHJlcXVlc3Rlcik7Ci0KLQly
ZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBmaW5h
bGl6ZSAoR09iamVjdCAqb2JqZWN0KQotewotCVdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3Rl
ciA9IFdFQktJVF9TT1VQX1JFUVVFU1RFUiAob2JqZWN0KTsKLQotCWlmIChyZXF1ZXN0ZXItPnBy
aXYtPnJlcXVlc3RfdHlwZXMpCi0JCWdfaGFzaF90YWJsZV9kZXN0cm95IChyZXF1ZXN0ZXItPnBy
aXYtPnJlcXVlc3RfdHlwZXMpOwotCi0JR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVl
c3Rlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0X3NvdXBfcmVxdWVzdGVyX2NsYXNzX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0ZXJDbGFz
cyAqcmVxdWVzdGVyX2NsYXNzKQotewotCUdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19P
QkpFQ1RfQ0xBU1MgKHJlcXVlc3Rlcl9jbGFzcyk7Ci0KLQlnX3R5cGVfY2xhc3NfYWRkX3ByaXZh
dGUgKHJlcXVlc3Rlcl9jbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSkp
OwotCi0JLyogdmlydHVhbCBtZXRob2Qgb3ZlcnJpZGUgKi8KLQlvYmplY3RfY2xhc3MtPmZpbmFs
aXplID0gZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRfcmVxdWVzdF90eXBlcyAoV2Vi
S2l0U291cFJlcXVlc3RlclByaXZhdGUgKnByaXYpCi17Ci0JaWYgKHByaXYtPnJlcXVlc3RfdHlw
ZXMpCi0JCXJldHVybjsKLQotCXByaXYtPnJlcXVlc3RfdHlwZXMgPSBnX2hhc2hfdGFibGVfbmV3
X2Z1bGwgKHNvdXBfc3RyX2Nhc2VfaGFzaCwKLQkJCQkJCSAgICAgc291cF9zdHJfY2FzZV9lcXVh
bCwKLQkJCQkJCSAgICAgZ19mcmVlLCAwKTsKLQlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5y
ZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImZpbGUiKSwKLQkJCSAgICAgR1NJWkVfVE9fUE9JTlRF
UiAoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUpKTsKLQlnX2hhc2hfdGFibGVfaW5zZXJ0
IChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImRhdGEiKSwKLQkJCSAgICAgR1NJWkVf
VE9fUE9JTlRFUiAoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEpKTsKLQlnX2hhc2hfdGFi
bGVfaW5zZXJ0IChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImh0dHAiKSwKLQkJCSAg
ICAgR1NJWkVfVE9fUE9JTlRFUiAoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFApKTsKLQln
X2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImh0dHBz
IiksCi0JCQkgICAgIEdTSVpFX1RPX1BPSU5URVIgKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9I
VFRQKSk7Ci0JZ19oYXNoX3RhYmxlX2luc2VydCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJk
dXAgKCJmdHAiKSwKLQkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAoV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0ZJTEUpKTsKLX0KLQotV2ViS2l0U291cFJlcXVlc3RlciAqd2Via2l0X3NvdXBfcmVx
dWVzdGVyX25ldyAodm9pZCkKLXsKLQlyZXR1cm4gKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKilnX29i
amVjdF9uZXcgKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSLCBOVUxMKTsKLX0KLQotV2ViS2l0
U291cFJlcXVlc3QgKndlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0IChXZWJLaXRTb3VwUmVx
dWVzdGVyICpyZXF1ZXN0ZXIsIGNvbnN0IGNoYXIgKnVyaVN0cmluZywgU291cFNlc3Npb24gKnNl
c3Npb24sIEdFcnJvciAqKmVycm9yKQotewotCVNvdXBVUkkgKnVyaSA9IE5VTEw7Ci0JV2ViS2l0
U291cFJlcXVlc3QgKnJlcTsKLQotCXVyaSA9IHNvdXBfdXJpX25ldyAodXJpU3RyaW5nKTsKLQlp
ZiAoIXVyaSkgewotCQlnX3NldF9lcnJvciAoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJL
SVRfU09VUF9FUlJPUl9CQURfVVJJLAotCQkJICAgICBfICgiQ291bGQgbm90IHBhcnNlIFVSSSAn
JXMnIiksIHVyaVN0cmluZyk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJlcSA9IHdlYmtpdF9zb3Vw
X3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSAocmVxdWVzdGVyLCB1cmksIHNlc3Npb24sIGVycm9yKTsK
LQlzb3VwX3VyaV9mcmVlICh1cmkpOwotCXJldHVybiByZXE7Ci19Ci0KLVdlYktpdFNvdXBSZXF1
ZXN0ICp3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKFdlYktpdFNvdXBSZXF1ZXN0
ZXIgKnJlcXVlc3RlciwgU291cFVSSSAqdXJpLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgR0Vycm9y
ICoqZXJyb3IpCi17Ci0JR1R5cGUgcmVxdWVzdFR5cGU7Ci0KLQlnX3JldHVybl92YWxfaWZfZmFp
bCAoV0VCS0lUX0lTX1NPVVBfUkVRVUVTVEVSIChyZXF1ZXN0ZXIpLCAwKTsKLQotCWluaXRfcmVx
dWVzdF90eXBlcyAocmVxdWVzdGVyLT5wcml2KTsKLQlyZXF1ZXN0VHlwZSA9IChHVHlwZSlHUE9J
TlRFUl9UT19TSVpFIChnX2hhc2hfdGFibGVfbG9va3VwIChyZXF1ZXN0ZXItPnByaXYtPnJlcXVl
c3RfdHlwZXMsIHVyaS0+c2NoZW1lKSk7Ci0JaWYgKCFyZXF1ZXN0VHlwZSkgewotCQlnX3NldF9l
cnJvciAoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09VUF9FUlJPUl9VTlNVUFBP
UlRFRF9VUklfU0NIRU1FLAotCQkJICAgICBfICgiVW5zdXBwb3J0ZWQgVVJJIHNjaGVtZSAnJXMn
IiksIHVyaS0+c2NoZW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGdfdHlwZV9pc19hIChy
ZXF1ZXN0VHlwZSwgR19UWVBFX0lOSVRBQkxFKSkgewotCQlyZXR1cm4gKFdlYktpdFNvdXBSZXF1
ZXN0ICopZ19pbml0YWJsZV9uZXcgKHJlcXVlc3RUeXBlLCAwLCBlcnJvciwKLQkJCQkJCQkgICAg
InVyaSIsIHVyaSwKLQkJCQkJCQkgICAgInNlc3Npb24iLCBzZXNzaW9uLAotCQkJCQkJCSAgICBO
VUxMKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKFdlYktpdFNvdXBSZXF1ZXN0ICopZ19vYmplY3Rf
bmV3IChyZXF1ZXN0VHlwZSwKLQkJCQkJCQkgICJ1cmkiLCB1cmksCi0JCQkJCQkJICAic2Vzc2lv
biIsIHNlc3Npb24sCi0JCQkJCQkJICBOVUxMKTsKLQl9Ci19Ci0KLS8qIFJGQyAyMzk2LCAzLjEg
Ki8KLXN0YXRpYyBnYm9vbGVhbgotc291cF9zY2hlbWVfaXNfdmFsaWQgKGNvbnN0IGNoYXIgKnNj
aGVtZSkKLXsKLQlpZiAoc2NoZW1lID09IE5VTEwgfHwKLQkgICAgIWdfYXNjaWlfaXNhbHBoYSAo
KnNjaGVtZSkpCi0JCXJldHVybiBGQUxTRTsKLQotCXNjaGVtZSsrOwotCXdoaWxlICgqc2NoZW1l
KSB7Ci0JCWlmICghZ19hc2NpaV9pc2FscGhhICgqc2NoZW1lKSAmJgotCQkgICAgIWdfYXNjaWlf
aXNkaWdpdCAoKnNjaGVtZSkgJiYKLQkJICAgICpzY2hlbWUgIT0gJysnICYmCi0JCSAgICAqc2No
ZW1lICE9ICctJyAmJgotCQkgICAgKnNjaGVtZSAhPSAnLicpCi0JCQlyZXR1cm4gRkFMU0U7Ci0J
CXNjaGVtZSsrOwotCX0KLQlyZXR1cm4gVFJVRTsKLX0KLQotdm9pZAotd2Via2l0X3NvdXBfcmVx
dWVzdGVyX2FkZF9wcm90b2NvbCAoV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAotCQkJ
CSAgICBjb25zdCBjaGFyICAqc2NoZW1lLAotCQkJCSAgICBHVHlwZSByZXF1ZXN0X3R5cGUpCi17
Ci0JZ19yZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfUkVRVUVTVEVSIChyZXF1ZXN0ZXIp
KTsKLQlnX3JldHVybl9pZl9mYWlsIChzb3VwX3NjaGVtZV9pc192YWxpZCAoc2NoZW1lKSk7Ci0K
LQlpbml0X3JlcXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+cHJpdik7Ci0JZ19oYXNoX3RhYmxlX2lu
c2VydCAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoc2NoZW1lKSwK
LQkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAocmVxdWVzdF90eXBlKSk7Ci19Ci0KLXZvaWQKLXdl
YmtpdF9zb3VwX3JlcXVlc3Rlcl9yZW1vdmVfcHJvdG9jb2wgKFdlYktpdFNvdXBSZXF1ZXN0ZXIg
KnJlcXVlc3RlciwKLQkJCQkgICAgICAgY29uc3QgY2hhciAgKnNjaGVtZSkKLXsKLQlnX3JldHVy
bl9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9SRVFVRVNURVIgKHJlcXVlc3RlcikpOwotCWdfcmV0
dXJuX2lmX2ZhaWwgKHNvdXBfc2NoZW1lX2lzX3ZhbGlkIChzY2hlbWUpKTsKLQotCWluaXRfcmVx
dWVzdF90eXBlcyAocmVxdWVzdGVyLT5wcml2KTsKLQlnX2hhc2hfdGFibGVfcmVtb3ZlIChyZXF1
ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMsIHNjaGVtZSk7Ci19Ci0KLUdRdWFyawotd2Via2l0
X3NvdXBfZXJyb3JfcXVhcmsgKHZvaWQpCi17Ci0Jc3RhdGljIEdRdWFyayBlcnJvcjsKLQlpZiAo
IWVycm9yKQotCQllcnJvciA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgid2Via2l0X3Nv
dXBfZXJyb3JfcXVhcmsiKTsKLQlyZXR1cm4gZXJyb3I7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWZmMTAzLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyogLSotIE1vZGU6IEM7IHRhYi13aWR0
aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV0VCS0lUX1NPVVBfUkVR
VUVTVEVSX0gKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0ggMQotCi0jaW5jbHVkZSAi
c291cC1yZXF1ZXN0LmgiCi0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0KLUdfQkVHSU5fREVD
TFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiAgICAgICAgICAgICh3ZWJr
aXRfc291cF9yZXF1ZXN0ZXJfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVF
U1RFUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIFdlYktpdFNvdXBSZXF1ZXN0ZXIpKQotI2RlZmlu
ZSBXRUJLSVRfU09VUF9SRVFVRVNURVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIFdlYktpdFNvdXBS
ZXF1ZXN0ZXJDbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RFUihvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09V
UF9SRVFVRVNURVIpKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNURVJfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVR
VUVTVEVSKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVT
VEVSLCBXZWJLaXRTb3VwUmVxdWVzdGVyQ2xhc3MpKQotCi0jZGVmaW5lIFdFQktJVF9TT1VQX0VS
Uk9SIHdlYmtpdF9zb3VwX2Vycm9yX3F1YXJrICgpCi0KLXR5cGVkZWYgZW51bSB7Ci0JV0VCS0lU
X1NPVVBfRVJST1JfQkFEX1VSSSwKLQlXRUJLSVRfU09VUF9FUlJPUl9VTlNVUFBPUlRFRF9VUklf
U0NIRU1FCi19IFdlYktpdFNvdXBFcnJvcjsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBS
ZXF1ZXN0ZXIgV2ViS2l0U291cFJlcXVlc3RlcjsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3Vw
UmVxdWVzdGVyUHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZTsKLQotc3RydWN0IF9X
ZWJLaXRTb3VwUmVxdWVzdGVyIHsKLQlHT2JqZWN0IHBhcmVudDsKLQotCVdlYktpdFNvdXBSZXF1
ZXN0ZXJQcml2YXRlICpwcml2OwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUdPYmplY3RDbGFz
cyBwYXJlbnRfY2xhc3M7Ci19IFdlYktpdFNvdXBSZXF1ZXN0ZXJDbGFzczsKLQotR1R5cGUgd2Vi
a2l0X3NvdXBfcmVxdWVzdGVyX2dldF90eXBlICh2b2lkKTsKLQotV2ViS2l0U291cFJlcXVlc3Rl
ciAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX25ldyAodm9pZCk7Ci0KLUdRdWFyayB3ZWJraXRfc291
cF9lcnJvcl9xdWFyayAodm9pZCk7Ci0KLVdlYktpdFNvdXBSZXF1ZXN0ICp3ZWJraXRfc291cF9y
ZXF1ZXN0ZXJfcmVxdWVzdCAoV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAotCQkJCQkJ
ICBjb25zdCBjaGFyICp1cmlTdHJpbmcsCi0JCQkJCQkgIFNvdXBTZXNzaW9uICpzZXNzaW9uLAot
CQkJCQkJICBHRXJyb3IgKiplcnJvcik7Ci0KLVdlYktpdFNvdXBSZXF1ZXN0ICp3ZWJraXRfc291
cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwK
LQkJCQkJCSAgICAgIFNvdXBVUkkgKnVyaSwKLQkJCQkJCSAgICAgIFNvdXBTZXNzaW9uICpzZXNz
aW9uLAotCQkJCQkJICAgICAgR0Vycm9yICoqZXJyb3IpOwotCi12b2lkIHdlYmtpdF9zb3VwX3Jl
cXVlc3Rlcl9hZGRfcHJvdG9jb2wgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKLQkJ
CQkJIGNvbnN0IGNoYXIgICpzY2hlbWUsCi0JCQkJCSBHVHlwZSByZXF1ZXN0X3R5cGUpOwotCi12
b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZW1vdmVfcHJvdG9jb2wgKFdlYktpdFNvdXBSZXF1
ZXN0ZXIgKnJlcXVlc3RlciwKLQkJCQkJICAgIGNvbnN0IGNoYXIgICpzY2hlbWUpOwotCi1HX0VO
RF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS1wcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4YWY4ZGUyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw0MiArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQt
dGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBzb3VwLWNhY2hl
LXByaXZhdGUuaDoKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgV0VCS0lUX1NPVVBfQ0FDSEVfUFJJVkFURV9ICi0jZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hF
X1BSSVZBVEVfSCAxCi0KLSNpbmNsdWRlICJzb3VwLWNhY2hlLmgiCi0jaW5jbHVkZSA8bGlic291
cC9zb3VwLW1lc3NhZ2UuaD4KLQotR19CRUdJTl9ERUNMUwotCi1XZWJLaXRTb3VwQ2FjaGVSZXNw
b25zZSB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAgICpj
YWNoZSwKLQkJCQkJCQlTb3VwTWVzc2FnZSAqbXNnKTsKLUdJbnB1dFN0cmVhbSAqd2Via2l0X3Nv
dXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlLAotCQkJCQkg
ICAgICAgU291cE1lc3NhZ2UgKm1zZyk7Ci1XZWJLaXRTb3VwQ2FjaGVhYmlsaXR5ICB3ZWJraXRf
c291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUsCi0J
CQkJCQkJICAgIFNvdXBNZXNzYWdlICptc2cpOwotU291cE1lc3NhZ2UgKndlYmtpdF9zb3VwX2Nh
Y2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNo
ZSwKLQkJCQkJCQkgICAgIFNvdXBNZXNzYWdlICpvcmlnaW5hbCk7Ci0KLUdfRU5EX0RFQ0xTCi0K
LSNlbmRpZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNo
ZS5jIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9z
b3VwLWNhY2hlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NjQyOGQuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtp
dC9zb3VwLWNhY2hlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjc3ICswLDAgQEAKLS8qIC0qLSBN
b2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0
OiA4IC0qLSAqLwotLyoKLSAqIHNvdXAtY2FjaGUuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0vKiBUT0RPOgotICogLSBOZWVkIHRvIGhvb2sgdGhlIGZlYXR1
cmUgaW4gdGhlIHN5bmMgU291cFNlc3Npb24uCi0gKiAtIE5lZWQgbW9yZSB0ZXN0cy4KLSAqLwot
Ci0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNp
bmNsdWRlICJzb3VwLWNhY2hlLmgiCi0jaW5jbHVkZSAic291cC1jYWNoZS1wcml2YXRlLmgiCi0j
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUg
PHN0ZGxpYi5oPgotCi1zdGF0aWMgU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICp3ZWJraXRf
c291cF9jYWNoZV9kZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlOwotc3RhdGljIHZvaWQgd2Via2l0
X3NvdXBfY2FjaGVfc2Vzc2lvbl9mZWF0dXJlX2luaXQgKFNvdXBTZXNzaW9uRmVhdHVyZUludGVy
ZmFjZSAqZmVhdHVyZV9pbnRlcmZhY2UsIGdwb2ludGVyIGludGVyZmFjZV9kYXRhKTsKLQotI2Rl
ZmluZSBERUZBVUxUX01BWF9TSVpFIDUwICogMTAyNCAqIDEwMjQKLSNkZWZpbmUgTUFYX0VOVFJZ
X0RBVEFfUEVSQ0VOVEFHRSAxMCAvKiBQZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBzaXplCi0JICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgY2FjaGUgdGhhdCBjYW4gYmUKLQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxlZCBieSBhIHNpbmdsZSBlbnRyeSAq
LwotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cENhY2hlRW50cnkgewotCWNoYXIgKmtleTsK
LQljaGFyICpmaWxlbmFtZTsKLQlndWludCBmcmVzaG5lc3NfbGlmZXRpbWU7Ci0JZ2Jvb2xlYW4g
bXVzdF9yZXZhbGlkYXRlOwotCUdTdHJpbmcgKmRhdGE7Ci0JZ3NpemUgcG9zOwotCWdzaXplIGxl
bmd0aDsKLQl0aW1lX3QgY29ycmVjdGVkX2luaXRpYWxfYWdlOwotCXRpbWVfdCByZXNwb25zZV90
aW1lOwotCWdib29sZWFuIHdyaXRpbmc7Ci0JZ2Jvb2xlYW4gZGlydHk7Ci0JZ2Jvb2xlYW4gZ290
X2JvZHk7Ci0JZ2Jvb2xlYW4gYmVpbmdfdmFsaWRhdGVkOwotCVNvdXBNZXNzYWdlSGVhZGVycyAq
aGVhZGVyczsKLQlHT3V0cHV0U3RyZWFtICpzdHJlYW07Ci0JR0Vycm9yICplcnJvcjsKLQlndWlu
dCBoaXRzOwotCUdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGU7Ci19IFdlYktpdFNvdXBDYWNoZUVu
dHJ5OwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZVByaXZhdGUgewotCWNoYXIgKmNhY2hlX2Rp
cjsKLQlHSGFzaFRhYmxlICpjYWNoZTsKLQlndWludCBuX3BlbmRpbmc7Ci0JU291cFNlc3Npb24g
KnNlc3Npb247Ci0JV2ViS2l0U291cENhY2hlVHlwZSBjYWNoZV90eXBlOwotCWd1aW50IHNpemU7
Ci0JZ3VpbnQgbWF4X3NpemU7Ci0JZ3VpbnQgbWF4X2VudHJ5X2RhdGFfc2l6ZTsgLyogQ29tcHV0
ZWQgdmFsdWUuIEhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgKi8KLQlHTGlzdCAqbHJ1X3N0
YXJ0OwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7Ci0J
V2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OwotCVNvdXBNZXNzYWdlICptc2c7Ci0JZ3Vsb25n
IGdvdF9jaHVua19oYW5kbGVyOwotCWd1bG9uZyBnb3RfYm9keV9oYW5kbGVyOwotCWd1bG9uZyBy
ZXN0YXJ0ZWRfaGFuZGxlcjsKLX0gV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmU7Ci0KLWVu
dW0gewotCVBST1BfMCwKLQlQUk9QX0NBQ0hFX0RJUiwKLQlQUk9QX0NBQ0hFX1RZUEUKLX07Ci0K
LSNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUobykgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURSAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2Fj
aGVQcml2YXRlKSkKLQotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKFdlYktpdFNvdXBDYWNoZSwg
d2Via2l0X3NvdXBfY2FjaGUsIEdfVFlQRV9PQkpFQ1QsCi0JCQkgR19JTVBMRU1FTlRfSU5URVJG
QUNFIChTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFLAotCQkJCQkJd2Via2l0X3NvdXBfY2FjaGVf
c2Vzc2lvbl9mZWF0dXJlX2luaXQpKQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfY2Fj
aGVfZW50cnlfcmVtb3ZlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVF
bnRyeSAqZW50cnkpOwotc3RhdGljIHZvaWQgbWFrZV9yb29tX2Zvcl9uZXdfZW50cnkgKFdlYktp
dFNvdXBDYWNoZSAqY2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpOwotc3RhdGljIGdib29sZWFu
IGNhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBn
dWludCBsZW5ndGhfdG9fYWRkKTsKLQotc3RhdGljIFdlYktpdFNvdXBDYWNoZWFiaWxpdHkKLWdl
dF9jYWNoZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cp
Ci17Ci0JV2ViS2l0U291cENhY2hlYWJpbGl0eSBjYWNoZWFiaWxpdHk7Ci0JY29uc3QgY2hhciAq
Y2FjaGVfY29udHJvbDsKLQotCS8qIDEuIFRoZSByZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIGNhY2hl
YWJsZSAqLwotCWlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9HRVQpCi0JCWNhY2hlYWJp
bGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRTsKLQllbHNlIGlmIChtc2ctPm1ldGhv
ZCA9PSBTT1VQX01FVEhPRF9IRUFEIHx8Ci0JCSBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9U
UkFDRSB8fAotCQkgbXNnLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfQ09OTkVDVCkKLQkJcmV0dXJu
IFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOwotCWVsc2UKLQkJcmV0dXJuIChXRUJLSVRf
U09VUF9DQUNIRV9VTkNBQ0hFQUJMRSB8IFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsK
LQotCWNhY2hlX2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKG1zZy0+cmVzcG9u
c2VfaGVhZGVycywgIkNhY2hlLUNvbnRyb2wiKTsKLQlpZiAoY2FjaGVfY29udHJvbCkgewotCQlH
SGFzaFRhYmxlICpoYXNoOwotCQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lU
X1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKLQotCQloYXNoID0gc291cF9oZWFkZXJf
cGFyc2VfcGFyYW1fbGlzdCAoY2FjaGVfY29udHJvbCk7Ci0KLQkJLyogU2hhcmVkIGNhY2hlcyBN
VVNUIE5PVCBzdG9yZSBwcml2YXRlIHJlc291cmNlcyAqLwotCQlpZiAocHJpdi0+Y2FjaGVfdHlw
ZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9TSEFSRUQpIHsKLQkJCWlmIChnX2hhc2hfdGFibGVfbG9v
a3VwX2V4dGVuZGVkIChoYXNoLCAicHJpdmF0ZSIsIE5VTEwsIE5VTEwpKSB7Ci0JCQkJc291cF9o
ZWFkZXJfZnJlZV9wYXJhbV9saXN0IChoYXNoKTsKLQkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FD
SEVfVU5DQUNIRUFCTEU7Ci0JCQl9Ci0JCX0KLQotCQkvKiAyLiBUaGUgJ25vLXN0b3JlJyBjYWNo
ZSBkaXJlY3RpdmUgZG9lcyBub3QgYXBwZWFyIGluIHRoZQotCQkgKiBoZWFkZXJzCi0JCSAqLwot
CQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLXN0b3JlIiwgTlVM
TCwgTlVMTCkpIHsKLQkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7Ci0JCQly
ZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7Ci0JCX0KLQotCQkvKiBUaGlzIGRv
ZXMgbm90IGFwcGVhciBpbiBzZWN0aW9uIDIuMSwgYnV0IEkgdGhpbmsgaXQgbWFrZXMKLQkJICog
c2Vuc2UgdG8gY2hlY2sgaXQgdG9vPwotCQkgKi8KLQkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBf
ZXh0ZW5kZWQgKGhhc2gsICJuby1jYWNoZSIsIE5VTEwsIE5VTEwpKSB7Ci0JCQlzb3VwX2hlYWRl
cl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOwotCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VO
Q0FDSEVBQkxFOwotCQl9Ci0KLQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0IChoYXNoKTsK
LQl9Ci0KLQlzd2l0Y2ggKG1zZy0+c3RhdHVzX2NvZGUpIHsKLQljYXNlIFNPVVBfU1RBVFVTX1BB
UlRJQUxfQ09OVEVOVDoKLQkJLyogV2UgZG9uJ3QgY2FjaGUgcGFydGlhbCByZXNwb25zZXMsIGJ1
dCB0aGV5IG9ubHkKLQkJICogaW52YWxpZGF0ZSBjYWNoZWQgZnVsbCByZXNwb25zZXMgaWYgdGhl
IGhlYWRlcnMKLQkJICogZG9uJ3QgbWF0Y2guCi0JCSAqLwotCQljYWNoZWFiaWxpdHkgPSBXRUJL
SVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKLQkJYnJlYWs7Ci0KLQljYXNlIFNPVVBfU1RBVFVT
X05PVF9NT0RJRklFRDoKLQkJLyogQSAzMDQgcmVzcG9uc2UgdmFsaWRhdGVzIGFuIGV4aXN0aW5n
IGNhY2hlIGVudHJ5ICovCi0JCWNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX1ZBTElE
QVRFUzsKLQkJYnJlYWs7Ci0KLQljYXNlIFNPVVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVM6Ci0J
Y2FzZSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWToKLQljYXNlIFNPVVBfU1RBVFVTX0dP
TkU6Ci0JCS8qIEZJWE1FOiBjYWNoZWFibGUgdW5sZXNzIGluZGljYXRlZCBvdGhlcndpc2UgKi8K
LQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7Ci0JCWJyZWFr
OwotCi0JY2FzZSBTT1VQX1NUQVRVU19GT1VORDoKLQljYXNlIFNPVVBfU1RBVFVTX1RFTVBPUkFS
WV9SRURJUkVDVDoKLQkJLyogRklYTUU6IGNhY2hlYWJsZSBpZiBleHBsaWNpdGx5IGluZGljYXRl
ZCAqLwotCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKLQkJ
YnJlYWs7Ci0KLQljYXNlIFNPVVBfU1RBVFVTX1NFRV9PVEhFUjoKLQljYXNlIFNPVVBfU1RBVFVT
X0ZPUkJJRERFTjoKLQljYXNlIFNPVVBfU1RBVFVTX05PVF9GT1VORDoKLQljYXNlIFNPVVBfU1RB
VFVTX01FVEhPRF9OT1RfQUxMT1dFRDoKLQkJcmV0dXJuIChXRUJLSVRfU09VUF9DQUNIRV9VTkNB
Q0hFQUJMRSB8IFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsKLQotCWRlZmF1bHQ6Ci0J
CS8qIEFueSA1eHggc3RhdHVzIG9yIGFueSA0eHggc3RhdHVzIG5vdCBoYW5kbGVkIGFib3ZlCi0J
CSAqIGlzIHVuY2FjaGVhYmxlIGJ1dCBkb2Vzbid0IGJyZWFrIHRoZSBjYWNoZS4KLQkJICovCi0J
CWlmICgobXNnLT5zdGF0dXNfY29kZSA+PSBTT1VQX1NUQVRVU19CQURfUkVRVUVTVCAmJgotCQkg
ICAgIG1zZy0+c3RhdHVzX2NvZGUgPD0gU09VUF9TVEFUVVNfRkFJTEVEX0RFUEVOREVOQ1kpIHx8
Ci0JCSAgICBtc2ctPnN0YXR1c19jb2RlID49IFNPVVBfU1RBVFVTX0lOVEVSTkFMX1NFUlZFUl9F
UlJPUikKLQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKLQotCQkvKiBB
biB1bnJlY29nbml6ZWQgMnh4LCAzeHgsIG9yIDR4eCByZXNwb25zZSBicmVha3MKLQkJICogdGhl
IGNhY2hlLgotCQkgKi8KLQkJaWYgKChtc2ctPnN0YXR1c19jb2RlID4gU09VUF9TVEFUVVNfUEFS
VElBTF9DT05URU5UICYmCi0JCSAgICAgbXNnLT5zdGF0dXNfY29kZSA8IFNPVVBfU1RBVFVTX01V
TFRJUExFX0NIT0lDRVMpIHx8Ci0JCSAgICAobXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVT
X1RFTVBPUkFSWV9SRURJUkVDVCAmJgotCQkgICAgIG1zZy0+c3RhdHVzX2NvZGUgPCBTT1VQX1NU
QVRVU19JTlRFUk5BTF9TRVJWRVJfRVJST1IpKQotCQkJcmV0dXJuIChXRUJLSVRfU09VUF9DQUNI
RV9VTkNBQ0hFQUJMRSB8IFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsKLQkJYnJlYWs7
Ci0JfQotCi0JcmV0dXJuIGNhY2hlYWJpbGl0eTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2ZyZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgZ2Jvb2xl
YW4gcHVyZ2UpCi17Ci0JaWYgKHB1cmdlKSB7Ci0JCUdGaWxlICpmaWxlID0gZ19maWxlX25ld19m
b3JfcGF0aCAoZW50cnktPmZpbGVuYW1lKTsKLQkJZ19maWxlX2RlbGV0ZSAoZmlsZSwgTlVMTCwg
TlVMTCk7Ci0JCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKLQl9Ci0KLQlnX2ZyZWUgKGVudHJ5LT5m
aWxlbmFtZSk7Ci0JZW50cnktPmZpbGVuYW1lID0gTlVMTDsKLQlnX2ZyZWUgKGVudHJ5LT5rZXkp
OwotCWVudHJ5LT5rZXkgPSBOVUxMOwotCi0JaWYgKGVudHJ5LT5oZWFkZXJzKSB7Ci0JCXNvdXBf
bWVzc2FnZV9oZWFkZXJzX2ZyZWUgKGVudHJ5LT5oZWFkZXJzKTsKLQkJZW50cnktPmhlYWRlcnMg
PSBOVUxMOwotCX0KLQotCWlmIChlbnRyeS0+ZGF0YSkgewotCQlnX3N0cmluZ19mcmVlIChlbnRy
eS0+ZGF0YSwgVFJVRSk7Ci0JCWVudHJ5LT5kYXRhID0gTlVMTDsKLQl9Ci0JaWYgKGVudHJ5LT5l
cnJvcikgewotCQlnX2Vycm9yX2ZyZWUgKGVudHJ5LT5lcnJvcik7Ci0JCWVudHJ5LT5lcnJvciA9
IE5VTEw7Ci0JfQotCWlmIChlbnRyeS0+Y2FuY2VsbGFibGUpIHsKLQkJZ19vYmplY3RfdW5yZWYg
KGVudHJ5LT5jYW5jZWxsYWJsZSk7Ci0JCWVudHJ5LT5jYW5jZWxsYWJsZSA9IE5VTEw7Ci0JfQot
Ci0JZ19zbGljZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSwgZW50cnkpOwotfQotCi1zdGF0
aWMgdm9pZAotY29weV9oZWFkZXJzIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1
ZSwgU291cE1lc3NhZ2VIZWFkZXJzICpoZWFkZXJzKQotewotCXNvdXBfbWVzc2FnZV9oZWFkZXJz
X2FwcGVuZCAoaGVhZGVycywgbmFtZSwgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZAotdXBkYXRl
X2hlYWRlcnMgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBTb3VwTWVzc2Fn
ZUhlYWRlcnMgKmhlYWRlcnMpCi17Ci0JaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoaGVh
ZGVycywgbmFtZSkpCi0JCXNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UgKGhlYWRlcnMsIG5h
bWUsIHZhbHVlKTsKLQllbHNlCi0JCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVy
cywgbmFtZSwgdmFsdWUpOwotfQotCi1zdGF0aWMgZ3VpbnQKLXdlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X2dldF9jdXJyZW50X2FnZSAoV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQotewotCXRp
bWVfdCBub3cgPSB0aW1lIChOVUxMKTsKLQl0aW1lX3QgcmVzaWRlbnRfdGltZTsKLQotCXJlc2lk
ZW50X3RpbWUgPSBub3cgLSBlbnRyeS0+cmVzcG9uc2VfdGltZTsKLQlyZXR1cm4gZW50cnktPmNv
cnJlY3RlZF9pbml0aWFsX2FnZSArIHJlc2lkZW50X3RpbWU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
bgotd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaXNfZnJlc2hfZW5vdWdoIChXZWJLaXRTb3VwQ2Fj
aGVFbnRyeSAqZW50cnksIGdpbnQgbWluX2ZyZXNoKQotewotCWd1aW50IGxpbWl0ID0gKG1pbl9m
cmVzaCA9PSAtMSkgPyB3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UgKGVu
dHJ5KSA6IChndWludCkgbWluX2ZyZXNoOwotCXJldHVybiBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0
aW1lID4gbGltaXQ7Ci19Ci0KLXN0YXRpYyBjaGFyICoKLXNvdXBfbWVzc2FnZV9nZXRfY2FjaGVf
a2V5IChTb3VwTWVzc2FnZSAqbXNnKQotewotCVNvdXBVUkkgKnVyaSA9IHNvdXBfbWVzc2FnZV9n
ZXRfdXJpIChtc2cpOwotCXJldHVybiBzb3VwX3VyaV90b19zdHJpbmcgKHVyaSwgRkFMU0UpOwot
fQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAo
V2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5LCBTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRTb3Vw
Q2FjaGUgKmNhY2hlKQotewotCWNvbnN0IGNoYXIgKmNhY2hlX2NvbnRyb2w7Ci0JY29uc3QgY2hh
ciAqZXhwaXJlcywgKmRhdGUsICpsYXN0X21vZGlmaWVkOwotCi0JY2FjaGVfY29udHJvbCA9IHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJDYWNoZS1Db250cm9sIik7
Ci0JaWYgKGNhY2hlX2NvbnRyb2wpIHsKLQkJY29uc3QgY2hhciAqbWF4X2FnZSwgKnNfbWF4YWdl
OwotCQlnaW50NjQgZnJlc2huZXNzX2xpZmV0aW1lID0gMDsKLQkJR0hhc2hUYWJsZSAqaGFzaDsK
LQkJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9Q
UklWQVRFIChjYWNoZSk7Ci0KLQkJaGFzaCA9IHNvdXBfaGVhZGVyX3BhcnNlX3BhcmFtX2xpc3Qg
KGNhY2hlX2NvbnRyb2wpOwotCi0JCS8qIFNob3VsZCB3ZSByZS12YWxpZGF0ZSB0aGUgZW50cnkg
d2hlbiBpdCBnb2VzIHN0YWxlICovCi0JCWVudHJ5LT5tdXN0X3JldmFsaWRhdGUgPSBnX2hhc2hf
dGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibXVzdC1yZXZhbGlkYXRlIiwgTlVMTCwgTlVM
TCk7Ci0KLQkJLyogU2VjdGlvbiAyLjMuMSAqLwotCQlpZiAocHJpdi0+Y2FjaGVfdHlwZSA9PSBX
RUJLSVRfU09VUF9DQUNIRV9TSEFSRUQpIHsKLQkJCXNfbWF4YWdlID0gZ19oYXNoX3RhYmxlX2xv
b2t1cCAoaGFzaCwgInMtbWF4YWdlIik7Ci0JCQlpZiAoc19tYXhhZ2UpIHsKLQkJCQlmcmVzaG5l
c3NfbGlmZXRpbWUgPSBnX2FzY2lpX3N0cnRvbGwgKHNfbWF4YWdlLCBOVUxMLCAxMCk7Ci0JCQkJ
aWYgKGZyZXNobmVzc19saWZldGltZSkgewotCQkJCQkvKiBJbXBsaWVzIHByb3h5LXJldmFsaWRh
dGUuIFRPRE86IGlzIGl0IHRydWU/ICovCi0JCQkJCWVudHJ5LT5tdXN0X3JldmFsaWRhdGUgPSBU
UlVFOwotCQkJCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOwotCQkJCQlyZXR1
cm47Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLyogSWYgJ21heC1hZ2UnIGNhY2hlIGRpcmVjdGl2
ZSBpcyBwcmVzZW50LCB1c2UgdGhhdCAqLwotCQltYXhfYWdlID0gZ19oYXNoX3RhYmxlX2xvb2t1
cCAoaGFzaCwgIm1heC1hZ2UiKTsKLQkJaWYgKG1heF9hZ2UpCi0JCQlmcmVzaG5lc3NfbGlmZXRp
bWUgPSBnX2FzY2lpX3N0cnRvbGwgKG1heF9hZ2UsIE5VTEwsIDEwKTsKLQotCQlpZiAoZnJlc2hu
ZXNzX2xpZmV0aW1lKSB7Ci0JCQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gKGd1aW50KU1J
TiAoZnJlc2huZXNzX2xpZmV0aW1lLCBHX01BWFVJTlQzMik7Ci0JCQlzb3VwX2hlYWRlcl9mcmVl
X3BhcmFtX2xpc3QgKGhhc2gpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJc291cF9oZWFkZXJfZnJl
ZV9wYXJhbV9saXN0IChoYXNoKTsKLQl9Ci0KLQkvKiBJZiB0aGUgJ0V4cGlyZXMnIHJlc3BvbnNl
IGhlYWRlciBpcyBwcmVzZW50LCB1c2UgaXRzIHZhbHVlCi0JICogbWludXMgdGhlIHZhbHVlIG9m
IHRoZSAnRGF0ZScgcmVzcG9uc2UgaGVhZGVyCi0JICovCi0JZXhwaXJlcyA9IHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJFeHBpcmVzIik7Ci0JZGF0ZSA9IHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJEYXRlIik7Ci0JaWYgKGV4cGly
ZXMgJiYgZGF0ZSkgewotCQlTb3VwRGF0ZSAqZXhwaXJlc19kLCAqZGF0ZV9kOwotCQl0aW1lX3Qg
ZXhwaXJlc190LCBkYXRlX3Q7Ci0KLQkJZXhwaXJlc19kID0gc291cF9kYXRlX25ld19mcm9tX3N0
cmluZyAoZXhwaXJlcyk7Ci0JCWlmIChleHBpcmVzX2QpIHsKLQkJCWRhdGVfZCA9IHNvdXBfZGF0
ZV9uZXdfZnJvbV9zdHJpbmcgKGRhdGUpOwotCi0JCQlleHBpcmVzX3QgPSBzb3VwX2RhdGVfdG9f
dGltZV90IChleHBpcmVzX2QpOwotCQkJZGF0ZV90ID0gc291cF9kYXRlX3RvX3RpbWVfdCAoZGF0
ZV9kKTsKLQotCQkJc291cF9kYXRlX2ZyZWUgKGV4cGlyZXNfZCk7Ci0JCQlzb3VwX2RhdGVfZnJl
ZSAoZGF0ZV9kKTsKLQotCQkJaWYgKGV4cGlyZXNfdCAmJiBkYXRlX3QpIHsKLQkJCQllbnRyeS0+
ZnJlc2huZXNzX2xpZmV0aW1lID0gKGd1aW50KU1BWCAoZXhwaXJlc190IC0gZGF0ZV90LCAwKTsK
LQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBJZiBFeHBpcmVzIGlzIG5vdCBh
IHZhbGlkIGRhdGUgd2Ugc2hvdWxkCi0JCQkgICB0cmVhdCBpdCBhcyBhbHJlYWR5IGV4cGlyZWQs
IHNlZSBzZWN0aW9uCi0JCQkgICAzLjMgKi8KLQkJCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUg
PSAwOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyogT3RoZXJ3aXNlIGFuIGhldXJpc3RpYyBt
YXkgYmUgdXNlZCAqLwotCi0JLyogSGV1cmlzdGljcyBNVVNUIE5PVCBiZSB1c2VkIHdpdGggdGhl
c2Ugc3RhdHVzIGNvZGVzCi0JICAgKHNlY3Rpb24gMi4zLjEuMSkgKi8KLQlpZiAobXNnLT5zdGF0
dXNfY29kZSAhPSBTT1VQX1NUQVRVU19PSyAmJgotCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNP
VVBfU1RBVFVTX05PTl9BVVRIT1JJVEFUSVZFICYmCi0JICAgIG1zZy0+c3RhdHVzX2NvZGUgIT0g
U09VUF9TVEFUVVNfUEFSVElBTF9DT05URU5UICYmCi0JICAgIG1zZy0+c3RhdHVzX2NvZGUgIT0g
U09VUF9TVEFUVVNfTVVMVElQTEVfQ0hPSUNFUyAmJgotCSAgICBtc2ctPnN0YXR1c19jb2RlICE9
IFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZICYmCi0JICAgIG1zZy0+c3RhdHVzX2NvZGUg
IT0gU09VUF9TVEFUVVNfR09ORSkKLQkJZ290byBleHBpcmU7Ci0KLQkvKiBUT0RPOiBhdHRhY2gg
d2FybmluZyAxMTMgaWYgcmVzcG9uc2UncyBjdXJyZW50X2FnZSBpcyBtb3JlCi0JICAgdGhhbiAy
NGggKHNlY3Rpb24gMi4zLjEuMSkgd2hlbiB1c2luZyBoZXVyaXN0aWNzICovCi0KLQkvKiBMYXN0
LU1vZGlmaWVkIGJhc2VkIGhldXJpc3RpYyAqLwotCWxhc3RfbW9kaWZpZWQgPSBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIpOwotCWlmIChs
YXN0X21vZGlmaWVkKSB7Ci0JCVNvdXBEYXRlICpzb3VwX2RhdGU7Ci0JCXRpbWVfdCBub3csIGxh
c3RfbW9kaWZpZWRfdDsKLQotCQlzb3VwX2RhdGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5n
IChsYXN0X21vZGlmaWVkKTsKLQkJbGFzdF9tb2RpZmllZF90ID0gc291cF9kYXRlX3RvX3RpbWVf
dCAoc291cF9kYXRlKTsKLQkJbm93ID0gdGltZSAoTlVMTCk7Ci0KLSNkZWZpbmUgSEVVUklTVElD
X0ZBQ1RPUiAwLjEgLyogRnJvbSBTZWN0aW9uIDIuMy4xLjEgKi8KLQotCQllbnRyeS0+ZnJlc2hu
ZXNzX2xpZmV0aW1lID0gTUFYICgwLCAobm93IC0gbGFzdF9tb2RpZmllZF90KSAqIEhFVVJJU1RJ
Q19GQUNUT1IpOwotCQlzb3VwX2RhdGVfZnJlZSAoc291cF9kYXRlKTsKLQl9Ci0KLQlyZXR1cm47
Ci0KLSBleHBpcmU6Ci0JLyogSWYgYWxsIGVsc2UgZmFpbHMsIG1ha2UgdGhlIGVudHJ5IGV4cGly
ZSBpbW1lZGlhdGVseSAqLwotCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSAwOwotfQotCi1z
dGF0aWMgV2ViS2l0U291cENhY2hlRW50cnkgKgotd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfbmV3
IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAqbXNnLCB0aW1lX3QgcmVxdWVz
dF90aW1lLCB0aW1lX3QgcmVzcG9uc2VfdGltZSkKLXsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAq
ZW50cnk7Ci0JU291cE1lc3NhZ2VIZWFkZXJzICpoZWFkZXJzOwotCWNvbnN0IGNoYXIgKmRhdGU7
Ci0JY2hhciAqbWQ1OwotCi0JZW50cnkgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNoZUVu
dHJ5KTsKLQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKLQllbnRyeS0+d3JpdGluZyA9IEZBTFNFOwot
CWVudHJ5LT5nb3RfYm9keSA9IEZBTFNFOwotCWVudHJ5LT5iZWluZ192YWxpZGF0ZWQgPSBGQUxT
RTsKLQllbnRyeS0+ZGF0YSA9IGdfc3RyaW5nX25ldyAoTlVMTCk7Ci0JZW50cnktPnBvcyA9IDA7
Ci0JZW50cnktPmVycm9yID0gTlVMTDsKLQotCS8qIGtleSAmIGZpbGVuYW1lICovCi0JZW50cnkt
PmtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOwotCW1kNSA9IGdfY29tcHV0
ZV9jaGVja3N1bV9mb3Jfc3RyaW5nIChHX0NIRUNLU1VNX01ENSwgZW50cnktPmtleSwgLTEpOwot
CWVudHJ5LT5maWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUgKGNhY2hlLT5wcml2LT5jYWNoZV9k
aXIsIG1kNSwgTlVMTCk7Ci0JZ19mcmVlIChtZDUpOwotCi0JLyogSGVhZGVycyAqLwotCWhlYWRl
cnMgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19uZXcgKFNPVVBfTUVTU0FHRV9IRUFERVJTX1JFU1BP
TlNFKTsKLQlzb3VwX21lc3NhZ2VfaGVhZGVyc19mb3JlYWNoIChtc2ctPnJlc3BvbnNlX2hlYWRl
cnMsCi0JCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5jKWNvcHlfaGVhZGVy
cywKLQkJCQkgICAgICBoZWFkZXJzKTsKLQllbnRyeS0+aGVhZGVycyA9IGhlYWRlcnM7Ci0KLQkv
KiBMUlUgbGlzdCAqLwotCWVudHJ5LT5oaXRzID0gMDsKLQotCS8qIFNlY3Rpb24gMi4zLjEsIEZy
ZXNobmVzcyBMaWZldGltZSAqLwotCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3NldF9mcmVzaG5l
c3MgKGVudHJ5LCBtc2csIGNhY2hlKTsKLQotCS8qIFNlY3Rpb24gMi4zLjIsIENhbGN1bGF0aW5n
IEFnZSAqLwotCWRhdGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJz
LCAiRGF0ZSIpOwotCi0JaWYgKGRhdGUpIHsKLQkJU291cERhdGUgKnNvdXBfZGF0ZTsKLQkJY29u
c3QgY2hhciAqYWdlOwotCQl0aW1lX3QgZGF0ZV92YWx1ZSwgYXBwYXJlbnRfYWdlLCBjb3JyZWN0
ZWRfcmVjZWl2ZWRfYWdlLCByZXNwb25zZV9kZWxheSwgYWdlX3ZhbHVlID0gMDsKLQotCQlzb3Vw
X2RhdGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5nIChkYXRlKTsKLQkJZGF0ZV92YWx1ZSA9
IHNvdXBfZGF0ZV90b190aW1lX3QgKHNvdXBfZGF0ZSk7Ci0JCXNvdXBfZGF0ZV9mcmVlIChzb3Vw
X2RhdGUpOwotCi0JCWFnZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRl
cnMsICJBZ2UiKTsKLQkJaWYgKGFnZSkKLQkJCWFnZV92YWx1ZSA9IGdfYXNjaWlfc3RydG9sbCAo
YWdlLCBOVUxMLCAxMCk7Ci0KLQkJZW50cnktPnJlc3BvbnNlX3RpbWUgPSByZXNwb25zZV90aW1l
OwotCQlhcHBhcmVudF9hZ2UgPSBNQVggKDAsIGVudHJ5LT5yZXNwb25zZV90aW1lIC0gZGF0ZV92
YWx1ZSk7Ci0JCWNvcnJlY3RlZF9yZWNlaXZlZF9hZ2UgPSBNQVggKGFwcGFyZW50X2FnZSwgYWdl
X3ZhbHVlKTsKLQkJcmVzcG9uc2VfZGVsYXkgPSBlbnRyeS0+cmVzcG9uc2VfdGltZSAtIHJlcXVl
c3RfdGltZTsKLQkJZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSA9IGNvcnJlY3RlZF9yZWNl
aXZlZF9hZ2UgKyByZXNwb25zZV9kZWxheTsKLQl9IGVsc2UgewotCQkvKiBJcyB0aGlzIGNvcnJl
Y3QgPyAqLwotCQllbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdlID0gdGltZSAoTlVMTCk7Ci0J
fQotCi0JcmV0dXJuIGVudHJ5OwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfY2FjaGVf
d3JpdGluZ19maXh0dXJlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0
dXJlKQotewotCS8qIEZyZWUgZml4dHVyZS4gQW5kIGRpc2Nvbm5lY3Qgc2lnbmFscywgd2UgZG9u
J3Qgd2FudCB0bwotCSAgIGxpc3RlbiB0byBtb3JlIFNvdXBNZXNzYWdlIGV2ZW50cyBhcyB3ZSdy
ZSBmaW5pc2hlZCB3aXRoCi0JICAgdGhpcyByZXNvdXJjZSAqLwotCWlmIChnX3NpZ25hbF9oYW5k
bGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5nb3RfY2h1bmtfaGFuZGxl
cikpCi0JCWdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoZml4dHVyZS0+bXNnLCBmaXh0dXJl
LT5nb3RfY2h1bmtfaGFuZGxlcik7Ci0JaWYgKGdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVjdGVk
IChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPmdvdF9ib2R5X2hhbmRsZXIpKQotCQlnX3NpZ25hbF9o
YW5kbGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2JvZHlfaGFuZGxl
cik7Ci0JaWYgKGdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkIChmaXh0dXJlLT5tc2csIGZp
eHR1cmUtPnJlc3RhcnRlZF9oYW5kbGVyKSkKLQkJZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0
IChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPnJlc3RhcnRlZF9oYW5kbGVyKTsKLQlnX29iamVjdF91
bnJlZiAoZml4dHVyZS0+bXNnKTsKLQlnX29iamVjdF91bnJlZiAoZml4dHVyZS0+Y2FjaGUpOwot
CWdfc2xpY2VfZnJlZSAoV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUsIGZpeHR1cmUpOwot
fQotCi1zdGF0aWMgdm9pZAotY2xvc2VfcmVhZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5j
UmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQot
ewotCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5OwotCVdlYktp
dFNvdXBDYWNoZSAqY2FjaGUgPSBmaXh0dXJlLT5jYWNoZTsKLQlHT3V0cHV0U3RyZWFtICpzdHJl
YW0gPSBHX09VVFBVVF9TVFJFQU0gKHNvdXJjZSk7Ci0JZ29mZnNldCBjb250ZW50X2xlbmd0aDsK
LQotCWdfd2Fybl9pZl9mYWlsIChlbnRyeS0+ZXJyb3IgPT0gTlVMTCk7Ci0KLQkvKiBGSVhNRTog
d2hhdCBkbyB3ZSBkbyBvbiBlcnJvciA/ICovCi0KLQlpZiAoc3RyZWFtKSB7Ci0JCWdfb3V0cHV0
X3N0cmVhbV9jbG9zZV9maW5pc2ggKHN0cmVhbSwgcmVzdWx0LCBOVUxMKTsKLQkJZ19vYmplY3Rf
dW5yZWYgKHN0cmVhbSk7Ci0JfQotCWVudHJ5LT5zdHJlYW0gPSBOVUxMOwotCi0JY29udGVudF9s
ZW5ndGggPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGggKGVudHJ5LT5o
ZWFkZXJzKTsKLQotCS8qIElmIHRoZSBwcm9jZXNzIHdhcyBjYW5jZWxsZWQsIHRoZW4gZGVsZXRl
IHRoZSBlbnRyeSBmcm9tCi0JICAgdGhlIGNhY2hlLiBEbyBpdCBhbHNvIGlmIHRoZSBzaXplIG9m
IGEgY2h1bmtlZCByZXNvdXJjZSBpcwotCSAgIHRvbyBtdWNoIGZvciB0aGUgY2FjaGUgKi8KLQlp
ZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsKLQkJ
ZW50cnktPmRpcnR5ID0gRkFMU0U7Ci0JCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAo
Y2FjaGUsIGVudHJ5KTsKLQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRS
VUUpOwotCQllbnRyeSA9IE5VTEw7Ci0JfSBlbHNlIGlmICgoc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0X2VuY29kaW5nIChlbnRyeS0+aGVhZGVycykgPT0gU09VUF9FTkNPRElOR19DSFVOS0VEKSB8
fAotCQkgICBlbnRyeS0+bGVuZ3RoICE9IChnc2l6ZSkgY29udGVudF9sZW5ndGgpIHsKLQkJLyoq
IFR3byBvcHRpb25zIGhlcmU6Ci0JCSAqCi0JCSAqIDEuICJjaHVua2VkIiBkYXRhLCBlbnRyeSB3
YXMgdGVtcG9yYXJpbHkgYWRkZWQgdG8KLQkJICogY2FjaGUgKGFzIGNvbnRlbnQtbGVuZ3RoIGlz
IDApIGFuZCBub3cgdGhhdCB3ZSBoYXZlCi0JCSAqIHRoZSBhY3R1YWwgc2l6ZSB3ZSBoYXZlIHRv
IGV2YWx1YXRlIGlmIHdlIHdhbnQgaXQKLQkJICogaW4gdGhlIGNhY2hlIG9yIG5vdAotCQkgKgot
CQkgKiAyLiBDb250ZW50LUxlbmd0aCBoYXMgYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiBhY3R1YWwK
LQkJICogbGVuZ3RoLCBtZWFucyB0aGF0IHRoZSBjb250ZW50IHdhcyBlbmNvZGVkIGZvcgotCQkg
KiB0cmFuc21pc3Npb24gKHR5cGljYWxseSBjb21wcmVzc2VkKSBhbmQgdGh1cyB3ZQotCQkgKiBo
YXZlIHRvIHN1YnN0cmFjdCB0aGUgY29udGVudC1sZW5ndGggdmFsdWUgdGhhdCB3YXMKLQkJICog
YWRkZWQgdG8gdGhlIGNhY2hlIGFuZCBhZGQgdGhlIHVuZW5jb2RlZCBsZW5ndGgKLQkJICoqLwot
CQlnaW50IGxlbmd0aF90b19hZGQgPSBlbnRyeS0+bGVuZ3RoIC0gY29udGVudF9sZW5ndGg7Ci0K
LQkJLyogTWFrZSByb29tIGluIGNhY2hlIGlmIG5lZWRlZCAqLwotCQlpZiAoY2FjaGVfYWNjZXB0
c19lbnRyaWVzX29mX3NpemUgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKSkgewotCQkJbWFrZV9yb29t
X2Zvcl9uZXdfZW50cnkgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKTsKLQotCQkJY2FjaGUtPnByaXYt
PnNpemUgKz0gbGVuZ3RoX3RvX2FkZDsKLQkJfSBlbHNlIHsKLQkJCWVudHJ5LT5kaXJ0eSA9IEZB
TFNFOwotCQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50cnkpOwot
CQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOwotCQkJZW50cnkg
PSBOVUxMOwotCQl9Ci0JfQotCi0JaWYgKGVudHJ5KSB7Ci0JCS8qIEdldCByaWQgb2YgdGhlIEdT
dHJpbmcgaW4gbWVtb3J5IGZvciB0aGUgcmVzb3VyY2Ugbm93ICovCi0JCWlmIChlbnRyeS0+ZGF0
YSkgewotCQkJZ19zdHJpbmdfZnJlZSAoZW50cnktPmRhdGEsIFRSVUUpOwotCQkJZW50cnktPmRh
dGEgPSBOVUxMOwotCQl9Ci0KLQkJZW50cnktPmRpcnR5ID0gRkFMU0U7Ci0JCWVudHJ5LT53cml0
aW5nID0gRkFMU0U7Ci0JCWVudHJ5LT5nb3RfYm9keSA9IEZBTFNFOwotCQllbnRyeS0+cG9zID0g
MDsKLQotCQlnX29iamVjdF91bnJlZiAoZW50cnktPmNhbmNlbGxhYmxlKTsKLQkJZW50cnktPmNh
bmNlbGxhYmxlID0gTlVMTDsKLQl9Ci0KLQljYWNoZS0+cHJpdi0+bl9wZW5kaW5nLS07Ci0KLQkv
KiBGcmVlcyAqLwotCXdlYmtpdF9zb3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlIChmaXh0
dXJlKTsKLX0KLQotc3RhdGljIHZvaWQKLXdyaXRlX3JlYWR5X2NiIChHT2JqZWN0ICpzb3VyY2Us
IEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4
dHVyZSkKLXsKLQlHT3V0cHV0U3RyZWFtICpzdHJlYW0gPSBHX09VVFBVVF9TVFJFQU0gKHNvdXJj
ZSk7Ci0JR0Vycm9yICplcnJvciA9IE5VTEw7Ci0JZ3NzaXplIHdyaXRlX3NpemU7Ci0JV2ViS2l0
U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7Ci0KLQlpZiAoZ19jYW5jZWxs
YWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsKLQkJZ19vdXRwdXRfc3Ry
ZWFtX2Nsb3NlX2FzeW5jIChzdHJlYW0sCi0JCQkJCSAgICAgR19QUklPUklUWV9MT1csCi0JCQkJ
CSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAotCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNr
KWNsb3NlX3JlYWR5X2NiLAotCQkJCQkgICAgIGZpeHR1cmUpOwotCQlyZXR1cm47Ci0JfQotCi0J
d3JpdGVfc2l6ZSA9IGdfb3V0cHV0X3N0cmVhbV93cml0ZV9maW5pc2ggKHN0cmVhbSwgcmVzdWx0
LCAmZXJyb3IpOwotCWlmICh3cml0ZV9zaXplIDw9IDAgfHwgZXJyb3IpIHsKLQkJaWYgKGVycm9y
KQotCQkJZW50cnktPmVycm9yID0gZXJyb3I7Ci0JCWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9hc3lu
YyAoc3RyZWFtLAotCQkJCQkgICAgIEdfUFJJT1JJVFlfTE9XLAotCQkJCQkgICAgIGVudHJ5LT5j
YW5jZWxsYWJsZSwKLQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9j
YiwKLQkJCQkJICAgICBmaXh0dXJlKTsKLQkJLyogRklYTUU6IFdlIHNob3VsZCBjb21wbGV0ZWx5
IHN0b3AgY2FjaGluZyB0aGUKLQkJICAgcmVzb3VyY2UgYXQgdGhpcyBwb2ludCAqLwotCX0gZWxz
ZSB7Ci0JCWVudHJ5LT5wb3MgKz0gd3JpdGVfc2l6ZTsKLQotCQkvKiBBcmUgd2Ugc3RpbGwgd3Jp
dGluZyBhbmQgaXMgdGhlcmUgbmV3IGRhdGEgdG8gd3JpdGUKLQkJICAgYWxyZWFkeSA/ICovCi0J
CWlmIChlbnRyeS0+ZGF0YSAmJiBlbnRyeS0+cG9zIDwgZW50cnktPmRhdGEtPmxlbikgewotCQkJ
Z19vdXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAotCQkJCQkJICAgICBl
bnRyeS0+ZGF0YS0+c3RyICsgZW50cnktPnBvcywKLQkJCQkJCSAgICAgZW50cnktPmRhdGEtPmxl
biAtIGVudHJ5LT5wb3MsCi0JCQkJCQkgICAgIEdfUFJJT1JJVFlfTE9XLAotCQkJCQkJICAgICBl
bnRyeS0+Y2FuY2VsbGFibGUsCi0JCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRl
X3JlYWR5X2NiLAotCQkJCQkJICAgICBmaXh0dXJlKTsKLQkJfSBlbHNlIHsKLQkJCWVudHJ5LT53
cml0aW5nID0gRkFMU0U7Ci0KLQkJCWlmIChlbnRyeS0+Z290X2JvZHkpIHsKLQkJCQkvKiBJZiB3
ZSBhbHJlYWR5IHJlY2VpdmVkICdnb3QtYm9keScKLQkJCQkgICBhbmQgd2UgaGF2ZSB3cml0dGVu
IGFsbCB0aGUgZGF0YSwKLQkJCQkgICB3ZSBjYW4gY2xvc2UgdGhlIHN0cmVhbSAqLwotCQkJCWdf
b3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoZW50cnktPnN0cmVhbSwKLQkJCQkJCQkgICAgIEdf
UFJJT1JJVFlfTE9XLAotCQkJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAotCQkJCQkJCSAg
ICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCi0JCQkJCQkJICAgICBmaXh0
dXJlKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLW1zZ19nb3RfY2h1bmtfY2Ig
KFNvdXBNZXNzYWdlICptc2csIFNvdXBCdWZmZXIgKmNodW5rLCBXZWJLaXRTb3VwQ2FjaGVXcml0
aW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBm
aXh0dXJlLT5lbnRyeTsKLQotCWdfcmV0dXJuX2lmX2ZhaWwgKGNodW5rLT5kYXRhICYmIGNodW5r
LT5sZW5ndGgpOwotCWdfcmV0dXJuX2lmX2ZhaWwgKGVudHJ5KTsKLQotCS8qIElnbm9yZSB0aGlz
IGlmIHRoZSB3cml0aW5nIG9yIGFwcGVuZGluZyB3YXMgY2FuY2VsbGVkICovCi0JaWYgKCFnX2Nh
bmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoZW50cnktPmNhbmNlbGxhYmxlKSkgewotCQlnX3N0cmlu
Z19hcHBlbmRfbGVuIChlbnRyeS0+ZGF0YSwgY2h1bmstPmRhdGEsIGNodW5rLT5sZW5ndGgpOwot
CQllbnRyeS0+bGVuZ3RoID0gZW50cnktPmRhdGEtPmxlbjsKLQotCQlpZiAoIWNhY2hlX2FjY2Vw
dHNfZW50cmllc19vZl9zaXplIChmaXh0dXJlLT5jYWNoZSwgZW50cnktPmxlbmd0aCkpIHsKLQkJ
CS8qIFF1aWNrbHkgY2FuY2VsIHRoZSBjYWNoaW5nIG9mIHRoZSByZXNvdXJjZSAqLwotCQkJZ19j
YW5jZWxsYWJsZV9jYW5jZWwgKGVudHJ5LT5jYW5jZWxsYWJsZSk7Ci0JCX0KLQl9Ci0KLQkvKiBG
SVhNRTogcmVtb3ZlIHRoZSBlcnJvciBjaGVjayB3aGVuIHdlIGNhbmNlbCB0aGUgY2FjaGluZyBh
dAotCSAgIHRoZSBmaXJzdCB3cml0ZSBlcnJvciAqLwotCS8qIE9ubHkgd3JpdGUgaWYgdGhlIGVu
dHJ5IHN0cmVhbSBpcyByZWFkeSAqLwotCWlmIChlbnRyeS0+d3JpdGluZyA9PSBGQUxTRSAmJiBl
bnRyeS0+ZXJyb3IgPT0gTlVMTCAmJiBlbnRyeS0+c3RyZWFtKSB7Ci0JCUdTdHJpbmcgKmRhdGEg
PSBlbnRyeS0+ZGF0YTsKLQkJZW50cnktPndyaXRpbmcgPSBUUlVFOwotCQlnX291dHB1dF9zdHJl
YW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCi0JCQkJCSAgICAgZGF0YS0+c3RyICsgZW50
cnktPnBvcywKLQkJCQkJICAgICBkYXRhLT5sZW4gLSBlbnRyeS0+cG9zLAotCQkJCQkgICAgIEdf
UFJJT1JJVFlfTE9XLAotCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKLQkJCQkJICAgICAo
R0FzeW5jUmVhZHlDYWxsYmFjayl3cml0ZV9yZWFkeV9jYiwKLQkJCQkJICAgICBmaXh0dXJlKTsK
LQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1tc2dfZ290X2JvZHlfY2IgKFNvdXBNZXNzYWdlICptc2cs
IFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotCVdlYktpdFNvdXBD
YWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5OwotCWdfcmV0dXJuX2lmX2ZhaWwgKGVu
dHJ5KTsKLQotCWVudHJ5LT5nb3RfYm9keSA9IFRSVUU7Ci0KLQlpZiAoIWVudHJ5LT5zdHJlYW0g
JiYgZW50cnktPnBvcyAhPSBlbnRyeS0+bGVuZ3RoKQotCQkvKiBUaGUgc3RyZWFtIGlzIG5vdCBy
ZWFkeSB0byBiZSB3cml0dGVuIGJ1dCB3ZSBzdGlsbAotCQkgICBoYXZlIGRhdGEgdG8gd3JpdGUs
IHdlJ2xsIHdyaXRlIGl0IHdoZW4gdGhlIHN0cmVhbQotCQkgICBpcyBvcGVuZWQgZm9yIHdyaXRp
bmcgKi8KLQkJcmV0dXJuOwotCi0KLQlpZiAoZW50cnktPnBvcyAhPSBlbnRyeS0+bGVuZ3RoKSB7
Ci0JCS8qIElmIHdlIHN0aWxsIGhhdmUgZGF0YSB0byB3cml0ZSwgd3JpdGUgaXQsCi0JCSAgIHdy
aXRlX3JlYWR5X2NiIHdpbGwgY2xvc2UgdGhlIHN0cmVhbSAqLwotCQlpZiAoZW50cnktPndyaXRp
bmcgPT0gRkFMU0UgJiYgZW50cnktPmVycm9yID09IE5VTEwgJiYgZW50cnktPnN0cmVhbSkgewot
CQkJZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAotCQkJCQkJICAg
ICBlbnRyeS0+ZGF0YS0+c3RyICsgZW50cnktPnBvcywKLQkJCQkJCSAgICAgZW50cnktPmRhdGEt
PmxlbiAtIGVudHJ5LT5wb3MsCi0JCQkJCQkgICAgIEdfUFJJT1JJVFlfTE9XLAotCQkJCQkJICAg
ICBlbnRyeS0+Y2FuY2VsbGFibGUsCi0JCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdy
aXRlX3JlYWR5X2NiLAotCQkJCQkJICAgICBmaXh0dXJlKTsKLQkJfQotCQlyZXR1cm47Ci0JfQot
Ci0JaWYgKGVudHJ5LT5zdHJlYW0gJiYgIWVudHJ5LT53cml0aW5nKQotCQlnX291dHB1dF9zdHJl
YW1fY2xvc2VfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCi0JCQkJCSAgICAgR19QUklPUklUWV9MT1cs
Ci0JCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAotCQkJCQkgICAgIChHQXN5bmNSZWFkeUNh
bGxiYWNrKWNsb3NlX3JlYWR5X2NiLAotCQkJCQkgICAgIGZpeHR1cmUpOwotfQotCi1zdGF0aWMg
Z2Jvb2xlYW4KLXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoV2ViS2l0U291cENhY2hl
ICpjYWNoZSwgV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQotewotCUdMaXN0ICpscnVfaXRl
bTsKLQotCS8qIGlmIChlbnRyeS0+ZGlydHkgJiYgIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVk
IChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7ICovCi0JaWYgKGVudHJ5LT5kaXJ0eSkgewotCQlnX2Nh
bmNlbGxhYmxlX2NhbmNlbCAoZW50cnktPmNhbmNlbGxhYmxlKTsKLQkJcmV0dXJuIEZBTFNFOwot
CX0KLQotCWdfYXNzZXJ0ICghZW50cnktPmRpcnR5KTsKLQlnX2Fzc2VydCAoZ19saXN0X2xlbmd0
aCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCkgPT0gZ19oYXNoX3RhYmxlX3NpemUgKGNhY2hlLT5w
cml2LT5jYWNoZSkpOwotCi0JLyogUmVtb3ZlIGZyb20gY2FjaGUgKi8KLQlpZiAoIWdfaGFzaF90
YWJsZV9yZW1vdmUgKGNhY2hlLT5wcml2LT5jYWNoZSwgZW50cnktPmtleSkpCi0JCXJldHVybiBG
QUxTRTsKLQotCS8qIFJlbW92ZSBmcm9tIExSVSAqLwotCWxydV9pdGVtID0gZ19saXN0X2ZpbmQg
KGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGVudHJ5KTsKLQljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0
ID0gZ19saXN0X2RlbGV0ZV9saW5rIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBscnVfaXRlbSk7
Ci0KLQkvKiBBZGp1c3QgY2FjaGUgc2l6ZSAqLwotCWNhY2hlLT5wcml2LT5zaXplIC09IGVudHJ5
LT5sZW5ndGg7Ci0KLQlnX2Fzc2VydCAoZ19saXN0X2xlbmd0aCAoY2FjaGUtPnByaXYtPmxydV9z
dGFydCkgPT0gZ19oYXNoX3RhYmxlX3NpemUgKGNhY2hlLT5wcml2LT5jYWNoZSkpOwotCi0JcmV0
dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnaW50Ci1scnVfY29tcGFyZV9mdW5jIChnY29uc3Rwb2lu
dGVyIGEsIGdjb25zdHBvaW50ZXIgYikKLXsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnlf
YSA9IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqKWE7Ci0JV2ViS2l0U291cENhY2hlRW50cnkgKmVu
dHJ5X2IgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKiliOwotCi0JLyoqIFRoZSByYXRpb25hbGUg
b2YgdGhpcyBzb3J0aW5nIGZ1bmMgaXMKLQkgKgotCSAqIDEuIHNvcnQgYnkgaGl0cyAtPiBMUlUg
YWxnb3JpdGhtLCB0aGVuCi0JICoKLQkgKiAyLiBzb3J0IGJ5IGZyZXNobmVzcyBsaWZldGltZSwg
d2UgYmV0dGVyIGRpc2NhcmQgZmlyc3QKLQkgKiBlbnRyaWVzIHRoYXQgYXJlIGNsb3NlIHRvIGV4
cGlyZQotCSAqCi0JICogMy4gc29ydCBieSBzaXplLCByZXBsYWNlIGZpcnN0IHNtYWxsIHNpemUg
cmVzb3VyY2VzIGFzIHRoZXkKLQkgKiBhcmUgY2hlYXBlciB0byBkb3dubG9hZAotCSAqKi8KLQot
CS8qIFNvcnQgYnkgaGl0cyAqLwotCWlmIChlbnRyeV9hLT5oaXRzICE9IGVudHJ5X2ItPmhpdHMp
Ci0JCXJldHVybiBlbnRyeV9hLT5oaXRzIC0gZW50cnlfYi0+aGl0czsKLQotCS8qIFNvcnQgYnkg
ZnJlc2huZXNzX2xpZmV0aW1lICovCi0JaWYgKGVudHJ5X2EtPmZyZXNobmVzc19saWZldGltZSAh
PSBlbnRyeV9iLT5mcmVzaG5lc3NfbGlmZXRpbWUpCi0JCXJldHVybiBlbnRyeV9hLT5mcmVzaG5l
c3NfbGlmZXRpbWUgLSBlbnRyeV9iLT5mcmVzaG5lc3NfbGlmZXRpbWU7Ci0KLQkvKiBTb3J0IGJ5
IHNpemUgKi8KLQlyZXR1cm4gZW50cnlfYS0+bGVuZ3RoIC0gZW50cnlfYi0+bGVuZ3RoOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4KLWNhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplIChXZWJLaXRT
b3VwQ2FjaGUgKmNhY2hlLCBndWludCBsZW5ndGhfdG9fYWRkKQotewotCS8qIFdlIGNvdWxkIGFk
ZCBoZXJlIHNvbWUgbW9yZSBoZXVyaXN0aWNzLiBUT0RPOiByZXZpZXcgaG93Ci0JICAgdGhpcyBp
cyBkb25lIGJ5IG90aGVyIEhUVFAgY2FjaGVzICovCi0KLQlyZXR1cm4gbGVuZ3RoX3RvX2FkZCA8
PSBjYWNoZS0+cHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6ZTsKLX0KLQotc3RhdGljIHZvaWQKLW1h
a2Vfcm9vbV9mb3JfbmV3X2VudHJ5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBndWludCBsZW5n
dGhfdG9fYWRkKQotewotCUdMaXN0ICpscnVfZW50cnkgPSBjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0
OwotCi0JLyogQ2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBmb3IgdGhlIG5ldyBlbnRy
eS4gVGhpcyBpcwotCSAgIGFuIGFwcHJveGltYXRpb24gYXMgd2UncmUgbm90IHdvcmtpbmcgb3V0
IHRoZSBzaXplIG9mIHRoZQotCSAgIGNhY2hlIGZpbGUgb3IgdGhlIHNpemUgb2YgdGhlIGhlYWRl
cnMgZm9yIHBlcmZvcm1hbmNlCi0JICAgcmVhc29ucy4gVE9ETzogY2hlY2sgaWYgdGhhdCB3b3Vs
ZCBiZSByZWFsbHkgdGhhdCBleHBlbnNpdmUgKi8KLQotCXdoaWxlIChscnVfZW50cnkgJiYKLQkg
ICAgICAgKGxlbmd0aF90b19hZGQgKyBjYWNoZS0+cHJpdi0+c2l6ZSA+IGNhY2hlLT5wcml2LT5t
YXhfc2l6ZSkpIHsKLQkJV2ViS2l0U291cENhY2hlRW50cnkgKm9sZF9lbnRyeSA9IChXZWJLaXRT
b3VwQ2FjaGVFbnRyeSAqKWxydV9lbnRyeS0+ZGF0YTsKLQotCQkvKiBEaXNjYXJkIGVudHJpZXMu
IE9uY2UgY2FuY2VsbGVkIHJlc291cmNlcyB3aWxsIGJlCi0JCSAqIGZyZWVkIGluIGNsb3NlX3Jl
YWR5X2NiCi0JCSAqLwotCQlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNo
ZSwgb2xkX2VudHJ5KSkgewotCQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAob2xkX2Vu
dHJ5LCBUUlVFKTsKLQkJCWxydV9lbnRyeSA9IGNhY2hlLT5wcml2LT5scnVfc3RhcnQ7Ci0JCX0g
ZWxzZQotCQkJbHJ1X2VudHJ5ID0gZ19saXN0X25leHQgKGxydV9lbnRyeSk7Ci0JfQotfQotCi1z
dGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkgKFdl
YktpdFNvdXBDYWNoZSAqY2FjaGUsCi0JCQkJICAgICAgIGNvbnN0IGNoYXIgKmtleSwKLQkJCQkg
ICAgICAgV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5LAotCQkJCSAgICAgICBnYm9vbGVhbiBz
b3J0KQotewotCWd1aW50IGxlbmd0aF90b19hZGQgPSAwOwotCi0JaWYgKHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2dldF9lbmNvZGluZyAoZW50cnktPmhlYWRlcnMpICE9IFNPVVBfRU5DT0RJTkdfQ0hV
TktFRCkKLQkJbGVuZ3RoX3RvX2FkZCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50
X2xlbmd0aCAoZW50cnktPmhlYWRlcnMpOwotCi0JLyogQ2hlY2sgaWYgd2UgYXJlIGdvaW5nIHRv
IHN0b3JlIHRoZSByZXNvdXJjZSBkZXBlbmRpbmcgb24gaXRzIHNpemUgKi8KLQlpZiAobGVuZ3Ro
X3RvX2FkZCkgewotCQlpZiAoIWNhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplIChjYWNoZSwg
bGVuZ3RoX3RvX2FkZCkpCi0JCQlyZXR1cm4gRkFMU0U7Ci0KLQkJLyogTWFrZSByb29tIGZvciBu
ZXcgZW50cnkgaWYgbmVlZGVkICovCi0JCW1ha2Vfcm9vbV9mb3JfbmV3X2VudHJ5IChjYWNoZSwg
bGVuZ3RoX3RvX2FkZCk7Ci0JfQotCi0JZ19oYXNoX3RhYmxlX2luc2VydCAoY2FjaGUtPnByaXYt
PmNhY2hlLCBnX3N0cmR1cCAoa2V5KSwgZW50cnkpOwotCi0JLyogQ29tcHV0ZSBuZXcgY2FjaGUg
c2l6ZSAqLwotCWNhY2hlLT5wcml2LT5zaXplICs9IGxlbmd0aF90b19hZGQ7Ci0KLQkvKiBVcGRh
dGUgTFJVICovCi0JaWYgKHNvcnQpCi0JCWNhY2hlLT5wcml2LT5scnVfc3RhcnQgPSBnX2xpc3Rf
aW5zZXJ0X3NvcnRlZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnksIGxydV9jb21wYXJl
X2Z1bmMpOwotCWVsc2UKLQkJY2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9wcmVwZW5k
IChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRyeSk7Ci0KLQlnX2Fzc2VydCAoZ19saXN0X2xl
bmd0aCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCkgPT0gZ19oYXNoX3RhYmxlX3NpemUgKGNhY2hl
LT5wcml2LT5jYWNoZSkpOwotCi0JcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tc2df
cmVzdGFydGVkX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50
cnkpCi17Ci0JLyogRklYTUU6IFdoYXQgc2hvdWxkIHdlIGRvIGhlcmUgZXhhY3RseT8gKi8KLX0K
LQotc3RhdGljIHZvaWQKLWFwcGVuZF90b19yZWFkeV9jYiAoR09iamVjdCAqc291cmNlLCBHQXN5
bmNSZXN1bHQgKnJlc3VsdCwgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUp
Ci17Ci0JR0ZpbGUgKmZpbGUgPSAoR0ZpbGUgKilzb3VyY2U7Ci0JR091dHB1dFN0cmVhbSAqc3Ry
ZWFtOwotCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5OwotCi0J
c3RyZWFtID0gKEdPdXRwdXRTdHJlYW0gKilnX2ZpbGVfYXBwZW5kX3RvX2ZpbmlzaCAoZmlsZSwg
cmVzdWx0LCAmZW50cnktPmVycm9yKTsKLQotCWlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxl
ZCAoZW50cnktPmNhbmNlbGxhYmxlKSB8fCBlbnRyeS0+ZXJyb3IpIHsKLQkJZml4dHVyZS0+Y2Fj
aGUtPnByaXYtPm5fcGVuZGluZy0tOwotCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKLQkJd2Via2l0
X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChmaXh0dXJlLT5jYWNoZSwgZW50cnkpOwotCQl3ZWJr
aXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7Ci0JCXdlYmtpdF9zb3VwX2Nh
Y2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlIChmaXh0dXJlKTsKLQkJcmV0dXJuOwotCX0KLQotCWVu
dHJ5LT5zdHJlYW0gPSBnX29iamVjdF9yZWYgKHN0cmVhbSk7Ci0JZ19vYmplY3RfdW5yZWYgKGZp
bGUpOwotCi0JLyogSWYgd2UgYWxyZWFkeSBnb3QgYWxsIHRoZSBkYXRhIHdlIGhhdmUgdG8gaW5p
dGlhdGUgdGhlCi0JICAgd3JpdGluZyBoZXJlLCBzaW5jZSB3ZSB3b24ndCBnZXQgbW9yZSAnZ290
LWNodW5rJwotCSAgIHNpZ25hbHMgKi8KLQlpZiAoZW50cnktPmdvdF9ib2R5KSB7Ci0JCUdTdHJp
bmcgKmRhdGEgPSBlbnRyeS0+ZGF0YTsKLQotCQkvKiBJdCBjb3VsZCBoYXBwZW4gdGhhdCByZWFk
aW5nIHRoZSBkYXRhIGZyb20gc2VydmVyCi0JCSAgIHdhcyBjb21wbGV0ZWQgYmVmb3JlIHRoaXMg
aGFwcGVucy4gSW4gdGhhdCBjYXNlCi0JCSAgIHRoZXJlIGlzIG5vIGRhdGEgKi8KLQkJaWYgKGRh
dGEpIHsKLQkJCWVudHJ5LT53cml0aW5nID0gVFJVRTsKLQkJCWdfb3V0cHV0X3N0cmVhbV93cml0
ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKLQkJCQkJCSAgICAgZGF0YS0+c3RyICsgZW50cnktPnBv
cywKLQkJCQkJCSAgICAgZGF0YS0+bGVuIC0gZW50cnktPnBvcywKLQkJCQkJCSAgICAgR19QUklP
UklUWV9MT1csCi0JCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKLQkJCQkJCSAgICAgKEdB
c3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCi0JCQkJCQkgICAgIGZpeHR1cmUpOwot
CQl9Ci0JfQotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdGltZV90IHJlcXVlc3RfdGltZTsKLQlT
b3VwU2Vzc2lvbkZlYXR1cmUgKmZlYXR1cmU7Ci0JZ3Vsb25nIGdvdF9oZWFkZXJzX2hhbmRsZXI7
Ci19IFJlcXVlc3RIZWxwZXI7Ci0KLXN0YXRpYyB2b2lkCi1tc2dfZ290X2hlYWRlcnNfY2IgKFNv
dXBNZXNzYWdlICptc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlXZWJLaXRTb3VwQ2FjaGUg
KmNhY2hlOwotCVdlYktpdFNvdXBDYWNoZWFiaWxpdHkgY2FjaGVhYmxlOwotCVJlcXVlc3RIZWxw
ZXIgKmhlbHBlcjsKLQl0aW1lX3QgcmVxdWVzdF90aW1lLCByZXNwb25zZV90aW1lOwotCi0JcmVz
cG9uc2VfdGltZSA9IHRpbWUgKE5VTEwpOwotCi0JaGVscGVyID0gKFJlcXVlc3RIZWxwZXIgKil1
c2VyX2RhdGE7Ci0JY2FjaGUgPSBXRUJLSVRfU09VUF9DQUNIRSAoaGVscGVyLT5mZWF0dXJlKTsK
LQlyZXF1ZXN0X3RpbWUgPSBoZWxwZXItPnJlcXVlc3RfdGltZTsKLQlnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMgKG1zZywgbXNnX2dvdF9oZWFkZXJzX2NiLCB1c2VyX2RhdGEp
OwotCWdfc2xpY2VfZnJlZSAoUmVxdWVzdEhlbHBlciwgaGVscGVyKTsKLQotCWNhY2hlYWJsZSA9
IHdlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKGNhY2hlLCBtc2cpOwotCi0JaWYg
KGNhY2hlYWJsZSAmIFdFQktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRSkgewotCQlXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSAqZW50cnk7Ci0JCWNoYXIgKmtleTsKLQkJR0ZpbGUgKmZpbGU7Ci0JCVdlYktp
dFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlOwotCi0JCS8qIENoZWNrIGlmIHdlIGFy
ZSBhbHJlYWR5IGNhY2hpbmcgdGhpcyByZXNvdXJjZSAqLwotCQlrZXkgPSBzb3VwX21lc3NhZ2Vf
Z2V0X2NhY2hlX2tleSAobXNnKTsKLQkJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNo
ZS0+cHJpdi0+Y2FjaGUsIGtleSk7Ci0JCWdfZnJlZSAoa2V5KTsKLQotCQlpZiAoZW50cnkgJiYg
ZW50cnktPmRpcnR5KQotCQkJcmV0dXJuOwotCi0JCS8qIENyZWF0ZSBhIG5ldyBlbnRyeSwgZGVs
ZXRpbmcgYW55IG9sZCBvbmUgaWYgcHJlc2VudCAqLwotCQlpZiAoZW50cnkpIHsKLQkJCXdlYmtp
dF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIGVudHJ5KTsKLQkJCXdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKLQkJfQotCi0JCWVudHJ5ID0gd2Via2l0
X3NvdXBfY2FjaGVfZW50cnlfbmV3IChjYWNoZSwgbXNnLCByZXF1ZXN0X3RpbWUsIHJlc3BvbnNl
X3RpbWUpOwotCQllbnRyeS0+aGl0cyA9IDE7Ci0KLQkJLyogRG8gbm90IGNvbnRpbnVlIGlmIGl0
IGNhbiBub3QgYmUgc3RvcmVkICovCi0JCWlmICghd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaW5z
ZXJ0X2J5X2tleSAoY2FjaGUsIChjb25zdCBnY2hhciAqKWVudHJ5LT5rZXksIGVudHJ5LCBUUlVF
KSkgewotCQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOwotCQkJ
cmV0dXJuOwotCQl9Ci0KLQkJZml4dHVyZSA9IGdfc2xpY2VfbmV3MCAoV2ViS2l0U291cENhY2hl
V3JpdGluZ0ZpeHR1cmUpOwotCQlmaXh0dXJlLT5jYWNoZSA9IGdfb2JqZWN0X3JlZiAoY2FjaGUp
OwotCQlmaXh0dXJlLT5lbnRyeSA9IGVudHJ5OwotCQlmaXh0dXJlLT5tc2cgPSBnX29iamVjdF9y
ZWYgKG1zZyk7Ci0KLQkJLyogV2UgY29ubmVjdCBub3cgdG8gdGhlc2Ugc2lnbmFscyBhbmQgYnVm
ZmVyIHRoZSBkYXRhCi0JCSAgIGlmIGl0IGNvbWVzIGJlZm9yZSB0aGUgZmlsZSBpcyByZWFkeSBm
b3Igd3JpdGluZyAqLwotCQlmaXh0dXJlLT5nb3RfY2h1bmtfaGFuZGxlciA9Ci0JCQlnX3NpZ25h
bF9jb25uZWN0IChtc2csICJnb3QtY2h1bmsiLCBHX0NBTExCQUNLIChtc2dfZ290X2NodW5rX2Ni
KSwgZml4dHVyZSk7Ci0JCWZpeHR1cmUtPmdvdF9ib2R5X2hhbmRsZXIgPQotCQkJZ19zaWduYWxf
Y29ubmVjdCAobXNnLCAiZ290LWJvZHkiLCBHX0NBTExCQUNLIChtc2dfZ290X2JvZHlfY2IpLCBm
aXh0dXJlKTsKLQkJZml4dHVyZS0+cmVzdGFydGVkX2hhbmRsZXIgPQotCQkJZ19zaWduYWxfY29u
bmVjdCAobXNnLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyAobXNnX3Jlc3RhcnRlZF9jYiksIGVu
dHJ5KTsKLQotCQkvKiBQcmVwYXJlIGVudHJ5ICovCi0JCWZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9w
YXRoIChlbnRyeS0+ZmlsZW5hbWUpOwotCQljYWNoZS0+cHJpdi0+bl9wZW5kaW5nKys7Ci0KLQkJ
ZW50cnktPmRpcnR5ID0gVFJVRTsKLQkJZW50cnktPmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJs
ZV9uZXcgKCk7Ci0JCWdfZmlsZV9hcHBlbmRfdG9fYXN5bmMgKGZpbGUsIDAsCi0JCQkJCUdfUFJJ
T1JJVFlfTE9XLCBlbnRyeS0+Y2FuY2VsbGFibGUsCi0JCQkJCShHQXN5bmNSZWFkeUNhbGxiYWNr
KWFwcGVuZF90b19yZWFkeV9jYiwKLQkJCQkJZml4dHVyZSk7Ci0JfSBlbHNlIGlmIChjYWNoZWFi
bGUgJiBXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElEQVRFUykgewotCQljaGFyICprZXk7Ci0JCVdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKLQotCQlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2Nh
Y2hlX2tleSAobXNnKTsKLQkJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJp
di0+Y2FjaGUsIGtleSk7Ci0JCWdfZnJlZSAoa2V5KTsKLQotCQlpZiAoZW50cnkpIHsKLQkJCWlm
ICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSkpCi0JCQkJd2Vi
a2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOwotCQl9Ci0JfSBlbHNlIGlm
IChjYWNoZWFibGUgJiBXRUJLSVRfU09VUF9DQUNIRV9WQUxJREFURVMpIHsKLQkJY2hhciAqa2V5
OwotCQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7Ci0KLQkJa2V5ID0gc291cF9tZXNzYWdl
X2dldF9jYWNoZV9rZXkgKG1zZyk7Ci0JCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2Fj
aGUtPnByaXYtPmNhY2hlLCBrZXkpOwotCQlnX2ZyZWUgKGtleSk7Ci0KLQkJLyogSXQncyBwb3Nz
aWJsZSB0byBnZXQgYSBDQUNIRV9WQUxJREFURVMgd2l0aCBubwotCQkgKiBlbnRyeSBpbiB0aGUg
aGFzaCB0YWJsZS4gVGhpcyBjb3VsZCBoYXBwZW4gaWYgZm9yCi0JCSAqIGV4YW1wbGUgdGhlIHNv
dXAgY2xpZW50IGlzIHRoZSBvbmUgY3JlYXRpbmcgdGhlCi0JCSAqIGNvbmRpdGlvbmFsIHJlcXVl
c3QuCi0JCSAqLwotCQlpZiAoZW50cnkpIHsKLQkJCWVudHJ5LT5iZWluZ192YWxpZGF0ZWQgPSBG
QUxTRTsKLQotCQkJLyogV2UgdXBkYXRlIHRoZSBoZWFkZXJzIG9mIHRoZSBleGlzdGluZyBjYWNo
ZSBpdGVtLAotCQkJICAgcGx1cyBpdHMgYWdlICovCi0JCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19m
b3JlYWNoIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsCi0JCQkJCQkgICAgICAoU291cE1lc3NhZ2VI
ZWFkZXJzRm9yZWFjaEZ1bmMpdXBkYXRlX2hlYWRlcnMsCi0JCQkJCQkgICAgICBlbnRyeS0+aGVh
ZGVycyk7Ci0JCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9zZXRfZnJlc2huZXNzIChlbnRyeSwg
bXNnLCBjYWNoZSk7Ci0JCX0KLQl9Ci19Ci0KLUdJbnB1dFN0cmVhbSAqCi13ZWJraXRfc291cF9j
YWNoZV9zZW5kX3Jlc3BvbnNlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAq
bXNnKQotewotCWNoYXIgKmtleTsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7Ci0JY2hh
ciAqY3VycmVudF9hZ2U7Ci0JR0lucHV0U3RyZWFtICpzdHJlYW0gPSBOVUxMOwotCUdGaWxlICpm
aWxlOwotCi0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNo
ZSksIE5VTEwpOwotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lTX01FU1NBR0UgKG1zZyks
IE5VTEwpOwotCi0Ja2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7Ci0JZW50
cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSk7Ci0JZ19m
cmVlIChrZXkpOwotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeSwgTlVMTCk7Ci0KLQkvKiBJ
ZiB3ZSBhcmUgdG9sZCB0byBzZW5kIGEgcmVzcG9uc2UgZnJvbSBjYWNoZSBhbnkgdmFsaWRhdGlv
bgotCSAgIGluIGNvdXJzZSBpcyBvdmVyIGJ5IG5vdyAqLwotCWVudHJ5LT5iZWluZ192YWxpZGF0
ZWQgPSBGQUxTRTsKLQotCS8qIEhlYWRlcnMgKi8KLQlzb3VwX21lc3NhZ2VfaGVhZGVyc19mb3Jl
YWNoIChlbnRyeS0+aGVhZGVycywKLQkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFkZXJzRm9yZWFj
aEZ1bmMpdXBkYXRlX2hlYWRlcnMsCi0JCQkJICAgICAgbXNnLT5yZXNwb25zZV9oZWFkZXJzKTsK
LQotCS8qIEFkZCAnQWdlJyBoZWFkZXIgd2l0aCB0aGUgY3VycmVudCBhZ2UgKi8KLQljdXJyZW50
X2FnZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0
X2N1cnJlbnRfYWdlIChlbnRyeSkpOwotCXNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UgKG1z
Zy0+cmVzcG9uc2VfaGVhZGVycywKLQkJCQkgICAgICAiQWdlIiwKLQkJCQkgICAgICBjdXJyZW50
X2FnZSk7Ci0JZ19mcmVlIChjdXJyZW50X2FnZSk7Ci0KLQkvKiBUT0RPOiB0aGUgb3JpZ2luYWwg
aWRlYSB3YXMgdG8gc2F2ZSByZWFkcywgYnV0IGN1cnJlbnQgY29kZQotCSAgIGFzc3VtZXMgdGhh
dCBhIHN0cmVhbSBpcyBhbHdheXMgcmV0dXJuZWQuIE5lZWQgdG8gcmVhY2gKLQkgICBzb21lIGFn
cmVlbWVudCBoZXJlLiBBbHNvIHdlIGhhdmUgdG8gaGFuZGxlIHRoZSBzaXR1YXRpb24KLQkgICB3
ZXJlIHRoZSBmaWxlIHdhcyBubyBsb25nZXIgdGhlcmUgKGZvciBleGFtcGxlIGZpbGVzCi0JICAg
cmVtb3ZlZCB3aXRob3V0IG5vdGlmeWluZyB0aGUgY2FjaGUgKi8KLQlmaWxlID0gZ19maWxlX25l
d19mb3JfcGF0aCAoZW50cnktPmZpbGVuYW1lKTsKLQlzdHJlYW0gPSAoR0lucHV0U3RyZWFtICop
Z19maWxlX3JlYWQgKGZpbGUsIE5VTEwsIE5VTEwpOwotCi0JcmV0dXJuIHN0cmVhbTsKLX0KLQot
c3RhdGljIHZvaWQKLXJlcXVlc3Rfc3RhcnRlZCAoU291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJl
LCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwKLQkJIFNvdXBNZXNzYWdlICptc2csIFNvdXBTb2NrZXQg
KnNvY2tldCkKLXsKLQlSZXF1ZXN0SGVscGVyICpoZWxwZXIgPSBnX3NsaWNlX25ldzAgKFJlcXVl
c3RIZWxwZXIpOwotCWhlbHBlci0+cmVxdWVzdF90aW1lID0gdGltZSAoTlVMTCk7Ci0JaGVscGVy
LT5mZWF0dXJlID0gZmVhdHVyZTsKLQloZWxwZXItPmdvdF9oZWFkZXJzX2hhbmRsZXIgPSBnX3Np
Z25hbF9jb25uZWN0IChtc2csICJnb3QtaGVhZGVycyIsCi0JCQkJCQkJR19DQUxMQkFDSyAobXNn
X2dvdF9oZWFkZXJzX2NiKSwKLQkJCQkJCQloZWxwZXIpOwotfQotCi1zdGF0aWMgdm9pZAotYXR0
YWNoIChTb3VwU2Vzc2lvbkZlYXR1cmUgKmZlYXR1cmUsIFNvdXBTZXNzaW9uICpzZXNzaW9uKQot
ewotCVdlYktpdFNvdXBDYWNoZSAqY2FjaGUgPSBXRUJLSVRfU09VUF9DQUNIRSAoZmVhdHVyZSk7
Ci0JY2FjaGUtPnByaXYtPnNlc3Npb24gPSBzZXNzaW9uOwotCi0Jd2Via2l0X3NvdXBfY2FjaGVf
ZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZS0+YXR0YWNoIChmZWF0dXJlLCBzZXNzaW9uKTsKLX0K
LQotc3RhdGljIHZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX3Nlc3Npb25fZmVhdHVyZV9pbml0IChT
b3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2UgKmZlYXR1cmVfaW50ZXJmYWNlLAotCQkJCQlncG9p
bnRlciBpbnRlcmZhY2VfZGF0YSkKLXsKLQl3ZWJraXRfc291cF9jYWNoZV9kZWZhdWx0X2ZlYXR1
cmVfaW50ZXJmYWNlID0KLQkJZ190eXBlX2RlZmF1bHRfaW50ZXJmYWNlX3BlZWsgKFNPVVBfVFlQ
RV9TRVNTSU9OX0ZFQVRVUkUpOwotCi0JZmVhdHVyZV9pbnRlcmZhY2UtPmF0dGFjaCA9IGF0dGFj
aDsKLQlmZWF0dXJlX2ludGVyZmFjZS0+cmVxdWVzdF9zdGFydGVkID0gcmVxdWVzdF9zdGFydGVk
OwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfY2FjaGVfaW5pdCAoV2ViS2l0U291cENh
Y2hlICpjYWNoZSkKLXsKLQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OwotCi0JcHJpdiA9
IGNhY2hlLT5wcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKLQot
CXByaXYtPmNhY2hlID0gZ19oYXNoX3RhYmxlX25ld19mdWxsIChnX3N0cl9oYXNoLAotCQkJCQkg
ICAgIGdfc3RyX2VxdWFsLAotCQkJCQkgICAgIChHRGVzdHJveU5vdGlmeSlnX2ZyZWUsCi0JCQkJ
CSAgICAgTlVMTCk7Ci0KLQkvKiBMUlUgKi8KLQlwcml2LT5scnVfc3RhcnQgPSBOVUxMOwotCi0J
LyogKi8KLQlwcml2LT5uX3BlbmRpbmcgPSAwOwotCi0JLyogQ2FjaGUgc2l6ZSAqLwotCXByaXYt
Pm1heF9zaXplID0gREVGQVVMVF9NQVhfU0laRTsKLQlwcml2LT5tYXhfZW50cnlfZGF0YV9zaXpl
ID0gcHJpdi0+bWF4X3NpemUgLyBNQVhfRU5UUllfREFUQV9QRVJDRU5UQUdFOwotCXByaXYtPnNp
emUgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX2NhY2hlX2l0ZW0gKGdwb2ludGVyIGRh
dGEsCi0JCSAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
ID0gKFdlYktpdFNvdXBDYWNoZSAqKSB1c2VyX2RhdGE7Ci0JV2ViS2l0U291cENhY2hlRW50cnkg
KmVudHJ5ID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopIGRhdGE7Ci0KLQlpZiAod2Via2l0X3Nv
dXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50cnkpKQotCQl3ZWJraXRfc291cF9jYWNo
ZV9lbnRyeV9mcmVlIChlbnRyeSwgRkFMU0UpOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3Nv
dXBfY2FjaGVfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKLXsKLQlXZWJLaXRTb3VwQ2FjaGVQ
cml2YXRlICpwcml2OwotCUdMaXN0ICplbnRyaWVzOwotCi0JcHJpdiA9IFdFQktJVF9TT1VQX0NB
Q0hFIChvYmplY3QpLT5wcml2OwotCi0JLy8gQ2Fubm90IHVzZSBnX2hhc2hfdGFibGVfZm9yZWFj
aCBhcyBjYWxsYmFja3MgbXVzdCBub3QgbW9kaWZ5IHRoZSBoYXNoIHRhYmxlCi0JZW50cmllcyA9
IGdfaGFzaF90YWJsZV9nZXRfdmFsdWVzIChwcml2LT5jYWNoZSk7Ci0JZ19saXN0X2ZvcmVhY2gg
KGVudHJpZXMsIHJlbW92ZV9jYWNoZV9pdGVtLCBvYmplY3QpOwotCWdfbGlzdF9mcmVlIChlbnRy
aWVzKTsKLQotCWdfaGFzaF90YWJsZV9kZXN0cm95IChwcml2LT5jYWNoZSk7Ci0JZ19mcmVlIChw
cml2LT5jYWNoZV9kaXIpOwotCi0JZ19saXN0X2ZyZWUgKHByaXYtPmxydV9zdGFydCk7Ci0JcHJp
di0+bHJ1X3N0YXJ0ID0gTlVMTDsKLQotCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNo
ZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLXdl
YmtpdF9zb3VwX2NhY2hlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqb2JqZWN0LCBndWludCBwcm9w
X2lkLAotCQkJCWNvbnN0IEdWYWx1ZSAqdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQotewotCVdl
YktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAob2JqZWN0KS0+
cHJpdjsKLQotCXN3aXRjaCAocHJvcF9pZCkgewotCWNhc2UgUFJPUF9DQUNIRV9ESVI6Ci0JCXBy
aXYtPmNhY2hlX2RpciA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotCQkvKiBDcmVhdGUg
ZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0IChGSVhNRTogc2hvdWxkIHdlPykgKi8KLQkJ
aWYgKCFnX2ZpbGVfdGVzdCAocHJpdi0+Y2FjaGVfZGlyLCBHX0ZJTEVfVEVTVF9FWElTVFMgfCBH
X0ZJTEVfVEVTVF9JU19ESVIpKQotCQkJZ19ta2Rpcl93aXRoX3BhcmVudHMgKHByaXYtPmNhY2hl
X2RpciwgMDcwMCk7Ci0JCWJyZWFrOwotCWNhc2UgUFJPUF9DQUNIRV9UWVBFOgotCQlwcml2LT5j
YWNoZV90eXBlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotCQkvKiBUT0RPOiBjbGVhciBw
cml2YXRlIGVudHJpZXMgYW5kIGlzc3VlIGEgd2FybmluZyBpZiBtb3ZpbmcgdG8gc2hhcmVkPyAq
LwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2
b2lkCi13ZWJraXRfc291cF9jYWNoZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKm9iamVjdCwgZ3Vp
bnQgcHJvcF9pZCwKLQkJCQlHVmFsdWUgKnZhbHVlLCBHUGFyYW1TcGVjICpwc3BlYykKLXsKLQlX
ZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVjdCkt
PnByaXY7Ci0KLQlzd2l0Y2ggKHByb3BfaWQpIHsKLQljYXNlIFBST1BfQ0FDSEVfRElSOgotCQln
X3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBwcml2LT5jYWNoZV9kaXIpOwotCQlicmVhazsKLQlj
YXNlIFBST1BfQ0FDSEVfVFlQRToKLQkJZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHByaXYtPmNh
Y2hlX3R5cGUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotCQlicmVhazsKLQl9Ci19Ci0K
LXN0YXRpYyB2b2lkCi13ZWJraXRfc291cF9jYWNoZV9jb25zdHJ1Y3RlZCAoR09iamVjdCAqb2Jq
ZWN0KQotewotCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXY7Ci0KLQlwcml2ID0gV0VCS0lU
X1NPVVBfQ0FDSEUgKG9iamVjdCktPnByaXY7Ci0KLQlpZiAoIXByaXYtPmNhY2hlX2Rpcikgewot
CQkvKiBTZXQgYSBkZWZhdWx0IGNhY2hlIGRpciwgZGlmZmVyZW50IGZvciBlYWNoIHVzZXIgKi8K
LQkJcHJpdi0+Y2FjaGVfZGlyID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9jYWNoZV9k
aXIgKCksCi0JCQkJCQkgICAgImh0dHBjYWNoZSIsCi0JCQkJCQkgICAgTlVMTCk7Ci0JCWlmICgh
Z19maWxlX3Rlc3QgKHByaXYtPmNhY2hlX2RpciwgR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxF
X1RFU1RfSVNfRElSKSkKLQkJCWdfbWtkaXJfd2l0aF9wYXJlbnRzIChwcml2LT5jYWNoZV9kaXIs
IDA3MDApOwotCX0KLQotCWlmIChHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfY2FjaGVfcGFy
ZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCi0JCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9j
YWNoZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCAob2JqZWN0KTsKLX0KLQotI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9UWVBFX1RZUEUgKHdlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5
cGUgKCkpCi1zdGF0aWMgR1R5cGUKLXdlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5cGUgKHZv
aWQpCi17Ci0Jc3RhdGljIEdUeXBlIGNhY2hlX3R5cGUgPSAwOwotCi0Jc3RhdGljIGNvbnN0IEdF
bnVtVmFsdWUgY2FjaGVfdHlwZXNbXSA9IHsKLQkJeyBXRUJLSVRfU09VUF9DQUNIRV9TSU5HTEVf
VVNFUiwgIlNpbmdsZSB1c2VyIGNhY2hlIiwgInVzZXIiIH0sCi0JCXsgV0VCS0lUX1NPVVBfQ0FD
SEVfU0hBUkVELCAiU2hhcmVkIGNhY2hlIiwgInNoYXJlZCIgfSwKLQkJeyAwLCBOVUxMLCBOVUxM
IH0KLQl9OwotCi0JaWYgKCFjYWNoZV90eXBlKSB7Ci0JCWNhY2hlX3R5cGUgPSBnX2VudW1fcmVn
aXN0ZXJfc3RhdGljICgiV2ViS2l0U291cENhY2hlVHlwZVR5cGUiLCBjYWNoZV90eXBlcyk7Ci0J
fQotCXJldHVybiBjYWNoZV90eXBlOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3NvdXBfY2Fj
aGVfY2xhc3NfaW5pdCAoV2ViS2l0U291cENhY2hlQ2xhc3MgKmNhY2hlX2NsYXNzKQotewotCUdP
YmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKiljYWNoZV9jbGFzczsK
LQotCWdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfY2FjaGVfZmluYWxpemU7
Ci0JZ29iamVjdF9jbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfc291cF9jYWNoZV9jb25zdHJ1
Y3RlZDsKLQlnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfc291cF9jYWNoZV9z
ZXRfcHJvcGVydHk7Ci0JZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBf
Y2FjaGVfZ2V0X3Byb3BlcnR5OwotCi0JY2FjaGVfY2xhc3MtPmdldF9jYWNoZWFiaWxpdHkgPSBn
ZXRfY2FjaGVhYmlsaXR5OwotCi0JZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29i
amVjdF9jbGFzcywgUFJPUF9DQUNIRV9ESVIsCi0JCQkJCSBnX3BhcmFtX3NwZWNfc3RyaW5nICgi
Y2FjaGUtZGlyIiwKLQkJCQkJCQkgICAgICAiQ2FjaGUgZGlyZWN0b3J5IiwKLQkJCQkJCQkgICAg
ICAiVGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGUgZmlsZXMiLAotCQkJCQkJCSAgICAg
IE5VTEwsCi0JCQkJCQkJICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVD
VF9PTkxZKSk7Ci0KLQlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2Ns
YXNzLCBQUk9QX0NBQ0hFX1RZUEUsCi0JCQkJCSBnX3BhcmFtX3NwZWNfZW51bSAoImNhY2hlLXR5
cGUiLAotCQkJCQkJCSAgICAiQ2FjaGUgdHlwZSIsCi0JCQkJCQkJICAgICJXaGV0aGVyIHRoZSBj
YWNoZSBpcyBwcml2YXRlIG9yIHNoYXJlZCIsCi0JCQkJCQkJICAgIFdFQktJVF9TT1VQX0NBQ0hF
X1RZUEVfVFlQRSwKLQkJCQkJCQkgICAgV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VTRVIsCi0J
CQkJCQkJICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOwot
Ci0JZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChjYWNoZV9jbGFzcywgc2l6ZW9mIChXZWJLaXRT
b3VwQ2FjaGVQcml2YXRlKSk7Ci19Ci0KLS8qKgotICogd2Via2l0X3NvdXBfY2FjaGVfbmV3Ogot
ICogQGNhY2hlX2RpcjogdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGVkIGRhdGEsIG9y
ICVOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBvbmUKLSAqIEBjYWNoZV90eXBlOiB0aGUgI1dlYktp
dFNvdXBDYWNoZVR5cGUgb2YgdGhlIGNhY2hlCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0
U291cENhY2hlLgotICoKLSAqIFJldHVybnM6IGEgbmV3ICNXZWJLaXRTb3VwQ2FjaGUKLSAqCi0g
KiBTaW5jZTogMi4yOAotICoqLwotV2ViS2l0U291cENhY2hlICoKLXdlYmtpdF9zb3VwX2NhY2hl
X25ldyAoY29uc3QgY2hhciAqY2FjaGVfZGlyLCBXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5
cGUpCi17Ci0JcmV0dXJuIGdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwKLQkJ
CSAgICAgImNhY2hlLWRpciIsIGNhY2hlX2RpciwKLQkJCSAgICAgImNhY2hlLXR5cGUiLCBjYWNo
ZV90eXBlLAotCQkJICAgICBOVUxMKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfc291cF9jYWNoZV9o
YXNfcmVzcG9uc2U6Ci0gKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQotICogQG1zZzogYSAj
U291cE1lc3NhZ2UKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgd2hldGhlciB0aGUg
QGNhY2hlIG9iamVjdCBoYXMgYSBwcm9wZXIKLSAqIHJlc3BvbnNlIGZvciB0aGUgcmVxdWVzdCBA
bXNnIGdpdmVuIHRoZSBmbGFncyBib3RoIGluIHRoZSByZXF1ZXN0Ci0gKiBhbmQgdGhlIGNhY2hl
ZCByZXBseSBhbmQgdGhlIHRpbWUgZWxsYXBzZWQgc2luY2UgaXQgd2FzIGNhY2hlZC4KLSAqCi0g
KiBSZXR1cm5zOiB3aGV0aGVyIG9yIG5vdCB0aGUgQGNhY2hlIGhhcyBhIHZhbGlkIHJlc3BvbnNl
IGZvciBAbXNnCi0gKiovCi1XZWJLaXRTb3VwQ2FjaGVSZXNwb25zZQotd2Via2l0X3NvdXBfY2Fj
aGVfaGFzX3Jlc3BvbnNlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAqbXNn
KQotewotCWNoYXIgKmtleTsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7Ci0JY29uc3Qg
Y2hhciAqY2FjaGVfY29udHJvbDsKLQlncG9pbnRlciB2YWx1ZTsKLQlnYm9vbGVhbiBtdXN0X3Jl
dmFsaWRhdGU7Ci0JaW50IG1heF9hZ2UsIG1heF9zdGFsZSwgbWluX2ZyZXNoOwotCUdMaXN0ICps
cnVfaXRlbSwgKml0ZW07Ci0KLQlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNn
KTsKLQllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5
KTsKLQlnX2ZyZWUgKGtleSk7Ci0KLQkvKiAxLiBUaGUgcHJlc2VudGVkIFJlcXVlc3QtVVJJIGFu
ZCB0aGF0IG9mIHN0b3JlZCByZXNwb25zZQotCSAqIG1hdGNoCi0JICovCi0JaWYgKCFlbnRyeSkK
LQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOwotCi0JLyogSW5jcmVh
c2UgaGl0IGNvdW50LiBUYWtlIHNvcnRpbmcgaW50byBhY2NvdW50ICovCi0JZW50cnktPmhpdHMr
KzsKLQlscnVfaXRlbSA9IGdfbGlzdF9maW5kIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRy
eSk7Ci0JaXRlbSA9IGxydV9pdGVtOwotCXdoaWxlIChpdGVtLT5uZXh0ICYmIGxydV9jb21wYXJl
X2Z1bmMgKGl0ZW0tPmRhdGEsIGl0ZW0tPm5leHQtPmRhdGEpID4gMCkKLQkJaXRlbSA9IGdfbGlz
dF9uZXh0IChpdGVtKTsKLQotCWlmIChpdGVtICE9IGxydV9pdGVtKSB7Ci0JCWNhY2hlLT5wcml2
LT5scnVfc3RhcnQgPSBnX2xpc3RfcmVtb3ZlX2xpbmsgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQs
IGxydV9pdGVtKTsKLQkJaXRlbSA9IGdfbGlzdF9pbnNlcnRfc29ydGVkIChpdGVtLCBscnVfaXRl
bS0+ZGF0YSwgbHJ1X2NvbXBhcmVfZnVuYyk7Ci0JCWdfbGlzdF9mcmVlIChscnVfaXRlbSk7Ci0J
fQotCi0JaWYgKGVudHJ5LT5kaXJ0eSB8fCBlbnRyeS0+YmVpbmdfdmFsaWRhdGVkKQotCQlyZXR1
cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7Ci0KLQkvKiAyLiBUaGUgcmVxdWVz
dCBtZXRob2QgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdG9yZWQgcmVzcG9uc2UKLQkgKiAgYWxsb3dz
IGl0IHRvIGJlIHVzZWQgZm9yIHRoZSBwcmVzZW50ZWQgcmVxdWVzdAotCSAqLwotCi0JLyogSW4g
cHJhY3RpY2UgdGhpcyBtZWFucyB3ZSBvbmx5IHJldHVybiBvdXIgcmVzb3VyY2UgZm9yIEdFVCwK
LQkgKiBjYWNoZWFiaWxpdHkgZm9yIG90aGVyIG1ldGhvZHMgaXMgYSBUT0RPIGluIHRoZSBSRkMK
LQkgKiAoVE9ETzogYWx0aG91Z2ggd2UgY291bGQgcmV0dXJuIHRoZSBoZWFkZXJzIGZvciBIRUFE
Ci0JICogcHJvYmFibHkpLgotCSAqLwotCWlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9H
RVQpCi0JCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKLQotCS8qIDMu
IFNlbGVjdGluZyByZXF1ZXN0LWhlYWRlcnMgbm9taW5hdGVkIGJ5IHRoZSBzdG9yZWQKLQkgKiBy
ZXNwb25zZSAoaWYgYW55KSBtYXRjaCB0aG9zZSBwcmVzZW50ZWQuCi0JICovCi0KLQkvKiBUT0RP
ICovCi0KLQkvKiA0LiBUaGUgcmVxdWVzdCBpcyBhIGNvbmRpdGlvbmFsIHJlcXVlc3QgaXNzdWVk
IGJ5IHRoZSBjbGllbnQuCi0JICovCi0JaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAobXNn
LT5yZXF1ZXN0X2hlYWRlcnMsICJJZi1Nb2RpZmllZC1TaW5jZSIpIHx8Ci0JICAgIHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2dldCAobXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJJZi1Ob25lLU1hdGNoIikp
Ci0JCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKLQotCS8qIDUuIFRo
ZSBwcmVzZW50ZWQgcmVxdWVzdCBhbmQgc3RvcmVkIHJlc3BvbnNlIGFyZSBmcmVlIGZyb20KLQkg
KiBkaXJlY3RpdmVzIHRoYXQgd291bGQgcHJldmVudCBpdHMgdXNlLgotCSAqLwotCi0JbXVzdF9y
ZXZhbGlkYXRlID0gRkFMU0U7Ci0JbWF4X2FnZSA9IG1heF9zdGFsZSA9IG1pbl9mcmVzaCA9IC0x
OwotCi0JY2FjaGVfY29udHJvbCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAobXNnLT5yZXF1
ZXN0X2hlYWRlcnMsICJDYWNoZS1Db250cm9sIik7Ci0JaWYgKGNhY2hlX2NvbnRyb2wpIHsKLQkJ
R0hhc2hUYWJsZSAqaGFzaCA9IHNvdXBfaGVhZGVyX3BhcnNlX3BhcmFtX2xpc3QgKGNhY2hlX2Nv
bnRyb2wpOwotCi0JCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibm8t
c3RvcmUiLCBOVUxMLCBOVUxMKSkgewotCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0ICho
YXNoKTsKLQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKLQkJfQot
Ci0JCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibm8tY2FjaGUiLCBO
VUxMLCBOVUxMKSkgewotCQkJZW50cnktPm11c3RfcmV2YWxpZGF0ZSA9IFRSVUU7Ci0JCX0KLQot
CQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm1heC1hZ2UiLCBOVUxM
LCAmdmFsdWUpKSB7Ci0JCQltYXhfYWdlID0gKGludClNSU4gKGdfYXNjaWlfc3RydG9sbCAodmFs
dWUsIE5VTEwsIDEwKSwgR19NQVhJTlQzMik7Ci0JCX0KLQotCQkvKiBtYXgtc3RhbGUgY2FuIGhh
dmUgbm8gdmFsdWUgc2V0LCB3ZSBuZWVkIHRvIHVzZSBfZXh0ZW5kZWQgKi8KLQkJaWYgKGdfaGFz
aF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJtYXgtc3RhbGUiLCBOVUxMLCAmdmFsdWUp
KSB7Ci0JCQlpZiAodmFsdWUpCi0JCQkJbWF4X3N0YWxlID0gKGludClNSU4gKGdfYXNjaWlfc3Ry
dG9sbCAodmFsdWUsIE5VTEwsIDEwKSwgR19NQVhJTlQzMik7Ci0JCQllbHNlCi0JCQkJbWF4X3N0
YWxlID0gR19NQVhJTlQzMjsKLQkJfQotCi0JCXZhbHVlID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAo
aGFzaCwgIm1pbi1mcmVzaCIpOwotCQlpZiAodmFsdWUpCi0JCQltaW5fZnJlc2ggPSAoaW50KU1J
TiAoZ19hc2NpaV9zdHJ0b2xsICh2YWx1ZSwgTlVMTCwgMTApLCBHX01BWElOVDMyKTsKLQotCQlz
b3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOwotCi0JCWlmIChtYXhfYWdlICE9IC0x
KSB7Ci0JCQlndWludCBjdXJyZW50X2FnZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9j
dXJyZW50X2FnZSAoZW50cnkpOwotCi0JCQkvKiBJZiB3ZSBhcmUgb3ZlciBtYXgtYWdlIGFuZCBt
YXgtc3RhbGUgaXMgbm90Ci0JCQkgICBzZXQsIGRvIG5vdCB1c2UgdGhlIHZhbHVlIGZyb20gdGhl
IGNhY2hlCi0JCQkgICB3aXRob3V0IHZhbGlkYXRpb24gKi8KLQkJCWlmICgoZ3VpbnQpIG1heF9h
Z2UgPD0gY3VycmVudF9hZ2UgJiYgbWF4X3N0YWxlID09IC0xKQotCQkJCXJldHVybiBXRUJLSVRf
U09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OOwotCQl9Ci0JfQotCi0JLyogNi4g
VGhlIHN0b3JlZCByZXNwb25zZSBpcyBlaXRoZXI6IGZyZXNoLCBhbGxvd2VkIHRvIGJlCi0JICog
c2VydmVkIHN0YWxlIG9yIHN1Y2Nlc2Z1bGx5IHZhbGlkYXRlZAotCSAqLwotCS8qIFRPRE8gY29u
c2lkZXIgYWxzbyBwcm94eS1yZXZhbGlkYXRlICYgcy1tYXhhZ2UgKi8KLQlpZiAoZW50cnktPm11
c3RfcmV2YWxpZGF0ZSkKLQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURT
X1ZBTElEQVRJT047Ci0KLQlpZiAoIXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2lzX2ZyZXNoX2Vu
b3VnaCAoZW50cnksIG1pbl9mcmVzaCkpIHsKLQkJLyogTm90IGZyZXNoLCBjYW4gaXQgYmUgc2Vy
dmVkIHN0YWxlPyAqLwotCQlpZiAobWF4X3N0YWxlICE9IC0xKSB7Ci0JCQkvKiBHX01BWElOVDMy
IG1lYW5zIHdlIGFjY2VwdCBhbnkgc3RhbGVuZXNzICovCi0JCQlpZiAobWF4X3N0YWxlID09IEdf
TUFYSU5UMzIpCi0JCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNIOwot
Ci0JCQlpZiAoKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkp
IC0gZW50cnktPmZyZXNobmVzc19saWZldGltZSkgPD0gKGd1aW50KSBtYXhfc3RhbGUpCi0JCQkJ
cmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNIOwotCQl9Ci0KLQkJcmV0dXJu
IFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT047Ci0JfQotCi0JcmV0
dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNIOwotfQotCi0vKioKLSAqIHdlYmtp
dF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHk6Ci0gKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBD
YWNoZQotICogQG1zZzogYSAjU291cE1lc3NhZ2UKLSAqCi0gKiBDYWxjdWxhdGVzIHdoZXRoZXIg
dGhlIEBtc2cgY2FuIGJlIGNhY2hlZCBvciBub3QuCi0gKgotICogUmV0dXJuczogYSAjV2ViS2l0
U291cENhY2hlYWJpbGl0eSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIEBtc2cgY2FuIGJl
IGNhY2hlZCBvciBub3QuCi0gKiovCi1XZWJLaXRTb3VwQ2FjaGVhYmlsaXR5Ci13ZWJraXRfc291
cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVz
c2FnZSAqbXNnKQotewotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9DQUNI
RSAoY2FjaGUpLCBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSk7Ci0JZ19yZXR1cm5fdmFs
X2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNI
RUFCTEUpOwotCi0JcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9DTEFTUyAoY2FjaGUpLT5n
ZXRfY2FjaGVhYmlsaXR5IChjYWNoZSwgbXNnKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1mb3Jj
ZV9mbHVzaF90aW1lb3V0IChncG9pbnRlciBkYXRhKQotewotCWdib29sZWFuICpmb3JjZWQgPSAo
Z2Jvb2xlYW4gKilkYXRhOwotCSpmb3JjZWQgPSBUUlVFOwotCi0JcmV0dXJuIEZBTFNFOwotfQot
Ci0vKioKLSAqIHdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoOgotICogQGNhY2hlOiBhICNXZWJLaXRT
b3VwQ2FjaGUKLSAqIEBzZXNzaW9uOiB0aGUgI1NvdXBTZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0
aGUgQGNhY2hlCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGZvcmNlIGFsbCBwZW5kaW5nIHdy
aXRlcyBpbiB0aGUgQGNhY2hlIHRvIGJlCi0gKiBjb21taXR0ZWQgdG8gZGlzay4gRm9yIGRvaW5n
IHNvIGl0IHdpbGwgaXRlcmF0ZSB0aGUgI0dNYWluQ29udGV4dAotICogYXNzb2NpYXRlZCB3aXRo
IHRoZSBAc2Vzc2lvbiAod2hpY2ggY2FuIGJlIHRoZSBkZWZhdWx0IG9uZSkgYXMgbG9uZwotICog
YXMgbmVlZGVkLgotICoqLwotdm9pZAotd2Via2l0X3NvdXBfY2FjaGVfZmx1c2ggKFdlYktpdFNv
dXBDYWNoZSAqY2FjaGUpCi17Ci0JR01haW5Db250ZXh0ICphc3luY19jb250ZXh0OwotCVNvdXBT
ZXNzaW9uICpzZXNzaW9uOwotCWd1aW50IHRpbWVvdXRfaWQ7Ci0JZ2Jvb2xlYW4gZm9yY2VkID0g
RkFMU0U7Ci0KLQlnX3JldHVybl9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9DQUNIRSAoY2FjaGUp
KTsKLQotCXNlc3Npb24gPSBjYWNoZS0+cHJpdi0+c2Vzc2lvbjsKLQlnX3JldHVybl9pZl9mYWls
IChTT1VQX0lTX1NFU1NJT04gKHNlc3Npb24pKTsKLQlhc3luY19jb250ZXh0ID0gc291cF9zZXNz
aW9uX2dldF9hc3luY19jb250ZXh0IChzZXNzaW9uKTsKLQotCS8qIFdlIGdpdmUgY2FjaGUgMTAg
c2VjcyB0byBmaW5pc2ggKi8KLQl0aW1lb3V0X2lkID0gZ190aW1lb3V0X2FkZCAoMTAwMDAsIGZv
cmNlX2ZsdXNoX3RpbWVvdXQsICZmb3JjZWQpOwotCi0Jd2hpbGUgKCFmb3JjZWQgJiYgY2FjaGUt
PnByaXYtPm5fcGVuZGluZyA+IDApCi0JCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAoYXN5bmNf
Y29udGV4dCwgRkFMU0UpOwotCi0JaWYgKCFmb3JjZWQpCi0JCWdfc291cmNlX3JlbW92ZSAodGlt
ZW91dF9pZCk7Ci0JZWxzZQotCQlnX3dhcm5pbmcgKCJDYWNoZSBmbHVzaCBmaW5pc2hlZCBkZXNw
aXRlICVkIHBlbmRpbmcgcmVxdWVzdHMiLCBjYWNoZS0+cHJpdi0+bl9wZW5kaW5nKTsKLX0KLQot
c3RhdGljIHZvaWQKLWNsZWFyX2NhY2hlX2l0ZW0gKGdwb2ludGVyIGRhdGEsCi0JCSAgZ3BvaW50
ZXIgdXNlcl9kYXRhKQotewotCVdlYktpdFNvdXBDYWNoZSAqY2FjaGUgPSAoV2ViS2l0U291cENh
Y2hlICopIHVzZXJfZGF0YTsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSAoV2ViS2l0
U291cENhY2hlRW50cnkgKikgZGF0YTsKLQotCWlmICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9y
ZW1vdmUgKGNhY2hlLCBlbnRyeSkpCi0JCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVu
dHJ5LCBUUlVFKTsKLX0KLQotLyoqCi0gKiB3ZWJraXRfc291cF9jYWNoZV9jbGVhcjoKLSAqIEBj
YWNoZTogYSAjV2ViS2l0U291cENhY2hlCi0gKgotICogV2lsbCByZW1vdmUgYWxsIGVudHJpZXMg
aW4gdGhlIEBjYWNoZSBwbHVzIGFsbCB0aGUgY2FjaGUgZmlsZXMKLSAqIGFzc29jaWF0ZWQgd2l0
aCB0aGVtLgotICoqLwotdm9pZAotd2Via2l0X3NvdXBfY2FjaGVfY2xlYXIgKFdlYktpdFNvdXBD
YWNoZSAqY2FjaGUpCi17Ci0JR0hhc2hUYWJsZSAqaGFzaDsKLQlHTGlzdCAqZW50cmllczsKLQot
CWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSkpOwotCi0JaGFz
aCA9IGNhY2hlLT5wcml2LT5jYWNoZTsKLQlnX3JldHVybl9pZl9mYWlsIChoYXNoKTsKLQotCS8v
IENhbm5vdCB1c2UgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggYXMgY2FsbGJhY2tzIG11c3Qgbm90IG1v
ZGlmeSB0aGUgaGFzaCB0YWJsZQotCWVudHJpZXMgPSBnX2hhc2hfdGFibGVfZ2V0X3ZhbHVlcyAo
aGFzaCk7Ci0JZ19saXN0X2ZvcmVhY2ggKGVudHJpZXMsIGNsZWFyX2NhY2hlX2l0ZW0sIGNhY2hl
KTsKLQlnX2xpc3RfZnJlZSAoZW50cmllcyk7Ci19Ci0KLVNvdXBNZXNzYWdlICoKLXdlYmtpdF9z
b3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QgKFdlYktpdFNvdXBDYWNoZSAq
Y2FjaGUsIFNvdXBNZXNzYWdlICpvcmlnaW5hbCkKLXsKLQlTb3VwTWVzc2FnZSAqbXNnOwotCVNv
dXBVUkkgKnVyaTsKLQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7Ci0JY2hhciAqa2V5Owot
CWNvbnN0IGNoYXIgKnZhbHVlOwotCi0JZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdFQktJVF9JU19T
T1VQX0NBQ0hFIChjYWNoZSksIE5VTEwpOwotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lT
X01FU1NBR0UgKG9yaWdpbmFsKSwgTlVMTCk7Ci0KLQkvKiBGaXJzdCBjb3B5IHRoZSBkYXRhIHdl
IG5lZWQgZnJvbSB0aGUgb3JpZ2luYWwgbWVzc2FnZSAqLwotCXVyaSA9IHNvdXBfbWVzc2FnZV9n
ZXRfdXJpIChvcmlnaW5hbCk7Ci0JbXNnID0gc291cF9tZXNzYWdlX25ld19mcm9tX3VyaSAob3Jp
Z2luYWwtPm1ldGhvZCwgdXJpKTsKLQotCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZvcmVhY2ggKG9y
aWdpbmFsLT5yZXF1ZXN0X2hlYWRlcnMsCi0JCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0Zv
cmVhY2hGdW5jKWNvcHlfaGVhZGVycywKLQkJCQkgICAgICBtc2ctPnJlcXVlc3RfaGVhZGVycyk7
Ci0KLQkvKiBOb3cgYWRkIHRoZSB2YWxpZGF0b3IgZW50cmllcyBpbiB0aGUgaGVhZGVyIGZyb20g
dGhlIGNhY2hlZAotCSAgIGRhdGEgKi8KLQlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tl
eSAob3JpZ2luYWwpOwotCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYt
PmNhY2hlLCBrZXkpOwotCWdfZnJlZSAoa2V5KTsKLQotCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChl
bnRyeSwgTlVMTCk7Ci0KLQllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gVFJVRTsKLQotCXZhbHVl
ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkxhc3QtTW9kaWZp
ZWQiKTsKLQlpZiAodmFsdWUpCi0JCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAobXNnLT5y
ZXF1ZXN0X2hlYWRlcnMsCi0JCQkJCSAgICAgIklmLU1vZGlmaWVkLVNpbmNlIiwKLQkJCQkJICAg
ICB2YWx1ZSk7Ci0JdmFsdWUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFk
ZXJzLCAiRVRhZyIpOwotCWlmICh2YWx1ZSkKLQkJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5k
IChtc2ctPnJlcXVlc3RfaGVhZGVycywKLQkJCQkJICAgICAiSWYtTm9uZS1NYXRjaCIsCi0JCQkJ
CSAgICAgdmFsdWUpOwotCXJldHVybiBtc2c7Ci19Ci0KLSNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FD
SEVfRklMRSAic291cC5jYWNoZSIKLQotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9IRUFERVJT
X0ZPUk1BVCAie3NzfSIKLSNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9STUFU
ICIoc3NidXV1dXVhIiBXRUJLSVRfU09VUF9DQUNIRV9IRUFERVJTX0ZPUk1BVCAiKSIKLSNkZWZp
bmUgV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQgImEiIFdFQktJVF9TT1VQX0NBQ0hF
X1BIRUFERVJTX0ZPUk1BVAotCi0vKiBCYXNpY2FsbHkgdGhlIHNhbWUgZm9ybWF0IHRoYW4gYWJv
dmUgZXhjZXB0IHRoYXQgc29tZSBzdHJpbmdzIGFyZQotICAgcHJlcGVuZGVkIHdpdGggJi4gVGhp
cyB3YXkgdGhlIEdWYXJpYW50IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZQotICAgZGF0YSBpbnN0
ZWFkIG9mIGR1cGxpY2F0aW5nIHRoZSBzdHJpbmcgKi8KLSNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FD
SEVfREVDT0RFX0hFQURFUlNfRk9STUFUICJ7JnMmc30iCi0KLXN0YXRpYyB2b2lkCi1wYWNrX2Vu
dHJ5IChncG9pbnRlciBkYXRhLAotCSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JV2ViS2l0
U291cENhY2hlRW50cnkgKmVudHJ5ID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopIGRhdGE7Ci0J
U291cE1lc3NhZ2VIZWFkZXJzSXRlciBpdGVyOwotCWNvbnN0IGdjaGFyICpoZWFkZXJfa2V5LCAq
aGVhZGVyX3ZhbHVlOwotCUdWYXJpYW50QnVpbGRlciAqaGVhZGVyc19idWlsZGVyOwotCUdWYXJp
YW50QnVpbGRlciAqZW50cmllc19idWlsZGVyID0gKEdWYXJpYW50QnVpbGRlciAqKXVzZXJfZGF0
YTsKLQotCS8qIERvIG5vdCBzdG9yZSBub24tY29uc29saWRhdGVkIGVudHJpZXMgKi8KLQlpZiAo
ZW50cnktPmRpcnR5IHx8IGVudHJ5LT53cml0aW5nIHx8ICFlbnRyeS0+a2V5KQotCQlyZXR1cm47
Ci0KLQkvKiBQYWNrIGhlYWRlcnMgKi8KLQloZWFkZXJzX2J1aWxkZXIgPSBnX3ZhcmlhbnRfYnVp
bGRlcl9uZXcgKEdfVkFSSUFOVF9UWVBFX0FSUkFZKTsKLQlzb3VwX21lc3NhZ2VfaGVhZGVyc19p
dGVyX2luaXQgKCZpdGVyLCBlbnRyeS0+aGVhZGVycyk7Ci0Jd2hpbGUgKHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2l0ZXJfbmV4dCAoJml0ZXIsICZoZWFkZXJfa2V5LCAmaGVhZGVyX3ZhbHVlKSkgewot
CQlpZiAoZ191dGY4X3ZhbGlkYXRlIChoZWFkZXJfdmFsdWUsIC0xLCBOVUxMKSkKLQkJCWdfdmFy
aWFudF9idWlsZGVyX2FkZCAoaGVhZGVyc19idWlsZGVyLCBXRUJLSVRfU09VUF9DQUNIRV9IRUFE
RVJTX0ZPUk1BVCwKLQkJCQkJICAgICAgIGhlYWRlcl9rZXksIGhlYWRlcl92YWx1ZSk7Ci0JfQot
Ci0JLyogRW50cnkgZGF0YSAqLwotCWdfdmFyaWFudF9idWlsZGVyX2FkZCAoZW50cmllc19idWls
ZGVyLCBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQsCi0JCQkgICAgICAgZW50cnkt
PmtleSwgZW50cnktPmZpbGVuYW1lLCBlbnRyeS0+bXVzdF9yZXZhbGlkYXRlLAotCQkJICAgICAg
IGVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUsIGVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2Us
Ci0JCQkgICAgICAgZW50cnktPnJlc3BvbnNlX3RpbWUsIGVudHJ5LT5oaXRzLCBlbnRyeS0+bGVu
Z3RoLCBoZWFkZXJzX2J1aWxkZXIpOwotCi0JZ192YXJpYW50X2J1aWxkZXJfdW5yZWYgKGhlYWRl
cnNfYnVpbGRlcik7Ci19Ci0KLXZvaWQKLXdlYmtpdF9zb3VwX2NhY2hlX2R1bXAgKFdlYktpdFNv
dXBDYWNoZSAqY2FjaGUpCi17Ci0JV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJ
VF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFIChjYWNoZSk7Ci0JZ2NoYXIgKmZpbGVuYW1lOwotCUdW
YXJpYW50QnVpbGRlciAqZW50cmllc19idWlsZGVyOwotCUdWYXJpYW50ICpjYWNoZV92YXJpYW50
OwotCi0JaWYgKCFnX2xpc3RfbGVuZ3RoIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0KSkKLQkJcmV0
dXJuOwotCi0JLyogQ3JlYXRlIHRoZSBidWlsZGVyIGFuZCBpdGVyYXRlIG92ZXIgYWxsIGVudHJp
ZXMgKi8KLQllbnRyaWVzX2J1aWxkZXIgPSBnX3ZhcmlhbnRfYnVpbGRlcl9uZXcgKEdfVkFSSUFO
VF9UWVBFX0FSUkFZKTsKLQlnX2xpc3RfZm9yZWFjaCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwg
cGFja19lbnRyeSwgZW50cmllc19idWlsZGVyKTsKLQotCS8qIFNlcmlhbGl6ZSBhbmQgZHVtcCAq
LwotCWNhY2hlX3ZhcmlhbnQgPSBnX3ZhcmlhbnRfbmV3IChXRUJLSVRfU09VUF9DQUNIRV9FTlRS
SUVTX0ZPUk1BVCwgZW50cmllc19idWlsZGVyKTsKLQlnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZiAo
ZW50cmllc19idWlsZGVyKTsKLQotCWZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAocHJpdi0+
Y2FjaGVfZGlyLCBXRUJLSVRfU09VUF9DQUNIRV9GSUxFLCBOVUxMKTsKLQlnX2ZpbGVfc2V0X2Nv
bnRlbnRzIChmaWxlbmFtZSwgKGNvbnN0IGdjaGFyICopZ192YXJpYW50X2dldF9kYXRhIChjYWNo
ZV92YXJpYW50KSwKLQkJCSAgICAgZ192YXJpYW50X2dldF9zaXplIChjYWNoZV92YXJpYW50KSwg
TlVMTCk7Ci0JZ19mcmVlIChmaWxlbmFtZSk7Ci0JZ192YXJpYW50X3VucmVmIChjYWNoZV92YXJp
YW50KTsKLX0KLQotdm9pZAotd2Via2l0X3NvdXBfY2FjaGVfbG9hZCAoV2ViS2l0U291cENhY2hl
ICpjYWNoZSkKLXsKLQlnY2hhciAqZmlsZW5hbWUgPSBOVUxMLCAqY29udGVudHMgPSBOVUxMOwot
CUdWYXJpYW50ICpjYWNoZV92YXJpYW50OwotCUdWYXJpYW50SXRlciAqZW50cmllc19pdGVyLCAq
aGVhZGVyc19pdGVyOwotCUdWYXJpYW50VHlwZSAqdmFyaWFudF9mb3JtYXQ7Ci0JZ3NpemUgbGVu
Z3RoOwotCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKLQlXZWJLaXRTb3VwQ2FjaGVQcml2
YXRlICpwcml2ID0gY2FjaGUtPnByaXY7Ci0KLQlmaWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUg
KHByaXYtPmNhY2hlX2RpciwgV0VCS0lUX1NPVVBfQ0FDSEVfRklMRSwgTlVMTCk7Ci0JaWYgKCFn
X2ZpbGVfZ2V0X2NvbnRlbnRzIChmaWxlbmFtZSwgJmNvbnRlbnRzLCAmbGVuZ3RoLCBOVUxMKSkg
ewotCQlnX2ZyZWUgKGZpbGVuYW1lKTsKLQkJZ19mcmVlIChjb250ZW50cyk7Ci0JCXJldHVybjsK
LQl9Ci0JZ19mcmVlIChmaWxlbmFtZSk7Ci0KLQl2YXJpYW50X2Zvcm1hdCA9IGdfdmFyaWFudF90
eXBlX25ldyAoV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQpOwotCWNhY2hlX3Zhcmlh
bnQgPSBnX3ZhcmlhbnRfbmV3X2Zyb21fZGF0YSAodmFyaWFudF9mb3JtYXQsIChjb25zdCBnY2hh
ciAqKWNvbnRlbnRzLCBsZW5ndGgsIEZBTFNFLCBnX2ZyZWUsIGNvbnRlbnRzKTsKLQlnX3Zhcmlh
bnRfdHlwZV9mcmVlICh2YXJpYW50X2Zvcm1hdCk7Ci0KLQlnX3ZhcmlhbnRfZ2V0IChjYWNoZV92
YXJpYW50LCBXRUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1BVCwgJmVudHJpZXNfaXRlcik7
Ci0JZW50cnkgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNoZUVudHJ5KTsKLQotCXdoaWxl
IChnX3ZhcmlhbnRfaXRlcl9sb29wIChlbnRyaWVzX2l0ZXIsIFdFQktJVF9TT1VQX0NBQ0hFX1BI
RUFERVJTX0ZPUk1BVCwKLQkJCQkgICAgJmVudHJ5LT5rZXksICZlbnRyeS0+ZmlsZW5hbWUsICZl
bnRyeS0+bXVzdF9yZXZhbGlkYXRlLAotCQkJCSAgICAmZW50cnktPmZyZXNobmVzc19saWZldGlt
ZSwgJmVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UsCi0JCQkJICAgICZlbnRyeS0+cmVzcG9u
c2VfdGltZSwgJmVudHJ5LT5oaXRzLCAmZW50cnktPmxlbmd0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZoZWFkZXJzX2l0ZXIpKSB7Ci0JCWNvbnN0IGdjaGFyICpoZWFk
ZXJfa2V5LCAqaGVhZGVyX3ZhbHVlOwotCi0JCS8qIFNvdXBNZXNzYWdlIEhlYWRlcnMgKi8KLQkJ
ZW50cnktPmhlYWRlcnMgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19uZXcgKFNPVVBfTUVTU0FHRV9I
RUFERVJTX1JFU1BPTlNFKTsKLQkJd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AgKGhlYWRlcnNf
aXRlciwgV0VCS0lUX1NPVVBfQ0FDSEVfREVDT0RFX0hFQURFUlNfRk9STUFULCAmaGVhZGVyX2tl
eSwgJmhlYWRlcl92YWx1ZSkpCi0JCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKGVudHJ5
LT5oZWFkZXJzLCBoZWFkZXJfa2V5LCBoZWFkZXJfdmFsdWUpOwotCi0JCS8qIEluc2VydCBpbiBj
YWNoZSAqLwotCQlpZiAoIXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkgKGNh
Y2hlLCAoY29uc3QgZ2NoYXIgKillbnRyeS0+a2V5LCBlbnRyeSwgRkFMU0UpKQotCQkJd2Via2l0
X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOwotCi0JCS8qIE5ldyBlbnRyeSBm
b3IgdGhlIG5leHQgaXRlcmF0aW9uLiBUaGlzIGNyZWF0ZXMgYW4KLQkJICAgZXh0cmEgb2JqZWN0
IHRoZSBsYXN0IGl0ZXJhdGlvbiBidXQgaXQncyB3b3J0aCBpdAotCQkgICBhcyB3ZSBzYXZlIHNl
dmVyYWwgaWYncyAqLwotCQllbnRyeSA9IGdfc2xpY2VfbmV3MCAoV2ViS2l0U291cENhY2hlRW50
cnkpOwotCX0KLQkvKiBSZW1vdmUgbGFzdCBjcmVhdGVkIGVudHJ5ICovCi0JZ19zbGljZV9mcmVl
IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSwgZW50cnkpOwotCi0JLyogU29ydCBMUlUgKHNob3VsZG4n
dCBiZSBuZWVkZWQpLiBGaXJzdCByZXZlcnNlIGFzIGVsZW1lbnRzCi0JICogYXJlIGFsd2F5cyBw
cmVwZW5kZWQgd2hlbiBpbnNlcnRpbmcKLQkgKi8KLQljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0g
Z19saXN0X3JldmVyc2UgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpOwotCWNhY2hlLT5wcml2LT5s
cnVfc3RhcnQgPSBnX2xpc3Rfc29ydCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgbHJ1X2NvbXBh
cmVfZnVuYyk7Ci0KLQkvKiBmcmVlcyAqLwotCWdfdmFyaWFudF9pdGVyX2ZyZWUgKGVudHJpZXNf
aXRlcik7Ci0JZ192YXJpYW50X3VucmVmIChjYWNoZV92YXJpYW50KTsKLX0KLQotdm9pZAotd2Vi
a2l0X3NvdXBfY2FjaGVfc2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAotCQkJ
CWd1aW50IG1heF9zaXplKQotewotCWNhY2hlLT5wcml2LT5tYXhfc2l6ZSA9IG1heF9zaXplOwot
CWNhY2hlLT5wcml2LT5tYXhfZW50cnlfZGF0YV9zaXplID0gY2FjaGUtPnByaXYtPm1heF9zaXpl
IC8gTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKLX0KLQotZ3VpbnQKLXdlYmtpdF9zb3VwX2Nh
Y2hlX2dldF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKLXsKLQlyZXR1cm4gY2Fj
aGUtPnByaXYtPm1heF9zaXplOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyNmY5OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4
OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KLS8qCi0gKiBz
b3VwLWNhY2hlLmg6Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSwgUy5M
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaWZuZGVmIFdFQktJVF9TT1VQX0NBQ0hFX0gKLSNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVf
SCAxCi0KLSNpZmRlZiBHX09TX1dJTjMyCi0gICAgI2lmZGVmIEJVSUxESU5HX1dFQktJVAotICAg
ICAgICAjZGVmaW5lIFdFQktJVF9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0gICAgI2Vsc2UK
LSAgICAgICAgI2RlZmluZSBXRUJLSVRfQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotICAgICNl
bmRpZgotICAgICNkZWZpbmUgV0VCS0lUX09CU09MRVRFX0FQSSBXRUJLSVRfQVBJCi0jZWxzZQot
ICAgICNkZWZpbmUgV0VCS0lUX0FQSSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0
IikpKQotICAgICNkZWZpbmUgV0VCS0lUX09CU09MRVRFX0FQSSBXRUJLSVRfQVBJIF9fYXR0cmli
dXRlX18oKGRlcHJlY2F0ZWQpKQotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtdHlw
ZXMuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBX
RUJLSVRfVFlQRV9TT1VQX0NBQ0hFICAgICAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2dldF90
eXBlICgpKQotI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRShvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwgV2Vi
S2l0U291cENhY2hlKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNI
RSwgV2ViS2l0U291cENhY2hlQ2xhc3MpKQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9DQUNIRShv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZ
UEVfU09VUF9DQUNIRSkpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX0NBQ0hFX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hF
KSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwgV2ViS2l0U291
cENhY2hlQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cENhY2hlIFdlYktpdFNv
dXBDYWNoZTsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGVQcml2YXRlIFdlYktpdFNv
dXBDYWNoZVByaXZhdGU7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JV0VCS0lUX1NPVVBfQ0FDSEVfQ0FD
SEVBQkxFID0gKDEgPDwgMCksCi0JV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEUgPSAoMSA8
PCAxKSwKLQlXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElEQVRFUyA9ICgxIDw8IDIpLAotCVdFQktJ
VF9TT1VQX0NBQ0hFX1ZBTElEQVRFUyA9ICgxIDw8IDMpCi19IFdlYktpdFNvdXBDYWNoZWFiaWxp
dHk7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0gs
Ci0JV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTiwKLQlXRUJLSVRf
U09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRQotfSBXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZTsKLQot
dHlwZWRlZiBlbnVtIHsKLQlXRUJLSVRfU09VUF9DQUNIRV9TSU5HTEVfVVNFUiwKLQlXRUJLSVRf
U09VUF9DQUNIRV9TSEFSRUQKLX0gV2ViS2l0U291cENhY2hlVHlwZTsKLQotc3RydWN0IF9XZWJL
aXRTb3VwQ2FjaGUgewotCUdPYmplY3QgcGFyZW50X2luc3RhbmNlOwotCi0JV2ViS2l0U291cENh
Y2hlUHJpdmF0ZSAqcHJpdjsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlHT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOwotCi0JLyogbWV0aG9kcyAqLwotCVdlYktpdFNvdXBDYWNoZWFiaWxpdHkg
KCpnZXRfY2FjaGVhYmlsaXR5KShXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAq
bXNnKTsKLQotCS8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KLQl2b2lkICgqX2xp
YnNvdXBfcmVzZXJ2ZWQxKSh2b2lkKTsKLQl2b2lkICgqX2xpYnNvdXBfcmVzZXJ2ZWQyKSh2b2lk
KTsKLQl2b2lkICgqX2xpYnNvdXBfcmVzZXJ2ZWQzKSh2b2lkKTsKLX0gV2ViS2l0U291cENhY2hl
Q2xhc3M7Ci0KLVdFQktJVF9BUEkgR1R5cGUgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVf
Z2V0X3R5cGUgKHZvaWQpOwotV0VCS0lUX0FQSSBXZWJLaXRTb3VwQ2FjaGUgICp3ZWJraXRfc291
cF9jYWNoZV9uZXcgKGNvbnN0IGNoYXIgICpjYWNoZV9kaXIsCi0JCQkJCQkgICAgV2ViS2l0U291
cENhY2hlVHlwZSBjYWNoZV90eXBlKTsKLVdFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Vi
a2l0X3NvdXBfY2FjaGVfZmx1c2ggKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSk7Ci1XRUJLSVRf
QVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2NsZWFyIChXZWJLaXRTb3Vw
Q2FjaGUgICAqY2FjaGUpOwotCi1XRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9z
b3VwX2NhY2hlX2R1bXAgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpOwotV0VCS0lUX0FQSSB2b2lk
ICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9sb2FkIChXZWJLaXRTb3VwQ2FjaGUgKmNh
Y2hlKTsKLQotV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9z
ZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsCi0JCQkJCQkJICAgICBndWludCBt
YXhfc2l6ZSk7Ci1XRUJLSVRfQVBJIGd1aW50ICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hl
X2dldF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSk7Ci0KLUdfRU5EX0RFQ0xTCi0K
LQotI2VuZGlmIC8qIFdFQktJVF9TT1VQX0NBQ0hFX0ggKi8KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4
IDBlNWRlYmMuLjViMGI2ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAx
MS0wMS0yOSAgRGFuIFdpbnNoaXAgIDxkYW53QGdub21lLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbGlic291cC1iYXNlZCBjYWNoZS9y
ZXF1ZXN0ZXIgQVBJCisKKyAgICAgICAgW0dUS10gZHJvcCBzb3VwIGNhY2hlIHN0dWZmLCB3aGlj
aCBoYXMgYmVlbiBtb3ZlZCB0byBsaWJzb3VwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MDc0NworCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IHVw
ZGF0ZSBmb3IgcmVtb3ZlZCBmaWxlcworCiAyMDExLTAyLTAxICBNYXJpbyBTYW5jaGV6IFByYWRh
ICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9i
aW5zb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCmluZGV4IGNmNjhmMDEuLjgyYWYwOGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC05OCw3ICs5OCw2IEBAIGxpYndlYmtpdGd0a19A
V0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9O
QF9sYV9MSUJBCiAJJChPTEUzMl9MSUJTKQogCiB3ZWJraXRndGtfc3RhdGljX2hfYXBpICs9IFwK
LQkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dl
YmtpdC9zb3VwLWNhY2hlLmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0LmggXAogCSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVm
aW5lcy5oIFwKIAkkKHNyY2RpcikvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25s
b2FkLmggXApAQCAtMjYxLDcgKzI2MCw2IEBAICQoV0VCS0lUX0dJUlNPVVJDRVMpOiAkKEdfSVJf
U0NBTk5FUikgJChKU0NPUkVfR0lSU09VUkNFUykgbGlid2Via2l0Z3RrLUBXRUJLSVRHCiAJICAg
ICAtLWFkZC1pbmNsdWRlLXBhdGg9JChXZWJLaXQpIFwKIAkgICAgIC0tYWRkLWluY2x1ZGUtcGF0
aD0kKHRvcF9idWlsZGRpcikgXAogCSAgICAgLUkkKHNyY2RpcikvU291cmNlIFwKLQkgICAgIC1J
JCh0b3Bfc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUg
XAogCSAgICAgLUkkKFdlYktpdCkgXAogCSAgICAgLUkkKEdFTlNPVVJDRVMpIFwKIAkgICAgIC1J
JChHRU5TT1VSQ0VTX1dFQktJVCkgXApAQCAtMzc3LDcgKzM3NSw2IEBAIG5vaW5zdF9QUk9HUkFN
UyArPSAkKFRFU1RfUFJPR1MpCiB3ZWJraXRfdGVzdHNfY2ZsYWdzID0gXAogCS1mbm8tc3RyaWN0
LWFsaWFzaW5nIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMgXAotCS1JJChXZWJDb3JlKS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUgXAog
CS1JJChXZWJLaXQpIFwKIAktSSQoR0VOU09VUkNFUykgXAogCS1JJCh0b3BfYnVpbGRkaXIpL1Nv
dXJjZS9XZWJLaXQvZ3RrIFwKLS0gCjEuNy4zLjUKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>