<?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>44707</bug_id>
          
          <creation_ts>2010-08-26 12:32:45 -0700</creation_ts>
          <short_desc>Add thirdparty directory and incorporate GLU tessellator</short_desc>
          <delta_ts>2010-09-03 18:24:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>44729</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>270030</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-26 12:32:45 -0700</bug_when>
    <thetext>For new rendering algorithms being incorporated into WebKit, the polygon tessellator from the OpenGL utility library is needed. Some small modifications were needed from the original sources in SGI&apos;s OpenGL Sample Implementation (http://oss.sgi.com/projects/ogl-sample/). It is desired to be able to build these sources on any platform that wishes to utilize these new algorithms. For this reason a 3rdparty directory is being added to WebCore and the GLU tessellator sources within.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270038</commentid>
    <comment_count>1</comment_count>
      <attachid>65601</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-26 12:39:06 -0700</bug_when>
    <thetext>Created attachment 65601
Patch

From the ChangeLog:

This directory is intended to contain copies of third-party libraries used by WebCore, in particular those which may require some modification in order to incorporate.

No tests at this time; these sources are being added in preparation for incorporating other code which uses them, at which point the code will be exercised and testable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270043</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-26 12:43:12 -0700</bug_when>
    <thetext>Attachment 65601 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
tyq-sort.h:114:  Extra space between void and pqDeletePriorityQ  [whitespace/declaration] [3]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:114:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:114:  Extra space before )  [whitespace/parens] [2]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:116:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:116:  Extra space between int and pqInit  [whitespace/declaration] [3]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:116:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:116:  Extra space before )  [whitespace/parens] [2]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:117:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:117:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:117:  Extra space before )  [whitespace/parens] [2]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:118:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:118:  Extra space between PQkey and pqExtractMin  [whitespace/declaration] [3]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:118:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:118:  Extra space before )  [whitespace/parens] [2]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:119:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:119:  Extra space between void and pqDelete  [whitespace/declaration] [3]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:119:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:119:  Extra space before )  [whitespace/parens] [2]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:121:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:121:  Extra space between PQkey and pqMinimum  [whitespace/declaration] [3]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:121:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:121:  Extra space before )  [whitespace/parens] [2]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:122:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:122:  Extra space between int and pqIsEmpty  [whitespace/declaration] [3]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:122:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/3rdparty/glu/libtess/priorityq-sort.h:122:  Extra space before )  [whitespace/parens] [2]
WebCore/3rdparty/glu/gluos.h:32:  #ifndef header guard has wrong style, please use: gluos_h  [build/header_guard] [5]
WebCore/3rdparty/glu/gluos.h:45:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 4489 in 34 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>270103</commentid>
    <comment_count>3</comment_count>
      <attachid>65616</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-26 13:59:43 -0700</bug_when>
    <thetext>Created attachment 65616
Revised patch

Renamed 3rdparty directory to thirdparty on suggestion from hyatt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270106</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-26 14:05:04 -0700</bug_when>
    <thetext>Attachment 65616 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
y/glu/libtess/priorityq.h:114:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/thirdparty/glu/libtess/priorityq.h:114:  Extra space before )  [whitespace/parens] [2]
WebCore/thirdparty/glu/libtess/priorityq.h:116:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/thirdparty/glu/libtess/priorityq.h:116:  Extra space between int and pqInit  [whitespace/declaration] [3]
WebCore/thirdparty/glu/libtess/priorityq.h:116:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/thirdparty/glu/libtess/priorityq.h:116:  Extra space before )  [whitespace/parens] [2]
WebCore/thirdparty/glu/libtess/priorityq.h:117:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/thirdparty/glu/libtess/priorityq.h:117:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/thirdparty/glu/libtess/priorityq.h:117:  Extra space before )  [whitespace/parens] [2]
WebCore/thirdparty/glu/libtess/priorityq.h:118:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/thirdparty/glu/libtess/priorityq.h:118:  Extra space between PQkey and pqExtractMin  [whitespace/declaration] [3]
WebCore/thirdparty/glu/libtess/priorityq.h:118:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/thirdparty/glu/libtess/priorityq.h:118:  Extra space before )  [whitespace/parens] [2]
WebCore/thirdparty/glu/libtess/priorityq.h:119:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/thirdparty/glu/libtess/priorityq.h:119:  Extra space between void and pqDelete  [whitespace/declaration] [3]
WebCore/thirdparty/glu/libtess/priorityq.h:119:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/thirdparty/glu/libtess/priorityq.h:119:  Extra space before )  [whitespace/parens] [2]
WebCore/thirdparty/glu/libtess/priorityq.h:121:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/thirdparty/glu/libtess/priorityq.h:121:  Extra space between PQkey and pqMinimum  [whitespace/declaration] [3]
WebCore/thirdparty/glu/libtess/priorityq.h:121:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/thirdparty/glu/libtess/priorityq.h:121:  Extra space before )  [whitespace/parens] [2]
WebCore/thirdparty/glu/libtess/priorityq.h:122:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/thirdparty/glu/libtess/priorityq.h:122:  Extra space between int and pqIsEmpty  [whitespace/declaration] [3]
WebCore/thirdparty/glu/libtess/priorityq.h:122:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/thirdparty/glu/libtess/priorityq.h:122:  Extra space before )  [whitespace/parens] [2]
WebCore/thirdparty/glu/internal_glu.h:36:  #ifndef header guard has wrong style, please use: internal_glu_h  [build/header_guard] [5]
WebCore/thirdparty/glu/internal_glu.h:113:  internal_gluNewTess is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/thirdparty/glu/internal_glu.h:141:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 4490 in 34 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>270334</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-26 23:30:31 -0700</bug_when>
    <thetext>&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

We really need to teach the stylebot to ignore third-party code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274266</commentid>
    <comment_count>6</comment_count>
      <attachid>65616</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-03 17:00:35 -0700</bug_when>
    <thetext>Comment on attachment 65616
Revised patch

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

&gt; WebCore/ChangeLog:30
&gt; +        (dictNewDict):
nit: for new files that are added, it is nice to strip out mention of
the functions included in the new file since they aren&apos;t that helpful
when reading a ChangeLog entry like this.  you really just want to
know the set of files being added and the function names just add
noise.  (this was the advice that darin adler gave to me once upon
a time.)

otherwise, R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274294</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-03 17:48:54 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 65616 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=65616&amp;action=prettypatch
&gt; 
&gt; &gt; WebCore/ChangeLog:30
&gt; &gt; +        (dictNewDict):
&gt; nit: for new files that are added, it is nice to strip out mention of
&gt; the functions included in the new file since they aren&apos;t that helpful
&gt; when reading a ChangeLog entry like this.  you really just want to
&gt; know the set of files being added and the function names just add
&gt; noise.  (this was the advice that darin adler gave to me once upon
&gt; a time.)

Will do this upon landing.

&gt; otherwise, R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274316</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-03 18:20:17 -0700</bug_when>
    <thetext>Committed r66784: &lt;http://trac.webkit.org/changeset/66784&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274318</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-03 18:24:45 -0700</bug_when>
    <thetext>Committed r66785: &lt;http://trac.webkit.org/changeset/66785&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65601</attachid>
            <date>2010-08-26 12:39:06 -0700</date>
            <delta_ts>2010-08-26 13:59:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>glu.patch</filename>
            <type>text/plain</type>
            <size>279905</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjEyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkwIEBACisyMDEwLTA4LTI2ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgM3JkcGFydHkgZGlyZWN0b3J5IGFuZCBpbmNvcnBvcmF0ZSBHTFUgdGVzc2VsbGF0b3IKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NzA3CisKKyAg
ICAgICAgVGhpcyBkaXJlY3RvcnkgaXMgaW50ZW5kZWQgdG8gY29udGFpbiBjb3BpZXMgb2YgdGhp
cmQtcGFydHkgbGlicmFyaWVzIHVzZWQKKyAgICAgICAgYnkgV2ViQ29yZSwgaW4gcGFydGljdWxh
ciB0aG9zZSB3aGljaCBtYXkgcmVxdWlyZSBzb21lIG1vZGlmaWNhdGlvbiBpbgorICAgICAgICBv
cmRlciB0byBpbmNvcnBvcmF0ZS4KKworICAgICAgICBObyB0ZXN0cyBhdCB0aGlzIHRpbWU7IHRo
ZXNlIHNvdXJjZXMgYXJlIGJlaW5nIGFkZGVkIGluIHByZXBhcmF0aW9uIGZvcgorICAgICAgICBp
bmNvcnBvcmF0aW5nIG90aGVyIGNvZGUgd2hpY2ggdXNlcyB0aGVtLCBhdCB3aGljaCBwb2ludCB0
aGUgY29kZSB3aWxsIGJlCisgICAgICAgIGV4ZXJjaXNlZCBhbmQgdGVzdGFibGUuCisKKyAgICAg
ICAgKiAzcmRwYXJ0eTogQWRkZWQuCisgICAgICAgICogM3JkcGFydHkvUkVBRE1FLnR4dDogQWRk
ZWQuCisgICAgICAgICogM3JkcGFydHkvZ2x1OiBBZGRlZC4KKyAgICAgICAgKiAzcmRwYXJ0eS9n
bHUvTElDRU5TRS50eHQ6IEFkZGVkLgorICAgICAgICAqIDNyZHBhcnR5L2dsdS9SRUFETUUud2Vi
a2l0OiBBZGRlZC4KKyAgICAgICAgKiAzcmRwYXJ0eS9nbHUvZ2x1b3MuaDogQWRkZWQuCisgICAg
ICAgICogM3JkcGFydHkvZ2x1L2ludGVybmFsX2dsdS5oOiBBZGRlZC4KKyAgICAgICAgKiAzcmRw
YXJ0eS9nbHUvbGlidGVzczogQWRkZWQuCisgICAgICAgICogM3JkcGFydHkvZ2x1L2xpYnRlc3Mv
R05VbWFrZWZpbGU6IEFkZGVkLgorICAgICAgICAqIDNyZHBhcnR5L2dsdS9saWJ0ZXNzL0ltYWtl
ZmlsZTogQWRkZWQuCisgICAgICAgICogM3JkcGFydHkvZ2x1L2xpYnRlc3MvUkVBRE1FOiBBZGRl
ZC4KKyAgICAgICAgKiAzcmRwYXJ0eS9nbHUvbGlidGVzcy9hbGctb3V0bGluZTogQWRkZWQuCisg
ICAgICAgICogM3JkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC1saXN0Lmg6IEFkZGVkLgorICAgICAg
ICAqIDNyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QuYzogQWRkZWQuCisgICAgICAgIChkaWN0TmV3
RGljdCk6CisgICAgICAgIChkaWN0RGVsZXRlRGljdCk6CisgICAgICAgIChkaWN0SW5zZXJ0QmVm
b3JlKToKKyAgICAgICAgKGRpY3REZWxldGUpOgorICAgICAgICAoZGljdFNlYXJjaCk6CisgICAg
ICAgICogM3JkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC5oOiBBZGRlZC4KKyAgICAgICAgKiAzcmRw
YXJ0eS9nbHUvbGlidGVzcy9nZW9tLmM6IEFkZGVkLgorICAgICAgICAoX19nbF92ZXJ0TGVxKToK
KyAgICAgICAgKF9fZ2xfZWRnZUV2YWwpOgorICAgICAgICAoX19nbF9lZGdlU2lnbik6CisgICAg
ICAgIChfX2dsX3RyYW5zRXZhbCk6CisgICAgICAgIChfX2dsX3RyYW5zU2lnbik6CisgICAgICAg
IChfX2dsX3ZlcnRDQ1cpOgorICAgICAgICAoSW50ZXJwb2xhdGUpOgorICAgICAgICAoX19nbF9l
ZGdlSW50ZXJzZWN0KToKKyAgICAgICAgKiAzcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmg6IEFk
ZGVkLgorICAgICAgICAqIDNyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmM6IEFkZGVkLgor
ICAgICAgICAoX19nbF9tZW1Jbml0KToKKyAgICAgICAgKF9fZ2xfbWVtQWxsb2MpOgorICAgICAg
ICAqIDNyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmg6IEFkZGVkLgorICAgICAgICAqIDNy
ZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guYzogQWRkZWQuCisgICAgICAgIChhbGxvY1ZlcnRleCk6
CisgICAgICAgIChhbGxvY0ZhY2UpOgorICAgICAgICAoTWFrZUVkZ2UpOgorICAgICAgICAoU3Bs
aWNlKToKKyAgICAgICAgKE1ha2VWZXJ0ZXgpOgorICAgICAgICAoTWFrZUZhY2UpOgorICAgICAg
ICAoS2lsbEVkZ2UpOgorICAgICAgICAoS2lsbFZlcnRleCk6CisgICAgICAgIChLaWxsRmFjZSk6
CisgICAgICAgIChfX2dsX21lc2hNYWtlRWRnZSk6CisgICAgICAgIChfX2dsX21lc2hTcGxpY2Up
OgorICAgICAgICAoX19nbF9tZXNoRGVsZXRlKToKKyAgICAgICAgKF9fZ2xfbWVzaEFkZEVkZ2VW
ZXJ0ZXgpOgorICAgICAgICAoX19nbF9tZXNoU3BsaXRFZGdlKToKKyAgICAgICAgKF9fZ2xfbWVz
aENvbm5lY3QpOgorICAgICAgICAoX19nbF9tZXNoWmFwRmFjZSk6CisgICAgICAgIChfX2dsX21l
c2hOZXdNZXNoKToKKyAgICAgICAgKF9fZ2xfbWVzaFVuaW9uKToKKyAgICAgICAgKF9fZ2xfbWVz
aERlbGV0ZU1lc2gpOgorICAgICAgICAoX19nbF9tZXNoQ2hlY2tNZXNoKToKKyAgICAgICAgKiAz
cmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmg6IEFkZGVkLgorICAgICAgICAqIDNyZHBhcnR5L2ds
dS9saWJ0ZXNzL25vcm1hbC5jOiBBZGRlZC4KKyAgICAgICAgKE5vcm1hbGl6ZSk6CisgICAgICAg
IChMb25nQXhpcyk6CisgICAgICAgIChDb21wdXRlTm9ybWFsKToKKyAgICAgICAgKENoZWNrT3Jp
ZW50YXRpb24pOgorICAgICAgICAoX19nbF9wcm9qZWN0UG9seWdvbik6CisgICAgICAgICogM3Jk
cGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmg6IEFkZGVkLgorICAgICAgICAqIDNyZHBhcnR5L2ds
dS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmM6IEFkZGVkLgorICAgICAgICAocHFOZXdQcmlvcml0
eVEpOgorICAgICAgICAocHFEZWxldGVQcmlvcml0eVEpOgorICAgICAgICAoRmxvYXREb3duKToK
KyAgICAgICAgKEZsb2F0VXApOgorICAgICAgICAocHFJbml0KToKKyAgICAgICAgKHBxSW5zZXJ0
KToKKyAgICAgICAgKHBxRXh0cmFjdE1pbik6CisgICAgICAgIChwcURlbGV0ZSk6CisgICAgICAg
ICogM3JkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaDogQWRkZWQuCisgICAgICAg
ICogM3JkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLXNvcnQuaDogQWRkZWQuCisgICAgICAg
ICogM3JkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmM6IEFkZGVkLgorICAgICAgICAocHFO
ZXdQcmlvcml0eVEpOgorICAgICAgICAocHFEZWxldGVQcmlvcml0eVEpOgorICAgICAgICAocHFJ
bml0KToKKyAgICAgICAgKHBxSW5zZXJ0KToKKyAgICAgICAgKHBxRXh0cmFjdE1pbik6CisgICAg
ICAgIChwcU1pbmltdW0pOgorICAgICAgICAocHFJc0VtcHR5KToKKyAgICAgICAgKHBxRGVsZXRl
KToKKyAgICAgICAgKiAzcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEuaDogQWRkZWQuCisg
ICAgICAgICogM3JkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmM6IEFkZGVkLgorICAgICAgICAo
X19nbF9yZW5kZXJNZXNoKToKKyAgICAgICAgKFJlbmRlck1heGltdW1GYWNlR3JvdXApOgorICAg
ICAgICAoTWF4aW11bUZhbik6CisgICAgICAgIChNYXhpbXVtU3RyaXApOgorICAgICAgICAoUmVu
ZGVyVHJpYW5nbGUpOgorICAgICAgICAoUmVuZGVyTG9uZWx5VHJpYW5nbGVzKToKKyAgICAgICAg
KFJlbmRlckZhbik6CisgICAgICAgIChSZW5kZXJTdHJpcCk6CisgICAgICAgIChfX2dsX3JlbmRl
ckJvdW5kYXJ5KToKKyAgICAgICAgKENvbXB1dGVOb3JtYWwpOgorICAgICAgICAoX19nbF9yZW5k
ZXJDYWNoZSk6CisgICAgICAgICogM3JkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmg6IEFkZGVk
LgorICAgICAgICAqIDNyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmM6IEFkZGVkLgorICAgICAg
ICAoRWRnZUxlcSk6CisgICAgICAgIChEZWxldGVSZWdpb24pOgorICAgICAgICAoRml4VXBwZXJF
ZGdlKToKKyAgICAgICAgKFRvcExlZnRSZWdpb24pOgorICAgICAgICAoVG9wUmlnaHRSZWdpb24p
OgorICAgICAgICAoQWRkUmVnaW9uQmVsb3cpOgorICAgICAgICAoSXNXaW5kaW5nSW5zaWRlKToK
KyAgICAgICAgKENvbXB1dGVXaW5kaW5nKToKKyAgICAgICAgKEZpbmlzaFJlZ2lvbik6CisgICAg
ICAgIChGaW5pc2hMZWZ0UmVnaW9ucyk6CisgICAgICAgIChBZGRSaWdodEVkZ2VzKToKKyAgICAg
ICAgKENhbGxDb21iaW5lKToKKyAgICAgICAgKFNwbGljZU1lcmdlVmVydGljZXMpOgorICAgICAg
ICAoVmVydGV4V2VpZ2h0cyk6CisgICAgICAgIChHZXRJbnRlcnNlY3REYXRhKToKKyAgICAgICAg
KENoZWNrRm9yUmlnaHRTcGxpY2UpOgorICAgICAgICAoQ2hlY2tGb3JMZWZ0U3BsaWNlKToKKyAg
ICAgICAgKENoZWNrRm9ySW50ZXJzZWN0KToKKyAgICAgICAgKFdhbGtEaXJ0eVJlZ2lvbnMpOgor
ICAgICAgICAoQ29ubmVjdFJpZ2h0VmVydGV4KToKKyAgICAgICAgKENvbm5lY3RMZWZ0RGVnZW5l
cmF0ZSk6CisgICAgICAgIChDb25uZWN0TGVmdFZlcnRleCk6CisgICAgICAgIChTd2VlcEV2ZW50
KToKKyAgICAgICAgKEFkZFNlbnRpbmVsKToKKyAgICAgICAgKEluaXRFZGdlRGljdCk6CisgICAg
ICAgIChEb25lRWRnZURpY3QpOgorICAgICAgICAoUmVtb3ZlRGVnZW5lcmF0ZUVkZ2VzKToKKyAg
ICAgICAgKEluaXRQcmlvcml0eVEpOgorICAgICAgICAoRG9uZVByaW9yaXR5USk6CisgICAgICAg
IChSZW1vdmVEZWdlbmVyYXRlRmFjZXMpOgorICAgICAgICAoX19nbF9jb21wdXRlSW50ZXJpb3Ip
OgorICAgICAgICAqIDNyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmg6IEFkZGVkLgorICAgICAg
ICAqIDNyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuYzogQWRkZWQuCisgICAgICAgIChub0JlZ2lu
KToKKyAgICAgICAgKG5vRWRnZUZsYWcpOgorICAgICAgICAobm9WZXJ0ZXgpOgorICAgICAgICAo
bm9FbmQpOgorICAgICAgICAobm9FcnJvcik6CisgICAgICAgIChub0NvbWJpbmUpOgorICAgICAg
ICAobm9NZXNoKToKKyAgICAgICAgKF9fZ2xfbm9CZWdpbkRhdGEpOgorICAgICAgICAoX19nbF9u
b0VkZ2VGbGFnRGF0YSk6CisgICAgICAgIChfX2dsX25vVmVydGV4RGF0YSk6CisgICAgICAgIChf
X2dsX25vRW5kRGF0YSk6CisgICAgICAgIChfX2dsX25vRXJyb3JEYXRhKToKKyAgICAgICAgKF9f
Z2xfbm9Db21iaW5lRGF0YSk6CisgICAgICAgIChpbnRlcm5hbF9nbHVOZXdUZXNzKToKKyAgICAg
ICAgKE1ha2VEb3JtYW50KToKKyAgICAgICAgKEdvdG9TdGF0ZSk6CisgICAgICAgIChpbnRlcm5h
bF9nbHVEZWxldGVUZXNzKToKKyAgICAgICAgKGludGVybmFsX2dsdVRlc3NQcm9wZXJ0eSk6Cisg
ICAgICAgIChpbnRlcm5hbF9nbHVHZXRUZXNzUHJvcGVydHkpOgorICAgICAgICAoaW50ZXJuYWxf
Z2x1VGVzc05vcm1hbCk6CisgICAgICAgIChpbnRlcm5hbF9nbHVUZXNzQ2FsbGJhY2spOgorICAg
ICAgICAoQWRkVmVydGV4KToKKyAgICAgICAgKENhY2hlVmVydGV4KToKKyAgICAgICAgKEVtcHR5
Q2FjaGUpOgorICAgICAgICAoaW50ZXJuYWxfZ2x1VGVzc1ZlcnRleCk6CisgICAgICAgIChpbnRl
cm5hbF9nbHVUZXNzQmVnaW5Qb2x5Z29uKToKKyAgICAgICAgKGludGVybmFsX2dsdVRlc3NCZWdp
bkNvbnRvdXIpOgorICAgICAgICAoaW50ZXJuYWxfZ2x1VGVzc0VuZENvbnRvdXIpOgorICAgICAg
ICAoaW50ZXJuYWxfZ2x1VGVzc0VuZFBvbHlnb24pOgorICAgICAgICAoZ2x1RGVsZXRlTWVzaCk6
CisgICAgICAgIChnbHVCZWdpblBvbHlnb24pOgorICAgICAgICAoZ2x1TmV4dENvbnRvdXIpOgor
ICAgICAgICAoZ2x1RW5kUG9seWdvbik6CisgICAgICAgICogM3JkcGFydHkvZ2x1L2xpYnRlc3Mv
dGVzcy5oOiBBZGRlZC4KKyAgICAgICAgKiAzcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5j
OiBBZGRlZC4KKyAgICAgICAgKF9fZ2xfbWVzaFRlc3NlbGxhdGVNb25vUmVnaW9uKToKKyAgICAg
ICAgKF9fZ2xfbWVzaFRlc3NlbGxhdGVJbnRlcmlvcik6CisgICAgICAgIChfX2dsX21lc2hEaXNj
YXJkRXh0ZXJpb3IpOgorICAgICAgICAoX19nbF9tZXNoU2V0V2luZGluZ051bWJlcik6CisgICAg
ICAgICogM3JkcGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8uaDogQWRkZWQuCisKIDIwMTAtMDgt
MjYgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvM3JkcGFydHkvUkVBRE1FLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlLzNyZHBhcnR5L1JFQURNRS50eHQJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlLzNyZHBhcnR5L1JFQURNRS50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK1Ro
aXMgZGlyZWN0b3J5IGlzIGludGVuZGVkIHRvIGNvbnRhaW4gY29waWVzIG9mIHRoaXJkLXBhcnR5
IGxpYnJhcmllcyB1c2VkCitieSBXZWJDb3JlLCBpbiBwYXJ0aWN1bGFyIHRob3NlIHdoaWNoIG1h
eSByZXF1aXJlIHNvbWUgbW9kaWZpY2F0aW9uIGluCitvcmRlciB0byBpbmNvcnBvcmF0ZS4KKwor
VGhlIGN1cnJlbnQgY29udmVudGlvbiBpcyB0byBmdWxseSBzY29wZSB0aGUgaW5jbHVkZSBwYXRo
cyBvZiBoZWFkZXJzLCBpbgorb3JkZXIgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIG90aGVyIFdl
YkNvcmUgaGVhZGVycy4gRm9yIGV4YW1wbGUsIGEgZmlsZQoraW4gV2ViQ29yZSB1c2luZyB0aGUg
R0xVIHRlc3NlbGxhdG9yIHNvdXJjZXMgd291bGQgdXNlCisKKyNpbmNsdWRlICIzcmRwYXJ0eS9n
bHUvaW50ZXJuYWxfZ2x1LmgiCisKK0hlYWRlciByZWZlcmVuY2VzIGluIHNvdXJjZSBmaWxlcyBp
biB0aGlzIGRpcmVjdG9yeSBuZWVkIHRvIGJlIHNpbWlsYXJseQorbW9kaWZpZWQuCkluZGV4OiBX
ZWJDb3JlLzNyZHBhcnR5L2dsdS9MSUNFTlNFLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLzNy
ZHBhcnR5L2dsdS9MSUNFTlNFLnR4dAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvM3JkcGFydHkv
Z2x1L0xJQ0VOU0UudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACitTR0kgRlJFRSBT
T0ZUV0FSRSBMSUNFTlNFIEIgKFZlcnNpb24gMi4wLCBTZXB0LiAxOCwgMjAwOCkgCisKK0NvcHly
aWdodCAoQykgW2RhdGVzIG9mIGZpcnN0IHB1YmxpY2F0aW9uXSBTaWxpY29uIEdyYXBoaWNzLCBJ
bmMuIEFsbAorUmlnaHRzIFJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk
LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGlz
IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3
YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1
ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks
IG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29w
aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBT
b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcg
Y29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgaW5jbHVkaW5nIHRoZSBk
YXRlcyBvZiBmaXJzdCBwdWJsaWNhdGlvbgorYW5kIGVpdGhlciB0aGlzIHBlcm1pc3Npb24gbm90
aWNlIG9yIGEgcmVmZXJlbmNlIHRvIEhZUEVSTElOSworImh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9q
ZWN0cy9GcmVlQi8iaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLworc2hhbGwgYmUg
aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKK1Nv
ZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS
QU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg
TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQg
U0hBTEwgU0lMSUNPTiBHUkFQSElDUywgSU5DLiBCRSBMSUFCTEUKK0ZPUiBBTlkgQ0xBSU0sIERB
TUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRgorQ09OVFJB
Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU
SU9OCitXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRI
RSBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5h
bWUgb2YgU2lsaWNvbiBHcmFwaGljcywKK0luYy4gc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0
aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlCitzYWxlLCB1c2Ugb3Igb3RoZXIgZGVh
bGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4KK2F1dGhvcml6YXRp
b24gZnJvbSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCkluZGV4OiBXZWJDb3JlLzNyZHBhcnR5L2ds
dS9SRUFETUUud2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvM3JkcGFydHkvZ2x1L1JFQURN
RS53ZWJraXQJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlLzNyZHBhcnR5L2dsdS9SRUFETUUud2Vi
a2l0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzIEBACitUaGlzIGlzIGEgbmVhcmx5IHZlcmJh
dGltIGNvcHkgb2YgdGhlIEdMVSB0ZXNzZWxsYXRvciBzb3VyY2UgY29kZSBmcm9tCitTR0kncyBP
cGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uIGF0CitodHRwOi8vb3NzLnNnaS5jb20vcHJvamVj
dHMvb2dsLXNhbXBsZS8gLiBQZXIKK2h0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQi8g
LCB0aGUgY29kZSBpcyBjb3ZlcmVkIHVuZGVyIHRoZSBTR0kKK0ZyZWUgU29mdHdhcmUgTGljZW5z
ZSBCLCB2ZXJzaW9uIDIuMCwgYSBjb3B5IG9mIHdoaWNoIGlzIGluCitMSUNFTlNFLnR4dCBpbiB0
aGlzIGRpcmVjdG9yeS4KKworVGhlIGZvbGxvd2luZyBjaGFuZ2VzIHdlcmUgbWFkZSBpbiBvcmRl
ciB0byBpbmNvcnBvcmF0ZSB0aGlzIGNvZGU6CisKKyAgLSBUaGUgYWRkaXRpb24gb2YgYSBzaW1w
bGlmaWVkIGdsdW9zLmggdG8gZWxpbWluYXRlIG9wZXJhdGluZyBzeXN0ZW0KKyAgICBkZXBlbmRl
bmNpZXMuCisKKyAgLSBUaGUgcmVtb3ZhbCBvZiBpbmNsdXNpb24gb2YgR0wvZ2x1LmggYW5kIHJl
cGxhY2VtZW50IHdpdGggYW4KKyAgICBpbmNsdWRlIG9mIGludGVybmFsX2dsdS5oLgorCisgIC0g
SW5jbHVkZXMgd2VyZSBtb2RpZmllZCB0byBiZSBzY29wZWQgd2l0aGluIDNyZHBhcnR5L2dsdS8g
YW5kCisgICAgM3JkcGFydHkvZ2x1L2xpYnRlc3MvLgorCisgIC0gVGhlIGVudHJ5IHBvaW50cyB0
byB0aGUgdGVzc2VsbGF0b3Igd2VyZSBwcmVmaXhlZCB3aXRoIGludGVybmFsXworICAgIHRvIGF2
b2lkIHN5bWJvbCBjb2xsaXNpb25zIHdpdGggYW55IGhvc3QgT1MgdmVyc2lvbiBvZiBHTFUuCisK
KyAgLSBJbiB0ZXNzLmMsIHRoZSBvYnNvbGV0ZSBlbnRyeSBwb2ludHMgZ2x1QmVnaW5Qb2x5Z29u
LAorICAgIGdsdU5leHRDb250b3VyIGFuZCBnbHVFbmRQb2x5Z29uIGluIHRlc3MuYyB3ZXJlICNp
ZiAwJ2Qgb3V0LgorICAgIERlZmF1bHQgYnJhbmNoZXMgd2VyZSBhZGRlZCB0byB0aGUgc3dpdGNo
IHN0YXRlbWVudHMgaW4gR290b1N0YXRlLgorCisgIC0gSW4gbWVtYWxsb2MuaCwgdGhlIGluY2x1
ZGUgb2YgbWFsbG9jLmggd2FzIGNoYW5nZWQgdG8gYW4gaW5jbHVkZQorICAgIG9mIHN0ZGxpYi5o
LgorCisgIC0gSW4gbm9ybWFsLmMsIGFuIHVudXNlZCB2YXJpYWJsZSAidyIgd2FzIHJlbW92ZWQg
ZnJvbQorICAgIF9fZ2xfcHJvamVjdFBvbHlnb24uICNpZiBndWFyZHMgd2VyZSBwbGFjZWQgYXJv
dW5kIHRoZSBkZWZpbml0aW9uCisgICAgb2YgdGhlIHVudXNlZCBOb3JtYWxpemUgZnVuY3Rpb24u
CisKKyAgLSBJbiBwcmlvcml0eXEtaGVhcC5jLCBhbiAjaW5jbHVkZSBvZiA8bGltaXRzLmg+IHdh
cyBhZGRlZC4KSW5kZXg6IFdlYkNvcmUvM3JkcGFydHkvZ2x1L2dsdW9zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS8zcmRwYXJ0eS9nbHUvZ2x1b3MuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
M3JkcGFydHkvZ2x1L2dsdW9zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBHTFVPU19IXworI2RlZmluZSBHTFVPU19IXworCisvLyBUaGlzIGhlYWRlciBwcm92aWRlcyB0
aGUgbWluaW1hbCBkZWZpbml0aW9ucyBuZWVkZWQgdG8gY29tcGlsZSB0aGUKKy8vIEdMVSB0ZXNz
ZWxsYXRvciBzb3VyY2VzLgorI2RlZmluZSBHTEFQSUVOVFJZCisKK3R5cGVkZWYgdW5zaWduZWQg
Y2hhciBHTGJvb2xlYW47Cit0eXBlZGVmIGRvdWJsZSBHTGRvdWJsZTsKK3R5cGVkZWYgdW5zaWdu
ZWQgaW50IEdMZW51bTsKK3R5cGVkZWYgZmxvYXQgR0xmbG9hdDsKK3R5cGVkZWYgdm9pZCBHTHZv
aWQ7CisKKyNlbmRpZiAgLy8gR0xVT1NfSF8KSW5kZXg6IFdlYkNvcmUvM3JkcGFydHkvZ2x1L2lu
dGVybmFsX2dsdS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2ludGVybmFs
X2dsdS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS8zcmRwYXJ0eS9nbHUvaW50ZXJuYWxfZ2x1
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAs
IEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRoaXMgaGVhZGVyIGlzIGEgc2tl
bGV0b24gc3Vic3RpdHV0ZSBmb3IgR0wvZ2x1Lmggd2hpY2ggY29udGFpbnMKKy8vIG9ubHkgdGhl
IGRlZmluaXRpb25zLCBjb25zdGFudHMgYW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBuZWNlc3Nh
cnkKKy8vIHRvIGNvbXBpbGUgdGhlIEdMVSB0ZXNzZWxsYXRvci4KKworI2lmbmRlZiBJTlRFUk5B
TF9HTFVfSF8KKyNkZWZpbmUgSU5URVJOQUxfR0xVX0hfCisKKyNpbmNsdWRlICIzcmRwYXJ0eS9n
bHUvZ2x1b3MuaCIKKworLyogUHJpbWl0aXZlcyAqLworI2RlZmluZSBHTF9MSU5FX0xPT1AgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdMX1RSSUFOR0xFUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgR0xfVFJJQU5HTEVfU1RSSVAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBHTF9UUklBTkdMRV9GQU4gICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwMDA2CisKKy8qIEVycm9yQ29kZSAqLworI2RlZmluZSBH
TFVfSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgICAgMTAwOTAwCisjZGVmaW5lIEdMVV9J
TlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgICAxMDA5MDEKKyNkZWZpbmUgR0xVX09VVF9P
Rl9NRU1PUlkgICAgICAgICAgICAgICAgICAgIDEwMDkwMgorCisvKiBUZXNzQ2FsbGJhY2sgKi8K
KyNkZWZpbmUgR0xVX1RFU1NfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgIDEwMDEwMAorI2Rl
ZmluZSBHTFVfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMTAwCisjZGVmaW5l
IEdMVV9URVNTX1ZFUlRFWCAgICAgICAgICAgICAgICAgICAgICAxMDAxMDEKKyNkZWZpbmUgR0xV
X1ZFUlRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDEwMQorI2RlZmluZSBHTFVfVEVT
U19FTkQgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMTAyCisjZGVmaW5lIEdMVV9FTkQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAxMDIKKyNkZWZpbmUgR0xVX1RFU1NfRVJST1Ig
ICAgICAgICAgICAgICAgICAgICAgIDEwMDEwMworI2RlZmluZSBHTFVfVEVTU19FREdFX0ZMQUcg
ICAgICAgICAgICAgICAgICAgMTAwMTA0CisjZGVmaW5lIEdMVV9FREdFX0ZMQUcgICAgICAgICAg
ICAgICAgICAgICAgICAxMDAxMDQKKyNkZWZpbmUgR0xVX1RFU1NfQ09NQklORSAgICAgICAgICAg
ICAgICAgICAgIDEwMDEwNQorI2RlZmluZSBHTFVfVEVTU19CRUdJTl9EQVRBICAgICAgICAgICAg
ICAgICAgMTAwMTA2CisjZGVmaW5lIEdMVV9URVNTX1ZFUlRFWF9EQVRBICAgICAgICAgICAgICAg
ICAxMDAxMDcKKyNkZWZpbmUgR0xVX1RFU1NfRU5EX0RBVEEgICAgICAgICAgICAgICAgICAgIDEw
MDEwOAorI2RlZmluZSBHTFVfVEVTU19FUlJPUl9EQVRBICAgICAgICAgICAgICAgICAgMTAwMTA5
CisjZGVmaW5lIEdMVV9URVNTX0VER0VfRkxBR19EQVRBICAgICAgICAgICAgICAxMDAxMTAKKyNk
ZWZpbmUgR0xVX1RFU1NfQ09NQklORV9EQVRBICAgICAgICAgICAgICAgIDEwMDExMQorCisvKiBU
ZXNzQ29udG91ciAqLworI2RlZmluZSBHTFVfQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMTAwMTIwCisjZGVmaW5lIEdMVV9DQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx
MDAxMjEKKyNkZWZpbmUgR0xVX0lOVEVSSU9SICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDEy
MgorI2RlZmluZSBHTFVfRVhURVJJT1IgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMTIzCisj
ZGVmaW5lIEdMVV9VTktOT1dOICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAxMjQKKworLyog
VGVzc1Byb3BlcnR5ICovCisjZGVmaW5lIEdMVV9URVNTX1dJTkRJTkdfUlVMRSAgICAgICAgICAg
ICAgICAxMDAxNDAKKyNkZWZpbmUgR0xVX1RFU1NfQk9VTkRBUllfT05MWSAgICAgICAgICAgICAg
IDEwMDE0MQorI2RlZmluZSBHTFVfVEVTU19UT0xFUkFOQ0UgICAgICAgICAgICAgICAgICAgMTAw
MTQyCisKKy8qIFRlc3NFcnJvciAqLworI2RlZmluZSBHTFVfVEVTU19FUlJPUjEgICAgICAgICAg
ICAgICAgICAgICAgMTAwMTUxCisjZGVmaW5lIEdMVV9URVNTX0VSUk9SMiAgICAgICAgICAgICAg
ICAgICAgICAxMDAxNTIKKyNkZWZpbmUgR0xVX1RFU1NfRVJST1IzICAgICAgICAgICAgICAgICAg
ICAgIDEwMDE1MworI2RlZmluZSBHTFVfVEVTU19FUlJPUjQgICAgICAgICAgICAgICAgICAgICAg
MTAwMTU0CisjZGVmaW5lIEdMVV9URVNTX0VSUk9SNSAgICAgICAgICAgICAgICAgICAgICAxMDAx
NTUKKyNkZWZpbmUgR0xVX1RFU1NfRVJST1I2ICAgICAgICAgICAgICAgICAgICAgIDEwMDE1Ngor
I2RlZmluZSBHTFVfVEVTU19FUlJPUjcgICAgICAgICAgICAgICAgICAgICAgMTAwMTU3CisjZGVm
aW5lIEdMVV9URVNTX0VSUk9SOCAgICAgICAgICAgICAgICAgICAgICAxMDAxNTgKKyNkZWZpbmUg
R0xVX1RFU1NfTUlTU0lOR19CRUdJTl9QT0xZR09OICAgICAgIDEwMDE1MQorI2RlZmluZSBHTFVf
VEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVIgICAgICAgMTAwMTUyCisjZGVmaW5lIEdMVV9URVNT
X01JU1NJTkdfRU5EX1BPTFlHT04gICAgICAgICAxMDAxNTMKKyNkZWZpbmUgR0xVX1RFU1NfTUlT
U0lOR19FTkRfQ09OVE9VUiAgICAgICAgIDEwMDE1NAorI2RlZmluZSBHTFVfVEVTU19DT09SRF9U
T09fTEFSR0UgICAgICAgICAgICAgMTAwMTU1CisjZGVmaW5lIEdMVV9URVNTX05FRURfQ09NQklO
RV9DQUxMQkFDSyAgICAgICAxMDAxNTYKKworLyogVGVzc1dpbmRpbmcgKi8KKyNkZWZpbmUgR0xV
X1RFU1NfV0lORElOR19PREQgICAgICAgICAgICAgICAgIDEwMDEzMAorI2RlZmluZSBHTFVfVEVT
U19XSU5ESU5HX05PTlpFUk8gICAgICAgICAgICAgMTAwMTMxCisjZGVmaW5lIEdMVV9URVNTX1dJ
TkRJTkdfUE9TSVRJVkUgICAgICAgICAgICAxMDAxMzIKKyNkZWZpbmUgR0xVX1RFU1NfV0lORElO
R19ORUdBVElWRSAgICAgICAgICAgIDEwMDEzMworI2RlZmluZSBHTFVfVEVTU19XSU5ESU5HX0FC
U19HRVFfVFdPICAgICAgICAgMTAwMTM0CisKKyNkZWZpbmUgR0xVX1RFU1NfTUFYX0NPT1JEIDEu
MGUxNTAKKwordHlwZWRlZiBzdHJ1Y3QgR0xVdGVzc2VsYXRvciBHTFV0ZXNzZWxhdG9yOworCisj
aWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2V4dGVybiBHTFV0ZXNz
ZWxhdG9yICogR0xBUElFTlRSWSBpbnRlcm5hbF9nbHVOZXdUZXNzKHZvaWQpOworZXh0ZXJuIHZv
aWQgR0xBUElFTlRSWSBpbnRlcm5hbF9nbHVEZWxldGVUZXNzKEdMVXRlc3NlbGF0b3IgKnRlc3Mp
OworZXh0ZXJuIHZvaWQgR0xBUElFTlRSWSBpbnRlcm5hbF9nbHVUZXNzUHJvcGVydHkoR0xVdGVz
c2VsYXRvciAqdGVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSB3aGljaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZG91YmxlIHZhbHVlKTsKK2V4dGVybiB2b2lkIEdMQVBJRU5UUlkgaW50
ZXJuYWxfZ2x1R2V0VGVzc1Byb3BlcnR5KEdMVXRlc3NlbGF0b3IgKnRlc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd2hpY2gsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGRvdWJs
ZSAqdmFsdWUpOworZXh0ZXJuIHZvaWQgR0xBUElFTlRSWSBpbnRlcm5hbF9nbHVUZXNzTm9ybWFs
KEdMVXRlc3NlbGF0b3IgKnRlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xkb3VibGUgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGRvdWJsZSB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZG91YmxlIHopOworZXh0ZXJuIHZvaWQgR0xBUElFTlRSWSBpbnRl
cm5hbF9nbHVUZXNzQ2FsbGJhY2soR0xVdGVzc2VsYXRvciAqdGVzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB3aGljaCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKEdMQVBJRU5UUlkg
KmZuKSgpKTsKK2V4dGVybiB2b2lkIEdMQVBJRU5UUlkgaW50ZXJuYWxfZ2x1VGVzc1ZlcnRleChH
TFV0ZXNzZWxhdG9yICp0ZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZG91YmxlIGNvb3Jkc1szXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIEdMQVBJRU5UUlkg
aW50ZXJuYWxfZ2x1VGVzc0JlZ2luUG9seWdvbihHTFV0ZXNzZWxhdG9yICp0ZXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEp
OworZXh0ZXJuIHZvaWQgR0xBUElFTlRSWSBpbnRlcm5hbF9nbHVUZXNzQmVnaW5Db250b3VyKEdM
VXRlc3NlbGF0b3IgKnRlc3MpOworZXh0ZXJuIHZvaWQgR0xBUElFTlRSWSBpbnRlcm5hbF9nbHVU
ZXNzRW5kQ29udG91cihHTFV0ZXNzZWxhdG9yICp0ZXNzKTsKK2V4dGVybiB2b2lkIEdMQVBJRU5U
UlkgaW50ZXJuYWxfZ2x1VGVzc0VuZFBvbHlnb24oR0xVdGVzc2VsYXRvciAqdGVzcyk7CisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgLy8gSU5URVJOQUxfR0xVX0hf
CkluZGV4OiBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL0dOVW1ha2VmaWxlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvR05VbWFrZWZpbGUJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL0dOVW1ha2VmaWxlCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExMCBAQAorIyFnbWFrZQorIworIyBMaWNlbnNlIEFwcGxpY2FiaWxp
dHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKKyMgbWFk
ZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBT
R0kgRnJlZQorIyBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2Ui
KSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKKyMgZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBw
cm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKKyMgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eQorIyBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdh
bCBTZXJ2aWNlcywgMTYwMAorIyBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywg
Q0EgOTQwNDMtMTM1MSwgb3IgYXQ6CisjCisjIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9G
cmVlQgorIworIyBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29m
dHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQ
UkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCisjIERJU0NMQUlNRUQs
IElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFO
RAorIyBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFks
IEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVO
VC4KKyMKKyMgT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1w
bGUgSW1wbGVtZW50YXRpb24sCisjIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYs
IDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAorIyBJbmMuIFRoZSBPcmlnaW5h
bCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4K
KyMgQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMg
YXMgaW5kaWNhdGVkCisjIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisj
CisjIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFt
bWluZyBpbnRlcmZhY2VzCisjIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRo
IHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKKyMgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTog
QSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyMgQXByaWwgMSwgMTk5
OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9u
CisjIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhp
Y3Mgd2l0aCB0aGUgWAorIyBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2Vk
IE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKKyMgd2FzIGNyZWF0ZWQgdXNpbmcgdGhl
IE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgorIyBwdWJsaXNo
ZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVp
bmcKKyMgY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmlj
YXRpb24uCisjCisjICREYXRlJCAkUmV2aXNpb24kCisjICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9n
ZngvbGliL2dsdS9saWJ0ZXNzL0dOVW1ha2VmaWxlIzkgJAorCitPQkpFQ1RfU1RZTEUgPSBOMzIK
KworaW5jbHVkZSAkKFJPT1QpL3Vzci9pbmNsdWRlL21ha2UvY29tbW9uZGVmcworCitUQVJHRVQg
PSBsaWJ0ZXNzLmEKKworVEFSR0VUUyA9ICQoVEFSR0VUKQorCitMQ0lOQ1MgPSAtSS4uL2luY2x1
ZGUKKworIyBDb21waWxhdGlvbiBmbGFnczoKKyMKKyMgLUROREVCVUcgaXMgZm9yIHRoZSBwcm9k
dWN0aW9uIGNvZGU7IGl0IHJlbW92ZXMgYWxsIGFzc2VydGlvbiBjaGVja3MKKyMgICAgKG5vdGUg
dGhhdCA8YXNzZXJ0Lmg+IGxvb2tzIGF0IHRoaXMgc3ltYm9sKS4KKyMKKyMgLUROT19NQUxMT1BU
IHVzZXMgcmVndWxhciBtYWxsb2MgaW5zdGVhZCBvZiB0aGUgbWFsbG9wdCgpIHZlcnNpb24uCisj
ICAgKioqKiogVW5sZXNzIHlvdSB1c2UgdGhpcyBmbGFnLCB5b3UgbXVzdCB1c2UgIi1sbWFsbG9j
IiB0byBsaW5rCisjICAgKioqKiogeW91ciBhcHBsaWNhdGlvbiEKKyMKKyMgLURNRU1PUllfREVC
VUcgdHVybnMgb24gdGhlIE1fREVCVUcgb3B0aW9uIG9mIG1hbGxvcHQ7IHRoaXMgY2FuCisjICAg
IGluY3JlYXNlIHRoZSBydW5uaW5nIHRpbWUgYSBMT1QuCisjCisjIC1ER0xVX1RFU1NfQVBJX0ZM
T0FUIGNvbXBpbGVzIGEgc2luZ2xlLXByZWNpc2lvbiB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5Lgor
IworIyAtZmxvYXQgcHJldmVudHMgYXV0b21hdGljIHByb21vdGlvbiB0byBkb3VibGUgcHJlY2lz
aW9uOyB0aGlzIHdpbGwgcHJvZHVjZQorIyAgICBmYXN0ZXIgY29kZSB3aGVuIGNvbXBpbGVkIHdp
dGggLURHTFVfVEVTU19BUElfRkxPQVQuCisjCisjIC1ETk9fQlJBTkNIX0NPTkRJVElPTlMgdXNl
cyAmIGFuZCB8IGluc3RlYWQgb2YgJiYgYW5kIHx8IG9uIGEgY291cGxlCisjICAgIG9mIGhlYXZp
bHktdXNlZCB0ZXN0cyAoVmVydEVxIGFuZCBWZXJ0TGVxKTsgc29tZSBjb21waWxlcnMgY2FuIGdl
bmVyYXRlCisjICAgIGJldHRlciBjb2RlIHdpdGggdGhlc2UgKHVzZSBzcGVjaWFsIGluc3RydWN0
aW9ucyB0byBhdm9pZCBicmFuY2hpbmcpLgorIworIyAtREZPUl9UUklURV9URVNUX1BST0dSQU0g
aXMgKm9ubHkqIGZvciB1c2Ugd2l0aCB0aGUgdGVzdCBwcm9ncmFtIGNhbGxlZAorIyAgICAidHJp
dGUiLiAgSXQgdXNlcyBzb21lIHZhcmlhYmxlcyB3aGljaCBhcmUgZGVmaW5lZCBieSB0aGUgdGVz
dCBwcm9ncmFtLAorIyAgICBzbyB5b3Ugd29uJ3QgYmUgYWJsZSB0byBsaW5rIGl0IHdpdGggYW55
dGhpbmcgZWxzZS4KKworSEZJTEVTID0gXAorCWRpY3QuaCBcCisJZGljdC1saXN0LmggXAorCWdl
b20uaCBcCisJbWVtYWxsb2MuaCBcCisJbWVzaC5oIFwKKwlub3JtYWwuaCBcCisJcHJpb3JpdHlx
LWhlYXAuaCBcCisJcHJpb3JpdHlxLWhlYXAuYyBcCisJcHJpb3JpdHlxLXNvcnQuaCBcCisJcHJp
b3JpdHlxLmggXAorCXJlbmRlci5oIFwKKwlzd2VlcC5oIFwKKwl0ZXNzLmggXAorCXRlc3Ntb25v
LmggXAorCSQoTlVMTCkKKworQ0ZJTEVTID0gXAorCWRpY3QuYyBcCisJZ2VvbS5jIFwKKwltZW1h
bGxvYy5jIFwKKwltZXNoLmMgXAorCW5vcm1hbC5jIFwKKwlwcmlvcml0eXEuYyBcCisJcmVuZGVy
LmMgXAorCXN3ZWVwLmMgXAorCXRlc3MuYyBcCisJdGVzc21vbm8uYyBcCisJJChOVUxMKQorCitk
ZWZhdWx0IGxpYnMgbGlic19pbnN0YWxsIGluc3RhbGw6ICQoVEFSR0VUKQorCitoZWFkZXJzIGhl
YWRlcnNfaW5zdGFsbCBhcHBzOgorCiskKFRBUkdFVCk6ICQoT0JKRUNUUykKKwkkKEFSKSBjcmwg
JEAgJChPQkpFQ1RTKTsKKworaW5jbHVkZSAkKENPTU1PTlJVTEVTKQpJbmRleDogV2ViQ29yZS8z
cmRwYXJ0eS9nbHUvbGlidGVzcy9JbWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS8zcmRw
YXJ0eS9nbHUvbGlidGVzcy9JbWFrZWZpbGUJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlLzNyZHBh
cnR5L2dsdS9saWJ0ZXNzL0ltYWtlZmlsZQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAor
WENPTU0gTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9u
cyBvZiB0aGlzIGZpbGUgYXJlCitYQ09NTSBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUg
bGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCitYQ09NTSBTb2Z0d2FyZSBMaWNl
bnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMK
K1hDT01NIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGlj
ZW5zZS4gWW91IG1heSBub3QgdXNlCitYQ09NTSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5CitYQ09NTSBvZiB0aGUg
TGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywg
MTYwMAorWENPTU0gQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQz
LTEzNTEsIG9yIGF0OgorWENPTU0gCitYQ09NTSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMv
RnJlZUIKK1hDT01NIAorWENPTU0gTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5z
ZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCitYQ09NTSAiQVMgSVMiIGJhc2lz
LCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMK
K1hDT01NIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1Q
TElFRCBXQVJSQU5USUVTIEFORAorWENPTU0gQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFks
IFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCitYQ09NTSBQQVJUSUNVTEFSIFBV
UlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgorWENPTU0gCitYQ09NTSBPcmlnaW5hbCBDb2Rl
LiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKK1hD
T01NIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBi
eSBTaWxpY29uIEdyYXBoaWNzLAorWENPTU0gSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5
cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCitYQ09NTSBDb3B5cmln
aHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0
ZWQKK1hDT01NIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitYQ09NTSAK
K1hDT01NIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9n
cmFtbWluZyBpbnRlcmZhY2VzCitYQ09NTSBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rp
b24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCitYQ09NTSBPcGVuR0woUikgR3JhcGhp
Y3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAorWENP
TU0gQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBM
aWJyYXJ5IChWZXJzaW9uCitYQ09NTSAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBh
bmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKK1hDT01NIFdpbmRvdyBTeXN0ZW0oUikg
KFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQor
WENPTU0gd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbgorWENPTU0gcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVl
biBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCitYQ09NTSBjb21wbGlhbnQgd2l0aCB0
aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KK1hDT01NCisKKyNpbmNs
dWRlIDxMaWJyYXJ5LnRtcGw+CisKK09CSlMgPSBcCisJZGljdC5vIFwKKwlnZW9tLm8gXAorCW1l
bWFsbG9jLm8gXAorCW1lc2gubyBcCisJbm9ybWFsLm8gXAorCXByaW9yaXR5cS5vIFwKKwlyZW5k
ZXIubyBcCisJc3dlZXAubyBcCisJdGVzcy5vIFwKKwl0ZXNzbW9uby5vCisKK0lOQ0xVREVTID0g
XAorCS1JLi4vaW5jbHVkZSBcCisJLUkkKFRPUCkvaW5jbHVkZSBcCisJLUkkKFRPUCkvaW5jbHVk
ZS9HTAorCitERUZJTkVTID0gXAorCS1ETkRFQlVHCisKK05vcm1hbExpYnJhcnlPYmplY3RSdWxl
KCkKKworTm9ybWFsTGlicmFyeVRhcmdldCh0ZXNzLCAkKE9CSlMpKQorCitEZXBlbmRUYXJnZXQo
KQorQ2xlYW5UYXJnZXQoKQpJbmRleDogV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9SRUFE
TUUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9SRUFETUUJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL1JFQURNRQkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0NDcgQEAKKy8qCisqKiAkSGVhZGVyOiAvY3ZzL3Byb2plY3RzL29n
bC1zYW1wbGUvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL1JFQURNRSx2IDEuMSAyMDAwLzA0LzI2
IDA1OjUzOjU5IGxqcCBFeHAgJAorKi8KKworR2VuZXJhbCBQb2x5Z29uIFRlc3NlbGF0aW9uCist
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIG5vdGUgZGVzY3JpYmVzIGEgdGVz
c2VsYXRvciBmb3IgcG9seWdvbnMgY29uc2lzdGluZyBvZiBvbmUgb3IKKyAgbW9yZSBjbG9zZWQg
Y29udG91cnMuICBJdCBpcyBiYWNrd2FyZC1jb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQKKyAg
T3BlbkdMIFV0aWxpdGllcyB0ZXNzZWxhdG9yLCBhbmQgaXMgaW50ZW5kZWQgdG8gcmVwbGFjZSBp
dC4gIEhlcmUgaXMKKyAgYSBzdW1tYXJ5IG9mIHRoZSBtYWpvciBkaWZmZXJlbmNlczoKKworICAg
LSBpbnB1dCBjb250b3VycyBjYW4gYmUgaW50ZXJzZWN0aW5nLCBzZWxmLWludGVyc2VjdGluZywg
b3IgZGVnZW5lcmF0ZS4KKyAgCisgICAtIHN1cHBvcnRzIGEgY2hvaWNlIG9mIHNldmVyYWwgd2lu
ZGluZyBydWxlcyBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggcGFydHMKKyAgICAgb2YgdGhlIHBvbHln
b24gYXJlIG9uIHRoZSAiaW50ZXJpb3IiLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbwor
ICAgICBDU0cgb3BlcmF0aW9ucyBvbiBwb2x5Z29ucy4KKyAgCisgICAtIGJvdW5kYXJ5IGV4dHJh
Y3Rpb246IGluc3RlYWQgb2YgdGVzc2VsYXRpbmcgdGhlIHBvbHlnb24sIHJldHVybnMgYQorICAg
ICBzZXQgb2YgY2xvc2VkIGNvbnRvdXJzIHdoaWNoIHNlcGFyYXRlIHRoZSBpbnRlcmlvciBmcm9t
IHRoZSBleHRlcmlvci4KKyAgCisgICAtIHJldHVybnMgdGhlIG91dHB1dCBhcyBhIHNtYWxsIG51
bWJlciBvZiB0cmlhbmdsZSBmYW5zIGFuZCBzdHJpcHMsCisgICAgIHJhdGhlciB0aGFuIGEgbGlz
dCBvZiBpbmRlcGVuZGVudCB0cmlhbmdsZXMgKHdoZW4gcG9zc2libGUpLgorICAKKyAgIC0gb3V0
cHV0IGlzIGF2YWlsYWJsZSBhcyBhbiBleHBsaWNpdCBtZXNoIChhIHF1YWQtZWRnZSBzdHJ1Y3R1
cmUpLAorICAgICBpbiBhZGRpdGlvbiB0byB0aGUgbm9ybWFsIGNhbGxiYWNrIGludGVyZmFjZS4K
KyAgCisgICAtIHRoZSBhbGdvcml0aG0gdXNlZCBpcyBleHRyZW1lbHkgcm9idXN0LgorCisKK1Ro
ZSBpbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0KKworICBUaGUgdGVzc2VsYXRvciBzdGF0ZSBpcyBt
YWludGFpbmVkIGluIGEgInRlc3NlbGF0b3Igb2JqZWN0Ii4KKyAgVGhlc2UgYXJlIGFsbG9jYXRl
ZCBhbmQgZGVzdHJveWVkIHVzaW5nCisKKyAgICAgR0xVdGVzc2VsYXRvciAqZ2x1TmV3VGVzcygg
dm9pZCApOworICAgICB2b2lkIGdsdURlbGV0ZVRlc3MoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKTsK
KworICBTZXZlcmFsIHRlc3NlbGF0b3Igb2JqZWN0cyBtYXkgYmUgdXNlZCBzaW11bHRhbmVvdXNs
eS4KKworICBJbnB1dHMKKyAgLS0tLS0tCisgIAorICBUaGUgaW5wdXQgY29udG91cnMgYXJlIHNw
ZWNpZmllZCB3aXRoIHRoZSBmb2xsb3dpbmcgcm91dGluZXM6CisKKyAgICAgdm9pZCBnbHVUZXNz
QmVnaW5Qb2x5Z29uKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7CisgICAgIHZvaWQgZ2x1VGVzc0Jl
Z2luQ29udG91ciggR0xVdGVzc2VsYXRvciAqdGVzcyApOworICAgICB2b2lkIGdsdVRlc3NWZXJ0
ZXgoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWNvb3JkIGNvb3Jkc1szXSwgdm9pZCAqZGF0YSAp
OworICAgICB2b2lkIGdsdVRlc3NFbmRDb250b3VyKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7Cisg
ICAgIHZvaWQgZ2x1VGVzc0VuZFBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKTsKKworICBX
aXRoaW4gZWFjaCBCZWdpblBvbHlnb24vRW5kUG9seWdvbiBwYWlyLCB0aGVyZSBjYW4gYmUgemVy
byBvciBtb3JlCisgIGNhbGxzIHRvIEJlZ2luQ29udG91ci9FbmRDb250b3VyLiAgV2l0aGluIGVh
Y2ggY29udG91ciwgdGhlcmUgYXJlIHplcm8KKyAgb3IgbW9yZSBjYWxscyB0byBnbHVUZXNzVmVy
dGV4KCkuICBUaGUgdmVydGljZXMgc3BlY2lmeSBhIGNsb3NlZAorICBjb250b3VyICh0aGUgbGFz
dCB2ZXJ0ZXggb2YgZWFjaCBjb250b3VyIGlzIGF1dG9tYXRpY2FsbHkgbGlua2VkIHRvCisgIHRo
ZSBmaXJzdCkuCisKKyAgImNvb3JkcyIgZ2l2ZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHZlcnRl
eCBpbiAzLXNwYWNlLiAgRm9yIHVzZWZ1bAorICByZXN1bHRzLCBhbGwgdmVydGljZXMgc2hvdWxk
IGxpZSBpbiBzb21lIHBsYW5lLCBzaW5jZSB0aGUgdmVydGljZXMKKyAgYXJlIHByb2plY3RlZCBv
bnRvIGEgcGxhbmUgYmVmb3JlIHRlc3NlbGF0aW9uLiAgImRhdGEiIGlzIGEgcG9pbnRlcgorICB0
byBhIHVzZXItZGVmaW5lZCB2ZXJ0ZXggc3RydWN0dXJlLCB3aGljaCB0eXBpY2FsbHkgY29udGFp
bnMgb3RoZXIKKyAgaW5mb3JtYXRpb24gc3VjaCBhcyBjb2xvciwgdGV4dHVyZSBjb29yZGluYXRl
cywgbm9ybWFsLCBldGMuICBJdCBpcworICB1c2VkIHRvIHJlZmVyIHRvIHRoZSB2ZXJ0ZXggZHVy
aW5nIHJlbmRlcmluZy4KKworICBUaGUgbGlicmFyeSBjYW4gYmUgY29tcGlsZWQgaW4gc2luZ2xl
LSBvciBkb3VibGUtcHJlY2lzaW9uOyB0aGUgdHlwZQorICBHTFVjb29yZCByZXByZXNlbnRzIGVp
dGhlciAiZmxvYXQiIG9yICJkb3VibGUiIGFjY29yZGluZ2x5LiAgVGhlIEdMVQorICB2ZXJzaW9u
IHdpbGwgYmUgYXZhaWxhYmxlIGluIGRvdWJsZS1wcmVjaXNpb24gb25seS4gIENvbXBpbGUgd2l0
aAorICBHTFVfVEVTU19BUElfRkxPQVQgZGVmaW5lZCB0byBnZXQgdGhlIHNpbmdsZS1wcmVjaXNp
b24gdmVyc2lvbi4KKworICBXaGVuIEVuZFBvbHlnb24gaXMgY2FsbGVkLCB0aGUgdGVzc2VsYXRp
b24gYWxnb3JpdGhtIGRldGVybWluZXMKKyAgd2hpY2ggcmVnaW9ucyBhcmUgaW50ZXJpb3IgdG8g
dGhlIGdpdmVuIGNvbnRvdXJzLCBhY2NvcmRpbmcgdG8gb25lCisgIG9mIHNldmVyYWwgIndpbmRp
bmcgcnVsZXMiIGRlc2NyaWJlZCBiZWxvdy4gIFRoZSBpbnRlcmlvciByZWdpb25zCisgIGFyZSB0
aGVuIHRlc3NlbGF0ZWQsIGFuZCB0aGUgb3V0cHV0IGlzIHByb3ZpZGVkIGFzIGNhbGxiYWNrcy4K
KworCisgIFJlbmRlcmluZyBDYWxsYmFja3MKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIENh
bGxiYWNrcyBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBjbGllbnQgdXNpbmcKKworICAgICB2b2lkIGds
dVRlc3NDYWxsYmFjayggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xlbnVtIHdoaWNoLCB2b2lkICgq
Zm4pKCkpOworCisgIElmICJmbiIgaXMgTlVMTCwgYW55IHByZXZpb3VzbHkgZGVmaW5lZCBjYWxs
YmFjayBpcyBkaXNjYXJkZWQuCisgIAorICBUaGUgY2FsbGJhY2tzIHVzZWQgdG8gcHJvdmlkZSBv
dXRwdXQgYXJlOgkvKiB3aGljaCA9PSAqLworCisgICAgIHZvaWQgYmVnaW4oIEdMZW51bSB0eXBl
ICk7CQkJLyogR0xVX1RFU1NfQkVHSU4gKi8KKyAgICAgdm9pZCBlZGdlRmxhZyggR0xib29sZWFu
IGZsYWcgKTsJCS8qIEdMVV9URVNTX0VER0VfRkxBRyAqLworICAgICB2b2lkIHZlcnRleCggdm9p
ZCAqZGF0YSApOwkJCS8qIEdMVV9URVNTX1ZFUlRFWCAqLworICAgICB2b2lkIGVuZCggdm9pZCAp
OwkJCQkvKiBHTFVfVEVTU19FTkQgKi8KKworICBBbnkgb2YgdGhlIGNhbGxiYWNrcyBtYXkgYmUg
bGVmdCB1bmRlZmluZWQ7IGlmIHNvLCB0aGUgY29ycmVzcG9uZGluZworICBpbmZvcm1hdGlvbiB3
aWxsIG5vdCBiZSBzdXBwbGllZCBkdXJpbmcgcmVuZGVyaW5nLgorCisgIFRoZSAiYmVnaW4iIGNh
bGxiYWNrIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSBwcmltaXRpdmU7IHR5cGUgaXMgb25lCisg
IG9mIEdMX1RSSUFOR0xFX1NUUklQLCBHTF9UUklBTkdMRV9GQU4sIG9yIEdMX1RSSUFOR0xFUyAo
YnV0IHNlZSB0aGUKKyAgbm90ZXMgb24gImJvdW5kYXJ5IGV4dHJhY3Rpb24iIGJlbG93KS4KKyAg
CisgIEl0IGlzIGZvbGxvd2VkIGJ5IGFueSBudW1iZXIgb2YgInZlcnRleCIgY2FsbGJhY2tzLCB3
aGljaCBzdXBwbHkgdGhlCisgIHZlcnRpY2VzIGluIHRoZSBzYW1lIG9yZGVyIGFzIGV4cGVjdGVk
IGJ5IHRoZSBjb3JyZXNwb25kaW5nIGdsQmVnaW4oKQorICBjYWxsLiAgQWZ0ZXIgdGhlIGxhc3Qg
dmVydGV4IG9mIGEgZ2l2ZW4gcHJpbWl0aXZlLCB0aGVyZSBpcyBhIGNhbGxiYWNrCisgIHRvICJl
bmQiLgorCisgIElmIHRoZSAiZWRnZUZsYWciIGNhbGxiYWNrIGlzIHByb3ZpZGVkLCBubyB0cmlh
bmdsZSBmYW5zIG9yIHN0cmlwcworICB3aWxsIGJlIHVzZWQuICBXaGVuIGVkZ2VGbGFnIGlzIGNh
bGxlZCwgaWYgImZsYWciIGlzIEdMX1RSVUUgdGhlbiBlYWNoCisgIHZlcnRleCB3aGljaCBmb2xs
b3dzIGJlZ2lucyBhbiBlZGdlIHdoaWNoIGxpZXMgb24gdGhlIHBvbHlnb24gYm91bmRhcnkKKyAg
KGllLiBhbiBlZGdlIHdoaWNoIHNlcGFyYXRlcyBhbiBpbnRlcmlvciByZWdpb24gZnJvbSBhbiBl
eHRlcmlvciBvbmUpLgorICBJZiAiZmxhZyIgaXMgR0xfRkFMU0UsIGVhY2ggdmVydGV4IHdoaWNo
IGZvbGxvd3MgYmVnaW5zIGFuIGVkZ2Ugd2hpY2ggbGllcworICBpbiB0aGUgcG9seWdvbiBpbnRl
cmlvci4gICJlZGdlRmxhZyIgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdAorICBjYWxs
IHRvICJ2ZXJ0ZXgiLgorCisgIE90aGVyIENhbGxiYWNrcworICAtLS0tLS0tLS0tLS0tLS0KKwor
ICAgdm9pZCBtZXNoKCBHTFVtZXNoICptZXNoICk7CQkJLyogR0xVX1RFU1NfTUVTSCAqLworCisg
ICAtIFJldHVybnMgYW4gZXhwbGljaXQgbWVzaCwgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIHF1YWQt
ZWRnZSBzdHJ1Y3R1cmUKKyAgICAgKEd1aWJhcy9TdG9sZmkgJzg1KS4gIE90aGVyIGltcGxlbWVu
dGF0aW9ucyBvZiB0aGlzIGludGVyZmFjZSBtaWdodAorICAgICB1c2UgYSBkaWZmZXJlbnQgbWVz
aCBzdHJ1Y3R1cmUsIHNvIHRoaXMgaXMgYXZhaWxhYmxlIG9ubHkgb25seSBhcyBhbgorICAgICBT
R0kgZXh0ZW5zaW9uLiAgV2hlbiB0aGUgbWVzaCBpcyBubyBsb25nZXIgbmVlZGVkLCBpdCBzaG91
bGQgYmUgZnJlZWQKKyAgICAgdXNpbmcKKworCXZvaWQgZ2x1RGVsZXRlTWVzaCggR0xVbWVzaCAq
bWVzaCApOworCisgICAgIFRoZXJlIGlzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhpcyBkYXRh
IHN0cnVjdHVyZSBpbiB0aGUgaW5jbHVkZQorICAgICBmaWxlICJtZXNoLmgiLiAgRm9yIHRoZSBm
dWxsIGRldGFpbHMsIHNlZSBMLiBHdWliYXMgYW5kIEouIFN0b2xmaSwKKyAgICAgUHJpbWl0aXZl
cyBmb3IgdGhlIG1hbmlwdWxhdGlvbiBvZiBnZW5lcmFsIHN1YmRpdmlzaW9ucyBhbmQgdGhlCisg
ICAgIGNvbXB1dGF0aW9uIG9mIFZvcm9ub2kgZGlhZ3JhbXMsIEFDTSBUcmFuc2FjdGlvbnMgb24g
R3JhcGhpY3MsCisgICAgIDQoMik6NzQtMTIzLCBBcHJpbCAxOTg1LiAgRm9yIGFuIGludHJvZHVj
dGlvbiwgc2VlIHRoZSBjb3Vyc2Ugbm90ZXMKKyAgICAgZm9yIENTMzQ4YSwgIk1hdGhlbWF0aWNh
bCBGb3VuZGF0aW9ucyBvZiBDb21wdXRlciBHcmFwaGljcyIsCisgICAgIGF2YWlsYWJsZSBhdCB0
aGUgU3RhbmZvcmQgYm9va3N0b3JlIChhbmQgdGF1Z2h0IGR1cmluZyB0aGUgZmFsbAorICAgICBx
dWFydGVyKS4KKworICAgdm9pZCBlcnJvciggR0xlbnVtIGVycm5vICk7CQkJLyogR0xVX1RFU1Nf
RVJST1IgKi8KKworICAgLSBlcnJubyBpcyBvbmUgb2YJR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9Q
T0xZR09OLAorCQkJR0xVX1RFU1NfTUlTU0lOR19FTkRfUE9MWUdPTiwKKwkJCUdMVV9URVNTX01J
U1NJTkdfQkVHSU5fQ09OVE9VUiwKKwkJCUdMVV9URVNTX01JU1NJTkdfRU5EX0NPTlRPVVIsCisJ
CQlHTFVfVEVTU19DT09SRF9UT09fTEFSR0UsCisJCQlHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FM
TEJBQ0sKKworICAgICBUaGUgZmlyc3QgZm91ciBhcmUgb2J2aW91cy4gIFRoZSBpbnRlcmZhY2Ug
cmVjb3ZlcnMgZnJvbSB0aGVzZQorICAgICBlcnJvcnMgYnkgaW5zZXJ0aW5nIHRoZSBtaXNzaW5n
IGNhbGwocykuCisgIAorICAgICBHTFVfVEVTU19DT09SRF9UT09fTEFSR0Ugc2F5cyB0aGF0IHNv
bWUgdmVydGV4IGNvb3JkaW5hdGUgZXhjZWVkZWQKKyAgICAgdGhlIHByZWRlZmluZWQgY29uc3Rh
bnQgR0xVX1RFU1NfTUFYX0NPT1JEIGluIGFic29sdXRlIHZhbHVlLCBhbmQKKyAgICAgdGhhdCB0
aGUgdmFsdWUgaGFzIGJlZW4gY2xhbXBlZC4gIChDb29yZGluYXRlIHZhbHVlcyBtdXN0IGJlIHNt
YWxsCisgICAgIGVub3VnaCBzbyB0aGF0IHR3byBjYW4gYmUgbXVsdGlwbGllZCB0b2dldGhlciB3
aXRob3V0IG92ZXJmbG93LikKKworICAgICBHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0sg
c2F5cyB0aGF0IHRoZSBhbGdvcml0aG0gZGV0ZWN0ZWQgYW4KKyAgICAgaW50ZXJzZWN0aW9uIGJl
dHdlZW4gdHdvIGVkZ2VzIGluIHRoZSBpbnB1dCBkYXRhLCBhbmQgdGhlICJjb21iaW5lIgorICAg
ICBjYWxsYmFjayAoYmVsb3cpIHdhcyBub3QgcHJvdmlkZWQuICBObyBvdXRwdXQgd2lsbCBiZSBn
ZW5lcmF0ZWQuCisKKworICAgdm9pZCBjb21iaW5lKCBHTFVjb29yZCBjb29yZHNbM10sIHZvaWQg
KmRhdGFbNF0sCS8qIEdMVV9URVNTX0NPTUJJTkUgKi8KKwkJIEdMVWNvb3JkIHdlaWdodFs0XSwg
dm9pZCAqKm91dERhdGEgKTsKKworICAgLSBXaGVuIHRoZSBhbGdvcml0aG0gZGV0ZWN0cyBhbiBp
bnRlcnNlY3Rpb24sIG9yIHdpc2hlcyB0byBtZXJnZQorICAgICBmZWF0dXJlcywgaXQgbmVlZHMg
dG8gY3JlYXRlIGEgbmV3IHZlcnRleC4gIFRoZSB2ZXJ0ZXggaXMgZGVmaW5lZAorICAgICBhcyBh
IGxpbmVhciBjb21iaW5hdGlvbiBvZiB1cCB0byA0IGV4aXN0aW5nIHZlcnRpY2VzLCByZWZlcmVu
Y2VkCisgICAgIGJ5IGRhdGFbMC4uM10uICBUaGUgY29lZmZpY2llbnRzIG9mIHRoZSBsaW5lYXIg
Y29tYmluYXRpb24gYXJlCisgICAgIGdpdmVuIGJ5IHdlaWdodFswLi4zXTsgdGhlc2Ugd2VpZ2h0
cyBhbHdheXMgc3VtIHRvIDEuMC4gIEFsbCB2ZXJ0ZXgKKyAgICAgcG9pbnRlcnMgYXJlIHZhbGlk
IGV2ZW4gd2hlbiBzb21lIG9mIHRoZSB3ZWlnaHRzIGFyZSB6ZXJvLgorICAgICAiY29vcmRzIiBn
aXZlcyB0aGUgbG9jYXRpb24gb2YgdGhlIG5ldyB2ZXJ0ZXguCisKKyAgICAgVGhlIHVzZXIgbXVz
dCBhbGxvY2F0ZSBhbm90aGVyIHZlcnRleCwgaW50ZXJwb2xhdGUgcGFyYW1ldGVycworICAgICB1
c2luZyAiZGF0YSIgYW5kICJ3ZWlnaHRzIiwgYW5kIHJldHVybiB0aGUgbmV3IHZlcnRleCBwb2lu
dGVyIGluCisgICAgICJvdXREYXRhIi4gIFRoaXMgaGFuZGxlIGlzIHN1cHBsaWVkIGR1cmluZyBy
ZW5kZXJpbmcgY2FsbGJhY2tzLgorICAgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHBvbHlnb24gbGll
cyBpbiBhbiBhcmJpdHJhcnkgcGxhbmUgaW4gMy1zcGFjZSwKKyAgICAgYW5kIHdlIGFzc29jaWF0
ZSBhIGNvbG9yIHdpdGggZWFjaCB2ZXJ0ZXgsIHRoZSBjb21iaW5lIGNhbGxiYWNrIG1pZ2h0Cisg
ICAgIGxvb2sgbGlrZSB0aGlzOgorICAgIAorICAgICB2b2lkIG15Q29tYmluZSggR0xVY29vcmQg
Y29vcmRzWzNdLCBWRVJURVggKmRbNF0sCisgICAgICAgICAgICAgICAgICAgICBHTFVjb29yZCB3
WzRdLCBWRVJURVggKipkYXRhT3V0ICkKKyAgICAgeworICAgICAgICBWRVJURVggKm5ldyA9IG5l
d192ZXJ0ZXgoKTsKKyAgICAgICAKKyAgICAgICAgbmV3LT54ID0gY29vcmRzWzBdOworICAgICAg
ICBuZXctPnkgPSBjb29yZHNbMV07CisgICAgICAgIG5ldy0+eiA9IGNvb3Jkc1syXTsKKyAgICAg
ICAgbmV3LT5yID0gd1swXSpkWzBdLT5yICsgd1sxXSpkWzFdLT5yICsgd1syXSpkWzJdLT5yICsg
d1szXSpkWzNdLT5yOworICAgICAgICBuZXctPmcgPSB3WzBdKmRbMF0tPmcgKyB3WzFdKmRbMV0t
PmcgKyB3WzJdKmRbMl0tPmcgKyB3WzNdKmRbM10tPmc7CisgICAgICAgIG5ldy0+YiA9IHdbMF0q
ZFswXS0+YiArIHdbMV0qZFsxXS0+YiArIHdbMl0qZFsyXS0+YiArIHdbM10qZFszXS0+YjsKKyAg
ICAgICAgbmV3LT5hID0gd1swXSpkWzBdLT5hICsgd1sxXSpkWzFdLT5hICsgd1syXSpkWzJdLT5h
ICsgd1szXSpkWzNdLT5hOworICAgICAgICAqZGF0YU91dCA9IG5ldzsKKyAgICAgfQorCisgICAg
IElmIHRoZSBhbGdvcml0aG0gZGV0ZWN0cyBhbiBpbnRlcnNlY3Rpb24sIHRoZW4gdGhlICJjb21i
aW5lIiBjYWxsYmFjaworICAgICBtdXN0IGJlIGRlZmluZWQsIGFuZCBtdXN0IHdyaXRlIGEgbm9u
LU5VTEwgcG9pbnRlciBpbnRvICJkYXRhT3V0Ii4KKyAgICAgT3RoZXJ3aXNlIHRoZSBHTFVfVEVT
U19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0sgZXJyb3Igb2NjdXJzLCBhbmQgbm8KKyAgICAgb3V0cHV0
IGlzIGdlbmVyYXRlZC4gIFRoaXMgaXMgdGhlIG9ubHkgZXJyb3IgdGhhdCBjYW4gb2NjdXIgZHVy
aW5nCisgICAgIHRlc3NlbGF0aW9uIGFuZCByZW5kZXJpbmcuCisKKworICBDb250cm9sIG92ZXIg
VGVzc2VsYXRpb24KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIAorICAgdm9pZCBnbHVU
ZXNzUHJvcGVydHkoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZW51bSB3aGljaCwgR0xVY29vcmQg
dmFsdWUgKTsKKworICAgUHJvcGVydGllcyBkZWZpbmVkOgorCisgICAgLSBHTFVfVEVTU19XSU5E
SU5HX1JVTEUuICBQb3NzaWJsZSB2YWx1ZXM6CisKKwkgIEdMVV9URVNTX1dJTkRJTkdfT0RECisJ
ICBHTFVfVEVTU19XSU5ESU5HX05PTlpFUk8KKwkgIEdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkUK
KwkgIEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkUKKwkgIEdMVV9URVNTX1dJTkRJTkdfQUJTX0dF
UV9UV08KKworICAgICAgVGhlIGlucHV0IGNvbnRvdXJzIHBhcml0aW9uIHRoZSBwbGFuZSBpbnRv
IHJlZ2lvbnMuICBBIHdpbmRpbmcKKyAgICAgIHJ1bGUgZGV0ZXJtaW5lcyB3aGljaCBvZiB0aGVz
ZSByZWdpb25zIGFyZSBpbnNpZGUgdGhlIHBvbHlnb24uCisgICAgICAKKyAgICAgIEZvciBhIHNp
bmdsZSBjb250b3VyIEMsIHRoZSB3aW5kaW5nIG51bWJlciBvZiBhIHBvaW50IHggaXMgc2ltcGx5
CisgICAgICB0aGUgc2lnbmVkIG51bWJlciBvZiByZXZvbHV0aW9ucyB3ZSBtYWtlIGFyb3VuZCB4
IGFzIHdlIHRyYXZlbAorICAgICAgb25jZSBhcm91bmQgQyAod2hlcmUgQ0NXIGlzIHBvc2l0aXZl
KS4gIFdoZW4gdGhlcmUgYXJlIHNldmVyYWwKKyAgICAgIGNvbnRvdXJzLCB0aGUgaW5kaXZpZHVh
bCB3aW5kaW5nIG51bWJlcnMgYXJlIHN1bW1lZC4gIFRoaXMKKyAgICAgIHByb2NlZHVyZSBhc3Nv
Y2lhdGVzIGEgc2lnbmVkIGludGVnZXIgdmFsdWUgd2l0aCBlYWNoIHBvaW50IHggaW4KKyAgICAg
IHRoZSBwbGFuZS4gIE5vdGUgdGhhdCB0aGUgd2luZGluZyBudW1iZXIgaXMgdGhlIHNhbWUgZm9y
IGFsbAorICAgICAgcG9pbnRzIGluIGEgc2luZ2xlIHJlZ2lvbi4KKworICAgICAgVGhlIHdpbmRp
bmcgcnVsZSBjbGFzc2lmaWVzIGEgcmVnaW9uIGFzICJpbnNpZGUiIGlmIGl0cyB3aW5kaW5nCisg
ICAgICBudW1iZXIgYmVsb25ncyB0byB0aGUgY2hvc2VuIGNhdGVnb3J5IChvZGQsIG5vbnplcm8s
IHBvc2l0aXZlLAorICAgICAgbmVnYXRpdmUsIG9yIGFic29sdXRlIHZhbHVlIG9mIGF0IGxlYXN0
IHR3bykuICBUaGUgY3VycmVudCBHTFUKKyAgICAgIHRlc3NlbGF0b3IgaW1wbGVtZW50cyB0aGUg
Im9kZCIgcnVsZS4gIFRoZSAibm9uemVybyIgcnVsZSBpcyBhbm90aGVyCisgICAgICBjb21tb24g
d2F5IHRvIGRlZmluZSB0aGUgaW50ZXJpb3IuICBUaGUgb3RoZXIgdGhyZWUgcnVsZXMgYXJlCisg
ICAgICB1c2VmdWwgZm9yIHBvbHlnb24gQ1NHIG9wZXJhdGlvbnMgKHNlZSBiZWxvdykuCisKKyAg
ICAtIEdMVV9URVNTX0JPVU5EQVJZX09OTFkuICBWYWx1ZXM6IFRSVUUgKG5vbi16ZXJvKSBvciBG
QUxTRSAoemVybykuCisKKyAgICAgIElmIFRSVUUsIHJldHVybnMgYSBzZXQgb2YgY2xvc2VkIGNv
bnRvdXJzIHdoaWNoIHNlcGFyYXRlIHRoZQorICAgICAgcG9seWdvbiBpbnRlcmlvciBhbmQgZXh0
ZXJpb3IgKHJhdGhlciB0aGFuIGEgdGVzc2VsYXRpb24pLgorICAgICAgRXh0ZXJpb3IgY29udG91
cnMgYXJlIG9yaWVudGVkIENDVyB3aXRoIHJlc3BlY3QgdG8gdGhlIG5vcm1hbCwKKyAgICAgIGlu
dGVyaW9yIGNvbnRvdXJzIGFyZSBvcmllbnRlZCBDVy4gIFRoZSBHTFVfVEVTU19CRUdJTiBjYWxs
YmFjaworICAgICAgdXNlcyB0aGUgdHlwZSBHTF9MSU5FX0xPT1AgZm9yIGVhY2ggY29udG91ci4K
KyAgICAgIAorICAgIC0gR0xVX1RFU1NfVE9MRVJBTkNFLiAgVmFsdWU6IGEgcmVhbCBudW1iZXIg
YmV0d2VlbiAwLjAgYW5kIDEuMC4KKworICAgICAgVGhpcyBzcGVjaWZpZXMgYSB0b2xlcmFuY2Ug
Zm9yIG1lcmdpbmcgZmVhdHVyZXMgdG8gcmVkdWNlIHRoZSBzaXplCisgICAgICBvZiB0aGUgb3V0
cHV0LiAgRm9yIGV4YW1wbGUsIHR3byB2ZXJ0aWNlcyB3aGljaCBhcmUgdmVyeSBjbG9zZSB0bwor
ICAgICAgZWFjaCBvdGhlciBtaWdodCBiZSByZXBsYWNlZCBieSBhIHNpbmdsZSB2ZXJ0ZXguICBU
aGUgdG9sZXJhbmNlCisgICAgICBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBsYXJnZXN0IGNvb3JkaW5h
dGUgbWFnbml0dWRlIG9mIGFueSBpbnB1dCB2ZXJ0ZXg7CisgICAgICB0aGlzIHNwZWNpZmllcyB0
aGUgbWF4aW11bSBkaXN0YW5jZSB0aGF0IGFueSBmZWF0dXJlIGNhbiBtb3ZlIGFzIHRoZQorICAg
ICAgcmVzdWx0IG9mIGEgc2luZ2xlIG1lcmdlIG9wZXJhdGlvbi4gIElmIGEgc2luZ2xlIGZlYXR1
cmUgdGFrZXMgcGFydAorICAgICAgaW4gc2V2ZXJhbCBtZXJnZSBvcGVyYXRpb25zLCB0aGUgdG90
YWwgZGlzdGFuY2UgbW92ZWQgY291bGQgYmUgbGFyZ2VyLgorCisgICAgICBGZWF0dXJlIG1lcmdp
bmcgaXMgY29tcGxldGVseSBvcHRpb25hbDsgdGhlIHRvbGVyYW5jZSBpcyBvbmx5IGEgaGludC4K
KyAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHRvIG1lcmdlIGluIHNvbWUgY2FzZXMg
YW5kIG5vdCBpbiBvdGhlcnMsCisgICAgICBvciB0byBuZXZlciBtZXJnZSBmZWF0dXJlcyBhdCBh
bGwuICBUaGUgZGVmYXVsdCB0b2xlcmFuY2UgaXMgemVyby4KKyAgICAgIAorICAgICAgVGhlIGN1
cnJlbnQgaW1wbGVtZW50YXRpb24gbWVyZ2VzIHZlcnRpY2VzIG9ubHkgaWYgdGhleSBhcmUgZXhh
Y3RseQorICAgICAgY29pbmNpZGVudCwgcmVnYXJkbGVzcyBvZiB0aGUgY3VycmVudCB0b2xlcmFu
Y2UuICBBIHZlcnRleCBpcworICAgICAgc3BsaWNlZCBpbnRvIGFuIGVkZ2Ugb25seSBpZiB0aGUg
aW1wbGVtZW50YXRpb24gaXMgdW5hYmxlIHRvCisgICAgICBkaXN0aW5ndWlzaCB3aGljaCBzaWRl
IG9mIHRoZSBlZGdlIHRoZSB2ZXJ0ZXggbGllcyBvbi4KKyAgICAgIFR3byBlZGdlcyBhcmUgbWVy
Z2VkIG9ubHkgd2hlbiBib3RoIGVuZHBvaW50cyBhcmUgaWRlbnRpY2FsLgorCisKKyAgIHZvaWQg
Z2x1VGVzc05vcm1hbCggR0xVdGVzc2VsYXRvciAqdGVzcywKKwkJICAgICAgR0xVY29vcmQgeCwg
R0xVY29vcmQgeSwgR0xVY29vcmQgeiApCisKKyAgICAtIExldHMgdGhlIHVzZXIgc3VwcGx5IHRo
ZSBwb2x5Z29uIG5vcm1hbCwgaWYga25vd24uICBBbGwgaW5wdXQgZGF0YQorICAgICAgaXMgcHJv
amVjdGVkIGludG8gYSBwbGFuZSBwZXJwZW5kaWN1bGFyIHRvIHRoZSBub3JtYWwgYmVmb3JlCisg
ICAgICB0ZXNzZWxhdGlvbi4gIEFsbCBvdXRwdXQgdHJpYW5nbGVzIGFyZSBvcmllbnRlZCBDQ1cg
d2l0aAorICAgICAgcmVzcGVjdCB0byB0aGUgbm9ybWFsIChDVyBvcmllbnRhdGlvbiBjYW4gYmUg
b2J0YWluZWQgYnkKKyAgICAgIHJldmVyc2luZyB0aGUgc2lnbiBvZiB0aGUgc3VwcGxpZWQgbm9y
bWFsKS4gIEZvciBleGFtcGxlLCBpZgorICAgICAgeW91IGtub3cgdGhhdCBhbGwgcG9seWdvbnMg
bGllIGluIHRoZSB4LXkgcGxhbmUsIGNhbGwKKyAgICAgICJnbHVUZXNzTm9ybWFsKHRlc3MsIDAu
MCwgMC4wLCAxLjApIiBiZWZvcmUgcmVuZGVyaW5nIGFueSBwb2x5Z29ucy4KKyAgICAgIAorICAg
IC0gSWYgdGhlIHN1cHBsaWVkIG5vcm1hbCBpcyAoMCwwLDApICh0aGUgZGVmYXVsdCB2YWx1ZSks
IHRoZQorICAgICAgbm9ybWFsIGlzIGRldGVybWluZWQgYXMgZm9sbG93cy4gIFRoZSBkaXJlY3Rp
b24gb2YgdGhlIG5vcm1hbCwKKyAgICAgIHVwIHRvIGl0cyBzaWduLCBpcyBmb3VuZCBieSBmaXR0
aW5nIGEgcGxhbmUgdG8gdGhlIHZlcnRpY2VzLAorICAgICAgd2l0aG91dCByZWdhcmQgdG8gaG93
IHRoZSB2ZXJ0aWNlcyBhcmUgY29ubmVjdGVkLiAgSXQgaXMKKyAgICAgIGV4cGVjdGVkIHRoYXQg
dGhlIGlucHV0IGRhdGEgbGllcyBhcHByb3hpbWF0ZWx5IGluIHBsYW5lOworICAgICAgb3RoZXJ3
aXNlIHByb2plY3Rpb24gcGVycGVuZGljdWxhciB0byB0aGUgY29tcHV0ZWQgbm9ybWFsIG1heQor
ICAgICAgc3Vic3RhbnRpYWxseSBjaGFuZ2UgdGhlIGdlb21ldHJ5LiAgVGhlIHNpZ24gb2YgdGhl
IG5vcm1hbCBpcworICAgICAgY2hvc2VuIHNvIHRoYXQgdGhlIHN1bSBvZiB0aGUgc2lnbmVkIGFy
ZWFzIG9mIGFsbCBpbnB1dCBjb250b3VycworICAgICAgaXMgbm9uLW5lZ2F0aXZlICh3aGVyZSBh
IENDVyBjb250b3VyIGhhcyBwb3NpdGl2ZSBhcmVhKS4KKyAgICAKKyAgICAtIFRoZSBzdXBwbGll
ZCBub3JtYWwgcGVyc2lzdHMgdW50aWwgaXQgaXMgY2hhbmdlZCBieSBhbm90aGVyCisgICAgICBj
YWxsIHRvIGdsdVRlc3NOb3JtYWwuCisKKworICBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgg
dGhlIEdMVSB0ZXNzZWxhdG9yCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICBUaGUgcHJlZmVycmVkIGludGVyZmFjZSBpcyB0aGUgb25lIGRlc2Ny
aWJlZCBhYm92ZS4gIFRoZSBmb2xsb3dpbmcKKyAgcm91dGluZXMgYXJlIG9ic29sZXRlLCBhbmQg
YXJlIHByb3ZpZGVkIG9ubHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CisKKyAgICB0eXBl
ZGVmIEdMVXRlc3NlbGF0b3IgR0xVdHJpYW5ndWxhdG9yT2JqOwkvKiBvYnNvbGV0ZSBuYW1lICov
CisKKyAgICB2b2lkIGdsdUJlZ2luUG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApOworICAg
IHZvaWQgZ2x1TmV4dENvbnRvdXIoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZW51bSB0eXBlICk7
CisgICAgdm9pZCBnbHVFbmRQb2x5Z29uKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7CisgIAorICAi
dHlwZSIgaXMgb25lIG9mIEdMVV9FWFRFUklPUiwgR0xVX0lOVEVSSU9SLCBHTFVfQ0NXLCBHTFVf
Q1csIG9yCisgIEdMVV9VTktOT1dOLiAgSXQgaXMgaWdub3JlZCBieSB0aGUgY3VycmVudCBHTFUg
dGVzc2VsYXRvci4KKyAgCisgIEdMVV9CRUdJTiwgR0xVX1ZFUlRFWCwgR0xVX0VORCwgR0xVX0VS
Uk9SLCBhbmQgR0xVX0VER0VfRkxBRyBhcmUgZGVmaW5lZAorICBhcyBzeW5vbnltcyBmb3IgR0xV
X1RFU1NfQkVHSU4sIEdMVV9URVNTX1ZFUlRFWCwgR0xVX1RFU1NfRU5ELAorICBHTFVfVEVTU19F
UlJPUiwgYW5kIEdMVV9URVNTX0VER0VfRkxBRy4KKworCitQb2x5Z29uIENTRyBvcGVyYXRpb25z
CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIGZlYXR1cmVzIG9mIHRoZSB0ZXNzZWxh
dG9yIG1ha2UgaXQgZWFzeSB0byBmaW5kIHRoZSB1bmlvbiwgZGlmZmVyZW5jZSwKKyAgb3IgaW50
ZXJzZWN0aW9uIG9mIHNldmVyYWwgcG9seWdvbnMuCisKKyAgRmlyc3QsIGFzc3VtZSB0aGF0IGVh
Y2ggcG9seWdvbiBpcyBkZWZpbmVkIHNvIHRoYXQgdGhlIHdpbmRpbmcgbnVtYmVyCisgIGlzIDAg
Zm9yIGVhY2ggZXh0ZXJpb3IgcmVnaW9uLCBhbmQgMSBmb3IgZWFjaCBpbnRlcmlvciByZWdpb24u
ICBVbmRlcgorICB0aGlzIG1vZGVsLCBDQ1cgY29udG91cnMgZGVmaW5lIHRoZSBvdXRlciBib3Vu
ZGFyeSBvZiB0aGUgcG9seWdvbiwgYW5kCisgIENXIGNvbnRvdXJzIGRlZmluZSBob2xlcy4gIENv
bnRvdXJzIG1heSBiZSBuZXN0ZWQsIGJ1dCBhIG5lc3RlZAorICBjb250b3VyIG11c3QgYmUgb3Jp
ZW50ZWQgb3Bwb3NpdGVseSBmcm9tIHRoZSBjb250b3VyIHRoYXQgY29udGFpbnMgaXQuCisKKyAg
SWYgdGhlIG9yaWdpbmFsIHBvbHlnb25zIGRvIG5vdCBzYXRpc2Z5IHRoaXMgZGVzY3JpcHRpb24s
IHRoZXkgY2FuIGJlCisgIGNvbnZlcnRlZCB0byB0aGlzIGZvcm0gYnkgZmlyc3QgcnVubmluZyB0
aGUgdGVzc2VsYXRvciB3aXRoIHRoZQorICBHTFVfVEVTU19CT1VOREFSWV9PTkxZIHByb3BlcnR5
IHR1cm5lZCBvbi4gIFRoaXMgcmV0dXJucyBhIGxpc3Qgb2YKKyAgY29udG91cnMgc2F0aXNmeWlu
ZyB0aGUgcmVzdHJpY3Rpb24gYWJvdmUuICBCeSBhbGxvY2F0aW5nIHR3bworICB0ZXNzZWxhdG9y
IG9iamVjdHMsIHRoZSBjYWxsYmFja3MgZnJvbSBvbmUgdGVzc2VsYXRvciBjYW4gYmUgZmVkCisg
IGRpcmVjdGx5IHRvIHRoZSBpbnB1dCBvZiBhbm90aGVyLgorCisgIEdpdmVuIHR3byBvciBtb3Jl
IHBvbHlnb25zIG9mIHRoZSBmb3JtIGFib3ZlLCBDU0cgb3BlcmF0aW9ucyBjYW4gYmUKKyAgaW1w
bGVtZW50ZWQgYXMgZm9sbG93czoKKworICBVbmlvbgorICAgICBEcmF3IGFsbCB0aGUgaW5wdXQg
Y29udG91cnMgYXMgYSBzaW5nbGUgcG9seWdvbi4gIFRoZSB3aW5kaW5nIG51bWJlcgorICAgICBv
ZiBlYWNoIHJlc3VsdGluZyByZWdpb24gaXMgdGhlIG51bWJlciBvZiBvcmlnaW5hbCBwb2x5Z29u
cworICAgICB3aGljaCBjb3ZlciBpdC4gIFRoZSB1bmlvbiBjYW4gYmUgZXh0cmFjdGVkIHVzaW5n
IHRoZQorICAgICBHTFVfVEVTU19XSU5ESU5HX05PTlpFUk8gb3IgR0xVX1RFU1NfV0lORElOR19Q
T1NJVElWRSB3aW5kaW5nIHJ1bGVzLgorICAgICBOb3RlIHRoYXQgd2l0aCB0aGUgbm9uemVybyBy
dWxlLCB3ZSB3b3VsZCBnZXQgdGhlIHNhbWUgcmVzdWx0IGlmCisgICAgIGFsbCBjb250b3VyIG9y
aWVudGF0aW9ucyB3ZXJlIHJldmVyc2VkLgorCisgIEludGVyc2VjdGlvbiAodHdvIHBvbHlnb25z
IGF0IGEgdGltZSBvbmx5KQorICAgICBEcmF3IGEgc2luZ2xlIHBvbHlnb24gdXNpbmcgdGhlIGNv
bnRvdXJzIGZyb20gYm90aCBpbnB1dCBwb2x5Z29ucy4KKyAgICAgRXh0cmFjdCB0aGUgcmVzdWx0
IHVzaW5nIEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV08uICAoU2luY2UgdGhpcworICAgICB3
aW5kaW5nIHJ1bGUgbG9va3MgYXQgdGhlIGFic29sdXRlIHZhbHVlLCByZXZlcnNpbmcgYWxsIGNv
bnRvdXIKKyAgICAgb3JpZW50YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGUgcmVzdWx0LikKKwor
ICBEaWZmZXJlbmNlCisgIAorICAgICBTdXBwb3NlIHdlIHdhbnQgdG8gY29tcHV0ZSBBIFwgKEIg
dW5pb24gQyB1bmlvbiBEKS4gIERyYXcgYSBzaW5nbGUKKyAgICAgcG9seWdvbiBjb25zaXN0aW5n
IG9mIHRoZSB1bm1vZGlmaWVkIGNvbnRvdXJzIGZyb20gQSwgZm9sbG93ZWQgYnkKKyAgICAgdGhl
IGNvbnRvdXJzIG9mIEIsQyxEIHdpdGggdGhlIHZlcnRleCBvcmRlciByZXZlcnNlZCAodGhpcyBj
aGFuZ2VzCisgICAgIHRoZSB3aW5kaW5nIG51bWJlciBvZiB0aGUgaW50ZXJpb3IgcmVnaW9ucyB0
byAtMSkuICBUbyBleHRyYWN0IHRoZQorICAgICByZXN1bHQsIHVzZSB0aGUgR0xVX1RFU1NfV0lO
RElOR19QT1NJVElWRSBydWxlLgorICAgCisgICAgIElmIEIsQyxEIGFyZSB0aGUgcmVzdWx0IG9m
IGEgR0xVX1RFU1NfQk9VTkRBUllfT05MWSBjYWxsLCBhbgorICAgICBhbHRlcm5hdGl2ZSB0byBy
ZXZlcnNpbmcgdGhlIHZlcnRleCBvcmRlciBpcyB0byByZXZlcnNlIHRoZSBzaWduIG9mCisgICAg
IHRoZSBzdXBwbGllZCBub3JtYWwuICBGb3IgZXhhbXBsZSBpbiB0aGUgeC15IHBsYW5lLCBjYWxs
CisgICAgIGdsdVRlc3NOb3JtYWwoIHRlc3MsIDAuMCwgMC4wLCAtMS4wICkuCisgCisKK1BlcmZv
cm1hbmNlCistLS0tLS0tLS0tLQorCisgIFRoZSB0ZXNzZWxhdG9yIGlzIG5vdCBpbnRlbmRlZCBm
b3IgaW1tZWRpYXRlLW1vZGUgcmVuZGVyaW5nOyB3aGVuCisgIHBvc3NpYmxlIHRoZSBvdXRwdXQg
c2hvdWxkIGJlIGNhY2hlZCBpbiBhIHVzZXIgc3RydWN0dXJlIG9yIGRpc3BsYXkKKyAgbGlzdC4g
IEdlbmVyYWwgcG9seWdvbiB0ZXNzZWxhdGlvbiBpcyBhbiBpbmhlcmVudGx5IGRpZmZpY3VsdCBw
cm9ibGVtLAorICBlc3BlY2lhbGx5IGdpdmVuIHRoZSBnb2FsIG9mIGV4dHJlbWUgcm9idXN0bmVz
cy4KKworICBUaGUgaW1wbGVtZW50YXRpb24gbWFrZXMgYW4gZWZmb3J0IHRvIG91dHB1dCBhIHNt
YWxsIG51bWJlciBvZiBmYW5zCisgIGFuZCBzdHJpcHM7IHRoaXMgc2hvdWxkIGltcHJvdmUgdGhl
IHJlbmRlcmluZyBwZXJmb3JtYW5jZSB3aGVuIHRoZQorICBvdXRwdXQgaXMgdXNlZCBpbiBhIGRp
c3BsYXkgbGlzdC4KKworICBTaW5nbGUtY29udG91ciBpbnB1dCBwb2x5Z29ucyBhcmUgZmlyc3Qg
dGVzdGVkIHRvIHNlZSB3aGV0aGVyIHRoZXkgY2FuCisgIGJlIHJlbmRlcmVkIGFzIGEgdHJpYW5n
bGUgZmFuIHdpdGggcmVzcGVjdCB0byB0aGUgZmlyc3QgdmVydGV4ICh0bworICBhdm9pZCBydW5u
aW5nIHRoZSBmdWxsIGRlY29tcG9zaXRpb24gYWxnb3JpdGhtIG9uIGNvbnZleCBwb2x5Z29ucyku
CisgIE5vbi1jb252ZXggcG9seWdvbnMgbWF5IGJlIHJlbmRlcmVkIGJ5IHRoaXMgImZhc3QgcGF0
aCIgYXMgd2VsbCwgaWYKKyAgdGhlIGFsZ29yaXRobSBnZXRzIGx1Y2t5IGluIGl0cyBjaG9pY2Ug
b2YgYSBzdGFydGluZyB2ZXJ0ZXguCisKKyAgRm9yIGJlc3QgcGVyZm9ybWFuY2UgZm9sbG93IHRo
ZXNlIGd1aWRlbGluZXM6CisKKyAgIC0gc3VwcGx5IHRoZSBwb2x5Z29uIG5vcm1hbCwgaWYgYXZh
aWxhYmxlLCB1c2luZyBnbHVUZXNzTm9ybWFsKCkuCisgICAgIFRoaXMgcmVwcmVzZW50cyBhYm91
dCAxMCUgb2YgdGhlIGNvbXB1dGF0aW9uIHRpbWUuICBGb3IgZXhhbXBsZSwKKyAgICAgaWYgYWxs
IHBvbHlnb25zIGxpZSBpbiB0aGUgeC15IHBsYW5lLCB1c2UgZ2x1VGVzc05vcm1hbCh0ZXNzLDAs
MCwxKS4KKworICAgLSByZW5kZXIgbWFueSBwb2x5Z29ucyB1c2luZyB0aGUgc2FtZSB0ZXNzZWxh
dG9yIG9iamVjdCwgcmF0aGVyIHRoYW4KKyAgICAgYWxsb2NhdGluZyBhIG5ldyB0ZXNzZWxhdG9y
IGZvciBlYWNoIG9uZS4gIChJbiBhIG11bHRpLXRocmVhZGVkLAorICAgICBtdWx0aS1wcm9jZXNz
b3IgZW52aXJvbm1lbnQgeW91IG1heSBnZXQgYmV0dGVyIHBlcmZvcm1hbmNlIHVzaW5nCisgICAg
IHNldmVyYWwgdGVzc2VsYXRvcnMuKQorCisKK0NvbXBhcmlzb24gd2l0aCB0aGUgR0xVIHRlc3Nl
bGF0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBPbiBwb2x5Z29u
cyB3aGljaCBtYWtlIGl0IHRocm91Z2ggdGhlICJmYXN0IHBhdGgiLCB0aGUgdGVzc2VsYXRvciBp
cworICAzIHRvIDUgdGltZXMgZmFzdGVyIHRoYW4gdGhlIEdMVSB0ZXNzZWxhdG9yLgorCisgIE9u
IHBvbHlnb25zIHdoaWNoIGRvbid0IG1ha2UgaXQgdGhyb3VnaCB0aGUgZmFzdCBwYXRoIChidXQg
d2hpY2ggZG9uJ3QKKyAgaGF2ZSBzZWxmLWludGVyc2VjdGlvbnMgb3IgZGVnZW5lcmFjaWVzKSwg
aXQgaXMgYWJvdXQgMiB0aW1lcyBzbG93ZXIuCisKKyAgT24gcG9seWdvbnMgd2l0aCBzZWxmLWlu
dGVyc2VjdGlvbnMgb3IgZGVnZW5lcmFjZXMsIHRoZXJlIGlzIG5vdGhpbmcKKyAgdG8gY29tcGFy
ZSBhZ2FpbnN0LgorCisgIFRoZSBuZXcgdGVzc2VsYXRvciBnZW5lcmF0ZXMgbWFueSBtb3JlIGZh
bnMgYW5kIHN0cmlwcywgcmVkdWNpbmcgdGhlCisgIG51bWJlciBvZiB2ZXJ0aWNlcyB0aGF0IG5l
ZWQgdG8gYmUgc2VudCB0byB0aGUgaGFyZHdhcmUuCisKKyAgS2V5IHRvIHRoZSBzdGF0aXN0aWNz
OgorCisJdmVydAkJbnVtYmVyIG9mIGlucHV0IHZlcnRpY2VzIG9uIGFsbCBjb250b3VycworCWNu
dHIJCW51bWJlciBvZiBpbnB1dCBjb250b3VycworCXRyaQkJbnVtYmVyIG9mIHRyaWFuZ2xlcyBp
biBhbGwgb3V0cHV0IHByaW1pdGl2ZXMKKwlzdHJpcAkJbnVtYmVyIG9mIHRyaWFuZ2xlIHN0cmlw
cworCWZhbgkJbnVtYmVyIG9mIHRyaWFuZ2xlIGZhbnMKKwlpbmQJCW51bWJlciBvZiBpbmRlcGVu
ZGVudCB0cmlhbmdsZXMKKwltcwkJbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmb3IgdGVzc2VsYXRp
b24KKwkJCShvbiBhIDE1ME1IeiBSNDQwMCBJbmR5KQorCisgIENvbnZleCBwb2x5Z29uIGV4YW1w
bGVzOgorCitOZXc6ICAgICAzIHZlcnQsICAgMSBjbnRyLCAgICAgMSB0cmksICAgMCBzdHJpcCwg
ICAwIGZhbiwgICAgIDEgaW5kLCAgMC4wNDU5IG1zCitPbGQ6ICAgICAzIHZlcnQsICAgMSBjbnRy
LCAgICAgMSB0cmksICAgMCBzdHJpcCwgICAwIGZhbiwgICAgIDEgaW5kLCAgIDAuMTQ5IG1zCitO
ZXc6ICAgICA0IHZlcnQsICAgMSBjbnRyLCAgICAgMiB0cmksICAgMCBzdHJpcCwgICAxIGZhbiwg
ICAgIDAgaW5kLCAgMC4wNDU5IG1zCitPbGQ6ICAgICA0IHZlcnQsICAgMSBjbnRyLCAgICAgMiB0
cmksICAgMCBzdHJpcCwgICAwIGZhbiwgICAgIDIgaW5kLCAgIDAuMTYxIG1zCitOZXc6ICAgIDM2
IHZlcnQsICAgMSBjbnRyLCAgICAzNCB0cmksICAgMCBzdHJpcCwgICAxIGZhbiwgICAgIDAgaW5k
LCAgIDAuMTUzIG1zCitPbGQ6ICAgIDM2IHZlcnQsICAgMSBjbnRyLCAgICAzNCB0cmksICAgMCBz
dHJpcCwgICAwIGZhbiwgICAgMzQgaW5kLCAgIDAuNjIxIG1zCisKKyAgQ29uY2F2ZSBzaW5nbGUt
Y29udG91ciBwb2x5Z29uczoKKworTmV3OiAgICAgNSB2ZXJ0LCAgIDEgY250ciwgICAgIDMgdHJp
LCAgIDAgc3RyaXAsICAgMSBmYW4sICAgICAwIGluZCwgICAwLjA1MiBtcworT2xkOiAgICAgNSB2
ZXJ0LCAgIDEgY250ciwgICAgIDMgdHJpLCAgIDAgc3RyaXAsICAgMCBmYW4sICAgICAzIGluZCwg
ICAwLjI1MiBtcworTmV3OiAgICAxOSB2ZXJ0LCAgIDEgY250ciwgICAgMTcgdHJpLCAgIDIgc3Ry
aXAsICAgMiBmYW4sICAgICAxIGluZCwgICAwLjkxMSBtcworT2xkOiAgICAxOSB2ZXJ0LCAgIDEg
Y250ciwgICAgMTcgdHJpLCAgIDAgc3RyaXAsICAgMCBmYW4sICAgIDE3IGluZCwgICAwLjUyOSBt
cworTmV3OiAgIDE1MSB2ZXJ0LCAgIDEgY250ciwgICAxNDkgdHJpLCAgMTMgc3RyaXAsICAxOCBm
YW4sICAgICAzIGluZCwgICAgNi44MiBtcworT2xkOiAgIDE1MSB2ZXJ0LCAgIDEgY250ciwgICAx
NDkgdHJpLCAgIDAgc3RyaXAsICAgMyBmYW4sICAgMTQzIGluZCwgICAgIDIuNyBtcworTmV3OiAg
IDU3NCB2ZXJ0LCAgIDEgY250ciwgICA1NzIgdHJpLCAgNTkgc3RyaXAsICA1NCBmYW4sICAgIDEx
IGluZCwgICAgMjYuNiBtcworT2xkOiAgIDU3NCB2ZXJ0LCAgIDEgY250ciwgICA1NzIgdHJpLCAg
IDAgc3RyaXAsICAzMSBmYW4sICAgNDk5IGluZCwgICAgMTIuNCBtcworCisgIE11bHRpcGxlIGNv
bnRvdXJzLCBidXQgbm8gaW50ZXJzZWN0aW9uczoKKworTmV3OiAgICAgNyB2ZXJ0LCAgIDIgY250
ciwgICAgIDcgdHJpLCAgIDEgc3RyaXAsICAgMCBmYW4sICAgICAwIGluZCwgICAwLjUyNyBtcwor
T2xkOiAgICAgNyB2ZXJ0LCAgIDIgY250ciwgICAgIDcgdHJpLCAgIDAgc3RyaXAsICAgMCBmYW4s
ICAgICA3IGluZCwgICAwLjI3NCBtcworTmV3OiAgICA4MSB2ZXJ0LCAgIDYgY250ciwgICAgODkg
dHJpLCAgIDkgc3RyaXAsICAgNyBmYW4sICAgICA2IGluZCwgICAgMy44OCBtcworT2xkOiAgICA4
MSB2ZXJ0LCAgIDYgY250ciwgICAgODkgdHJpLCAgIDAgc3RyaXAsICAxMyBmYW4sICAgIDYxIGlu
ZCwgICAgIDIuMiBtcworTmV3OiAgIDM5MSB2ZXJ0LCAgMTkgY250ciwgICA0MTMgdHJpLCAgMzcg
c3RyaXAsICAzMiBmYW4sICAgIDI2IGluZCwgICAgMjAuMiBtcworT2xkOiAgIDM5MSB2ZXJ0LCAg
MTkgY250ciwgICA0MTMgdHJpLCAgIDAgc3RyaXAsICAyNSBmYW4sICAgMzYzIGluZCwgICAgOC42
OCBtcworCisgIFNlbGYtaW50ZXJzZWN0aW5nIGFuZCBkZWdlbmVyYXRlIGV4YW1wbGVzOgorCitC
b3d0aWU6ICA0IHZlcnQsICAgMSBjbnRyLCAgICAgMiB0cmksICAgMCBzdHJpcCwgICAwIGZhbiwg
ICAgIDIgaW5kLCAgIDAuNDgzIG1zCitTdGFyOiAgICA1IHZlcnQsICAgMSBjbnRyLCAgICAgNSB0
cmksICAgMCBzdHJpcCwgICAwIGZhbiwgICAgIDUgaW5kLCAgICAwLjkxIG1zCitSYW5kb206IDI0
IHZlcnQsICAgNyBjbnRyLCAgICA0NiB0cmksICAgMiBzdHJpcCwgIDEyIGZhbiwgICAgIDcgaW5k
LCAgICA1LjMyIG1zCitGb250OiAgMzMzIHZlcnQsICAgMiBjbnRyLCAgIDMzMSB0cmksICAzMiBz
dHJpcCwgIDE2IGZhbiwgICAgIDMgaW5kLCAgICAxNC4xIG1zCis6ICAgICAgMTY3IHZlcnQsICAz
NSBjbnRyLCAgIDI1NCB0cmksICAgOCBzdHJpcCwgIDU2IGZhbiwgICAgNTIgaW5kLCAgICA0Ni4z
IG1zCis6ICAgICAgIDc4IHZlcnQsICAgMSBjbnRyLCAgMjY3NSB0cmksIDE0OCBzdHJpcCwgMjA3
IGZhbiwgICAxODAgaW5kLCAgICAgMjQzIG1zCis6ICAgIDEyNDgwIHZlcnQsICAgMiBjbnRyLCAx
MjQ3OCB0cmksIDczNiBzdHJpcCwxMjc1IGZhbiwgICAgIDUgaW5kLCAgICAxMDEwIG1zCkluZGV4
OiBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL2FsZy1vdXRsaW5lCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvYWxnLW91dGxpbmUJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL2FsZy1vdXRsaW5lCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIyOSBAQAorLyoKKyoqICRIZWFkZXI6IC9jdnMvcHJvamVjdHMvb2dsLXNhbXBs
ZS9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvYWxnLW91dGxpbmUsdiAxLjEgMjAwMC8wNC8yNiAw
NTo1Mzo1OSBsanAgRXhwICQKKyovCisKK1RoaXMgaXMgb25seSBhIHZlcnkgYnJpZWYgb3ZlcnZp
ZXcuICBUaGVyZSBpcyBxdWl0ZSBhIGJpdCBvZgorYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIGlu
IHRoZSBzb3VyY2UgY29kZSBpdHNlbGYuCisKKworR29hbHMgb2Ygcm9idXN0IHRlc3NlbGF0aW9u
CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHRlc3NlbGF0aW9uIGFsZ29yaXRo
bSBpcyBmdW5kYW1lbnRhbGx5IGEgMkQgYWxnb3JpdGhtLiAgV2UKK2luaXRpYWxseSBwcm9qZWN0
IGFsbCBkYXRhIGludG8gYSBwbGFuZTsgb3VyIGdvYWwgaXMgdG8gcm9idXN0bHkKK3Rlc3NlbGF0
ZSB0aGUgcHJvamVjdGVkIGRhdGEuICBUaGUgc2FtZSB0b3BvbG9naWNhbCB0ZXNzZWxhdGlvbiBp
cwordGhlbiBhcHBsaWVkIHRvIHRoZSBpbnB1dCBkYXRhLgorCitUb3BvbG9naWNhbGx5LCB0aGUg
b3V0cHV0IHNob3VsZCBhbHdheXMgYmUgYSB0ZXNzZWxhdGlvbi4gIElmIHRoZQoraW5wdXQgaXMg
ZXZlbiBzbGlnaHRseSBub24tcGxhbmFyLCB0aGVuIHNvbWUgdHJpYW5nbGVzIHdpbGwKK25lY2Vz
c2FyaWx5IGJlIGJhY2stZmFjaW5nIHdoZW4gdmlld2VkIGZyb20gc29tZSBhbmdsZXMsIGJ1dCB0
aGUgZ29hbAoraXMgdG8gbWluaW1pemUgdGhpcyBlZmZlY3QuCisKK1RoZSBhbGdvcml0aG0gbmVl
ZHMgc29tZSBjYXBhYmlsaXR5IG9mIGNsZWFuaW5nIHVwIHRoZSBpbnB1dCBkYXRhIGFzCit3ZWxs
IGFzIHRoZSBudW1lcmljYWwgZXJyb3JzIGluIGl0cyBvd24gY2FsY3VsYXRpb25zLiAgT25lIHdh
eSB0byBkbwordGhpcyBpcyB0byBzcGVjaWZ5IGEgdG9sZXJhbmNlIGFzIGRlZmluZWQgYWJvdmUs
IGFuZCBjbGVhbiB1cCB0aGUKK2lucHV0IGFuZCBvdXRwdXQgZHVyaW5nIHRoZSBsaW5lIHN3ZWVw
IHByb2Nlc3MuICBBdCB0aGUgdmVyeSBsZWFzdCwKK3RoZSBhbGdvcml0aG0gbXVzdCBoYW5kbGUg
Y29pbmNpZGVudCB2ZXJ0aWNlcywgdmVydGljZXMgaW5jaWRlbnQgdG8gYW4KK2VkZ2UsIGFuZCBj
b2luY2lkZW50IGVkZ2VzLgorCisKK1BoYXNlcyBvZiB0aGUgYWxnb3JpdGhtCistLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisxLiBGaW5kIHRoZSBwb2x5Z29uIG5vcm1hbCBOLgorMi4gUHJvamVj
dCB0aGUgdmVydGV4IGRhdGEgb250byBhIHBsYW5lLiAgSXQgZG9lcyBub3QgbmVlZCB0byBiZQor
ICAgcGVycGVuZGljdWxhciB0byB0aGUgbm9ybWFsLCBlZy4gd2UgY2FuIHByb2plY3Qgb250byB0
aGUgcGxhbmUKKyAgIHBlcnBlbmRpY3VsYXIgdG8gdGhlIGNvb3JkaW5hdGUgYXhpcyB3aG9zZSBk
b3QgcHJvZHVjdCB3aXRoIE4KKyAgIGlzIGxhcmdlc3QuCiszLiBVc2luZyBhIGxpbmUtc3dlZXAg
YWxnb3JpdGhtLCBwYXJ0aXRpb24gdGhlIHBsYW5lIGludG8geC1tb25vdG9uZQorICAgcmVnaW9u
cy4gIEFueSB2ZXJ0aWNhbCBsaW5lIGludGVyc2VjdHMgYW4geC1tb25vdG9uZSByZWdpb24gaW4K
KyAgIGF0IG1vc3Qgb25lIGludGVydmFsLgorNC4gVHJpYW5ndWxhdGUgdGhlIHgtbW9ub3RvbmUg
cmVnaW9ucy4KKzUuIEdyb3VwIHRoZSB0cmlhbmdsZXMgaW50byBzdHJpcHMgYW5kIGZhbnMuCisK
KworRmluZGluZyB0aGUgbm9ybWFsIHZlY3RvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CitBIGNvbW1vbiB3YXkgdG8gZmluZCBhIHBvbHlnb24gbm9ybWFsIGlzIHRvIGNvbXB1dGUgdGhl
IHNpZ25lZCBhcmVhCit3aGVuIHRoZSBwb2x5Z29uIGlzIHByb2plY3RlZCBhbG9uZyB0aGUgdGhy
ZWUgY29vcmRpbmF0ZSBheGVzLiAgV2UKK2Nhbid0IGRvIHRoaXMsIHNpbmNlIGNvbnRvdXJzIGNh
biBoYXZlIHplcm8gYXJlYSB3aXRob3V0IGJlaW5nCitkZWdlbmVyYXRlIChlZy4gYSBib3d0aWUp
LgorCitXZSBmaXQgYSBwbGFuZSB0byB0aGUgdmVydGV4IGRhdGEsIGlnbm9yaW5nIGhvdyB0aGV5
IGFyZSBjb25uZWN0ZWQKK2ludG8gY29udG91cnMuICBJZGVhbGx5IHRoaXMgd291bGQgYmUgYSBs
ZWFzdC1zcXVhcmVzIGZpdDsgaG93ZXZlciBmb3IKK291ciBwdXJwb3NlIHRoZSBhY2N1cmFjeSBv
ZiB0aGUgbm9ybWFsIGlzIG5vdCBpbXBvcnRhbnQuICBJbnN0ZWFkIHdlCitmaW5kIHRocmVlIHZl
cnRpY2VzIHdoaWNoIGFyZSB3aWRlbHkgc2VwYXJhdGVkLCBhbmQgY29tcHV0ZSB0aGUgbm9ybWFs
Cit0byB0aGUgdHJpYW5nbGUgdGhleSBmb3JtLiAgVGhlIHZlcnRpY2VzIGFyZSBjaG9zZW4gc28g
dGhhdCB0aGUKK3RyaWFuZ2xlIGhhcyBhbiBhcmVhIGF0IGxlYXN0IDEvc3FydCgzKSB0aW1lcyB0
aGUgbGFyZ2VzdCBhcmVhIG9mIGFueQordHJpYW5nbGUgZm9ybWVkIHVzaW5nIHRoZSBpbnB1dCB2
ZXJ0aWNlcy4gIAorCitUaGUgY29udG91cnMgZG8gYWZmZWN0IHRoZSBvcmllbnRhdGlvbiBvZiB0
aGUgbm9ybWFsOyBhZnRlciBjb21wdXRpbmcKK3RoZSBub3JtYWwsIHdlIGNoZWNrIHRoYXQgdGhl
IHN1bSBvZiB0aGUgc2lnbmVkIGNvbnRvdXIgYXJlYXMgaXMKK25vbi1uZWdhdGl2ZSwgYW5kIHJl
dmVyc2UgdGhlIG5vcm1hbCBpZiBuZWNlc3NhcnkuCisKKworUHJvamVjdGluZyB0aGUgdmVydGlj
ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIHByb2plY3QgdGhlIHZlcnRpY2VzIG9u
dG8gYSBwbGFuZSBwZXJwZW5kaWN1bGFyIHRvIG9uZSBvZiB0aGUgdGhyZWUKK2Nvb3JkaW5hdGUg
YXhlcy4gIFRoaXMgaGVscHMgbnVtZXJpY2FsIGFjY3VyYWN5IGJ5IHJlbW92aW5nIGEKK3RyYW5z
Zm9ybWF0aW9uIHN0ZXAgYmV0d2VlbiB0aGUgb3JpZ2luYWwgaW5wdXQgZGF0YSBhbmQgdGhlIGRh
dGEKK3Byb2Nlc3NlZCBieSB0aGUgYWxnb3JpdGhtLiAgVGhlIHByb2plY3Rpb24gYWxzbyBjb21w
cmVzc2VzIHRoZSBpbnB1dAorZGF0YTsgdGhlIDJEIGRpc3RhbmNlIGJldHdlZW4gdmVydGljZXMg
YWZ0ZXIgcHJvamVjdGlvbiBtYXkgYmUgc21hbGxlcgordGhhbiB0aGUgb3JpZ2luYWwgMkQgZGlz
dGFuY2UuICBIb3dldmVyIGJ5IGNob29zaW5nIHRoZSBjb29yZGluYXRlCitheGlzIHdob3NlIGRv
dCBwcm9kdWN0IHdpdGggdGhlIG5vcm1hbCBpcyBncmVhdGVzdCwgdGhlIGNvbXByZXNzaW9uCitm
YWN0b3IgaXMgYXQgbW9zdCAxL3NxcnQoMykuCisKK0V2ZW4gdGhvdWdoIHRoZSAqYWNjdXJhY3kq
IG9mIHRoZSBub3JtYWwgaXMgbm90IHRoYXQgaW1wb3J0YW50IChzaW5jZQord2UgYXJlIHByb2pl
Y3RpbmcgcGVycGVuZGljdWxhciB0byBhIGNvb3JkaW5hdGUgYXhpcyBhbnl3YXkpLCB0aGUKKypy
b2J1c3RuZXNzKiBvZiB0aGUgY29tcHV0YXRpb24gaXMgaW1wb3J0YW50LiAgRm9yIGV4YW1wbGUs
IGlmIHRoZXJlCithcmUgbWFueSB2ZXJ0aWNlcyB3aGljaCBsaWUgYWxtb3N0IGFsb25nIGEgbGlu
ZSwgYW5kIG9uZSB2ZXJ0ZXggVgord2hpY2ggaXMgd2VsbC1zZXBhcmF0ZWQgZnJvbSB0aGUgbGlu
ZSwgdGhlbiBvdXIgbm9ybWFsIGNvbXB1dGF0aW9uCitzaG91bGQgaW52b2x2ZSBWIG90aGVyd2lz
ZSB0aGUgcmVzdWx0cyB3aWxsIGJlIGdhcmJhZ2UuCisKK1RoZSBhZHZhbnRhZ2Ugb2YgcHJvamVj
dGluZyBwZXJwZW5kaWN1bGFyIHRvIHRoZSBwb2x5Z29uIG5vcm1hbCBpcwordGhhdCBjb21wdXRl
ZCBpbnRlcnNlY3Rpb24gcG9pbnRzIHdpbGwgYmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8KK3Ro
ZWlyIGlkZWFsIGxvY2F0aW9ucy4gIFRvIGdldCB0aGlzIGJlaGF2aW9yLCBkZWZpbmUgVFJVRV9Q
Uk9KRUNULgorCisKK1RoZSBMaW5lIFN3ZWVwCistLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUg
dGhyZWUgZGF0YSBzdHJ1Y3R1cmVzOiB0aGUgbWVzaCwgdGhlIGV2ZW50IHF1ZXVlLCBhbmQgdGhl
CitlZGdlIGRpY3Rpb25hcnkuCisKK1RoZSBtZXNoIGlzIGEgInF1YWQtZWRnZSIgZGF0YSBzdHJ1
Y3R1cmUgd2hpY2ggcmVjb3JkcyB0aGUgdG9wb2xvZ3kgb2YKK3RoZSBjdXJyZW50IGRlY29tcG9z
aXRpb247IGZvciBkZXRhaWxzIHNlZSB0aGUgaW5jbHVkZSBmaWxlICJtZXNoLmgiLgorCitUaGUg
ZXZlbnQgcXVldWUgc2ltcGx5IGhvbGRzIGFsbCB2ZXJ0aWNlcyAoYm90aCBvcmlnaW5hbCBhbmQg
Y29tcHV0ZWQKK29uZXMpLCBvcmdhbml6ZWQgc28gdGhhdCB3ZSBjYW4gcXVpY2tseSBleHRyYWN0
IHRoZSB2ZXJ0ZXggd2l0aCB0aGUKK21pbmltdW0geC1jb29yZCAoYW5kIGFtb25nIHRob3NlLCB0
aGUgb25lIHdpdGggdGhlIG1pbmltdW0geS1jb29yZCkuCisKK1RoZSBlZGdlIGRpY3Rpb25hcnkg
ZGVzY3JpYmVzIHRoZSBjdXJyZW50IGludGVyc2VjdGlvbiBvZiB0aGUgc3dlZXAKK2xpbmUgd2l0
aCB0aGUgcmVnaW9ucyBvZiB0aGUgcG9seWdvbi4gIFRoaXMgaXMganVzdCBhbiBvcmRlcmluZyBv
ZiB0aGUKK2VkZ2VzIHdoaWNoIGludGVyc2VjdCB0aGUgc3dlZXAgbGluZSwgc29ydGVkIGJ5IHRo
ZWlyIGN1cnJlbnQgb3JkZXIgb2YKK2ludGVyc2VjdGlvbi4gIEZvciBlYWNoIHBhaXIgb2YgZWRn
ZXMsIHdlIHN0b3JlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBtb25vdG9uZSByZWdpb24g
YmV0d2VlbiB0aGVtIC0tIHRoZXNlIGFyZSBjYWxsICJhY3RpdmUgcmVnaW9ucyIKKyhzaW5jZSB0
aGV5IGFyZSBjcm9zc2VkIGJ5IHRoZSBjdXJyZW50IHN3ZWVwIGxpbmUpLgorCitUaGUgYmFzaWMg
YWxnb3JpdGhtIGlzIHRvIHN3ZWVwIGZyb20gbGVmdCB0byByaWdodCwgcHJvY2Vzc2luZyBlYWNo
Cit2ZXJ0ZXguICBUaGUgcHJvY2Vzc2VkIHBvcnRpb24gb2YgdGhlIG1lc2ggKGxlZnQgb2YgdGhl
IHN3ZWVwIGxpbmUpIGlzCithIHBsYW5hciBkZWNvbXBvc2l0aW9uLiAgQXMgd2UgY3Jvc3MgZWFj
aCB2ZXJ0ZXgsIHdlIHVwZGF0ZSB0aGUgbWVzaAorYW5kIHRoZSBlZGdlIGRpY3Rpb25hcnksIHRo
ZW4gd2UgY2hlY2sgYW55IG5ld2x5IGFkamFjZW50IHBhaXJzIG9mCitlZGdlcyB0byBzZWUgaWYg
dGhleSBpbnRlcnNlY3QuCisKK0EgdmVydGV4IGNhbiBoYXZlIGFueSBudW1iZXIgb2YgZWRnZXMu
ICBWZXJ0aWNlcyB3aXRoIG1hbnkgZWRnZXMgY2FuCitiZSBjcmVhdGVkIGFzIHZlcnRpY2VzIGFy
ZSBtZXJnZWQgYW5kIGludGVyc2VjdGlvbiBwb2ludHMgYXJlCitjb21wdXRlZC4gIEZvciB1bnBy
b2Nlc3NlZCB2ZXJ0aWNlcyAocmlnaHQgb2YgdGhlIHN3ZWVwIGxpbmUpLCB0aGVzZQorZWRnZXMg
YXJlIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIgYXJvdW5kIHRoZSB2ZXJ0ZXg7IGZvciBwcm9jZXNz
ZWQKK3ZlcnRpY2VzLCB0aGUgdG9wb2xvZ2ljYWwgb3JkZXJpbmcgc2hvdWxkIG1hdGNoIHRoZSBn
ZW9tZXRyaWMgb3JkZXJpbmcuCisKK1RoZSB2ZXJ0ZXggcHJvY2Vzc2luZyBoYXBwZW5zIGluIHR3
byBwaGFzZXM6IGZpcnN0IHdlIHByb2Nlc3MgYXJlIHRoZQorbGVmdC1nb2luZyBlZGdlcyAoYWxs
IHRoZXNlIGVkZ2VzIGFyZSBjdXJyZW50bHkgaW4gdGhlIGVkZ2UKK2RpY3Rpb25hcnkpLiAgVGhp
cyBpbnZvbHZlczoKKworIC0gZGVsZXRpbmcgdGhlIGxlZnQtZ29pbmcgZWRnZXMgZnJvbSB0aGUg
ZGljdGlvbmFyeTsKKyAtIHJlbGlua2luZyB0aGUgbWVzaCBpZiBuZWNlc3NhcnksIHNvIHRoYXQg
dGhlIG9yZGVyIG9mIHRoZXNlIGVkZ2VzIGFyb3VuZAorICAgdGhlIGV2ZW50IHZlcnRleCBtYXRj
aGVzIHRoZSBvcmRlciBpbiB0aGUgZGljdGlvbmFyeTsKKyAtIG1hcmtpbmcgYW55IHRlcm1pbmF0
ZWQgcmVnaW9ucyAocmVnaW9ucyB3aGljaCBsaWUgYmV0d2VlbiB0d28gbGVmdC1nb2luZworICAg
ZWRnZXMpIGFzIGVpdGhlciAiaW5zaWRlIiBvciAib3V0c2lkZSIgYWNjb3JkaW5nIHRvIHRoZWly
IHdpbmRpbmcgbnVtYmVyLgorCitXaGVuIHRoZXJlIGFyZSBubyBsZWZ0LWdvaW5nIGVkZ2VzLCBh
bmQgdGhlIGV2ZW50IHZlcnRleCBpcyBpbiBhbgorImludGVyaW9yIiByZWdpb24sIHdlIG5lZWQg
dG8gYWRkIGFuIGVkZ2UgKHRvIHNwbGl0IHRoZSByZWdpb24gaW50bworbW9ub3RvbmUgcGllY2Vz
KS4gIFRvIGRvIHRoaXMgd2Ugc2ltcGx5IGpvaW4gdGhlIGV2ZW50IHZlcnRleCB0byB0aGUKK3Jp
Z2h0bW9zdCBsZWZ0IGVuZHBvaW50IG9mIHRoZSB1cHBlciBvciBsb3dlciBlZGdlIG9mIHRoZSBj
b250YWluaW5nCityZWdpb24uCisKK1RoZW4gd2UgcHJvY2VzcyB0aGUgcmlnaHQtZ29pbmcgZWRn
ZXMuICBUaGlzIGludm9sdmVzOgorCisgLSBpbnNlcnRpbmcgdGhlIGVkZ2VzIGluIHRoZSBlZGdl
IGRpY3Rpb25hcnk7CisgLSBjb21wdXRpbmcgdGhlIHdpbmRpbmcgbnVtYmVyIG9mIGFueSBuZXds
eSBjcmVhdGVkIGFjdGl2ZSByZWdpb25zLgorICAgV2UgY2FuIGNvbXB1dGUgdGhpcyBpbmNyZW1l
bnRhbGx5IHVzaW5nIHRoZSB3aW5kaW5nIG9mIGVhY2ggZWRnZQorICAgdGhhdCB3ZSBjcm9zcyBh
cyB3ZSB3YWxrIHRocm91Z2ggdGhlIGRpY3Rpb25hcnkuCisgLSByZWxpbmtpbmcgdGhlIG1lc2gg
aWYgbmVjZXNzYXJ5LCBzbyB0aGF0IHRoZSBvcmRlciBvZiB0aGVzZSBlZGdlcyBhcm91bmQKKyAg
IHRoZSBldmVudCB2ZXJ0ZXggbWF0Y2hlcyB0aGUgb3JkZXIgaW4gdGhlIGRpY3Rpb25hcnk7Cisg
LSBjaGVja2luZyBhbnkgbmV3bHkgYWRqYWNlbnQgZWRnZXMgZm9yIGludGVyc2VjdGlvbiBhbmQv
b3IgbWVyZ2luZy4KKworSWYgdGhlcmUgYXJlIG5vIHJpZ2h0LWdvaW5nIGVkZ2VzLCBhZ2FpbiB3
ZSBuZWVkIHRvIGFkZCBvbmUgdG8gc3BsaXQKK3RoZSBjb250YWluaW5nIHJlZ2lvbiBpbnRvIG1v
bm90b25lIHBpZWNlcy4gIEluIG91ciBjYXNlIGl0IGlzIG1vc3QKK2NvbnZlbmllbnQgdG8gYWRk
IGFuIGVkZ2UgdG8gdGhlIGxlZnRtb3N0IHJpZ2h0IGVuZHBvaW50IG9mIGVpdGhlcgorY29udGFp
bmluZyBlZGdlOyBob3dldmVyIHdlIG1heSBuZWVkIHRvIGNoYW5nZSB0aGlzIGxhdGVyIChzZWUg
dGhlCitjb2RlIGZvciBkZXRhaWxzKS4KKworCitJbnZhcmlhbnRzCistLS0tLS0tLS0tCisKK1Ro
ZXNlIGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQgaW52YXJpYW50cyBtYWludGFpbmVkIGR1cmluZyB0
aGUgc3dlZXAuCitXZSBkZWZpbmUgYSBmdW5jdGlvbiBWZXJ0TGVxKHYxLHYyKSB3aGljaCBkZWZp
bmVzIHRoZSBvcmRlciBpbiB3aGljaAordmVydGljZXMgY3Jvc3MgdGhlIHN3ZWVwIGxpbmUsIGFu
ZCBhIGZ1bmN0aW9uIEVkZ2VMZXEoZTEsZTI7IGxvYykKK3doaWNoIHNheXMgd2hldGhlciBlMSBp
cyBiZWxvdyBlMiBhdCB0aGUgc3dlZXAgZXZlbnQgbG9jYXRpb24gImxvYyIuCitUaGlzIGZ1bmN0
aW9uIGlzIGRlZmluZWQgb25seSBhdCBzd2VlcCBldmVudCBsb2NhdGlvbnMgd2hpY2ggbGllCiti
ZXR3ZWVuIHRoZSByaWdodG1vc3QgbGVmdCBlbmRwb2ludCBvZiB7ZTEsZTJ9LCBhbmQgdGhlIGxl
ZnRtb3N0IHJpZ2h0CitlbmRwb2ludCBvZiB7ZTEsZTJ9LgorCitJbnZhcmlhbnRzIGZvciB0aGUg
RWRnZSBEaWN0aW9uYXJ5LgorCisgLSBFYWNoIHBhaXIgb2YgYWRqYWNlbnQgZWRnZXMgZTI9U3Vj
YyhlMSkgc2F0aXNmaWVzIEVkZ2VMZXEoZTEsZTIpCisgICBhdCBhbnkgdmFsaWQgbG9jYXRpb24g
b2YgdGhlIHN3ZWVwIGV2ZW50LgorIC0gSWYgRWRnZUxlcShlMixlMSkgYXMgd2VsbCAoYXQgYW55
IHZhbGlkIHN3ZWVwIGV2ZW50KSwgdGhlbiBlMSBhbmQgZTIKKyAgIHNoYXJlIGEgY29tbW9uIGVu
ZHBvaW50LgorIC0gRm9yIGVhY2ggZSBpbiB0aGUgZGljdGlvbmFyeSwgZS0+RHN0IGhhcyBiZWVu
IHByb2Nlc3NlZCBidXQgbm90IGUtPk9yZy4KKyAtIEVhY2ggZWRnZSBlIHNhdGlzZmllcyBWZXJ0
TGVxKGUtPkRzdCxldmVudCkgJiYgVmVydExlcShldmVudCxlLT5PcmcpCisgICB3aGVyZSAiZXZl
bnQiIGlzIHRoZSBjdXJyZW50IHN3ZWVwIGxpbmUgZXZlbnQuCisgLSBObyBlZGdlIGUgaGFzIHpl
cm8gbGVuZ3RoLgorIC0gTm8gdHdvIGVkZ2VzIGhhdmUgaWRlbnRpY2FsIGxlZnQgYW5kIHJpZ2h0
IGVuZHBvaW50cy4KKyAKK0ludmFyaWFudHMgZm9yIHRoZSBNZXNoICh0aGUgcHJvY2Vzc2VkIHBv
cnRpb24pLgorCisgLSBUaGUgcG9ydGlvbiBvZiB0aGUgbWVzaCBsZWZ0IG9mIHRoZSBzd2VlcCBs
aW5lIGlzIGEgcGxhbmFyIGdyYXBoLAorICAgaWUuIHRoZXJlIGlzICpzb21lKiB3YXkgdG8gZW1i
ZWQgaXQgaW4gdGhlIHBsYW5lLgorIC0gTm8gcHJvY2Vzc2VkIGVkZ2UgaGFzIHplcm8gbGVuZ3Ro
LgorIC0gTm8gdHdvIHByb2Nlc3NlZCB2ZXJ0aWNlcyBoYXZlIGlkZW50aWNhbCBjb29yZGluYXRl
cy4KKyAtIEVhY2ggImluc2lkZSIgcmVnaW9uIGlzIG1vbm90b25lLCBpZS4gY2FuIGJlIGJyb2tl
biBpbnRvIHR3byBjaGFpbnMKKyAgIG9mIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB2ZXJ0aWNl
cyBhY2NvcmRpbmcgdG8gVmVydExlcSh2MSx2MikKKyAgIC0gYSBub24taW52YXJpYW50OiB0aGVz
ZSBjaGFpbnMgbWF5IGludGVyc2VjdCAoc2xpZ2h0bHkpIGR1ZSB0bworICAgICBudW1lcmljYWwg
ZXJyb3JzLCBidXQgdGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIGFsZ29yaXRobSdzIG9wZXJhdGlv
bi4KKworSW52YXJpYW50cyBmb3IgdGhlIFN3ZWVwLgorCisgLSBJZiBhIHZlcnRleCBoYXMgYW55
IGxlZnQtZ29pbmcgZWRnZXMsIHRoZW4gdGhlc2UgbXVzdCBiZSBpbiB0aGUgZWRnZQorICAgZGlj
dGlvbmFyeSBhdCB0aGUgdGltZSB0aGUgdmVydGV4IGlzIHByb2Nlc3NlZC4KKyAtIElmIGFuIGVk
Z2UgaXMgbWFya2VkICJmaXhVcHBlckVkZ2UiIChpdCBpcyBhIHRlbXBvcmFyeSBlZGdlIGludHJv
ZHVjZWQKKyAgIGJ5IENvbm5lY3RSaWdodFZlcnRleCksIHRoZW4gaXQgaXMgdGhlIG9ubHkgcmln
aHQtZ29pbmcgZWRnZSBmcm9tCisgICBpdHMgYXNzb2NpYXRlZCB2ZXJ0ZXguICAoVGhpcyBzYXlz
IHRoYXQgdGhlc2UgZWRnZXMgZXhpc3Qgb25seQorICAgd2hlbiBpdCBpcyBuZWNlc3NhcnkuKQor
CisKK1JvYnVzdG5lc3MKKy0tLS0tLS0tLS0KKworVGhlIGtleSB0byB0aGUgcm9idXN0bmVzcyBv
ZiB0aGUgYWxnb3JpdGhtIGlzIG1haW50YWluaW5nIHRoZQoraW52YXJpYW50cyBhYm92ZSwgZXNw
ZWNpYWxseSB0aGUgY29ycmVjdCBvcmRlcmluZyBvZiB0aGUgZWRnZQorZGljdGlvbmFyeS4gIFdl
IGFjaGlldmUgdGhpcyBieToKKworICAxLiBXcml0aW5nIHRoZSBudW1lcmljYWwgY29tcHV0YXRp
b25zIGZvciBtYXhpbXVtIHByZWNpc2lvbiByYXRoZXIKKyAgICAgdGhhbiBtYXhpbXVtIHNwZWVk
LgorICAgICAKKyAgMi4gTWFraW5nIG5vIGFzc3VtcHRpb25zIGF0IGFsbCBhYm91dCB0aGUgcmVz
dWx0cyBvZiB0aGUgZWRnZQorICAgICBpbnRlcnNlY3Rpb24gY2FsY3VsYXRpb25zIC0tIGZvciBz
dWZmaWNpZW50bHkgZGVnZW5lcmF0ZSBpbnB1dHMsCisgICAgIHRoZSBjb21wdXRlZCBsb2NhdGlv
biBpcyBub3QgbXVjaCBiZXR0ZXIgdGhhbiBhIHJhbmRvbSBudW1iZXIuCisgICAgIAorICAzLiBX
aGVuIG51bWVyaWNhbCBlcnJvcnMgdmlvbGF0ZSB0aGUgaW52YXJpYW50cywgcmVzdG9yZSB0aGVt
CisgICAgIGJ5IG1ha2luZyAqdG9wb2xvZ2ljYWwqIGNoYW5nZXMgd2hlbiBuZWNlc3NhcnkgKGll
LiByZWxpbmtpbmcKKyAgICAgdGhlIG1lc2ggc3RydWN0dXJlKS4KKyAgICAgCisgICAgIAorVHJp
YW5ndWxhdGlvbiBhbmQgR3JvdXBpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dl
IGZpbmlzaCB0aGUgbGluZSBzd2VlcCBiZWZvcmUgZG9pbmcgYW55IHRyaWFuZ3VsYXRpb24uICBU
aGlzIGlzCitiZWNhdXNlIGV2ZW4gYWZ0ZXIgYSBtb25vdG9uZSByZWdpb24gaXMgY29tcGxldGUs
IHRoZXJlIGNhbiBiZSBmdXJ0aGVyCitjaGFuZ2VzIHRvIGl0cyB2ZXJ0ZXggZGF0YSBiZWNhdXNl
IG9mIGZ1cnRoZXIgdmVydGV4IG1lcmdpbmcuCisKK0FmdGVyIHRyaWFuZ3VsYXRpbmcgYWxsIG1v
bm90b25lIHJlZ2lvbnMsIHdlIHdhbnQgdG8gZ3JvdXAgdGhlCit0cmlhbmdsZXMgaW50byBmYW5z
IGFuZCBzdHJpcHMuICBXZSBkbyB0aGlzIHVzaW5nIGEgZ3JlZWR5IGFwcHJvYWNoLgorVGhlIHRy
aWFuZ3VsYXRpb24gaXRzZWxmIGlzIG5vdCBvcHRpbWl6ZWQgdG8gcmVkdWNlIHRoZSBudW1iZXIg
b2YKK3ByaW1pdGl2ZXM7IHdlIGp1c3QgdHJ5IHRvIGdldCBhIHJlYXNvbmFibGUgZGVjb21wb3Np
dGlvbiBvZiB0aGUKK2NvbXB1dGVkIHRyaWFuZ3VsYXRpb24uCkluZGV4OiBXZWJDb3JlLzNyZHBh
cnR5L2dsdS9saWJ0ZXNzL2RpY3QtbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvM3JkcGFy
dHkvZ2x1L2xpYnRlc3MvZGljdC1saXN0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlLzNyZHBh
cnR5L2dsdS9saWJ0ZXNzL2RpY3QtbGlzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNyBA
QAorLyoKKyoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9y
dGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZl
IGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5z
ZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisq
KiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2Uu
IFlvdSBtYXkgbm90IHVzZQorKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQg
U2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFt
cGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoK
KyoqIAorKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUg
dGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmli
dXRlZCBvbiBhbgorKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElF
RCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJ
VEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElP
TlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1Ig
QQorKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiog
T3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVt
ZW50YXRpb24sCisqKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBk
ZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUg
aXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29w
eXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5k
aWNhdGVkCisqKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisq
KiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1p
bmcgaW50ZXJmYWNlcworKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGgg
dGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQorKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTog
QSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5
OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lv
bgorKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFw
aGljcyB3aXRoIHRoZSBYCisqKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVh
c2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5n
IHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1
Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBh
cyBiZWluZworKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNw
ZWNpZmljYXRpb24uCisqKgorKi8KKy8qCisqKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5
NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlzaW9uJAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dm
eC9saWIvZ2x1L2xpYnRlc3MvZGljdC1saXN0LmgjNSAkCisqLworCisjaWZuZGVmIF9fZGljdF9s
aXN0X2hfCisjZGVmaW5lIF9fZGljdF9saXN0X2hfCisKKy8qIFVzZSAjZGVmaW5lJ3Mgc28gdGhh
dCBhbm90aGVyIGhlYXAgaW1wbGVtZW50YXRpb24gY2FuIHVzZSB0aGlzIG9uZSAqLworCisjZGVm
aW5lIERpY3RLZXkJCURpY3RMaXN0S2V5CisjZGVmaW5lIERpY3QJCURpY3RMaXN0CisjZGVmaW5l
IERpY3ROb2RlCURpY3RMaXN0Tm9kZQorCisjZGVmaW5lIGRpY3ROZXdEaWN0KGZyYW1lLGxlcSkJ
CV9fZ2xfZGljdExpc3ROZXdEaWN0KGZyYW1lLGxlcSkKKyNkZWZpbmUgZGljdERlbGV0ZURpY3Qo
ZGljdCkJCV9fZ2xfZGljdExpc3REZWxldGVEaWN0KGRpY3QpCisKKyNkZWZpbmUgZGljdFNlYXJj
aChkaWN0LGtleSkJCV9fZ2xfZGljdExpc3RTZWFyY2goZGljdCxrZXkpCisjZGVmaW5lIGRpY3RJ
bnNlcnQoZGljdCxrZXkpCQlfX2dsX2RpY3RMaXN0SW5zZXJ0KGRpY3Qsa2V5KQorI2RlZmluZSBk
aWN0SW5zZXJ0QmVmb3JlKGRpY3Qsbm9kZSxrZXkpCV9fZ2xfZGljdExpc3RJbnNlcnRCZWZvcmUo
ZGljdCxub2RlLGtleSkKKyNkZWZpbmUgZGljdERlbGV0ZShkaWN0LG5vZGUpCQlfX2dsX2RpY3RM
aXN0RGVsZXRlKGRpY3Qsbm9kZSkKKworI2RlZmluZSBkaWN0S2V5KG4pCQkJX19nbF9kaWN0TGlz
dEtleShuKQorI2RlZmluZSBkaWN0U3VjYyhuKQkJCV9fZ2xfZGljdExpc3RTdWNjKG4pCisjZGVm
aW5lIGRpY3RQcmVkKG4pCQkJX19nbF9kaWN0TGlzdFByZWQobikKKyNkZWZpbmUgZGljdE1pbihk
KQkJCV9fZ2xfZGljdExpc3RNaW4oZCkKKyNkZWZpbmUgZGljdE1heChkKQkJCV9fZ2xfZGljdExp
c3RNYXgoZCkKKworCisKK3R5cGVkZWYgdm9pZCAqRGljdEtleTsKK3R5cGVkZWYgc3RydWN0IERp
Y3QgRGljdDsKK3R5cGVkZWYgc3RydWN0IERpY3ROb2RlIERpY3ROb2RlOworCitEaWN0CQkqZGlj
dE5ld0RpY3QoCisJCQl2b2lkICpmcmFtZSwKKwkJCWludCAoKmxlcSkodm9pZCAqZnJhbWUsIERp
Y3RLZXkga2V5MSwgRGljdEtleSBrZXkyKSApOworCQkJCit2b2lkCQlkaWN0RGVsZXRlRGljdCgg
RGljdCAqZGljdCApOworCisvKiBTZWFyY2ggcmV0dXJucyB0aGUgbm9kZSB3aXRoIHRoZSBzbWFs
bGVzdCBrZXkgZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisgKiB0byB0aGUgZ2l2ZW4ga2V5LiAgSWYg
dGhlcmUgaXMgbm8gc3VjaCBrZXksIHJldHVybnMgYSBub2RlIHdob3NlCisgKiBrZXkgaXMgTlVM
TC4gIFNpbWlsYXJseSwgU3VjYyhNYXgoZCkpIGhhcyBhIE5VTEwga2V5LCBldGMuCisgKi8KK0Rp
Y3ROb2RlCSpkaWN0U2VhcmNoKCBEaWN0ICpkaWN0LCBEaWN0S2V5IGtleSApOworRGljdE5vZGUJ
KmRpY3RJbnNlcnRCZWZvcmUoIERpY3QgKmRpY3QsIERpY3ROb2RlICpub2RlLCBEaWN0S2V5IGtl
eSApOwordm9pZAkJZGljdERlbGV0ZSggRGljdCAqZGljdCwgRGljdE5vZGUgKm5vZGUgKTsKKwor
I2RlZmluZQkJX19nbF9kaWN0TGlzdEtleShuKQkoKG4pLT5rZXkpCisjZGVmaW5lCQlfX2dsX2Rp
Y3RMaXN0U3VjYyhuKQkoKG4pLT5uZXh0KQorI2RlZmluZQkJX19nbF9kaWN0TGlzdFByZWQobikJ
KChuKS0+cHJldikKKyNkZWZpbmUJCV9fZ2xfZGljdExpc3RNaW4oZCkJKChkKS0+aGVhZC5uZXh0
KQorI2RlZmluZQkJX19nbF9kaWN0TGlzdE1heChkKQkoKGQpLT5oZWFkLnByZXYpCisjZGVmaW5l
CSAgICAgICBfX2dsX2RpY3RMaXN0SW5zZXJ0KGQsaykgKGRpY3RJbnNlcnRCZWZvcmUoKGQpLCYo
ZCktPmhlYWQsKGspKSkKKworCisvKioqIFByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzICoqKi8KKwor
c3RydWN0IERpY3ROb2RlIHsKKyAgRGljdEtleQlrZXk7CisgIERpY3ROb2RlCSpuZXh0OworICBE
aWN0Tm9kZQkqcHJldjsKK307CisKK3N0cnVjdCBEaWN0IHsKKyAgRGljdE5vZGUJaGVhZDsKKyAg
dm9pZAkJKmZyYW1lOworICBpbnQJCSgqbGVxKSh2b2lkICpmcmFtZSwgRGljdEtleSBrZXkxLCBE
aWN0S2V5IGtleTIpOworfTsKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlLzNyZHBhcnR5L2dsdS9s
aWJ0ZXNzL2RpY3QuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNz
L2RpY3QuYwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvZGlj
dC5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyoqIExpY2Vuc2UgQXBwbGlj
YWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQor
KiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGlu
IHRoZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJM
aWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkg
dG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQorKiogdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0
YWluIGEgY29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwg
YXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3Vu
dGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDovL29zcy5zZ2ku
Y29tL3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhl
IExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiogIkFTIElTIiBi
YXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJ
T05TCisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElN
UExJRUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBT
QVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxBUiBQVVJQT1NF
LCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdp
bmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBWZXJzaW9uIDEu
Mi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFw
aGljcywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIw
MDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBj
cmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNld2hlcmUgaGVy
ZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92
aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworKiogZXN0YWJs
aXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRo
ZQorKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9u
IDEuMi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhp
Y3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVsZWFzZWQgTm92
ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCisqKiBXaW5k
b3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRo
aXMgc29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAx
LjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMg
bm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiogY29tcGxpYW50IHdp
dGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisqKgorKi8KKy8q
CisqKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlz
aW9uJAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvZGljdC5j
IzUgJAorKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9s
aWJ0ZXNzL2RpY3QtbGlzdC5oIgorI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFs
bG9jLmgiCisKKy8qIHJlYWxseSBfX2dsX2RpY3RMaXN0TmV3RGljdCAqLworRGljdCAqZGljdE5l
d0RpY3QoIHZvaWQgKmZyYW1lLAorCQkgICBpbnQgKCpsZXEpKHZvaWQgKmZyYW1lLCBEaWN0S2V5
IGtleTEsIERpY3RLZXkga2V5MikgKQoreworICBEaWN0ICpkaWN0ID0gKERpY3QgKikgbWVtQWxs
b2MoIHNpemVvZiggRGljdCApKTsKKyAgRGljdE5vZGUgKmhlYWQ7CisKKyAgaWYgKGRpY3QgPT0g
TlVMTCkgcmV0dXJuIE5VTEw7CisKKyAgaGVhZCA9ICZkaWN0LT5oZWFkOworCisgIGhlYWQtPmtl
eSA9IE5VTEw7CisgIGhlYWQtPm5leHQgPSBoZWFkOworICBoZWFkLT5wcmV2ID0gaGVhZDsKKwor
ICBkaWN0LT5mcmFtZSA9IGZyYW1lOworICBkaWN0LT5sZXEgPSBsZXE7CisKKyAgcmV0dXJuIGRp
Y3Q7Cit9CisKKy8qIHJlYWxseSBfX2dsX2RpY3RMaXN0RGVsZXRlRGljdCAqLwordm9pZCBkaWN0
RGVsZXRlRGljdCggRGljdCAqZGljdCApCit7CisgIERpY3ROb2RlICpub2RlOworCisgIGZvcigg
bm9kZSA9IGRpY3QtPmhlYWQubmV4dDsgbm9kZSAhPSAmZGljdC0+aGVhZDsgbm9kZSA9IG5vZGUt
Pm5leHQgKSB7CisgICAgbWVtRnJlZSggbm9kZSApOworICB9CisgIG1lbUZyZWUoIGRpY3QgKTsK
K30KKworLyogcmVhbGx5IF9fZ2xfZGljdExpc3RJbnNlcnRCZWZvcmUgKi8KK0RpY3ROb2RlICpk
aWN0SW5zZXJ0QmVmb3JlKCBEaWN0ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSwgRGljdEtleSBrZXkg
KQoreworICBEaWN0Tm9kZSAqbmV3Tm9kZTsKKworICBkbyB7CisgICAgbm9kZSA9IG5vZGUtPnBy
ZXY7CisgIH0gd2hpbGUoIG5vZGUtPmtleSAhPSBOVUxMICYmICEgKCpkaWN0LT5sZXEpKGRpY3Qt
PmZyYW1lLCBub2RlLT5rZXksIGtleSkpOworCisgIG5ld05vZGUgPSAoRGljdE5vZGUgKikgbWVt
QWxsb2MoIHNpemVvZiggRGljdE5vZGUgKSk7CisgIGlmIChuZXdOb2RlID09IE5VTEwpIHJldHVy
biBOVUxMOworCisgIG5ld05vZGUtPmtleSA9IGtleTsKKyAgbmV3Tm9kZS0+bmV4dCA9IG5vZGUt
Pm5leHQ7CisgIG5vZGUtPm5leHQtPnByZXYgPSBuZXdOb2RlOworICBuZXdOb2RlLT5wcmV2ID0g
bm9kZTsKKyAgbm9kZS0+bmV4dCA9IG5ld05vZGU7CisKKyAgcmV0dXJuIG5ld05vZGU7Cit9CisK
Ky8qIHJlYWxseSBfX2dsX2RpY3RMaXN0RGVsZXRlICovCit2b2lkIGRpY3REZWxldGUoIERpY3Qg
KmRpY3QsIERpY3ROb2RlICpub2RlICkgLypBUkdTVVNFRCovCit7CisgIG5vZGUtPm5leHQtPnBy
ZXYgPSBub2RlLT5wcmV2OworICBub2RlLT5wcmV2LT5uZXh0ID0gbm9kZS0+bmV4dDsKKyAgbWVt
RnJlZSggbm9kZSApOworfQorCisvKiByZWFsbHkgX19nbF9kaWN0TGlzdFNlYXJjaCAqLworRGlj
dE5vZGUgKmRpY3RTZWFyY2goIERpY3QgKmRpY3QsIERpY3RLZXkga2V5ICkKK3sKKyAgRGljdE5v
ZGUgKm5vZGUgPSAmZGljdC0+aGVhZDsKKworICBkbyB7CisgICAgbm9kZSA9IG5vZGUtPm5leHQ7
CisgIH0gd2hpbGUoIG5vZGUtPmtleSAhPSBOVUxMICYmICEgKCpkaWN0LT5sZXEpKGRpY3QtPmZy
YW1lLCBrZXksIG5vZGUtPmtleSkpOworCisgIHJldHVybiBub2RlOworfQpJbmRleDogV2ViQ29y
ZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS8zcmRw
YXJ0eS9nbHUvbGlidGVzcy9kaWN0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlLzNyZHBhcnR5
L2dsdS9saWJ0ZXNzL2RpY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisq
KiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9m
IHRoaXMgZmlsZSBhcmUKKyoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNl
IGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKKyoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVy
c2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcworKiogZmlsZSBh
cmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG5vdCB1c2UKKyoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKKyoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24g
R3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCisqKiBBbXBoaXRoZWF0
cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6CisqKiAKKyoq
IGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgorKiogCisqKiBOb3RlIHRoYXQsIGFz
IHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24g
YW4KKyoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFO
VElFUyBBTkQgQ09ORElUSU9OUworKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJ
TUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECisqKiBDT05ESVRJT05TIE9GIE1F
UkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKKyoqIFBB
UlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisqKiAKKyoqIE9yaWdpbmFs
IENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9u
LAorKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVk
IGJ5IFNpbGljb24gR3JhcGhpY3MsCisqKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHly
aWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyoqIENvcHlyaWdodCBp
biBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAor
KiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqIAorKiogQWRkaXRp
b25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVy
ZmFjZXMKKyoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmln
aW5hbCBDb2RlIGFyZSBUaGUKKyoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lm
aWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCisqKiBBcHJpbCAxLCAxOTk5OyBUaGUg
T3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KKyoqIDEu
MyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0
aCB0aGUgWAorKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3Rv
YmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCisqKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3Bl
bkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCisqKiBwdWJsaXNoZWQg
YnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcK
KyoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0
aW9uLgorKioKKyovCisvKgorKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCisqKgor
KiogJERhdGUkICRSZXZpc2lvbiQKKyoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2ds
dS9saWJ0ZXNzL2RpY3QuaCM1ICQKKyovCisKKyNpZm5kZWYgX19kaWN0X2xpc3RfaF8KKyNkZWZp
bmUgX19kaWN0X2xpc3RfaF8KKworLyogVXNlICNkZWZpbmUncyBzbyB0aGF0IGFub3RoZXIgaGVh
cCBpbXBsZW1lbnRhdGlvbiBjYW4gdXNlIHRoaXMgb25lICovCisKKyNkZWZpbmUgRGljdEtleQkJ
RGljdExpc3RLZXkKKyNkZWZpbmUgRGljdAkJRGljdExpc3QKKyNkZWZpbmUgRGljdE5vZGUJRGlj
dExpc3ROb2RlCisKKyNkZWZpbmUgZGljdE5ld0RpY3QoZnJhbWUsbGVxKQkJX19nbF9kaWN0TGlz
dE5ld0RpY3QoZnJhbWUsbGVxKQorI2RlZmluZSBkaWN0RGVsZXRlRGljdChkaWN0KQkJX19nbF9k
aWN0TGlzdERlbGV0ZURpY3QoZGljdCkKKworI2RlZmluZSBkaWN0U2VhcmNoKGRpY3Qsa2V5KQkJ
X19nbF9kaWN0TGlzdFNlYXJjaChkaWN0LGtleSkKKyNkZWZpbmUgZGljdEluc2VydChkaWN0LGtl
eSkJCV9fZ2xfZGljdExpc3RJbnNlcnQoZGljdCxrZXkpCisjZGVmaW5lIGRpY3RJbnNlcnRCZWZv
cmUoZGljdCxub2RlLGtleSkJX19nbF9kaWN0TGlzdEluc2VydEJlZm9yZShkaWN0LG5vZGUsa2V5
KQorI2RlZmluZSBkaWN0RGVsZXRlKGRpY3Qsbm9kZSkJCV9fZ2xfZGljdExpc3REZWxldGUoZGlj
dCxub2RlKQorCisjZGVmaW5lIGRpY3RLZXkobikJCQlfX2dsX2RpY3RMaXN0S2V5KG4pCisjZGVm
aW5lIGRpY3RTdWNjKG4pCQkJX19nbF9kaWN0TGlzdFN1Y2MobikKKyNkZWZpbmUgZGljdFByZWQo
bikJCQlfX2dsX2RpY3RMaXN0UHJlZChuKQorI2RlZmluZSBkaWN0TWluKGQpCQkJX19nbF9kaWN0
TGlzdE1pbihkKQorI2RlZmluZSBkaWN0TWF4KGQpCQkJX19nbF9kaWN0TGlzdE1heChkKQorCisK
KwordHlwZWRlZiB2b2lkICpEaWN0S2V5OwordHlwZWRlZiBzdHJ1Y3QgRGljdCBEaWN0OwordHlw
ZWRlZiBzdHJ1Y3QgRGljdE5vZGUgRGljdE5vZGU7CisKK0RpY3QJCSpkaWN0TmV3RGljdCgKKwkJ
CXZvaWQgKmZyYW1lLAorCQkJaW50ICgqbGVxKSh2b2lkICpmcmFtZSwgRGljdEtleSBrZXkxLCBE
aWN0S2V5IGtleTIpICk7CisJCQkKK3ZvaWQJCWRpY3REZWxldGVEaWN0KCBEaWN0ICpkaWN0ICk7
CisKKy8qIFNlYXJjaCByZXR1cm5zIHRoZSBub2RlIHdpdGggdGhlIHNtYWxsZXN0IGtleSBncmVh
dGVyIHRoYW4gb3IgZXF1YWwKKyAqIHRvIHRoZSBnaXZlbiBrZXkuICBJZiB0aGVyZSBpcyBubyBz
dWNoIGtleSwgcmV0dXJucyBhIG5vZGUgd2hvc2UKKyAqIGtleSBpcyBOVUxMLiAgU2ltaWxhcmx5
LCBTdWNjKE1heChkKSkgaGFzIGEgTlVMTCBrZXksIGV0Yy4KKyAqLworRGljdE5vZGUJKmRpY3RT
ZWFyY2goIERpY3QgKmRpY3QsIERpY3RLZXkga2V5ICk7CitEaWN0Tm9kZQkqZGljdEluc2VydEJl
Zm9yZSggRGljdCAqZGljdCwgRGljdE5vZGUgKm5vZGUsIERpY3RLZXkga2V5ICk7Cit2b2lkCQlk
aWN0RGVsZXRlKCBEaWN0ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSApOworCisjZGVmaW5lCQlfX2ds
X2RpY3RMaXN0S2V5KG4pCSgobiktPmtleSkKKyNkZWZpbmUJCV9fZ2xfZGljdExpc3RTdWNjKG4p
CSgobiktPm5leHQpCisjZGVmaW5lCQlfX2dsX2RpY3RMaXN0UHJlZChuKQkoKG4pLT5wcmV2KQor
I2RlZmluZQkJX19nbF9kaWN0TGlzdE1pbihkKQkoKGQpLT5oZWFkLm5leHQpCisjZGVmaW5lCQlf
X2dsX2RpY3RMaXN0TWF4KGQpCSgoZCktPmhlYWQucHJldikKKyNkZWZpbmUJICAgICAgIF9fZ2xf
ZGljdExpc3RJbnNlcnQoZCxrKSAoZGljdEluc2VydEJlZm9yZSgoZCksJihkKS0+aGVhZCwoaykp
KQorCisKKy8qKiogUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgKioqLworCitzdHJ1Y3QgRGljdE5v
ZGUgeworICBEaWN0S2V5CWtleTsKKyAgRGljdE5vZGUJKm5leHQ7CisgIERpY3ROb2RlCSpwcmV2
OworfTsKKworc3RydWN0IERpY3QgeworICBEaWN0Tm9kZQloZWFkOworICB2b2lkCQkqZnJhbWU7
CisgIGludAkJKCpsZXEpKHZvaWQgKmZyYW1lLCBEaWN0S2V5IGtleTEsIERpY3RLZXkga2V5Mik7
Cit9OworCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5j
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjcxIEBACisvKgorKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNl
cHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisqKiBtYWRlIHN1Ympl
Y3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVl
CisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhl
IGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlz
aW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Cisq
KiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBT
ZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENB
IDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMv
RnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhl
IFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFM
TCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKKyoqIERJU0NM
QUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5U
SUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBR
VUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5G
UklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczog
T3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2Vk
IEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAorKiogSW5j
LiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdy
YXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhp
cmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBh
cHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxpc2hlZCBieSBTR0kg
aW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisqKiBPcGVuR0wo
UikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxl
YXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRp
bGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4
OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRvdyBTeXN0ZW0oUikg
KFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQor
Kiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJ
bXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRl
cGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdM
KFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoKKyoqIEF1dGhvcjog
RXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNpb24kCisqKiAkSGVh
ZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9nZW9tLmMjNSAkCisqLworCisj
aW5jbHVkZSAiM3JkcGFydHkvZ2x1L2dsdW9zLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5j
bHVkZSAiM3JkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1ZGUgIjNyZHBhcnR5L2ds
dS9saWJ0ZXNzL2dlb20uaCIKKworaW50IF9fZ2xfdmVydExlcSggR0xVdmVydGV4ICp1LCBHTFV2
ZXJ0ZXggKnYgKQoreworICAvKiBSZXR1cm5zIFRSVUUgaWYgdSBpcyBsZXhpY29ncmFwaGljYWxs
eSA8PSB2LiAqLworCisgIHJldHVybiBWZXJ0TGVxKCB1LCB2ICk7Cit9CisKK0dMZG91YmxlIF9f
Z2xfZWRnZUV2YWwoIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKQor
eworICAvKiBHaXZlbiB0aHJlZSB2ZXJ0aWNlcyB1LHYsdyBzdWNoIHRoYXQgVmVydExlcSh1LHYp
ICYmIFZlcnRMZXEodix3KSwKKyAgICogZXZhbHVhdGVzIHRoZSB0LWNvb3JkIG9mIHRoZSBlZGdl
IHV3IGF0IHRoZSBzLWNvb3JkIG9mIHRoZSB2ZXJ0ZXggdi4KKyAgICogUmV0dXJucyB2LT50IC0g
KHV3KSh2LT5zKSwgaWUuIHRoZSBzaWduZWQgZGlzdGFuY2UgZnJvbSB1dyB0byB2LgorICAgKiBJ
ZiB1dyBpcyB2ZXJ0aWNhbCAoYW5kIHRodXMgcGFzc2VzIHRocnUgdiksIHRoZSByZXN1bHQgaXMg
emVyby4KKyAgICoKKyAgICogVGhlIGNhbGN1bGF0aW9uIGlzIGV4dHJlbWVseSBhY2N1cmF0ZSBh
bmQgc3RhYmxlLCBldmVuIHdoZW4gdgorICAgKiBpcyB2ZXJ5IGNsb3NlIHRvIHUgb3Igdy4gIElu
IHBhcnRpY3VsYXIgaWYgd2Ugc2V0IHYtPnQgPSAwIGFuZAorICAgKiBsZXQgciBiZSB0aGUgbmVn
YXRlZCByZXN1bHQgKHRoaXMgZXZhbHVhdGVzICh1dykodi0+cykpLCB0aGVuCisgICAqIHIgaXMg
Z3VhcmFudGVlZCB0byBzYXRpc2Z5IE1JTih1LT50LHctPnQpIDw9IHIgPD0gTUFYKHUtPnQsdy0+
dCkuCisgICAqLworICBHTGRvdWJsZSBnYXBMLCBnYXBSOworCisgIGFzc2VydCggVmVydExlcSgg
dSwgdiApICYmIFZlcnRMZXEoIHYsIHcgKSk7CisgIAorICBnYXBMID0gdi0+cyAtIHUtPnM7Cisg
IGdhcFIgPSB3LT5zIC0gdi0+czsKKworICBpZiggZ2FwTCArIGdhcFIgPiAwICkgeworICAgIGlm
KCBnYXBMIDwgZ2FwUiApIHsKKyAgICAgIHJldHVybiAodi0+dCAtIHUtPnQpICsgKHUtPnQgLSB3
LT50KSAqIChnYXBMIC8gKGdhcEwgKyBnYXBSKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVy
biAodi0+dCAtIHctPnQpICsgKHctPnQgLSB1LT50KSAqIChnYXBSIC8gKGdhcEwgKyBnYXBSKSk7
CisgICAgfQorICB9CisgIC8qIHZlcnRpY2FsIGxpbmUgKi8KKyAgcmV0dXJuIDA7Cit9CisKK0dM
ZG91YmxlIF9fZ2xfZWRnZVNpZ24oIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0
ZXggKncgKQoreworICAvKiBSZXR1cm5zIGEgbnVtYmVyIHdob3NlIHNpZ24gbWF0Y2hlcyBFZGdl
RXZhbCh1LHYsdykgYnV0IHdoaWNoCisgICAqIGlzIGNoZWFwZXIgdG8gZXZhbHVhdGUuICBSZXR1
cm5zID4gMCwgPT0gMCAsIG9yIDwgMAorICAgKiBhcyB2IGlzIGFib3ZlLCBvbiwgb3IgYmVsb3cg
dGhlIGVkZ2UgdXcuCisgICAqLworICBHTGRvdWJsZSBnYXBMLCBnYXBSOworCisgIGFzc2VydCgg
VmVydExlcSggdSwgdiApICYmIFZlcnRMZXEoIHYsIHcgKSk7CisgIAorICBnYXBMID0gdi0+cyAt
IHUtPnM7CisgIGdhcFIgPSB3LT5zIC0gdi0+czsKKworICBpZiggZ2FwTCArIGdhcFIgPiAwICkg
eworICAgIHJldHVybiAodi0+dCAtIHctPnQpICogZ2FwTCArICh2LT50IC0gdS0+dCkgKiBnYXBS
OworICB9CisgIC8qIHZlcnRpY2FsIGxpbmUgKi8KKyAgcmV0dXJuIDA7Cit9CisKKworLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCisgKiBEZWZpbmUgdmVyc2lvbnMgb2YgRWRnZVNpZ24sIEVkZ2VFdmFsIHdpdGgg
cyBhbmQgdCB0cmFuc3Bvc2VkLgorICovCisKK0dMZG91YmxlIF9fZ2xfdHJhbnNFdmFsKCBHTFV2
ZXJ0ZXggKnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICkKK3sKKyAgLyogR2l2ZW4gdGhy
ZWUgdmVydGljZXMgdSx2LHcgc3VjaCB0aGF0IFRyYW5zTGVxKHUsdikgJiYgVHJhbnNMZXEodix3
KSwKKyAgICogZXZhbHVhdGVzIHRoZSB0LWNvb3JkIG9mIHRoZSBlZGdlIHV3IGF0IHRoZSBzLWNv
b3JkIG9mIHRoZSB2ZXJ0ZXggdi4KKyAgICogUmV0dXJucyB2LT5zIC0gKHV3KSh2LT50KSwgaWUu
IHRoZSBzaWduZWQgZGlzdGFuY2UgZnJvbSB1dyB0byB2LgorICAgKiBJZiB1dyBpcyB2ZXJ0aWNh
bCAoYW5kIHRodXMgcGFzc2VzIHRocnUgdiksIHRoZSByZXN1bHQgaXMgemVyby4KKyAgICoKKyAg
ICogVGhlIGNhbGN1bGF0aW9uIGlzIGV4dHJlbWVseSBhY2N1cmF0ZSBhbmQgc3RhYmxlLCBldmVu
IHdoZW4gdgorICAgKiBpcyB2ZXJ5IGNsb3NlIHRvIHUgb3Igdy4gIEluIHBhcnRpY3VsYXIgaWYg
d2Ugc2V0IHYtPnMgPSAwIGFuZAorICAgKiBsZXQgciBiZSB0aGUgbmVnYXRlZCByZXN1bHQgKHRo
aXMgZXZhbHVhdGVzICh1dykodi0+dCkpLCB0aGVuCisgICAqIHIgaXMgZ3VhcmFudGVlZCB0byBz
YXRpc2Z5IE1JTih1LT5zLHctPnMpIDw9IHIgPD0gTUFYKHUtPnMsdy0+cykuCisgICAqLworICBH
TGRvdWJsZSBnYXBMLCBnYXBSOworCisgIGFzc2VydCggVHJhbnNMZXEoIHUsIHYgKSAmJiBUcmFu
c0xlcSggdiwgdyApKTsKKyAgCisgIGdhcEwgPSB2LT50IC0gdS0+dDsKKyAgZ2FwUiA9IHctPnQg
LSB2LT50OworCisgIGlmKCBnYXBMICsgZ2FwUiA+IDAgKSB7CisgICAgaWYoIGdhcEwgPCBnYXBS
ICkgeworICAgICAgcmV0dXJuICh2LT5zIC0gdS0+cykgKyAodS0+cyAtIHctPnMpICogKGdhcEwg
LyAoZ2FwTCArIGdhcFIpKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuICh2LT5zIC0gdy0+
cykgKyAody0+cyAtIHUtPnMpICogKGdhcFIgLyAoZ2FwTCArIGdhcFIpKTsKKyAgICB9CisgIH0K
KyAgLyogdmVydGljYWwgbGluZSAqLworICByZXR1cm4gMDsKK30KKworR0xkb3VibGUgX19nbF90
cmFuc1NpZ24oIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKQorewor
ICAvKiBSZXR1cm5zIGEgbnVtYmVyIHdob3NlIHNpZ24gbWF0Y2hlcyBUcmFuc0V2YWwodSx2LHcp
IGJ1dCB3aGljaAorICAgKiBpcyBjaGVhcGVyIHRvIGV2YWx1YXRlLiAgUmV0dXJucyA+IDAsID09
IDAgLCBvciA8IDAKKyAgICogYXMgdiBpcyBhYm92ZSwgb24sIG9yIGJlbG93IHRoZSBlZGdlIHV3
LgorICAgKi8KKyAgR0xkb3VibGUgZ2FwTCwgZ2FwUjsKKworICBhc3NlcnQoIFRyYW5zTGVxKCB1
LCB2ICkgJiYgVHJhbnNMZXEoIHYsIHcgKSk7CisgIAorICBnYXBMID0gdi0+dCAtIHUtPnQ7Cisg
IGdhcFIgPSB3LT50IC0gdi0+dDsKKworICBpZiggZ2FwTCArIGdhcFIgPiAwICkgeworICAgIHJl
dHVybiAodi0+cyAtIHctPnMpICogZ2FwTCArICh2LT5zIC0gdS0+cykgKiBnYXBSOworICB9Cisg
IC8qIHZlcnRpY2FsIGxpbmUgKi8KKyAgcmV0dXJuIDA7Cit9CisKKworaW50IF9fZ2xfdmVydEND
VyggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdMVXZlcnRleCAqdyApCit7CisgIC8qIEZv
ciBhbG1vc3QtZGVnZW5lcmF0ZSBzaXR1YXRpb25zLCB0aGUgcmVzdWx0cyBhcmUgbm90IHJlbGlh
YmxlLgorICAgKiBVbmxlc3MgdGhlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgY2FuIGJlIHBl
cmZvcm1lZCB3aXRob3V0CisgICAqIHJvdW5kaW5nIGVycm9ycywgKmFueSogaW1wbGVtZW50YXRp
b24gd2lsbCBnaXZlIGluY29ycmVjdCByZXN1bHRzCisgICAqIG9uIHNvbWUgZGVnZW5lcmF0ZSBp
bnB1dHMsIHNvIHRoZSBjbGllbnQgbXVzdCBoYXZlIHNvbWUgd2F5IHRvCisgICAqIGhhbmRsZSB0
aGlzIHNpdHVhdGlvbi4KKyAgICovCisgIHJldHVybiAodS0+cyoodi0+dCAtIHctPnQpICsgdi0+
cyoody0+dCAtIHUtPnQpICsgdy0+cyoodS0+dCAtIHYtPnQpKSA+PSAwOworfQorCisvKiBHaXZl
biBwYXJhbWV0ZXJzIGEseCxiLHkgcmV0dXJucyB0aGUgdmFsdWUgKGIqeCthKnkpLyhhK2IpLAor
ICogb3IgKHgreSkvMiBpZiBhPT1iPT0wLiAgSXQgcmVxdWlyZXMgdGhhdCBhLGIgPj0gMCwgYW5k
IGVuZm9yY2VzCisgKiB0aGlzIGluIHRoZSByYXJlIGNhc2UgdGhhdCBvbmUgYXJndW1lbnQgaXMg
c2xpZ2h0bHkgbmVnYXRpdmUuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gaXMgZXh0cmVtZWx5IHN0
YWJsZSBudW1lcmljYWxseS4KKyAqIEluIHBhcnRpY3VsYXIgaXQgZ3VhcmFudGVlcyB0aGF0IHRo
ZSByZXN1bHQgciBzYXRpc2ZpZXMKKyAqIE1JTih4LHkpIDw9IHIgPD0gTUFYKHgseSksIGFuZCB0
aGUgcmVzdWx0cyBhcmUgdmVyeSBhY2N1cmF0ZQorICogZXZlbiB3aGVuIGEgYW5kIGIgZGlmZmVy
IGdyZWF0bHkgaW4gbWFnbml0dWRlLgorICovCisjZGVmaW5lIFJlYWxJbnRlcnBvbGF0ZShhLHgs
Yix5KQkJCVwKKyAgKGEgPSAoYSA8IDApID8gMCA6IGEsIGIgPSAoYiA8IDApID8gMCA6IGIsCQlc
CisgICgoYSA8PSBiKSA/ICgoYiA9PSAwKSA/ICgoeCt5KSAvIDIpCQkJXAorICAgICAgICAgICAg
ICAgICAgICAgICAgOiAoeCArICh5LXgpICogKGEvKGErYikpKSkJXAorICAgICAgICAgICAgOiAo
eSArICh4LXkpICogKGIvKGErYikpKSkpCisKKyNpZm5kZWYgRk9SX1RSSVRFX1RFU1RfUFJPR1JB
TQorI2RlZmluZSBJbnRlcnBvbGF0ZShhLHgsYix5KQlSZWFsSW50ZXJwb2xhdGUoYSx4LGIseSkK
KyNlbHNlCisKKy8qIENsYWltOiB0aGUgT05MWSBwcm9wZXJ0eSB0aGUgc3dlZXAgYWxnb3JpdGht
IHJlbGllcyBvbiBpcyB0aGF0CisgKiBNSU4oeCx5KSA8PSByIDw9IE1BWCh4LHkpLiAgVGhpcyBp
cyBhIG5hc3R5IHdheSB0byB0ZXN0IHRoYXQuCisgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2V4
dGVybiBpbnQgUmFuZG9tSW50ZXJwb2xhdGU7CisKK0dMZG91YmxlIEludGVycG9sYXRlKCBHTGRv
dWJsZSBhLCBHTGRvdWJsZSB4LCBHTGRvdWJsZSBiLCBHTGRvdWJsZSB5KQoreworcHJpbnRmKCIq
KioqKioqKioqKioqKioqKioqKiolZFxuIixSYW5kb21JbnRlcnBvbGF0ZSk7CisgIGlmKCBSYW5k
b21JbnRlcnBvbGF0ZSApIHsKKyAgICBhID0gMS4yICogZHJhbmQ0OCgpIC0gMC4xOworICAgIGEg
PSAoYSA8IDApID8gMCA6ICgoYSA+IDEpID8gMSA6IGEpOworICAgIGIgPSAxLjAgLSBhOworICB9
CisgIHJldHVybiBSZWFsSW50ZXJwb2xhdGUoYSx4LGIseSk7Cit9CisKKyNlbmRpZgorCisjZGVm
aW5lIFN3YXAoYSxiKQlpZiAoMSkgeyBHTFV2ZXJ0ZXggKnQgPSBhOyBhID0gYjsgYiA9IHQ7IH0g
ZWxzZQorCit2b2lkIF9fZ2xfZWRnZUludGVyc2VjdCggR0xVdmVydGV4ICpvMSwgR0xVdmVydGV4
ICpkMSwKKwkJCSBHTFV2ZXJ0ZXggKm8yLCBHTFV2ZXJ0ZXggKmQyLAorCQkJIEdMVXZlcnRleCAq
diApCisvKiBHaXZlbiBlZGdlcyAobzEsZDEpIGFuZCAobzIsZDIpLCBjb21wdXRlIHRoZWlyIHBv
aW50IG9mIGludGVyc2VjdGlvbi4KKyAqIFRoZSBjb21wdXRlZCBwb2ludCBpcyBndWFyYW50ZWVk
IHRvIGxpZSBpbiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZQorICogYm91bmRpbmcgcmVjdGFuZ2xl
cyBkZWZpbmVkIGJ5IGVhY2ggZWRnZS4KKyAqLworeworICBHTGRvdWJsZSB6MSwgejI7CisKKyAg
LyogVGhpcyBpcyBjZXJ0YWlubHkgbm90IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZmluZCB0
aGUgaW50ZXJzZWN0aW9uCisgICAqIG9mIHR3byBsaW5lIHNlZ21lbnRzLCBidXQgaXQgaXMgdmVy
eSBudW1lcmljYWxseSBzdGFibGUuCisgICAqCisgICAqIFN0cmF0ZWd5OiBmaW5kIHRoZSB0d28g
bWlkZGxlIHZlcnRpY2VzIGluIHRoZSBWZXJ0TGVxIG9yZGVyaW5nLAorICAgKiBhbmQgaW50ZXJw
b2xhdGUgdGhlIGludGVyc2VjdGlvbiBzLXZhbHVlIGZyb20gdGhlc2UuICBUaGVuIHJlcGVhdAor
ICAgKiB1c2luZyB0aGUgVHJhbnNMZXEgb3JkZXJpbmcgdG8gZmluZCB0aGUgaW50ZXJzZWN0aW9u
IHQtdmFsdWUuCisgICAqLworCisgIGlmKCAhIFZlcnRMZXEoIG8xLCBkMSApKSB7IFN3YXAoIG8x
LCBkMSApOyB9CisgIGlmKCAhIFZlcnRMZXEoIG8yLCBkMiApKSB7IFN3YXAoIG8yLCBkMiApOyB9
CisgIGlmKCAhIFZlcnRMZXEoIG8xLCBvMiApKSB7IFN3YXAoIG8xLCBvMiApOyBTd2FwKCBkMSwg
ZDIgKTsgfQorCisgIGlmKCAhIFZlcnRMZXEoIG8yLCBkMSApKSB7CisgICAgLyogVGVjaG5pY2Fs
bHksIG5vIGludGVyc2VjdGlvbiAtLSBkbyBvdXIgYmVzdCAqLworICAgIHYtPnMgPSAobzItPnMg
KyBkMS0+cykgLyAyOworICB9IGVsc2UgaWYoIFZlcnRMZXEoIGQxLCBkMiApKSB7CisgICAgLyog
SW50ZXJwb2xhdGUgYmV0d2VlbiBvMiBhbmQgZDEgKi8KKyAgICB6MSA9IEVkZ2VFdmFsKCBvMSwg
bzIsIGQxICk7CisgICAgejIgPSBFZGdlRXZhbCggbzIsIGQxLCBkMiApOworICAgIGlmKCB6MSt6
MiA8IDAgKSB7IHoxID0gLXoxOyB6MiA9IC16MjsgfQorICAgIHYtPnMgPSBJbnRlcnBvbGF0ZSgg
ejEsIG8yLT5zLCB6MiwgZDEtPnMgKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBJbnRlcnBvbGF0ZSBi
ZXR3ZWVuIG8yIGFuZCBkMiAqLworICAgIHoxID0gRWRnZVNpZ24oIG8xLCBvMiwgZDEgKTsKKyAg
ICB6MiA9IC1FZGdlU2lnbiggbzEsIGQyLCBkMSApOworICAgIGlmKCB6MSt6MiA8IDAgKSB7IHox
ID0gLXoxOyB6MiA9IC16MjsgfQorICAgIHYtPnMgPSBJbnRlcnBvbGF0ZSggejEsIG8yLT5zLCB6
MiwgZDItPnMgKTsKKyAgfQorCisgIC8qIE5vdyByZXBlYXQgdGhlIHByb2Nlc3MgZm9yIHQgKi8K
KworICBpZiggISBUcmFuc0xlcSggbzEsIGQxICkpIHsgU3dhcCggbzEsIGQxICk7IH0KKyAgaWYo
ICEgVHJhbnNMZXEoIG8yLCBkMiApKSB7IFN3YXAoIG8yLCBkMiApOyB9CisgIGlmKCAhIFRyYW5z
TGVxKCBvMSwgbzIgKSkgeyBTd2FwKCBvMSwgbzIgKTsgU3dhcCggZDEsIGQyICk7IH0KKworICBp
ZiggISBUcmFuc0xlcSggbzIsIGQxICkpIHsKKyAgICAvKiBUZWNobmljYWxseSwgbm8gaW50ZXJz
ZWN0aW9uIC0tIGRvIG91ciBiZXN0ICovCisgICAgdi0+dCA9IChvMi0+dCArIGQxLT50KSAvIDI7
CisgIH0gZWxzZSBpZiggVHJhbnNMZXEoIGQxLCBkMiApKSB7CisgICAgLyogSW50ZXJwb2xhdGUg
YmV0d2VlbiBvMiBhbmQgZDEgKi8KKyAgICB6MSA9IFRyYW5zRXZhbCggbzEsIG8yLCBkMSApOwor
ICAgIHoyID0gVHJhbnNFdmFsKCBvMiwgZDEsIGQyICk7CisgICAgaWYoIHoxK3oyIDwgMCApIHsg
ejEgPSAtejE7IHoyID0gLXoyOyB9CisgICAgdi0+dCA9IEludGVycG9sYXRlKCB6MSwgbzItPnQs
IHoyLCBkMS0+dCApOworICB9IGVsc2UgeworICAgIC8qIEludGVycG9sYXRlIGJldHdlZW4gbzIg
YW5kIGQyICovCisgICAgejEgPSBUcmFuc1NpZ24oIG8xLCBvMiwgZDEgKTsKKyAgICB6MiA9IC1U
cmFuc1NpZ24oIG8xLCBkMiwgZDEgKTsKKyAgICBpZiggejErejIgPCAwICkgeyB6MSA9IC16MTsg
ejIgPSAtejI7IH0KKyAgICB2LT50ID0gSW50ZXJwb2xhdGUoIHoxLCBvMi0+dCwgejIsIGQyLT50
ICk7CisgIH0KK30KSW5kZXg6IFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOTAgQEAKKy8qCisqKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0
byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKKyoqIG1hZGUgc3ViamVjdCB0
byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKKyoq
IFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29u
dGVudHMgb2YgdGhpcworKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKKyoqIHRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKKyoqIG9m
IHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZp
Y2VzLCAxNjAwCisqKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQw
NDMtMTM1MSwgb3IgYXQ6CisqKiAKKyoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVl
QgorKiogCisqKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29m
dHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVY
UFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUworKiogRElTQ0xBSU1F
RCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMg
QU5ECisqKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJ
VFksIEZJVE5FU1MgRk9SIEEKKyoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5H
RU1FTlQuCisqKiAKKyoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVu
R0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAorKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFu
dWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCisqKiBJbmMuIFRo
ZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhp
Y3MsIEluYy4KKyoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBw
YXJ0aWVzIGlzIGFzIGluZGljYXRlZAorKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyoqIAorKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxp
Y2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKKyoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBj
b25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKKyoqIE9wZW5HTChSKSBH
cmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2Vk
CisqKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5
IExpYnJhcnkgKFZlcnNpb24KKyoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFu
ZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAorKiogV2luZG93IFN5c3RlbShSKSAoVmVy
c2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCisqKiB3
YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxl
bWVudGF0aW9uCisqKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5k
ZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKKyoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikg
dmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgorKioKKyovCisvKgorKiogQXV0aG9yOiBFcmlj
IFZlYWNoLCBKdWx5IDE5OTQuCisqKgorKiogJERhdGUkICRSZXZpc2lvbiQKKyoqICRIZWFkZXI6
IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL2dlb20uaCM1ICQKKyovCisKKyNpZm5k
ZWYgX19nZW9tX2hfCisjZGVmaW5lIF9fZ2VvbV9oXworCisjaW5jbHVkZSAiM3JkcGFydHkvZ2x1
L2xpYnRlc3MvbWVzaC5oIgorCisjaWZkZWYgTk9fQlJBTkNIX0NPTkRJVElPTlMKKy8qIE1JUFMg
YXJjaGl0ZWN0dXJlIGhhcyBzcGVjaWFsIGluc3RydWN0aW9ucyB0byBldmFsdWF0ZSBib29sZWFu
CisgKiBjb25kaXRpb25zIC0tIG1vcmUgZWZmaWNpZW50IHRoYW4gYnJhbmNoaW5nLCBJRiB5b3Ug
Y2FuIGdldCB0aGUKKyAqIGNvbXBpbGVyIHRvIGdlbmVyYXRlIHRoZSByaWdodCBpbnN0cnVjdGlv
bnMgKFNHSSBjb21waWxlciBkb2Vzbid0KQorICovCisjZGVmaW5lIFZlcnRFcSh1LHYpCSgoKHUp
LT5zID09ICh2KS0+cykgJiAoKHUpLT50ID09ICh2KS0+dCkpCisjZGVmaW5lIFZlcnRMZXEodSx2
KQkoKCh1KS0+cyA8ICh2KS0+cykgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKCh1KS0+
cyA9PSAodiktPnMgJiAodSktPnQgPD0gKHYpLT50KSkKKyNlbHNlCisjZGVmaW5lIFZlcnRFcSh1
LHYpCSgodSktPnMgPT0gKHYpLT5zICYmICh1KS0+dCA9PSAodiktPnQpCisjZGVmaW5lIFZlcnRM
ZXEodSx2KQkoKCh1KS0+cyA8ICh2KS0+cykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICgodSktPnMgPT0gKHYpLT5zICYmICh1KS0+dCA8PSAodiktPnQpKQorI2VuZGlmCisKKyNkZWZp
bmUgRWRnZUV2YWwodSx2LHcpCV9fZ2xfZWRnZUV2YWwodSx2LHcpCisjZGVmaW5lIEVkZ2VTaWdu
KHUsdix3KQlfX2dsX2VkZ2VTaWduKHUsdix3KQorCisvKiBWZXJzaW9ucyBvZiBWZXJ0TGVxLCBF
ZGdlU2lnbiwgRWRnZUV2YWwgd2l0aCBzIGFuZCB0IHRyYW5zcG9zZWQuICovCisKKyNkZWZpbmUg
VHJhbnNMZXEodSx2KQkoKCh1KS0+dCA8ICh2KS0+dCkgfHwgXAorICAgICAgICAgICAgICAgICAg
ICAgICAgICgodSktPnQgPT0gKHYpLT50ICYmICh1KS0+cyA8PSAodiktPnMpKQorI2RlZmluZSBU
cmFuc0V2YWwodSx2LHcpCV9fZ2xfdHJhbnNFdmFsKHUsdix3KQorI2RlZmluZSBUcmFuc1NpZ24o
dSx2LHcpCV9fZ2xfdHJhbnNTaWduKHUsdix3KQorCisKKyNkZWZpbmUgRWRnZUdvZXNMZWZ0KGUp
CQlWZXJ0TGVxKCAoZSktPkRzdCwgKGUpLT5PcmcgKQorI2RlZmluZSBFZGdlR29lc1JpZ2h0KGUp
CVZlcnRMZXEoIChlKS0+T3JnLCAoZSktPkRzdCApCisKKyNkZWZpbmUgQUJTKHgpCSgoeCkgPCAw
ID8gLSh4KSA6ICh4KSkKKyNkZWZpbmUgVmVydEwxZGlzdCh1LHYpCShBQlModS0+cyAtIHYtPnMp
ICsgQUJTKHUtPnQgLSB2LT50KSkKKworI2RlZmluZSBWZXJ0Q0NXKHUsdix3KQlfX2dsX3ZlcnRD
Q1codSx2LHcpCisKK2ludAkJX19nbF92ZXJ0TGVxKCBHTFV2ZXJ0ZXggKnUsIEdMVXZlcnRleCAq
diApOworR0xkb3VibGUJX19nbF9lZGdlRXZhbCggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYs
IEdMVXZlcnRleCAqdyApOworR0xkb3VibGUJX19nbF9lZGdlU2lnbiggR0xVdmVydGV4ICp1LCBH
TFV2ZXJ0ZXggKnYsIEdMVXZlcnRleCAqdyApOworR0xkb3VibGUJX19nbF90cmFuc0V2YWwoIEdM
VXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKTsKK0dMZG91YmxlCV9fZ2xf
dHJhbnNTaWduKCBHTFV2ZXJ0ZXggKnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICk7Citp
bnQJCV9fZ2xfdmVydENDVyggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdMVXZlcnRleCAq
dyApOwordm9pZAkJX19nbF9lZGdlSW50ZXJzZWN0KCBHTFV2ZXJ0ZXggKm8xLCBHTFV2ZXJ0ZXgg
KmQxLAorCQkJCSAgICBHTFV2ZXJ0ZXggKm8yLCBHTFV2ZXJ0ZXggKmQyLAorCQkJCSAgICBHTFV2
ZXJ0ZXggKnYgKTsKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNz
L21lbWFsbG9jLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9t
ZW1hbGxvYy5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9t
ZW1hbGxvYy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorKiogTGljZW5zZSBB
cHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUg
YXJlCisqKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0
ZWQgaW4gdGhlIFNHSSBGcmVlCisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0
aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qg
b25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisq
KiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1h
eSBvYnRhaW4gYSBjb3B5CisqKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJ
bmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXks
IE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRwOi8vb3Nz
LnNnaS5jb20vcHJvamVjdHMvRnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBp
biB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMg
SVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENP
TkRJVElPTlMKKyoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBB
TlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJ
VFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBV
UlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUg
T3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNp
b24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29u
IEdyYXBoaWNzLAorKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5
OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRp
b25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVy
ZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNl
IFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBl
c3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBh
cmUgVGhlCisqKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZl
cnNpb24gMS4yLjEpLCByZWxlYXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBH
cmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNl
ZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoq
IFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5
OC4gVGhpcyBzb2Z0d2FyZQorKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJz
aW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0
IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlh
bnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisq
LworLyoKKyoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICREYXRlJCAk
UmV2aXNpb24kCisqKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9t
ZW1hbGxvYy5jIzUgJAorKi8KKworI2luY2x1ZGUgInN0cmluZy5oIgorI2luY2x1ZGUgIjNyZHBh
cnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgiCisKK2ludCBfX2dsX21lbUluaXQoIHNpemVfdCBt
YXhGYXN0ICkKK3sKKyNpZm5kZWYgTk9fTUFMTE9QVAorLyogIG1hbGxvcHQoIE1fTVhGQVNULCBt
YXhGYXN0ICk7Ki8KKyNpZmRlZiBNRU1PUllfREVCVUcKKyAgbWFsbG9wdCggTV9ERUJVRywgMSAp
OworI2VuZGlmCisjZW5kaWYKKyAgIHJldHVybiAxOworfQorCisjaWZkZWYgTUVNT1JZX0RFQlVH
Cit2b2lkICpfX2dsX21lbUFsbG9jKCBzaXplX3QgbiApCit7CisgIHJldHVybiBtZW1zZXQoIG1h
bGxvYyggbiApLCAweGE1LCBuICk7Cit9CisjZW5kaWYKKwpJbmRleDogV2ViQ29yZS8zcmRwYXJ0
eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvM3JkcGFydHkv
Z2x1L2xpYnRlc3MvbWVtYWxsb2MuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvM3JkcGFydHkv
Z2x1L2xpYnRlc3MvbWVtYWxsb2MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoK
KyoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMg
b2YgdGhpcyBmaWxlIGFyZQorKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vu
c2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBW
ZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxl
IGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBt
YXkgbm90IHVzZQorKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp
Y2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNv
biBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhl
YXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAor
KiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwg
YXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBv
biBhbgorKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJS
QU5USUVTIEFORCBDT05ESVRJT05TCisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQg
TElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0Yg
TUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiog
UEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2lu
YWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRp
b24sCisqKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9w
ZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29w
eXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0
IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVk
CisqKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRp
dGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50
ZXJmYWNlcworKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9y
aWdpbmFsIENvZGUgYXJlIFRoZQorKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVj
aWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRo
ZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiog
MS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3
aXRoIHRoZSBYCisqKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9j
dG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBP
cGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hl
ZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWlu
ZworKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmlj
YXRpb24uCisqKgorKi8KKy8qCisqKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoq
CisqKiAkRGF0ZSQgJFJldmlzaW9uJAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIv
Z2x1L2xpYnRlc3MvbWVtYWxsb2MuaCM1ICQKKyovCisKKyNpZm5kZWYgX19tZW1hbGxvY19zaW1w
bGVfaF8KKyNkZWZpbmUgX19tZW1hbGxvY19zaW1wbGVfaF8KKworI2luY2x1ZGUgPHN0ZGxpYi5o
PgorCisjZGVmaW5lIG1lbVJlYWxsb2MJcmVhbGxvYworI2RlZmluZSBtZW1GcmVlCQlmcmVlCisK
KyNkZWZpbmUgbWVtSW5pdAkJX19nbF9tZW1Jbml0CisvKmV4dGVybiB2b2lkCQlfX2dsX21lbUlu
aXQoIHNpemVfdCApOyovCitleHRlcm4gaW50CQlfX2dsX21lbUluaXQoIHNpemVfdCApOworCisj
aWZuZGVmIE1FTU9SWV9ERUJVRworI2RlZmluZSBtZW1BbGxvYwltYWxsb2MKKyNlbHNlCisjZGVm
aW5lIG1lbUFsbG9jCV9fZ2xfbWVtQWxsb2MKK2V4dGVybiB2b2lkICoJCV9fZ2xfbWVtQWxsb2Mo
IHNpemVfdCApOworI2VuZGlmCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS8zcmRwYXJ0eS9nbHUv
bGlidGVzcy9tZXNoLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVz
cy9tZXNoLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL21l
c2guYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OTYgQEAKKy8qCisqKiBMaWNlbnNlIEFwcGxp
Y2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUK
KyoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBp
biB0aGUgU0dJIEZyZWUKKyoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAi
TGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcworKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5
IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKKyoqIHRo
aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkKKyoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4s
IGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCisqKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91
bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6CisqKiAKKyoqIGh0dHA6Ly9vc3Muc2dp
LmNvbS9wcm9qZWN0cy9GcmVlQgorKiogCisqKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRo
ZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyoqICJBUyBJUyIg
YmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElU
SU9OUworKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJ
TVBMSUVEIFdBUlJBTlRJRVMgQU5ECisqKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwg
U0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKKyoqIFBBUlRJQ1VMQVIgUFVSUE9T
RSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisqKiAKKyoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmln
aW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAorKiogVmVyc2lvbiAx
LjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3Jh
cGhpY3MsCisqKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0y
MDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMg
Y3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAorKiogZWxzZXdoZXJlIGhl
cmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqIAorKiogQWRkaXRpb25hbCBOb3RpY2UgUHJv
dmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKKyoqIGVzdGFi
bGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBU
aGUKKyoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lv
biAxLjIuMSksIHJlbGVhc2VkCisqKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBo
aWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KKyoqIDEuMyksIHJlbGVhc2VkIE5v
dmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAorKiogV2lu
ZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBU
aGlzIHNvZnR3YXJlCisqKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24g
MS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCisqKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFz
IG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKKyoqIGNvbXBsaWFudCB3
aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgorKioKKyovCisv
KgorKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCisqKgorKiogJERhdGUkICRSZXZp
c2lvbiQKKyoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL21lc2gu
YyM2ICQKKyovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNp
bmNsdWRlICIzcmRwYXJ0eS9nbHUvZ2x1b3MuaCIKKyNpbmNsdWRlICIzcmRwYXJ0eS9nbHUvbGli
dGVzcy9tZW1hbGxvYy5oIgorI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIK
KworI2RlZmluZSBUUlVFIDEKKyNkZWZpbmUgRkFMU0UgMAorCitzdGF0aWMgR0xVdmVydGV4ICph
bGxvY1ZlcnRleCgpCit7CisgICByZXR1cm4gKEdMVXZlcnRleCAqKW1lbUFsbG9jKCBzaXplb2Yo
IEdMVXZlcnRleCApKTsKK30KKworc3RhdGljIEdMVWZhY2UgKmFsbG9jRmFjZSgpCit7CisgICBy
ZXR1cm4gKEdMVWZhY2UgKiltZW1BbGxvYyggc2l6ZW9mKCBHTFVmYWNlICkpOworfQorCisvKioq
KioqKioqKioqKioqKioqKioqKioqIFV0aWxpdHkgUm91dGluZXMgKioqKioqKioqKioqKioqKioq
KioqKioqLworCisvKiBBbGxvY2F0ZSBhbmQgZnJlZSBoYWxmLWVkZ2VzIGluIHBhaXJzIGZvciBl
ZmZpY2llbmN5LgorICogVGhlICpvbmx5KiBwbGFjZSB0aGF0IHNob3VsZCB1c2UgdGhpcyBmYWN0
IGlzIGFsbG9jYXRpb24vZnJlZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyBHTFVoYWxmRWRnZSBl
LCBlU3ltOyB9IEVkZ2VQYWlyOworCisvKiBNYWtlRWRnZSBjcmVhdGVzIGEgbmV3IHBhaXIgb2Yg
aGFsZi1lZGdlcyB3aGljaCBmb3JtIHRoZWlyIG93biBsb29wLgorICogTm8gdmVydGV4IG9yIGZh
Y2Ugc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLCBidXQgdGhlc2UgbXVzdCBiZSBhc3NpZ25lZAor
ICogYmVmb3JlIHRoZSBjdXJyZW50IGVkZ2Ugb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC4KKyAqLwor
c3RhdGljIEdMVWhhbGZFZGdlICpNYWtlRWRnZSggR0xVaGFsZkVkZ2UgKmVOZXh0ICkKK3sKKyAg
R0xVaGFsZkVkZ2UgKmU7CisgIEdMVWhhbGZFZGdlICplU3ltOworICBHTFVoYWxmRWRnZSAqZVBy
ZXY7CisgIEVkZ2VQYWlyICpwYWlyID0gKEVkZ2VQYWlyICopbWVtQWxsb2MoIHNpemVvZiggRWRn
ZVBhaXIgKSk7CisgIGlmIChwYWlyID09IE5VTEwpIHJldHVybiBOVUxMOworCisgIGUgPSAmcGFp
ci0+ZTsKKyAgZVN5bSA9ICZwYWlyLT5lU3ltOworCisgIC8qIE1ha2Ugc3VyZSBlTmV4dCBwb2lu
dHMgdG8gdGhlIGZpcnN0IGVkZ2Ugb2YgdGhlIGVkZ2UgcGFpciAqLworICBpZiggZU5leHQtPlN5
bSA8IGVOZXh0ICkgeyBlTmV4dCA9IGVOZXh0LT5TeW07IH0KKworICAvKiBJbnNlcnQgaW4gY2ly
Y3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGJlZm9yZSBlTmV4dC4KKyAgICogTm90ZSB0aGF0IHRo
ZSBwcmV2IHBvaW50ZXIgaXMgc3RvcmVkIGluIFN5bS0+bmV4dC4KKyAgICovCisgIGVQcmV2ID0g
ZU5leHQtPlN5bS0+bmV4dDsKKyAgZVN5bS0+bmV4dCA9IGVQcmV2OworICBlUHJldi0+U3ltLT5u
ZXh0ID0gZTsKKyAgZS0+bmV4dCA9IGVOZXh0OworICBlTmV4dC0+U3ltLT5uZXh0ID0gZVN5bTsK
KworICBlLT5TeW0gPSBlU3ltOworICBlLT5PbmV4dCA9IGU7CisgIGUtPkxuZXh0ID0gZVN5bTsK
KyAgZS0+T3JnID0gTlVMTDsKKyAgZS0+TGZhY2UgPSBOVUxMOworICBlLT53aW5kaW5nID0gMDsK
KyAgZS0+YWN0aXZlUmVnaW9uID0gTlVMTDsKKworICBlU3ltLT5TeW0gPSBlOworICBlU3ltLT5P
bmV4dCA9IGVTeW07CisgIGVTeW0tPkxuZXh0ID0gZTsKKyAgZVN5bS0+T3JnID0gTlVMTDsKKyAg
ZVN5bS0+TGZhY2UgPSBOVUxMOworICBlU3ltLT53aW5kaW5nID0gMDsKKyAgZVN5bS0+YWN0aXZl
UmVnaW9uID0gTlVMTDsKKworICByZXR1cm4gZTsKK30KKworLyogU3BsaWNlKCBhLCBiICkgaXMg
YmVzdCBkZXNjcmliZWQgYnkgdGhlIEd1aWJhcy9TdG9sZmkgcGFwZXIgb3IgdGhlCisgKiBDUzM0
OGEgbm90ZXMgKHNlZSBtZXNoLmgpLiAgQmFzaWNhbGx5IGl0IG1vZGlmaWVzIHRoZSBtZXNoIHNv
IHRoYXQKKyAqIGEtPk9uZXh0IGFuZCBiLT5PbmV4dCBhcmUgZXhjaGFuZ2VkLiAgVGhpcyBjYW4g
aGF2ZSB2YXJpb3VzIGVmZmVjdHMKKyAqIGRlcGVuZGluZyBvbiB3aGV0aGVyIGEgYW5kIGIgYmVs
b25nIHRvIGRpZmZlcmVudCBmYWNlIG9yIHZlcnRleCByaW5ncy4KKyAqIEZvciBtb3JlIGV4cGxh
bmF0aW9uIHNlZSBfX2dsX21lc2hTcGxpY2UoKSBiZWxvdy4KKyAqLworc3RhdGljIHZvaWQgU3Bs
aWNlKCBHTFVoYWxmRWRnZSAqYSwgR0xVaGFsZkVkZ2UgKmIgKQoreworICBHTFVoYWxmRWRnZSAq
YU9uZXh0ID0gYS0+T25leHQ7CisgIEdMVWhhbGZFZGdlICpiT25leHQgPSBiLT5PbmV4dDsKKwor
ICBhT25leHQtPlN5bS0+TG5leHQgPSBiOworICBiT25leHQtPlN5bS0+TG5leHQgPSBhOworICBh
LT5PbmV4dCA9IGJPbmV4dDsKKyAgYi0+T25leHQgPSBhT25leHQ7Cit9CisKKy8qIE1ha2VWZXJ0
ZXgoIG5ld1ZlcnRleCwgZU9yaWcsIHZOZXh0ICkgYXR0YWNoZXMgYSBuZXcgdmVydGV4IGFuZCBt
YWtlcyBpdCB0aGUKKyAqIG9yaWdpbiBvZiBhbGwgZWRnZXMgaW4gdGhlIHZlcnRleCBsb29wIHRv
IHdoaWNoIGVPcmlnIGJlbG9uZ3MuICJ2TmV4dCIgZ2l2ZXMKKyAqIGEgcGxhY2UgdG8gaW5zZXJ0
IHRoZSBuZXcgdmVydGV4IGluIHRoZSBnbG9iYWwgdmVydGV4IGxpc3QuICBXZSBpbnNlcnQKKyAq
IHRoZSBuZXcgdmVydGV4ICpiZWZvcmUqIHZOZXh0IHNvIHRoYXQgYWxnb3JpdGhtcyB3aGljaCB3
YWxrIHRoZSB2ZXJ0ZXgKKyAqIGxpc3Qgd2lsbCBub3Qgc2VlIHRoZSBuZXdseSBjcmVhdGVkIHZl
cnRpY2VzLgorICovCitzdGF0aWMgdm9pZCBNYWtlVmVydGV4KCBHTFV2ZXJ0ZXggKm5ld1ZlcnRl
eCwgCisJCQlHTFVoYWxmRWRnZSAqZU9yaWcsIEdMVXZlcnRleCAqdk5leHQgKQoreworICBHTFVo
YWxmRWRnZSAqZTsKKyAgR0xVdmVydGV4ICp2UHJldjsKKyAgR0xVdmVydGV4ICp2TmV3ID0gbmV3
VmVydGV4OworCisgIGFzc2VydCh2TmV3ICE9IE5VTEwpOworCisgIC8qIGluc2VydCBpbiBjaXJj
dWxhciBkb3VibHktbGlua2VkIGxpc3QgYmVmb3JlIHZOZXh0ICovCisgIHZQcmV2ID0gdk5leHQt
PnByZXY7CisgIHZOZXctPnByZXYgPSB2UHJldjsKKyAgdlByZXYtPm5leHQgPSB2TmV3OworICB2
TmV3LT5uZXh0ID0gdk5leHQ7CisgIHZOZXh0LT5wcmV2ID0gdk5ldzsKKworICB2TmV3LT5hbkVk
Z2UgPSBlT3JpZzsKKyAgdk5ldy0+ZGF0YSA9IE5VTEw7CisgIC8qIGxlYXZlIGNvb3Jkcywgcywg
dCB1bmRlZmluZWQgKi8KKworICAvKiBmaXggb3RoZXIgZWRnZXMgb24gdGhpcyB2ZXJ0ZXggbG9v
cCAqLworICBlID0gZU9yaWc7CisgIGRvIHsKKyAgICBlLT5PcmcgPSB2TmV3OworICAgIGUgPSBl
LT5PbmV4dDsKKyAgfSB3aGlsZSggZSAhPSBlT3JpZyApOworfQorCisvKiBNYWtlRmFjZSggbmV3
RmFjZSwgZU9yaWcsIGZOZXh0ICkgYXR0YWNoZXMgYSBuZXcgZmFjZSBhbmQgbWFrZXMgaXQgdGhl
IGxlZnQKKyAqIGZhY2Ugb2YgYWxsIGVkZ2VzIGluIHRoZSBmYWNlIGxvb3AgdG8gd2hpY2ggZU9y
aWcgYmVsb25ncy4gICJmTmV4dCIgZ2l2ZXMKKyAqIGEgcGxhY2UgdG8gaW5zZXJ0IHRoZSBuZXcg
ZmFjZSBpbiB0aGUgZ2xvYmFsIGZhY2UgbGlzdC4gIFdlIGluc2VydAorICogdGhlIG5ldyBmYWNl
ICpiZWZvcmUqIGZOZXh0IHNvIHRoYXQgYWxnb3JpdGhtcyB3aGljaCB3YWxrIHRoZSBmYWNlCisg
KiBsaXN0IHdpbGwgbm90IHNlZSB0aGUgbmV3bHkgY3JlYXRlZCBmYWNlcy4KKyAqLworc3RhdGlj
IHZvaWQgTWFrZUZhY2UoIEdMVWZhY2UgKm5ld0ZhY2UsIEdMVWhhbGZFZGdlICplT3JpZywgR0xV
ZmFjZSAqZk5leHQgKQoreworICBHTFVoYWxmRWRnZSAqZTsKKyAgR0xVZmFjZSAqZlByZXY7Cisg
IEdMVWZhY2UgKmZOZXcgPSBuZXdGYWNlOworCisgIGFzc2VydChmTmV3ICE9IE5VTEwpOyAKKwor
ICAvKiBpbnNlcnQgaW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGJlZm9yZSBmTmV4dCAq
LworICBmUHJldiA9IGZOZXh0LT5wcmV2OworICBmTmV3LT5wcmV2ID0gZlByZXY7CisgIGZQcmV2
LT5uZXh0ID0gZk5ldzsKKyAgZk5ldy0+bmV4dCA9IGZOZXh0OworICBmTmV4dC0+cHJldiA9IGZO
ZXc7CisKKyAgZk5ldy0+YW5FZGdlID0gZU9yaWc7CisgIGZOZXctPmRhdGEgPSBOVUxMOworICBm
TmV3LT50cmFpbCA9IE5VTEw7CisgIGZOZXctPm1hcmtlZCA9IEZBTFNFOworCisgIC8qIFRoZSBu
ZXcgZmFjZSBpcyBtYXJrZWQgImluc2lkZSIgaWYgdGhlIG9sZCBvbmUgd2FzLiAgVGhpcyBpcyBh
CisgICAqIGNvbnZlbmllbmNlIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgYSBmYWNlIGhhcyBi
ZWVuIHNwbGl0IGluIHR3by4KKyAgICovCisgIGZOZXctPmluc2lkZSA9IGZOZXh0LT5pbnNpZGU7
CisKKyAgLyogZml4IG90aGVyIGVkZ2VzIG9uIHRoaXMgZmFjZSBsb29wICovCisgIGUgPSBlT3Jp
ZzsKKyAgZG8geworICAgIGUtPkxmYWNlID0gZk5ldzsKKyAgICBlID0gZS0+TG5leHQ7CisgIH0g
d2hpbGUoIGUgIT0gZU9yaWcgKTsKK30KKworLyogS2lsbEVkZ2UoIGVEZWwgKSBkZXN0cm95cyBh
biBlZGdlICh0aGUgaGFsZi1lZGdlcyBlRGVsIGFuZCBlRGVsLT5TeW0pLAorICogYW5kIHJlbW92
ZXMgZnJvbSB0aGUgZ2xvYmFsIGVkZ2UgbGlzdC4KKyAqLworc3RhdGljIHZvaWQgS2lsbEVkZ2Uo
IEdMVWhhbGZFZGdlICplRGVsICkKK3sKKyAgR0xVaGFsZkVkZ2UgKmVQcmV2LCAqZU5leHQ7CisK
KyAgLyogSGFsZi1lZGdlcyBhcmUgYWxsb2NhdGVkIGluIHBhaXJzLCBzZWUgRWRnZVBhaXIgYWJv
dmUgKi8KKyAgaWYoIGVEZWwtPlN5bSA8IGVEZWwgKSB7IGVEZWwgPSBlRGVsLT5TeW07IH0KKwor
ICAvKiBkZWxldGUgZnJvbSBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgKi8KKyAgZU5leHQg
PSBlRGVsLT5uZXh0OworICBlUHJldiA9IGVEZWwtPlN5bS0+bmV4dDsKKyAgZU5leHQtPlN5bS0+
bmV4dCA9IGVQcmV2OworICBlUHJldi0+U3ltLT5uZXh0ID0gZU5leHQ7CisKKyAgbWVtRnJlZSgg
ZURlbCApOworfQorCisKKy8qIEtpbGxWZXJ0ZXgoIHZEZWwgKSBkZXN0cm95cyBhIHZlcnRleCBh
bmQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBnbG9iYWwKKyAqIHZlcnRleCBsaXN0LiAgSXQgdXBkYXRl
cyB0aGUgdmVydGV4IGxvb3AgdG8gcG9pbnQgdG8gYSBnaXZlbiBuZXcgdmVydGV4LgorICovCitz
dGF0aWMgdm9pZCBLaWxsVmVydGV4KCBHTFV2ZXJ0ZXggKnZEZWwsIEdMVXZlcnRleCAqbmV3T3Jn
ICkKK3sKKyAgR0xVaGFsZkVkZ2UgKmUsICplU3RhcnQgPSB2RGVsLT5hbkVkZ2U7CisgIEdMVXZl
cnRleCAqdlByZXYsICp2TmV4dDsKKworICAvKiBjaGFuZ2UgdGhlIG9yaWdpbiBvZiBhbGwgYWZm
ZWN0ZWQgZWRnZXMgKi8KKyAgZSA9IGVTdGFydDsKKyAgZG8geworICAgIGUtPk9yZyA9IG5ld09y
ZzsKKyAgICBlID0gZS0+T25leHQ7CisgIH0gd2hpbGUoIGUgIT0gZVN0YXJ0ICk7CisKKyAgLyog
ZGVsZXRlIGZyb20gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0ICovCisgIHZQcmV2ID0gdkRl
bC0+cHJldjsKKyAgdk5leHQgPSB2RGVsLT5uZXh0OworICB2TmV4dC0+cHJldiA9IHZQcmV2Owor
ICB2UHJldi0+bmV4dCA9IHZOZXh0OworCisgIG1lbUZyZWUoIHZEZWwgKTsKK30KKworLyogS2ls
bEZhY2UoIGZEZWwgKSBkZXN0cm95cyBhIGZhY2UgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgZ2xv
YmFsIGZhY2UKKyAqIGxpc3QuICBJdCB1cGRhdGVzIHRoZSBmYWNlIGxvb3AgdG8gcG9pbnQgdG8g
YSBnaXZlbiBuZXcgZmFjZS4KKyAqLworc3RhdGljIHZvaWQgS2lsbEZhY2UoIEdMVWZhY2UgKmZE
ZWwsIEdMVWZhY2UgKm5ld0xmYWNlICkKK3sKKyAgR0xVaGFsZkVkZ2UgKmUsICplU3RhcnQgPSBm
RGVsLT5hbkVkZ2U7CisgIEdMVWZhY2UgKmZQcmV2LCAqZk5leHQ7CisKKyAgLyogY2hhbmdlIHRo
ZSBsZWZ0IGZhY2Ugb2YgYWxsIGFmZmVjdGVkIGVkZ2VzICovCisgIGUgPSBlU3RhcnQ7CisgIGRv
IHsKKyAgICBlLT5MZmFjZSA9IG5ld0xmYWNlOworICAgIGUgPSBlLT5MbmV4dDsKKyAgfSB3aGls
ZSggZSAhPSBlU3RhcnQgKTsKKworICAvKiBkZWxldGUgZnJvbSBjaXJjdWxhciBkb3VibHktbGlu
a2VkIGxpc3QgKi8KKyAgZlByZXYgPSBmRGVsLT5wcmV2OworICBmTmV4dCA9IGZEZWwtPm5leHQ7
CisgIGZOZXh0LT5wcmV2ID0gZlByZXY7CisgIGZQcmV2LT5uZXh0ID0gZk5leHQ7CisKKyAgbWVt
RnJlZSggZkRlbCApOworfQorCisKKy8qKioqKioqKioqKioqKioqKiogQmFzaWMgRWRnZSBPcGVy
YXRpb25zICoqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIF9fZ2xfbWVzaE1ha2VFZGdlIGNy
ZWF0ZXMgb25lIGVkZ2UsIHR3byB2ZXJ0aWNlcywgYW5kIGEgbG9vcCAoZmFjZSkuCisgKiBUaGUg
bG9vcCBjb25zaXN0cyBvZiB0aGUgdHdvIG5ldyBoYWxmLWVkZ2VzLgorICovCitHTFVoYWxmRWRn
ZSAqX19nbF9tZXNoTWFrZUVkZ2UoIEdMVW1lc2ggKm1lc2ggKQoreworICBHTFV2ZXJ0ZXggKm5l
d1ZlcnRleDE9IGFsbG9jVmVydGV4KCk7CisgIEdMVXZlcnRleCAqbmV3VmVydGV4Mj0gYWxsb2NW
ZXJ0ZXgoKTsKKyAgR0xVZmFjZSAqbmV3RmFjZT0gYWxsb2NGYWNlKCk7CisgIEdMVWhhbGZFZGdl
ICplOworCisgIC8qIGlmIGFueSBvbmUgaXMgbnVsbCB0aGVuIGFsbCBnZXQgZnJlZWQgKi8KKyAg
aWYgKG5ld1ZlcnRleDEgPT0gTlVMTCB8fCBuZXdWZXJ0ZXgyID09IE5VTEwgfHwgbmV3RmFjZSA9
PSBOVUxMKSB7CisgICAgIGlmIChuZXdWZXJ0ZXgxICE9IE5VTEwpIG1lbUZyZWUobmV3VmVydGV4
MSk7CisgICAgIGlmIChuZXdWZXJ0ZXgyICE9IE5VTEwpIG1lbUZyZWUobmV3VmVydGV4Mik7Cisg
ICAgIGlmIChuZXdGYWNlICE9IE5VTEwpIG1lbUZyZWUobmV3RmFjZSk7ICAgICAKKyAgICAgcmV0
dXJuIE5VTEw7CisgIH0gCisKKyAgZSA9IE1ha2VFZGdlKCAmbWVzaC0+ZUhlYWQgKTsKKyAgaWYg
KGUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKyAgTWFrZVZlcnRleCggbmV3VmVydGV4MSwgZSwg
Jm1lc2gtPnZIZWFkICk7CisgIE1ha2VWZXJ0ZXgoIG5ld1ZlcnRleDIsIGUtPlN5bSwgJm1lc2gt
PnZIZWFkICk7CisgIE1ha2VGYWNlKCBuZXdGYWNlLCBlLCAmbWVzaC0+ZkhlYWQgKTsKKyAgcmV0
dXJuIGU7Cit9CisgIAorCisvKiBfX2dsX21lc2hTcGxpY2UoIGVPcmcsIGVEc3QgKSBpcyB0aGUg
YmFzaWMgb3BlcmF0aW9uIGZvciBjaGFuZ2luZyB0aGUKKyAqIG1lc2ggY29ubmVjdGl2aXR5IGFu
ZCB0b3BvbG9neS4gIEl0IGNoYW5nZXMgdGhlIG1lc2ggc28gdGhhdAorICoJZU9yZy0+T25leHQg
PC0gT0xEKCBlRHN0LT5PbmV4dCApCisgKgllRHN0LT5PbmV4dCA8LSBPTEQoIGVPcmctPk9uZXh0
ICkKKyAqIHdoZXJlIE9MRCguLi4pIG1lYW5zIHRoZSB2YWx1ZSBiZWZvcmUgdGhlIG1lc2hTcGxp
Y2Ugb3BlcmF0aW9uLgorICoKKyAqIFRoaXMgY2FuIGhhdmUgdHdvIGVmZmVjdHMgb24gdGhlIHZl
cnRleCBzdHJ1Y3R1cmU6CisgKiAgLSBpZiBlT3JnLT5PcmcgIT0gZURzdC0+T3JnLCB0aGUgdHdv
IHZlcnRpY2VzIGFyZSBtZXJnZWQgdG9nZXRoZXIKKyAqICAtIGlmIGVPcmctPk9yZyA9PSBlRHN0
LT5PcmcsIHRoZSBvcmlnaW4gaXMgc3BsaXQgaW50byB0d28gdmVydGljZXMKKyAqIEluIGJvdGgg
Y2FzZXMsIGVEc3QtPk9yZyBpcyBjaGFuZ2VkIGFuZCBlT3JnLT5PcmcgaXMgdW50b3VjaGVkLgor
ICoKKyAqIFNpbWlsYXJseSAoYW5kIGluZGVwZW5kZW50bHkpIGZvciB0aGUgZmFjZSBzdHJ1Y3R1
cmUsCisgKiAgLSBpZiBlT3JnLT5MZmFjZSA9PSBlRHN0LT5MZmFjZSwgb25lIGxvb3AgaXMgc3Bs
aXQgaW50byB0d28KKyAqICAtIGlmIGVPcmctPkxmYWNlICE9IGVEc3QtPkxmYWNlLCB0d28gZGlz
dGluY3QgbG9vcHMgYXJlIGpvaW5lZCBpbnRvIG9uZQorICogSW4gYm90aCBjYXNlcywgZURzdC0+
TGZhY2UgaXMgY2hhbmdlZCBhbmQgZU9yZy0+TGZhY2UgaXMgdW5hZmZlY3RlZC4KKyAqCisgKiBT
b21lIHNwZWNpYWwgY2FzZXM6CisgKiBJZiBlRHN0ID09IGVPcmcsIHRoZSBvcGVyYXRpb24gaGFz
IG5vIGVmZmVjdC4KKyAqIElmIGVEc3QgPT0gZU9yZy0+TG5leHQsIHRoZSBuZXcgZmFjZSB3aWxs
IGhhdmUgYSBzaW5nbGUgZWRnZS4KKyAqIElmIGVEc3QgPT0gZU9yZy0+THByZXYsIHRoZSBvbGQg
ZmFjZSB3aWxsIGhhdmUgYSBzaW5nbGUgZWRnZS4KKyAqIElmIGVEc3QgPT0gZU9yZy0+T25leHQs
IHRoZSBuZXcgdmVydGV4IHdpbGwgaGF2ZSBhIHNpbmdsZSBlZGdlLgorICogSWYgZURzdCA9PSBl
T3JnLT5PcHJldiwgdGhlIG9sZCB2ZXJ0ZXggd2lsbCBoYXZlIGEgc2luZ2xlIGVkZ2UuCisgKi8K
K2ludCBfX2dsX21lc2hTcGxpY2UoIEdMVWhhbGZFZGdlICplT3JnLCBHTFVoYWxmRWRnZSAqZURz
dCApCit7CisgIGludCBqb2luaW5nTG9vcHMgPSBGQUxTRTsKKyAgaW50IGpvaW5pbmdWZXJ0aWNl
cyA9IEZBTFNFOworCisgIGlmKCBlT3JnID09IGVEc3QgKSByZXR1cm4gMTsKKworICBpZiggZURz
dC0+T3JnICE9IGVPcmctPk9yZyApIHsKKyAgICAvKiBXZSBhcmUgbWVyZ2luZyB0d28gZGlzam9p
bnQgdmVydGljZXMgLS0gZGVzdHJveSBlRHN0LT5PcmcgKi8KKyAgICBqb2luaW5nVmVydGljZXMg
PSBUUlVFOworICAgIEtpbGxWZXJ0ZXgoIGVEc3QtPk9yZywgZU9yZy0+T3JnICk7CisgIH0KKyAg
aWYoIGVEc3QtPkxmYWNlICE9IGVPcmctPkxmYWNlICkgeworICAgIC8qIFdlIGFyZSBjb25uZWN0
aW5nIHR3byBkaXNqb2ludCBsb29wcyAtLSBkZXN0cm95IGVEc3QtPkxmYWNlICovCisgICAgam9p
bmluZ0xvb3BzID0gVFJVRTsKKyAgICBLaWxsRmFjZSggZURzdC0+TGZhY2UsIGVPcmctPkxmYWNl
ICk7CisgIH0KKworICAvKiBDaGFuZ2UgdGhlIGVkZ2Ugc3RydWN0dXJlICovCisgIFNwbGljZSgg
ZURzdCwgZU9yZyApOworCisgIGlmKCAhIGpvaW5pbmdWZXJ0aWNlcyApIHsKKyAgICBHTFV2ZXJ0
ZXggKm5ld1ZlcnRleD0gYWxsb2NWZXJ0ZXgoKTsKKyAgICBpZiAobmV3VmVydGV4ID09IE5VTEwp
IHJldHVybiAwOworCisgICAgLyogV2Ugc3BsaXQgb25lIHZlcnRleCBpbnRvIHR3byAtLSB0aGUg
bmV3IHZlcnRleCBpcyBlRHN0LT5PcmcuCisgICAgICogTWFrZSBzdXJlIHRoZSBvbGQgdmVydGV4
IHBvaW50cyB0byBhIHZhbGlkIGhhbGYtZWRnZS4KKyAgICAgKi8KKyAgICBNYWtlVmVydGV4KCBu
ZXdWZXJ0ZXgsIGVEc3QsIGVPcmctPk9yZyApOworICAgIGVPcmctPk9yZy0+YW5FZGdlID0gZU9y
ZzsKKyAgfQorICBpZiggISBqb2luaW5nTG9vcHMgKSB7CisgICAgR0xVZmFjZSAqbmV3RmFjZT0g
YWxsb2NGYWNlKCk7ICAKKyAgICBpZiAobmV3RmFjZSA9PSBOVUxMKSByZXR1cm4gMDsKKworICAg
IC8qIFdlIHNwbGl0IG9uZSBsb29wIGludG8gdHdvIC0tIHRoZSBuZXcgbG9vcCBpcyBlRHN0LT5M
ZmFjZS4KKyAgICAgKiBNYWtlIHN1cmUgdGhlIG9sZCBmYWNlIHBvaW50cyB0byBhIHZhbGlkIGhh
bGYtZWRnZS4KKyAgICAgKi8KKyAgICBNYWtlRmFjZSggbmV3RmFjZSwgZURzdCwgZU9yZy0+TGZh
Y2UgKTsKKyAgICBlT3JnLT5MZmFjZS0+YW5FZGdlID0gZU9yZzsKKyAgfQorCisgIHJldHVybiAx
OworfQorCisKKy8qIF9fZ2xfbWVzaERlbGV0ZSggZURlbCApIHJlbW92ZXMgdGhlIGVkZ2UgZURl
bC4gIFRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzOgorICogaWYgKGVEZWwtPkxmYWNlICE9IGVEZWwt
PlJmYWNlKSwgd2Ugam9pbiB0d28gbG9vcHMgaW50byBvbmU7IHRoZSBsb29wCisgKiBlRGVsLT5M
ZmFjZSBpcyBkZWxldGVkLiAgT3RoZXJ3aXNlLCB3ZSBhcmUgc3BsaXR0aW5nIG9uZSBsb29wIGlu
dG8gdHdvOworICogdGhlIG5ld2x5IGNyZWF0ZWQgbG9vcCB3aWxsIGNvbnRhaW4gZURlbC0+RHN0
LiAgSWYgdGhlIGRlbGV0aW9uIG9mIGVEZWwKKyAqIHdvdWxkIGNyZWF0ZSBpc29sYXRlZCB2ZXJ0
aWNlcywgdGhvc2UgYXJlIGRlbGV0ZWQgYXMgd2VsbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNv
dWxkIGJlIGltcGxlbWVudGVkIGFzIHR3byBjYWxscyB0byBfX2dsX21lc2hTcGxpY2UKKyAqIHBs
dXMgYSBmZXcgY2FsbHMgdG8gbWVtRnJlZSwgYnV0IHRoaXMgd291bGQgYWxsb2NhdGUgYW5kIGRl
bGV0ZQorICogdW5uZWNlc3NhcnkgdmVydGljZXMgYW5kIGZhY2VzLgorICovCitpbnQgX19nbF9t
ZXNoRGVsZXRlKCBHTFVoYWxmRWRnZSAqZURlbCApCit7CisgIEdMVWhhbGZFZGdlICplRGVsU3lt
ID0gZURlbC0+U3ltOworICBpbnQgam9pbmluZ0xvb3BzID0gRkFMU0U7CisKKyAgLyogRmlyc3Qg
c3RlcDogZGlzY29ubmVjdCB0aGUgb3JpZ2luIHZlcnRleCBlRGVsLT5PcmcuICBXZSBtYWtlIGFs
bAorICAgKiBjaGFuZ2VzIHRvIGdldCBhIGNvbnNpc3RlbnQgbWVzaCBpbiB0aGlzICJpbnRlcm1l
ZGlhdGUiIHN0YXRlLgorICAgKi8KKyAgaWYoIGVEZWwtPkxmYWNlICE9IGVEZWwtPlJmYWNlICkg
eworICAgIC8qIFdlIGFyZSBqb2luaW5nIHR3byBsb29wcyBpbnRvIG9uZSAtLSByZW1vdmUgdGhl
IGxlZnQgZmFjZSAqLworICAgIGpvaW5pbmdMb29wcyA9IFRSVUU7CisgICAgS2lsbEZhY2UoIGVE
ZWwtPkxmYWNlLCBlRGVsLT5SZmFjZSApOworICB9CisKKyAgaWYoIGVEZWwtPk9uZXh0ID09IGVE
ZWwgKSB7CisgICAgS2lsbFZlcnRleCggZURlbC0+T3JnLCBOVUxMICk7CisgIH0gZWxzZSB7Cisg
ICAgLyogTWFrZSBzdXJlIHRoYXQgZURlbC0+T3JnIGFuZCBlRGVsLT5SZmFjZSBwb2ludCB0byB2
YWxpZCBoYWxmLWVkZ2VzICovCisgICAgZURlbC0+UmZhY2UtPmFuRWRnZSA9IGVEZWwtPk9wcmV2
OworICAgIGVEZWwtPk9yZy0+YW5FZGdlID0gZURlbC0+T25leHQ7CisKKyAgICBTcGxpY2UoIGVE
ZWwsIGVEZWwtPk9wcmV2ICk7CisgICAgaWYoICEgam9pbmluZ0xvb3BzICkgeworICAgICAgR0xV
ZmFjZSAqbmV3RmFjZT0gYWxsb2NGYWNlKCk7CisgICAgICBpZiAobmV3RmFjZSA9PSBOVUxMKSBy
ZXR1cm4gMDsgCisKKyAgICAgIC8qIFdlIGFyZSBzcGxpdHRpbmcgb25lIGxvb3AgaW50byB0d28g
LS0gY3JlYXRlIGEgbmV3IGxvb3AgZm9yIGVEZWwuICovCisgICAgICBNYWtlRmFjZSggbmV3RmFj
ZSwgZURlbCwgZURlbC0+TGZhY2UgKTsKKyAgICB9CisgIH0KKworICAvKiBDbGFpbTogdGhlIG1l
c2ggaXMgbm93IGluIGEgY29uc2lzdGVudCBzdGF0ZSwgZXhjZXB0IHRoYXQgZURlbC0+T3JnCisg
ICAqIG1heSBoYXZlIGJlZW4gZGVsZXRlZC4gIE5vdyB3ZSBkaXNjb25uZWN0IGVEZWwtPkRzdC4K
KyAgICovCisgIGlmKCBlRGVsU3ltLT5PbmV4dCA9PSBlRGVsU3ltICkgeworICAgIEtpbGxWZXJ0
ZXgoIGVEZWxTeW0tPk9yZywgTlVMTCApOworICAgIEtpbGxGYWNlKCBlRGVsU3ltLT5MZmFjZSwg
TlVMTCApOworICB9IGVsc2UgeworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IGVEZWwtPkRzdCBhbmQg
ZURlbC0+TGZhY2UgcG9pbnQgdG8gdmFsaWQgaGFsZi1lZGdlcyAqLworICAgIGVEZWwtPkxmYWNl
LT5hbkVkZ2UgPSBlRGVsU3ltLT5PcHJldjsKKyAgICBlRGVsU3ltLT5PcmctPmFuRWRnZSA9IGVE
ZWxTeW0tPk9uZXh0OworICAgIFNwbGljZSggZURlbFN5bSwgZURlbFN5bS0+T3ByZXYgKTsKKyAg
fQorCisgIC8qIEFueSBpc29sYXRlZCB2ZXJ0aWNlcyBvciBmYWNlcyBoYXZlIGFscmVhZHkgYmVl
biBmcmVlZC4gKi8KKyAgS2lsbEVkZ2UoIGVEZWwgKTsKKworICByZXR1cm4gMTsKK30KKworCisv
KioqKioqKioqKioqKioqKioqKiogT3RoZXIgRWRnZSBPcGVyYXRpb25zICoqKioqKioqKioqKioq
KioqKioqKiovCisKKy8qIEFsbCB0aGVzZSByb3V0aW5lcyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0
aCB0aGUgYmFzaWMgZWRnZQorICogb3BlcmF0aW9ucyBhYm92ZS4gIFRoZXkgYXJlIHByb3ZpZGVk
IGZvciBjb252ZW5pZW5jZSBhbmQgZWZmaWNpZW5jeS4KKyAqLworCisKKy8qIF9fZ2xfbWVzaEFk
ZEVkZ2VWZXJ0ZXgoIGVPcmcgKSBjcmVhdGVzIGEgbmV3IGVkZ2UgZU5ldyBzdWNoIHRoYXQKKyAq
IGVOZXcgPT0gZU9yZy0+TG5leHQsIGFuZCBlTmV3LT5Ec3QgaXMgYSBuZXdseSBjcmVhdGVkIHZl
cnRleC4KKyAqIGVPcmcgYW5kIGVOZXcgd2lsbCBoYXZlIHRoZSBzYW1lIGxlZnQgZmFjZS4KKyAq
LworR0xVaGFsZkVkZ2UgKl9fZ2xfbWVzaEFkZEVkZ2VWZXJ0ZXgoIEdMVWhhbGZFZGdlICplT3Jn
ICkKK3sKKyAgR0xVaGFsZkVkZ2UgKmVOZXdTeW07CisgIEdMVWhhbGZFZGdlICplTmV3ID0gTWFr
ZUVkZ2UoIGVPcmcgKTsKKyAgaWYgKGVOZXcgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKyAgZU5l
d1N5bSA9IGVOZXctPlN5bTsKKworICAvKiBDb25uZWN0IHRoZSBuZXcgZWRnZSBhcHByb3ByaWF0
ZWx5ICovCisgIFNwbGljZSggZU5ldywgZU9yZy0+TG5leHQgKTsKKworICAvKiBTZXQgdGhlIHZl
cnRleCBhbmQgZmFjZSBpbmZvcm1hdGlvbiAqLworICBlTmV3LT5PcmcgPSBlT3JnLT5Ec3Q7Cisg
IHsKKyAgICBHTFV2ZXJ0ZXggKm5ld1ZlcnRleD0gYWxsb2NWZXJ0ZXgoKTsKKyAgICBpZiAobmV3
VmVydGV4ID09IE5VTEwpIHJldHVybiBOVUxMOworCisgICAgTWFrZVZlcnRleCggbmV3VmVydGV4
LCBlTmV3U3ltLCBlTmV3LT5PcmcgKTsKKyAgfQorICBlTmV3LT5MZmFjZSA9IGVOZXdTeW0tPkxm
YWNlID0gZU9yZy0+TGZhY2U7CisKKyAgcmV0dXJuIGVOZXc7Cit9CisKKworLyogX19nbF9tZXNo
U3BsaXRFZGdlKCBlT3JnICkgc3BsaXRzIGVPcmcgaW50byB0d28gZWRnZXMgZU9yZyBhbmQgZU5l
dywKKyAqIHN1Y2ggdGhhdCBlTmV3ID09IGVPcmctPkxuZXh0LiAgVGhlIG5ldyB2ZXJ0ZXggaXMg
ZU9yZy0+RHN0ID09IGVOZXctPk9yZy4KKyAqIGVPcmcgYW5kIGVOZXcgd2lsbCBoYXZlIHRoZSBz
YW1lIGxlZnQgZmFjZS4KKyAqLworR0xVaGFsZkVkZ2UgKl9fZ2xfbWVzaFNwbGl0RWRnZSggR0xV
aGFsZkVkZ2UgKmVPcmcgKQoreworICBHTFVoYWxmRWRnZSAqZU5ldzsKKyAgR0xVaGFsZkVkZ2Ug
KnRlbXBIYWxmRWRnZT0gX19nbF9tZXNoQWRkRWRnZVZlcnRleCggZU9yZyApOworICBpZiAodGVt
cEhhbGZFZGdlID09IE5VTEwpIHJldHVybiBOVUxMOworCisgIGVOZXcgPSB0ZW1wSGFsZkVkZ2Ut
PlN5bTsKKworICAvKiBEaXNjb25uZWN0IGVPcmcgZnJvbSBlT3JnLT5Ec3QgYW5kIGNvbm5lY3Qg
aXQgdG8gZU5ldy0+T3JnICovCisgIFNwbGljZSggZU9yZy0+U3ltLCBlT3JnLT5TeW0tPk9wcmV2
ICk7CisgIFNwbGljZSggZU9yZy0+U3ltLCBlTmV3ICk7CisKKyAgLyogU2V0IHRoZSB2ZXJ0ZXgg
YW5kIGZhY2UgaW5mb3JtYXRpb24gKi8KKyAgZU9yZy0+RHN0ID0gZU5ldy0+T3JnOworICBlTmV3
LT5Ec3QtPmFuRWRnZSA9IGVOZXctPlN5bTsJLyogbWF5IGhhdmUgcG9pbnRlZCB0byBlT3JnLT5T
eW0gKi8KKyAgZU5ldy0+UmZhY2UgPSBlT3JnLT5SZmFjZTsKKyAgZU5ldy0+d2luZGluZyA9IGVP
cmctPndpbmRpbmc7CS8qIGNvcHkgb2xkIHdpbmRpbmcgaW5mb3JtYXRpb24gKi8KKyAgZU5ldy0+
U3ltLT53aW5kaW5nID0gZU9yZy0+U3ltLT53aW5kaW5nOworCisgIHJldHVybiBlTmV3OworfQor
CisKKy8qIF9fZ2xfbWVzaENvbm5lY3QoIGVPcmcsIGVEc3QgKSBjcmVhdGVzIGEgbmV3IGVkZ2Ug
ZnJvbSBlT3JnLT5Ec3QKKyAqIHRvIGVEc3QtPk9yZywgYW5kIHJldHVybnMgdGhlIGNvcnJlc3Bv
bmRpbmcgaGFsZi1lZGdlIGVOZXcuCisgKiBJZiBlT3JnLT5MZmFjZSA9PSBlRHN0LT5MZmFjZSwg
dGhpcyBzcGxpdHMgb25lIGxvb3AgaW50byB0d28sCisgKiBhbmQgdGhlIG5ld2x5IGNyZWF0ZWQg
bG9vcCBpcyBlTmV3LT5MZmFjZS4gIE90aGVyd2lzZSwgdHdvIGRpc2pvaW50CisgKiBsb29wcyBh
cmUgbWVyZ2VkIGludG8gb25lLCBhbmQgdGhlIGxvb3AgZURzdC0+TGZhY2UgaXMgZGVzdHJveWVk
LgorICoKKyAqIElmIChlT3JnID09IGVEc3QpLCB0aGUgbmV3IGZhY2Ugd2lsbCBoYXZlIG9ubHkg
dHdvIGVkZ2VzLgorICogSWYgKGVPcmctPkxuZXh0ID09IGVEc3QpLCB0aGUgb2xkIGZhY2UgaXMg
cmVkdWNlZCB0byBhIHNpbmdsZSBlZGdlLgorICogSWYgKGVPcmctPkxuZXh0LT5MbmV4dCA9PSBl
RHN0KSwgdGhlIG9sZCBmYWNlIGlzIHJlZHVjZWQgdG8gdHdvIGVkZ2VzLgorICovCitHTFVoYWxm
RWRnZSAqX19nbF9tZXNoQ29ubmVjdCggR0xVaGFsZkVkZ2UgKmVPcmcsIEdMVWhhbGZFZGdlICpl
RHN0ICkKK3sKKyAgR0xVaGFsZkVkZ2UgKmVOZXdTeW07CisgIGludCBqb2luaW5nTG9vcHMgPSBG
QUxTRTsgIAorICBHTFVoYWxmRWRnZSAqZU5ldyA9IE1ha2VFZGdlKCBlT3JnICk7CisgIGlmIChl
TmV3ID09IE5VTEwpIHJldHVybiBOVUxMOworCisgIGVOZXdTeW0gPSBlTmV3LT5TeW07CisKKyAg
aWYoIGVEc3QtPkxmYWNlICE9IGVPcmctPkxmYWNlICkgeworICAgIC8qIFdlIGFyZSBjb25uZWN0
aW5nIHR3byBkaXNqb2ludCBsb29wcyAtLSBkZXN0cm95IGVEc3QtPkxmYWNlICovCisgICAgam9p
bmluZ0xvb3BzID0gVFJVRTsKKyAgICBLaWxsRmFjZSggZURzdC0+TGZhY2UsIGVPcmctPkxmYWNl
ICk7CisgIH0KKworICAvKiBDb25uZWN0IHRoZSBuZXcgZWRnZSBhcHByb3ByaWF0ZWx5ICovCisg
IFNwbGljZSggZU5ldywgZU9yZy0+TG5leHQgKTsKKyAgU3BsaWNlKCBlTmV3U3ltLCBlRHN0ICk7
CisKKyAgLyogU2V0IHRoZSB2ZXJ0ZXggYW5kIGZhY2UgaW5mb3JtYXRpb24gKi8KKyAgZU5ldy0+
T3JnID0gZU9yZy0+RHN0OworICBlTmV3U3ltLT5PcmcgPSBlRHN0LT5Pcmc7CisgIGVOZXctPkxm
YWNlID0gZU5ld1N5bS0+TGZhY2UgPSBlT3JnLT5MZmFjZTsKKworICAvKiBNYWtlIHN1cmUgdGhl
IG9sZCBmYWNlIHBvaW50cyB0byBhIHZhbGlkIGhhbGYtZWRnZSAqLworICBlT3JnLT5MZmFjZS0+
YW5FZGdlID0gZU5ld1N5bTsKKworICBpZiggISBqb2luaW5nTG9vcHMgKSB7CisgICAgR0xVZmFj
ZSAqbmV3RmFjZT0gYWxsb2NGYWNlKCk7CisgICAgaWYgKG5ld0ZhY2UgPT0gTlVMTCkgcmV0dXJu
IE5VTEw7CisKKyAgICAvKiBXZSBzcGxpdCBvbmUgbG9vcCBpbnRvIHR3byAtLSB0aGUgbmV3IGxv
b3AgaXMgZU5ldy0+TGZhY2UgKi8KKyAgICBNYWtlRmFjZSggbmV3RmFjZSwgZU5ldywgZU9yZy0+
TGZhY2UgKTsKKyAgfQorICByZXR1cm4gZU5ldzsKK30KKworCisvKioqKioqKioqKioqKioqKioq
KiogT3RoZXIgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBfX2dsX21l
c2haYXBGYWNlKCBmWmFwICkgZGVzdHJveXMgYSBmYWNlIGFuZCByZW1vdmVzIGl0IGZyb20gdGhl
CisgKiBnbG9iYWwgZmFjZSBsaXN0LiAgQWxsIGVkZ2VzIG9mIGZaYXAgd2lsbCBoYXZlIGEgTlVM
TCBwb2ludGVyIGFzIHRoZWlyCisgKiBsZWZ0IGZhY2UuICBBbnkgZWRnZXMgd2hpY2ggYWxzbyBo
YXZlIGEgTlVMTCBwb2ludGVyIGFzIHRoZWlyIHJpZ2h0IGZhY2UKKyAqIGFyZSBkZWxldGVkIGVu
dGlyZWx5IChhbG9uZyB3aXRoIGFueSBpc29sYXRlZCB2ZXJ0aWNlcyB0aGlzIHByb2R1Y2VzKS4K
KyAqIEFuIGVudGlyZSBtZXNoIGNhbiBiZSBkZWxldGVkIGJ5IHphcHBpbmcgaXRzIGZhY2VzLCBv
bmUgYXQgYSB0aW1lLAorICogaW4gYW55IG9yZGVyLiAgWmFwcGVkIGZhY2VzIGNhbm5vdCBiZSB1
c2VkIGluIGZ1cnRoZXIgbWVzaCBvcGVyYXRpb25zIQorICovCit2b2lkIF9fZ2xfbWVzaFphcEZh
Y2UoIEdMVWZhY2UgKmZaYXAgKQoreworICBHTFVoYWxmRWRnZSAqZVN0YXJ0ID0gZlphcC0+YW5F
ZGdlOworICBHTFVoYWxmRWRnZSAqZSwgKmVOZXh0LCAqZVN5bTsKKyAgR0xVZmFjZSAqZlByZXYs
ICpmTmV4dDsKKworICAvKiB3YWxrIGFyb3VuZCBmYWNlLCBkZWxldGluZyBlZGdlcyB3aG9zZSBy
aWdodCBmYWNlIGlzIGFsc28gTlVMTCAqLworICBlTmV4dCA9IGVTdGFydC0+TG5leHQ7CisgIGRv
IHsKKyAgICBlID0gZU5leHQ7CisgICAgZU5leHQgPSBlLT5MbmV4dDsKKworICAgIGUtPkxmYWNl
ID0gTlVMTDsKKyAgICBpZiggZS0+UmZhY2UgPT0gTlVMTCApIHsKKyAgICAgIC8qIGRlbGV0ZSB0
aGUgZWRnZSAtLSBzZWUgX19nbF9NZXNoRGVsZXRlIGFib3ZlICovCisKKyAgICAgIGlmKCBlLT5P
bmV4dCA9PSBlICkgeworCUtpbGxWZXJ0ZXgoIGUtPk9yZywgTlVMTCApOworICAgICAgfSBlbHNl
IHsKKwkvKiBNYWtlIHN1cmUgdGhhdCBlLT5PcmcgcG9pbnRzIHRvIGEgdmFsaWQgaGFsZi1lZGdl
ICovCisJZS0+T3JnLT5hbkVkZ2UgPSBlLT5PbmV4dDsKKwlTcGxpY2UoIGUsIGUtPk9wcmV2ICk7
CisgICAgICB9CisgICAgICBlU3ltID0gZS0+U3ltOworICAgICAgaWYoIGVTeW0tPk9uZXh0ID09
IGVTeW0gKSB7CisJS2lsbFZlcnRleCggZVN5bS0+T3JnLCBOVUxMICk7CisgICAgICB9IGVsc2Ug
eworCS8qIE1ha2Ugc3VyZSB0aGF0IGVTeW0tPk9yZyBwb2ludHMgdG8gYSB2YWxpZCBoYWxmLWVk
Z2UgKi8KKwllU3ltLT5PcmctPmFuRWRnZSA9IGVTeW0tPk9uZXh0OworCVNwbGljZSggZVN5bSwg
ZVN5bS0+T3ByZXYgKTsKKyAgICAgIH0KKyAgICAgIEtpbGxFZGdlKCBlICk7CisgICAgfQorICB9
IHdoaWxlKCBlICE9IGVTdGFydCApOworCisgIC8qIGRlbGV0ZSBmcm9tIGNpcmN1bGFyIGRvdWJs
eS1saW5rZWQgbGlzdCAqLworICBmUHJldiA9IGZaYXAtPnByZXY7CisgIGZOZXh0ID0gZlphcC0+
bmV4dDsKKyAgZk5leHQtPnByZXYgPSBmUHJldjsKKyAgZlByZXYtPm5leHQgPSBmTmV4dDsKKwor
ICBtZW1GcmVlKCBmWmFwICk7Cit9CisKKworLyogX19nbF9tZXNoTmV3TWVzaCgpIGNyZWF0ZXMg
YSBuZXcgbWVzaCB3aXRoIG5vIGVkZ2VzLCBubyB2ZXJ0aWNlcywKKyAqIGFuZCBubyBsb29wcyAo
d2hhdCB3ZSB1c3VhbGx5IGNhbGwgYSAiZmFjZSIpLgorICovCitHTFVtZXNoICpfX2dsX21lc2hO
ZXdNZXNoKCB2b2lkICkKK3sKKyAgR0xVdmVydGV4ICp2OworICBHTFVmYWNlICpmOworICBHTFVo
YWxmRWRnZSAqZTsKKyAgR0xVaGFsZkVkZ2UgKmVTeW07CisgIEdMVW1lc2ggKm1lc2ggPSAoR0xV
bWVzaCAqKW1lbUFsbG9jKCBzaXplb2YoIEdMVW1lc2ggKSk7CisgIGlmIChtZXNoID09IE5VTEwp
IHsKKyAgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgCisgIHYgPSAmbWVzaC0+dkhlYWQ7CisgIGYg
PSAmbWVzaC0+ZkhlYWQ7CisgIGUgPSAmbWVzaC0+ZUhlYWQ7CisgIGVTeW0gPSAmbWVzaC0+ZUhl
YWRTeW07CisKKyAgdi0+bmV4dCA9IHYtPnByZXYgPSB2OworICB2LT5hbkVkZ2UgPSBOVUxMOwor
ICB2LT5kYXRhID0gTlVMTDsKKworICBmLT5uZXh0ID0gZi0+cHJldiA9IGY7CisgIGYtPmFuRWRn
ZSA9IE5VTEw7CisgIGYtPmRhdGEgPSBOVUxMOworICBmLT50cmFpbCA9IE5VTEw7CisgIGYtPm1h
cmtlZCA9IEZBTFNFOworICBmLT5pbnNpZGUgPSBGQUxTRTsKKworICBlLT5uZXh0ID0gZTsKKyAg
ZS0+U3ltID0gZVN5bTsKKyAgZS0+T25leHQgPSBOVUxMOworICBlLT5MbmV4dCA9IE5VTEw7Cisg
IGUtPk9yZyA9IE5VTEw7CisgIGUtPkxmYWNlID0gTlVMTDsKKyAgZS0+d2luZGluZyA9IDA7Cisg
IGUtPmFjdGl2ZVJlZ2lvbiA9IE5VTEw7CisKKyAgZVN5bS0+bmV4dCA9IGVTeW07CisgIGVTeW0t
PlN5bSA9IGU7CisgIGVTeW0tPk9uZXh0ID0gTlVMTDsKKyAgZVN5bS0+TG5leHQgPSBOVUxMOwor
ICBlU3ltLT5PcmcgPSBOVUxMOworICBlU3ltLT5MZmFjZSA9IE5VTEw7CisgIGVTeW0tPndpbmRp
bmcgPSAwOworICBlU3ltLT5hY3RpdmVSZWdpb24gPSBOVUxMOworCisgIHJldHVybiBtZXNoOwor
fQorCisKKy8qIF9fZ2xfbWVzaFVuaW9uKCBtZXNoMSwgbWVzaDIgKSBmb3JtcyB0aGUgdW5pb24g
b2YgYWxsIHN0cnVjdHVyZXMgaW4KKyAqIGJvdGggbWVzaGVzLCBhbmQgcmV0dXJucyB0aGUgbmV3
IG1lc2ggKHRoZSBvbGQgbWVzaGVzIGFyZSBkZXN0cm95ZWQpLgorICovCitHTFVtZXNoICpfX2ds
X21lc2hVbmlvbiggR0xVbWVzaCAqbWVzaDEsIEdMVW1lc2ggKm1lc2gyICkKK3sKKyAgR0xVZmFj
ZSAqZjEgPSAmbWVzaDEtPmZIZWFkOworICBHTFV2ZXJ0ZXggKnYxID0gJm1lc2gxLT52SGVhZDsK
KyAgR0xVaGFsZkVkZ2UgKmUxID0gJm1lc2gxLT5lSGVhZDsKKyAgR0xVZmFjZSAqZjIgPSAmbWVz
aDItPmZIZWFkOworICBHTFV2ZXJ0ZXggKnYyID0gJm1lc2gyLT52SGVhZDsKKyAgR0xVaGFsZkVk
Z2UgKmUyID0gJm1lc2gyLT5lSGVhZDsKKworICAvKiBBZGQgdGhlIGZhY2VzLCB2ZXJ0aWNlcywg
YW5kIGVkZ2VzIG9mIG1lc2gyIHRvIHRob3NlIG9mIG1lc2gxICovCisgIGlmKCBmMi0+bmV4dCAh
PSBmMiApIHsKKyAgICBmMS0+cHJldi0+bmV4dCA9IGYyLT5uZXh0OworICAgIGYyLT5uZXh0LT5w
cmV2ID0gZjEtPnByZXY7CisgICAgZjItPnByZXYtPm5leHQgPSBmMTsKKyAgICBmMS0+cHJldiA9
IGYyLT5wcmV2OworICB9CisKKyAgaWYoIHYyLT5uZXh0ICE9IHYyICkgeworICAgIHYxLT5wcmV2
LT5uZXh0ID0gdjItPm5leHQ7CisgICAgdjItPm5leHQtPnByZXYgPSB2MS0+cHJldjsKKyAgICB2
Mi0+cHJldi0+bmV4dCA9IHYxOworICAgIHYxLT5wcmV2ID0gdjItPnByZXY7CisgIH0KKworICBp
ZiggZTItPm5leHQgIT0gZTIgKSB7CisgICAgZTEtPlN5bS0+bmV4dC0+U3ltLT5uZXh0ID0gZTIt
Pm5leHQ7CisgICAgZTItPm5leHQtPlN5bS0+bmV4dCA9IGUxLT5TeW0tPm5leHQ7CisgICAgZTIt
PlN5bS0+bmV4dC0+U3ltLT5uZXh0ID0gZTE7CisgICAgZTEtPlN5bS0+bmV4dCA9IGUyLT5TeW0t
Pm5leHQ7CisgIH0KKworICBtZW1GcmVlKCBtZXNoMiApOworICByZXR1cm4gbWVzaDE7Cit9CisK
KworI2lmZGVmIERFTEVURV9CWV9aQVBQSU5HCisKKy8qIF9fZ2xfbWVzaERlbGV0ZU1lc2goIG1l
c2ggKSB3aWxsIGZyZWUgYWxsIHN0b3JhZ2UgZm9yIGFueSB2YWxpZCBtZXNoLgorICovCit2b2lk
IF9fZ2xfbWVzaERlbGV0ZU1lc2goIEdMVW1lc2ggKm1lc2ggKQoreworICBHTFVmYWNlICpmSGVh
ZCA9ICZtZXNoLT5mSGVhZDsKKworICB3aGlsZSggZkhlYWQtPm5leHQgIT0gZkhlYWQgKSB7Cisg
ICAgX19nbF9tZXNoWmFwRmFjZSggZkhlYWQtPm5leHQgKTsKKyAgfQorICBhc3NlcnQoIG1lc2gt
PnZIZWFkLm5leHQgPT0gJm1lc2gtPnZIZWFkICk7CisKKyAgbWVtRnJlZSggbWVzaCApOworfQor
CisjZWxzZQorCisvKiBfX2dsX21lc2hEZWxldGVNZXNoKCBtZXNoICkgd2lsbCBmcmVlIGFsbCBz
dG9yYWdlIGZvciBhbnkgdmFsaWQgbWVzaC4KKyAqLwordm9pZCBfX2dsX21lc2hEZWxldGVNZXNo
KCBHTFVtZXNoICptZXNoICkKK3sKKyAgR0xVZmFjZSAqZiwgKmZOZXh0OworICBHTFV2ZXJ0ZXgg
KnYsICp2TmV4dDsKKyAgR0xVaGFsZkVkZ2UgKmUsICplTmV4dDsKKworICBmb3IoIGYgPSBtZXNo
LT5mSGVhZC5uZXh0OyBmICE9ICZtZXNoLT5mSGVhZDsgZiA9IGZOZXh0ICkgeworICAgIGZOZXh0
ID0gZi0+bmV4dDsKKyAgICBtZW1GcmVlKCBmICk7CisgIH0KKworICBmb3IoIHYgPSBtZXNoLT52
SGVhZC5uZXh0OyB2ICE9ICZtZXNoLT52SGVhZDsgdiA9IHZOZXh0ICkgeworICAgIHZOZXh0ID0g
di0+bmV4dDsKKyAgICBtZW1GcmVlKCB2ICk7CisgIH0KKworICBmb3IoIGUgPSBtZXNoLT5lSGVh
ZC5uZXh0OyBlICE9ICZtZXNoLT5lSGVhZDsgZSA9IGVOZXh0ICkgeworICAgIC8qIE9uZSBjYWxs
IGZyZWVzIGJvdGggZSBhbmQgZS0+U3ltIChzZWUgRWRnZVBhaXIgYWJvdmUpICovCisgICAgZU5l
eHQgPSBlLT5uZXh0OworICAgIG1lbUZyZWUoIGUgKTsKKyAgfQorCisgIG1lbUZyZWUoIG1lc2gg
KTsKK30KKworI2VuZGlmCisKKyNpZm5kZWYgTkRFQlVHCisKKy8qIF9fZ2xfbWVzaENoZWNrTWVz
aCggbWVzaCApIGNoZWNrcyBhIG1lc2ggZm9yIHNlbGYtY29uc2lzdGVuY3kuCisgKi8KK3ZvaWQg
X19nbF9tZXNoQ2hlY2tNZXNoKCBHTFVtZXNoICptZXNoICkKK3sKKyAgR0xVZmFjZSAqZkhlYWQg
PSAmbWVzaC0+ZkhlYWQ7CisgIEdMVXZlcnRleCAqdkhlYWQgPSAmbWVzaC0+dkhlYWQ7CisgIEdM
VWhhbGZFZGdlICplSGVhZCA9ICZtZXNoLT5lSGVhZDsKKyAgR0xVZmFjZSAqZiwgKmZQcmV2Owor
ICBHTFV2ZXJ0ZXggKnYsICp2UHJldjsKKyAgR0xVaGFsZkVkZ2UgKmUsICplUHJldjsKKworICBm
UHJldiA9IGZIZWFkOworICBmb3IoIGZQcmV2ID0gZkhlYWQgOyAoZiA9IGZQcmV2LT5uZXh0KSAh
PSBmSGVhZDsgZlByZXYgPSBmKSB7CisgICAgYXNzZXJ0KCBmLT5wcmV2ID09IGZQcmV2ICk7Cisg
ICAgZSA9IGYtPmFuRWRnZTsKKyAgICBkbyB7CisgICAgICBhc3NlcnQoIGUtPlN5bSAhPSBlICk7
CisgICAgICBhc3NlcnQoIGUtPlN5bS0+U3ltID09IGUgKTsKKyAgICAgIGFzc2VydCggZS0+TG5l
eHQtPk9uZXh0LT5TeW0gPT0gZSApOworICAgICAgYXNzZXJ0KCBlLT5PbmV4dC0+U3ltLT5MbmV4
dCA9PSBlICk7CisgICAgICBhc3NlcnQoIGUtPkxmYWNlID09IGYgKTsKKyAgICAgIGUgPSBlLT5M
bmV4dDsKKyAgICB9IHdoaWxlKCBlICE9IGYtPmFuRWRnZSApOworICB9CisgIGFzc2VydCggZi0+
cHJldiA9PSBmUHJldiAmJiBmLT5hbkVkZ2UgPT0gTlVMTCAmJiBmLT5kYXRhID09IE5VTEwgKTsK
KworICB2UHJldiA9IHZIZWFkOworICBmb3IoIHZQcmV2ID0gdkhlYWQgOyAodiA9IHZQcmV2LT5u
ZXh0KSAhPSB2SGVhZDsgdlByZXYgPSB2KSB7CisgICAgYXNzZXJ0KCB2LT5wcmV2ID09IHZQcmV2
ICk7CisgICAgZSA9IHYtPmFuRWRnZTsKKyAgICBkbyB7CisgICAgICBhc3NlcnQoIGUtPlN5bSAh
PSBlICk7CisgICAgICBhc3NlcnQoIGUtPlN5bS0+U3ltID09IGUgKTsKKyAgICAgIGFzc2VydCgg
ZS0+TG5leHQtPk9uZXh0LT5TeW0gPT0gZSApOworICAgICAgYXNzZXJ0KCBlLT5PbmV4dC0+U3lt
LT5MbmV4dCA9PSBlICk7CisgICAgICBhc3NlcnQoIGUtPk9yZyA9PSB2ICk7CisgICAgICBlID0g
ZS0+T25leHQ7CisgICAgfSB3aGlsZSggZSAhPSB2LT5hbkVkZ2UgKTsKKyAgfQorICBhc3NlcnQo
IHYtPnByZXYgPT0gdlByZXYgJiYgdi0+YW5FZGdlID09IE5VTEwgJiYgdi0+ZGF0YSA9PSBOVUxM
ICk7CisKKyAgZVByZXYgPSBlSGVhZDsKKyAgZm9yKCBlUHJldiA9IGVIZWFkIDsgKGUgPSBlUHJl
di0+bmV4dCkgIT0gZUhlYWQ7IGVQcmV2ID0gZSkgeworICAgIGFzc2VydCggZS0+U3ltLT5uZXh0
ID09IGVQcmV2LT5TeW0gKTsKKyAgICBhc3NlcnQoIGUtPlN5bSAhPSBlICk7CisgICAgYXNzZXJ0
KCBlLT5TeW0tPlN5bSA9PSBlICk7CisgICAgYXNzZXJ0KCBlLT5PcmcgIT0gTlVMTCApOworICAg
IGFzc2VydCggZS0+RHN0ICE9IE5VTEwgKTsKKyAgICBhc3NlcnQoIGUtPkxuZXh0LT5PbmV4dC0+
U3ltID09IGUgKTsKKyAgICBhc3NlcnQoIGUtPk9uZXh0LT5TeW0tPkxuZXh0ID09IGUgKTsKKyAg
fQorICBhc3NlcnQoIGUtPlN5bS0+bmV4dCA9PSBlUHJldi0+U3ltCisgICAgICAgJiYgZS0+U3lt
ID09ICZtZXNoLT5lSGVhZFN5bQorICAgICAgICYmIGUtPlN5bS0+U3ltID09IGUKKyAgICAgICAm
JiBlLT5PcmcgPT0gTlVMTCAmJiBlLT5Ec3QgPT0gTlVMTAorICAgICAgICYmIGUtPkxmYWNlID09
IE5VTEwgJiYgZS0+UmZhY2UgPT0gTlVMTCApOworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
M3JkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvM3JkcGFy
dHkvZ2x1L2xpYnRlc3MvbWVzaC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS8zcmRwYXJ0eS9n
bHUvbGlidGVzcy9tZXNoLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjczIEBACisvKgorKiog
TGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0
aGlzIGZpbGUgYXJlCisqKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBh
cyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNp
b24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJl
IHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBu
b3QgdXNlCisqKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5CisqKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdy
YXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJl
IFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBo
dHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBw
cm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
CisqKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJ
RVMgQU5EIENPTkRJVElPTlMKKyoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1J
VEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJD
SEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJU
SUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBD
b2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwK
KyoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBi
eSBTaWxpY29uIEdyYXBoaWNzLAorKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmln
aHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4g
YW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoq
IGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9u
YWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZh
Y2VzCisqKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2lu
YWwgQ29kZSBhcmUgVGhlCisqKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmlj
YXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9w
ZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMp
LCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGgg
dGhlIFgKKyoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2Jl
ciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQorKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5H
TChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5
IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisq
KiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlv
bi4KKyoqCisqLworLyoKKyoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoq
ICREYXRlJCAkUmV2aXNpb24kCisqKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUv
bGlidGVzcy9tZXNoLmgjNSAkCisqLworCisjaWZuZGVmIF9fbWVzaF9oXworI2RlZmluZSBfX21l
c2hfaF8KKworI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9pbnRlcm5hbF9nbHUuaCIKKwordHlwZWRl
ZiBzdHJ1Y3QgR0xVbWVzaCBHTFVtZXNoOyAKKwordHlwZWRlZiBzdHJ1Y3QgR0xVdmVydGV4IEdM
VXZlcnRleDsKK3R5cGVkZWYgc3RydWN0IEdMVWZhY2UgR0xVZmFjZTsKK3R5cGVkZWYgc3RydWN0
IEdMVWhhbGZFZGdlIEdMVWhhbGZFZGdlOworCit0eXBlZGVmIHN0cnVjdCBBY3RpdmVSZWdpb24g
QWN0aXZlUmVnaW9uOwkvKiBJbnRlcm5hbCBkYXRhICovCisKKy8qIFRoZSBtZXNoIHN0cnVjdHVy
ZSBpcyBzaW1pbGFyIGluIHNwaXJpdCwgbm90YXRpb24sIGFuZCBvcGVyYXRpb25zCisgKiB0byB0
aGUgInF1YWQtZWRnZSIgc3RydWN0dXJlIChzZWUgTC4gR3VpYmFzIGFuZCBKLiBTdG9sZmksIFBy
aW1pdGl2ZXMKKyAqIGZvciB0aGUgbWFuaXB1bGF0aW9uIG9mIGdlbmVyYWwgc3ViZGl2aXNpb25z
IGFuZCB0aGUgY29tcHV0YXRpb24gb2YKKyAqIFZvcm9ub2kgZGlhZ3JhbXMsIEFDTSBUcmFuc2Fj
dGlvbnMgb24gR3JhcGhpY3MsIDQoMik6NzQtMTIzLCBBcHJpbCAxOTg1KS4KKyAqIEZvciBhIHNp
bXBsaWZpZWQgZGVzY3JpcHRpb24sIHNlZSB0aGUgY291cnNlIG5vdGVzIGZvciBDUzM0OGEsCisg
KiAiTWF0aGVtYXRpY2FsIEZvdW5kYXRpb25zIG9mIENvbXB1dGVyIEdyYXBoaWNzIiwgYXZhaWxh
YmxlIGF0IHRoZQorICogU3RhbmZvcmQgYm9va3N0b3JlIChhbmQgdGF1Z2h0IGR1cmluZyB0aGUg
ZmFsbCBxdWFydGVyKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGJvcnJvd3MgYSB0aW55
IHN1YnNldCBvZiB0aGUgZ3JhcGgtYmFzZWQgYXBwcm9hY2gKKyAqIHVzZSBpbiBNYW50eWxhJ3Mg
R2VvbWV0cmljIFdvcmsgQmVuY2ggKHNlZSBNLiBNYW50eWxhLCBBbiBJbnRyb2R1Y3Rpb24KKyAq
IHRvIFNvbGQgTW9kZWxpbmcsIENvbXB1dGVyIFNjaWVuY2UgUHJlc3MsIFJvY2t2aWxsZSwgTWFy
eWxhbmQsIDE5ODgpLgorICoKKyAqIFRoZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZSBpcyB0
aGUgImhhbGYtZWRnZSIuICBUd28gaGFsZi1lZGdlcworICogZ28gdG9nZXRoZXIgdG8gbWFrZSBh
biBlZGdlLCBidXQgdGhleSBwb2ludCBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25zLgorICogRWFjaCBo
YWxmLWVkZ2UgaGFzIGEgcG9pbnRlciB0byBpdHMgbWF0ZSAodGhlICJzeW1tZXRyaWMiIGhhbGYt
ZWRnZSBTeW0pLAorICogaXRzIG9yaWdpbiB2ZXJ0ZXggKE9yZyksIHRoZSBmYWNlIG9uIGl0cyBs
ZWZ0IHNpZGUgKExmYWNlKSwgYW5kIHRoZQorICogYWRqYWNlbnQgaGFsZi1lZGdlcyBpbiB0aGUg
Q0NXIGRpcmVjdGlvbiBhcm91bmQgdGhlIG9yaWdpbiB2ZXJ0ZXgKKyAqIChPbmV4dCkgYW5kIGFy
b3VuZCB0aGUgbGVmdCBmYWNlIChMbmV4dCkuICBUaGVyZSBpcyBhbHNvIGEgIm5leHQiCisgKiBw
b2ludGVyIGZvciB0aGUgZ2xvYmFsIGVkZ2UgbGlzdCAoc2VlIGJlbG93KS4KKyAqCisgKiBUaGUg
bm90YXRpb24gdXNlZCBmb3IgbWVzaCBuYXZpZ2F0aW9uOgorICoJU3ltICAgPSB0aGUgbWF0ZSBv
ZiBhIGhhbGYtZWRnZSAoc2FtZSBlZGdlLCBidXQgb3Bwb3NpdGUgZGlyZWN0aW9uKQorICoJT25l
eHQgPSBlZGdlIENDVyBhcm91bmQgb3JpZ2luIHZlcnRleCAoa2VlcCBzYW1lIG9yaWdpbikKKyAq
CURuZXh0ID0gZWRnZSBDQ1cgYXJvdW5kIGRlc3RpbmF0aW9uIHZlcnRleCAoa2VlcCBzYW1lIGRl
c3QpCisgKglMbmV4dCA9IGVkZ2UgQ0NXIGFyb3VuZCBsZWZ0IGZhY2UgKGRlc3QgYmVjb21lcyBu
ZXcgb3JpZ2luKQorICoJUm5leHQgPSBlZGdlIENDVyBhcm91bmQgcmlnaHQgZmFjZSAob3JpZ2lu
IGJlY29tZXMgbmV3IGRlc3QpCisgKgorICogInByZXYiIG1lYW5zIHRvIHN1YnN0aXR1dGUgQ1cg
Zm9yIENDVyBpbiB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCisgKgorICogVGhlIG1lc2gga2VlcHMg
Z2xvYmFsIGxpc3RzIG9mIGFsbCB2ZXJ0aWNlcywgZmFjZXMsIGFuZCBlZGdlcywKKyAqIHN0b3Jl
ZCBhcyBkb3VibHktbGlua2VkIGNpcmN1bGFyIGxpc3RzIHdpdGggYSBkdW1teSBoZWFkZXIgbm9k
ZS4KKyAqIFRoZSBtZXNoIHN0b3JlcyBwb2ludGVycyB0byB0aGVzZSBkdW1teSBoZWFkZXJzICh2
SGVhZCwgZkhlYWQsIGVIZWFkKS4KKyAqCisgKiBUaGUgY2lyY3VsYXIgZWRnZSBsaXN0IGlzIHNw
ZWNpYWw7IHNpbmNlIGhhbGYtZWRnZXMgYWx3YXlzIG9jY3VyCisgKiBpbiBwYWlycyAoZSBhbmQg
ZS0+U3ltKSwgZWFjaCBoYWxmLWVkZ2Ugc3RvcmVzIGEgcG9pbnRlciBpbiBvbmx5CisgKiBvbmUg
ZGlyZWN0aW9uLiAgU3RhcnRpbmcgYXQgZUhlYWQgYW5kIGZvbGxvd2luZyB0aGUgZS0+bmV4dCBw
b2ludGVycworICogd2lsbCB2aXNpdCBlYWNoICplZGdlKiBvbmNlIChpZS4gZSBvciBlLT5TeW0s
IGJ1dCBub3QgYm90aCkuCisgKiBlLT5TeW0gc3RvcmVzIGEgcG9pbnRlciBpbiB0aGUgb3Bwb3Np
dGUgZGlyZWN0aW9uLCB0aHVzIGl0IGlzCisgKiBhbHdheXMgdHJ1ZSB0aGF0IGUtPlN5bS0+bmV4
dC0+U3ltLT5uZXh0ID09IGUuCisgKgorICogRWFjaCB2ZXJ0ZXggaGFzIGEgcG9pbnRlciB0byBu
ZXh0IGFuZCBwcmV2aW91cyB2ZXJ0aWNlcyBpbiB0aGUKKyAqIGNpcmN1bGFyIGxpc3QsIGFuZCBh
IHBvaW50ZXIgdG8gYSBoYWxmLWVkZ2Ugd2l0aCB0aGlzIHZlcnRleCBhcworICogdGhlIG9yaWdp
biAoTlVMTCBpZiB0aGlzIGlzIHRoZSBkdW1teSBoZWFkZXIpLiAgVGhlcmUgaXMgYWxzbyBhCisg
KiBmaWVsZCAiZGF0YSIgZm9yIGNsaWVudCBkYXRhLgorICoKKyAqIEVhY2ggZmFjZSBoYXMgYSBw
b2ludGVyIHRvIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBmYWNlcyBpbiB0aGUKKyAqIGNpcmN1bGFy
IGxpc3QsIGFuZCBhIHBvaW50ZXIgdG8gYSBoYWxmLWVkZ2Ugd2l0aCB0aGlzIGZhY2UgYXMKKyAq
IHRoZSBsZWZ0IGZhY2UgKE5VTEwgaWYgdGhpcyBpcyB0aGUgZHVtbXkgaGVhZGVyKS4gIFRoZXJl
IGlzIGFsc28KKyAqIGEgZmllbGQgImRhdGEiIGZvciBjbGllbnQgZGF0YS4KKyAqCisgKiBOb3Rl
IHRoYXQgd2hhdCB3ZSBjYWxsIGEgImZhY2UiIGlzIHJlYWxseSBhIGxvb3A7IGZhY2VzIG1heSBj
b25zaXN0CisgKiBvZiBtb3JlIHRoYW4gb25lIGxvb3AgKGllLiBub3Qgc2ltcGx5IGNvbm5lY3Rl
ZCksIGJ1dCB0aGVyZSBpcyBubworICogcmVjb3JkIG9mIHRoaXMgaW4gdGhlIGRhdGEgc3RydWN0
dXJlLiAgVGhlIG1lc2ggbWF5IGNvbnNpc3Qgb2YKKyAqIHNldmVyYWwgZGlzY29ubmVjdGVkIHJl
Z2lvbnMsIHNvIGl0IG1heSBub3QgYmUgcG9zc2libGUgdG8gdmlzaXQKKyAqIHRoZSBlbnRpcmUg
bWVzaCBieSBzdGFydGluZyBhdCBhIGhhbGYtZWRnZSBhbmQgdHJhdmVyc2luZyB0aGUgZWRnZQor
ICogc3RydWN0dXJlLgorICoKKyAqIFRoZSBtZXNoIGRvZXMgTk9UIHN1cHBvcnQgaXNvbGF0ZWQg
dmVydGljZXM7IGEgdmVydGV4IGlzIGRlbGV0ZWQgYWxvbmcKKyAqIHdpdGggaXRzIGxhc3QgZWRn
ZS4gIFNpbWlsYXJseSB3aGVuIHR3byBmYWNlcyBhcmUgbWVyZ2VkLCBvbmUgb2YgdGhlCisgKiBm
YWNlcyBpcyBkZWxldGVkIChzZWUgX19nbF9tZXNoRGVsZXRlIGJlbG93KS4gIEZvciBtZXNoIG9w
ZXJhdGlvbnMsCisgKiBhbGwgZmFjZSAobG9vcCkgYW5kIHZlcnRleCBwb2ludGVycyBtdXN0IG5v
dCBiZSBOVUxMLiAgSG93ZXZlciwgb25jZQorICogbWVzaCBtYW5pcHVsYXRpb24gaXMgZmluaXNo
ZWQsIF9fZ2xfTWVzaFphcEZhY2UgY2FuIGJlIHVzZWQgdG8gZGVsZXRlCisgKiBmYWNlcyBvZiB0
aGUgbWVzaCwgb25lIGF0IGEgdGltZS4gIEFsbCBleHRlcm5hbCBmYWNlcyBjYW4gYmUgInphcHBl
ZCIKKyAqIGJlZm9yZSB0aGUgbWVzaCBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50OyB0aGVuIGEg
TlVMTCBmYWNlIGluZGljYXRlcworICogYSByZWdpb24gd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhl
IG91dHB1dCBwb2x5Z29uLgorICovCisKK3N0cnVjdCBHTFV2ZXJ0ZXggeworICBHTFV2ZXJ0ZXgJ
Km5leHQ7CQkvKiBuZXh0IHZlcnRleCAobmV2ZXIgTlVMTCkgKi8KKyAgR0xVdmVydGV4CSpwcmV2
OwkJLyogcHJldmlvdXMgdmVydGV4IChuZXZlciBOVUxMKSAqLworICBHTFVoYWxmRWRnZQkqYW5F
ZGdlOwkvKiBhIGhhbGYtZWRnZSB3aXRoIHRoaXMgb3JpZ2luICovCisgIHZvaWQJCSpkYXRhOwkJ
LyogY2xpZW50J3MgZGF0YSAqLworCisgIC8qIEludGVybmFsIGRhdGEgKGtlZXAgaGlkZGVuKSAq
LworICBHTGRvdWJsZQljb29yZHNbM107CS8qIHZlcnRleCBsb2NhdGlvbiBpbiAzRCAqLworICBH
TGRvdWJsZQlzLCB0OwkJLyogcHJvamVjdGlvbiBvbnRvIHRoZSBzd2VlcCBwbGFuZSAqLworICBs
b25nCQlwcUhhbmRsZTsJLyogdG8gYWxsb3cgZGVsZXRpb24gZnJvbSBwcmlvcml0eSBxdWV1ZSAq
LworfTsKKworc3RydWN0IEdMVWZhY2UgeworICBHTFVmYWNlCSpuZXh0OwkJLyogbmV4dCBmYWNl
IChuZXZlciBOVUxMKSAqLworICBHTFVmYWNlCSpwcmV2OwkJLyogcHJldmlvdXMgZmFjZSAobmV2
ZXIgTlVMTCkgKi8KKyAgR0xVaGFsZkVkZ2UJKmFuRWRnZTsJLyogYSBoYWxmIGVkZ2Ugd2l0aCB0
aGlzIGxlZnQgZmFjZSAqLworICB2b2lkCQkqZGF0YTsJCS8qIHJvb20gZm9yIGNsaWVudCdzIGRh
dGEgKi8KKworICAvKiBJbnRlcm5hbCBkYXRhIChrZWVwIGhpZGRlbikgKi8KKyAgR0xVZmFjZQkq
dHJhaWw7CQkvKiAic3RhY2siIGZvciBjb252ZXJzaW9uIHRvIHN0cmlwcyAqLworICBHTGJvb2xl
YW4JbWFya2VkOwkJLyogZmxhZyBmb3IgY29udmVyc2lvbiB0byBzdHJpcHMgKi8KKyAgR0xib29s
ZWFuCWluc2lkZTsJCS8qIHRoaXMgZmFjZSBpcyBpbiB0aGUgcG9seWdvbiBpbnRlcmlvciAqLwor
fTsKKworc3RydWN0IEdMVWhhbGZFZGdlIHsKKyAgR0xVaGFsZkVkZ2UJKm5leHQ7CQkvKiBkb3Vi
bHktbGlua2VkIGxpc3QgKHByZXY9PVN5bS0+bmV4dCkgKi8KKyAgR0xVaGFsZkVkZ2UJKlN5bTsJ
CS8qIHNhbWUgZWRnZSwgb3Bwb3NpdGUgZGlyZWN0aW9uICovCisgIEdMVWhhbGZFZGdlCSpPbmV4
dDsJCS8qIG5leHQgZWRnZSBDQ1cgYXJvdW5kIG9yaWdpbiAqLworICBHTFVoYWxmRWRnZQkqTG5l
eHQ7CQkvKiBuZXh0IGVkZ2UgQ0NXIGFyb3VuZCBsZWZ0IGZhY2UgKi8KKyAgR0xVdmVydGV4CSpP
cmc7CQkvKiBvcmlnaW4gdmVydGV4IChPdmVydGV4IHRvbyBsb25nKSAqLworICBHTFVmYWNlCSpM
ZmFjZTsJCS8qIGxlZnQgZmFjZSAqLworCisgIC8qIEludGVybmFsIGRhdGEgKGtlZXAgaGlkZGVu
KSAqLworICBBY3RpdmVSZWdpb24JKmFjdGl2ZVJlZ2lvbjsJLyogYSByZWdpb24gd2l0aCB0aGlz
IHVwcGVyIGVkZ2UgKHN3ZWVwLmMpICovCisgIGludAkJd2luZGluZzsJLyogY2hhbmdlIGluIHdp
bmRpbmcgbnVtYmVyIHdoZW4gY3Jvc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJvbSB0aGUgcmlnaHQgZmFjZSB0byB0aGUgbGVmdCBmYWNlICovCit9OworCisjZGVm
aW5lCVJmYWNlCVN5bS0+TGZhY2UKKyNkZWZpbmUgRHN0CVN5bS0+T3JnCisKKyNkZWZpbmUgT3By
ZXYJU3ltLT5MbmV4dAorI2RlZmluZSBMcHJldiAgIE9uZXh0LT5TeW0KKyNkZWZpbmUgRHByZXYJ
TG5leHQtPlN5bQorI2RlZmluZSBScHJldglTeW0tPk9uZXh0CisjZGVmaW5lIERuZXh0CVJwcmV2
LT5TeW0JLyogMyBwb2ludGVycyAqLworI2RlZmluZSBSbmV4dAlPcHJldi0+U3ltCS8qIDMgcG9p
bnRlcnMgKi8KKworCitzdHJ1Y3QgR0xVbWVzaCB7CisgIEdMVXZlcnRleAl2SGVhZDsJCS8qIGR1
bW15IGhlYWRlciBmb3IgdmVydGV4IGxpc3QgKi8KKyAgR0xVZmFjZQlmSGVhZDsJCS8qIGR1bW15
IGhlYWRlciBmb3IgZmFjZSBsaXN0ICovCisgIEdMVWhhbGZFZGdlCWVIZWFkOwkJLyogZHVtbXkg
aGVhZGVyIGZvciBlZGdlIGxpc3QgKi8KKyAgR0xVaGFsZkVkZ2UJZUhlYWRTeW07CS8qIGFuZCBp
dHMgc3ltbWV0cmljIGNvdW50ZXJwYXJ0ICovCit9OworCisvKiBUaGUgbWVzaCBvcGVyYXRpb25z
IGJlbG93IGhhdmUgdGhyZWUgbW90aXZhdGlvbnM6IGNvbXBsZXRlbmVzcywKKyAqIGNvbnZlbmll
bmNlLCBhbmQgZWZmaWNpZW5jeS4gIFRoZSBiYXNpYyBtZXNoIG9wZXJhdGlvbnMgYXJlIE1ha2VF
ZGdlLAorICogU3BsaWNlLCBhbmQgRGVsZXRlLiAgQWxsIHRoZSBvdGhlciBlZGdlIG9wZXJhdGlv
bnMgY2FuIGJlIGltcGxlbWVudGVkCisgKiBpbiB0ZXJtcyBvZiB0aGVzZS4gIFRoZSBvdGhlciBv
cGVyYXRpb25zIGFyZSBwcm92aWRlZCBmb3IgY29udmVuaWVuY2UKKyAqIGFuZC9vciBlZmZpY2ll
bmN5LgorICoKKyAqIFdoZW4gYSBmYWNlIGlzIHNwbGl0IG9yIGEgdmVydGV4IGlzIGFkZGVkLCB0
aGV5IGFyZSBpbnNlcnRlZCBpbnRvIHRoZQorICogZ2xvYmFsIGxpc3QgKmJlZm9yZSogdGhlIGV4
aXN0aW5nIHZlcnRleCBvciBmYWNlIChpZS4gZS0+T3JnIG9yIGUtPkxmYWNlKS4KKyAqIFRoaXMg
bWFrZXMgaXQgZWFzaWVyIHRvIHByb2Nlc3MgYWxsIHZlcnRpY2VzIG9yIGZhY2VzIGluIHRoZSBn
bG9iYWwgbGlzdHMKKyAqIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgcHJvY2Vzc2luZyB0aGUgc2Ft
ZSBkYXRhIHR3aWNlLiAgQXMgYSBjb252ZW5pZW5jZSwKKyAqIHdoZW4gYSBmYWNlIGlzIHNwbGl0
LCB0aGUgImluc2lkZSIgZmxhZyBpcyBjb3BpZWQgZnJvbSB0aGUgb2xkIGZhY2UuCisgKiBPdGhl
ciBpbnRlcm5hbCBkYXRhICh2LT5kYXRhLCB2LT5hY3RpdmVSZWdpb24sIGYtPmRhdGEsIGYtPm1h
cmtlZCwKKyAqIGYtPnRyYWlsLCBlLT53aW5kaW5nKSBpcyBzZXQgdG8gemVyby4KKyAqCisgKiAq
KioqKioqKioqKioqKioqKioqKioqIEJhc2ljIEVkZ2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioq
KioqKioqKioqKioqKgorICoKKyAqIF9fZ2xfbWVzaE1ha2VFZGdlKCBtZXNoICkgY3JlYXRlcyBv
bmUgZWRnZSwgdHdvIHZlcnRpY2VzLCBhbmQgYSBsb29wLgorICogVGhlIGxvb3AgKGZhY2UpIGNv
bnNpc3RzIG9mIHRoZSB0d28gbmV3IGhhbGYtZWRnZXMuCisgKgorICogX19nbF9tZXNoU3BsaWNl
KCBlT3JnLCBlRHN0ICkgaXMgdGhlIGJhc2ljIG9wZXJhdGlvbiBmb3IgY2hhbmdpbmcgdGhlCisg
KiBtZXNoIGNvbm5lY3Rpdml0eSBhbmQgdG9wb2xvZ3kuICBJdCBjaGFuZ2VzIHRoZSBtZXNoIHNv
IHRoYXQKKyAqCWVPcmctPk9uZXh0IDwtIE9MRCggZURzdC0+T25leHQgKQorICoJZURzdC0+T25l
eHQgPC0gT0xEKCBlT3JnLT5PbmV4dCApCisgKiB3aGVyZSBPTEQoLi4uKSBtZWFucyB0aGUgdmFs
dWUgYmVmb3JlIHRoZSBtZXNoU3BsaWNlIG9wZXJhdGlvbi4KKyAqCisgKiBUaGlzIGNhbiBoYXZl
IHR3byBlZmZlY3RzIG9uIHRoZSB2ZXJ0ZXggc3RydWN0dXJlOgorICogIC0gaWYgZU9yZy0+T3Jn
ICE9IGVEc3QtPk9yZywgdGhlIHR3byB2ZXJ0aWNlcyBhcmUgbWVyZ2VkIHRvZ2V0aGVyCisgKiAg
LSBpZiBlT3JnLT5PcmcgPT0gZURzdC0+T3JnLCB0aGUgb3JpZ2luIGlzIHNwbGl0IGludG8gdHdv
IHZlcnRpY2VzCisgKiBJbiBib3RoIGNhc2VzLCBlRHN0LT5PcmcgaXMgY2hhbmdlZCBhbmQgZU9y
Zy0+T3JnIGlzIHVudG91Y2hlZC4KKyAqCisgKiBTaW1pbGFybHkgKGFuZCBpbmRlcGVuZGVudGx5
KSBmb3IgdGhlIGZhY2Ugc3RydWN0dXJlLAorICogIC0gaWYgZU9yZy0+TGZhY2UgPT0gZURzdC0+
TGZhY2UsIG9uZSBsb29wIGlzIHNwbGl0IGludG8gdHdvCisgKiAgLSBpZiBlT3JnLT5MZmFjZSAh
PSBlRHN0LT5MZmFjZSwgdHdvIGRpc3RpbmN0IGxvb3BzIGFyZSBqb2luZWQgaW50byBvbmUKKyAq
IEluIGJvdGggY2FzZXMsIGVEc3QtPkxmYWNlIGlzIGNoYW5nZWQgYW5kIGVPcmctPkxmYWNlIGlz
IHVuYWZmZWN0ZWQuCisgKgorICogX19nbF9tZXNoRGVsZXRlKCBlRGVsICkgcmVtb3ZlcyB0aGUg
ZWRnZSBlRGVsLiAgVGhlcmUgYXJlIHNldmVyYWwgY2FzZXM6CisgKiBpZiAoZURlbC0+TGZhY2Ug
IT0gZURlbC0+UmZhY2UpLCB3ZSBqb2luIHR3byBsb29wcyBpbnRvIG9uZTsgdGhlIGxvb3AKKyAq
IGVEZWwtPkxmYWNlIGlzIGRlbGV0ZWQuICBPdGhlcndpc2UsIHdlIGFyZSBzcGxpdHRpbmcgb25l
IGxvb3AgaW50byB0d287CisgKiB0aGUgbmV3bHkgY3JlYXRlZCBsb29wIHdpbGwgY29udGFpbiBl
RGVsLT5Ec3QuICBJZiB0aGUgZGVsZXRpb24gb2YgZURlbAorICogd291bGQgY3JlYXRlIGlzb2xh
dGVkIHZlcnRpY2VzLCB0aG9zZSBhcmUgZGVsZXRlZCBhcyB3ZWxsLgorICoKKyAqICoqKioqKioq
KioqKioqKioqKioqKiogT3RoZXIgRWRnZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioq
KioqKioqCisgKgorICogX19nbF9tZXNoQWRkRWRnZVZlcnRleCggZU9yZyApIGNyZWF0ZXMgYSBu
ZXcgZWRnZSBlTmV3IHN1Y2ggdGhhdAorICogZU5ldyA9PSBlT3JnLT5MbmV4dCwgYW5kIGVOZXct
PkRzdCBpcyBhIG5ld2x5IGNyZWF0ZWQgdmVydGV4LgorICogZU9yZyBhbmQgZU5ldyB3aWxsIGhh
dmUgdGhlIHNhbWUgbGVmdCBmYWNlLgorICoKKyAqIF9fZ2xfbWVzaFNwbGl0RWRnZSggZU9yZyAp
IHNwbGl0cyBlT3JnIGludG8gdHdvIGVkZ2VzIGVPcmcgYW5kIGVOZXcsCisgKiBzdWNoIHRoYXQg
ZU5ldyA9PSBlT3JnLT5MbmV4dC4gIFRoZSBuZXcgdmVydGV4IGlzIGVPcmctPkRzdCA9PSBlTmV3
LT5PcmcuCisgKiBlT3JnIGFuZCBlTmV3IHdpbGwgaGF2ZSB0aGUgc2FtZSBsZWZ0IGZhY2UuCisg
KgorICogX19nbF9tZXNoQ29ubmVjdCggZU9yZywgZURzdCApIGNyZWF0ZXMgYSBuZXcgZWRnZSBm
cm9tIGVPcmctPkRzdAorICogdG8gZURzdC0+T3JnLCBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9u
ZGluZyBoYWxmLWVkZ2UgZU5ldy4KKyAqIElmIGVPcmctPkxmYWNlID09IGVEc3QtPkxmYWNlLCB0
aGlzIHNwbGl0cyBvbmUgbG9vcCBpbnRvIHR3bywKKyAqIGFuZCB0aGUgbmV3bHkgY3JlYXRlZCBs
b29wIGlzIGVOZXctPkxmYWNlLiAgT3RoZXJ3aXNlLCB0d28gZGlzam9pbnQKKyAqIGxvb3BzIGFy
ZSBtZXJnZWQgaW50byBvbmUsIGFuZCB0aGUgbG9vcCBlRHN0LT5MZmFjZSBpcyBkZXN0cm95ZWQu
CisgKgorICogKioqKioqKioqKioqKioqKioqKioqKioqIE90aGVyIE9wZXJhdGlvbnMgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBfX2dsX21lc2hOZXdNZXNoKCkgY3JlYXRl
cyBhIG5ldyBtZXNoIHdpdGggbm8gZWRnZXMsIG5vIHZlcnRpY2VzLAorICogYW5kIG5vIGxvb3Bz
ICh3aGF0IHdlIHVzdWFsbHkgY2FsbCBhICJmYWNlIikuCisgKgorICogX19nbF9tZXNoVW5pb24o
IG1lc2gxLCBtZXNoMiApIGZvcm1zIHRoZSB1bmlvbiBvZiBhbGwgc3RydWN0dXJlcyBpbgorICog
Ym90aCBtZXNoZXMsIGFuZCByZXR1cm5zIHRoZSBuZXcgbWVzaCAodGhlIG9sZCBtZXNoZXMgYXJl
IGRlc3Ryb3llZCkuCisgKgorICogX19nbF9tZXNoRGVsZXRlTWVzaCggbWVzaCApIHdpbGwgZnJl
ZSBhbGwgc3RvcmFnZSBmb3IgYW55IHZhbGlkIG1lc2guCisgKgorICogX19nbF9tZXNoWmFwRmFj
ZSggZlphcCApIGRlc3Ryb3lzIGEgZmFjZSBhbmQgcmVtb3ZlcyBpdCBmcm9tIHRoZQorICogZ2xv
YmFsIGZhY2UgbGlzdC4gIEFsbCBlZGdlcyBvZiBmWmFwIHdpbGwgaGF2ZSBhIE5VTEwgcG9pbnRl
ciBhcyB0aGVpcgorICogbGVmdCBmYWNlLiAgQW55IGVkZ2VzIHdoaWNoIGFsc28gaGF2ZSBhIE5V
TEwgcG9pbnRlciBhcyB0aGVpciByaWdodCBmYWNlCisgKiBhcmUgZGVsZXRlZCBlbnRpcmVseSAo
YWxvbmcgd2l0aCBhbnkgaXNvbGF0ZWQgdmVydGljZXMgdGhpcyBwcm9kdWNlcykuCisgKiBBbiBl
bnRpcmUgbWVzaCBjYW4gYmUgZGVsZXRlZCBieSB6YXBwaW5nIGl0cyBmYWNlcywgb25lIGF0IGEg
dGltZSwKKyAqIGluIGFueSBvcmRlci4gIFphcHBlZCBmYWNlcyBjYW5ub3QgYmUgdXNlZCBpbiBm
dXJ0aGVyIG1lc2ggb3BlcmF0aW9ucyEKKyAqCisgKiBfX2dsX21lc2hDaGVja01lc2goIG1lc2gg
KSBjaGVja3MgYSBtZXNoIGZvciBzZWxmLWNvbnNpc3RlbmN5LgorICovCisKK0dMVWhhbGZFZGdl
CSpfX2dsX21lc2hNYWtlRWRnZSggR0xVbWVzaCAqbWVzaCApOworaW50CQlfX2dsX21lc2hTcGxp
Y2UoIEdMVWhhbGZFZGdlICplT3JnLCBHTFVoYWxmRWRnZSAqZURzdCApOworaW50CQlfX2dsX21l
c2hEZWxldGUoIEdMVWhhbGZFZGdlICplRGVsICk7CisKK0dMVWhhbGZFZGdlCSpfX2dsX21lc2hB
ZGRFZGdlVmVydGV4KCBHTFVoYWxmRWRnZSAqZU9yZyApOworR0xVaGFsZkVkZ2UJKl9fZ2xfbWVz
aFNwbGl0RWRnZSggR0xVaGFsZkVkZ2UgKmVPcmcgKTsKK0dMVWhhbGZFZGdlCSpfX2dsX21lc2hD
b25uZWN0KCBHTFVoYWxmRWRnZSAqZU9yZywgR0xVaGFsZkVkZ2UgKmVEc3QgKTsKKworR0xVbWVz
aAkJKl9fZ2xfbWVzaE5ld01lc2goIHZvaWQgKTsKK0dMVW1lc2gJCSpfX2dsX21lc2hVbmlvbigg
R0xVbWVzaCAqbWVzaDEsIEdMVW1lc2ggKm1lc2gyICk7Cit2b2lkCQlfX2dsX21lc2hEZWxldGVN
ZXNoKCBHTFVtZXNoICptZXNoICk7Cit2b2lkCQlfX2dsX21lc2haYXBGYWNlKCBHTFVmYWNlICpm
WmFwICk7CisKKyNpZmRlZiBOREVCVUcKKyNkZWZpbmUJCV9fZ2xfbWVzaENoZWNrTWVzaCggbWVz
aCApCisjZWxzZQordm9pZAkJX19nbF9tZXNoQ2hlY2tNZXNoKCBHTFVtZXNoICptZXNoICk7Cisj
ZW5kaWYKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL25vcm1h
bC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5jCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1OSBAQAorLyoKKyoqIExpY2Vuc2UgQXBwbGljYWJpbGl0
eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorKiogbWFk
ZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBT
R0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNl
IiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhl
IHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQorKiogdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEg
Y29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjog
TGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBW
aWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDovL29zcy5zZ2kuY29tL3By
b2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vu
c2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiogIkFTIElTIiBiYXNpcywg
d2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCisq
KiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQg
V0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZB
Q1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQg
Tk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENv
ZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBWZXJzaW9uIDEuMi4xLCBy
ZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywK
KyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2ls
aWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVk
IGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNld2hlcmUgaGVyZWluLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25z
OiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworKiogZXN0YWJsaXNoZWQg
YnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQorKiog
T3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4x
KSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lz
dGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIg
NCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCisqKiBXaW5kb3cgU3lz
dGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29m
dHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBT
YW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJl
ZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiogY29tcGxpYW50IHdpdGggdGhl
IE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisqKgorKi8KKy8qCisqKiBB
dXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlzaW9uJAor
KiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMjNSAk
CisqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUg
IjNyZHBhcnR5L2dsdS9nbHVvcy5oIgorI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9saWJ0ZXNzL21l
c2guaCIKKyNpbmNsdWRlICIzcmRwYXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuaCIKKyNpbmNsdWRl
ICIzcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgiCisKKyNkZWZpbmUgVFJVRSAxCisjZGVmaW5l
IEZBTFNFIDAKKworI2RlZmluZSBEb3QodSx2KQkodVswXSp2WzBdICsgdVsxXSp2WzFdICsgdVsy
XSp2WzJdKQorCisjaWYgZGVmaW5lZChGT1JfVFJJVEVfVEVTVF9QUk9HUkFNKSB8fCBkZWZpbmVk
KFRSVUVfUFJPSkVDVCkKK3N0YXRpYyB2b2lkIE5vcm1hbGl6ZSggR0xkb3VibGUgdlszXSApCit7
CisgIEdMZG91YmxlIGxlbiA9IHZbMF0qdlswXSArIHZbMV0qdlsxXSArIHZbMl0qdlsyXTsKKwor
ICBhc3NlcnQoIGxlbiA+IDAgKTsKKyAgbGVuID0gc3FydCggbGVuICk7CisgIHZbMF0gLz0gbGVu
OworICB2WzFdIC89IGxlbjsKKyAgdlsyXSAvPSBsZW47Cit9CisjZW5kaWYKKworI2RlZmluZSBB
QlMoeCkJKCh4KSA8IDAgPyAtKHgpIDogKHgpKQorCitzdGF0aWMgaW50IExvbmdBeGlzKCBHTGRv
dWJsZSB2WzNdICkKK3sKKyAgaW50IGkgPSAwOworCisgIGlmKCBBQlModlsxXSkgPiBBQlModlsw
XSkgKSB7IGkgPSAxOyB9CisgIGlmKCBBQlModlsyXSkgPiBBQlModltpXSkgKSB7IGkgPSAyOyB9
CisgIHJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBDb21wdXRlTm9ybWFsKCBHTFV0ZXNzZWxh
dG9yICp0ZXNzLCBHTGRvdWJsZSBub3JtWzNdICkKK3sKKyAgR0xVdmVydGV4ICp2LCAqdjEsICp2
MjsKKyAgR0xkb3VibGUgYywgdExlbjIsIG1heExlbjI7CisgIEdMZG91YmxlIG1heFZhbFszXSwg
bWluVmFsWzNdLCBkMVszXSwgZDJbM10sIHROb3JtWzNdOworICBHTFV2ZXJ0ZXggKm1heFZlcnRb
M10sICptaW5WZXJ0WzNdOworICBHTFV2ZXJ0ZXggKnZIZWFkID0gJnRlc3MtPm1lc2gtPnZIZWFk
OworICBpbnQgaTsKKworICBtYXhWYWxbMF0gPSBtYXhWYWxbMV0gPSBtYXhWYWxbMl0gPSAtMiAq
IEdMVV9URVNTX01BWF9DT09SRDsKKyAgbWluVmFsWzBdID0gbWluVmFsWzFdID0gbWluVmFsWzJd
ID0gMiAqIEdMVV9URVNTX01BWF9DT09SRDsKKworICBmb3IoIHYgPSB2SGVhZC0+bmV4dDsgdiAh
PSB2SGVhZDsgdiA9IHYtPm5leHQgKSB7CisgICAgZm9yKCBpID0gMDsgaSA8IDM7ICsraSApIHsK
KyAgICAgIGMgPSB2LT5jb29yZHNbaV07CisgICAgICBpZiggYyA8IG1pblZhbFtpXSApIHsgbWlu
VmFsW2ldID0gYzsgbWluVmVydFtpXSA9IHY7IH0KKyAgICAgIGlmKCBjID4gbWF4VmFsW2ldICkg
eyBtYXhWYWxbaV0gPSBjOyBtYXhWZXJ0W2ldID0gdjsgfQorICAgIH0KKyAgfQorCisgIC8qIEZp
bmQgdHdvIHZlcnRpY2VzIHNlcGFyYXRlZCBieSBhdCBsZWFzdCAxL3NxcnQoMykgb2YgdGhlIG1h
eGltdW0KKyAgICogZGlzdGFuY2UgYmV0d2VlbiBhbnkgdHdvIHZlcnRpY2VzCisgICAqLworICBp
ID0gMDsKKyAgaWYoIG1heFZhbFsxXSAtIG1pblZhbFsxXSA+IG1heFZhbFswXSAtIG1pblZhbFsw
XSApIHsgaSA9IDE7IH0KKyAgaWYoIG1heFZhbFsyXSAtIG1pblZhbFsyXSA+IG1heFZhbFtpXSAt
IG1pblZhbFtpXSApIHsgaSA9IDI7IH0KKyAgaWYoIG1pblZhbFtpXSA+PSBtYXhWYWxbaV0gKSB7
CisgICAgLyogQWxsIHZlcnRpY2VzIGFyZSB0aGUgc2FtZSAtLSBub3JtYWwgZG9lc24ndCBtYXR0
ZXIgKi8KKyAgICBub3JtWzBdID0gMDsgbm9ybVsxXSA9IDA7IG5vcm1bMl0gPSAxOworICAgIHJl
dHVybjsKKyAgfQorCisgIC8qIExvb2sgZm9yIGEgdGhpcmQgdmVydGV4IHdoaWNoIGZvcm1zIHRo
ZSB0cmlhbmdsZSB3aXRoIG1heGltdW0gYXJlYQorICAgKiAoTGVuZ3RoIG9mIG5vcm1hbCA9PSB0
d2ljZSB0aGUgdHJpYW5nbGUgYXJlYSkKKyAgICovCisgIG1heExlbjIgPSAwOworICB2MSA9IG1p
blZlcnRbaV07CisgIHYyID0gbWF4VmVydFtpXTsKKyAgZDFbMF0gPSB2MS0+Y29vcmRzWzBdIC0g
djItPmNvb3Jkc1swXTsKKyAgZDFbMV0gPSB2MS0+Y29vcmRzWzFdIC0gdjItPmNvb3Jkc1sxXTsK
KyAgZDFbMl0gPSB2MS0+Y29vcmRzWzJdIC0gdjItPmNvb3Jkc1syXTsKKyAgZm9yKCB2ID0gdkhl
YWQtPm5leHQ7IHYgIT0gdkhlYWQ7IHYgPSB2LT5uZXh0ICkgeworICAgIGQyWzBdID0gdi0+Y29v
cmRzWzBdIC0gdjItPmNvb3Jkc1swXTsKKyAgICBkMlsxXSA9IHYtPmNvb3Jkc1sxXSAtIHYyLT5j
b29yZHNbMV07CisgICAgZDJbMl0gPSB2LT5jb29yZHNbMl0gLSB2Mi0+Y29vcmRzWzJdOworICAg
IHROb3JtWzBdID0gZDFbMV0qZDJbMl0gLSBkMVsyXSpkMlsxXTsKKyAgICB0Tm9ybVsxXSA9IGQx
WzJdKmQyWzBdIC0gZDFbMF0qZDJbMl07CisgICAgdE5vcm1bMl0gPSBkMVswXSpkMlsxXSAtIGQx
WzFdKmQyWzBdOworICAgIHRMZW4yID0gdE5vcm1bMF0qdE5vcm1bMF0gKyB0Tm9ybVsxXSp0Tm9y
bVsxXSArIHROb3JtWzJdKnROb3JtWzJdOworICAgIGlmKCB0TGVuMiA+IG1heExlbjIgKSB7Cisg
ICAgICBtYXhMZW4yID0gdExlbjI7CisgICAgICBub3JtWzBdID0gdE5vcm1bMF07CisgICAgICBu
b3JtWzFdID0gdE5vcm1bMV07CisgICAgICBub3JtWzJdID0gdE5vcm1bMl07CisgICAgfQorICB9
CisKKyAgaWYoIG1heExlbjIgPD0gMCApIHsKKyAgICAvKiBBbGwgcG9pbnRzIGxpZSBvbiBhIHNp
bmdsZSBsaW5lIC0tIGFueSBkZWNlbnQgbm9ybWFsIHdpbGwgZG8gKi8KKyAgICBub3JtWzBdID0g
bm9ybVsxXSA9IG5vcm1bMl0gPSAwOworICAgIG5vcm1bTG9uZ0F4aXMoZDEpXSA9IDE7CisgIH0K
K30KKyAgCisKK3N0YXRpYyB2b2lkIENoZWNrT3JpZW50YXRpb24oIEdMVXRlc3NlbGF0b3IgKnRl
c3MgKQoreworICBHTGRvdWJsZSBhcmVhOworICBHTFVmYWNlICpmLCAqZkhlYWQgPSAmdGVzcy0+
bWVzaC0+ZkhlYWQ7CisgIEdMVXZlcnRleCAqdiwgKnZIZWFkID0gJnRlc3MtPm1lc2gtPnZIZWFk
OworICBHTFVoYWxmRWRnZSAqZTsKKworICAvKiBXaGVuIHdlIGNvbXB1dGUgdGhlIG5vcm1hbCBh
dXRvbWF0aWNhbGx5LCB3ZSBjaG9vc2UgdGhlIG9yaWVudGF0aW9uCisgICAqIHNvIHRoYXQgdGhl
IHRoZSBzdW0gb2YgdGhlIHNpZ25lZCBhcmVhcyBvZiBhbGwgY29udG91cnMgaXMgbm9uLW5lZ2F0
aXZlLgorICAgKi8KKyAgYXJlYSA9IDA7CisgIGZvciggZiA9IGZIZWFkLT5uZXh0OyBmICE9IGZI
ZWFkOyBmID0gZi0+bmV4dCApIHsKKyAgICBlID0gZi0+YW5FZGdlOworICAgIGlmKCBlLT53aW5k
aW5nIDw9IDAgKSBjb250aW51ZTsKKyAgICBkbyB7CisgICAgICBhcmVhICs9IChlLT5PcmctPnMg
LSBlLT5Ec3QtPnMpICogKGUtPk9yZy0+dCArIGUtPkRzdC0+dCk7CisgICAgICBlID0gZS0+TG5l
eHQ7CisgICAgfSB3aGlsZSggZSAhPSBmLT5hbkVkZ2UgKTsKKyAgfQorICBpZiggYXJlYSA8IDAg
KSB7CisgICAgLyogUmV2ZXJzZSB0aGUgb3JpZW50YXRpb24gYnkgZmxpcHBpbmcgYWxsIHRoZSB0
LWNvb3JkaW5hdGVzICovCisgICAgZm9yKCB2ID0gdkhlYWQtPm5leHQ7IHYgIT0gdkhlYWQ7IHYg
PSB2LT5uZXh0ICkgeworICAgICAgdi0+dCA9IC0gdi0+dDsKKyAgICB9CisgICAgdGVzcy0+dFVu
aXRbMF0gPSAtIHRlc3MtPnRVbml0WzBdOworICAgIHRlc3MtPnRVbml0WzFdID0gLSB0ZXNzLT50
VW5pdFsxXTsKKyAgICB0ZXNzLT50VW5pdFsyXSA9IC0gdGVzcy0+dFVuaXRbMl07CisgIH0KK30K
KworI2lmZGVmIEZPUl9UUklURV9URVNUX1BST0dSQU0KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2V4
dGVybiBpbnQgUmFuZG9tU3dlZXA7CisjZGVmaW5lIFNfVU5JVF9YCShSYW5kb21Td2VlcCA/ICgy
KmRyYW5kNDgoKS0xKSA6IDEuMCkKKyNkZWZpbmUgU19VTklUX1kJKFJhbmRvbVN3ZWVwID8gKDIq
ZHJhbmQ0OCgpLTEpIDogMC4wKQorI2Vsc2UKKyNpZiBkZWZpbmVkKFNMQU5URURfU1dFRVApIAor
LyogVGhlICJmZWF0dXJlIG1lcmdpbmciIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBjb21wbGV0ZS4g
IFRoZXJlIGFyZQorICogc3BlY2lhbCBjYXNlcyB3aGVyZSBlZGdlcyBhcmUgbmVhcmx5IHBhcmFs
bGVsIHRvIHRoZSBzd2VlcCBsaW5lCisgKiB3aGljaCBhcmUgbm90IGltcGxlbWVudGVkLiAgVGhl
IGFsZ29yaXRobSBzaG91bGQgc3RpbGwgYmVoYXZlCisgKiByb2J1c3RseSAoaWUuIHByb2R1Y2Ug
YSByZWFzb25hYmxlIHRlc3NlbGF0aW9uKSBpbiB0aGUgcHJlc2VuY2UKKyAqIG9mIHN1Y2ggZWRn
ZXMsIGhvd2V2ZXIgaXQgbWF5IG1pc3MgZmVhdHVyZXMgd2hpY2ggY291bGQgaGF2ZSBiZWVuCisg
KiBtZXJnZWQuICBXZSBjb3VsZCBtaW5pbWl6ZSB0aGlzIGVmZmVjdCBieSBjaG9vc2luZyB0aGUg
c3dlZXAgbGluZQorICogZGlyZWN0aW9uIHRvIGJlIHNvbWV0aGluZyB1bnVzdWFsIChpZS4gbm90
IHBhcmFsbGVsIHRvIG9uZSBvZiB0aGUKKyAqIGNvb3JkaW5hdGUgYXhlcykuCisgKi8KKyNkZWZp
bmUgU19VTklUX1gJMC41MDk0MTUzOTU2NDk1NTM4NQkvKiBQcmUtbm9ybWFsaXplZCAqLworI2Rl
ZmluZSBTX1VOSVRfWQkwLjg2MDUyMDc0NjIyMDEwNjMzCisjZWxzZQorI2RlZmluZSBTX1VOSVRf
WAkxLjAKKyNkZWZpbmUgU19VTklUX1kJMC4wCisjZW5kaWYKKyNlbmRpZgorCisvKiBEZXRlcm1p
bmUgdGhlIHBvbHlnb24gbm9ybWFsIGFuZCBwcm9qZWN0IHZlcnRpY2VzIG9udG8gdGhlIHBsYW5l
CisgKiBvZiB0aGUgcG9seWdvbi4KKyAqLwordm9pZCBfX2dsX3Byb2plY3RQb2x5Z29uKCBHTFV0
ZXNzZWxhdG9yICp0ZXNzICkKK3sKKyAgR0xVdmVydGV4ICp2LCAqdkhlYWQgPSAmdGVzcy0+bWVz
aC0+dkhlYWQ7CisgIEdMZG91YmxlIG5vcm1bM107CisgIEdMZG91YmxlICpzVW5pdCwgKnRVbml0
OworICBpbnQgaSwgY29tcHV0ZWROb3JtYWwgPSBGQUxTRTsKKworICBub3JtWzBdID0gdGVzcy0+
bm9ybWFsWzBdOworICBub3JtWzFdID0gdGVzcy0+bm9ybWFsWzFdOworICBub3JtWzJdID0gdGVz
cy0+bm9ybWFsWzJdOworICBpZiggbm9ybVswXSA9PSAwICYmIG5vcm1bMV0gPT0gMCAmJiBub3Jt
WzJdID09IDAgKSB7CisgICAgQ29tcHV0ZU5vcm1hbCggdGVzcywgbm9ybSApOworICAgIGNvbXB1
dGVkTm9ybWFsID0gVFJVRTsKKyAgfQorICBzVW5pdCA9IHRlc3MtPnNVbml0OworICB0VW5pdCA9
IHRlc3MtPnRVbml0OworICBpID0gTG9uZ0F4aXMoIG5vcm0gKTsKKworI2lmIGRlZmluZWQoRk9S
X1RSSVRFX1RFU1RfUFJPR1JBTSkgfHwgZGVmaW5lZChUUlVFX1BST0pFQ1QpCisgIC8qIENob29z
ZSB0aGUgaW5pdGlhbCBzVW5pdCB2ZWN0b3IgdG8gYmUgYXBwcm94aW1hdGVseSBwZXJwZW5kaWN1
bGFyCisgICAqIHRvIHRoZSBub3JtYWwuCisgICAqLworICBOb3JtYWxpemUoIG5vcm0gKTsKKwor
ICBzVW5pdFtpXSA9IDA7CisgIHNVbml0WyhpKzEpJTNdID0gU19VTklUX1g7CisgIHNVbml0Wyhp
KzIpJTNdID0gU19VTklUX1k7CisKKyAgLyogTm93IG1ha2UgaXQgZXhhY3RseSBwZXJwZW5kaWN1
bGFyICovCisgIHcgPSBEb3QoIHNVbml0LCBub3JtICk7CisgIHNVbml0WzBdIC09IHcgKiBub3Jt
WzBdOworICBzVW5pdFsxXSAtPSB3ICogbm9ybVsxXTsKKyAgc1VuaXRbMl0gLT0gdyAqIG5vcm1b
Ml07CisgIE5vcm1hbGl6ZSggc1VuaXQgKTsKKworICAvKiBDaG9vc2UgdFVuaXQgc28gdGhhdCAo
c1VuaXQsdFVuaXQsbm9ybSkgZm9ybSBhIHJpZ2h0LWhhbmRlZCBmcmFtZSAqLworICB0VW5pdFsw
XSA9IG5vcm1bMV0qc1VuaXRbMl0gLSBub3JtWzJdKnNVbml0WzFdOworICB0VW5pdFsxXSA9IG5v
cm1bMl0qc1VuaXRbMF0gLSBub3JtWzBdKnNVbml0WzJdOworICB0VW5pdFsyXSA9IG5vcm1bMF0q
c1VuaXRbMV0gLSBub3JtWzFdKnNVbml0WzBdOworICBOb3JtYWxpemUoIHRVbml0ICk7CisjZWxz
ZQorICAvKiBQcm9qZWN0IHBlcnBlbmRpY3VsYXIgdG8gYSBjb29yZGluYXRlIGF4aXMgLS0gYmV0
dGVyIG51bWVyaWNhbGx5ICovCisgIHNVbml0W2ldID0gMDsKKyAgc1VuaXRbKGkrMSklM10gPSBT
X1VOSVRfWDsKKyAgc1VuaXRbKGkrMiklM10gPSBTX1VOSVRfWTsKKyAgCisgIHRVbml0W2ldID0g
MDsKKyAgdFVuaXRbKGkrMSklM10gPSAobm9ybVtpXSA+IDApID8gLVNfVU5JVF9ZIDogU19VTklU
X1k7CisgIHRVbml0WyhpKzIpJTNdID0gKG5vcm1baV0gPiAwKSA/IFNfVU5JVF9YIDogLVNfVU5J
VF9YOworI2VuZGlmCisKKyAgLyogUHJvamVjdCB0aGUgdmVydGljZXMgb250byB0aGUgc3dlZXAg
cGxhbmUgKi8KKyAgZm9yKCB2ID0gdkhlYWQtPm5leHQ7IHYgIT0gdkhlYWQ7IHYgPSB2LT5uZXh0
ICkgeworICAgIHYtPnMgPSBEb3QoIHYtPmNvb3Jkcywgc1VuaXQgKTsKKyAgICB2LT50ID0gRG90
KCB2LT5jb29yZHMsIHRVbml0ICk7CisgIH0KKyAgaWYoIGNvbXB1dGVkTm9ybWFsICkgeworICAg
IENoZWNrT3JpZW50YXRpb24oIHRlc3MgKTsKKyAgfQorfQpJbmRleDogV2ViQ29yZS8zcmRwYXJ0
eS9nbHUvbGlidGVzcy9ub3JtYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLzNyZHBhcnR5L2ds
dS9saWJ0ZXNzL25vcm1hbC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS8zcmRwYXJ0eS9nbHUv
bGlidGVzcy9ub3JtYWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyoqIExp
Y2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhp
cyBmaWxlIGFyZQorKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMg
cGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9u
IDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBz
dWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90
IHVzZQorKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
IFlvdSBtYXkgb2J0YWluIGEgY29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFw
aGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQ
YXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0
cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJv
dmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgor
KiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVT
IEFORCBDT05ESVRJT05TCisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRB
VElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hB
TlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElD
VUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29k
ZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisq
KiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkg
U2lsaWNvbiBHcmFwaGljcywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0
IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFu
eSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBl
bHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFs
IE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNl
cworKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFs
IENvZGUgYXJlIFRoZQorKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0
aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVu
R0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwg
cmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRo
ZSBYCisqKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIg
MTksIDE5OTguIFRoaXMgc29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0wo
UikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBT
R0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiog
Y29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24u
CisqKgorKi8KKy8qCisqKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAk
RGF0ZSQgJFJldmlzaW9uJAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xp
YnRlc3Mvbm9ybWFsLmgjNSAkCisqLworCisjaWZuZGVmIF9fbm9ybWFsX2hfCisjZGVmaW5lIF9f
bm9ybWFsX2hfCisKKyNpbmNsdWRlICIzcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgiCisKKy8q
IF9fZ2xfcHJvamVjdFBvbHlnb24oIHRlc3MgKSBkZXRlcm1pbmVzIHRoZSBwb2x5Z29uIG5vcm1h
bAorICogYW5kIHByb2plY3QgdmVydGljZXMgb250byB0aGUgcGxhbmUgb2YgdGhlIHBvbHlnb24u
CisgKi8KK3ZvaWQgX19nbF9wcm9qZWN0UG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApOwor
CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhl
YXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5
cS1oZWFwLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3By
aW9yaXR5cS1oZWFwLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjYwIEBACisvKgorKiogTGlj
ZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlz
IGZpbGUgYXJlCisqKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBw
ZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24g
MS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1
YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qg
dXNlCisqKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4g
WW91IG1heSBvYnRhaW4gYSBjb3B5CisqKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBo
aWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBh
cmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRw
Oi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92
aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisq
KiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMg
QU5EIENPTkRJVElPTlMKKyoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFU
SU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFO
VEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNV
TEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2Rl
LiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoq
IFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBT
aWxpY29uIEdyYXBoaWNzLAorKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQg
KGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55
IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVs
c2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwg
Tm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2Vz
CisqKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwg
Q29kZSBhcmUgVGhlCisqKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRp
b24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5H
TChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCBy
ZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhl
IFgKKyoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAx
OSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQorKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChS
KSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNH
SSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBj
b21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4K
KyoqCisqLworLyoKKyoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICRE
YXRlJCAkUmV2aXNpb24kCisqKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGli
dGVzcy9wcmlvcml0eXEtaGVhcC5jIzUgJAorKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lu
Y2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgIjNyZHBhcnR5
L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgiCisjaW5jbHVkZSAiM3JkcGFydHkvZ2x1L2xpYnRlc3Mv
cHJpb3JpdHlxLWhlYXAuaCIKKworI2RlZmluZSBJTklUX1NJWkUJMzIKKworI2RlZmluZSBUUlVF
IDEKKyNkZWZpbmUgRkFMU0UgMAorCisjaWZkZWYgRk9SX1RSSVRFX1RFU1RfUFJPR1JBTQorI2Rl
ZmluZSBMRVEoeCx5KQkoKnBxLT5sZXEpKHgseSkKKyNlbHNlCisvKiBWaW9sYXRlcyBtb2R1bGFy
aXR5LCBidXQgYSBsaXR0bGUgZmFzdGVyICovCisjaW5jbHVkZSAiZ2VvbS5oIgorI2RlZmluZSBM
RVEoeCx5KQlWZXJ0TGVxKChHTFV2ZXJ0ZXggKil4LCAoR0xVdmVydGV4ICopeSkKKyNlbmRpZgor
CisvKiByZWFsbHkgX19nbF9wcUhlYXBOZXdQcmlvcml0eVEgKi8KK1ByaW9yaXR5USAqcHFOZXdQ
cmlvcml0eVEoIGludCAoKmxlcSkoUFFrZXkga2V5MSwgUFFrZXkga2V5MikgKQoreworICBQcmlv
cml0eVEgKnBxID0gKFByaW9yaXR5USAqKW1lbUFsbG9jKCBzaXplb2YoIFByaW9yaXR5USApKTsK
KyAgaWYgKHBxID09IE5VTEwpIHJldHVybiBOVUxMOworCisgIHBxLT5zaXplID0gMDsKKyAgcHEt
Pm1heCA9IElOSVRfU0laRTsKKyAgcHEtPm5vZGVzID0gKFBRbm9kZSAqKW1lbUFsbG9jKCAoSU5J
VF9TSVpFICsgMSkgKiBzaXplb2YocHEtPm5vZGVzWzBdKSApOworICBpZiAocHEtPm5vZGVzID09
IE5VTEwpIHsKKyAgICAgbWVtRnJlZShwcSk7CisgICAgIHJldHVybiBOVUxMOworICB9CisKKyAg
cHEtPmhhbmRsZXMgPSAoUFFoYW5kbGVFbGVtICopbWVtQWxsb2MoIChJTklUX1NJWkUgKyAxKSAq
IHNpemVvZihwcS0+aGFuZGxlc1swXSkgKTsKKyAgaWYgKHBxLT5oYW5kbGVzID09IE5VTEwpIHsK
KyAgICAgbWVtRnJlZShwcS0+bm9kZXMpOworICAgICBtZW1GcmVlKHBxKTsKKyAgICAgcmV0dXJu
IE5VTEw7CisgIH0KKworICBwcS0+aW5pdGlhbGl6ZWQgPSBGQUxTRTsKKyAgcHEtPmZyZWVMaXN0
ID0gMDsKKyAgcHEtPmxlcSA9IGxlcTsKKworICBwcS0+bm9kZXNbMV0uaGFuZGxlID0gMTsJLyog
c28gdGhhdCBNaW5pbXVtKCkgcmV0dXJucyBOVUxMICovCisgIHBxLT5oYW5kbGVzWzFdLmtleSA9
IE5VTEw7CisgIHJldHVybiBwcTsKK30KKworLyogcmVhbGx5IF9fZ2xfcHFIZWFwRGVsZXRlUHJp
b3JpdHlRICovCit2b2lkIHBxRGVsZXRlUHJpb3JpdHlRKCBQcmlvcml0eVEgKnBxICkKK3sKKyAg
bWVtRnJlZSggcHEtPmhhbmRsZXMgKTsKKyAgbWVtRnJlZSggcHEtPm5vZGVzICk7CisgIG1lbUZy
ZWUoIHBxICk7Cit9CisKKworc3RhdGljIHZvaWQgRmxvYXREb3duKCBQcmlvcml0eVEgKnBxLCBs
b25nIGN1cnIgKQoreworICBQUW5vZGUgKm4gPSBwcS0+bm9kZXM7CisgIFBRaGFuZGxlRWxlbSAq
aCA9IHBxLT5oYW5kbGVzOworICBQUWhhbmRsZSBoQ3VyciwgaENoaWxkOworICBsb25nIGNoaWxk
OworCisgIGhDdXJyID0gbltjdXJyXS5oYW5kbGU7CisgIGZvciggOzsgKSB7CisgICAgY2hpbGQg
PSBjdXJyIDw8IDE7CisgICAgaWYoIGNoaWxkIDwgcHEtPnNpemUgJiYgTEVRKCBoW25bY2hpbGQr
MV0uaGFuZGxlXS5rZXksCisJCQkJIGhbbltjaGlsZF0uaGFuZGxlXS5rZXkgKSkgeworICAgICAg
KytjaGlsZDsKKyAgICB9CisKKyAgICBhc3NlcnQoY2hpbGQgPD0gcHEtPm1heCk7CisKKyAgICBo
Q2hpbGQgPSBuW2NoaWxkXS5oYW5kbGU7CisgICAgaWYoIGNoaWxkID4gcHEtPnNpemUgfHwgTEVR
KCBoW2hDdXJyXS5rZXksIGhbaENoaWxkXS5rZXkgKSkgeworICAgICAgbltjdXJyXS5oYW5kbGUg
PSBoQ3VycjsKKyAgICAgIGhbaEN1cnJdLm5vZGUgPSBjdXJyOworICAgICAgYnJlYWs7CisgICAg
fQorICAgIG5bY3Vycl0uaGFuZGxlID0gaENoaWxkOworICAgIGhbaENoaWxkXS5ub2RlID0gY3Vy
cjsKKyAgICBjdXJyID0gY2hpbGQ7CisgIH0KK30KKworCitzdGF0aWMgdm9pZCBGbG9hdFVwKCBQ
cmlvcml0eVEgKnBxLCBsb25nIGN1cnIgKQoreworICBQUW5vZGUgKm4gPSBwcS0+bm9kZXM7Cisg
IFBRaGFuZGxlRWxlbSAqaCA9IHBxLT5oYW5kbGVzOworICBQUWhhbmRsZSBoQ3VyciwgaFBhcmVu
dDsKKyAgbG9uZyBwYXJlbnQ7CisKKyAgaEN1cnIgPSBuW2N1cnJdLmhhbmRsZTsKKyAgZm9yKCA7
OyApIHsKKyAgICBwYXJlbnQgPSBjdXJyID4+IDE7CisgICAgaFBhcmVudCA9IG5bcGFyZW50XS5o
YW5kbGU7CisgICAgaWYoIHBhcmVudCA9PSAwIHx8IExFUSggaFtoUGFyZW50XS5rZXksIGhbaEN1
cnJdLmtleSApKSB7CisgICAgICBuW2N1cnJdLmhhbmRsZSA9IGhDdXJyOworICAgICAgaFtoQ3Vy
cl0ubm9kZSA9IGN1cnI7CisgICAgICBicmVhazsKKyAgICB9CisgICAgbltjdXJyXS5oYW5kbGUg
PSBoUGFyZW50OworICAgIGhbaFBhcmVudF0ubm9kZSA9IGN1cnI7CisgICAgY3VyciA9IHBhcmVu
dDsKKyAgfQorfQorCisvKiByZWFsbHkgX19nbF9wcUhlYXBJbml0ICovCit2b2lkIHBxSW5pdCgg
UHJpb3JpdHlRICpwcSApCit7CisgIGxvbmcgaTsKKworICAvKiBUaGlzIG1ldGhvZCBvZiBidWls
ZGluZyBhIGhlYXAgaXMgTyhuKSwgcmF0aGVyIHRoYW4gTyhuIGxnIG4pLiAqLworCisgIGZvcigg
aSA9IHBxLT5zaXplOyBpID49IDE7IC0taSApIHsKKyAgICBGbG9hdERvd24oIHBxLCBpICk7Cisg
IH0KKyAgcHEtPmluaXRpYWxpemVkID0gVFJVRTsKK30KKworLyogcmVhbGx5IF9fZ2xfcHFIZWFw
SW5zZXJ0ICovCisvKiByZXR1cm5zIExPTkdfTUFYIGlmZiBvdXQgb2YgbWVtb3J5ICovCitQUWhh
bmRsZSBwcUluc2VydCggUHJpb3JpdHlRICpwcSwgUFFrZXkga2V5TmV3ICkKK3sKKyAgbG9uZyBj
dXJyOworICBQUWhhbmRsZSBmcmVlOworCisgIGN1cnIgPSArKyBwcS0+c2l6ZTsKKyAgaWYoIChj
dXJyKjIpID4gcHEtPm1heCApIHsKKyAgICBQUW5vZGUgKnNhdmVOb2Rlcz0gcHEtPm5vZGVzOwor
ICAgIFBRaGFuZGxlRWxlbSAqc2F2ZUhhbmRsZXM9IHBxLT5oYW5kbGVzOworCisgICAgLyogSWYg
dGhlIGhlYXAgb3ZlcmZsb3dzLCBkb3VibGUgaXRzIHNpemUuICovCisgICAgcHEtPm1heCA8PD0g
MTsKKyAgICBwcS0+bm9kZXMgPSAoUFFub2RlICopbWVtUmVhbGxvYyggcHEtPm5vZGVzLCAKKwkJ
CQkgICAgIChzaXplX3QpIAorCQkJCSAgICAgKChwcS0+bWF4ICsgMSkgKiBzaXplb2YoIHBxLT5u
b2Rlc1swXSApKSk7CisgICAgaWYgKHBxLT5ub2RlcyA9PSBOVUxMKSB7CisgICAgICAgcHEtPm5v
ZGVzID0gc2F2ZU5vZGVzOwkvKiByZXN0b3JlIHB0ciB0byBmcmVlIHVwb24gcmV0dXJuICovCisg
ICAgICAgcmV0dXJuIExPTkdfTUFYOworICAgIH0KKyAgICBwcS0+aGFuZGxlcyA9IChQUWhhbmRs
ZUVsZW0gKiltZW1SZWFsbG9jKCBwcS0+aGFuZGxlcywKKwkJCSAgICAgICAgICAgICAgICAgICAg
IChzaXplX3QpCisJCQkgICAgICAgICAgICAgICAgICAgICAgKChwcS0+bWF4ICsgMSkgKiAKKwkJ
CQkJICAgICAgIHNpemVvZiggcHEtPmhhbmRsZXNbMF0gKSkpOworICAgIGlmIChwcS0+aGFuZGxl
cyA9PSBOVUxMKSB7CisgICAgICAgcHEtPmhhbmRsZXMgPSBzYXZlSGFuZGxlczsgLyogcmVzdG9y
ZSBwdHIgdG8gZnJlZSB1cG9uIHJldHVybiAqLworICAgICAgIHJldHVybiBMT05HX01BWDsKKyAg
ICB9CisgIH0KKworICBpZiggcHEtPmZyZWVMaXN0ID09IDAgKSB7CisgICAgZnJlZSA9IGN1cnI7
CisgIH0gZWxzZSB7CisgICAgZnJlZSA9IHBxLT5mcmVlTGlzdDsKKyAgICBwcS0+ZnJlZUxpc3Qg
PSBwcS0+aGFuZGxlc1tmcmVlXS5ub2RlOworICB9CisKKyAgcHEtPm5vZGVzW2N1cnJdLmhhbmRs
ZSA9IGZyZWU7CisgIHBxLT5oYW5kbGVzW2ZyZWVdLm5vZGUgPSBjdXJyOworICBwcS0+aGFuZGxl
c1tmcmVlXS5rZXkgPSBrZXlOZXc7CisKKyAgaWYoIHBxLT5pbml0aWFsaXplZCApIHsKKyAgICBG
bG9hdFVwKCBwcSwgY3VyciApOworICB9CisgIGFzc2VydChmcmVlICE9IExPTkdfTUFYKTsKKyAg
cmV0dXJuIGZyZWU7Cit9CisKKy8qIHJlYWxseSBfX2dsX3BxSGVhcEV4dHJhY3RNaW4gKi8KK1BR
a2V5IHBxRXh0cmFjdE1pbiggUHJpb3JpdHlRICpwcSApCit7CisgIFBRbm9kZSAqbiA9IHBxLT5u
b2RlczsKKyAgUFFoYW5kbGVFbGVtICpoID0gcHEtPmhhbmRsZXM7CisgIFBRaGFuZGxlIGhNaW4g
PSBuWzFdLmhhbmRsZTsKKyAgUFFrZXkgbWluID0gaFtoTWluXS5rZXk7CisKKyAgaWYoIHBxLT5z
aXplID4gMCApIHsKKyAgICBuWzFdLmhhbmRsZSA9IG5bcHEtPnNpemVdLmhhbmRsZTsKKyAgICBo
W25bMV0uaGFuZGxlXS5ub2RlID0gMTsKKworICAgIGhbaE1pbl0ua2V5ID0gTlVMTDsKKyAgICBo
W2hNaW5dLm5vZGUgPSBwcS0+ZnJlZUxpc3Q7CisgICAgcHEtPmZyZWVMaXN0ID0gaE1pbjsKKwor
ICAgIGlmKCAtLSBwcS0+c2l6ZSA+IDAgKSB7CisgICAgICBGbG9hdERvd24oIHBxLCAxICk7Cisg
ICAgfQorICB9CisgIHJldHVybiBtaW47Cit9CisKKy8qIHJlYWxseSBfX2dsX3BxSGVhcERlbGV0
ZSAqLwordm9pZCBwcURlbGV0ZSggUHJpb3JpdHlRICpwcSwgUFFoYW5kbGUgaEN1cnIgKQorewor
ICBQUW5vZGUgKm4gPSBwcS0+bm9kZXM7CisgIFBRaGFuZGxlRWxlbSAqaCA9IHBxLT5oYW5kbGVz
OworICBsb25nIGN1cnI7CisKKyAgYXNzZXJ0KCBoQ3VyciA+PSAxICYmIGhDdXJyIDw9IHBxLT5t
YXggJiYgaFtoQ3Vycl0ua2V5ICE9IE5VTEwgKTsKKworICBjdXJyID0gaFtoQ3Vycl0ubm9kZTsK
KyAgbltjdXJyXS5oYW5kbGUgPSBuW3BxLT5zaXplXS5oYW5kbGU7CisgIGhbbltjdXJyXS5oYW5k
bGVdLm5vZGUgPSBjdXJyOworCisgIGlmKCBjdXJyIDw9IC0tIHBxLT5zaXplICkgeworICAgIGlm
KCBjdXJyIDw9IDEgfHwgTEVRKCBoW25bY3Vycj4+MV0uaGFuZGxlXS5rZXksIGhbbltjdXJyXS5o
YW5kbGVdLmtleSApKSB7CisgICAgICBGbG9hdERvd24oIHBxLCBjdXJyICk7CisgICAgfSBlbHNl
IHsKKyAgICAgIEZsb2F0VXAoIHBxLCBjdXJyICk7CisgICAgfQorICB9CisgIGhbaEN1cnJdLmtl
eSA9IE5VTEw7CisgIGhbaEN1cnJdLm5vZGUgPSBwcS0+ZnJlZUxpc3Q7CisgIHBxLT5mcmVlTGlz
dCA9IGhDdXJyOworfQpJbmRleDogV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0
eXEtaGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvcHJp
b3JpdHlxLWhlYXAuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRl
c3MvcHJpb3JpdHlxLWhlYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisq
KiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9m
IHRoaXMgZmlsZSBhcmUKKyoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNl
IGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKKyoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVy
c2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcworKiogZmlsZSBh
cmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG5vdCB1c2UKKyoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKKyoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24g
R3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCisqKiBBbXBoaXRoZWF0
cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6CisqKiAKKyoq
IGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgorKiogCisqKiBOb3RlIHRoYXQsIGFz
IHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24g
YW4KKyoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFO
VElFUyBBTkQgQ09ORElUSU9OUworKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJ
TUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECisqKiBDT05ESVRJT05TIE9GIE1F
UkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKKyoqIFBB
UlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisqKiAKKyoqIE9yaWdpbmFs
IENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9u
LAorKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVk
IGJ5IFNpbGljb24gR3JhcGhpY3MsCisqKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHly
aWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyoqIENvcHlyaWdodCBp
biBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAor
KiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqIAorKiogQWRkaXRp
b25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVy
ZmFjZXMKKyoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmln
aW5hbCBDb2RlIGFyZSBUaGUKKyoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lm
aWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCisqKiBBcHJpbCAxLCAxOTk5OyBUaGUg
T3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KKyoqIDEu
MyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0
aCB0aGUgWAorKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3Rv
YmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCisqKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3Bl
bkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCisqKiBwdWJsaXNoZWQg
YnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcK
KyoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0
aW9uLgorKioKKyovCisvKgorKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCisqKgor
KiogJERhdGUkICRSZXZpc2lvbiQKKyoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2ds
dS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmgjNSAkCisqLworCisjaWZuZGVmIF9fcHJpb3JpdHlx
X2hlYXBfaF8KKyNkZWZpbmUgX19wcmlvcml0eXFfaGVhcF9oXworCisvKiBVc2UgI2RlZmluZSdz
IHNvIHRoYXQgYW5vdGhlciBoZWFwIGltcGxlbWVudGF0aW9uIGNhbiB1c2UgdGhpcyBvbmUgKi8K
KworI2RlZmluZSBQUWtleQkJCVBRSGVhcEtleQorI2RlZmluZSBQUWhhbmRsZQkJUFFIZWFwSGFu
ZGxlCisjZGVmaW5lIFByaW9yaXR5UQkJUHJpb3JpdHlRSGVhcAorCisjZGVmaW5lIHBxTmV3UHJp
b3JpdHlRKGxlcSkJX19nbF9wcUhlYXBOZXdQcmlvcml0eVEobGVxKQorI2RlZmluZSBwcURlbGV0
ZVByaW9yaXR5UShwcSkJX19nbF9wcUhlYXBEZWxldGVQcmlvcml0eVEocHEpCisKKy8qIFRoZSBi
YXNpYyBvcGVyYXRpb25zIGFyZSBpbnNlcnRpb24gb2YgYSBuZXcga2V5IChwcUluc2VydCksCisg
KiBhbmQgZXhhbWluYXRpb24vZXh0cmFjdGlvbiBvZiBhIGtleSB3aG9zZSB2YWx1ZSBpcyBtaW5p
bXVtCisgKiAocHFNaW5pbXVtL3BxRXh0cmFjdE1pbikuICBEZWxldGlvbiBpcyBhbHNvIGFsbG93
ZWQgKHBxRGVsZXRlKTsKKyAqIGZvciB0aGlzIHB1cnBvc2UgcHFJbnNlcnQgcmV0dXJucyBhICJo
YW5kbGUiIHdoaWNoIGlzIHN1cHBsaWVkCisgKiBhcyB0aGUgYXJndW1lbnQuCisgKgorICogQW4g
aW5pdGlhbCBoZWFwIG1heSBiZSBjcmVhdGVkIGVmZmljaWVudGx5IGJ5IGNhbGxpbmcgcHFJbnNl
cnQKKyAqIHJlcGVhdGVkbHksIHRoZW4gY2FsbGluZyBwcUluaXQuICBJbiBhbnkgY2FzZSBwcUlu
aXQgbXVzdCBiZSBjYWxsZWQKKyAqIGJlZm9yZSBhbnkgb3BlcmF0aW9ucyBvdGhlciB0aGFuIHBx
SW5zZXJ0IGFyZSB1c2VkLgorICoKKyAqIElmIHRoZSBoZWFwIGlzIGVtcHR5LCBwcU1pbmltdW0v
cHFFeHRyYWN0TWluIHdpbGwgcmV0dXJuIGEgTlVMTCBrZXkuCisgKiBUaGlzIG1heSBhbHNvIGJl
IHRlc3RlZCB3aXRoIHBxSXNFbXB0eS4KKyAqLworI2RlZmluZSBwcUluaXQocHEpCQlfX2dsX3Bx
SGVhcEluaXQocHEpCisjZGVmaW5lIHBxSW5zZXJ0KHBxLGtleSkJX19nbF9wcUhlYXBJbnNlcnQo
cHEsa2V5KQorI2RlZmluZSBwcU1pbmltdW0ocHEpCQlfX2dsX3BxSGVhcE1pbmltdW0ocHEpCisj
ZGVmaW5lIHBxRXh0cmFjdE1pbihwcSkJX19nbF9wcUhlYXBFeHRyYWN0TWluKHBxKQorI2RlZmlu
ZSBwcURlbGV0ZShwcSxoYW5kbGUpCV9fZ2xfcHFIZWFwRGVsZXRlKHBxLGhhbmRsZSkKKyNkZWZp
bmUgcHFJc0VtcHR5KHBxKQkJX19nbF9wcUhlYXBJc0VtcHR5KHBxKQorCisKKy8qIFNpbmNlIHdl
IHN1cHBvcnQgZGVsZXRpb24gdGhlIGRhdGEgc3RydWN0dXJlIGlzIGEgbGl0dGxlIG1vcmUKKyAq
IGNvbXBsaWNhdGVkIHRoYW4gYW4gb3JkaW5hcnkgaGVhcC4gICJub2RlcyIgaXMgdGhlIGhlYXAg
aXRzZWxmOworICogYWN0aXZlIG5vZGVzIGFyZSBzdG9yZWQgaW4gdGhlIHJhbmdlIDEuLnBxLT5z
aXplLiAgV2hlbiB0aGUKKyAqIGhlYXAgZXhjZWVkcyBpdHMgYWxsb2NhdGVkIHNpemUgKHBxLT5t
YXgpLCBpdHMgc2l6ZSBkb3VibGVzLgorICogVGhlIGNoaWxkcmVuIG9mIG5vZGUgaSBhcmUgbm9k
ZXMgMmkgYW5kIDJpKzEuCisgKgorICogRWFjaCBub2RlIHN0b3JlcyBhbiBpbmRleCBpbnRvIGFu
IGFycmF5ICJoYW5kbGVzIi4gIEVhY2ggaGFuZGxlCisgKiBzdG9yZXMgYSBrZXksIHBsdXMgYSBw
b2ludGVyIGJhY2sgdG8gdGhlIG5vZGUgd2hpY2ggY3VycmVudGx5CisgKiByZXByZXNlbnRzIHRo
YXQga2V5IChpZS4gbm9kZXNbaGFuZGxlc1tpXS5ub2RlXS5oYW5kbGUgPT0gaSkuCisgKi8KKwor
dHlwZWRlZiB2b2lkICpQUWtleTsKK3R5cGVkZWYgbG9uZyBQUWhhbmRsZTsKK3R5cGVkZWYgc3Ry
dWN0IFByaW9yaXR5USBQcmlvcml0eVE7CisKK3R5cGVkZWYgc3RydWN0IHsgUFFoYW5kbGUgaGFu
ZGxlOyB9IFBRbm9kZTsKK3R5cGVkZWYgc3RydWN0IHsgUFFrZXkga2V5OyBQUWhhbmRsZSBub2Rl
OyB9IFBRaGFuZGxlRWxlbTsKKworc3RydWN0IFByaW9yaXR5USB7CisgIFBRbm9kZQkqbm9kZXM7
CisgIFBRaGFuZGxlRWxlbQkqaGFuZGxlczsKKyAgbG9uZwkJc2l6ZSwgbWF4OworICBQUWhhbmRs
ZQlmcmVlTGlzdDsKKyAgaW50CQlpbml0aWFsaXplZDsKKyAgaW50CQkoKmxlcSkoUFFrZXkga2V5
MSwgUFFrZXkga2V5Mik7Cit9OworICAKK1ByaW9yaXR5UQkqcHFOZXdQcmlvcml0eVEoIGludCAo
KmxlcSkoUFFrZXkga2V5MSwgUFFrZXkga2V5MikgKTsKK3ZvaWQJCXBxRGVsZXRlUHJpb3JpdHlR
KCBQcmlvcml0eVEgKnBxICk7CisKK3ZvaWQJCXBxSW5pdCggUHJpb3JpdHlRICpwcSApOworUFFo
YW5kbGUJcHFJbnNlcnQoIFByaW9yaXR5USAqcHEsIFBRa2V5IGtleSApOworUFFrZXkJCXBxRXh0
cmFjdE1pbiggUHJpb3JpdHlRICpwcSApOwordm9pZAkJcHFEZWxldGUoIFByaW9yaXR5USAqcHEs
IFBRaGFuZGxlIGhhbmRsZSApOworCisKKyNkZWZpbmUgX19nbF9wcUhlYXBNaW5pbXVtKHBxKQko
KHBxKS0+aGFuZGxlc1socHEpLT5ub2Rlc1sxXS5oYW5kbGVdLmtleSkKKyNkZWZpbmUgX19nbF9w
cUhlYXBJc0VtcHR5KHBxKQkoKHBxKS0+c2l6ZSA9PSAwKQorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLXNvcnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1zb3J0LmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1zb3J0LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTI0IEBACisvKgorKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBF
eGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisqKiBtYWRlIHN1
YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBG
cmVlCisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwg
dGhlIGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJv
dmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5
CisqKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdh
bCBTZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcs
IENBIDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVj
dHMvRnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwg
dGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJhc2lzLCB3aXRo
IEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKKyoqIERJ
U0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJS
QU5USUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9S
WSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04t
SU5GUklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBp
czogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4yLjEsIHJlbGVh
c2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAorKiog
SW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29u
IEdyYXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkg
dGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRo
ZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxpc2hlZCBieSBT
R0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisqKiBPcGVu
R0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCBy
ZWxlYXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0g
VXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAx
OTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRvdyBTeXN0ZW0o
UikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2Fy
ZQorKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBp
bmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0aCB0aGUgT3Bl
bkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoKKyoqIEF1dGhv
cjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNpb24kCisqKiAk
SGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9wcmlvcml0eXEtc29ydC5o
IzUgJAorKi8KKworI2lmbmRlZiBfX3ByaW9yaXR5cV9zb3J0X2hfCisjZGVmaW5lIF9fcHJpb3Jp
dHlxX3NvcnRfaF8KKworI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1o
ZWFwLmgiCisKKyN1bmRlZiBQUWtleQorI3VuZGVmIFBRaGFuZGxlCisjdW5kZWYgUHJpb3JpdHlR
CisjdW5kZWYgcHFOZXdQcmlvcml0eVEKKyN1bmRlZiBwcURlbGV0ZVByaW9yaXR5UQorI3VuZGVm
IHBxSW5pdAorI3VuZGVmIHBxSW5zZXJ0CisjdW5kZWYgcHFNaW5pbXVtCisjdW5kZWYgcHFFeHRy
YWN0TWluCisjdW5kZWYgcHFEZWxldGUKKyN1bmRlZiBwcUlzRW1wdHkKKworLyogVXNlICNkZWZp
bmUncyBzbyB0aGF0IGFub3RoZXIgaGVhcCBpbXBsZW1lbnRhdGlvbiBjYW4gdXNlIHRoaXMgb25l
ICovCisKKyNkZWZpbmUgUFFrZXkJCQlQUVNvcnRLZXkKKyNkZWZpbmUgUFFoYW5kbGUJCVBRU29y
dEhhbmRsZQorI2RlZmluZSBQcmlvcml0eVEJCVByaW9yaXR5UVNvcnQKKworI2RlZmluZSBwcU5l
d1ByaW9yaXR5UShsZXEpCV9fZ2xfcHFTb3J0TmV3UHJpb3JpdHlRKGxlcSkKKyNkZWZpbmUgcHFE
ZWxldGVQcmlvcml0eVEocHEpCV9fZ2xfcHFTb3J0RGVsZXRlUHJpb3JpdHlRKHBxKQorCisvKiBU
aGUgYmFzaWMgb3BlcmF0aW9ucyBhcmUgaW5zZXJ0aW9uIG9mIGEgbmV3IGtleSAocHFJbnNlcnQp
LAorICogYW5kIGV4YW1pbmF0aW9uL2V4dHJhY3Rpb24gb2YgYSBrZXkgd2hvc2UgdmFsdWUgaXMg
bWluaW11bQorICogKHBxTWluaW11bS9wcUV4dHJhY3RNaW4pLiAgRGVsZXRpb24gaXMgYWxzbyBh
bGxvd2VkIChwcURlbGV0ZSk7CisgKiBmb3IgdGhpcyBwdXJwb3NlIHBxSW5zZXJ0IHJldHVybnMg
YSAiaGFuZGxlIiB3aGljaCBpcyBzdXBwbGllZAorICogYXMgdGhlIGFyZ3VtZW50LgorICoKKyAq
IEFuIGluaXRpYWwgaGVhcCBtYXkgYmUgY3JlYXRlZCBlZmZpY2llbnRseSBieSBjYWxsaW5nIHBx
SW5zZXJ0CisgKiByZXBlYXRlZGx5LCB0aGVuIGNhbGxpbmcgcHFJbml0LiAgSW4gYW55IGNhc2Ug
cHFJbml0IG11c3QgYmUgY2FsbGVkCisgKiBiZWZvcmUgYW55IG9wZXJhdGlvbnMgb3RoZXIgdGhh
biBwcUluc2VydCBhcmUgdXNlZC4KKyAqCisgKiBJZiB0aGUgaGVhcCBpcyBlbXB0eSwgcHFNaW5p
bXVtL3BxRXh0cmFjdE1pbiB3aWxsIHJldHVybiBhIE5VTEwga2V5LgorICogVGhpcyBtYXkgYWxz
byBiZSB0ZXN0ZWQgd2l0aCBwcUlzRW1wdHkuCisgKi8KKyNkZWZpbmUgcHFJbml0KHBxKQkJX19n
bF9wcVNvcnRJbml0KHBxKQorI2RlZmluZSBwcUluc2VydChwcSxrZXkpCV9fZ2xfcHFTb3J0SW5z
ZXJ0KHBxLGtleSkKKyNkZWZpbmUgcHFNaW5pbXVtKHBxKQkJX19nbF9wcVNvcnRNaW5pbXVtKHBx
KQorI2RlZmluZSBwcUV4dHJhY3RNaW4ocHEpCV9fZ2xfcHFTb3J0RXh0cmFjdE1pbihwcSkKKyNk
ZWZpbmUgcHFEZWxldGUocHEsaGFuZGxlKQlfX2dsX3BxU29ydERlbGV0ZShwcSxoYW5kbGUpCisj
ZGVmaW5lIHBxSXNFbXB0eShwcSkJCV9fZ2xfcHFTb3J0SXNFbXB0eShwcSkKKworCisvKiBTaW5j
ZSB3ZSBzdXBwb3J0IGRlbGV0aW9uIHRoZSBkYXRhIHN0cnVjdHVyZSBpcyBhIGxpdHRsZSBtb3Jl
CisgKiBjb21wbGljYXRlZCB0aGFuIGFuIG9yZGluYXJ5IGhlYXAuICAibm9kZXMiIGlzIHRoZSBo
ZWFwIGl0c2VsZjsKKyAqIGFjdGl2ZSBub2RlcyBhcmUgc3RvcmVkIGluIHRoZSByYW5nZSAxLi5w
cS0+c2l6ZS4gIFdoZW4gdGhlCisgKiBoZWFwIGV4Y2VlZHMgaXRzIGFsbG9jYXRlZCBzaXplIChw
cS0+bWF4KSwgaXRzIHNpemUgZG91Ymxlcy4KKyAqIFRoZSBjaGlsZHJlbiBvZiBub2RlIGkgYXJl
IG5vZGVzIDJpIGFuZCAyaSsxLgorICoKKyAqIEVhY2ggbm9kZSBzdG9yZXMgYW4gaW5kZXggaW50
byBhbiBhcnJheSAiaGFuZGxlcyIuICBFYWNoIGhhbmRsZQorICogc3RvcmVzIGEga2V5LCBwbHVz
IGEgcG9pbnRlciBiYWNrIHRvIHRoZSBub2RlIHdoaWNoIGN1cnJlbnRseQorICogcmVwcmVzZW50
cyB0aGF0IGtleSAoaWUuIG5vZGVzW2hhbmRsZXNbaV0ubm9kZV0uaGFuZGxlID09IGkpLgorICov
CisKK3R5cGVkZWYgUFFIZWFwS2V5IFBRa2V5OwordHlwZWRlZiBQUUhlYXBIYW5kbGUgUFFoYW5k
bGU7Cit0eXBlZGVmIHN0cnVjdCBQcmlvcml0eVEgUHJpb3JpdHlROworCitzdHJ1Y3QgUHJpb3Jp
dHlRIHsKKyAgUHJpb3JpdHlRSGVhcAkqaGVhcDsKKyAgUFFrZXkJCSprZXlzOworICBQUWtleQkJ
KipvcmRlcjsKKyAgUFFoYW5kbGUJc2l6ZSwgbWF4OworICBpbnQJCWluaXRpYWxpemVkOworICBp
bnQJCSgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBrZXkyKTsKK307CisgIAorUHJpb3JpdHlRCSpw
cU5ld1ByaW9yaXR5USggaW50ICgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBrZXkyKSApOwordm9p
ZAkJcHFEZWxldGVQcmlvcml0eVEoIFByaW9yaXR5USAqcHEgKTsKKworaW50CQlwcUluaXQoIFBy
aW9yaXR5USAqcHEgKTsKK1BRaGFuZGxlCXBxSW5zZXJ0KCBQcmlvcml0eVEgKnBxLCBQUWtleSBr
ZXkgKTsKK1BRa2V5CQlwcUV4dHJhY3RNaW4oIFByaW9yaXR5USAqcHEgKTsKK3ZvaWQJCXBxRGVs
ZXRlKCBQcmlvcml0eVEgKnBxLCBQUWhhbmRsZSBoYW5kbGUgKTsKKworUFFrZXkJCXBxTWluaW11
bSggUHJpb3JpdHlRICpwcSApOworaW50CQlwcUlzRW1wdHkoIFByaW9yaXR5USAqcHEgKTsKKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmMJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2NyBAQAorLyoKKyoqIExpY2Vuc2UgQXBwbGljYWJpbGl0
eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorKiogbWFk
ZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBT
R0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNl
IiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhl
IHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQorKiogdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEg
Y29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjog
TGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBW
aWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDovL29zcy5zZ2kuY29tL3By
b2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vu
c2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiogIkFTIElTIiBiYXNpcywg
d2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCisq
KiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQg
V0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZB
Q1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQg
Tk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENv
ZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBWZXJzaW9uIDEuMi4xLCBy
ZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywK
KyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2ls
aWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVk
IGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNld2hlcmUgaGVyZWluLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25z
OiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworKiogZXN0YWJsaXNoZWQg
YnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQorKiog
T3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4x
KSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lz
dGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIg
NCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCisqKiBXaW5kb3cgU3lz
dGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29m
dHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBT
YW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJl
ZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiogY29tcGxpYW50IHdpdGggdGhl
IE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisqKgorKi8KKy8qCisqKiBB
dXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlzaW9uJAor
KiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmMj
NSAkCisqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CQkvKiBM
T05HX01BWCAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9n
bHVvcy5oIgorI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgiCisKKy8q
IEluY2x1ZGUgYWxsIHRoZSBjb2RlIGZvciB0aGUgcmVndWxhciBoZWFwLWJhc2VkIHF1ZXVlIGhl
cmUuICovCisKKyNpbmNsdWRlICIzcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5j
IgorCisvKiBOb3cgcmVkZWZpbmUgYWxsIHRoZSBmdW5jdGlvbiBuYW1lcyB0byBtYXAgdG8gdGhl
aXIgIlNvcnQiIHZlcnNpb25zLiAqLworCisjaW5jbHVkZSAiM3JkcGFydHkvZ2x1L2xpYnRlc3Mv
cHJpb3JpdHlxLXNvcnQuaCIKKworLyogcmVhbGx5IF9fZ2xfcHFTb3J0TmV3UHJpb3JpdHlRICov
CitQcmlvcml0eVEgKnBxTmV3UHJpb3JpdHlRKCBpbnQgKCpsZXEpKFBRa2V5IGtleTEsIFBRa2V5
IGtleTIpICkKK3sKKyAgUHJpb3JpdHlRICpwcSA9IChQcmlvcml0eVEgKiltZW1BbGxvYyggc2l6
ZW9mKCBQcmlvcml0eVEgKSk7CisgIGlmIChwcSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKworICBw
cS0+aGVhcCA9IF9fZ2xfcHFIZWFwTmV3UHJpb3JpdHlRKCBsZXEgKTsKKyAgaWYgKHBxLT5oZWFw
ID09IE5VTEwpIHsKKyAgICAgbWVtRnJlZShwcSk7CisgICAgIHJldHVybiBOVUxMOworICB9CisK
KyAgcHEtPmtleXMgPSAoUFFIZWFwS2V5ICopbWVtQWxsb2MoIElOSVRfU0laRSAqIHNpemVvZihw
cS0+a2V5c1swXSkgKTsKKyAgaWYgKHBxLT5rZXlzID09IE5VTEwpIHsKKyAgICAgX19nbF9wcUhl
YXBEZWxldGVQcmlvcml0eVEocHEtPmhlYXApOworICAgICBtZW1GcmVlKHBxKTsKKyAgICAgcmV0
dXJuIE5VTEw7CisgIH0KKworICBwcS0+c2l6ZSA9IDA7CisgIHBxLT5tYXggPSBJTklUX1NJWkU7
CisgIHBxLT5pbml0aWFsaXplZCA9IEZBTFNFOworICBwcS0+bGVxID0gbGVxOworICByZXR1cm4g
cHE7Cit9CisKKy8qIHJlYWxseSBfX2dsX3BxU29ydERlbGV0ZVByaW9yaXR5USAqLwordm9pZCBw
cURlbGV0ZVByaW9yaXR5USggUHJpb3JpdHlRICpwcSApCit7CisgIGFzc2VydChwcSAhPSBOVUxM
KTsgCisgIGlmIChwcS0+aGVhcCAhPSBOVUxMKSBfX2dsX3BxSGVhcERlbGV0ZVByaW9yaXR5USgg
cHEtPmhlYXAgKTsKKyAgaWYgKHBxLT5vcmRlciAhPSBOVUxMKSBtZW1GcmVlKCBwcS0+b3JkZXIg
KTsKKyAgaWYgKHBxLT5rZXlzICE9IE5VTEwpIG1lbUZyZWUoIHBxLT5rZXlzICk7CisgIG1lbUZy
ZWUoIHBxICk7Cit9CisKKworI2RlZmluZSBMVCh4LHkpCQkoISBMRVEoeSx4KSkKKyNkZWZpbmUg
R1QoeCx5KQkJKCEgTEVRKHgseSkpCisjZGVmaW5lIFN3YXAoYSxiKQlpZigxKXtQUWtleSAqdG1w
ID0gKmE7ICphID0gKmI7ICpiID0gdG1wO31lbHNlCisKKy8qIHJlYWxseSBfX2dsX3BxU29ydElu
aXQgKi8KK2ludCBwcUluaXQoIFByaW9yaXR5USAqcHEgKQoreworICBQUWtleSAqKnAsICoqciwg
KippLCAqKmosICpwaXY7CisgIHN0cnVjdCB7IFBRa2V5ICoqcCwgKipyOyB9IFN0YWNrWzUwXSwg
KnRvcCA9IFN0YWNrOworICB1bnNpZ25lZCBsb25nIHNlZWQgPSAyMDE2NDczMjgzOworCisgIC8q
IENyZWF0ZSBhbiBhcnJheSBvZiBpbmRpcmVjdCBwb2ludGVycyB0byB0aGUga2V5cywgc28gdGhh
dCB3ZQorICAgKiB0aGUgaGFuZGxlcyB3ZSBoYXZlIHJldHVybmVkIGFyZSBzdGlsbCB2YWxpZC4K
KyAgICovCisvKgorICBwcS0+b3JkZXIgPSAoUFFIZWFwS2V5ICoqKW1lbUFsbG9jKCAoc2l6ZV90
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcS0+c2l6ZSAqIHNpemVvZihw
cS0+b3JkZXJbMF0pKSApOworKi8KKyAgcHEtPm9yZGVyID0gKFBRSGVhcEtleSAqKiltZW1BbGxv
YyggKHNpemVfdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBxLT5zaXpl
KzEpICogc2l6ZW9mKHBxLT5vcmRlclswXSkpICk7CisvKiB0aGUgcHJldmlvdXMgbGluZSBpcyBh
IHBhdGNoIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBmYWN0IHRoYXQgSUJNICovCisvKiBtYWNoaW5l
cyByZXR1cm4gYSBudWxsIG9uIGEgbWFsbG9jIG9mIHplcm8gYnl0ZXMgKHVubGlrZSBTR0kpLCAg
ICovCisvKiBzbyB3ZSBoYXZlIHRvIHB1dCBpbiB0aGlzIGRlZmVuc2UgdG8gZ3VhcmQgYWdhaW5z
dCBhIG1lbW9yeSAgICAgICovCisvKiBmYXVsdCBmb3VyIGxpbmVzIGRvd24uIGZyb20gZm9zc3Vt
QGF1c3Rpbi5pYm0uY29tLiAgICAgICAgICAgICAgICovCisgIGlmIChwcS0+b3JkZXIgPT0gTlVM
TCkgcmV0dXJuIDA7CisKKyAgcCA9IHBxLT5vcmRlcjsKKyAgciA9IHAgKyBwcS0+c2l6ZSAtIDE7
CisgIGZvciggcGl2ID0gcHEtPmtleXMsIGkgPSBwOyBpIDw9IHI7ICsrcGl2LCArK2kgKSB7Cisg
ICAgKmkgPSBwaXY7CisgIH0KKworICAvKiBTb3J0IHRoZSBpbmRpcmVjdCBwb2ludGVycyBpbiBk
ZXNjZW5kaW5nIG9yZGVyLAorICAgKiB1c2luZyByYW5kb21pemVkIFF1aWNrc29ydAorICAgKi8K
KyAgdG9wLT5wID0gcDsgdG9wLT5yID0gcjsgKyt0b3A7CisgIHdoaWxlKCAtLXRvcCA+PSBTdGFj
ayApIHsKKyAgICBwID0gdG9wLT5wOworICAgIHIgPSB0b3AtPnI7CisgICAgd2hpbGUoIHIgPiBw
ICsgMTAgKSB7CisgICAgICBzZWVkID0gc2VlZCAqIDE1Mzk0MTU4MjEgKyAxOworICAgICAgaSA9
IHAgKyBzZWVkICUgKHIgLSBwICsgMSk7CisgICAgICBwaXYgPSAqaTsKKyAgICAgICppID0gKnA7
CisgICAgICAqcCA9IHBpdjsKKyAgICAgIGkgPSBwIC0gMTsKKyAgICAgIGogPSByICsgMTsKKyAg
ICAgIGRvIHsKKwlkbyB7ICsraTsgfSB3aGlsZSggR1QoICoqaSwgKnBpdiApKTsKKwlkbyB7IC0t
ajsgfSB3aGlsZSggTFQoICoqaiwgKnBpdiApKTsKKwlTd2FwKCBpLCBqICk7CisgICAgICB9IHdo
aWxlKCBpIDwgaiApOworICAgICAgU3dhcCggaSwgaiApOwkvKiBVbmRvIGxhc3Qgc3dhcCAqLwor
ICAgICAgaWYoIGkgLSBwIDwgciAtIGogKSB7CisJdG9wLT5wID0gaisxOyB0b3AtPnIgPSByOyAr
K3RvcDsKKwlyID0gaS0xOworICAgICAgfSBlbHNlIHsKKwl0b3AtPnAgPSBwOyB0b3AtPnIgPSBp
LTE7ICsrdG9wOworCXAgPSBqKzE7CisgICAgICB9CisgICAgfQorICAgIC8qIEluc2VydGlvbiBz
b3J0IHNtYWxsIGxpc3RzICovCisgICAgZm9yKCBpID0gcCsxOyBpIDw9IHI7ICsraSApIHsKKyAg
ICAgIHBpdiA9ICppOworICAgICAgZm9yKCBqID0gaTsgaiA+IHAgJiYgTFQoICoqKGotMSksICpw
aXYgKTsgLS1qICkgeworCSpqID0gKihqLTEpOworICAgICAgfQorICAgICAgKmogPSBwaXY7Cisg
ICAgfQorICB9CisgIHBxLT5tYXggPSBwcS0+c2l6ZTsKKyAgcHEtPmluaXRpYWxpemVkID0gVFJV
RTsKKyAgX19nbF9wcUhlYXBJbml0KCBwcS0+aGVhcCApOwkvKiBhbHdheXMgc3VjY2VlZHMgKi8K
KworI2lmbmRlZiBOREVCVUcKKyAgcCA9IHBxLT5vcmRlcjsKKyAgciA9IHAgKyBwcS0+c2l6ZSAt
IDE7CisgIGZvciggaSA9IHA7IGkgPCByOyArK2kgKSB7CisgICAgYXNzZXJ0KCBMRVEoICoqKGkr
MSksICoqaSApKTsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIHJlYWxseSBf
X2dsX3BxU29ydEluc2VydCAqLworLyogcmV0dXJucyBMT05HX01BWCBpZmYgb3V0IG9mIG1lbW9y
eSAqLyAKK1BRaGFuZGxlIHBxSW5zZXJ0KCBQcmlvcml0eVEgKnBxLCBQUWtleSBrZXlOZXcgKQor
eworICBsb25nIGN1cnI7CisKKyAgaWYoIHBxLT5pbml0aWFsaXplZCApIHsKKyAgICByZXR1cm4g
X19nbF9wcUhlYXBJbnNlcnQoIHBxLT5oZWFwLCBrZXlOZXcgKTsKKyAgfQorICBjdXJyID0gcHEt
PnNpemU7CisgIGlmKCArKyBwcS0+c2l6ZSA+PSBwcS0+bWF4ICkgeworICAgIFBRa2V5ICpzYXZl
S2V5PSBwcS0+a2V5czsKKworICAgIC8qIElmIHRoZSBoZWFwIG92ZXJmbG93cywgZG91YmxlIGl0
cyBzaXplLiAqLworICAgIHBxLT5tYXggPDw9IDE7CisgICAgcHEtPmtleXMgPSAoUFFIZWFwS2V5
ICopbWVtUmVhbGxvYyggcHEtPmtleXMsIAorCSAJICAgICAgICAgICAgICAgICAgICAgICAgKHNp
emVfdCkKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHEtPm1heCAqIHNpemVv
ZiggcHEtPmtleXNbMF0gKSkpOworICAgIGlmIChwcS0+a2V5cyA9PSBOVUxMKSB7CQorICAgICAg
IHBxLT5rZXlzID0gc2F2ZUtleTsJLyogcmVzdG9yZSBwdHIgdG8gZnJlZSB1cG9uIHJldHVybiAq
LworICAgICAgIHJldHVybiBMT05HX01BWDsKKyAgICB9CisgIH0KKyAgYXNzZXJ0KGN1cnIgIT0g
TE9OR19NQVgpOwkKKyAgcHEtPmtleXNbY3Vycl0gPSBrZXlOZXc7CisKKyAgLyogTmVnYXRpdmUg
aGFuZGxlcyBpbmRleCB0aGUgc29ydGVkIGFycmF5LiAqLworICByZXR1cm4gLShjdXJyKzEpOwor
fQorCisvKiByZWFsbHkgX19nbF9wcVNvcnRFeHRyYWN0TWluICovCitQUWtleSBwcUV4dHJhY3RN
aW4oIFByaW9yaXR5USAqcHEgKQoreworICBQUWtleSBzb3J0TWluLCBoZWFwTWluOworCisgIGlm
KCBwcS0+c2l6ZSA9PSAwICkgeworICAgIHJldHVybiBfX2dsX3BxSGVhcEV4dHJhY3RNaW4oIHBx
LT5oZWFwICk7CisgIH0KKyAgc29ydE1pbiA9ICoocHEtPm9yZGVyW3BxLT5zaXplLTFdKTsKKyAg
aWYoICEgX19nbF9wcUhlYXBJc0VtcHR5KCBwcS0+aGVhcCApKSB7CisgICAgaGVhcE1pbiA9IF9f
Z2xfcHFIZWFwTWluaW11bSggcHEtPmhlYXAgKTsKKyAgICBpZiggTEVRKCBoZWFwTWluLCBzb3J0
TWluICkpIHsKKyAgICAgIHJldHVybiBfX2dsX3BxSGVhcEV4dHJhY3RNaW4oIHBxLT5oZWFwICk7
CisgICAgfQorICB9CisgIGRvIHsKKyAgICAtLSBwcS0+c2l6ZTsKKyAgfSB3aGlsZSggcHEtPnNp
emUgPiAwICYmICoocHEtPm9yZGVyW3BxLT5zaXplLTFdKSA9PSBOVUxMICk7CisgIHJldHVybiBz
b3J0TWluOworfQorCisvKiByZWFsbHkgX19nbF9wcVNvcnRNaW5pbXVtICovCitQUWtleSBwcU1p
bmltdW0oIFByaW9yaXR5USAqcHEgKQoreworICBQUWtleSBzb3J0TWluLCBoZWFwTWluOworCisg
IGlmKCBwcS0+c2l6ZSA9PSAwICkgeworICAgIHJldHVybiBfX2dsX3BxSGVhcE1pbmltdW0oIHBx
LT5oZWFwICk7CisgIH0KKyAgc29ydE1pbiA9ICoocHEtPm9yZGVyW3BxLT5zaXplLTFdKTsKKyAg
aWYoICEgX19nbF9wcUhlYXBJc0VtcHR5KCBwcS0+aGVhcCApKSB7CisgICAgaGVhcE1pbiA9IF9f
Z2xfcHFIZWFwTWluaW11bSggcHEtPmhlYXAgKTsKKyAgICBpZiggTEVRKCBoZWFwTWluLCBzb3J0
TWluICkpIHsKKyAgICAgIHJldHVybiBoZWFwTWluOworICAgIH0KKyAgfQorICByZXR1cm4gc29y
dE1pbjsKK30KKworLyogcmVhbGx5IF9fZ2xfcHFTb3J0SXNFbXB0eSAqLworaW50IHBxSXNFbXB0
eSggUHJpb3JpdHlRICpwcSApCit7CisgIHJldHVybiAocHEtPnNpemUgPT0gMCkgJiYgX19nbF9w
cUhlYXBJc0VtcHR5KCBwcS0+aGVhcCApOworfQorCisvKiByZWFsbHkgX19nbF9wcVNvcnREZWxl
dGUgKi8KK3ZvaWQgcHFEZWxldGUoIFByaW9yaXR5USAqcHEsIFBRaGFuZGxlIGN1cnIgKQorewor
ICBpZiggY3VyciA+PSAwICkgeworICAgIF9fZ2xfcHFIZWFwRGVsZXRlKCBwcS0+aGVhcCwgY3Vy
ciApOworICAgIHJldHVybjsKKyAgfQorICBjdXJyID0gLShjdXJyKzEpOworICBhc3NlcnQoIGN1
cnIgPCBwcS0+bWF4ICYmIHBxLT5rZXlzW2N1cnJdICE9IE5VTEwgKTsKKworICBwcS0+a2V5c1tj
dXJyXSA9IE5VTEw7CisgIHdoaWxlKCBwcS0+c2l6ZSA+IDAgJiYgKihwcS0+b3JkZXJbcHEtPnNp
emUtMV0pID09IE5VTEwgKSB7CisgICAgLS0gcHEtPnNpemU7CisgIH0KK30KSW5kZXg6IFdlYkNv
cmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTI0IEBACisvKgorKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4
dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisqKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0
ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCisqKiBTb2Z0d2Fy
ZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUg
TGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5CisqKiBvZiB0aGUgTGlj
ZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYw
MAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEs
IG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKKyoqIAor
KiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFO
RCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKKyoqIERJU0NMQUlNRUQsIElOQ0xV
RElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAorKiog
Q09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRO
RVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgor
KiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYs
IDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAorKiogSW5jLiBUaGUgT3JpZ2lu
YWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMu
CisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBp
cyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBw
cm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rp
b24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisqKiBPcGVuR0woUikgR3JhcGhpY3Mg
U3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAorKiogQXBy
aWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5
IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdM
KFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4z
KSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQorKiogd2FzIGNyZWF0
ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlv
bgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZl
cmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24g
MS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoKKyoqIEF1dGhvcjogRXJpYyBWZWFjaCwg
SnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNpb24kCisqKiAkSGVhZGVyOiAvL2RlcG90
L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9wcmlvcml0eXEuaCM1ICQKKyovCisKKyNpZm5kZWYg
X19wcmlvcml0eXFfc29ydF9oXworI2RlZmluZSBfX3ByaW9yaXR5cV9zb3J0X2hfCisKKyNpbmNs
dWRlICIzcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5oIgorCisjdW5kZWYgUFFr
ZXkKKyN1bmRlZiBQUWhhbmRsZQorI3VuZGVmIFByaW9yaXR5UQorI3VuZGVmIHBxTmV3UHJpb3Jp
dHlRCisjdW5kZWYgcHFEZWxldGVQcmlvcml0eVEKKyN1bmRlZiBwcUluaXQKKyN1bmRlZiBwcUlu
c2VydAorI3VuZGVmIHBxTWluaW11bQorI3VuZGVmIHBxRXh0cmFjdE1pbgorI3VuZGVmIHBxRGVs
ZXRlCisjdW5kZWYgcHFJc0VtcHR5CisKKy8qIFVzZSAjZGVmaW5lJ3Mgc28gdGhhdCBhbm90aGVy
IGhlYXAgaW1wbGVtZW50YXRpb24gY2FuIHVzZSB0aGlzIG9uZSAqLworCisjZGVmaW5lIFBRa2V5
CQkJUFFTb3J0S2V5CisjZGVmaW5lIFBRaGFuZGxlCQlQUVNvcnRIYW5kbGUKKyNkZWZpbmUgUHJp
b3JpdHlRCQlQcmlvcml0eVFTb3J0CisKKyNkZWZpbmUgcHFOZXdQcmlvcml0eVEobGVxKQlfX2ds
X3BxU29ydE5ld1ByaW9yaXR5UShsZXEpCisjZGVmaW5lIHBxRGVsZXRlUHJpb3JpdHlRKHBxKQlf
X2dsX3BxU29ydERlbGV0ZVByaW9yaXR5UShwcSkKKworLyogVGhlIGJhc2ljIG9wZXJhdGlvbnMg
YXJlIGluc2VydGlvbiBvZiBhIG5ldyBrZXkgKHBxSW5zZXJ0KSwKKyAqIGFuZCBleGFtaW5hdGlv
bi9leHRyYWN0aW9uIG9mIGEga2V5IHdob3NlIHZhbHVlIGlzIG1pbmltdW0KKyAqIChwcU1pbmlt
dW0vcHFFeHRyYWN0TWluKS4gIERlbGV0aW9uIGlzIGFsc28gYWxsb3dlZCAocHFEZWxldGUpOwor
ICogZm9yIHRoaXMgcHVycG9zZSBwcUluc2VydCByZXR1cm5zIGEgImhhbmRsZSIgd2hpY2ggaXMg
c3VwcGxpZWQKKyAqIGFzIHRoZSBhcmd1bWVudC4KKyAqCisgKiBBbiBpbml0aWFsIGhlYXAgbWF5
IGJlIGNyZWF0ZWQgZWZmaWNpZW50bHkgYnkgY2FsbGluZyBwcUluc2VydAorICogcmVwZWF0ZWRs
eSwgdGhlbiBjYWxsaW5nIHBxSW5pdC4gIEluIGFueSBjYXNlIHBxSW5pdCBtdXN0IGJlIGNhbGxl
ZAorICogYmVmb3JlIGFueSBvcGVyYXRpb25zIG90aGVyIHRoYW4gcHFJbnNlcnQgYXJlIHVzZWQu
CisgKgorICogSWYgdGhlIGhlYXAgaXMgZW1wdHksIHBxTWluaW11bS9wcUV4dHJhY3RNaW4gd2ls
bCByZXR1cm4gYSBOVUxMIGtleS4KKyAqIFRoaXMgbWF5IGFsc28gYmUgdGVzdGVkIHdpdGggcHFJ
c0VtcHR5LgorICovCisjZGVmaW5lIHBxSW5pdChwcSkJCV9fZ2xfcHFTb3J0SW5pdChwcSkKKyNk
ZWZpbmUgcHFJbnNlcnQocHEsa2V5KQlfX2dsX3BxU29ydEluc2VydChwcSxrZXkpCisjZGVmaW5l
IHBxTWluaW11bShwcSkJCV9fZ2xfcHFTb3J0TWluaW11bShwcSkKKyNkZWZpbmUgcHFFeHRyYWN0
TWluKHBxKQlfX2dsX3BxU29ydEV4dHJhY3RNaW4ocHEpCisjZGVmaW5lIHBxRGVsZXRlKHBxLGhh
bmRsZSkJX19nbF9wcVNvcnREZWxldGUocHEsaGFuZGxlKQorI2RlZmluZSBwcUlzRW1wdHkocHEp
CQlfX2dsX3BxU29ydElzRW1wdHkocHEpCisKKworLyogU2luY2Ugd2Ugc3VwcG9ydCBkZWxldGlv
biB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXMgYSBsaXR0bGUgbW9yZQorICogY29tcGxpY2F0ZWQgdGhh
biBhbiBvcmRpbmFyeSBoZWFwLiAgIm5vZGVzIiBpcyB0aGUgaGVhcCBpdHNlbGY7CisgKiBhY3Rp
dmUgbm9kZXMgYXJlIHN0b3JlZCBpbiB0aGUgcmFuZ2UgMS4ucHEtPnNpemUuICBXaGVuIHRoZQor
ICogaGVhcCBleGNlZWRzIGl0cyBhbGxvY2F0ZWQgc2l6ZSAocHEtPm1heCksIGl0cyBzaXplIGRv
dWJsZXMuCisgKiBUaGUgY2hpbGRyZW4gb2Ygbm9kZSBpIGFyZSBub2RlcyAyaSBhbmQgMmkrMS4K
KyAqCisgKiBFYWNoIG5vZGUgc3RvcmVzIGFuIGluZGV4IGludG8gYW4gYXJyYXkgImhhbmRsZXMi
LiAgRWFjaCBoYW5kbGUKKyAqIHN0b3JlcyBhIGtleSwgcGx1cyBhIHBvaW50ZXIgYmFjayB0byB0
aGUgbm9kZSB3aGljaCBjdXJyZW50bHkKKyAqIHJlcHJlc2VudHMgdGhhdCBrZXkgKGllLiBub2Rl
c1toYW5kbGVzW2ldLm5vZGVdLmhhbmRsZSA9PSBpKS4KKyAqLworCit0eXBlZGVmIFBRSGVhcEtl
eSBQUWtleTsKK3R5cGVkZWYgUFFIZWFwSGFuZGxlIFBRaGFuZGxlOwordHlwZWRlZiBzdHJ1Y3Qg
UHJpb3JpdHlRIFByaW9yaXR5UTsKKworc3RydWN0IFByaW9yaXR5USB7CisgIFByaW9yaXR5UUhl
YXAJKmhlYXA7CisgIFBRa2V5CQkqa2V5czsKKyAgUFFrZXkJCSoqb3JkZXI7CisgIFBRaGFuZGxl
CXNpemUsIG1heDsKKyAgaW50CQlpbml0aWFsaXplZDsKKyAgaW50CQkoKmxlcSkoUFFrZXkga2V5
MSwgUFFrZXkga2V5Mik7Cit9OworICAKK1ByaW9yaXR5UQkqcHFOZXdQcmlvcml0eVEoIGludCAo
KmxlcSkoUFFrZXkga2V5MSwgUFFrZXkga2V5MikgKTsKK3ZvaWQJCXBxRGVsZXRlUHJpb3JpdHlR
KCBQcmlvcml0eVEgKnBxICk7CisKK2ludAkJcHFJbml0KCBQcmlvcml0eVEgKnBxICk7CitQUWhh
bmRsZQlwcUluc2VydCggUHJpb3JpdHlRICpwcSwgUFFrZXkga2V5ICk7CitQUWtleQkJcHFFeHRy
YWN0TWluKCBQcmlvcml0eVEgKnBxICk7Cit2b2lkCQlwcURlbGV0ZSggUHJpb3JpdHlRICpwcSwg
UFFoYW5kbGUgaGFuZGxlICk7CisKK1BRa2V5CQlwcU1pbmltdW0oIFByaW9yaXR5USAqcHEgKTsK
K2ludAkJcHFJc0VtcHR5KCBQcmlvcml0eVEgKnBxICk7CisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLzNy
ZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS8zcmRw
YXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MDUgQEAK
Ky8qCisqKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRp
b25zIG9mIHRoaXMgZmlsZSBhcmUKKyoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBs
aWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKKyoqIFNvZnR3YXJlIExpY2Vuc2Ug
QiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcworKiog
ZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZ
b3UgbWF5IG5vdCB1c2UKKyoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKKyoqIG9mIHRoZSBMaWNlbnNlIGF0IFNp
bGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCisqKiBBbXBo
aXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Cisq
KiAKKyoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgorKiogCisqKiBOb3RlIHRo
YXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0
ZWQgb24gYW4KKyoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQg
V0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUworKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRI
T1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECisqKiBDT05ESVRJT05T
IE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEK
KyoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisqKiAKKyoqIE9y
aWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVu
dGF0aW9uLAorKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2
ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCisqKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlz
IENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyoqIENvcHly
aWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGlj
YXRlZAorKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqIAorKiog
QWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5n
IGludGVyZmFjZXMKKyoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRo
ZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKKyoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEg
U3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCisqKiBBcHJpbCAxLCAxOTk5
OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24K
KyoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhp
Y3Mgd2l0aCB0aGUgWAorKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNl
ZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCisqKiB3YXMgY3JlYXRlZCB1c2luZyB0
aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCisqKiBwdWJs
aXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMg
YmVpbmcKKyoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVj
aWZpY2F0aW9uLgorKioKKyovCisvKgorKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQu
CisqKgorKiogJERhdGUkICRSZXZpc2lvbiQKKyoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngv
bGliL2dsdS9saWJ0ZXNzL3JlbmRlci5jIzUgJAorKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgor
I2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9nbHVvcy5oIgorI2lu
Y2x1ZGUgIjNyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKKyNpbmNsdWRlICIzcmRwYXJ0eS9n
bHUvbGlidGVzcy9yZW5kZXIuaCIKKyNpbmNsdWRlICIzcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNz
LmgiCisKKyNkZWZpbmUgVFJVRSAxCisjZGVmaW5lIEZBTFNFIDAKKworLyogVGhpcyBzdHJ1Y3R1
cmUgcmVtZW1iZXJzIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGFib3V0IGEgcHJpbWl0aXZlCisg
KiB0byBiZSBhYmxlIHRvIHJlbmRlciBpdCBsYXRlciwgb25jZSB3ZSBoYXZlIGRldGVybWluZWQg
d2hpY2gKKyAqIHByaW1pdGl2ZSBpcyBhYmxlIHRvIHVzZSB0aGUgbW9zdCB0cmlhbmdsZXMuCisg
Ki8KK3N0cnVjdCBGYWNlQ291bnQgeworICBsb25nCQlzaXplOwkJLyogbnVtYmVyIG9mIHRyaWFu
Z2xlcyB1c2VkICovCisgIEdMVWhhbGZFZGdlCSplU3RhcnQ7CS8qIGVkZ2Ugd2hlcmUgdGhpcyBw
cmltaXRpdmUgc3RhcnRzICovCisgIHZvaWQJCSgqcmVuZGVyKShHTFV0ZXNzZWxhdG9yICosIEdM
VWhhbGZFZGdlICosIGxvbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBy
b3V0aW5lIHRvIHJlbmRlciB0aGlzIHByaW1pdGl2ZSAqLworfTsKKworc3RhdGljIHN0cnVjdCBG
YWNlQ291bnQgTWF4aW11bUZhbiggR0xVaGFsZkVkZ2UgKmVPcmlnICk7CitzdGF0aWMgc3RydWN0
IEZhY2VDb3VudCBNYXhpbXVtU3RyaXAoIEdMVWhhbGZFZGdlICplT3JpZyApOworCitzdGF0aWMg
dm9pZCBSZW5kZXJGYW4oIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWhhbGZFZGdlICplU3RhcnQs
IGxvbmcgc2l6ZSApOworc3RhdGljIHZvaWQgUmVuZGVyU3RyaXAoIEdMVXRlc3NlbGF0b3IgKnRl
c3MsIEdMVWhhbGZFZGdlICplU3RhcnQsIGxvbmcgc2l6ZSApOworc3RhdGljIHZvaWQgUmVuZGVy
VHJpYW5nbGUoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWhhbGZFZGdlICplU3RhcnQsCisJCQkg
ICAgbG9uZyBzaXplICk7CisKK3N0YXRpYyB2b2lkIFJlbmRlck1heGltdW1GYWNlR3JvdXAoIEdM
VXRlc3NlbGF0b3IgKnRlc3MsIEdMVWZhY2UgKmZPcmlnICk7CitzdGF0aWMgdm9pZCBSZW5kZXJM
b25lbHlUcmlhbmdsZXMoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWZhY2UgKmhlYWQgKTsKKwor
CisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogU3RyaXBzIGFuZCBGYW5zIGRlY29tcG9zaXRp
b24gKioqKioqKioqKioqKioqKioqLworCisvKiBfX2dsX3JlbmRlck1lc2goIHRlc3MsIG1lc2gg
KSB0YWtlcyBhIG1lc2ggYW5kIGJyZWFrcyBpdCBpbnRvIHRyaWFuZ2xlCisgKiBmYW5zLCBzdHJp
cHMsIGFuZCBzZXBhcmF0ZSB0cmlhbmdsZXMuICBBIHN1YnN0YW50aWFsIGVmZm9ydCBpcyBtYWRl
CisgKiB0byB1c2UgYXMgZmV3IHJlbmRlcmluZyBwcmltaXRpdmVzIGFzIHBvc3NpYmxlIChpZS4g
dG8gbWFrZSB0aGUgZmFucworICogYW5kIHN0cmlwcyBhcyBsYXJnZSBhcyBwb3NzaWJsZSkuCisg
KgorICogVGhlIHJlbmRlcmluZyBvdXRwdXQgaXMgcHJvdmlkZWQgYXMgY2FsbGJhY2tzIChzZWUg
dGhlIGFwaSkuCisgKi8KK3ZvaWQgX19nbF9yZW5kZXJNZXNoKCBHTFV0ZXNzZWxhdG9yICp0ZXNz
LCBHTFVtZXNoICptZXNoICkKK3sKKyAgR0xVZmFjZSAqZjsKKworICAvKiBNYWtlIGEgbGlzdCBv
ZiBzZXBhcmF0ZSB0cmlhbmdsZXMgc28gd2UgY2FuIHJlbmRlciB0aGVtIGFsbCBhdCBvbmNlICov
CisgIHRlc3MtPmxvbmVseVRyaUxpc3QgPSBOVUxMOworCisgIGZvciggZiA9IG1lc2gtPmZIZWFk
Lm5leHQ7IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0gZi0+bmV4dCApIHsKKyAgICBmLT5tYXJrZWQg
PSBGQUxTRTsKKyAgfQorICBmb3IoIGYgPSBtZXNoLT5mSGVhZC5uZXh0OyBmICE9ICZtZXNoLT5m
SGVhZDsgZiA9IGYtPm5leHQgKSB7CisKKyAgICAvKiBXZSBleGFtaW5lIGFsbCBmYWNlcyBpbiBh
biBhcmJpdHJhcnkgb3JkZXIuICBXaGVuZXZlciB3ZSBmaW5kCisgICAgICogYW4gdW5wcm9jZXNz
ZWQgZmFjZSBGLCB3ZSBvdXRwdXQgYSBncm91cCBvZiBmYWNlcyBpbmNsdWRpbmcgRgorICAgICAq
IHdob3NlIHNpemUgaXMgbWF4aW11bS4KKyAgICAgKi8KKyAgICBpZiggZi0+aW5zaWRlICYmICEg
Zi0+bWFya2VkICkgeworICAgICAgUmVuZGVyTWF4aW11bUZhY2VHcm91cCggdGVzcywgZiApOwor
ICAgICAgYXNzZXJ0KCBmLT5tYXJrZWQgKTsKKyAgICB9CisgIH0KKyAgaWYoIHRlc3MtPmxvbmVs
eVRyaUxpc3QgIT0gTlVMTCApIHsKKyAgICBSZW5kZXJMb25lbHlUcmlhbmdsZXMoIHRlc3MsIHRl
c3MtPmxvbmVseVRyaUxpc3QgKTsKKyAgICB0ZXNzLT5sb25lbHlUcmlMaXN0ID0gTlVMTDsKKyAg
fQorfQorCisKK3N0YXRpYyB2b2lkIFJlbmRlck1heGltdW1GYWNlR3JvdXAoIEdMVXRlc3NlbGF0
b3IgKnRlc3MsIEdMVWZhY2UgKmZPcmlnICkKK3sKKyAgLyogV2Ugd2FudCB0byBmaW5kIHRoZSBs
YXJnZXN0IHRyaWFuZ2xlIGZhbiBvciBzdHJpcCBvZiB1bm1hcmtlZCBmYWNlcworICAgKiB3aGlj
aCBpbmNsdWRlcyB0aGUgZ2l2ZW4gZmFjZSBmT3JpZy4gIFRoZXJlIGFyZSAzIHBvc3NpYmxlIGZh
bnMKKyAgICogcGFzc2luZyB0aHJvdWdoIGZPcmlnIChvbmUgY2VudGVyZWQgYXQgZWFjaCB2ZXJ0
ZXgpLCBhbmQgMyBwb3NzaWJsZQorICAgKiBzdHJpcHMgKG9uZSBmb3IgZWFjaCBDQ1cgcGVybXV0
YXRpb24gb2YgdGhlIHZlcnRpY2VzKS4gIE91ciBzdHJhdGVneQorICAgKiBpcyB0byB0cnkgYWxs
IG9mIHRoZXNlLCBhbmQgdGFrZSB0aGUgcHJpbWl0aXZlIHdoaWNoIHVzZXMgdGhlIG1vc3QKKyAg
ICogdHJpYW5nbGVzIChhIGdyZWVkeSBhcHByb2FjaCkuCisgICAqLworICBHTFVoYWxmRWRnZSAq
ZSA9IGZPcmlnLT5hbkVkZ2U7CisgIHN0cnVjdCBGYWNlQ291bnQgbWF4LCBuZXdGYWNlOworCisg
IG1heC5zaXplID0gMTsKKyAgbWF4LmVTdGFydCA9IGU7CisgIG1heC5yZW5kZXIgPSAmUmVuZGVy
VHJpYW5nbGU7CisKKyAgaWYoICEgdGVzcy0+ZmxhZ0JvdW5kYXJ5ICkgeworICAgIG5ld0ZhY2Ug
PSBNYXhpbXVtRmFuKCBlICk7IGlmKCBuZXdGYWNlLnNpemUgPiBtYXguc2l6ZSApIHsgbWF4ID0g
bmV3RmFjZTsgfQorICAgIG5ld0ZhY2UgPSBNYXhpbXVtRmFuKCBlLT5MbmV4dCApOyBpZiggbmV3
RmFjZS5zaXplID4gbWF4LnNpemUgKSB7IG1heCA9IG5ld0ZhY2U7IH0KKyAgICBuZXdGYWNlID0g
TWF4aW11bUZhbiggZS0+THByZXYgKTsgaWYoIG5ld0ZhY2Uuc2l6ZSA+IG1heC5zaXplICkgeyBt
YXggPSBuZXdGYWNlOyB9CisKKyAgICBuZXdGYWNlID0gTWF4aW11bVN0cmlwKCBlICk7IGlmKCBu
ZXdGYWNlLnNpemUgPiBtYXguc2l6ZSApIHsgbWF4ID0gbmV3RmFjZTsgfQorICAgIG5ld0ZhY2Ug
PSBNYXhpbXVtU3RyaXAoIGUtPkxuZXh0ICk7IGlmKCBuZXdGYWNlLnNpemUgPiBtYXguc2l6ZSAp
IHsgbWF4ID0gbmV3RmFjZTsgfQorICAgIG5ld0ZhY2UgPSBNYXhpbXVtU3RyaXAoIGUtPkxwcmV2
ICk7IGlmKCBuZXdGYWNlLnNpemUgPiBtYXguc2l6ZSApIHsgbWF4ID0gbmV3RmFjZTsgfQorICB9
CisgICgqKG1heC5yZW5kZXIpKSggdGVzcywgbWF4LmVTdGFydCwgbWF4LnNpemUgKTsKK30KKwor
CisvKiBNYWNyb3Mgd2hpY2gga2VlcCB0cmFjayBvZiBmYWNlcyB3ZSBoYXZlIG1hcmtlZCB0ZW1w
b3JhcmlseSwgYW5kIGFsbG93CisgKiB1cyB0byBiYWNrdHJhY2sgd2hlbiBuZWNlc3NhcnkuICBX
aXRoIHRyaWFuZ2xlIGZhbnMsIHRoaXMgaXMgbm90CisgKiByZWFsbHkgbmVjZXNzYXJ5LCBzaW5j
ZSB0aGUgb25seSBhd2t3YXJkIGNhc2UgaXMgYSBsb29wIG9mIHRyaWFuZ2xlcworICogYXJvdW5k
IGEgc2luZ2xlIG9yaWdpbiB2ZXJ0ZXguICBIb3dldmVyIHdpdGggc3RyaXBzIHRoZSBzaXR1YXRp
b24gaXMKKyAqIG1vcmUgY29tcGxpY2F0ZWQsIGFuZCB3ZSBuZWVkIGEgZ2VuZXJhbCB0cmFja2lu
ZyBtZXRob2QgbGlrZSB0aGUKKyAqIG9uZSBoZXJlLgorICovCisjZGVmaW5lIE1hcmtlZChmKQko
ISAoZiktPmluc2lkZSB8fCAoZiktPm1hcmtlZCkKKworI2RlZmluZSBBZGRUb1RyYWlsKGYsdCkJ
KChmKS0+dHJhaWwgPSAodCksICh0KSA9IChmKSwgKGYpLT5tYXJrZWQgPSBUUlVFKQorCisjZGVm
aW5lIEZyZWVUcmFpbCh0KQlpZiggMSApIHsgXAorCQkJICB3aGlsZSggKHQpICE9IE5VTEwgKSB7
IFwKKwkJCSAgICAodCktPm1hcmtlZCA9IEZBTFNFOyB0ID0gKHQpLT50cmFpbDsgXAorCQkJICB9
IFwKKwkJCX0gZWxzZSAvKiBhYnNvcmIgdHJhaWxpbmcgc2VtaWNvbG9uICovCisKKworCitzdGF0
aWMgc3RydWN0IEZhY2VDb3VudCBNYXhpbXVtRmFuKCBHTFVoYWxmRWRnZSAqZU9yaWcgKQorewor
ICAvKiBlT3JpZy0+TGZhY2UgaXMgdGhlIGZhY2Ugd2Ugd2FudCB0byByZW5kZXIuICBXZSB3YW50
IHRvIGZpbmQgdGhlIHNpemUKKyAgICogb2YgYSBtYXhpbWFsIGZhbiBhcm91bmQgZU9yaWctPk9y
Zy4gIFRvIGRvIHRoaXMgd2UganVzdCB3YWxrIGFyb3VuZAorICAgKiB0aGUgb3JpZ2luIHZlcnRl
eCBhcyBmYXIgYXMgcG9zc2libGUgaW4gYm90aCBkaXJlY3Rpb25zLgorICAgKi8KKyAgc3RydWN0
IEZhY2VDb3VudCBuZXdGYWNlID0geyAwLCBOVUxMLCAmUmVuZGVyRmFuIH07CisgIEdMVWZhY2Ug
KnRyYWlsID0gTlVMTDsKKyAgR0xVaGFsZkVkZ2UgKmU7CisKKyAgZm9yKCBlID0gZU9yaWc7ICEg
TWFya2VkKCBlLT5MZmFjZSApOyBlID0gZS0+T25leHQgKSB7CisgICAgQWRkVG9UcmFpbCggZS0+
TGZhY2UsIHRyYWlsICk7CisgICAgKytuZXdGYWNlLnNpemU7CisgIH0KKyAgZm9yKCBlID0gZU9y
aWc7ICEgTWFya2VkKCBlLT5SZmFjZSApOyBlID0gZS0+T3ByZXYgKSB7CisgICAgQWRkVG9UcmFp
bCggZS0+UmZhY2UsIHRyYWlsICk7CisgICAgKytuZXdGYWNlLnNpemU7CisgIH0KKyAgbmV3RmFj
ZS5lU3RhcnQgPSBlOworICAvKkxJTlRFRCovCisgIEZyZWVUcmFpbCggdHJhaWwgKTsKKyAgcmV0
dXJuIG5ld0ZhY2U7Cit9CisKKworI2RlZmluZSBJc0V2ZW4obikJKCgobikgJiAxKSA9PSAwKQor
CitzdGF0aWMgc3RydWN0IEZhY2VDb3VudCBNYXhpbXVtU3RyaXAoIEdMVWhhbGZFZGdlICplT3Jp
ZyApCit7CisgIC8qIEhlcmUgd2UgYXJlIGxvb2tpbmcgZm9yIGEgbWF4aW1hbCBzdHJpcCB0aGF0
IGNvbnRhaW5zIHRoZSB2ZXJ0aWNlcworICAgKiBlT3JpZy0+T3JnLCBlT3JpZy0+RHN0LCBlT3Jp
Zy0+TG5leHQtPkRzdCAoaW4gdGhhdCBvcmRlciBvciB0aGUKKyAgICogcmV2ZXJzZSwgc3VjaCB0
aGF0IGFsbCB0cmlhbmdsZXMgYXJlIG9yaWVudGVkIENDVykuCisgICAqCisgICAqIEFnYWluIHdl
IHdhbGsgZm9yd2FyZCBhbmQgYmFja3dhcmQgYXMgZmFyIGFzIHBvc3NpYmxlLiAgSG93ZXZlciBm
b3IKKyAgICogc3RyaXBzIHRoZXJlIGlzIGEgdHdpc3Q6IHRvIGdldCBDQ1cgb3JpZW50YXRpb25z
LCB0aGVyZSBtdXN0IGJlCisgICAqIGFuICpldmVuKiBudW1iZXIgb2YgdHJpYW5nbGVzIGluIHRo
ZSBzdHJpcCBvbiBvbmUgc2lkZSBvZiBlT3JpZy4KKyAgICogV2Ugd2FsayB0aGUgc3RyaXAgc3Rh
cnRpbmcgb24gYSBzaWRlIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgdHJpYW5nbGVzOworICAgKiBp
ZiBib3RoIHNpZGUgaGF2ZSBhbiBvZGQgbnVtYmVyLCB3ZSBhcmUgZm9yY2VkIHRvIHNob3J0ZW4g
b25lIHNpZGUuCisgICAqLworICBzdHJ1Y3QgRmFjZUNvdW50IG5ld0ZhY2UgPSB7IDAsIE5VTEws
ICZSZW5kZXJTdHJpcCB9OworICBsb25nIGhlYWRTaXplID0gMCwgdGFpbFNpemUgPSAwOworICBH
TFVmYWNlICp0cmFpbCA9IE5VTEw7CisgIEdMVWhhbGZFZGdlICplLCAqZVRhaWwsICplSGVhZDsK
KworICBmb3IoIGUgPSBlT3JpZzsgISBNYXJrZWQoIGUtPkxmYWNlICk7ICsrdGFpbFNpemUsIGUg
PSBlLT5PbmV4dCApIHsKKyAgICBBZGRUb1RyYWlsKCBlLT5MZmFjZSwgdHJhaWwgKTsKKyAgICAr
K3RhaWxTaXplOworICAgIGUgPSBlLT5EcHJldjsKKyAgICBpZiggTWFya2VkKCBlLT5MZmFjZSAp
KSBicmVhazsKKyAgICBBZGRUb1RyYWlsKCBlLT5MZmFjZSwgdHJhaWwgKTsKKyAgfQorICBlVGFp
bCA9IGU7CisKKyAgZm9yKCBlID0gZU9yaWc7ICEgTWFya2VkKCBlLT5SZmFjZSApOyArK2hlYWRT
aXplLCBlID0gZS0+RG5leHQgKSB7CisgICAgQWRkVG9UcmFpbCggZS0+UmZhY2UsIHRyYWlsICk7
CisgICAgKytoZWFkU2l6ZTsKKyAgICBlID0gZS0+T3ByZXY7CisgICAgaWYoIE1hcmtlZCggZS0+
UmZhY2UgKSkgYnJlYWs7CisgICAgQWRkVG9UcmFpbCggZS0+UmZhY2UsIHRyYWlsICk7CisgIH0K
KyAgZUhlYWQgPSBlOworCisgIG5ld0ZhY2Uuc2l6ZSA9IHRhaWxTaXplICsgaGVhZFNpemU7Cisg
IGlmKCBJc0V2ZW4oIHRhaWxTaXplICkpIHsKKyAgICBuZXdGYWNlLmVTdGFydCA9IGVUYWlsLT5T
eW07CisgIH0gZWxzZSBpZiggSXNFdmVuKCBoZWFkU2l6ZSApKSB7CisgICAgbmV3RmFjZS5lU3Rh
cnQgPSBlSGVhZDsKKyAgfSBlbHNlIHsKKyAgICAvKiBCb3RoIHNpZGVzIGhhdmUgb2RkIGxlbmd0
aCwgd2UgbXVzdCBzaG9ydGVuIG9uZSBvZiB0aGVtLiAgSW4gZmFjdCwKKyAgICAgKiB3ZSBtdXN0
IHN0YXJ0IGZyb20gZUhlYWQgdG8gZ3VhcmFudGVlIGluY2x1c2lvbiBvZiBlT3JpZy0+TGZhY2Uu
CisgICAgICovCisgICAgLS1uZXdGYWNlLnNpemU7CisgICAgbmV3RmFjZS5lU3RhcnQgPSBlSGVh
ZC0+T25leHQ7CisgIH0KKyAgLypMSU5URUQqLworICBGcmVlVHJhaWwoIHRyYWlsICk7CisgIHJl
dHVybiBuZXdGYWNlOworfQorCisKK3N0YXRpYyB2b2lkIFJlbmRlclRyaWFuZ2xlKCBHTFV0ZXNz
ZWxhdG9yICp0ZXNzLCBHTFVoYWxmRWRnZSAqZSwgbG9uZyBzaXplICkKK3sKKyAgLyogSnVzdCBh
ZGQgdGhlIHRyaWFuZ2xlIHRvIGEgdHJpYW5nbGUgbGlzdCwgc28gd2UgY2FuIHJlbmRlciBhbGwK
KyAgICogdGhlIHNlcGFyYXRlIHRyaWFuZ2xlcyBhdCBvbmNlLgorICAgKi8KKyAgYXNzZXJ0KCBz
aXplID09IDEgKTsKKyAgQWRkVG9UcmFpbCggZS0+TGZhY2UsIHRlc3MtPmxvbmVseVRyaUxpc3Qg
KTsKK30KKworCitzdGF0aWMgdm9pZCBSZW5kZXJMb25lbHlUcmlhbmdsZXMoIEdMVXRlc3NlbGF0
b3IgKnRlc3MsIEdMVWZhY2UgKmYgKQoreworICAvKiBOb3cgd2UgcmVuZGVyIGFsbCB0aGUgc2Vw
YXJhdGUgdHJpYW5nbGVzIHdoaWNoIGNvdWxkIG5vdCBiZQorICAgKiBncm91cGVkIGludG8gYSB0
cmlhbmdsZSBmYW4gb3Igc3RyaXAuCisgICAqLworICBHTFVoYWxmRWRnZSAqZTsKKyAgaW50IG5l
d1N0YXRlOworICBpbnQgZWRnZVN0YXRlID0gLTE7CS8qIGZvcmNlIGVkZ2Ugc3RhdGUgb3V0cHV0
IGZvciBmaXJzdCB2ZXJ0ZXggKi8KKworICBDQUxMX0JFR0lOX09SX0JFR0lOX0RBVEEoIEdMX1RS
SUFOR0xFUyApOworCisgIGZvciggOyBmICE9IE5VTEw7IGYgPSBmLT50cmFpbCApIHsKKyAgICAv
KiBMb29wIG9uY2UgZm9yIGVhY2ggZWRnZSAodGhlcmUgd2lsbCBhbHdheXMgYmUgMyBlZGdlcykg
Ki8KKworICAgIGUgPSBmLT5hbkVkZ2U7CisgICAgZG8geworICAgICAgaWYoIHRlc3MtPmZsYWdC
b3VuZGFyeSApIHsKKwkvKiBTZXQgdGhlICJlZGdlIHN0YXRlIiB0byBUUlVFIGp1c3QgYmVmb3Jl
IHdlIG91dHB1dCB0aGUKKwkgKiBmaXJzdCB2ZXJ0ZXggb2YgZWFjaCBlZGdlIG9uIHRoZSBwb2x5
Z29uIGJvdW5kYXJ5LgorCSAqLworCW5ld1N0YXRlID0gISBlLT5SZmFjZS0+aW5zaWRlOworCWlm
KCBlZGdlU3RhdGUgIT0gbmV3U3RhdGUgKSB7CisJICBlZGdlU3RhdGUgPSBuZXdTdGF0ZTsKKyAg
ICAgICAgICBDQUxMX0VER0VfRkxBR19PUl9FREdFX0ZMQUdfREFUQSggZWRnZVN0YXRlICk7CisJ
fQorICAgICAgfQorICAgICAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUtPk9yZy0+ZGF0
YSApOworCisgICAgICBlID0gZS0+TG5leHQ7CisgICAgfSB3aGlsZSggZSAhPSBmLT5hbkVkZ2Ug
KTsKKyAgfQorICBDQUxMX0VORF9PUl9FTkRfREFUQSgpOworfQorCisKK3N0YXRpYyB2b2lkIFJl
bmRlckZhbiggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVkZ2UgKmUsIGxvbmcgc2l6ZSAp
Cit7CisgIC8qIFJlbmRlciBhcyBtYW55IENDVyB0cmlhbmdsZXMgYXMgcG9zc2libGUgaW4gYSBm
YW4gc3RhcnRpbmcgZnJvbQorICAgKiBlZGdlICJlIi4gIFRoZSBmYW4gKnNob3VsZCogY29udGFp
biBleGFjdGx5ICJzaXplIiB0cmlhbmdsZXMKKyAgICogKG90aGVyd2lzZSB3ZSd2ZSBnb29mZWQg
dXAgc29tZXdoZXJlKS4KKyAgICovCisgIENBTExfQkVHSU5fT1JfQkVHSU5fREFUQSggR0xfVFJJ
QU5HTEVfRkFOICk7IAorICBDQUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQSggZS0+T3JnLT5kYXRh
ICk7IAorICBDQUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQSggZS0+RHN0LT5kYXRhICk7IAorCisg
IHdoaWxlKCAhIE1hcmtlZCggZS0+TGZhY2UgKSkgeworICAgIGUtPkxmYWNlLT5tYXJrZWQgPSBU
UlVFOworICAgIC0tc2l6ZTsKKyAgICBlID0gZS0+T25leHQ7CisgICAgQ0FMTF9WRVJURVhfT1Jf
VkVSVEVYX0RBVEEoIGUtPkRzdC0+ZGF0YSApOyAKKyAgfQorCisgIGFzc2VydCggc2l6ZSA9PSAw
ICk7CisgIENBTExfRU5EX09SX0VORF9EQVRBKCk7Cit9CisKKworc3RhdGljIHZvaWQgUmVuZGVy
U3RyaXAoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWhhbGZFZGdlICplLCBsb25nIHNpemUgKQor
eworICAvKiBSZW5kZXIgYXMgbWFueSBDQ1cgdHJpYW5nbGVzIGFzIHBvc3NpYmxlIGluIGEgc3Ry
aXAgc3RhcnRpbmcgZnJvbQorICAgKiBlZGdlICJlIi4gIFRoZSBzdHJpcCAqc2hvdWxkKiBjb250
YWluIGV4YWN0bHkgInNpemUiIHRyaWFuZ2xlcworICAgKiAob3RoZXJ3aXNlIHdlJ3ZlIGdvb2Zl
ZCB1cCBzb21ld2hlcmUpLgorICAgKi8KKyAgQ0FMTF9CRUdJTl9PUl9CRUdJTl9EQVRBKCBHTF9U
UklBTkdMRV9TVFJJUCApOworICBDQUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQSggZS0+T3JnLT5k
YXRhICk7IAorICBDQUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQSggZS0+RHN0LT5kYXRhICk7IAor
CisgIHdoaWxlKCAhIE1hcmtlZCggZS0+TGZhY2UgKSkgeworICAgIGUtPkxmYWNlLT5tYXJrZWQg
PSBUUlVFOworICAgIC0tc2l6ZTsKKyAgICBlID0gZS0+RHByZXY7CisgICAgQ0FMTF9WRVJURVhf
T1JfVkVSVEVYX0RBVEEoIGUtPk9yZy0+ZGF0YSApOyAKKyAgICBpZiggTWFya2VkKCBlLT5MZmFj
ZSApKSBicmVhazsKKworICAgIGUtPkxmYWNlLT5tYXJrZWQgPSBUUlVFOworICAgIC0tc2l6ZTsK
KyAgICBlID0gZS0+T25leHQ7CisgICAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUtPkRz
dC0+ZGF0YSApOyAKKyAgfQorCisgIGFzc2VydCggc2l6ZSA9PSAwICk7CisgIENBTExfRU5EX09S
X0VORF9EQVRBKCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiBCb3VuZGFyeSBj
b250b3VyIGRlY29tcG9zaXRpb24gKioqKioqKioqKioqKioqKioqLworCisvKiBfX2dsX3JlbmRl
ckJvdW5kYXJ5KCB0ZXNzLCBtZXNoICkgdGFrZXMgYSBtZXNoLCBhbmQgb3V0cHV0cyBvbmUKKyAq
IGNvbnRvdXIgZm9yIGVhY2ggZmFjZSBtYXJrZWQgImluc2lkZSIuICBUaGUgcmVuZGVyaW5nIG91
dHB1dCBpcworICogcHJvdmlkZWQgYXMgY2FsbGJhY2tzIChzZWUgdGhlIGFwaSkuCisgKi8KK3Zv
aWQgX19nbF9yZW5kZXJCb3VuZGFyeSggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVbWVzaCAqbWVz
aCApCit7CisgIEdMVWZhY2UgKmY7CisgIEdMVWhhbGZFZGdlICplOworCisgIGZvciggZiA9IG1l
c2gtPmZIZWFkLm5leHQ7IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0gZi0+bmV4dCApIHsKKyAgICBp
ZiggZi0+aW5zaWRlICkgeworICAgICAgQ0FMTF9CRUdJTl9PUl9CRUdJTl9EQVRBKCBHTF9MSU5F
X0xPT1AgKTsKKyAgICAgIGUgPSBmLT5hbkVkZ2U7CisgICAgICBkbyB7CisgICAgICAgIENBTExf
VkVSVEVYX09SX1ZFUlRFWF9EQVRBKCBlLT5PcmctPmRhdGEgKTsgCisJZSA9IGUtPkxuZXh0Owor
ICAgICAgfSB3aGlsZSggZSAhPSBmLT5hbkVkZ2UgKTsKKyAgICAgIENBTExfRU5EX09SX0VORF9E
QVRBKCk7CisgICAgfQorICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiBRdWlj
ay1hbmQtZGlydHkgZGVjb21wb3NpdGlvbiAqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUg
U0lHTl9JTkNPTlNJU1RFTlQgMgorCitzdGF0aWMgaW50IENvbXB1dGVOb3JtYWwoIEdMVXRlc3Nl
bGF0b3IgKnRlc3MsIEdMZG91YmxlIG5vcm1bM10sIGludCBjaGVjayApCisvKgorICogSWYgY2hl
Y2s9PUZBTFNFLCB3ZSBjb21wdXRlIHRoZSBwb2x5Z29uIG5vcm1hbCBhbmQgcGxhY2UgaXQgaW4g
bm9ybVtdLgorICogSWYgY2hlY2s9PVRSVUUsIHdlIGNoZWNrIHRoYXQgZWFjaCB0cmlhbmdsZSBp
biB0aGUgZmFuIGZyb20gdjAgaGFzIGEKKyAqIGNvbnNpc3RlbnQgb3JpZW50YXRpb24gd2l0aCBy
ZXNwZWN0IHRvIG5vcm1bXS4gIElmIHRyaWFuZ2xlcyBhcmUKKyAqIGNvbnNpc3RlbnRseSBvcmll
bnRlZCBDQ1csIHJldHVybiAxOyBpZiBDVywgcmV0dXJuIC0xOyBpZiBhbGwgdHJpYW5nbGVzCisg
KiBhcmUgZGVnZW5lcmF0ZSByZXR1cm4gMDsgb3RoZXJ3aXNlIChubyBjb25zaXN0ZW50IG9yaWVu
dGF0aW9uKSByZXR1cm4KKyAqIFNJR05fSU5DT05TSVNURU5ULgorICovCit7CisgIENhY2hlZFZl
cnRleCAqdjAgPSB0ZXNzLT5jYWNoZTsKKyAgQ2FjaGVkVmVydGV4ICp2biA9IHYwICsgdGVzcy0+
Y2FjaGVDb3VudDsKKyAgQ2FjaGVkVmVydGV4ICp2YzsKKyAgR0xkb3VibGUgZG90LCB4YywgeWMs
IHpjLCB4cCwgeXAsIHpwLCBuWzNdOworICBpbnQgc2lnbiA9IDA7CisKKyAgLyogRmluZCB0aGUg
cG9seWdvbiBub3JtYWwuICBJdCBpcyBpbXBvcnRhbnQgdG8gZ2V0IGEgcmVhc29uYWJsZQorICAg
KiBub3JtYWwgZXZlbiB3aGVuIHRoZSBwb2x5Z29uIGlzIHNlbGYtaW50ZXJzZWN0aW5nIChlZy4g
YSBib3d0aWUpLgorICAgKiBPdGhlcndpc2UsIHRoZSBjb21wdXRlZCBub3JtYWwgY291bGQgYmUg
dmVyeSB0aW55LCBidXQgcGVycGVuZGljdWxhcgorICAgKiB0byB0aGUgdHJ1ZSBwbGFuZSBvZiB0
aGUgcG9seWdvbiBkdWUgdG8gbnVtZXJpY2FsIG5vaXNlLiAgVGhlbiBhbGwKKyAgICogdGhlIHRy
aWFuZ2xlcyB3b3VsZCBhcHBlYXIgdG8gYmUgZGVnZW5lcmF0ZSBhbmQgd2Ugd291bGQgaW5jb3Jy
ZWN0bHkKKyAgICogZGVjb21wb3NlIHRoZSBwb2x5Z29uIGFzIGEgZmFuIChvciBzaW1wbHkgbm90
IHJlbmRlciBpdCBhdCBhbGwpLgorICAgKgorICAgKiBXZSB1c2UgYSBzdW0tb2YtdHJpYW5nbGVz
IG5vcm1hbCBhbGdvcml0aG0gcmF0aGVyIHRoYW4gdGhlIG1vcmUKKyAgICogZWZmaWNpZW50IHN1
bS1vZi10cmFwZXpvaWRzIG1ldGhvZCAodXNlZCBpbiBDaGVja09yaWVudGF0aW9uKCkKKyAgICog
aW4gbm9ybWFsLmMpLiAgVGhpcyBsZXRzIHVzIGV4cGxpY2l0bHkgcmV2ZXJzZSB0aGUgc2lnbmVk
IGFyZWEKKyAgICogb2Ygc29tZSB0cmlhbmdsZXMgdG8gZ2V0IGEgcmVhc29uYWJsZSBub3JtYWwg
aW4gdGhlIHNlbGYtaW50ZXJzZWN0aW5nCisgICAqIGNhc2UuCisgICAqLworICBpZiggISBjaGVj
ayApIHsKKyAgICBub3JtWzBdID0gbm9ybVsxXSA9IG5vcm1bMl0gPSAwLjA7CisgIH0KKworICB2
YyA9IHYwICsgMTsKKyAgeGMgPSB2Yy0+Y29vcmRzWzBdIC0gdjAtPmNvb3Jkc1swXTsKKyAgeWMg
PSB2Yy0+Y29vcmRzWzFdIC0gdjAtPmNvb3Jkc1sxXTsKKyAgemMgPSB2Yy0+Y29vcmRzWzJdIC0g
djAtPmNvb3Jkc1syXTsKKyAgd2hpbGUoICsrdmMgPCB2biApIHsKKyAgICB4cCA9IHhjOyB5cCA9
IHljOyB6cCA9IHpjOworICAgIHhjID0gdmMtPmNvb3Jkc1swXSAtIHYwLT5jb29yZHNbMF07Cisg
ICAgeWMgPSB2Yy0+Y29vcmRzWzFdIC0gdjAtPmNvb3Jkc1sxXTsKKyAgICB6YyA9IHZjLT5jb29y
ZHNbMl0gLSB2MC0+Y29vcmRzWzJdOworCisgICAgLyogQ29tcHV0ZSAodnAgLSB2MCkgY3Jvc3Mg
KHZjIC0gdjApICovCisgICAgblswXSA9IHlwKnpjIC0genAqeWM7CisgICAgblsxXSA9IHpwKnhj
IC0geHAqemM7CisgICAgblsyXSA9IHhwKnljIC0geXAqeGM7CisKKyAgICBkb3QgPSBuWzBdKm5v
cm1bMF0gKyBuWzFdKm5vcm1bMV0gKyBuWzJdKm5vcm1bMl07CisgICAgaWYoICEgY2hlY2sgKSB7
CisgICAgICAvKiBSZXZlcnNlIHRoZSBjb250cmlidXRpb24gb2YgYmFjay1mYWNpbmcgdHJpYW5n
bGVzIHRvIGdldAorICAgICAgICogYSByZWFzb25hYmxlIG5vcm1hbCBmb3Igc2VsZi1pbnRlcnNl
Y3RpbmcgcG9seWdvbnMgKHNlZSBhYm92ZSkKKyAgICAgICAqLworICAgICAgaWYoIGRvdCA+PSAw
ICkgeworCW5vcm1bMF0gKz0gblswXTsgbm9ybVsxXSArPSBuWzFdOyBub3JtWzJdICs9IG5bMl07
CisgICAgICB9IGVsc2UgeworCW5vcm1bMF0gLT0gblswXTsgbm9ybVsxXSAtPSBuWzFdOyBub3Jt
WzJdIC09IG5bMl07CisgICAgICB9CisgICAgfSBlbHNlIGlmKCBkb3QgIT0gMCApIHsKKyAgICAg
IC8qIENoZWNrIHRoZSBuZXcgb3JpZW50YXRpb24gZm9yIGNvbnNpc3RlbmN5IHdpdGggcHJldmlv
dXMgdHJpYW5nbGVzICovCisgICAgICBpZiggZG90ID4gMCApIHsKKwlpZiggc2lnbiA8IDAgKSBy
ZXR1cm4gU0lHTl9JTkNPTlNJU1RFTlQ7CisJc2lnbiA9IDE7CisgICAgICB9IGVsc2UgeworCWlm
KCBzaWduID4gMCApIHJldHVybiBTSUdOX0lOQ09OU0lTVEVOVDsKKwlzaWduID0gLTE7CisgICAg
ICB9CisgICAgfQorICB9CisgIHJldHVybiBzaWduOworfQorCisvKiBfX2dsX3JlbmRlckNhY2hl
KCB0ZXNzICkgdGFrZXMgYSBzaW5nbGUgY29udG91ciBhbmQgdHJpZXMgdG8gcmVuZGVyIGl0Cisg
KiBhcyBhIHRyaWFuZ2xlIGZhbi4gIFRoaXMgaGFuZGxlcyBjb252ZXggcG9seWdvbnMsIGFzIHdl
bGwgYXMgc29tZQorICogbm9uLWNvbnZleCBwb2x5Z29ucyBpZiB3ZSBnZXQgbHVja3kuCisgKgor
ICogUmV0dXJucyBUUlVFIGlmIHRoZSBwb2x5Z29uIHdhcyBzdWNjZXNzZnVsbHkgcmVuZGVyZWQu
ICBUaGUgcmVuZGVyaW5nCisgKiBvdXRwdXQgaXMgcHJvdmlkZWQgYXMgY2FsbGJhY2tzIChzZWUg
dGhlIGFwaSkuCisgKi8KK0dMYm9vbGVhbiBfX2dsX3JlbmRlckNhY2hlKCBHTFV0ZXNzZWxhdG9y
ICp0ZXNzICkKK3sKKyAgQ2FjaGVkVmVydGV4ICp2MCA9IHRlc3MtPmNhY2hlOworICBDYWNoZWRW
ZXJ0ZXggKnZuID0gdjAgKyB0ZXNzLT5jYWNoZUNvdW50OworICBDYWNoZWRWZXJ0ZXggKnZjOwor
ICBHTGRvdWJsZSBub3JtWzNdOworICBpbnQgc2lnbjsKKworICBpZiggdGVzcy0+Y2FjaGVDb3Vu
dCA8IDMgKSB7CisgICAgLyogRGVnZW5lcmF0ZSBjb250b3VyIC0tIG5vIG91dHB1dCAqLworICAg
IHJldHVybiBUUlVFOworICB9CisKKyAgbm9ybVswXSA9IHRlc3MtPm5vcm1hbFswXTsKKyAgbm9y
bVsxXSA9IHRlc3MtPm5vcm1hbFsxXTsKKyAgbm9ybVsyXSA9IHRlc3MtPm5vcm1hbFsyXTsKKyAg
aWYoIG5vcm1bMF0gPT0gMCAmJiBub3JtWzFdID09IDAgJiYgbm9ybVsyXSA9PSAwICkgeworICAg
IENvbXB1dGVOb3JtYWwoIHRlc3MsIG5vcm0sIEZBTFNFICk7CisgIH0KKworICBzaWduID0gQ29t
cHV0ZU5vcm1hbCggdGVzcywgbm9ybSwgVFJVRSApOworICBpZiggc2lnbiA9PSBTSUdOX0lOQ09O
U0lTVEVOVCApIHsKKyAgICAvKiBGYW4gdHJpYW5nbGVzIGRpZCBub3QgaGF2ZSBhIGNvbnNpc3Rl
bnQgb3JpZW50YXRpb24gKi8KKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgaWYoIHNpZ24gPT0g
MCApIHsKKyAgICAvKiBBbGwgdHJpYW5nbGVzIHdlcmUgZGVnZW5lcmF0ZSAqLworICAgIHJldHVy
biBUUlVFOworICB9CisKKyAgLyogTWFrZSBzdXJlIHdlIGRvIHRoZSByaWdodCB0aGluZyBmb3Ig
ZWFjaCB3aW5kaW5nIHJ1bGUgKi8KKyAgc3dpdGNoKCB0ZXNzLT53aW5kaW5nUnVsZSApIHsKKyAg
Y2FzZSBHTFVfVEVTU19XSU5ESU5HX09ERDoKKyAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX05PTlpF
Uk86CisgICAgYnJlYWs7CisgIGNhc2UgR0xVX1RFU1NfV0lORElOR19QT1NJVElWRToKKyAgICBp
Ziggc2lnbiA8IDAgKSByZXR1cm4gVFJVRTsKKyAgICBicmVhazsKKyAgY2FzZSBHTFVfVEVTU19X
SU5ESU5HX05FR0FUSVZFOgorICAgIGlmKCBzaWduID4gMCApIHJldHVybiBUUlVFOworICAgIGJy
ZWFrOworICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV086CisgICAgcmV0dXJuIFRS
VUU7CisgIH0KKworICBDQUxMX0JFR0lOX09SX0JFR0lOX0RBVEEoIHRlc3MtPmJvdW5kYXJ5T25s
eSA/IEdMX0xJTkVfTE9PUAorCQkJICA6ICh0ZXNzLT5jYWNoZUNvdW50ID4gMykgPyBHTF9UUklB
TkdMRV9GQU4KKwkJCSAgOiBHTF9UUklBTkdMRVMgKTsKKworICBDQUxMX1ZFUlRFWF9PUl9WRVJU
RVhfREFUQSggdjAtPmRhdGEgKTsgCisgIGlmKCBzaWduID4gMCApIHsKKyAgICBmb3IoIHZjID0g
djArMTsgdmMgPCB2bjsgKyt2YyApIHsKKyAgICAgIENBTExfVkVSVEVYX09SX1ZFUlRFWF9EQVRB
KCB2Yy0+ZGF0YSApOyAKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm9yKCB2YyA9IHZuLTE7IHZj
ID4gdjA7IC0tdmMgKSB7CisgICAgICBDQUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQSggdmMtPmRh
dGEgKTsgCisgICAgfQorICB9CisgIENBTExfRU5EX09SX0VORF9EQVRBKCk7CisgIHJldHVybiBU
UlVFOworfQpJbmRleDogV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0
IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorKiogbWFkZSBzdWJqZWN0
IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQor
KiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBj
b250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lv
bnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQorKiogdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQorKiog
b2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2Vy
dmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5
NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0Zy
ZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBT
b2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwg
RVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCisqKiBESVNDTEFJ
TUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElF
UyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVB
TElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJ
TkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9w
ZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBK
YW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKKyoqIEluYy4g
VGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFw
aGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJk
IHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBw
bGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworKiogZXN0YWJsaXNoZWQgYnkgU0dJIGlu
IGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQorKiogT3BlbkdMKFIp
IEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFz
ZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxp
dHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsg
YW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCisqKiBXaW5kb3cgU3lzdGVtKFIpIChW
ZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKKyoq
IHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1w
bGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBl
bmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChS
KSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisqKgorKi8KKy8qCisqKiBBdXRob3I6IEVy
aWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlzaW9uJAorKiogJEhlYWRl
cjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvcmVuZGVyLmgjNSAkCisqLworCisj
aWZuZGVmIF9fcmVuZGVyX2hfCisjZGVmaW5lIF9fcmVuZGVyX2hfCisKKyNpbmNsdWRlICIzcmRw
YXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgiCisKKy8qIF9fZ2xfcmVuZGVyTWVzaCggdGVzcywgbWVz
aCApIHRha2VzIGEgbWVzaCBhbmQgYnJlYWtzIGl0IGludG8gdHJpYW5nbGUKKyAqIGZhbnMsIHN0
cmlwcywgYW5kIHNlcGFyYXRlIHRyaWFuZ2xlcy4gIEEgc3Vic3RhbnRpYWwgZWZmb3J0IGlzIG1h
ZGUKKyAqIHRvIHVzZSBhcyBmZXcgcmVuZGVyaW5nIHByaW1pdGl2ZXMgYXMgcG9zc2libGUgKGll
LiB0byBtYWtlIHRoZSBmYW5zCisgKiBhbmQgc3RyaXBzIGFzIGxhcmdlIGFzIHBvc3NpYmxlKS4K
KyAqCisgKiBUaGUgcmVuZGVyaW5nIG91dHB1dCBpcyBwcm92aWRlZCBhcyBjYWxsYmFja3MgKHNl
ZSB0aGUgYXBpKS4KKyAqLwordm9pZCBfX2dsX3JlbmRlck1lc2goIEdMVXRlc3NlbGF0b3IgKnRl
c3MsIEdMVW1lc2ggKm1lc2ggKTsKK3ZvaWQgX19nbF9yZW5kZXJCb3VuZGFyeSggR0xVdGVzc2Vs
YXRvciAqdGVzcywgR0xVbWVzaCAqbWVzaCApOworCitHTGJvb2xlYW4gX19nbF9yZW5kZXJDYWNo
ZSggR0xVdGVzc2VsYXRvciAqdGVzcyApOworCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvM3JkcGFy
dHkvZ2x1L2xpYnRlc3Mvc3dlZXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLzNyZHBhcnR5L2ds
dS9saWJ0ZXNzL3N3ZWVwLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlLzNyZHBhcnR5L2dsdS9s
aWJ0ZXNzL3N3ZWVwLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM1OSBAQAorLyoKKyoqIExp
Y2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhp
cyBmaWxlIGFyZQorKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMg
cGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9u
IDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBz
dWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90
IHVzZQorKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
IFlvdSBtYXkgb2J0YWluIGEgY29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFw
aGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQ
YXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0
cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJv
dmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgor
KiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVT
IEFORCBDT05ESVRJT05TCisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRB
VElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hB
TlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElD
VUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29k
ZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisq
KiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkg
U2lsaWNvbiBHcmFwaGljcywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0
IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFu
eSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBl
bHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFs
IE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNl
cworKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFs
IENvZGUgYXJlIFRoZQorKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0
aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVu
R0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwg
cmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRo
ZSBYCisqKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIg
MTksIDE5OTguIFRoaXMgc29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0wo
UikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBT
R0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiog
Y29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24u
CisqKgorKi8KKy8qCisqKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAk
RGF0ZSQgJFJldmlzaW9uJAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xp
YnRlc3Mvc3dlZXAuYyM1ICQKKyovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxz
ZXRqbXAuaD4JCS8qIGxvbmdqbXAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4JCS8qIExPTkdfTUFY
ICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlICIzcmRwYXJ0eS9nbHUvZ2x1b3Mu
aCIKKyNpbmNsdWRlICIzcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmgiCisjaW5jbHVkZSAiM3Jk
cGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5oIgorI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9saWJ0ZXNz
L21lbWFsbG9jLmgiCisjaW5jbHVkZSAiM3JkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorI2lu
Y2x1ZGUgIjNyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oIgorI2luY2x1ZGUgIjNyZHBh
cnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmgiCisjaW5jbHVkZSAiM3JkcGFydHkvZ2x1L2xpYnRlc3Mv
dGVzcy5oIgorCisjZGVmaW5lIFRSVUUgMQorI2RlZmluZSBGQUxTRSAwCisKKyNpZmRlZiBGT1Jf
VFJJVEVfVEVTVF9QUk9HUkFNCitleHRlcm4gdm9pZCBEZWJ1Z0V2ZW50KCBHTFV0ZXNzZWxhdG9y
ICp0ZXNzICk7CisjZWxzZQorI2RlZmluZSBEZWJ1Z0V2ZW50KCB0ZXNzICkKKyNlbmRpZgorCisv
KgorICogSW52YXJpYW50cyBmb3IgdGhlIEVkZ2UgRGljdGlvbmFyeS4KKyAqIC0gZWFjaCBwYWly
IG9mIGFkamFjZW50IGVkZ2VzIGUyPVN1Y2MoZTEpIHNhdGlzZmllcyBFZGdlTGVxKGUxLGUyKQor
ICogICBhdCBhbnkgdmFsaWQgbG9jYXRpb24gb2YgdGhlIHN3ZWVwIGV2ZW50CisgKiAtIGlmIEVk
Z2VMZXEoZTIsZTEpIGFzIHdlbGwgKGF0IGFueSB2YWxpZCBzd2VlcCBldmVudCksIHRoZW4gZTEg
YW5kIGUyCisgKiAgIHNoYXJlIGEgY29tbW9uIGVuZHBvaW50CisgKiAtIGZvciBlYWNoIGUsIGUt
PkRzdCBoYXMgYmVlbiBwcm9jZXNzZWQsIGJ1dCBub3QgZS0+T3JnCisgKiAtIGVhY2ggZWRnZSBl
IHNhdGlzZmllcyBWZXJ0TGVxKGUtPkRzdCxldmVudCkgJiYgVmVydExlcShldmVudCxlLT5Pcmcp
CisgKiAgIHdoZXJlICJldmVudCIgaXMgdGhlIGN1cnJlbnQgc3dlZXAgbGluZSBldmVudC4KKyAq
IC0gbm8gZWRnZSBlIGhhcyB6ZXJvIGxlbmd0aAorICoKKyAqIEludmFyaWFudHMgZm9yIHRoZSBN
ZXNoICh0aGUgcHJvY2Vzc2VkIHBvcnRpb24pLgorICogLSB0aGUgcG9ydGlvbiBvZiB0aGUgbWVz
aCBsZWZ0IG9mIHRoZSBzd2VlcCBsaW5lIGlzIGEgcGxhbmFyIGdyYXBoLAorICogICBpZS4gdGhl
cmUgaXMgKnNvbWUqIHdheSB0byBlbWJlZCBpdCBpbiB0aGUgcGxhbmUKKyAqIC0gbm8gcHJvY2Vz
c2VkIGVkZ2UgaGFzIHplcm8gbGVuZ3RoCisgKiAtIG5vIHR3byBwcm9jZXNzZWQgdmVydGljZXMg
aGF2ZSBpZGVudGljYWwgY29vcmRpbmF0ZXMKKyAqIC0gZWFjaCAiaW5zaWRlIiByZWdpb24gaXMg
bW9ub3RvbmUsIGllLiBjYW4gYmUgYnJva2VuIGludG8gdHdvIGNoYWlucworICogICBvZiBtb25v
dG9uaWNhbGx5IGluY3JlYXNpbmcgdmVydGljZXMgYWNjb3JkaW5nIHRvIFZlcnRMZXEodjEsdjIp
CisgKiAgIC0gYSBub24taW52YXJpYW50OiB0aGVzZSBjaGFpbnMgbWF5IGludGVyc2VjdCAodmVy
eSBzbGlnaHRseSkKKyAqCisgKiBJbnZhcmlhbnRzIGZvciB0aGUgU3dlZXAuCisgKiAtIGlmIG5v
bmUgb2YgdGhlIGVkZ2VzIGluY2lkZW50IHRvIHRoZSBldmVudCB2ZXJ0ZXggaGF2ZSBhbiBhY3Rp
dmVSZWdpb24KKyAqICAgKGllLiBub25lIG9mIHRoZXNlIGVkZ2VzIGFyZSBpbiB0aGUgZWRnZSBk
aWN0aW9uYXJ5KSwgdGhlbiB0aGUgdmVydGV4CisgKiAgIGhhcyBvbmx5IHJpZ2h0LWdvaW5nIGVk
Z2VzLgorICogLSBpZiBhbiBlZGdlIGlzIG1hcmtlZCAiZml4VXBwZXJFZGdlIiAoaXQgaXMgYSB0
ZW1wb3JhcnkgZWRnZSBpbnRyb2R1Y2VkCisgKiAgIGJ5IENvbm5lY3RSaWdodFZlcnRleCksIHRo
ZW4gaXQgaXMgdGhlIG9ubHkgcmlnaHQtZ29pbmcgZWRnZSBmcm9tCisgKiAgIGl0cyBhc3NvY2lh
dGVkIHZlcnRleC4gIChUaGlzIHNheXMgdGhhdCB0aGVzZSBlZGdlcyBleGlzdCBvbmx5CisgKiAg
IHdoZW4gaXQgaXMgbmVjZXNzYXJ5LikKKyAqLworCisjZGVmaW5lIE1BWCh4LHkpCSgoeCkgPj0g
KHkpID8gKHgpIDogKHkpKQorI2RlZmluZSBNSU4oeCx5KQkoKHgpIDw9ICh5KSA/ICh4KSA6ICh5
KSkKKworLyogV2hlbiB3ZSBtZXJnZSB0d28gZWRnZXMgaW50byBvbmUsIHdlIG5lZWQgdG8gY29t
cHV0ZSB0aGUgY29tYmluZWQKKyAqIHdpbmRpbmcgb2YgdGhlIG5ldyBlZGdlLgorICovCisjZGVm
aW5lIEFkZFdpbmRpbmcoZURzdCxlU3JjKQkoZURzdC0+d2luZGluZyArPSBlU3JjLT53aW5kaW5n
LCBcCisJCQkJIGVEc3QtPlN5bS0+d2luZGluZyArPSBlU3JjLT5TeW0tPndpbmRpbmcpCisKK3N0
YXRpYyB2b2lkIFN3ZWVwRXZlbnQoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVXZlcnRleCAqdkV2
ZW50ICk7CitzdGF0aWMgdm9pZCBXYWxrRGlydHlSZWdpb25zKCBHTFV0ZXNzZWxhdG9yICp0ZXNz
LCBBY3RpdmVSZWdpb24gKnJlZ1VwICk7CitzdGF0aWMgaW50IENoZWNrRm9yUmlnaHRTcGxpY2Uo
IEdMVXRlc3NlbGF0b3IgKnRlc3MsIEFjdGl2ZVJlZ2lvbiAqcmVnVXAgKTsKKworc3RhdGljIGlu
dCBFZGdlTGVxKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZzEsCisJCSAg
ICBBY3RpdmVSZWdpb24gKnJlZzIgKQorLyoKKyAqIEJvdGggZWRnZXMgbXVzdCBiZSBkaXJlY3Rl
ZCBmcm9tIHJpZ2h0IHRvIGxlZnQgKHRoaXMgaXMgdGhlIGNhbm9uaWNhbAorICogZGlyZWN0aW9u
IGZvciB0aGUgdXBwZXIgZWRnZSBvZiBlYWNoIHJlZ2lvbikuCisgKgorICogVGhlIHN0cmF0ZWd5
IGlzIHRvIGV2YWx1YXRlIGEgInQiIHZhbHVlIGZvciBlYWNoIGVkZ2UgYXQgdGhlCisgKiBjdXJy
ZW50IHN3ZWVwIGxpbmUgcG9zaXRpb24sIGdpdmVuIGJ5IHRlc3MtPmV2ZW50LiAgVGhlIGNhbGN1
bGF0aW9ucworICogYXJlIGRlc2lnbmVkIHRvIGJlIHZlcnkgc3RhYmxlLCBidXQgb2YgY291cnNl
IHRoZXkgYXJlIG5vdCBwZXJmZWN0LgorICoKKyAqIFNwZWNpYWwgY2FzZTogaWYgYm90aCBlZGdl
IGRlc3RpbmF0aW9ucyBhcmUgYXQgdGhlIHN3ZWVwIGV2ZW50LAorICogd2Ugc29ydCB0aGUgZWRn
ZXMgYnkgc2xvcGUgKHRoZXkgd291bGQgb3RoZXJ3aXNlIGNvbXBhcmUgZXF1YWxseSkuCisgKi8K
K3sKKyAgR0xVdmVydGV4ICpldmVudCA9IHRlc3MtPmV2ZW50OworICBHTFVoYWxmRWRnZSAqZTEs
ICplMjsKKyAgR0xkb3VibGUgdDEsIHQyOworCisgIGUxID0gcmVnMS0+ZVVwOworICBlMiA9IHJl
ZzItPmVVcDsKKworICBpZiggZTEtPkRzdCA9PSBldmVudCApIHsKKyAgICBpZiggZTItPkRzdCA9
PSBldmVudCApIHsKKyAgICAgIC8qIFR3byBlZGdlcyByaWdodCBvZiB0aGUgc3dlZXAgbGluZSB3
aGljaCBtZWV0IGF0IHRoZSBzd2VlcCBldmVudC4KKyAgICAgICAqIFNvcnQgdGhlbSBieSBzbG9w
ZS4KKyAgICAgICAqLworICAgICAgaWYoIFZlcnRMZXEoIGUxLT5PcmcsIGUyLT5PcmcgKSkgewor
CXJldHVybiBFZGdlU2lnbiggZTItPkRzdCwgZTEtPk9yZywgZTItPk9yZyApIDw9IDA7CisgICAg
ICB9CisgICAgICByZXR1cm4gRWRnZVNpZ24oIGUxLT5Ec3QsIGUyLT5PcmcsIGUxLT5PcmcgKSA+
PSAwOworICAgIH0KKyAgICByZXR1cm4gRWRnZVNpZ24oIGUyLT5Ec3QsIGV2ZW50LCBlMi0+T3Jn
ICkgPD0gMDsKKyAgfQorICBpZiggZTItPkRzdCA9PSBldmVudCApIHsKKyAgICByZXR1cm4gRWRn
ZVNpZ24oIGUxLT5Ec3QsIGV2ZW50LCBlMS0+T3JnICkgPj0gMDsKKyAgfQorCisgIC8qIEdlbmVy
YWwgY2FzZSAtIGNvbXB1dGUgc2lnbmVkIGRpc3RhbmNlICpmcm9tKiBlMSwgZTIgdG8gZXZlbnQg
Ki8KKyAgdDEgPSBFZGdlRXZhbCggZTEtPkRzdCwgZXZlbnQsIGUxLT5PcmcgKTsKKyAgdDIgPSBF
ZGdlRXZhbCggZTItPkRzdCwgZXZlbnQsIGUyLT5PcmcgKTsKKyAgcmV0dXJuICh0MSA+PSB0Mik7
Cit9CisKKworc3RhdGljIHZvaWQgRGVsZXRlUmVnaW9uKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBB
Y3RpdmVSZWdpb24gKnJlZyApCit7CisgIGlmKCByZWctPmZpeFVwcGVyRWRnZSApIHsKKyAgICAv
KiBJdCB3YXMgY3JlYXRlZCB3aXRoIHplcm8gd2luZGluZyBudW1iZXIsIHNvIGl0IGJldHRlciBi
ZQorICAgICAqIGRlbGV0ZWQgd2l0aCB6ZXJvIHdpbmRpbmcgbnVtYmVyIChpZS4gaXQgYmV0dGVy
IG5vdCBnZXQgbWVyZ2VkCisgICAgICogd2l0aCBhIHJlYWwgZWRnZSkuCisgICAgICovCisgICAg
YXNzZXJ0KCByZWctPmVVcC0+d2luZGluZyA9PSAwICk7CisgIH0KKyAgcmVnLT5lVXAtPmFjdGl2
ZVJlZ2lvbiA9IE5VTEw7CisgIGRpY3REZWxldGUoIHRlc3MtPmRpY3QsIHJlZy0+bm9kZVVwICk7
IC8qIF9fZ2xfZGljdExpc3REZWxldGUgKi8KKyAgbWVtRnJlZSggcmVnICk7Cit9CisKKworc3Rh
dGljIGludCBGaXhVcHBlckVkZ2UoIEFjdGl2ZVJlZ2lvbiAqcmVnLCBHTFVoYWxmRWRnZSAqbmV3
RWRnZSApCisvKgorICogUmVwbGFjZSBhbiB1cHBlciBlZGdlIHdoaWNoIG5lZWRzIGZpeGluZyAo
c2VlIENvbm5lY3RSaWdodFZlcnRleCkuCisgKi8KK3sKKyAgYXNzZXJ0KCByZWctPmZpeFVwcGVy
RWRnZSApOworICBpZiAoICFfX2dsX21lc2hEZWxldGUoIHJlZy0+ZVVwICkgKSByZXR1cm4gMDsK
KyAgcmVnLT5maXhVcHBlckVkZ2UgPSBGQUxTRTsKKyAgcmVnLT5lVXAgPSBuZXdFZGdlOworICBu
ZXdFZGdlLT5hY3RpdmVSZWdpb24gPSByZWc7CisKKyAgcmV0dXJuIDE7IAorfQorCitzdGF0aWMg
QWN0aXZlUmVnaW9uICpUb3BMZWZ0UmVnaW9uKCBBY3RpdmVSZWdpb24gKnJlZyApCit7CisgIEdM
VXZlcnRleCAqb3JnID0gcmVnLT5lVXAtPk9yZzsKKyAgR0xVaGFsZkVkZ2UgKmU7CisKKyAgLyog
RmluZCB0aGUgcmVnaW9uIGFib3ZlIHRoZSB1cHBlcm1vc3QgZWRnZSB3aXRoIHRoZSBzYW1lIG9y
aWdpbiAqLworICBkbyB7CisgICAgcmVnID0gUmVnaW9uQWJvdmUoIHJlZyApOworICB9IHdoaWxl
KCByZWctPmVVcC0+T3JnID09IG9yZyApOworCisgIC8qIElmIHRoZSBlZGdlIGFib3ZlIHdhcyBh
IHRlbXBvcmFyeSBlZGdlIGludHJvZHVjZWQgYnkgQ29ubmVjdFJpZ2h0VmVydGV4LAorICAgKiBu
b3cgaXMgdGhlIHRpbWUgdG8gZml4IGl0LgorICAgKi8KKyAgaWYoIHJlZy0+Zml4VXBwZXJFZGdl
ICkgeworICAgIGUgPSBfX2dsX21lc2hDb25uZWN0KCBSZWdpb25CZWxvdyhyZWcpLT5lVXAtPlN5
bSwgcmVnLT5lVXAtPkxuZXh0ICk7CisgICAgaWYgKGUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Cisg
ICAgaWYgKCAhRml4VXBwZXJFZGdlKCByZWcsIGUgKSApIHJldHVybiBOVUxMOworICAgIHJlZyA9
IFJlZ2lvbkFib3ZlKCByZWcgKTsKKyAgfQorICByZXR1cm4gcmVnOworfQorCitzdGF0aWMgQWN0
aXZlUmVnaW9uICpUb3BSaWdodFJlZ2lvbiggQWN0aXZlUmVnaW9uICpyZWcgKQoreworICBHTFV2
ZXJ0ZXggKmRzdCA9IHJlZy0+ZVVwLT5Ec3Q7CisKKyAgLyogRmluZCB0aGUgcmVnaW9uIGFib3Zl
IHRoZSB1cHBlcm1vc3QgZWRnZSB3aXRoIHRoZSBzYW1lIGRlc3RpbmF0aW9uICovCisgIGRvIHsK
KyAgICByZWcgPSBSZWdpb25BYm92ZSggcmVnICk7CisgIH0gd2hpbGUoIHJlZy0+ZVVwLT5Ec3Qg
PT0gZHN0ICk7CisgIHJldHVybiByZWc7Cit9CisKK3N0YXRpYyBBY3RpdmVSZWdpb24gKkFkZFJl
Z2lvbkJlbG93KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLAorCQkJCSAgICAgQWN0aXZlUmVnaW9uICpy
ZWdBYm92ZSwKKwkJCQkgICAgIEdMVWhhbGZFZGdlICplTmV3VXAgKQorLyoKKyAqIEFkZCBhIG5l
dyBhY3RpdmUgcmVnaW9uIHRvIHRoZSBzd2VlcCBsaW5lLCAqc29tZXdoZXJlKiBiZWxvdyAicmVn
QWJvdmUiCisgKiAoYWNjb3JkaW5nIHRvIHdoZXJlIHRoZSBuZXcgZWRnZSBiZWxvbmdzIGluIHRo
ZSBzd2VlcC1saW5lIGRpY3Rpb25hcnkpLgorICogVGhlIHVwcGVyIGVkZ2Ugb2YgdGhlIG5ldyBy
ZWdpb24gd2lsbCBiZSAiZU5ld1VwIi4KKyAqIFdpbmRpbmcgbnVtYmVyIGFuZCAiaW5zaWRlIiBm
bGFnIGFyZSBub3QgdXBkYXRlZC4KKyAqLworeworICBBY3RpdmVSZWdpb24gKnJlZ05ldyA9IChB
Y3RpdmVSZWdpb24gKiltZW1BbGxvYyggc2l6ZW9mKCBBY3RpdmVSZWdpb24gKSk7CisgIGlmIChy
ZWdOZXcgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisKKyAgcmVnTmV3LT5lVXAgPSBl
TmV3VXA7CisgIC8qIF9fZ2xfZGljdExpc3RJbnNlcnRCZWZvcmUgKi8gCisgIHJlZ05ldy0+bm9k
ZVVwID0gZGljdEluc2VydEJlZm9yZSggdGVzcy0+ZGljdCwgcmVnQWJvdmUtPm5vZGVVcCwgcmVn
TmV3ICk7CisgIGlmIChyZWdOZXctPm5vZGVVcCA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwx
KTsKKyAgcmVnTmV3LT5maXhVcHBlckVkZ2UgPSBGQUxTRTsKKyAgcmVnTmV3LT5zZW50aW5lbCA9
IEZBTFNFOworICByZWdOZXctPmRpcnR5ID0gRkFMU0U7CisKKyAgZU5ld1VwLT5hY3RpdmVSZWdp
b24gPSByZWdOZXc7CisgIHJldHVybiByZWdOZXc7Cit9CisKK3N0YXRpYyBHTGJvb2xlYW4gSXNX
aW5kaW5nSW5zaWRlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBpbnQgbiApCit7CisgIHN3aXRjaCgg
dGVzcy0+d2luZGluZ1J1bGUgKSB7CisgIGNhc2UgR0xVX1RFU1NfV0lORElOR19PREQ6CisgICAg
cmV0dXJuIChuICYgMSk7CisgIGNhc2UgR0xVX1RFU1NfV0lORElOR19OT05aRVJPOgorICAgIHJl
dHVybiAobiAhPSAwKTsKKyAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFOgorICAgIHJl
dHVybiAobiA+IDApOworICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkU6CisgICAgcmV0
dXJuIChuIDwgMCk7CisgIGNhc2UgR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTzoKKyAgICBy
ZXR1cm4gKG4gPj0gMikgfHwgKG4gPD0gLTIpOworICB9CisgIC8qTElOVEVEKi8KKyAgYXNzZXJ0
KCBGQUxTRSApOworICAvKk5PVFJFQUNIRUQqLworfQorCisKK3N0YXRpYyB2b2lkIENvbXB1dGVX
aW5kaW5nKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZyApCit7CisgIHJl
Zy0+d2luZGluZ051bWJlciA9IFJlZ2lvbkFib3ZlKHJlZyktPndpbmRpbmdOdW1iZXIgKyByZWct
PmVVcC0+d2luZGluZzsKKyAgcmVnLT5pbnNpZGUgPSBJc1dpbmRpbmdJbnNpZGUoIHRlc3MsIHJl
Zy0+d2luZGluZ051bWJlciApOworfQorCisKK3N0YXRpYyB2b2lkIEZpbmlzaFJlZ2lvbiggR0xV
dGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9uICpyZWcgKQorLyoKKyAqIERlbGV0ZSBhIHJl
Z2lvbiBmcm9tIHRoZSBzd2VlcCBsaW5lLiAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHVwcGVyCisg
KiBhbmQgbG93ZXIgY2hhaW5zIG9mIGEgcmVnaW9uIG1lZXQgKGF0IGEgdmVydGV4IG9uIHRoZSBz
d2VlcCBsaW5lKS4KKyAqIFRoZSAiaW5zaWRlIiBmbGFnIGlzIGNvcGllZCB0byB0aGUgYXBwcm9w
cmlhdGUgbWVzaCBmYWNlICh3ZSBjb3VsZAorICogbm90IGRvIHRoaXMgYmVmb3JlIC0tIHNpbmNl
IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1lc2ggaXMgYWx3YXlzCisgKiBjaGFuZ2luZywgdGhpcyBm
YWNlIG1heSBub3QgaGF2ZSBldmVuIGV4aXN0ZWQgdW50aWwgbm93KS4KKyAqLworeworICBHTFVo
YWxmRWRnZSAqZSA9IHJlZy0+ZVVwOworICBHTFVmYWNlICpmID0gZS0+TGZhY2U7CisKKyAgZi0+
aW5zaWRlID0gcmVnLT5pbnNpZGU7CisgIGYtPmFuRWRnZSA9IGU7ICAgLyogb3B0aW1pemF0aW9u
IGZvciBfX2dsX21lc2hUZXNzZWxsYXRlTW9ub1JlZ2lvbigpICovCisgIERlbGV0ZVJlZ2lvbigg
dGVzcywgcmVnICk7Cit9CisKKworc3RhdGljIEdMVWhhbGZFZGdlICpGaW5pc2hMZWZ0UmVnaW9u
cyggR0xVdGVzc2VsYXRvciAqdGVzcywKKwkgICAgICAgQWN0aXZlUmVnaW9uICpyZWdGaXJzdCwg
QWN0aXZlUmVnaW9uICpyZWdMYXN0ICkKKy8qCisgKiBXZSBhcmUgZ2l2ZW4gYSB2ZXJ0ZXggd2l0
aCBvbmUgb3IgbW9yZSBsZWZ0LWdvaW5nIGVkZ2VzLiAgQWxsIGFmZmVjdGVkCisgKiBlZGdlcyBz
aG91bGQgYmUgaW4gdGhlIGVkZ2UgZGljdGlvbmFyeS4gIFN0YXJ0aW5nIGF0IHJlZ0ZpcnN0LT5l
VXAsCisgKiB3ZSB3YWxrIGRvd24gZGVsZXRpbmcgYWxsIHJlZ2lvbnMgd2hlcmUgYm90aCBlZGdl
cyBoYXZlIHRoZSBzYW1lCisgKiBvcmlnaW4gdk9yZy4gIEF0IHRoZSBzYW1lIHRpbWUgd2UgY29w
eSB0aGUgImluc2lkZSIgZmxhZyBmcm9tIHRoZQorICogYWN0aXZlIHJlZ2lvbiB0byB0aGUgZmFj
ZSwgc2luY2UgYXQgdGhpcyBwb2ludCBlYWNoIGZhY2Ugd2lsbCBiZWxvbmcKKyAqIHRvIGF0IG1v
c3Qgb25lIHJlZ2lvbiAodGhpcyB3YXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgdW50aWwgdGhpcyBw
b2ludAorICogaW4gdGhlIHN3ZWVwKS4gIFRoZSB3YWxrIHN0b3BzIGF0IHRoZSByZWdpb24gYWJv
dmUgcmVnTGFzdDsgaWYgcmVnTGFzdAorICogaXMgTlVMTCB3ZSB3YWxrIGFzIGZhciBhcyBwb3Nz
aWJsZS4gIEF0IHRoZSBzYW1lIHRpbWUgd2UgcmVsaW5rIHRoZQorICogbWVzaCBpZiBuZWNlc3Nh
cnksIHNvIHRoYXQgdGhlIG9yZGVyaW5nIG9mIGVkZ2VzIGFyb3VuZCB2T3JnIGlzIHRoZQorICog
c2FtZSBhcyBpbiB0aGUgZGljdGlvbmFyeS4KKyAqLworeworICBBY3RpdmVSZWdpb24gKnJlZywg
KnJlZ1ByZXY7CisgIEdMVWhhbGZFZGdlICplLCAqZVByZXY7CisKKyAgcmVnUHJldiA9IHJlZ0Zp
cnN0OworICBlUHJldiA9IHJlZ0ZpcnN0LT5lVXA7CisgIHdoaWxlKCByZWdQcmV2ICE9IHJlZ0xh
c3QgKSB7CisgICAgcmVnUHJldi0+Zml4VXBwZXJFZGdlID0gRkFMU0U7CS8qIHBsYWNlbWVudCB3
YXMgT0sgKi8KKyAgICByZWcgPSBSZWdpb25CZWxvdyggcmVnUHJldiApOworICAgIGUgPSByZWct
PmVVcDsKKyAgICBpZiggZS0+T3JnICE9IGVQcmV2LT5PcmcgKSB7CisgICAgICBpZiggISByZWct
PmZpeFVwcGVyRWRnZSApIHsKKwkvKiBSZW1vdmUgdGhlIGxhc3QgbGVmdC1nb2luZyBlZGdlLiAg
RXZlbiB0aG91Z2ggdGhlcmUgYXJlIG5vIGZ1cnRoZXIKKwkgKiBlZGdlcyBpbiB0aGUgZGljdGlv
bmFyeSB3aXRoIHRoaXMgb3JpZ2luLCB0aGVyZSBtYXkgYmUgZnVydGhlcgorCSAqIHN1Y2ggZWRn
ZXMgaW4gdGhlIG1lc2ggKGlmIHdlIGFyZSBhZGRpbmcgbGVmdCBlZGdlcyB0byBhIHZlcnRleAor
CSAqIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQpLiAgVGh1cyBpdCBpcyBpbXBvcnRh
bnQgdG8gY2FsbAorCSAqIEZpbmlzaFJlZ2lvbiByYXRoZXIgdGhhbiBqdXN0IERlbGV0ZVJlZ2lv
bi4KKwkgKi8KKwlGaW5pc2hSZWdpb24oIHRlc3MsIHJlZ1ByZXYgKTsKKwlicmVhazsKKyAgICAg
IH0KKyAgICAgIC8qIElmIHRoZSBlZGdlIGJlbG93IHdhcyBhIHRlbXBvcmFyeSBlZGdlIGludHJv
ZHVjZWQgYnkKKyAgICAgICAqIENvbm5lY3RSaWdodFZlcnRleCwgbm93IGlzIHRoZSB0aW1lIHRv
IGZpeCBpdC4KKyAgICAgICAqLworICAgICAgZSA9IF9fZ2xfbWVzaENvbm5lY3QoIGVQcmV2LT5M
cHJldiwgZS0+U3ltICk7CisgICAgICBpZiAoZSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwx
KTsKKyAgICAgIGlmICggIUZpeFVwcGVyRWRnZSggcmVnLCBlICkgKSBsb25nam1wKHRlc3MtPmVu
diwxKTsKKyAgICB9CisKKyAgICAvKiBSZWxpbmsgZWRnZXMgc28gdGhhdCBlUHJldi0+T25leHQg
PT0gZSAqLworICAgIGlmKCBlUHJldi0+T25leHQgIT0gZSApIHsKKyAgICAgIGlmICggIV9fZ2xf
bWVzaFNwbGljZSggZS0+T3ByZXYsIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgICAg
aWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlUHJldiwgZSApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7
CisgICAgfQorICAgIEZpbmlzaFJlZ2lvbiggdGVzcywgcmVnUHJldiApOwkvKiBtYXkgY2hhbmdl
IHJlZy0+ZVVwICovCisgICAgZVByZXYgPSByZWctPmVVcDsKKyAgICByZWdQcmV2ID0gcmVnOwor
ICB9CisgIHJldHVybiBlUHJldjsKK30KKworCitzdGF0aWMgdm9pZCBBZGRSaWdodEVkZ2VzKCBH
TFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZ1VwLAorICAgICAgIEdMVWhhbGZF
ZGdlICplRmlyc3QsIEdMVWhhbGZFZGdlICplTGFzdCwgR0xVaGFsZkVkZ2UgKmVUb3BMZWZ0LAor
ICAgICAgIEdMYm9vbGVhbiBjbGVhblVwICkKKy8qCisgKiBQdXJwb3NlOiBpbnNlcnQgcmlnaHQt
Z29pbmcgZWRnZXMgaW50byB0aGUgZWRnZSBkaWN0aW9uYXJ5LCBhbmQgdXBkYXRlCisgKiB3aW5k
aW5nIG51bWJlcnMgYW5kIG1lc2ggY29ubmVjdGl2aXR5IGFwcHJvcHJpYXRlbHkuICBBbGwgcmln
aHQtZ29pbmcKKyAqIGVkZ2VzIHNoYXJlIGEgY29tbW9uIG9yaWdpbiB2T3JnLiAgRWRnZXMgYXJl
IGluc2VydGVkIENDVyBzdGFydGluZyBhdAorICogZUZpcnN0OyB0aGUgbGFzdCBlZGdlIGluc2Vy
dGVkIGlzIGVMYXN0LT5PcHJldi4gIElmIHZPcmcgaGFzIGFueQorICogbGVmdC1nb2luZyBlZGdl
cyBhbHJlYWR5IHByb2Nlc3NlZCwgdGhlbiBlVG9wTGVmdCBtdXN0IGJlIHRoZSBlZGdlCisgKiBz
dWNoIHRoYXQgYW4gaW1hZ2luYXJ5IHVwd2FyZCB2ZXJ0aWNhbCBzZWdtZW50IGZyb20gdk9yZyB3
b3VsZCBiZQorICogY29udGFpbmVkIGJldHdlZW4gZVRvcExlZnQtPk9wcmV2IGFuZCBlVG9wTGVm
dDsgb3RoZXJ3aXNlIGVUb3BMZWZ0CisgKiBzaG91bGQgYmUgTlVMTC4KKyAqLworeworICBBY3Rp
dmVSZWdpb24gKnJlZywgKnJlZ1ByZXY7CisgIEdMVWhhbGZFZGdlICplLCAqZVByZXY7CisgIGlu
dCBmaXJzdFRpbWUgPSBUUlVFOworCisgIC8qIEluc2VydCB0aGUgbmV3IHJpZ2h0LWdvaW5nIGVk
Z2VzIGluIHRoZSBkaWN0aW9uYXJ5ICovCisgIGUgPSBlRmlyc3Q7CisgIGRvIHsKKyAgICBhc3Nl
cnQoIFZlcnRMZXEoIGUtPk9yZywgZS0+RHN0ICkpOworICAgIEFkZFJlZ2lvbkJlbG93KCB0ZXNz
LCByZWdVcCwgZS0+U3ltICk7CisgICAgZSA9IGUtPk9uZXh0OworICB9IHdoaWxlICggZSAhPSBl
TGFzdCApOworCisgIC8qIFdhbGsgKmFsbCogcmlnaHQtZ29pbmcgZWRnZXMgZnJvbSBlLT5Pcmcs
IGluIHRoZSBkaWN0aW9uYXJ5IG9yZGVyLAorICAgKiB1cGRhdGluZyB0aGUgd2luZGluZyBudW1i
ZXJzIG9mIGVhY2ggcmVnaW9uLCBhbmQgcmUtbGlua2luZyB0aGUgbWVzaAorICAgKiBlZGdlcyB0
byBtYXRjaCB0aGUgZGljdGlvbmFyeSBvcmRlcmluZyAoaWYgbmVjZXNzYXJ5KS4KKyAgICovCisg
IGlmKCBlVG9wTGVmdCA9PSBOVUxMICkgeworICAgIGVUb3BMZWZ0ID0gUmVnaW9uQmVsb3coIHJl
Z1VwICktPmVVcC0+UnByZXY7CisgIH0KKyAgcmVnUHJldiA9IHJlZ1VwOworICBlUHJldiA9IGVU
b3BMZWZ0OworICBmb3IoIDs7ICkgeworICAgIHJlZyA9IFJlZ2lvbkJlbG93KCByZWdQcmV2ICk7
CisgICAgZSA9IHJlZy0+ZVVwLT5TeW07CisgICAgaWYoIGUtPk9yZyAhPSBlUHJldi0+T3JnICkg
YnJlYWs7CisKKyAgICBpZiggZS0+T25leHQgIT0gZVByZXYgKSB7CisgICAgICAvKiBVbmxpbmsg
ZSBmcm9tIGl0cyBjdXJyZW50IHBvc2l0aW9uLCBhbmQgcmVsaW5rIGJlbG93IGVQcmV2ICovCisg
ICAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIGUtPk9wcmV2LCBlICkgKSBsb25nam1wKHRlc3Mt
PmVudiwxKTsKKyAgICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZVByZXYtPk9wcmV2LCBlICkg
KSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgICB9CisgICAgLyogQ29tcHV0ZSB0aGUgd2luZGlu
ZyBudW1iZXIgYW5kICJpbnNpZGUiIGZsYWcgZm9yIHRoZSBuZXcgcmVnaW9ucyAqLworICAgIHJl
Zy0+d2luZGluZ051bWJlciA9IHJlZ1ByZXYtPndpbmRpbmdOdW1iZXIgLSBlLT53aW5kaW5nOwor
ICAgIHJlZy0+aW5zaWRlID0gSXNXaW5kaW5nSW5zaWRlKCB0ZXNzLCByZWctPndpbmRpbmdOdW1i
ZXIgKTsKKworICAgIC8qIENoZWNrIGZvciB0d28gb3V0Z29pbmcgZWRnZXMgd2l0aCBzYW1lIHNs
b3BlIC0tIHByb2Nlc3MgdGhlc2UKKyAgICAgKiBiZWZvcmUgYW55IGludGVyc2VjdGlvbiB0ZXN0
cyAoc2VlIGV4YW1wbGUgaW4gX19nbF9jb21wdXRlSW50ZXJpb3IpLgorICAgICAqLworICAgIHJl
Z1ByZXYtPmRpcnR5ID0gVFJVRTsKKyAgICBpZiggISBmaXJzdFRpbWUgJiYgQ2hlY2tGb3JSaWdo
dFNwbGljZSggdGVzcywgcmVnUHJldiApKSB7CisgICAgICBBZGRXaW5kaW5nKCBlLCBlUHJldiAp
OworICAgICAgRGVsZXRlUmVnaW9uKCB0ZXNzLCByZWdQcmV2ICk7CisgICAgICBpZiAoICFfX2ds
X21lc2hEZWxldGUoIGVQcmV2ICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgICB9CisgICAg
Zmlyc3RUaW1lID0gRkFMU0U7CisgICAgcmVnUHJldiA9IHJlZzsKKyAgICBlUHJldiA9IGU7Cisg
IH0KKyAgcmVnUHJldi0+ZGlydHkgPSBUUlVFOworICBhc3NlcnQoIHJlZ1ByZXYtPndpbmRpbmdO
dW1iZXIgLSBlLT53aW5kaW5nID09IHJlZy0+d2luZGluZ051bWJlciApOworCisgIGlmKCBjbGVh
blVwICkgeworICAgIC8qIENoZWNrIGZvciBpbnRlcnNlY3Rpb25zIGJldHdlZW4gbmV3bHkgYWRq
YWNlbnQgZWRnZXMuICovCisgICAgV2Fsa0RpcnR5UmVnaW9ucyggdGVzcywgcmVnUHJldiApOwor
ICB9Cit9CisKKworc3RhdGljIHZvaWQgQ2FsbENvbWJpbmUoIEdMVXRlc3NlbGF0b3IgKnRlc3Ms
IEdMVXZlcnRleCAqaXNlY3QsCisJCQkgdm9pZCAqZGF0YVs0XSwgR0xmbG9hdCB3ZWlnaHRzWzRd
LCBpbnQgbmVlZGVkICkKK3sKKyAgR0xkb3VibGUgY29vcmRzWzNdOworCisgIC8qIENvcHkgY29v
cmQgZGF0YSBpbiBjYXNlIHRoZSBjYWxsYmFjayBjaGFuZ2VzIGl0LiAqLworICBjb29yZHNbMF0g
PSBpc2VjdC0+Y29vcmRzWzBdOworICBjb29yZHNbMV0gPSBpc2VjdC0+Y29vcmRzWzFdOworICBj
b29yZHNbMl0gPSBpc2VjdC0+Y29vcmRzWzJdOworCisgIGlzZWN0LT5kYXRhID0gTlVMTDsKKyAg
Q0FMTF9DT01CSU5FX09SX0NPTUJJTkVfREFUQSggY29vcmRzLCBkYXRhLCB3ZWlnaHRzLCAmaXNl
Y3QtPmRhdGEgKTsKKyAgaWYoIGlzZWN0LT5kYXRhID09IE5VTEwgKSB7CisgICAgaWYoICEgbmVl
ZGVkICkgeworICAgICAgaXNlY3QtPmRhdGEgPSBkYXRhWzBdOworICAgIH0gZWxzZSBpZiggISB0
ZXNzLT5mYXRhbEVycm9yICkgeworICAgICAgLyogVGhlIG9ubHkgd2F5IGZhdGFsIGVycm9yIGlz
IHdoZW4gdHdvIGVkZ2VzIGFyZSBmb3VuZCB0byBpbnRlcnNlY3QsCisgICAgICAgKiBidXQgdGhl
IHVzZXIgaGFzIG5vdCBwcm92aWRlZCB0aGUgY2FsbGJhY2sgbmVjZXNzYXJ5IHRvIGhhbmRsZQor
ICAgICAgICogZ2VuZXJhdGVkIGludGVyc2VjdGlvbiBwb2ludHMuCisgICAgICAgKi8KKyAgICAg
IENBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNL
ICk7CisgICAgICB0ZXNzLT5mYXRhbEVycm9yID0gVFJVRTsKKyAgICB9CisgIH0KK30KKworc3Rh
dGljIHZvaWQgU3BsaWNlTWVyZ2VWZXJ0aWNlcyggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFs
ZkVkZ2UgKmUxLAorCQkJCSBHTFVoYWxmRWRnZSAqZTIgKQorLyoKKyAqIFR3byB2ZXJ0aWNlcyB3
aXRoIGlkZW50aWFsIGNvb3JkaW5hdGVzIGFyZSBjb21iaW5lZCBpbnRvIG9uZS4KKyAqIGUxLT5P
cmcgaXMga2VwdCwgd2hpbGUgZTItPk9yZyBpcyBkaXNjYXJkZWQuCisgKi8KK3sKKyAgdm9pZCAq
ZGF0YVs0XSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworICBHTGZsb2F0IHdlaWdodHNb
NF0gPSB7IDAuNSwgMC41LCAwLjAsIDAuMCB9OworCisgIGRhdGFbMF0gPSBlMS0+T3JnLT5kYXRh
OworICBkYXRhWzFdID0gZTItPk9yZy0+ZGF0YTsKKyAgQ2FsbENvbWJpbmUoIHRlc3MsIGUxLT5P
cmcsIGRhdGEsIHdlaWdodHMsIEZBTFNFICk7CisgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZTEs
IGUyICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsgCit9CisKK3N0YXRpYyB2b2lkIFZlcnRleFdl
aWdodHMoIEdMVXZlcnRleCAqaXNlY3QsIEdMVXZlcnRleCAqb3JnLCBHTFV2ZXJ0ZXggKmRzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKndlaWdodHMgKQorLyoKKyAqIEZp
bmQgc29tZSB3ZWlnaHRzIHdoaWNoIGRlc2NyaWJlIGhvdyB0aGUgaW50ZXJzZWN0aW9uIHZlcnRl
eCBpcworICogYSBsaW5lYXIgY29tYmluYXRpb24gb2YgIm9yZyIgYW5kICJkZXN0Ii4gIEVhY2gg
b2YgdGhlIHR3byBlZGdlcworICogd2hpY2ggZ2VuZXJhdGVkICJpc2VjdCIgaXMgYWxsb2NhdGVk
IDUwJSBvZiB0aGUgd2VpZ2h0OyBlYWNoIGVkZ2UKKyAqIHNwbGl0cyB0aGUgd2VpZ2h0IGJldHdl
ZW4gaXRzIG9yZyBhbmQgZHN0IGFjY29yZGluZyB0byB0aGUKKyAqIHJlbGF0aXZlIGRpc3RhbmNl
IHRvICJpc2VjdCIuCisgKi8KK3sKKyAgR0xkb3VibGUgdDEgPSBWZXJ0TDFkaXN0KCBvcmcsIGlz
ZWN0ICk7CisgIEdMZG91YmxlIHQyID0gVmVydEwxZGlzdCggZHN0LCBpc2VjdCApOworCisgIHdl
aWdodHNbMF0gPSAwLjUgKiB0MiAvICh0MSArIHQyKTsKKyAgd2VpZ2h0c1sxXSA9IDAuNSAqIHQx
IC8gKHQxICsgdDIpOworICBpc2VjdC0+Y29vcmRzWzBdICs9IHdlaWdodHNbMF0qb3JnLT5jb29y
ZHNbMF0gKyB3ZWlnaHRzWzFdKmRzdC0+Y29vcmRzWzBdOworICBpc2VjdC0+Y29vcmRzWzFdICs9
IHdlaWdodHNbMF0qb3JnLT5jb29yZHNbMV0gKyB3ZWlnaHRzWzFdKmRzdC0+Y29vcmRzWzFdOwor
ICBpc2VjdC0+Y29vcmRzWzJdICs9IHdlaWdodHNbMF0qb3JnLT5jb29yZHNbMl0gKyB3ZWlnaHRz
WzFdKmRzdC0+Y29vcmRzWzJdOworfQorCisKK3N0YXRpYyB2b2lkIEdldEludGVyc2VjdERhdGEo
IEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVXZlcnRleCAqaXNlY3QsCisgICAgICAgR0xVdmVydGV4
ICpvcmdVcCwgR0xVdmVydGV4ICpkc3RVcCwKKyAgICAgICBHTFV2ZXJ0ZXggKm9yZ0xvLCBHTFV2
ZXJ0ZXggKmRzdExvICkKKy8qCisgKiBXZSd2ZSBjb21wdXRlZCBhIG5ldyBpbnRlcnNlY3Rpb24g
cG9pbnQsIG5vdyB3ZSBuZWVkIGEgImRhdGEiIHBvaW50ZXIKKyAqIGZyb20gdGhlIHVzZXIgc28g
dGhhdCB3ZSBjYW4gcmVmZXIgdG8gdGhpcyBuZXcgdmVydGV4IGluIHRoZQorICogcmVuZGVyaW5n
IGNhbGxiYWNrcy4KKyAqLworeworICB2b2lkICpkYXRhWzRdOworICBHTGZsb2F0IHdlaWdodHNb
NF07CisKKyAgZGF0YVswXSA9IG9yZ1VwLT5kYXRhOworICBkYXRhWzFdID0gZHN0VXAtPmRhdGE7
CisgIGRhdGFbMl0gPSBvcmdMby0+ZGF0YTsKKyAgZGF0YVszXSA9IGRzdExvLT5kYXRhOworCisg
IGlzZWN0LT5jb29yZHNbMF0gPSBpc2VjdC0+Y29vcmRzWzFdID0gaXNlY3QtPmNvb3Jkc1syXSA9
IDA7CisgIFZlcnRleFdlaWdodHMoIGlzZWN0LCBvcmdVcCwgZHN0VXAsICZ3ZWlnaHRzWzBdICk7
CisgIFZlcnRleFdlaWdodHMoIGlzZWN0LCBvcmdMbywgZHN0TG8sICZ3ZWlnaHRzWzJdICk7CisK
KyAgQ2FsbENvbWJpbmUoIHRlc3MsIGlzZWN0LCBkYXRhLCB3ZWlnaHRzLCBUUlVFICk7Cit9CisK
K3N0YXRpYyBpbnQgQ2hlY2tGb3JSaWdodFNwbGljZSggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0
aXZlUmVnaW9uICpyZWdVcCApCisvKgorICogQ2hlY2sgdGhlIHVwcGVyIGFuZCBsb3dlciBlZGdl
IG9mICJyZWdVcCIsIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICogZVVwLT5PcmcgaXMgYWJvdmUg
ZUxvLCBvciBlTG8tPk9yZyBpcyBiZWxvdyBlVXAgKGRlcGVuZGluZyBvbiB3aGljaAorICogb3Jp
Z2luIGlzIGxlZnRtb3N0KS4KKyAqCisgKiBUaGUgbWFpbiBwdXJwb3NlIGlzIHRvIHNwbGljZSBy
aWdodC1nb2luZyBlZGdlcyB3aXRoIHRoZSBzYW1lCisgKiBkZXN0IHZlcnRleCBhbmQgbmVhcmx5
IGlkZW50aWNhbCBzbG9wZXMgKGllLiB3ZSBjYW4ndCBkaXN0aW5ndWlzaAorICogdGhlIHNsb3Bl
cyBudW1lcmljYWxseSkuICBIb3dldmVyIHRoZSBzcGxpY2luZyBjYW4gYWxzbyBoZWxwIHVzCisg
KiB0byByZWNvdmVyIGZyb20gbnVtZXJpY2FsIGVycm9ycy4gIEZvciBleGFtcGxlLCBzdXBwb3Nl
IGF0IG9uZQorICogcG9pbnQgd2UgY2hlY2tlZCBlVXAgYW5kIGVMbywgYW5kIGRlY2lkZWQgdGhh
dCBlVXAtPk9yZyBpcyBiYXJlbHkKKyAqIGFib3ZlIGVMby4gIFRoZW4gbGF0ZXIsIHdlIHNwbGl0
IGVMbyBpbnRvIHR3byBlZGdlcyAoZWcuIGZyb20KKyAqIGEgc3BsaWNlIG9wZXJhdGlvbiBsaWtl
IHRoaXMgb25lKS4gIFRoaXMgY2FuIGNoYW5nZSB0aGUgcmVzdWx0IG9mCisgKiBvdXIgdGVzdCBz
byB0aGF0IG5vdyBlVXAtPk9yZyBpcyBpbmNpZGVudCB0byBlTG8sIG9yIGJhcmVseSBiZWxvdyBp
dC4KKyAqIFdlIG11c3QgY29ycmVjdCB0aGlzIGNvbmRpdGlvbiB0byBtYWludGFpbiB0aGUgZGlj
dGlvbmFyeSBpbnZhcmlhbnRzLgorICoKKyAqIE9uZSBwb3NzaWJpbGl0eSBpcyB0byBjaGVjayB0
aGVzZSBlZGdlcyBmb3IgaW50ZXJzZWN0aW9uIGFnYWluCisgKiAoaWUuIENoZWNrRm9ySW50ZXJz
ZWN0KS4gIFRoaXMgaXMgd2hhdCB3ZSBkbyBpZiBwb3NzaWJsZS4gIEhvd2V2ZXIKKyAqIENoZWNr
Rm9ySW50ZXJzZWN0IHJlcXVpcmVzIHRoYXQgdGVzcy0+ZXZlbnQgbGllcyBiZXR3ZWVuIGVVcCBh
bmQgZUxvLAorICogc28gdGhhdCBpdCBoYXMgc29tZXRoaW5nIHRvIGZhbGwgYmFjayBvbiB3aGVu
IHRoZSBpbnRlcnNlY3Rpb24KKyAqIGNhbGN1bGF0aW9uIGdpdmVzIHVzIGFuIHVudXNhYmxlIGFu
c3dlci4gIFNvLCBmb3IgdGhvc2UgY2FzZXMgd2hlcmUKKyAqIHdlIGNhbid0IGNoZWNrIGZvciBp
bnRlcnNlY3Rpb24sIHRoaXMgcm91dGluZSBmaXhlcyB0aGUgcHJvYmxlbQorICogYnkganVzdCBz
cGxpY2luZyB0aGUgb2ZmZW5kaW5nIHZlcnRleCBpbnRvIHRoZSBvdGhlciBlZGdlLgorICogVGhp
cyBpcyBhIGd1YXJhbnRlZWQgc29sdXRpb24sIG5vIG1hdHRlciBob3cgZGVnZW5lcmF0ZSB0aGlu
Z3MgZ2V0LgorICogQmFzaWNhbGx5IHRoaXMgaXMgYSBjb21iaW5hdG9yaWFsIHNvbHV0aW9uIHRv
IGEgbnVtZXJpY2FsIHByb2JsZW0uCisgKi8KK3sKKyAgQWN0aXZlUmVnaW9uICpyZWdMbyA9IFJl
Z2lvbkJlbG93KHJlZ1VwKTsKKyAgR0xVaGFsZkVkZ2UgKmVVcCA9IHJlZ1VwLT5lVXA7CisgIEdM
VWhhbGZFZGdlICplTG8gPSByZWdMby0+ZVVwOworCisgIGlmKCBWZXJ0TGVxKCBlVXAtPk9yZywg
ZUxvLT5PcmcgKSkgeworICAgIGlmKCBFZGdlU2lnbiggZUxvLT5Ec3QsIGVVcC0+T3JnLCBlTG8t
Pk9yZyApID4gMCApIHJldHVybiBGQUxTRTsKKworICAgIC8qIGVVcC0+T3JnIGFwcGVhcnMgdG8g
YmUgYmVsb3cgZUxvICovCisgICAgaWYoICEgVmVydEVxKCBlVXAtPk9yZywgZUxvLT5PcmcgKSkg
eworICAgICAgLyogU3BsaWNlIGVVcC0+T3JnIGludG8gZUxvICovCisgICAgICBpZiAoIF9fZ2xf
bWVzaFNwbGl0RWRnZSggZUxvLT5TeW0gKSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsK
KyAgICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZVVwLCBlTG8tPk9wcmV2ICkgKSBsb25nam1w
KHRlc3MtPmVudiwxKTsKKyAgICAgIHJlZ1VwLT5kaXJ0eSA9IHJlZ0xvLT5kaXJ0eSA9IFRSVUU7
CisKKyAgICB9IGVsc2UgaWYoIGVVcC0+T3JnICE9IGVMby0+T3JnICkgeworICAgICAgLyogbWVy
Z2UgdGhlIHR3byB2ZXJ0aWNlcywgZGlzY2FyZGluZyBlVXAtPk9yZyAqLworICAgICAgcHFEZWxl
dGUoIHRlc3MtPnBxLCBlVXAtPk9yZy0+cHFIYW5kbGUgKTsgLyogX19nbF9wcVNvcnREZWxldGUg
Ki8KKyAgICAgIFNwbGljZU1lcmdlVmVydGljZXMoIHRlc3MsIGVMby0+T3ByZXYsIGVVcCApOwor
ICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiggRWRnZVNpZ24oIGVVcC0+RHN0LCBlTG8tPk9yZywg
ZVVwLT5PcmcgKSA8IDAgKSByZXR1cm4gRkFMU0U7CisKKyAgICAvKiBlTG8tPk9yZyBhcHBlYXJz
IHRvIGJlIGFib3ZlIGVVcCwgc28gc3BsaWNlIGVMby0+T3JnIGludG8gZVVwICovCisgICAgUmVn
aW9uQWJvdmUocmVnVXApLT5kaXJ0eSA9IHJlZ1VwLT5kaXJ0eSA9IFRSVUU7CisgICAgaWYgKF9f
Z2xfbWVzaFNwbGl0RWRnZSggZVVwLT5TeW0gKSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwx
KTsKKyAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIGVMby0+T3ByZXYsIGVVcCApICkgbG9uZ2pt
cCh0ZXNzLT5lbnYsMSk7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBpbnQgQ2hl
Y2tGb3JMZWZ0U3BsaWNlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZ1Vw
ICkKKy8qCisgKiBDaGVjayB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2Ugb2YgInJlZ1VwIiwgdG8g
bWFrZSBzdXJlIHRoYXQgdGhlCisgKiBlVXAtPkRzdCBpcyBhYm92ZSBlTG8sIG9yIGVMby0+RHN0
IGlzIGJlbG93IGVVcCAoZGVwZW5kaW5nIG9uIHdoaWNoCisgKiBkZXN0aW5hdGlvbiBpcyByaWdo
dG1vc3QpLgorICoKKyAqIFRoZW9yZXRpY2FsbHksIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVl
LiAgSG93ZXZlciwgc3BsaXR0aW5nIGFuIGVkZ2UKKyAqIGludG8gdHdvIHBpZWNlcyBjYW4gY2hh
bmdlIHRoZSByZXN1bHRzIG9mIHByZXZpb3VzIHRlc3RzLiAgRm9yIGV4YW1wbGUsCisgKiBzdXBw
b3NlIGF0IG9uZSBwb2ludCB3ZSBjaGVja2VkIGVVcCBhbmQgZUxvLCBhbmQgZGVjaWRlZCB0aGF0
IGVVcC0+RHN0CisgKiBpcyBiYXJlbHkgYWJvdmUgZUxvLiAgVGhlbiBsYXRlciwgd2Ugc3BsaXQg
ZUxvIGludG8gdHdvIGVkZ2VzIChlZy4gZnJvbQorICogYSBzcGxpY2Ugb3BlcmF0aW9uIGxpa2Ug
dGhpcyBvbmUpLiAgVGhpcyBjYW4gY2hhbmdlIHRoZSByZXN1bHQgb2YKKyAqIHRoZSB0ZXN0IHNv
IHRoYXQgbm93IGVVcC0+RHN0IGlzIGluY2lkZW50IHRvIGVMbywgb3IgYmFyZWx5IGJlbG93IGl0
LgorICogV2UgbXVzdCBjb3JyZWN0IHRoaXMgY29uZGl0aW9uIHRvIG1haW50YWluIHRoZSBkaWN0
aW9uYXJ5IGludmFyaWFudHMKKyAqIChvdGhlcndpc2UgbmV3IGVkZ2VzIG1pZ2h0IGdldCBpbnNl
cnRlZCBpbiB0aGUgd3JvbmcgcGxhY2UgaW4gdGhlCisgKiBkaWN0aW9uYXJ5LCBhbmQgYmFkIHN0
dWZmIHdpbGwgaGFwcGVuKS4KKyAqCisgKiBXZSBmaXggdGhlIHByb2JsZW0gYnkganVzdCBzcGxp
Y2luZyB0aGUgb2ZmZW5kaW5nIHZlcnRleCBpbnRvIHRoZQorICogb3RoZXIgZWRnZS4KKyAqLwor
eworICBBY3RpdmVSZWdpb24gKnJlZ0xvID0gUmVnaW9uQmVsb3cocmVnVXApOworICBHTFVoYWxm
RWRnZSAqZVVwID0gcmVnVXAtPmVVcDsKKyAgR0xVaGFsZkVkZ2UgKmVMbyA9IHJlZ0xvLT5lVXA7
CisgIEdMVWhhbGZFZGdlICplOworCisgIGFzc2VydCggISBWZXJ0RXEoIGVVcC0+RHN0LCBlTG8t
PkRzdCApKTsKKworICBpZiggVmVydExlcSggZVVwLT5Ec3QsIGVMby0+RHN0ICkpIHsKKyAgICBp
ZiggRWRnZVNpZ24oIGVVcC0+RHN0LCBlTG8tPkRzdCwgZVVwLT5PcmcgKSA8IDAgKSByZXR1cm4g
RkFMU0U7CisKKyAgICAvKiBlTG8tPkRzdCBpcyBhYm92ZSBlVXAsIHNvIHNwbGljZSBlTG8tPkRz
dCBpbnRvIGVVcCAqLworICAgIFJlZ2lvbkFib3ZlKHJlZ1VwKS0+ZGlydHkgPSByZWdVcC0+ZGly
dHkgPSBUUlVFOworICAgIGUgPSBfX2dsX21lc2hTcGxpdEVkZ2UoIGVVcCApOworICAgIGlmIChl
ID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgIGlmICggIV9fZ2xfbWVzaFNwbGlj
ZSggZUxvLT5TeW0sIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgIGUtPkxmYWNlLT5p
bnNpZGUgPSByZWdVcC0+aW5zaWRlOworICB9IGVsc2UgeworICAgIGlmKCBFZGdlU2lnbiggZUxv
LT5Ec3QsIGVVcC0+RHN0LCBlTG8tPk9yZyApID4gMCApIHJldHVybiBGQUxTRTsKKworICAgIC8q
IGVVcC0+RHN0IGlzIGJlbG93IGVMbywgc28gc3BsaWNlIGVVcC0+RHN0IGludG8gZUxvICovCisg
ICAgcmVnVXAtPmRpcnR5ID0gcmVnTG8tPmRpcnR5ID0gVFJVRTsKKyAgICBlID0gX19nbF9tZXNo
U3BsaXRFZGdlKCBlTG8gKTsKKyAgICBpZiAoZSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwx
KTsgICAgCisgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlVXAtPkxuZXh0LCBlTG8tPlN5bSAp
ICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisgICAgZS0+UmZhY2UtPmluc2lkZSA9IHJlZ1VwLT5p
bnNpZGU7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKKworc3RhdGljIGludCBDaGVja0Zvcklu
dGVyc2VjdCggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9uICpyZWdVcCApCisvKgor
ICogQ2hlY2sgdGhlIHVwcGVyIGFuZCBsb3dlciBlZGdlcyBvZiB0aGUgZ2l2ZW4gcmVnaW9uIHRv
IHNlZSBpZgorICogdGhleSBpbnRlcnNlY3QuICBJZiBzbywgY3JlYXRlIHRoZSBpbnRlcnNlY3Rp
b24gYW5kIGFkZCBpdAorICogdG8gdGhlIGRhdGEgc3RydWN0dXJlcy4KKyAqCisgKiBSZXR1cm5z
IFRSVUUgaWYgYWRkaW5nIHRoZSBuZXcgaW50ZXJzZWN0aW9uIHJlc3VsdGVkIGluIGEgcmVjdXJz
aXZlCisgKiBjYWxsIHRvIEFkZFJpZ2h0RWRnZXMoKTsgaW4gdGhpcyBjYXNlIGFsbCAiZGlydHki
IHJlZ2lvbnMgaGF2ZSBiZWVuCisgKiBjaGVja2VkIGZvciBpbnRlcnNlY3Rpb25zLCBhbmQgcG9z
c2libHkgcmVnVXAgaGFzIGJlZW4gZGVsZXRlZC4KKyAqLworeworICBBY3RpdmVSZWdpb24gKnJl
Z0xvID0gUmVnaW9uQmVsb3cocmVnVXApOworICBHTFVoYWxmRWRnZSAqZVVwID0gcmVnVXAtPmVV
cDsKKyAgR0xVaGFsZkVkZ2UgKmVMbyA9IHJlZ0xvLT5lVXA7CisgIEdMVXZlcnRleCAqb3JnVXAg
PSBlVXAtPk9yZzsKKyAgR0xVdmVydGV4ICpvcmdMbyA9IGVMby0+T3JnOworICBHTFV2ZXJ0ZXgg
KmRzdFVwID0gZVVwLT5Ec3Q7CisgIEdMVXZlcnRleCAqZHN0TG8gPSBlTG8tPkRzdDsKKyAgR0xk
b3VibGUgdE1pblVwLCB0TWF4TG87CisgIEdMVXZlcnRleCBpc2VjdCwgKm9yZ01pbjsKKyAgR0xV
aGFsZkVkZ2UgKmU7CisKKyAgYXNzZXJ0KCAhIFZlcnRFcSggZHN0TG8sIGRzdFVwICkpOworICBh
c3NlcnQoIEVkZ2VTaWduKCBkc3RVcCwgdGVzcy0+ZXZlbnQsIG9yZ1VwICkgPD0gMCApOworICBh
c3NlcnQoIEVkZ2VTaWduKCBkc3RMbywgdGVzcy0+ZXZlbnQsIG9yZ0xvICkgPj0gMCApOworICBh
c3NlcnQoIG9yZ1VwICE9IHRlc3MtPmV2ZW50ICYmIG9yZ0xvICE9IHRlc3MtPmV2ZW50ICk7Cisg
IGFzc2VydCggISByZWdVcC0+Zml4VXBwZXJFZGdlICYmICEgcmVnTG8tPmZpeFVwcGVyRWRnZSAp
OworCisgIGlmKCBvcmdVcCA9PSBvcmdMbyApIHJldHVybiBGQUxTRTsJLyogcmlnaHQgZW5kcG9p
bnRzIGFyZSB0aGUgc2FtZSAqLworCisgIHRNaW5VcCA9IE1JTiggb3JnVXAtPnQsIGRzdFVwLT50
ICk7CisgIHRNYXhMbyA9IE1BWCggb3JnTG8tPnQsIGRzdExvLT50ICk7CisgIGlmKCB0TWluVXAg
PiB0TWF4TG8gKSByZXR1cm4gRkFMU0U7CS8qIHQgcmFuZ2VzIGRvIG5vdCBvdmVybGFwICovCisK
KyAgaWYoIFZlcnRMZXEoIG9yZ1VwLCBvcmdMbyApKSB7CisgICAgaWYoIEVkZ2VTaWduKCBkc3RM
bywgb3JnVXAsIG9yZ0xvICkgPiAwICkgcmV0dXJuIEZBTFNFOworICB9IGVsc2UgeworICAgIGlm
KCBFZGdlU2lnbiggZHN0VXAsIG9yZ0xvLCBvcmdVcCApIDwgMCApIHJldHVybiBGQUxTRTsKKyAg
fQorCisgIC8qIEF0IHRoaXMgcG9pbnQgdGhlIGVkZ2VzIGludGVyc2VjdCwgYXQgbGVhc3QgbWFy
Z2luYWxseSAqLworICBEZWJ1Z0V2ZW50KCB0ZXNzICk7CisKKyAgX19nbF9lZGdlSW50ZXJzZWN0
KCBkc3RVcCwgb3JnVXAsIGRzdExvLCBvcmdMbywgJmlzZWN0ICk7CisgIC8qIFRoZSBmb2xsb3dp
bmcgcHJvcGVydGllcyBhcmUgZ3VhcmFudGVlZDogKi8KKyAgYXNzZXJ0KCBNSU4oIG9yZ1VwLT50
LCBkc3RVcC0+dCApIDw9IGlzZWN0LnQgKTsKKyAgYXNzZXJ0KCBpc2VjdC50IDw9IE1BWCggb3Jn
TG8tPnQsIGRzdExvLT50ICkpOworICBhc3NlcnQoIE1JTiggZHN0TG8tPnMsIGRzdFVwLT5zICkg
PD0gaXNlY3QucyApOworICBhc3NlcnQoIGlzZWN0LnMgPD0gTUFYKCBvcmdMby0+cywgb3JnVXAt
PnMgKSk7CisKKyAgaWYoIFZlcnRMZXEoICZpc2VjdCwgdGVzcy0+ZXZlbnQgKSkgeworICAgIC8q
IFRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgbGllcyBzbGlnaHRseSB0byB0aGUgbGVmdCBvZiB0aGUg
c3dlZXAgbGluZSwKKyAgICAgKiBzbyBtb3ZlIGl0IHVudGlsIGl0JydzIHNsaWdodGx5IHRvIHRo
ZSByaWdodCBvZiB0aGUgc3dlZXAgbGluZS4KKyAgICAgKiAoSWYgd2UgaGFkIHBlcmZlY3QgbnVt
ZXJpY2FsIHByZWNpc2lvbiwgdGhpcyB3b3VsZCBuZXZlciBoYXBwZW4KKyAgICAgKiBpbiB0aGUg
Zmlyc3QgcGxhY2UpLiAgVGhlIGVhc2llc3QgYW5kIHNhZmVzdCB0aGluZyB0byBkbyBpcworICAg
ICAqIHJlcGxhY2UgdGhlIGludGVyc2VjdGlvbiBieSB0ZXNzLT5ldmVudC4KKyAgICAgKi8KKyAg
ICBpc2VjdC5zID0gdGVzcy0+ZXZlbnQtPnM7CisgICAgaXNlY3QudCA9IHRlc3MtPmV2ZW50LT50
OworICB9CisgIC8qIFNpbWlsYXJseSwgaWYgdGhlIGNvbXB1dGVkIGludGVyc2VjdGlvbiBsaWVz
IHRvIHRoZSByaWdodCBvZiB0aGUKKyAgICogcmlnaHRtb3N0IG9yaWdpbiAod2hpY2ggc2hvdWxk
IHJhcmVseSBoYXBwZW4pLCBpdCBjYW4gY2F1c2UKKyAgICogdW5iZWxpZXZhYmxlIGluZWZmaWNp
ZW5jeSBvbiBzdWZmaWNpZW50bHkgZGVnZW5lcmF0ZSBpbnB1dHMuCisgICAqIChJZiB5b3UgaGF2
ZSB0aGUgdGVzdCBwcm9ncmFtLCB0cnkgcnVubmluZyB0ZXN0NTQuZCB3aXRoIHRoZQorICAgKiAi
WCB6b29tIiBvcHRpb24gdHVybmVkIG9uKS4KKyAgICovCisgIG9yZ01pbiA9IFZlcnRMZXEoIG9y
Z1VwLCBvcmdMbyApID8gb3JnVXAgOiBvcmdMbzsKKyAgaWYoIFZlcnRMZXEoIG9yZ01pbiwgJmlz
ZWN0ICkpIHsKKyAgICBpc2VjdC5zID0gb3JnTWluLT5zOworICAgIGlzZWN0LnQgPSBvcmdNaW4t
PnQ7CisgIH0KKworICBpZiggVmVydEVxKCAmaXNlY3QsIG9yZ1VwICkgfHwgVmVydEVxKCAmaXNl
Y3QsIG9yZ0xvICkpIHsKKyAgICAvKiBFYXN5IGNhc2UgLS0gaW50ZXJzZWN0aW9uIGF0IG9uZSBv
ZiB0aGUgcmlnaHQgZW5kcG9pbnRzICovCisgICAgKHZvaWQpIENoZWNrRm9yUmlnaHRTcGxpY2Uo
IHRlc3MsIHJlZ1VwICk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaWYoICAgICghIFZl
cnRFcSggZHN0VXAsIHRlc3MtPmV2ZW50ICkKKwkgICYmIEVkZ2VTaWduKCBkc3RVcCwgdGVzcy0+
ZXZlbnQsICZpc2VjdCApID49IDApCisgICAgICB8fCAoISBWZXJ0RXEoIGRzdExvLCB0ZXNzLT5l
dmVudCApCisJICAmJiBFZGdlU2lnbiggZHN0TG8sIHRlc3MtPmV2ZW50LCAmaXNlY3QgKSA8PSAw
ICkpCisgIHsKKyAgICAvKiBWZXJ5IHVudXN1YWwgLS0gdGhlIG5ldyB1cHBlciBvciBsb3dlciBl
ZGdlIHdvdWxkIHBhc3Mgb24gdGhlCisgICAgICogd3Jvbmcgc2lkZSBvZiB0aGUgc3dlZXAgZXZl
bnQsIG9yIHRocm91Z2ggaXQuICBUaGlzIGNhbiBoYXBwZW4KKyAgICAgKiBkdWUgdG8gdmVyeSBz
bWFsbCBudW1lcmljYWwgZXJyb3JzIGluIHRoZSBpbnRlcnNlY3Rpb24gY2FsY3VsYXRpb24uCisg
ICAgICovCisgICAgaWYoIGRzdExvID09IHRlc3MtPmV2ZW50ICkgeworICAgICAgLyogU3BsaWNl
IGRzdExvIGludG8gZVVwLCBhbmQgcHJvY2VzcyB0aGUgbmV3IHJlZ2lvbihzKSAqLworICAgICAg
aWYgKF9fZ2xfbWVzaFNwbGl0RWRnZSggZVVwLT5TeW0gKSA9PSBOVUxMKSBsb25nam1wKHRlc3Mt
PmVudiwxKTsKKyAgICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZUxvLT5TeW0sIGVVcCApICkg
bG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisgICAgICByZWdVcCA9IFRvcExlZnRSZWdpb24oIHJlZ1Vw
ICk7CisgICAgICBpZiAocmVnVXAgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisgICAg
ICBlVXAgPSBSZWdpb25CZWxvdyhyZWdVcCktPmVVcDsKKyAgICAgIEZpbmlzaExlZnRSZWdpb25z
KCB0ZXNzLCBSZWdpb25CZWxvdyhyZWdVcCksIHJlZ0xvICk7CisgICAgICBBZGRSaWdodEVkZ2Vz
KCB0ZXNzLCByZWdVcCwgZVVwLT5PcHJldiwgZVVwLCBlVXAsIFRSVUUgKTsKKyAgICAgIHJldHVy
biBUUlVFOworICAgIH0KKyAgICBpZiggZHN0VXAgPT0gdGVzcy0+ZXZlbnQgKSB7CisgICAgICAv
KiBTcGxpY2UgZHN0VXAgaW50byBlTG8sIGFuZCBwcm9jZXNzIHRoZSBuZXcgcmVnaW9uKHMpICov
CisgICAgICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlTG8tPlN5bSApID09IE5VTEwpIGxvbmdq
bXAodGVzcy0+ZW52LDEpOworICAgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlVXAtPkxuZXh0
LCBlTG8tPk9wcmV2ICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsgCisgICAgICByZWdMbyA9IHJl
Z1VwOworICAgICAgcmVnVXAgPSBUb3BSaWdodFJlZ2lvbiggcmVnVXAgKTsKKyAgICAgIGUgPSBS
ZWdpb25CZWxvdyhyZWdVcCktPmVVcC0+UnByZXY7CisgICAgICByZWdMby0+ZVVwID0gZUxvLT5P
cHJldjsKKyAgICAgIGVMbyA9IEZpbmlzaExlZnRSZWdpb25zKCB0ZXNzLCByZWdMbywgTlVMTCAp
OworICAgICAgQWRkUmlnaHRFZGdlcyggdGVzcywgcmVnVXAsIGVMby0+T25leHQsIGVVcC0+UnBy
ZXYsIGUsIFRSVUUgKTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICAvKiBTcGVjaWFs
IGNhc2U6IGNhbGxlZCBmcm9tIENvbm5lY3RSaWdodFZlcnRleC4gIElmIGVpdGhlcgorICAgICAq
IGVkZ2UgcGFzc2VzIG9uIHRoZSB3cm9uZyBzaWRlIG9mIHRlc3MtPmV2ZW50LCBzcGxpdCBpdAor
ICAgICAqIChhbmQgd2FpdCBmb3IgQ29ubmVjdFJpZ2h0VmVydGV4IHRvIHNwbGljZSBpdCBhcHBy
b3ByaWF0ZWx5KS4KKyAgICAgKi8KKyAgICBpZiggRWRnZVNpZ24oIGRzdFVwLCB0ZXNzLT5ldmVu
dCwgJmlzZWN0ICkgPj0gMCApIHsKKyAgICAgIFJlZ2lvbkFib3ZlKHJlZ1VwKS0+ZGlydHkgPSBy
ZWdVcC0+ZGlydHkgPSBUUlVFOworICAgICAgaWYgKF9fZ2xfbWVzaFNwbGl0RWRnZSggZVVwLT5T
eW0gKSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgICAgIGVVcC0+T3JnLT5zID0g
dGVzcy0+ZXZlbnQtPnM7CisgICAgICBlVXAtPk9yZy0+dCA9IHRlc3MtPmV2ZW50LT50OworICAg
IH0KKyAgICBpZiggRWRnZVNpZ24oIGRzdExvLCB0ZXNzLT5ldmVudCwgJmlzZWN0ICkgPD0gMCAp
IHsKKyAgICAgIHJlZ1VwLT5kaXJ0eSA9IHJlZ0xvLT5kaXJ0eSA9IFRSVUU7CisgICAgICBpZiAo
X19nbF9tZXNoU3BsaXRFZGdlKCBlTG8tPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52
LDEpOworICAgICAgZUxvLT5PcmctPnMgPSB0ZXNzLT5ldmVudC0+czsKKyAgICAgIGVMby0+T3Jn
LT50ID0gdGVzcy0+ZXZlbnQtPnQ7CisgICAgfQorICAgIC8qIGxlYXZlIHRoZSByZXN0IGZvciBD
b25uZWN0UmlnaHRWZXJ0ZXggKi8KKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICAvKiBHZW5l
cmFsIGNhc2UgLS0gc3BsaXQgYm90aCBlZGdlcywgc3BsaWNlIGludG8gbmV3IHZlcnRleC4KKyAg
ICogV2hlbiB3ZSBkbyB0aGUgc3BsaWNlIG9wZXJhdGlvbiwgdGhlIG9yZGVyIG9mIHRoZSBhcmd1
bWVudHMgaXMKKyAgICogYXJiaXRyYXJ5IGFzIGZhciBhcyBjb3JyZWN0bmVzcyBnb2VzLiAgSG93
ZXZlciwgd2hlbiB0aGUgb3BlcmF0aW9uCisgICAqIGNyZWF0ZXMgYSBuZXcgZmFjZSwgdGhlIHdv
cmsgZG9uZSBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHNpemUgb2YKKyAgICogdGhlIG5ldyBmYWNl
LiAgV2UgZXhwZWN0IHRoZSBmYWNlcyBpbiB0aGUgcHJvY2Vzc2VkIHBhcnQgb2YKKyAgICogdGhl
IG1lc2ggKGllLiBlVXAtPkxmYWNlKSB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIGZhY2VzIGluIHRo
ZQorICAgKiB1bnByb2Nlc3NlZCBvcmlnaW5hbCBjb250b3VycyAod2hpY2ggd2lsbCBiZSBlTG8t
Pk9wcmV2LT5MZmFjZSkuCisgICAqLworICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlVXAtPlN5
bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICBpZiAoX19nbF9tZXNoU3BsaXRF
ZGdlKCBlTG8tPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICBpZiAoICFf
X2dsX21lc2hTcGxpY2UoIGVMby0+T3ByZXYsIGVVcCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7
CisgIGVVcC0+T3JnLT5zID0gaXNlY3QuczsKKyAgZVVwLT5PcmctPnQgPSBpc2VjdC50OworICBl
VXAtPk9yZy0+cHFIYW5kbGUgPSBwcUluc2VydCggdGVzcy0+cHEsIGVVcC0+T3JnICk7IC8qIF9f
Z2xfcHFTb3J0SW5zZXJ0ICovCisgIGlmIChlVXAtPk9yZy0+cHFIYW5kbGUgPT0gTE9OR19NQVgp
IHsKKyAgICAgcHFEZWxldGVQcmlvcml0eVEodGVzcy0+cHEpOwkvKiBfX2dsX3BxU29ydERlbGV0
ZVByaW9yaXR5USAqLworICAgICB0ZXNzLT5wcSA9IE5VTEw7CisgICAgIGxvbmdqbXAodGVzcy0+
ZW52LDEpOworICB9CisgIEdldEludGVyc2VjdERhdGEoIHRlc3MsIGVVcC0+T3JnLCBvcmdVcCwg
ZHN0VXAsIG9yZ0xvLCBkc3RMbyApOworICBSZWdpb25BYm92ZShyZWdVcCktPmRpcnR5ID0gcmVn
VXAtPmRpcnR5ID0gcmVnTG8tPmRpcnR5ID0gVFJVRTsKKyAgcmV0dXJuIEZBTFNFOworfQorCitz
dGF0aWMgdm9pZCBXYWxrRGlydHlSZWdpb25zKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVS
ZWdpb24gKnJlZ1VwICkKKy8qCisgKiBXaGVuIHRoZSB1cHBlciBvciBsb3dlciBlZGdlIG9mIGFu
eSByZWdpb24gY2hhbmdlcywgdGhlIHJlZ2lvbiBpcworICogbWFya2VkICJkaXJ0eSIuICBUaGlz
IHJvdXRpbmUgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIGRpcnR5IHJlZ2lvbnMKKyAqIGFuZCBtYWtl
cyBzdXJlIHRoYXQgdGhlIGRpY3Rpb25hcnkgaW52YXJpYW50cyBhcmUgc2F0aXNmaWVkCisgKiAo
c2VlIHRoZSBjb21tZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZmlsZSkuICBPZiBjb3Vy
c2UKKyAqIG5ldyBkaXJ0eSByZWdpb25zIGNhbiBiZSBjcmVhdGVkIGFzIHdlIG1ha2UgY2hhbmdl
cyB0byByZXN0b3JlCisgKiB0aGUgaW52YXJpYW50cy4KKyAqLworeworICBBY3RpdmVSZWdpb24g
KnJlZ0xvID0gUmVnaW9uQmVsb3cocmVnVXApOworICBHTFVoYWxmRWRnZSAqZVVwLCAqZUxvOwor
CisgIGZvciggOzsgKSB7CisgICAgLyogRmluZCB0aGUgbG93ZXN0IGRpcnR5IHJlZ2lvbiAod2Ug
d2FsayBmcm9tIHRoZSBib3R0b20gdXApLiAqLworICAgIHdoaWxlKCByZWdMby0+ZGlydHkgKSB7
CisgICAgICByZWdVcCA9IHJlZ0xvOworICAgICAgcmVnTG8gPSBSZWdpb25CZWxvdyhyZWdMbyk7
CisgICAgfQorICAgIGlmKCAhIHJlZ1VwLT5kaXJ0eSApIHsKKyAgICAgIHJlZ0xvID0gcmVnVXA7
CisgICAgICByZWdVcCA9IFJlZ2lvbkFib3ZlKCByZWdVcCApOworICAgICAgaWYoIHJlZ1VwID09
IE5VTEwgfHwgISByZWdVcC0+ZGlydHkgKSB7CisJLyogV2UndmUgd2Fsa2VkIGFsbCB0aGUgZGly
dHkgcmVnaW9ucyAqLworCXJldHVybjsKKyAgICAgIH0KKyAgICB9CisgICAgcmVnVXAtPmRpcnR5
ID0gRkFMU0U7CisgICAgZVVwID0gcmVnVXAtPmVVcDsKKyAgICBlTG8gPSByZWdMby0+ZVVwOwor
CisgICAgaWYoIGVVcC0+RHN0ICE9IGVMby0+RHN0ICkgeworICAgICAgLyogQ2hlY2sgdGhhdCB0
aGUgZWRnZSBvcmRlcmluZyBpcyBvYmV5ZWQgYXQgdGhlIERzdCB2ZXJ0aWNlcy4gKi8KKyAgICAg
IGlmKCBDaGVja0ZvckxlZnRTcGxpY2UoIHRlc3MsIHJlZ1VwICkpIHsKKworCS8qIElmIHRoZSB1
cHBlciBvciBsb3dlciBlZGdlIHdhcyBtYXJrZWQgZml4VXBwZXJFZGdlLCB0aGVuCisJICogd2Ug
bm8gbG9uZ2VyIG5lZWQgaXQgKHNpbmNlIHRoZXNlIGVkZ2VzIGFyZSBuZWVkZWQgb25seSBmb3IK
KwkgKiB2ZXJ0aWNlcyB3aGljaCBvdGhlcndpc2UgaGF2ZSBubyByaWdodC1nb2luZyBlZGdlcyku
CisJICovCisJaWYoIHJlZ0xvLT5maXhVcHBlckVkZ2UgKSB7CisJICBEZWxldGVSZWdpb24oIHRl
c3MsIHJlZ0xvICk7CisJICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGVMbyApICkgbG9uZ2ptcCh0
ZXNzLT5lbnYsMSk7CisJICByZWdMbyA9IFJlZ2lvbkJlbG93KCByZWdVcCApOworCSAgZUxvID0g
cmVnTG8tPmVVcDsKKwl9IGVsc2UgaWYoIHJlZ1VwLT5maXhVcHBlckVkZ2UgKSB7CisJICBEZWxl
dGVSZWdpb24oIHRlc3MsIHJlZ1VwICk7CisJICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGVVcCAp
ICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisJICByZWdVcCA9IFJlZ2lvbkFib3ZlKCByZWdMbyAp
OworCSAgZVVwID0gcmVnVXAtPmVVcDsKKwl9CisgICAgICB9CisgICAgfQorICAgIGlmKCBlVXAt
Pk9yZyAhPSBlTG8tPk9yZyApIHsKKyAgICAgIGlmKCAgICBlVXAtPkRzdCAhPSBlTG8tPkRzdAor
CSAgJiYgISByZWdVcC0+Zml4VXBwZXJFZGdlICYmICEgcmVnTG8tPmZpeFVwcGVyRWRnZQorICAg
ICAgICAgICYmIChlVXAtPkRzdCA9PSB0ZXNzLT5ldmVudCB8fCBlTG8tPkRzdCA9PSB0ZXNzLT5l
dmVudCkgKQorICAgICAgeworCS8qIFdoZW4gYWxsIGVsc2UgZmFpbHMgaW4gQ2hlY2tGb3JJbnRl
cnNlY3QoKSwgaXQgdXNlcyB0ZXNzLT5ldmVudAorCSAqIGFzIHRoZSBpbnRlcnNlY3Rpb24gbG9j
YXRpb24uICBUbyBtYWtlIHRoaXMgcG9zc2libGUsIGl0IHJlcXVpcmVzCisJICogdGhhdCB0ZXNz
LT5ldmVudCBsaWUgYmV0d2VlbiB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2VzLCBhbmQgYWxzbwor
CSAqIHRoYXQgbmVpdGhlciBvZiB0aGVzZSBpcyBtYXJrZWQgZml4VXBwZXJFZGdlIChzaW5jZSBp
biB0aGUgd29yc3QKKwkgKiBjYXNlIGl0IG1pZ2h0IHNwbGljZSBvbmUgb2YgdGhlc2UgZWRnZXMg
aW50byB0ZXNzLT5ldmVudCwgYW5kCisJICogdmlvbGF0ZSB0aGUgaW52YXJpYW50IHRoYXQgZml4
YWJsZSBlZGdlcyBhcmUgdGhlIG9ubHkgcmlnaHQtZ29pbmcKKwkgKiBlZGdlIGZyb20gdGhlaXIg
YXNzb2NpYXRlZCB2ZXJ0ZXgpLgorICAgICAgICAgKi8KKwlpZiggQ2hlY2tGb3JJbnRlcnNlY3Qo
IHRlc3MsIHJlZ1VwICkpIHsKKwkgIC8qIFdhbGtEaXJ0eVJlZ2lvbnMoKSB3YXMgY2FsbGVkIHJl
Y3Vyc2l2ZWx5OyB3ZSdyZSBkb25lICovCisJICByZXR1cm47CisJfQorICAgICAgfSBlbHNlIHsK
KwkvKiBFdmVuIHRob3VnaCB3ZSBjYW4ndCB1c2UgQ2hlY2tGb3JJbnRlcnNlY3QoKSwgdGhlIE9y
ZyB2ZXJ0aWNlcworCSAqIG1heSB2aW9sYXRlIHRoZSBkaWN0aW9uYXJ5IGVkZ2Ugb3JkZXJpbmcu
ICBDaGVjayBhbmQgY29ycmVjdCB0aGlzLgorCSAqLworCSh2b2lkKSBDaGVja0ZvclJpZ2h0U3Bs
aWNlKCB0ZXNzLCByZWdVcCApOworICAgICAgfQorICAgIH0KKyAgICBpZiggZVVwLT5PcmcgPT0g
ZUxvLT5PcmcgJiYgZVVwLT5Ec3QgPT0gZUxvLT5Ec3QgKSB7CisgICAgICAvKiBBIGRlZ2VuZXJh
dGUgbG9vcCBjb25zaXN0aW5nIG9mIG9ubHkgdHdvIGVkZ2VzIC0tIGRlbGV0ZSBpdC4gKi8KKyAg
ICAgIEFkZFdpbmRpbmcoIGVMbywgZVVwICk7CisgICAgICBEZWxldGVSZWdpb24oIHRlc3MsIHJl
Z1VwICk7CisgICAgICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGVVcCApICkgbG9uZ2ptcCh0ZXNz
LT5lbnYsMSk7CisgICAgICByZWdVcCA9IFJlZ2lvbkFib3ZlKCByZWdMbyApOworICAgIH0KKyAg
fQorfQorCisKK3N0YXRpYyB2b2lkIENvbm5lY3RSaWdodFZlcnRleCggR0xVdGVzc2VsYXRvciAq
dGVzcywgQWN0aXZlUmVnaW9uICpyZWdVcCwKKwkJCSAgICAgICAgR0xVaGFsZkVkZ2UgKmVCb3R0
b21MZWZ0ICkKKy8qCisgKiBQdXJwb3NlOiBjb25uZWN0IGEgInJpZ2h0IiB2ZXJ0ZXggdkV2ZW50
IChvbmUgd2hlcmUgYWxsIGVkZ2VzIGdvIGxlZnQpCisgKiB0byB0aGUgdW5wcm9jZXNzZWQgcG9y
dGlvbiBvZiB0aGUgbWVzaC4gIFNpbmNlIHRoZXJlIGFyZSBubyByaWdodC1nb2luZworICogZWRn
ZXMsIHR3byByZWdpb25zIChvbmUgYWJvdmUgdkV2ZW50IGFuZCBvbmUgYmVsb3cpIGFyZSBiZWlu
ZyBtZXJnZWQKKyAqIGludG8gb25lLiAgInJlZ1VwIiBpcyB0aGUgdXBwZXIgb2YgdGhlc2UgdHdv
IHJlZ2lvbnMuCisgKgorICogVGhlcmUgYXJlIHR3byByZWFzb25zIGZvciBkb2luZyB0aGlzIChh
ZGRpbmcgYSByaWdodC1nb2luZyBlZGdlKToKKyAqICAtIGlmIHRoZSB0d28gcmVnaW9ucyBiZWlu
ZyBtZXJnZWQgYXJlICJpbnNpZGUiLCB3ZSBtdXN0IGFkZCBhbiBlZGdlCisgKiAgICB0byBrZWVw
IHRoZW0gc2VwYXJhdGVkICh0aGUgY29tYmluZWQgcmVnaW9uIHdvdWxkIG5vdCBiZSBtb25vdG9u
ZSkuCisgKiAgLSBpbiBhbnkgY2FzZSwgd2UgbXVzdCBsZWF2ZSBzb21lIHJlY29yZCBvZiB2RXZl
bnQgaW4gdGhlIGRpY3Rpb25hcnksCisgKiAgICBzbyB0aGF0IHdlIGNhbiBtZXJnZSB2RXZlbnQg
d2l0aCBmZWF0dXJlcyB0aGF0IHdlIGhhdmUgbm90IHNlZW4geWV0LgorICogICAgRm9yIGV4YW1w
bGUsIG1heWJlIHRoZXJlIGlzIGEgdmVydGljYWwgZWRnZSB3aGljaCBwYXNzZXMganVzdCB0bwor
ICogICAgdGhlIHJpZ2h0IG9mIHZFdmVudDsgd2Ugd291bGQgbGlrZSB0byBzcGxpY2UgdkV2ZW50
IGludG8gdGhpcyBlZGdlLgorICoKKyAqIEhvd2V2ZXIsIHdlIGRvbid0IHdhbnQgdG8gY29ubmVj
dCB2RXZlbnQgdG8ganVzdCBhbnkgdmVydGV4LiAgV2UgZG9uJyd0CisgKiB3YW50IHRoZSBuZXcg
ZWRnZSB0byBjcm9zcyBhbnkgb3RoZXIgZWRnZXM7IG90aGVyd2lzZSB3ZSB3aWxsIGNyZWF0ZQor
ICogaW50ZXJzZWN0aW9uIHZlcnRpY2VzIGV2ZW4gd2hlbiB0aGUgaW5wdXQgZGF0YSBoYWQgbm8g
c2VsZi1pbnRlcnNlY3Rpb25zLgorICogKFRoaXMgaXMgYSBiYWQgdGhpbmc7IGlmIHRoZSB1c2Vy
J3MgaW5wdXQgZGF0YSBoYXMgbm8gaW50ZXJzZWN0aW9ucywKKyAqIHdlIGRvbid0IHdhbnQgdG8g
Z2VuZXJhdGUgYW55IGZhbHNlIGludGVyc2VjdGlvbnMgb3Vyc2VsdmVzLikKKyAqCisgKiBPdXIg
ZXZlbnR1YWwgZ29hbCBpcyB0byBjb25uZWN0IHZFdmVudCB0byB0aGUgbGVmdG1vc3QgdW5wcm9j
ZXNzZWQKKyAqIHZlcnRleCBvZiB0aGUgY29tYmluZWQgcmVnaW9uICh0aGUgdW5pb24gb2YgcmVn
VXAgYW5kIHJlZ0xvKS4KKyAqIEJ1dCBiZWNhdXNlIG9mIHVuc2VlbiB2ZXJ0aWNlcyB3aXRoIGFs
bCByaWdodC1nb2luZyBlZGdlcywgYW5kIGFsc28KKyAqIG5ldyB2ZXJ0aWNlcyB3aGljaCBtYXkg
YmUgY3JlYXRlZCBieSBlZGdlIGludGVyc2VjdGlvbnMsIHdlIGRvbicndAorICoga25vdyB3aGVy
ZSB0aGF0IGxlZnRtb3N0IHVucHJvY2Vzc2VkIHZlcnRleCBpcy4gIEluIHRoZSBtZWFudGltZSwg
d2UKKyAqIGNvbm5lY3QgdkV2ZW50IHRvIHRoZSBjbG9zZXN0IHZlcnRleCBvZiBlaXRoZXIgY2hh
aW4sIGFuZCBtYXJrIHRoZSByZWdpb24KKyAqIGFzICJmaXhVcHBlckVkZ2UiLiAgVGhpcyBmbGFn
IHNheXMgdG8gZGVsZXRlIGFuZCByZWNvbm5lY3QgdGhpcyBlZGdlCisgKiB0byB0aGUgbmV4dCBw
cm9jZXNzZWQgdmVydGV4IG9uIHRoZSBib3VuZGFyeSBvZiB0aGUgY29tYmluZWQgcmVnaW9uLgor
ICogUXVpdGUgcG9zc2libHkgdGhlIHZlcnRleCB3ZSBjb25uZWN0ZWQgdG8gd2lsbCB0dXJuIG91
dCB0byBiZSB0aGUKKyAqIGNsb3Nlc3Qgb25lLCBpbiB3aGljaCBjYXNlIHdlIHdvbicndCBuZWVk
IHRvIG1ha2UgYW55IGNoYW5nZXMuCisgKi8KK3sKKyAgR0xVaGFsZkVkZ2UgKmVOZXc7CisgIEdM
VWhhbGZFZGdlICplVG9wTGVmdCA9IGVCb3R0b21MZWZ0LT5PbmV4dDsKKyAgQWN0aXZlUmVnaW9u
ICpyZWdMbyA9IFJlZ2lvbkJlbG93KHJlZ1VwKTsKKyAgR0xVaGFsZkVkZ2UgKmVVcCA9IHJlZ1Vw
LT5lVXA7CisgIEdMVWhhbGZFZGdlICplTG8gPSByZWdMby0+ZVVwOworICBpbnQgZGVnZW5lcmF0
ZSA9IEZBTFNFOworCisgIGlmKCBlVXAtPkRzdCAhPSBlTG8tPkRzdCApIHsKKyAgICAodm9pZCkg
Q2hlY2tGb3JJbnRlcnNlY3QoIHRlc3MsIHJlZ1VwICk7CisgIH0KKworICAvKiBQb3NzaWJsZSBu
ZXcgZGVnZW5lcmFjaWVzOiB1cHBlciBvciBsb3dlciBlZGdlIG9mIHJlZ1VwIG1heSBwYXNzCisg
ICAqIHRocm91Z2ggdkV2ZW50LCBvciBtYXkgY29pbmNpZGUgd2l0aCBuZXcgaW50ZXJzZWN0aW9u
IHZlcnRleAorICAgKi8KKyAgaWYoIFZlcnRFcSggZVVwLT5PcmcsIHRlc3MtPmV2ZW50ICkpIHsK
KyAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIGVUb3BMZWZ0LT5PcHJldiwgZVVwICkgKSBsb25n
am1wKHRlc3MtPmVudiwxKTsKKyAgICByZWdVcCA9IFRvcExlZnRSZWdpb24oIHJlZ1VwICk7Cisg
ICAgaWYgKHJlZ1VwID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgIGVUb3BMZWZ0
ID0gUmVnaW9uQmVsb3coIHJlZ1VwICktPmVVcDsKKyAgICBGaW5pc2hMZWZ0UmVnaW9ucyggdGVz
cywgUmVnaW9uQmVsb3cocmVnVXApLCByZWdMbyApOworICAgIGRlZ2VuZXJhdGUgPSBUUlVFOwor
ICB9CisgIGlmKCBWZXJ0RXEoIGVMby0+T3JnLCB0ZXNzLT5ldmVudCApKSB7CisgICAgaWYgKCAh
X19nbF9tZXNoU3BsaWNlKCBlQm90dG9tTGVmdCwgZUxvLT5PcHJldiApICkgbG9uZ2ptcCh0ZXNz
LT5lbnYsMSk7CisgICAgZUJvdHRvbUxlZnQgPSBGaW5pc2hMZWZ0UmVnaW9ucyggdGVzcywgcmVn
TG8sIE5VTEwgKTsKKyAgICBkZWdlbmVyYXRlID0gVFJVRTsKKyAgfQorICBpZiggZGVnZW5lcmF0
ZSApIHsKKyAgICBBZGRSaWdodEVkZ2VzKCB0ZXNzLCByZWdVcCwgZUJvdHRvbUxlZnQtPk9uZXh0
LCBlVG9wTGVmdCwgZVRvcExlZnQsIFRSVUUgKTsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBO
b24tZGVnZW5lcmF0ZSBzaXR1YXRpb24gLS0gbmVlZCB0byBhZGQgYSB0ZW1wb3JhcnksIGZpeGFi
bGUgZWRnZS4KKyAgICogQ29ubmVjdCB0byB0aGUgY2xvc2VyIG9mIGVMby0+T3JnLCBlVXAtPk9y
Zy4KKyAgICovCisgIGlmKCBWZXJ0TGVxKCBlTG8tPk9yZywgZVVwLT5PcmcgKSkgeworICAgIGVO
ZXcgPSBlTG8tPk9wcmV2OworICB9IGVsc2UgeworICAgIGVOZXcgPSBlVXA7CisgIH0KKyAgZU5l
dyA9IF9fZ2xfbWVzaENvbm5lY3QoIGVCb3R0b21MZWZ0LT5McHJldiwgZU5ldyApOworICBpZiAo
ZU5ldyA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKworICAvKiBQcmV2ZW50IGNsZWFu
dXAsIG90aGVyd2lzZSBlTmV3IG1pZ2h0IGRpc2FwcGVhciBiZWZvcmUgd2UndmUgZXZlbgorICAg
KiBoYWQgYSBjaGFuY2UgdG8gbWFyayBpdCBhcyBhIHRlbXBvcmFyeSBlZGdlLgorICAgKi8KKyAg
QWRkUmlnaHRFZGdlcyggdGVzcywgcmVnVXAsIGVOZXcsIGVOZXctPk9uZXh0LCBlTmV3LT5PbmV4
dCwgRkFMU0UgKTsKKyAgZU5ldy0+U3ltLT5hY3RpdmVSZWdpb24tPmZpeFVwcGVyRWRnZSA9IFRS
VUU7CisgIFdhbGtEaXJ0eVJlZ2lvbnMoIHRlc3MsIHJlZ1VwICk7Cit9CisKKy8qIEJlY2F1c2Ug
dmVydGljZXMgYXQgZXhhY3RseSB0aGUgc2FtZSBsb2NhdGlvbiBhcmUgbWVyZ2VkIHRvZ2V0aGVy
CisgKiBiZWZvcmUgd2UgcHJvY2VzcyB0aGUgc3dlZXAgZXZlbnQsIHNvbWUgZGVnZW5lcmF0ZSBj
YXNlcyBjYW4ndCBvY2N1ci4KKyAqIEhvd2V2ZXIgaWYgc29tZW9uZSBldmVudHVhbGx5IG1ha2Vz
IHRoZSBtb2RpZmljYXRpb25zIHJlcXVpcmVkIHRvCisgKiBtZXJnZSBmZWF0dXJlcyB3aGljaCBh
cmUgY2xvc2UgdG9nZXRoZXIsIHRoZSBjYXNlcyBiZWxvdyBtYXJrZWQKKyAqIFRPTEVSQU5DRV9O
T05aRVJPIHdpbGwgYmUgdXNlZnVsLiAgVGhleSB3ZXJlIGRlYnVnZ2VkIGJlZm9yZSB0aGUKKyAq
IGNvZGUgdG8gbWVyZ2UgaWRlbnRpY2FsIHZlcnRpY2VzIGluIHRoZSBtYWluIGxvb3Agd2FzIGFk
ZGVkLgorICovCisjZGVmaW5lIFRPTEVSQU5DRV9OT05aRVJPCUZBTFNFCisKK3N0YXRpYyB2b2lk
IENvbm5lY3RMZWZ0RGVnZW5lcmF0ZSggR0xVdGVzc2VsYXRvciAqdGVzcywKKwkJCQkgICBBY3Rp
dmVSZWdpb24gKnJlZ1VwLCBHTFV2ZXJ0ZXggKnZFdmVudCApCisvKgorICogVGhlIGV2ZW50IHZl
cnRleCBsaWVzIGV4YWN0eSBvbiBhbiBhbHJlYWR5LXByb2Nlc3NlZCBlZGdlIG9yIHZlcnRleC4K
KyAqIEFkZGluZyB0aGUgbmV3IHZlcnRleCBpbnZvbHZlcyBzcGxpY2luZyBpdCBpbnRvIHRoZSBh
bHJlYWR5LXByb2Nlc3NlZAorICogcGFydCBvZiB0aGUgbWVzaC4KKyAqLworeworICBHTFVoYWxm
RWRnZSAqZSwgKmVUb3BMZWZ0LCAqZVRvcFJpZ2h0LCAqZUxhc3Q7CisgIEFjdGl2ZVJlZ2lvbiAq
cmVnOworCisgIGUgPSByZWdVcC0+ZVVwOworICBpZiggVmVydEVxKCBlLT5PcmcsIHZFdmVudCAp
KSB7CisgICAgLyogZS0+T3JnIGlzIGFuIHVucHJvY2Vzc2VkIHZlcnRleCAtIGp1c3QgY29tYmlu
ZSB0aGVtLCBhbmQgd2FpdAorICAgICAqIGZvciBlLT5PcmcgdG8gYmUgcHVsbGVkIGZyb20gdGhl
IHF1ZXVlCisgICAgICovCisgICAgYXNzZXJ0KCBUT0xFUkFOQ0VfTk9OWkVSTyApOworICAgIFNw
bGljZU1lcmdlVmVydGljZXMoIHRlc3MsIGUsIHZFdmVudC0+YW5FZGdlICk7CisgICAgcmV0dXJu
OworICB9CisgIAorICBpZiggISBWZXJ0RXEoIGUtPkRzdCwgdkV2ZW50ICkpIHsKKyAgICAvKiBH
ZW5lcmFsIGNhc2UgLS0gc3BsaWNlIHZFdmVudCBpbnRvIGVkZ2UgZSB3aGljaCBwYXNzZXMgdGhy
b3VnaCBpdCAqLworICAgIGlmIChfX2dsX21lc2hTcGxpdEVkZ2UoIGUtPlN5bSApID09IE5VTEwp
IGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgIGlmKCByZWdVcC0+Zml4VXBwZXJFZGdlICkgewor
ICAgICAgLyogVGhpcyBlZGdlIHdhcyBmaXhhYmxlIC0tIGRlbGV0ZSB1bnVzZWQgcG9ydGlvbiBv
ZiBvcmlnaW5hbCBlZGdlICovCisgICAgICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGUtPk9uZXh0
ICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgICAgIHJlZ1VwLT5maXhVcHBlckVkZ2UgPSBG
QUxTRTsKKyAgICB9CisgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCB2RXZlbnQtPmFuRWRnZSwg
ZSApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisgICAgU3dlZXBFdmVudCggdGVzcywgdkV2ZW50
ICk7CS8qIHJlY3Vyc2UgKi8KKyAgICByZXR1cm47CisgIH0KKworICAvKiB2RXZlbnQgY29pbmNp
ZGVzIHdpdGggZS0+RHN0LCB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZC4KKyAgICog
U3BsaWNlIGluIHRoZSBhZGRpdGlvbmFsIHJpZ2h0LWdvaW5nIGVkZ2VzLgorICAgKi8KKyAgYXNz
ZXJ0KCBUT0xFUkFOQ0VfTk9OWkVSTyApOworICByZWdVcCA9IFRvcFJpZ2h0UmVnaW9uKCByZWdV
cCApOworICByZWcgPSBSZWdpb25CZWxvdyggcmVnVXAgKTsKKyAgZVRvcFJpZ2h0ID0gcmVnLT5l
VXAtPlN5bTsKKyAgZVRvcExlZnQgPSBlTGFzdCA9IGVUb3BSaWdodC0+T25leHQ7CisgIGlmKCBy
ZWctPmZpeFVwcGVyRWRnZSApIHsKKyAgICAvKiBIZXJlIGUtPkRzdCBoYXMgb25seSBhIHNpbmds
ZSBmaXhhYmxlIGVkZ2UgZ29pbmcgcmlnaHQuCisgICAgICogV2UgY2FuIGRlbGV0ZSBpdCBzaW5j
ZSBub3cgd2UgaGF2ZSBzb21lIHJlYWwgcmlnaHQtZ29pbmcgZWRnZXMuCisgICAgICovCisgICAg
YXNzZXJ0KCBlVG9wTGVmdCAhPSBlVG9wUmlnaHQgKTsgICAvKiB0aGVyZSBhcmUgc29tZSBsZWZ0
IGVkZ2VzIHRvbyAqLworICAgIERlbGV0ZVJlZ2lvbiggdGVzcywgcmVnICk7CisgICAgaWYgKCAh
X19nbF9tZXNoRGVsZXRlKCBlVG9wUmlnaHQgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAg
IGVUb3BSaWdodCA9IGVUb3BMZWZ0LT5PcHJldjsKKyAgfQorICBpZiAoICFfX2dsX21lc2hTcGxp
Y2UoIHZFdmVudC0+YW5FZGdlLCBlVG9wUmlnaHQgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwor
ICBpZiggISBFZGdlR29lc0xlZnQoIGVUb3BMZWZ0ICkpIHsKKyAgICAvKiBlLT5Ec3QgaGFkIG5v
IGxlZnQtZ29pbmcgZWRnZXMgLS0gaW5kaWNhdGUgdGhpcyB0byBBZGRSaWdodEVkZ2VzKCkgKi8K
KyAgICBlVG9wTGVmdCA9IE5VTEw7CisgIH0KKyAgQWRkUmlnaHRFZGdlcyggdGVzcywgcmVnVXAs
IGVUb3BSaWdodC0+T25leHQsIGVMYXN0LCBlVG9wTGVmdCwgVFJVRSApOworfQorCisKK3N0YXRp
YyB2b2lkIENvbm5lY3RMZWZ0VmVydGV4KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFV2ZXJ0ZXgg
KnZFdmVudCApCisvKgorICogUHVycG9zZTogY29ubmVjdCBhICJsZWZ0IiB2ZXJ0ZXggKG9uZSB3
aGVyZSBib3RoIGVkZ2VzIGdvIHJpZ2h0KQorICogdG8gdGhlIHByb2Nlc3NlZCBwb3J0aW9uIG9m
IHRoZSBtZXNoLiAgTGV0IFIgYmUgdGhlIGFjdGl2ZSByZWdpb24KKyAqIGNvbnRhaW5pbmcgdkV2
ZW50LCBhbmQgbGV0IFUgYW5kIEwgYmUgdGhlIHVwcGVyIGFuZCBsb3dlciBlZGdlCisgKiBjaGFp
bnMgb2YgUi4gIFRoZXJlIGFyZSB0d28gcG9zc2liaWxpdGllczoKKyAqCisgKiAtIHRoZSBub3Jt
YWwgY2FzZTogc3BsaXQgUiBpbnRvIHR3byByZWdpb25zLCBieSBjb25uZWN0aW5nIHZFdmVudCB0
bworICogICB0aGUgcmlnaHRtb3N0IHZlcnRleCBvZiBVIG9yIEwgbHlpbmcgdG8gdGhlIGxlZnQg
b2YgdGhlIHN3ZWVwIGxpbmUKKyAqCisgKiAtIHRoZSBkZWdlbmVyYXRlIGNhc2U6IGlmIHZFdmVu
dCBpcyBjbG9zZSBlbm91Z2ggdG8gVSBvciBMLCB3ZQorICogICBtZXJnZSB2RXZlbnQgaW50byB0
aGF0IGVkZ2UgY2hhaW4uICBUaGUgc3ViY2FzZXMgYXJlOgorICoJLSBtZXJnaW5nIHdpdGggdGhl
IHJpZ2h0bW9zdCB2ZXJ0ZXggb2YgVSBvciBMCisgKgktIG1lcmdpbmcgd2l0aCB0aGUgYWN0aXZl
IGVkZ2Ugb2YgVSBvciBMCisgKgktIG1lcmdpbmcgd2l0aCBhbiBhbHJlYWR5LXByb2Nlc3NlZCBw
b3J0aW9uIG9mIFUgb3IgTAorICovCit7CisgIEFjdGl2ZVJlZ2lvbiAqcmVnVXAsICpyZWdMbywg
KnJlZzsKKyAgR0xVaGFsZkVkZ2UgKmVVcCwgKmVMbywgKmVOZXc7CisgIEFjdGl2ZVJlZ2lvbiB0
bXA7CisKKyAgLyogYXNzZXJ0KCB2RXZlbnQtPmFuRWRnZS0+T25leHQtPk9uZXh0ID09IHZFdmVu
dC0+YW5FZGdlICk7ICovCisKKyAgLyogR2V0IGEgcG9pbnRlciB0byB0aGUgYWN0aXZlIHJlZ2lv
biBjb250YWluaW5nIHZFdmVudCAqLworICB0bXAuZVVwID0gdkV2ZW50LT5hbkVkZ2UtPlN5bTsK
KyAgLyogX19HTF9ESUNUTElTVEtFWSAqLyAvKiBfX2dsX2RpY3RMaXN0U2VhcmNoICovCisgIHJl
Z1VwID0gKEFjdGl2ZVJlZ2lvbiAqKWRpY3RLZXkoIGRpY3RTZWFyY2goIHRlc3MtPmRpY3QsICZ0
bXAgKSk7CisgIHJlZ0xvID0gUmVnaW9uQmVsb3coIHJlZ1VwICk7CisgIGVVcCA9IHJlZ1VwLT5l
VXA7CisgIGVMbyA9IHJlZ0xvLT5lVXA7CisKKyAgLyogVHJ5IG1lcmdpbmcgd2l0aCBVIG9yIEwg
Zmlyc3QgKi8KKyAgaWYoIEVkZ2VTaWduKCBlVXAtPkRzdCwgdkV2ZW50LCBlVXAtPk9yZyApID09
IDAgKSB7CisgICAgQ29ubmVjdExlZnREZWdlbmVyYXRlKCB0ZXNzLCByZWdVcCwgdkV2ZW50ICk7
CisgICAgcmV0dXJuOworICB9CisKKyAgLyogQ29ubmVjdCB2RXZlbnQgdG8gcmlnaHRtb3N0IHBy
b2Nlc3NlZCB2ZXJ0ZXggb2YgZWl0aGVyIGNoYWluLgorICAgKiBlLT5Ec3QgaXMgdGhlIHZlcnRl
eCB0aGF0IHdlIHdpbGwgY29ubmVjdCB0byB2RXZlbnQuCisgICAqLworICByZWcgPSBWZXJ0TGVx
KCBlTG8tPkRzdCwgZVVwLT5Ec3QgKSA/IHJlZ1VwIDogcmVnTG87CisKKyAgaWYoIHJlZ1VwLT5p
bnNpZGUgfHwgcmVnLT5maXhVcHBlckVkZ2UpIHsKKyAgICBpZiggcmVnID09IHJlZ1VwICkgewor
ICAgICAgZU5ldyA9IF9fZ2xfbWVzaENvbm5lY3QoIHZFdmVudC0+YW5FZGdlLT5TeW0sIGVVcC0+
TG5leHQgKTsKKyAgICAgIGlmIChlTmV3ID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwor
ICAgIH0gZWxzZSB7CisgICAgICBHTFVoYWxmRWRnZSAqdGVtcEhhbGZFZGdlPSBfX2dsX21lc2hD
b25uZWN0KCBlTG8tPkRuZXh0LCB2RXZlbnQtPmFuRWRnZSk7CisgICAgICBpZiAodGVtcEhhbGZF
ZGdlID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOworCisgICAgICBlTmV3ID0gdGVtcEhh
bGZFZGdlLT5TeW07CisgICAgfQorICAgIGlmKCByZWctPmZpeFVwcGVyRWRnZSApIHsKKyAgICAg
IGlmICggIUZpeFVwcGVyRWRnZSggcmVnLCBlTmV3ICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsK
KyAgICB9IGVsc2UgeworICAgICAgQ29tcHV0ZVdpbmRpbmcoIHRlc3MsIEFkZFJlZ2lvbkJlbG93
KCB0ZXNzLCByZWdVcCwgZU5ldyApKTsKKyAgICB9CisgICAgU3dlZXBFdmVudCggdGVzcywgdkV2
ZW50ICk7CisgIH0gZWxzZSB7CisgICAgLyogVGhlIG5ldyB2ZXJ0ZXggaXMgaW4gYSByZWdpb24g
d2hpY2ggZG9lcyBub3QgYmVsb25nIHRvIHRoZSBwb2x5Z29uLgorICAgICAqIFdlIGRvbicndCBu
ZWVkIHRvIGNvbm5lY3QgdGhpcyB2ZXJ0ZXggdG8gdGhlIHJlc3Qgb2YgdGhlIG1lc2guCisgICAg
ICovCisgICAgQWRkUmlnaHRFZGdlcyggdGVzcywgcmVnVXAsIHZFdmVudC0+YW5FZGdlLCB2RXZl
bnQtPmFuRWRnZSwgTlVMTCwgVFJVRSApOworICB9Cit9CisKKworc3RhdGljIHZvaWQgU3dlZXBF
dmVudCggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVdmVydGV4ICp2RXZlbnQgKQorLyoKKyAqIERv
ZXMgZXZlcnl0aGluZyBuZWNlc3Nhcnkgd2hlbiB0aGUgc3dlZXAgbGluZSBjcm9zc2VzIGEgdmVy
dGV4LgorICogVXBkYXRlcyB0aGUgbWVzaCBhbmQgdGhlIGVkZ2UgZGljdGlvbmFyeS4KKyAqLwor
eworICBBY3RpdmVSZWdpb24gKnJlZ1VwLCAqcmVnOworICBHTFVoYWxmRWRnZSAqZSwgKmVUb3BM
ZWZ0LCAqZUJvdHRvbUxlZnQ7CisKKyAgdGVzcy0+ZXZlbnQgPSB2RXZlbnQ7CQkvKiBmb3IgYWNj
ZXNzIGluIEVkZ2VMZXEoKSAqLworICBEZWJ1Z0V2ZW50KCB0ZXNzICk7CisgIAorICAvKiBDaGVj
ayBpZiB0aGlzIHZlcnRleCBpcyB0aGUgcmlnaHQgZW5kcG9pbnQgb2YgYW4gZWRnZSB0aGF0IGlz
CisgICAqIGFscmVhZHkgaW4gdGhlIGRpY3Rpb25hcnkuICBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qg
bmVlZCB0byB3YXN0ZQorICAgKiB0aW1lIHNlYXJjaGluZyBmb3IgdGhlIGxvY2F0aW9uIHRvIGlu
c2VydCBuZXcgZWRnZXMuCisgICAqLworICBlID0gdkV2ZW50LT5hbkVkZ2U7CisgIHdoaWxlKCBl
LT5hY3RpdmVSZWdpb24gPT0gTlVMTCApIHsKKyAgICBlID0gZS0+T25leHQ7CisgICAgaWYoIGUg
PT0gdkV2ZW50LT5hbkVkZ2UgKSB7CisgICAgICAvKiBBbGwgZWRnZXMgZ28gcmlnaHQgLS0gbm90
IGluY2lkZW50IHRvIGFueSBwcm9jZXNzZWQgZWRnZXMgKi8KKyAgICAgIENvbm5lY3RMZWZ0VmVy
dGV4KCB0ZXNzLCB2RXZlbnQgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICAvKiBQ
cm9jZXNzaW5nIGNvbnNpc3RzIG9mIHR3byBwaGFzZXM6IGZpcnN0IHdlICJmaW5pc2giIGFsbCB0
aGUKKyAgICogYWN0aXZlIHJlZ2lvbnMgd2hlcmUgYm90aCB0aGUgdXBwZXIgYW5kIGxvd2VyIGVk
Z2VzIHRlcm1pbmF0ZQorICAgKiBhdCB2RXZlbnQgKGllLiB2RXZlbnQgaXMgY2xvc2luZyBvZmYg
dGhlc2UgcmVnaW9ucykuCisgICAqIFdlIG1hcmsgdGhlc2UgZmFjZXMgImluc2lkZSIgb3IgIm91
dHNpZGUiIHRoZSBwb2x5Z29uIGFjY29yZGluZworICAgKiB0byB0aGVpciB3aW5kaW5nIG51bWJl
ciwgYW5kIGRlbGV0ZSB0aGUgZWRnZXMgZnJvbSB0aGUgZGljdGlvbmFyeS4KKyAgICogVGhpcyB0
YWtlcyBjYXJlIG9mIGFsbCB0aGUgbGVmdC1nb2luZyBlZGdlcyBmcm9tIHZFdmVudC4KKyAgICov
CisgIHJlZ1VwID0gVG9wTGVmdFJlZ2lvbiggZS0+YWN0aXZlUmVnaW9uICk7CisgIGlmIChyZWdV
cCA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgcmVnID0gUmVnaW9uQmVsb3coIHJl
Z1VwICk7CisgIGVUb3BMZWZ0ID0gcmVnLT5lVXA7CisgIGVCb3R0b21MZWZ0ID0gRmluaXNoTGVm
dFJlZ2lvbnMoIHRlc3MsIHJlZywgTlVMTCApOworCisgIC8qIE5leHQgd2UgcHJvY2VzcyBhbGwg
dGhlIHJpZ2h0LWdvaW5nIGVkZ2VzIGZyb20gdkV2ZW50LiAgVGhpcworICAgKiBpbnZvbHZlcyBh
ZGRpbmcgdGhlIGVkZ2VzIHRvIHRoZSBkaWN0aW9uYXJ5LCBhbmQgY3JlYXRpbmcgdGhlCisgICAq
IGFzc29jaWF0ZWQgImFjdGl2ZSByZWdpb25zIiB3aGljaCByZWNvcmQgaW5mb3JtYXRpb24gYWJv
dXQgdGhlCisgICAqIHJlZ2lvbnMgYmV0d2VlbiBhZGphY2VudCBkaWN0aW9uYXJ5IGVkZ2VzLgor
ICAgKi8KKyAgaWYoIGVCb3R0b21MZWZ0LT5PbmV4dCA9PSBlVG9wTGVmdCApIHsKKyAgICAvKiBO
byByaWdodC1nb2luZyBlZGdlcyAtLSBhZGQgYSB0ZW1wb3JhcnkgImZpeGFibGUiIGVkZ2UgKi8K
KyAgICBDb25uZWN0UmlnaHRWZXJ0ZXgoIHRlc3MsIHJlZ1VwLCBlQm90dG9tTGVmdCApOworICB9
IGVsc2UgeworICAgIEFkZFJpZ2h0RWRnZXMoIHRlc3MsIHJlZ1VwLCBlQm90dG9tTGVmdC0+T25l
eHQsIGVUb3BMZWZ0LCBlVG9wTGVmdCwgVFJVRSApOworICB9Cit9CisKKworLyogTWFrZSB0aGUg
c2VudGluZWwgY29vcmRpbmF0ZXMgYmlnIGVub3VnaCB0aGF0IHRoZXkgd2lsbCBuZXZlciBiZQor
ICogbWVyZ2VkIHdpdGggcmVhbCBpbnB1dCBmZWF0dXJlcy4gIChFdmVuIHdpdGggdGhlIGxhcmdl
c3QgcG9zc2libGUKKyAqIGlucHV0IGNvbnRvdXIgYW5kIHRoZSBtYXhpbXVtIHRvbGVyYW5jZSBv
ZiAxLjAsIG5vIG1lcmdpbmcgd2lsbCBiZQorICogZG9uZSB3aXRoIGNvb3JkaW5hdGVzIGxhcmdl
ciB0aGFuIDMgKiBHTFVfVEVTU19NQVhfQ09PUkQpLgorICovCisjZGVmaW5lIFNFTlRJTkVMX0NP
T1JECSg0ICogR0xVX1RFU1NfTUFYX0NPT1JEKQorCitzdGF0aWMgdm9pZCBBZGRTZW50aW5lbCgg
R0xVdGVzc2VsYXRvciAqdGVzcywgR0xkb3VibGUgdCApCisvKgorICogV2UgYWRkIHR3byBzZW50
aW5lbCBlZGdlcyBhYm92ZSBhbmQgYmVsb3cgYWxsIG90aGVyIGVkZ2VzLAorICogdG8gYXZvaWQg
c3BlY2lhbCBjYXNlcyBhdCB0aGUgdG9wIGFuZCBib3R0b20uCisgKi8KK3sKKyAgR0xVaGFsZkVk
Z2UgKmU7CisgIEFjdGl2ZVJlZ2lvbiAqcmVnID0gKEFjdGl2ZVJlZ2lvbiAqKW1lbUFsbG9jKCBz
aXplb2YoIEFjdGl2ZVJlZ2lvbiApKTsKKyAgaWYgKHJlZyA9PSBOVUxMKSBsb25nam1wKHRlc3Mt
PmVudiwxKTsKKworICBlID0gX19nbF9tZXNoTWFrZUVkZ2UoIHRlc3MtPm1lc2ggKTsKKyAgaWYg
KGUgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisKKyAgZS0+T3JnLT5zID0gU0VOVElO
RUxfQ09PUkQ7CisgIGUtPk9yZy0+dCA9IHQ7CisgIGUtPkRzdC0+cyA9IC1TRU5USU5FTF9DT09S
RDsKKyAgZS0+RHN0LT50ID0gdDsKKyAgdGVzcy0+ZXZlbnQgPSBlLT5Ec3Q7CQkvKiBpbml0aWFs
aXplIGl0ICovCisKKyAgcmVnLT5lVXAgPSBlOworICByZWctPndpbmRpbmdOdW1iZXIgPSAwOwor
ICByZWctPmluc2lkZSA9IEZBTFNFOworICByZWctPmZpeFVwcGVyRWRnZSA9IEZBTFNFOworICBy
ZWctPnNlbnRpbmVsID0gVFJVRTsKKyAgcmVnLT5kaXJ0eSA9IEZBTFNFOworICByZWctPm5vZGVV
cCA9IGRpY3RJbnNlcnQoIHRlc3MtPmRpY3QsIHJlZyApOyAvKiBfX2dsX2RpY3RMaXN0SW5zZXJ0
QmVmb3JlICovCisgIGlmIChyZWctPm5vZGVVcCA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwx
KTsKK30KKworCitzdGF0aWMgdm9pZCBJbml0RWRnZURpY3QoIEdMVXRlc3NlbGF0b3IgKnRlc3Mg
KQorLyoKKyAqIFdlIG1haW50YWluIGFuIG9yZGVyaW5nIG9mIGVkZ2UgaW50ZXJzZWN0aW9ucyB3
aXRoIHRoZSBzd2VlcCBsaW5lLgorICogVGhpcyBvcmRlciBpcyBtYWludGFpbmVkIGluIGEgZHlu
YW1pYyBkaWN0aW9uYXJ5LgorICovCit7CisgIC8qIF9fZ2xfZGljdExpc3ROZXdEaWN0ICovCisg
IHRlc3MtPmRpY3QgPSBkaWN0TmV3RGljdCggdGVzcywgKGludCAoKikodm9pZCAqLCBEaWN0S2V5
LCBEaWN0S2V5KSkgRWRnZUxlcSApOworICBpZiAodGVzcy0+ZGljdCA9PSBOVUxMKSBsb25nam1w
KHRlc3MtPmVudiwxKTsKKworICBBZGRTZW50aW5lbCggdGVzcywgLVNFTlRJTkVMX0NPT1JEICk7
CisgIEFkZFNlbnRpbmVsKCB0ZXNzLCBTRU5USU5FTF9DT09SRCApOworfQorCisKK3N0YXRpYyB2
b2lkIERvbmVFZGdlRGljdCggR0xVdGVzc2VsYXRvciAqdGVzcyApCit7CisgIEFjdGl2ZVJlZ2lv
biAqcmVnOworICBpbnQgZml4ZWRFZGdlcyA9IDA7CisKKyAgLyogX19HTF9ESUNUTElTVEtFWSAq
LyAvKiBfX0dMX0RJQ1RMSVNUTUlOICovCisgIHdoaWxlKCAocmVnID0gKEFjdGl2ZVJlZ2lvbiAq
KWRpY3RLZXkoIGRpY3RNaW4oIHRlc3MtPmRpY3QgKSkpICE9IE5VTEwgKSB7CisgICAgLyoKKyAg
ICAgKiBBdCB0aGUgZW5kIG9mIGFsbCBwcm9jZXNzaW5nLCB0aGUgZGljdGlvbmFyeSBzaG91bGQg
Y29udGFpbgorICAgICAqIG9ubHkgdGhlIHR3byBzZW50aW5lbCBlZGdlcywgcGx1cyBhdCBtb3N0
IG9uZSAiZml4YWJsZSIgZWRnZQorICAgICAqIGNyZWF0ZWQgYnkgQ29ubmVjdFJpZ2h0VmVydGV4
KCkuCisgICAgICovCisgICAgaWYoICEgcmVnLT5zZW50aW5lbCApIHsKKyAgICAgIGFzc2VydCgg
cmVnLT5maXhVcHBlckVkZ2UgKTsKKyAgICAgIGFzc2VydCggKytmaXhlZEVkZ2VzID09IDEgKTsK
KyAgICB9CisgICAgYXNzZXJ0KCByZWctPndpbmRpbmdOdW1iZXIgPT0gMCApOworICAgIERlbGV0
ZVJlZ2lvbiggdGVzcywgcmVnICk7CisvKiAgICBfX2dsX21lc2hEZWxldGUoIHJlZy0+ZVVwICk7
Ki8KKyAgfQorICBkaWN0RGVsZXRlRGljdCggdGVzcy0+ZGljdCApOwkvKiBfX2dsX2RpY3RMaXN0
RGVsZXRlRGljdCAqLworfQorCisKK3N0YXRpYyB2b2lkIFJlbW92ZURlZ2VuZXJhdGVFZGdlcygg
R0xVdGVzc2VsYXRvciAqdGVzcyApCisvKgorICogUmVtb3ZlIHplcm8tbGVuZ3RoIGVkZ2VzLCBh
bmQgY29udG91cnMgd2l0aCBmZXdlciB0aGFuIDMgdmVydGljZXMuCisgKi8KK3sKKyAgR0xVaGFs
ZkVkZ2UgKmUsICplTmV4dCwgKmVMbmV4dDsKKyAgR0xVaGFsZkVkZ2UgKmVIZWFkID0gJnRlc3Mt
Pm1lc2gtPmVIZWFkOworCisgIC8qTElOVEVEKi8KKyAgZm9yKCBlID0gZUhlYWQtPm5leHQ7IGUg
IT0gZUhlYWQ7IGUgPSBlTmV4dCApIHsKKyAgICBlTmV4dCA9IGUtPm5leHQ7CisgICAgZUxuZXh0
ID0gZS0+TG5leHQ7CisgICAgCisgICAgaWYoIFZlcnRFcSggZS0+T3JnLCBlLT5Ec3QgKSAmJiBl
LT5MbmV4dC0+TG5leHQgIT0gZSApIHsKKyAgICAgIC8qIFplcm8tbGVuZ3RoIGVkZ2UsIGNvbnRv
dXIgaGFzIGF0IGxlYXN0IDMgZWRnZXMgKi8KKyAgICAgIAorICAgICAgU3BsaWNlTWVyZ2VWZXJ0
aWNlcyggdGVzcywgZUxuZXh0LCBlICk7CS8qIGRlbGV0ZXMgZS0+T3JnICovCisgICAgICBpZiAo
ICFfX2dsX21lc2hEZWxldGUoIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOyAvKiBlIGlzIGEg
c2VsZi1sb29wICovCisgICAgICBlID0gZUxuZXh0OworICAgICAgZUxuZXh0ID0gZS0+TG5leHQ7
CisgICAgfQorICAgIGlmKCBlTG5leHQtPkxuZXh0ID09IGUgKSB7CisgICAgICAvKiBEZWdlbmVy
YXRlIGNvbnRvdXIgKG9uZSBvciB0d28gZWRnZXMpICovCisgICAgICAKKyAgICAgIGlmKCBlTG5l
eHQgIT0gZSApIHsKKwlpZiggZUxuZXh0ID09IGVOZXh0IHx8IGVMbmV4dCA9PSBlTmV4dC0+U3lt
ICkgeyBlTmV4dCA9IGVOZXh0LT5uZXh0OyB9CisJaWYgKCAhX19nbF9tZXNoRGVsZXRlKCBlTG5l
eHQgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgICAgfQorICAgICAgaWYoIGUgPT0gZU5l
eHQgfHwgZSA9PSBlTmV4dC0+U3ltICkgeyBlTmV4dCA9IGVOZXh0LT5uZXh0OyB9CisgICAgICBp
ZiAoICFfX2dsX21lc2hEZWxldGUoIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgIH0K
KyAgfQorfQorCitzdGF0aWMgaW50IEluaXRQcmlvcml0eVEoIEdMVXRlc3NlbGF0b3IgKnRlc3Mg
KQorLyoKKyAqIEluc2VydCBhbGwgdmVydGljZXMgaW50byB0aGUgcHJpb3JpdHkgcXVldWUgd2hp
Y2ggZGV0ZXJtaW5lcyB0aGUKKyAqIG9yZGVyIGluIHdoaWNoIHZlcnRpY2VzIGNyb3NzIHRoZSBz
d2VlcCBsaW5lLgorICovCit7CisgIFByaW9yaXR5USAqcHE7CisgIEdMVXZlcnRleCAqdiwgKnZI
ZWFkOworCisgIC8qIF9fZ2xfcHFTb3J0TmV3UHJpb3JpdHlRICovCisgIHBxID0gdGVzcy0+cHEg
PSBwcU5ld1ByaW9yaXR5USggKGludCAoKikoUFFrZXksIFBRa2V5KSkgX19nbF92ZXJ0TGVxICk7
CisgIGlmIChwcSA9PSBOVUxMKSByZXR1cm4gMDsKKworICB2SGVhZCA9ICZ0ZXNzLT5tZXNoLT52
SGVhZDsKKyAgZm9yKCB2ID0gdkhlYWQtPm5leHQ7IHYgIT0gdkhlYWQ7IHYgPSB2LT5uZXh0ICkg
eworICAgIHYtPnBxSGFuZGxlID0gcHFJbnNlcnQoIHBxLCB2ICk7IC8qIF9fZ2xfcHFTb3J0SW5z
ZXJ0ICovCisgICAgaWYgKHYtPnBxSGFuZGxlID09IExPTkdfTUFYKSBicmVhazsKKyAgfQorICBp
ZiAodiAhPSB2SGVhZCB8fCAhcHFJbml0KCBwcSApICkgeyAvKiBfX2dsX3BxU29ydEluaXQgKi8K
KyAgICBwcURlbGV0ZVByaW9yaXR5USh0ZXNzLT5wcSk7CS8qIF9fZ2xfcHFTb3J0RGVsZXRlUHJp
b3JpdHlRICovCisgICAgdGVzcy0+cHEgPSBOVUxMOworICAgIHJldHVybiAwOworICB9CisKKyAg
cmV0dXJuIDE7Cit9CisKKworc3RhdGljIHZvaWQgRG9uZVByaW9yaXR5USggR0xVdGVzc2VsYXRv
ciAqdGVzcyApCit7CisgIHBxRGVsZXRlUHJpb3JpdHlRKCB0ZXNzLT5wcSApOyAvKiBfX2dsX3Bx
U29ydERlbGV0ZVByaW9yaXR5USAqLworfQorCisKK3N0YXRpYyBpbnQgUmVtb3ZlRGVnZW5lcmF0
ZUZhY2VzKCBHTFVtZXNoICptZXNoICkKKy8qCisgKiBEZWxldGUgYW55IGRlZ2VuZXJhdGUgZmFj
ZXMgd2l0aCBvbmx5IHR3byBlZGdlcy4gIFdhbGtEaXJ0eVJlZ2lvbnMoKQorICogd2lsbCBjYXRj
aCBhbG1vc3QgYWxsIG9mIHRoZXNlLCBidXQgaXQgd29uJ3QgY2F0Y2ggZGVnZW5lcmF0ZSBmYWNl
cworICogcHJvZHVjZWQgYnkgc3BsaWNlIG9wZXJhdGlvbnMgb24gYWxyZWFkeS1wcm9jZXNzZWQg
ZWRnZXMuCisgKiBUaGUgdHdvIHBsYWNlcyB0aGlzIGNhbiBoYXBwZW4gYXJlIGluIEZpbmlzaExl
ZnRSZWdpb25zKCksIHdoZW4KKyAqIHdlIHNwbGljZSBpbiBhICJ0ZW1wb3JhcnkiIGVkZ2UgcHJv
ZHVjZWQgYnkgQ29ubmVjdFJpZ2h0VmVydGV4KCksCisgKiBhbmQgaW4gQ2hlY2tGb3JMZWZ0U3Bs
aWNlKCksIHdoZXJlIHdlIHNwbGljZSBhbHJlYWR5LXByb2Nlc3NlZAorICogZWRnZXMgdG8gZW5z
dXJlIHRoYXQgb3VyIGRpY3Rpb25hcnkgaW52YXJpYW50cyBhcmUgbm90IHZpb2xhdGVkCisgKiBi
eSBudW1lcmljYWwgZXJyb3JzLgorICoKKyAqIEluIGJvdGggdGhlc2UgY2FzZXMgaXQgaXMgKnZl
cnkqIGRhbmdlcm91cyB0byBkZWxldGUgdGhlIG9mZmVuZGluZworICogZWRnZSBhdCB0aGUgdGlt
ZSwgc2luY2Ugb25lIG9mIHRoZSByb3V0aW5lcyBmdXJ0aGVyIHVwIHRoZSBzdGFjaworICogd2ls
bCBzb21ldGltZXMgYmUga2VlcGluZyBhIHBvaW50ZXIgdG8gdGhhdCBlZGdlLgorICovCit7Cisg
IEdMVWZhY2UgKmYsICpmTmV4dDsKKyAgR0xVaGFsZkVkZ2UgKmU7CisKKyAgLypMSU5URUQqLwor
ICBmb3IoIGYgPSBtZXNoLT5mSGVhZC5uZXh0OyBmICE9ICZtZXNoLT5mSGVhZDsgZiA9IGZOZXh0
ICkgeworICAgIGZOZXh0ID0gZi0+bmV4dDsKKyAgICBlID0gZi0+YW5FZGdlOworICAgIGFzc2Vy
dCggZS0+TG5leHQgIT0gZSApOworCisgICAgaWYoIGUtPkxuZXh0LT5MbmV4dCA9PSBlICkgewor
ICAgICAgLyogQSBmYWNlIHdpdGggb25seSB0d28gZWRnZXMgKi8KKyAgICAgIEFkZFdpbmRpbmco
IGUtPk9uZXh0LCBlICk7CisgICAgICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGUgKSApIHJldHVy
biAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworaW50IF9fZ2xfY29tcHV0ZUludGVy
aW9yKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKKy8qCisgKiBfX2dsX2NvbXB1dGVJbnRlcmlvcigg
dGVzcyApIGNvbXB1dGVzIHRoZSBwbGFuYXIgYXJyYW5nZW1lbnQgc3BlY2lmaWVkCisgKiBieSB0
aGUgZ2l2ZW4gY29udG91cnMsIGFuZCBmdXJ0aGVyIHN1YmRpdmlkZXMgdGhpcyBhcnJhbmdlbWVu
dAorICogaW50byByZWdpb25zLiAgRWFjaCByZWdpb24gaXMgbWFya2VkICJpbnNpZGUiIGlmIGl0
IGJlbG9uZ3MKKyAqIHRvIHRoZSBwb2x5Z29uLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUgZ2l2ZW4g
YnkgdGVzcy0+d2luZGluZ1J1bGUuCisgKiBFYWNoIGludGVyaW9yIHJlZ2lvbiBpcyBndWFyYW50
ZWVkIGJlIG1vbm90b25lLgorICovCit7CisgIEdMVXZlcnRleCAqdiwgKnZOZXh0OworCisgIHRl
c3MtPmZhdGFsRXJyb3IgPSBGQUxTRTsKKworICAvKiBFYWNoIHZlcnRleCBkZWZpbmVzIGFuIGV2
ZW50IGZvciBvdXIgc3dlZXAgbGluZS4gIFN0YXJ0IGJ5IGluc2VydGluZworICAgKiBhbGwgdGhl
IHZlcnRpY2VzIGluIGEgcHJpb3JpdHkgcXVldWUuICBFdmVudHMgYXJlIHByb2Nlc3NlZCBpbgor
ICAgKiBsZXhpY29ncmFwaGljIG9yZGVyLCBpZS4KKyAgICoKKyAgICoJZTEgPCBlMiAgaWZmICBl
MS54IDwgZTIueCB8fCAoZTEueCA9PSBlMi54ICYmIGUxLnkgPCBlMi55KQorICAgKi8KKyAgUmVt
b3ZlRGVnZW5lcmF0ZUVkZ2VzKCB0ZXNzICk7CisgIGlmICggIUluaXRQcmlvcml0eVEoIHRlc3Mg
KSApIHJldHVybiAwOyAvKiBpZiBlcnJvciAqLworICBJbml0RWRnZURpY3QoIHRlc3MgKTsKKwor
ICAvKiBfX2dsX3BxU29ydEV4dHJhY3RNaW4gKi8KKyAgd2hpbGUoICh2ID0gKEdMVXZlcnRleCAq
KXBxRXh0cmFjdE1pbiggdGVzcy0+cHEgKSkgIT0gTlVMTCApIHsKKyAgICBmb3IoIDs7ICkgewor
ICAgICAgdk5leHQgPSAoR0xVdmVydGV4ICopcHFNaW5pbXVtKCB0ZXNzLT5wcSApOyAvKiBfX2ds
X3BxU29ydE1pbmltdW0gKi8KKyAgICAgIGlmKCB2TmV4dCA9PSBOVUxMIHx8ICEgVmVydEVxKCB2
TmV4dCwgdiApKSBicmVhazsKKyAgICAgIAorICAgICAgLyogTWVyZ2UgdG9nZXRoZXIgYWxsIHZl
cnRpY2VzIGF0IGV4YWN0bHkgdGhlIHNhbWUgbG9jYXRpb24uCisgICAgICAgKiBUaGlzIGlzIG1v
cmUgZWZmaWNpZW50IHRoYW4gcHJvY2Vzc2luZyB0aGVtIG9uZSBhdCBhIHRpbWUsCisgICAgICAg
KiBzaW1wbGlmaWVzIHRoZSBjb2RlIChzZWUgQ29ubmVjdExlZnREZWdlbmVyYXRlKSwgYW5kIGlz
IGFsc28KKyAgICAgICAqIGltcG9ydGFudCBmb3IgY29ycmVjdCBoYW5kbGluZyBvZiBjZXJ0YWlu
IGRlZ2VuZXJhdGUgY2FzZXMuCisgICAgICAgKiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGVyZSBh
cmUgdHdvIGlkZW50aWNhbCBlZGdlcyBBIGFuZCBCCisgICAgICAgKiB0aGF0IGJlbG9uZyB0byBk
aWZmZXJlbnQgY29udG91cnMgKHNvIHdpdGhvdXQgdGhpcyBjb2RlIHRoZXkgd291bGQKKyAgICAg
ICAqIGJlIHByb2Nlc3NlZCBieSBzZXBhcmF0ZSBzd2VlcCBldmVudHMpLiAgU3VwcG9zZSBhbm90
aGVyIGVkZ2UgQworICAgICAgICogY3Jvc3NlcyBBIGFuZCBCIGZyb20gYWJvdmUuICBXaGVuIEEg
aXMgcHJvY2Vzc2VkLCB3ZSBzcGxpdCBpdAorICAgICAgICogYXQgaXRzIGludGVyc2VjdGlvbiBw
b2ludCB3aXRoIEMuICBIb3dldmVyIHRoaXMgYWxzbyBzcGxpdHMgQywKKyAgICAgICAqIHNvIHdo
ZW4gd2UgaW5zZXJ0IEIgd2UgbWF5IGNvbXB1dGUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgICAg
ICAqIGludGVyc2VjdGlvbiBwb2ludC4gIFRoaXMgbWlnaHQgbGVhdmUgdHdvIGVkZ2VzIHdpdGgg
YSBzbWFsbAorICAgICAgICogZ2FwIGJldHdlZW4gdGhlbS4gIFRoaXMga2luZCBvZiBlcnJvciBp
cyBlc3BlY2lhbGx5IG9idmlvdXMKKyAgICAgICAqIHdoZW4gdXNpbmcgYm91bmRhcnkgZXh0cmFj
dGlvbiAoR0xVX1RFU1NfQk9VTkRBUllfT05MWSkuCisgICAgICAgKi8KKyAgICAgIHZOZXh0ID0g
KEdMVXZlcnRleCAqKXBxRXh0cmFjdE1pbiggdGVzcy0+cHEgKTsgLyogX19nbF9wcVNvcnRFeHRy
YWN0TWluKi8KKyAgICAgIFNwbGljZU1lcmdlVmVydGljZXMoIHRlc3MsIHYtPmFuRWRnZSwgdk5l
eHQtPmFuRWRnZSApOworICAgIH0KKyAgICBTd2VlcEV2ZW50KCB0ZXNzLCB2ICk7CisgIH0KKwor
ICAvKiBTZXQgdGVzcy0+ZXZlbnQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworICAvKiBfX0dM
X0RJQ1RMSVNUS0VZICovIC8qIF9fR0xfRElDVExJU1RNSU4gKi8gCisgIHRlc3MtPmV2ZW50ID0g
KChBY3RpdmVSZWdpb24gKikgZGljdEtleSggZGljdE1pbiggdGVzcy0+ZGljdCApKSktPmVVcC0+
T3JnOworICBEZWJ1Z0V2ZW50KCB0ZXNzICk7CisgIERvbmVFZGdlRGljdCggdGVzcyApOworICBE
b25lUHJpb3JpdHlRKCB0ZXNzICk7CisKKyAgaWYgKCAhUmVtb3ZlRGVnZW5lcmF0ZUZhY2VzKCB0
ZXNzLT5tZXNoICkgKSByZXR1cm4gMDsKKyAgX19nbF9tZXNoQ2hlY2tNZXNoKCB0ZXNzLT5tZXNo
ICk7CisKKyAgcmV0dXJuIDE7Cit9CkluZGV4OiBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNz
L3N3ZWVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2Vl
cC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg0IEBACisvKgorKiogTGljZW5zZSBBcHBsaWNhYmls
aXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisqKiBt
YWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhl
IFNHSSBGcmVlCisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vu
c2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0
aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4g
YSBjb3B5CisqKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRu
OiBMZWdhbCBTZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWlu
IFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5jb20v
cHJvamVjdHMvRnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGlj
ZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJhc2lz
LCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMK
KyoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElF
RCBXQVJSQU5USUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElT
RkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFO
RCBOT04tSU5GUklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwg
Q29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4yLjEs
IHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNz
LAorKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBT
aWxpY29uIEdyYXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0
ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJlaW4u
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lv
bnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxpc2hl
ZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisq
KiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4y
LjEpLCByZWxlYXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBT
eXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJl
ciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRvdyBT
eXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBz
b2Z0d2FyZQorKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4x
IFNhbXBsZSBJbXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3Qg
YmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0aCB0
aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoKKyoq
IEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNpb24k
CisqKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9zd2VlcC5oIzUg
JAorKi8KKworI2lmbmRlZiBfX3N3ZWVwX2hfCisjZGVmaW5lIF9fc3dlZXBfaF8KKworI2luY2x1
ZGUgIjNyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKKworLyogX19nbF9jb21wdXRlSW50ZXJp
b3IoIHRlc3MgKSBjb21wdXRlcyB0aGUgcGxhbmFyIGFycmFuZ2VtZW50IHNwZWNpZmllZAorICog
YnkgdGhlIGdpdmVuIGNvbnRvdXJzLCBhbmQgZnVydGhlciBzdWJkaXZpZGVzIHRoaXMgYXJyYW5n
ZW1lbnQKKyAqIGludG8gcmVnaW9ucy4gIEVhY2ggcmVnaW9uIGlzIG1hcmtlZCAiaW5zaWRlIiBp
ZiBpdCBiZWxvbmdzCisgKiB0byB0aGUgcG9seWdvbiwgYWNjb3JkaW5nIHRvIHRoZSBydWxlIGdp
dmVuIGJ5IHRlc3MtPndpbmRpbmdSdWxlLgorICogRWFjaCBpbnRlcmlvciByZWdpb24gaXMgZ3Vh
cmFudGVlZCBiZSBtb25vdG9uZS4KKyAqLworaW50IF9fZ2xfY29tcHV0ZUludGVyaW9yKCBHTFV0
ZXNzZWxhdG9yICp0ZXNzICk7CisKKworLyogVGhlIGZvbGxvd2luZyBpcyBoZXJlICpvbmx5KiBm
b3IgYWNjZXNzIGJ5IGRlYnVnZ2luZyByb3V0aW5lcyAqLworCisjaW5jbHVkZSAiZGljdC5oIgor
CisvKiBGb3IgZWFjaCBwYWlyIG9mIGFkamFjZW50IGVkZ2VzIGNyb3NzaW5nIHRoZSBzd2VlcCBs
aW5lLCB0aGVyZSBpcworICogYW4gQWN0aXZlUmVnaW9uIHRvIHJlcHJlc2VudCB0aGUgcmVnaW9u
IGJldHdlZW4gdGhlbS4gIFRoZSBhY3RpdmUKKyAqIHJlZ2lvbnMgYXJlIGtlcHQgaW4gc29ydGVk
IG9yZGVyIGluIGEgZHluYW1pYyBkaWN0aW9uYXJ5LiAgQXMgdGhlCisgKiBzd2VlcCBsaW5lIGNy
b3NzZXMgZWFjaCB2ZXJ0ZXgsIHdlIHVwZGF0ZSB0aGUgYWZmZWN0ZWQgcmVnaW9ucy4KKyAqLwor
CitzdHJ1Y3QgQWN0aXZlUmVnaW9uIHsKKyAgR0xVaGFsZkVkZ2UJKmVVcDsJCS8qIHVwcGVyIGVk
Z2UsIGRpcmVjdGVkIHJpZ2h0IHRvIGxlZnQgKi8KKyAgRGljdE5vZGUJKm5vZGVVcDsJLyogZGlj
dGlvbmFyeSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gZVVwICovCisgIGludAkJd2luZGluZ051bWJl
cjsJLyogdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggcmVnaW9ucyBhcmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICogaW5zaWRlIHRoZSBwb2x5Z29uICovCisgIEdMYm9vbGVhbglp
bnNpZGU7CQkvKiBpcyB0aGlzIHJlZ2lvbiBpbnNpZGUgdGhlIHBvbHlnb24/ICovCisgIEdMYm9v
bGVhbglzZW50aW5lbDsJLyogbWFya3MgZmFrZSBlZGdlcyBhdCB0ID0gKy8taW5maW5pdHkgKi8K
KyAgR0xib29sZWFuCWRpcnR5OwkJLyogbWFya3MgcmVnaW9ucyB3aGVyZSB0aGUgdXBwZXIgb3Ig
bG93ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZWRnZSBoYXMgY2hhbmdl
ZCwgYnV0IHdlIGhhdmVuJ3QgY2hlY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiB3aGV0aGVyIHRoZXkgaW50ZXJzZWN0IHlldCAqLworICBHTGJvb2xlYW4JZml4VXBwZXJF
ZGdlOwkvKiBtYXJrcyB0ZW1wb3JhcnkgZWRnZXMgaW50cm9kdWNlZCB3aGVuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIHdlIHByb2Nlc3MgYSAicmlnaHQgdmVydGV4IiAob25l
IHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYW55IGVkZ2VzIGxl
YXZpbmcgdG8gdGhlIHJpZ2h0KSAqLworfTsKKworI2RlZmluZSBSZWdpb25CZWxvdyhyKQkoKEFj
dGl2ZVJlZ2lvbiAqKSBkaWN0S2V5KGRpY3RQcmVkKChyKS0+bm9kZVVwKSkpCisjZGVmaW5lIFJl
Z2lvbkFib3ZlKHIpCSgoQWN0aXZlUmVnaW9uICopIGRpY3RLZXkoZGljdFN1Y2MoKHIpLT5ub2Rl
VXApKSkKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Mu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuYwkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5jCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDYzOSBAQAorLyoKKyoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhj
ZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorKiogbWFkZSBzdWJq
ZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJl
ZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRo
ZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zp
c2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQorKiogdGhpcyBmaWxlIGV4Y2Vw
dCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQor
Kiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwg
U2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBD
QSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3Rz
L0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRo
ZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiogIkFTIElTIiBiYXNpcywgd2l0aCBB
TEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCisqKiBESVND
TEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFO
VElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkg
UVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlO
RlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6
IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNl
ZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKKyoqIElu
Yy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBH
cmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRo
aXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUg
YXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworKiogZXN0YWJsaXNoZWQgYnkgU0dJ
IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQorKiogT3BlbkdM
KFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVs
ZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0
aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5
ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCisqKiBXaW5kb3cgU3lzdGVtKFIp
IChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUK
KyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUg
SW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5k
ZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5H
TChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisqKgorKi8KKy8qCisqKiBBdXRob3I6
IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlzaW9uJAorKiogJEhl
YWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvdGVzcy5jIzcgJAorKi8KKwor
I2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPHN0ZGRl
Zi5oPgorCisjaW5jbHVkZSAiM3JkcGFydHkvZ2x1L2dsdW9zLmgiCisjaW5jbHVkZSAiM3JkcGFy
dHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKKyNpbmNsdWRlICIzcmRwYXJ0eS9nbHUvbGlidGVz
cy9tZXNoLmgiCisjaW5jbHVkZSAiM3JkcGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmgiCisjaW5j
bHVkZSAiM3JkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgiCisjaW5jbHVkZSAiM3JkcGFydHkv
Z2x1L2xpYnRlc3Mvc3dlZXAuaCIKKyNpbmNsdWRlICIzcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNz
LmgiCisjaW5jbHVkZSAiM3JkcGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8uaCIKKworI2RlZmlu
ZSBHTFVfVEVTU19ERUZBVUxUX1RPTEVSQU5DRSAwLjAKKyNkZWZpbmUgR0xVX1RFU1NfTUVTSAkJ
MTAwMTEyCS8qIHZvaWQgKCopKEdMVW1lc2ggKm1lc2gpCSAgICAqLworCisjZGVmaW5lIFRSVUUg
MQorI2RlZmluZSBGQUxTRSAwCisKKy8qQVJHU1VTRUQqLyBzdGF0aWMgdm9pZCBHTEFQSUVOVFJZ
IG5vQmVnaW4oIEdMZW51bSB0eXBlICkge30KKy8qQVJHU1VTRUQqLyBzdGF0aWMgdm9pZCBHTEFQ
SUVOVFJZIG5vRWRnZUZsYWcoIEdMYm9vbGVhbiBib3VuZGFyeUVkZ2UgKSB7fQorLypBUkdTVVNF
RCovIHN0YXRpYyB2b2lkIEdMQVBJRU5UUlkgbm9WZXJ0ZXgoIHZvaWQgKmRhdGEgKSB7fQorLypB
UkdTVVNFRCovIHN0YXRpYyB2b2lkIEdMQVBJRU5UUlkgbm9FbmQoIHZvaWQgKSB7fQorLypBUkdT
VVNFRCovIHN0YXRpYyB2b2lkIEdMQVBJRU5UUlkgbm9FcnJvciggR0xlbnVtIGVycm51bSApIHt9
CisvKkFSR1NVU0VEKi8gc3RhdGljIHZvaWQgR0xBUElFTlRSWSBub0NvbWJpbmUoIEdMZG91Ymxl
IGNvb3Jkc1szXSwgdm9pZCAqZGF0YVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZmxvYXQgd2VpZ2h0WzRdLCB2b2lkICoqZGF0YU91dCApIHt9CisvKkFSR1NVU0VE
Ki8gc3RhdGljIHZvaWQgR0xBUElFTlRSWSBub01lc2goIEdMVW1lc2ggKm1lc2ggKSB7fQorCisK
Ky8qQVJHU1VTRUQqLyB2b2lkIEdMQVBJRU5UUlkgX19nbF9ub0JlZ2luRGF0YSggR0xlbnVtIHR5
cGUsCisJCQkJCSAgICAgdm9pZCAqcG9seWdvbkRhdGEgKSB7fQorLypBUkdTVVNFRCovIHZvaWQg
R0xBUElFTlRSWSBfX2dsX25vRWRnZUZsYWdEYXRhKCBHTGJvb2xlYW4gYm91bmRhcnlFZGdlLCAK
KwkJCQkgICAgICAgdm9pZCAqcG9seWdvbkRhdGEgKSB7fQorLypBUkdTVVNFRCovIHZvaWQgR0xB
UElFTlRSWSBfX2dsX25vVmVydGV4RGF0YSggdm9pZCAqZGF0YSwKKwkJCQkJICAgICAgdm9pZCAq
cG9seWdvbkRhdGEgKSB7fQorLypBUkdTVVNFRCovIHZvaWQgR0xBUElFTlRSWSBfX2dsX25vRW5k
RGF0YSggdm9pZCAqcG9seWdvbkRhdGEgKSB7fQorLypBUkdTVVNFRCovIHZvaWQgR0xBUElFTlRS
WSBfX2dsX25vRXJyb3JEYXRhKCBHTGVudW0gZXJybnVtLAorCQkJCQkgICAgIHZvaWQgKnBvbHln
b25EYXRhICkge30KKy8qQVJHU1VTRUQqLyB2b2lkIEdMQVBJRU5UUlkgX19nbF9ub0NvbWJpbmVE
YXRhKCBHTGRvdWJsZSBjb29yZHNbM10sCisJCQkJCSAgICAgICB2b2lkICpkYXRhWzRdLAorCQkJ
CQkgICAgICAgR0xmbG9hdCB3ZWlnaHRbNF0sCisJCQkJCSAgICAgICB2b2lkICoqb3V0RGF0YSwK
KwkJCQkJICAgICAgIHZvaWQgKnBvbHlnb25EYXRhICkge30KKworLyogSGFsZi1lZGdlcyBhcmUg
YWxsb2NhdGVkIGluIHBhaXJzIChzZWUgbWVzaC5jKSAqLwordHlwZWRlZiBzdHJ1Y3QgeyBHTFVo
YWxmRWRnZSBlLCBlU3ltOyB9IEVkZ2VQYWlyOworCisjZGVmaW5lIE1BWChhLGIpCSgoYSkgPiAo
YikgPyAoYSkgOiAoYikpCisjZGVmaW5lIE1BWF9GQVNUX0FMTE9DCShNQVgoc2l6ZW9mKEVkZ2VQ
YWlyKSwgXAorCQkJIE1BWChzaXplb2YoR0xVdmVydGV4KSxzaXplb2YoR0xVZmFjZSkpKSkKKwor
CitHTFV0ZXNzZWxhdG9yICogR0xBUElFTlRSWQoraW50ZXJuYWxfZ2x1TmV3VGVzcyggdm9pZCAp
Cit7CisgIEdMVXRlc3NlbGF0b3IgKnRlc3M7CisKKyAgLyogT25seSBpbml0aWFsaXplIGZpZWxk
cyB3aGljaCBjYW4gYmUgY2hhbmdlZCBieSB0aGUgYXBpLiAgT3RoZXIgZmllbGRzCisgICAqIGFy
ZSBpbml0aWFsaXplZCB3aGVyZSB0aGV5IGFyZSB1c2VkLgorICAgKi8KKworICBpZiAobWVtSW5p
dCggTUFYX0ZBU1RfQUxMT0MgKSA9PSAwKSB7CisgICAgIHJldHVybiAwOwkJCS8qIG91dCBvZiBt
ZW1vcnkgKi8KKyAgfQorICB0ZXNzID0gKEdMVXRlc3NlbGF0b3IgKiltZW1BbGxvYyggc2l6ZW9m
KCBHTFV0ZXNzZWxhdG9yICkpOworICBpZiAodGVzcyA9PSBOVUxMKSB7CisgICAgIHJldHVybiAw
OwkJCS8qIG91dCBvZiBtZW1vcnkgKi8KKyAgfQorCisgIHRlc3MtPnN0YXRlID0gVF9ET1JNQU5U
OworCisgIHRlc3MtPm5vcm1hbFswXSA9IDA7CisgIHRlc3MtPm5vcm1hbFsxXSA9IDA7CisgIHRl
c3MtPm5vcm1hbFsyXSA9IDA7CisKKyAgdGVzcy0+cmVsVG9sZXJhbmNlID0gR0xVX1RFU1NfREVG
QVVMVF9UT0xFUkFOQ0U7CisgIHRlc3MtPndpbmRpbmdSdWxlID0gR0xVX1RFU1NfV0lORElOR19P
REQ7CisgIHRlc3MtPmZsYWdCb3VuZGFyeSA9IEZBTFNFOworICB0ZXNzLT5ib3VuZGFyeU9ubHkg
PSBGQUxTRTsKKworICB0ZXNzLT5jYWxsQmVnaW4gPSAmbm9CZWdpbjsKKyAgdGVzcy0+Y2FsbEVk
Z2VGbGFnID0gJm5vRWRnZUZsYWc7CisgIHRlc3MtPmNhbGxWZXJ0ZXggPSAmbm9WZXJ0ZXg7Cisg
IHRlc3MtPmNhbGxFbmQgPSAmbm9FbmQ7CisKKyAgdGVzcy0+Y2FsbEVycm9yID0gJm5vRXJyb3I7
CisgIHRlc3MtPmNhbGxDb21iaW5lID0gJm5vQ29tYmluZTsKKyAgdGVzcy0+Y2FsbE1lc2ggPSAm
bm9NZXNoOworCisgIHRlc3MtPmNhbGxCZWdpbkRhdGE9ICZfX2dsX25vQmVnaW5EYXRhOworICB0
ZXNzLT5jYWxsRWRnZUZsYWdEYXRhPSAmX19nbF9ub0VkZ2VGbGFnRGF0YTsKKyAgdGVzcy0+Y2Fs
bFZlcnRleERhdGE9ICZfX2dsX25vVmVydGV4RGF0YTsKKyAgdGVzcy0+Y2FsbEVuZERhdGE9ICZf
X2dsX25vRW5kRGF0YTsKKyAgdGVzcy0+Y2FsbEVycm9yRGF0YT0gJl9fZ2xfbm9FcnJvckRhdGE7
CisgIHRlc3MtPmNhbGxDb21iaW5lRGF0YT0gJl9fZ2xfbm9Db21iaW5lRGF0YTsKKworICB0ZXNz
LT5wb2x5Z29uRGF0YT0gTlVMTDsKKworICByZXR1cm4gdGVzczsKK30KKworc3RhdGljIHZvaWQg
TWFrZURvcm1hbnQoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQoreworICAvKiBSZXR1cm4gdGhlIHRl
c3NlbGxhdG9yIHRvIGl0cyBvcmlnaW5hbCBkb3JtYW50IHN0YXRlLiAqLworCisgIGlmKCB0ZXNz
LT5tZXNoICE9IE5VTEwgKSB7CisgICAgX19nbF9tZXNoRGVsZXRlTWVzaCggdGVzcy0+bWVzaCAp
OworICB9CisgIHRlc3MtPnN0YXRlID0gVF9ET1JNQU5UOworICB0ZXNzLT5sYXN0RWRnZSA9IE5V
TEw7CisgIHRlc3MtPm1lc2ggPSBOVUxMOworfQorCisjZGVmaW5lIFJlcXVpcmVTdGF0ZSggdGVz
cywgcyApICAgaWYoIHRlc3MtPnN0YXRlICE9IHMgKSBHb3RvU3RhdGUodGVzcyxzKQorCitzdGF0
aWMgdm9pZCBHb3RvU3RhdGUoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIGVudW0gVGVzc1N0YXRlIG5l
d1N0YXRlICkKK3sKKyAgd2hpbGUoIHRlc3MtPnN0YXRlICE9IG5ld1N0YXRlICkgeworICAgIC8q
IFdlIGNoYW5nZSB0aGUgY3VycmVudCBzdGF0ZSBvbmUgbGV2ZWwgYXQgYSB0aW1lLCB0byBnZXQg
dG8KKyAgICAgKiB0aGUgZGVzaXJlZCBzdGF0ZS4KKyAgICAgKi8KKyAgICBpZiggdGVzcy0+c3Rh
dGUgPCBuZXdTdGF0ZSApIHsKKyAgICAgIHN3aXRjaCggdGVzcy0+c3RhdGUgKSB7CisgICAgICBj
YXNlIFRfRE9STUFOVDoKKwlDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9URVNTX01JU1NJ
TkdfQkVHSU5fUE9MWUdPTiApOworCWludGVybmFsX2dsdVRlc3NCZWdpblBvbHlnb24oIHRlc3Ms
IE5VTEwgKTsKKwlicmVhazsKKyAgICAgIGNhc2UgVF9JTl9QT0xZR09OOgorCUNBTExfRVJST1Jf
T1JfRVJST1JfREFUQSggR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9DT05UT1VSICk7CisJaW50ZXJu
YWxfZ2x1VGVzc0JlZ2luQ29udG91ciggdGVzcyApOworCWJyZWFrOworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgYXNzZXJ0KDApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgc3dpdGNoKCB0ZXNzLT5zdGF0ZSApIHsKKyAgICAgIGNhc2UgVF9JTl9DT05UT1VS
OgorCUNBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RFU1NfTUlTU0lOR19FTkRfQ09OVE9V
UiApOworCWludGVybmFsX2dsdVRlc3NFbmRDb250b3VyKCB0ZXNzICk7CisJYnJlYWs7CisgICAg
ICBjYXNlIFRfSU5fUE9MWUdPTjoKKwlDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9URVNT
X01JU1NJTkdfRU5EX1BPTFlHT04gKTsKKwkvKiBnbHVUZXNzRW5kUG9seWdvbiggdGVzcyApIGlz
IHRvbyBtdWNoIHdvcmshICovCisJTWFrZURvcm1hbnQoIHRlc3MgKTsKKwlicmVhazsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9Cisg
ICAgfQorICB9Cit9CisKKwordm9pZCBHTEFQSUVOVFJZCitpbnRlcm5hbF9nbHVEZWxldGVUZXNz
KCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKK3sKKyAgUmVxdWlyZVN0YXRlKCB0ZXNzLCBUX0RPUk1B
TlQgKTsKKyAgbWVtRnJlZSggdGVzcyApOworfQorCisKK3ZvaWQgR0xBUElFTlRSWQoraW50ZXJu
YWxfZ2x1VGVzc1Byb3BlcnR5KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGVudW0gd2hpY2gsIEdM
ZG91YmxlIHZhbHVlICkKK3sKKyAgR0xlbnVtIHdpbmRpbmdSdWxlOworCisgIHN3aXRjaCggd2hp
Y2ggKSB7CisgIGNhc2UgR0xVX1RFU1NfVE9MRVJBTkNFOgorICAgIGlmKCB2YWx1ZSA8IDAuMCB8
fCB2YWx1ZSA+IDEuMCApIGJyZWFrOworICAgIHRlc3MtPnJlbFRvbGVyYW5jZSA9IHZhbHVlOwor
ICAgIHJldHVybjsKKworICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfUlVMRToKKyAgICB3aW5kaW5n
UnVsZSA9IChHTGVudW0pIHZhbHVlOworICAgIGlmKCB3aW5kaW5nUnVsZSAhPSB2YWx1ZSApIGJy
ZWFrOwkvKiBub3QgYW4gaW50ZWdlciAqLworCisgICAgc3dpdGNoKCB3aW5kaW5nUnVsZSApIHsK
KyAgICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfT0REOgorICAgIGNhc2UgR0xVX1RFU1NfV0lORElO
R19OT05aRVJPOgorICAgIGNhc2UgR0xVX1RFU1NfV0lORElOR19QT1NJVElWRToKKyAgICBjYXNl
IEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkU6CisgICAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX0FC
U19HRVFfVFdPOgorICAgICAgdGVzcy0+d2luZGluZ1J1bGUgPSB3aW5kaW5nUnVsZTsKKyAgICAg
IHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorCisgIGNhc2UgR0xV
X1RFU1NfQk9VTkRBUllfT05MWToKKyAgICB0ZXNzLT5ib3VuZGFyeU9ubHkgPSAodmFsdWUgIT0g
MCk7CisgICAgcmV0dXJuOworCisgIGRlZmF1bHQ6CisgICAgQ0FMTF9FUlJPUl9PUl9FUlJPUl9E
QVRBKCBHTFVfSU5WQUxJRF9FTlVNICk7CisgICAgcmV0dXJuOworICB9CisgIENBTExfRVJST1Jf
T1JfRVJST1JfREFUQSggR0xVX0lOVkFMSURfVkFMVUUgKTsKK30KKworLyogUmV0dXJucyB0ZXNz
ZWxsYXRvciBwcm9wZXJ0eSAqLwordm9pZCBHTEFQSUVOVFJZCitpbnRlcm5hbF9nbHVHZXRUZXNz
UHJvcGVydHkoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZW51bSB3aGljaCwgR0xkb3VibGUgKnZh
bHVlICkKK3sKKyAgIHN3aXRjaCAod2hpY2gpIHsKKyAgIGNhc2UgR0xVX1RFU1NfVE9MRVJBTkNF
OgorICAgICAgLyogdG9sZXJhbmNlIHNob3VsZCBiZSBpbiByYW5nZSBbMC4uMV0gKi8KKyAgICAg
IGFzc2VydCgwLjAgPD0gdGVzcy0+cmVsVG9sZXJhbmNlICYmIHRlc3MtPnJlbFRvbGVyYW5jZSA8
PSAxLjApOworICAgICAgKnZhbHVlPSB0ZXNzLT5yZWxUb2xlcmFuY2U7CisgICAgICBicmVhazsg
ICAgCisgICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfUlVMRToKKyAgICAgIGFzc2VydCh0ZXNzLT53
aW5kaW5nUnVsZSA9PSBHTFVfVEVTU19XSU5ESU5HX09ERCB8fAorCSAgICAgdGVzcy0+d2luZGlu
Z1J1bGUgPT0gR0xVX1RFU1NfV0lORElOR19OT05aRVJPIHx8CisJICAgICB0ZXNzLT53aW5kaW5n
UnVsZSA9PSBHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFIHx8CisJICAgICB0ZXNzLT53aW5kaW5n
UnVsZSA9PSBHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFIHx8CisJICAgICB0ZXNzLT53aW5kaW5n
UnVsZSA9PSBHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPKTsKKyAgICAgICp2YWx1ZT0gdGVz
cy0+d2luZGluZ1J1bGU7CisgICAgICBicmVhazsKKyAgIGNhc2UgR0xVX1RFU1NfQk9VTkRBUllf
T05MWToKKyAgICAgIGFzc2VydCh0ZXNzLT5ib3VuZGFyeU9ubHkgPT0gVFJVRSB8fCB0ZXNzLT5i
b3VuZGFyeU9ubHkgPT0gRkFMU0UpOworICAgICAgKnZhbHVlPSB0ZXNzLT5ib3VuZGFyeU9ubHk7
CisgICAgICBicmVhazsKKyAgIGRlZmF1bHQ6CisgICAgICAqdmFsdWU9IDAuMDsKKyAgICAgIENB
TExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX0lOVkFMSURfRU5VTSApOworICAgICAgYnJlYWs7
CisgICB9Cit9IC8qIGdsdUdldFRlc3NQcm9wZXJ0eSgpICovCisKK3ZvaWQgR0xBUElFTlRSWQor
aW50ZXJuYWxfZ2x1VGVzc05vcm1hbCggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xkb3VibGUgeCwg
R0xkb3VibGUgeSwgR0xkb3VibGUgeiApCit7CisgIHRlc3MtPm5vcm1hbFswXSA9IHg7CisgIHRl
c3MtPm5vcm1hbFsxXSA9IHk7CisgIHRlc3MtPm5vcm1hbFsyXSA9IHo7Cit9CisKK3ZvaWQgR0xB
UElFTlRSWQoraW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBH
TGVudW0gd2hpY2gsIHZvaWQgKEdMQVBJRU5UUlkgKmZuKSgpKQoreworICBzd2l0Y2goIHdoaWNo
ICkgeworICBjYXNlIEdMVV9URVNTX0JFR0lOOgorICAgIHRlc3MtPmNhbGxCZWdpbiA9IChmbiA9
PSBOVUxMKSA/ICZub0JlZ2luIDogKHZvaWQgKEdMQVBJRU5UUlkgKikoR0xlbnVtKSkgZm47Cisg
ICAgcmV0dXJuOworICBjYXNlIEdMVV9URVNTX0JFR0lOX0RBVEE6CisgICAgdGVzcy0+Y2FsbEJl
Z2luRGF0YSA9IChmbiA9PSBOVUxMKSA/CisJJl9fZ2xfbm9CZWdpbkRhdGEgOiAodm9pZCAoR0xB
UElFTlRSWSAqKShHTGVudW0sIHZvaWQgKikpIGZuOworICAgIHJldHVybjsKKyAgY2FzZSBHTFVf
VEVTU19FREdFX0ZMQUc6CisgICAgdGVzcy0+Y2FsbEVkZ2VGbGFnID0gKGZuID09IE5VTEwpID8g
Jm5vRWRnZUZsYWcgOgorCQkJCQkodm9pZCAoR0xBUElFTlRSWSAqKShHTGJvb2xlYW4pKSBmbjsK
KyAgICAvKiBJZiB0aGUgY2xpZW50IHdhbnRzIGJvdW5kYXJ5IGVkZ2VzIHRvIGJlIGZsYWdnZWQs
CisgICAgICogd2UgcmVuZGVyIGV2ZXJ5dGhpbmcgYXMgc2VwYXJhdGUgdHJpYW5nbGVzIChubyBz
dHJpcHMgb3IgZmFucykuCisgICAgICovCisgICAgdGVzcy0+ZmxhZ0JvdW5kYXJ5ID0gKGZuICE9
IE5VTEwpOworICAgIHJldHVybjsKKyAgY2FzZSBHTFVfVEVTU19FREdFX0ZMQUdfREFUQToKKyAg
ICB0ZXNzLT5jYWxsRWRnZUZsYWdEYXRhPSAoZm4gPT0gTlVMTCkgPworCSZfX2dsX25vRWRnZUZs
YWdEYXRhIDogKHZvaWQgKEdMQVBJRU5UUlkgKikoR0xib29sZWFuLCB2b2lkICopKSBmbjsgCisg
ICAgLyogSWYgdGhlIGNsaWVudCB3YW50cyBib3VuZGFyeSBlZGdlcyB0byBiZSBmbGFnZ2VkLAor
ICAgICAqIHdlIHJlbmRlciBldmVyeXRoaW5nIGFzIHNlcGFyYXRlIHRyaWFuZ2xlcyAobm8gc3Ry
aXBzIG9yIGZhbnMpLgorICAgICAqLworICAgIHRlc3MtPmZsYWdCb3VuZGFyeSA9IChmbiAhPSBO
VUxMKTsKKyAgICByZXR1cm47CisgIGNhc2UgR0xVX1RFU1NfVkVSVEVYOgorICAgIHRlc3MtPmNh
bGxWZXJ0ZXggPSAoZm4gPT0gTlVMTCkgPyAmbm9WZXJ0ZXggOgorCQkJCSAgICAgICh2b2lkIChH
TEFQSUVOVFJZICopKHZvaWQgKikpIGZuOworICAgIHJldHVybjsKKyAgY2FzZSBHTFVfVEVTU19W
RVJURVhfREFUQToKKyAgICB0ZXNzLT5jYWxsVmVydGV4RGF0YSA9IChmbiA9PSBOVUxMKSA/CisJ
Jl9fZ2xfbm9WZXJ0ZXhEYXRhIDogKHZvaWQgKEdMQVBJRU5UUlkgKikodm9pZCAqLCB2b2lkICop
KSBmbjsKKyAgICByZXR1cm47CisgIGNhc2UgR0xVX1RFU1NfRU5EOgorICAgIHRlc3MtPmNhbGxF
bmQgPSAoZm4gPT0gTlVMTCkgPyAmbm9FbmQgOiAodm9pZCAoR0xBUElFTlRSWSAqKSh2b2lkKSkg
Zm47CisgICAgcmV0dXJuOworICBjYXNlIEdMVV9URVNTX0VORF9EQVRBOgorICAgIHRlc3MtPmNh
bGxFbmREYXRhID0gKGZuID09IE5VTEwpID8gJl9fZ2xfbm9FbmREYXRhIDogCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAoR0xBUElFTlRSWSAqKSh2b2lkICop
KSBmbjsKKyAgICByZXR1cm47CisgIGNhc2UgR0xVX1RFU1NfRVJST1I6CisgICAgdGVzcy0+Y2Fs
bEVycm9yID0gKGZuID09IE5VTEwpID8gJm5vRXJyb3IgOiAodm9pZCAoR0xBUElFTlRSWSAqKShH
TGVudW0pKSBmbjsKKyAgICByZXR1cm47CisgIGNhc2UgR0xVX1RFU1NfRVJST1JfREFUQToKKyAg
ICB0ZXNzLT5jYWxsRXJyb3JEYXRhID0gKGZuID09IE5VTEwpID8KKwkmX19nbF9ub0Vycm9yRGF0
YSA6ICh2b2lkIChHTEFQSUVOVFJZICopKEdMZW51bSwgdm9pZCAqKSkgZm47CisgICAgcmV0dXJu
OworICBjYXNlIEdMVV9URVNTX0NPTUJJTkU6CisgICAgdGVzcy0+Y2FsbENvbWJpbmUgPSAoZm4g
PT0gTlVMTCkgPyAmbm9Db21iaW5lIDoKKwkodm9pZCAoR0xBUElFTlRSWSAqKShHTGRvdWJsZSBb
M10sdm9pZCAqWzRdLCBHTGZsb2F0IFs0XSwgdm9pZCAqKiApKSBmbjsKKyAgICByZXR1cm47Cisg
IGNhc2UgR0xVX1RFU1NfQ09NQklORV9EQVRBOgorICAgIHRlc3MtPmNhbGxDb21iaW5lRGF0YSA9
IChmbiA9PSBOVUxMKSA/ICZfX2dsX25vQ29tYmluZURhdGEgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkIChHTEFQSUVOVFJZICopKEdMZG91YmxlIFsz
XSwKKwkJCQkJCSAgICAgdm9pZCAqWzRdLCAKKwkJCQkJCSAgICAgR0xmbG9hdCBbNF0sIAorCQkJ
CQkJICAgICB2b2lkICoqLAorCQkJCQkJICAgICB2b2lkICopKSBmbjsKKyAgICByZXR1cm47Cisg
IGNhc2UgR0xVX1RFU1NfTUVTSDoKKyAgICB0ZXNzLT5jYWxsTWVzaCA9IChmbiA9PSBOVUxMKSA/
ICZub01lc2ggOiAodm9pZCAoR0xBUElFTlRSWSAqKShHTFVtZXNoICopKSBmbjsKKyAgICByZXR1
cm47CisgIGRlZmF1bHQ6CisgICAgQ0FMTF9FUlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfSU5WQUxJ
RF9FTlVNICk7CisgICAgcmV0dXJuOworICB9Cit9CisKK3N0YXRpYyBpbnQgQWRkVmVydGV4KCBH
TFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSBjb29yZHNbM10sIHZvaWQgKmRhdGEgKQorewor
ICBHTFVoYWxmRWRnZSAqZTsKKworICBlID0gdGVzcy0+bGFzdEVkZ2U7CisgIGlmKCBlID09IE5V
TEwgKSB7CisgICAgLyogTWFrZSBhIHNlbGYtbG9vcCAob25lIHZlcnRleCwgb25lIGVkZ2UpLiAq
LworCisgICAgZSA9IF9fZ2xfbWVzaE1ha2VFZGdlKCB0ZXNzLT5tZXNoICk7CisgICAgaWYgKGUg
PT0gTlVMTCkgcmV0dXJuIDA7CisgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlLCBlLT5TeW0g
KSApIHJldHVybiAwOworICB9IGVsc2UgeworICAgIC8qIENyZWF0ZSBhIG5ldyB2ZXJ0ZXggYW5k
IGVkZ2Ugd2hpY2ggaW1tZWRpYXRlbHkgZm9sbG93IGUKKyAgICAgKiBpbiB0aGUgb3JkZXJpbmcg
YXJvdW5kIHRoZSBsZWZ0IGZhY2UuCisgICAgICovCisgICAgaWYgKF9fZ2xfbWVzaFNwbGl0RWRn
ZSggZSApID09IE5VTEwpIHJldHVybiAwOworICAgIGUgPSBlLT5MbmV4dDsKKyAgfQorCisgIC8q
IFRoZSBuZXcgdmVydGV4IGlzIG5vdyBlLT5PcmcuICovCisgIGUtPk9yZy0+ZGF0YSA9IGRhdGE7
CisgIGUtPk9yZy0+Y29vcmRzWzBdID0gY29vcmRzWzBdOworICBlLT5PcmctPmNvb3Jkc1sxXSA9
IGNvb3Jkc1sxXTsKKyAgZS0+T3JnLT5jb29yZHNbMl0gPSBjb29yZHNbMl07CisgIAorICAvKiBU
aGUgd2luZGluZyBvZiBhbiBlZGdlIHNheXMgaG93IHRoZSB3aW5kaW5nIG51bWJlciBjaGFuZ2Vz
IGFzIHdlCisgICAqIGNyb3NzIGZyb20gdGhlIGVkZ2UnJ3MgcmlnaHQgZmFjZSB0byBpdHMgbGVm
dCBmYWNlLiAgV2UgYWRkIHRoZQorICAgKiB2ZXJ0aWNlcyBpbiBzdWNoIGFuIG9yZGVyIHRoYXQg
YSBDQ1cgY29udG91ciB3aWxsIGFkZCArMSB0bworICAgKiB0aGUgd2luZGluZyBudW1iZXIgb2Yg
dGhlIHJlZ2lvbiBpbnNpZGUgdGhlIGNvbnRvdXIuCisgICAqLworICBlLT53aW5kaW5nID0gMTsK
KyAgZS0+U3ltLT53aW5kaW5nID0gLTE7CisKKyAgdGVzcy0+bGFzdEVkZ2UgPSBlOworCisgIHJl
dHVybiAxOworfQorCisKK3N0YXRpYyB2b2lkIENhY2hlVmVydGV4KCBHTFV0ZXNzZWxhdG9yICp0
ZXNzLCBHTGRvdWJsZSBjb29yZHNbM10sIHZvaWQgKmRhdGEgKQoreworICBDYWNoZWRWZXJ0ZXgg
KnYgPSAmdGVzcy0+Y2FjaGVbdGVzcy0+Y2FjaGVDb3VudF07CisKKyAgdi0+ZGF0YSA9IGRhdGE7
CisgIHYtPmNvb3Jkc1swXSA9IGNvb3Jkc1swXTsKKyAgdi0+Y29vcmRzWzFdID0gY29vcmRzWzFd
OworICB2LT5jb29yZHNbMl0gPSBjb29yZHNbMl07CisgICsrdGVzcy0+Y2FjaGVDb3VudDsKK30K
KworCitzdGF0aWMgaW50IEVtcHR5Q2FjaGUoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQoreworICBD
YWNoZWRWZXJ0ZXggKnYgPSB0ZXNzLT5jYWNoZTsKKyAgQ2FjaGVkVmVydGV4ICp2TGFzdDsKKwor
ICB0ZXNzLT5tZXNoID0gX19nbF9tZXNoTmV3TWVzaCgpOworICBpZiAodGVzcy0+bWVzaCA9PSBO
VUxMKSByZXR1cm4gMDsKKworICBmb3IoIHZMYXN0ID0gdiArIHRlc3MtPmNhY2hlQ291bnQ7IHYg
PCB2TGFzdDsgKyt2ICkgeworICAgIGlmICggIUFkZFZlcnRleCggdGVzcywgdi0+Y29vcmRzLCB2
LT5kYXRhICkgKSByZXR1cm4gMDsKKyAgfQorICB0ZXNzLT5jYWNoZUNvdW50ID0gMDsKKyAgdGVz
cy0+ZW1wdHlDYWNoZSA9IEZBTFNFOworCisgIHJldHVybiAxOworfQorCisKK3ZvaWQgR0xBUElF
TlRSWQoraW50ZXJuYWxfZ2x1VGVzc1ZlcnRleCggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xkb3Vi
bGUgY29vcmRzWzNdLCB2b2lkICpkYXRhICkKK3sKKyAgaW50IGksIHRvb0xhcmdlID0gRkFMU0U7
CisgIEdMZG91YmxlIHgsIGNsYW1wZWRbM107CisKKyAgUmVxdWlyZVN0YXRlKCB0ZXNzLCBUX0lO
X0NPTlRPVVIgKTsKKworICBpZiggdGVzcy0+ZW1wdHlDYWNoZSApIHsKKyAgICBpZiAoICFFbXB0
eUNhY2hlKCB0ZXNzICkgKSB7CisgICAgICAgQ0FMTF9FUlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVf
T1VUX09GX01FTU9SWSApOworICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGVzcy0+bGFzdEVk
Z2UgPSBOVUxMOworICB9CisgIGZvciggaSA9IDA7IGkgPCAzOyArK2kgKSB7CisgICAgeCA9IGNv
b3Jkc1tpXTsKKyAgICBpZiggeCA8IC0gR0xVX1RFU1NfTUFYX0NPT1JEICkgeworICAgICAgeCA9
IC0gR0xVX1RFU1NfTUFYX0NPT1JEOworICAgICAgdG9vTGFyZ2UgPSBUUlVFOworICAgIH0KKyAg
ICBpZiggeCA+IEdMVV9URVNTX01BWF9DT09SRCApIHsKKyAgICAgIHggPSBHTFVfVEVTU19NQVhf
Q09PUkQ7CisgICAgICB0b29MYXJnZSA9IFRSVUU7CisgICAgfQorICAgIGNsYW1wZWRbaV0gPSB4
OworICB9CisgIGlmKCB0b29MYXJnZSApIHsKKyAgICBDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEo
IEdMVV9URVNTX0NPT1JEX1RPT19MQVJHRSApOworICB9CisKKyAgaWYoIHRlc3MtPm1lc2ggPT0g
TlVMTCApIHsKKyAgICBpZiggdGVzcy0+Y2FjaGVDb3VudCA8IFRFU1NfTUFYX0NBQ0hFICkgewor
ICAgICAgQ2FjaGVWZXJ0ZXgoIHRlc3MsIGNsYW1wZWQsIGRhdGEgKTsKKyAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKCAhRW1wdHlDYWNoZSggdGVzcyApICkgeworICAgICAgIENBTExfRVJS
T1JfT1JfRVJST1JfREFUQSggR0xVX09VVF9PRl9NRU1PUlkgKTsKKyAgICAgICByZXR1cm47Cisg
ICAgfQorICB9CisgIGlmICggIUFkZFZlcnRleCggdGVzcywgY2xhbXBlZCwgZGF0YSApICkgewor
ICAgICAgIENBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX09VVF9PRl9NRU1PUlkgKTsKKyAg
fQorfQorCisKK3ZvaWQgR0xBUElFTlRSWQoraW50ZXJuYWxfZ2x1VGVzc0JlZ2luUG9seWdvbigg
R0xVdGVzc2VsYXRvciAqdGVzcywgdm9pZCAqZGF0YSApCit7CisgIFJlcXVpcmVTdGF0ZSggdGVz
cywgVF9ET1JNQU5UICk7CisKKyAgdGVzcy0+c3RhdGUgPSBUX0lOX1BPTFlHT047CisgIHRlc3Mt
PmNhY2hlQ291bnQgPSAwOworICB0ZXNzLT5lbXB0eUNhY2hlID0gRkFMU0U7CisgIHRlc3MtPm1l
c2ggPSBOVUxMOworCisgIHRlc3MtPnBvbHlnb25EYXRhPSBkYXRhOworfQorCisKK3ZvaWQgR0xB
UElFTlRSWQoraW50ZXJuYWxfZ2x1VGVzc0JlZ2luQ29udG91ciggR0xVdGVzc2VsYXRvciAqdGVz
cyApCit7CisgIFJlcXVpcmVTdGF0ZSggdGVzcywgVF9JTl9QT0xZR09OICk7CisKKyAgdGVzcy0+
c3RhdGUgPSBUX0lOX0NPTlRPVVI7CisgIHRlc3MtPmxhc3RFZGdlID0gTlVMTDsKKyAgaWYoIHRl
c3MtPmNhY2hlQ291bnQgPiAwICkgeworICAgIC8qIEp1c3Qgc2V0IGEgZmxhZyBzbyB3ZSBkb24n
dCBnZXQgY29uZnVzZWQgYnkgZW1wdHkgY29udG91cnMKKyAgICAgKiAtLSB0aGVzZSBjYW4gYmUg
Z2VuZXJhdGVkIGFjY2lkZW50YWxseSB3aXRoIHRoZSBvYnNvbGV0ZQorICAgICAqIE5leHRDb250
b3VyKCkgaW50ZXJmYWNlLgorICAgICAqLworICAgIHRlc3MtPmVtcHR5Q2FjaGUgPSBUUlVFOwor
ICB9Cit9CisKKwordm9pZCBHTEFQSUVOVFJZCitpbnRlcm5hbF9nbHVUZXNzRW5kQ29udG91cigg
R0xVdGVzc2VsYXRvciAqdGVzcyApCit7CisgIFJlcXVpcmVTdGF0ZSggdGVzcywgVF9JTl9DT05U
T1VSICk7CisgIHRlc3MtPnN0YXRlID0gVF9JTl9QT0xZR09OOworfQorCit2b2lkIEdMQVBJRU5U
UlkKK2ludGVybmFsX2dsdVRlc3NFbmRQb2x5Z29uKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKK3sK
KyAgR0xVbWVzaCAqbWVzaDsKKworICBpZiAoc2V0am1wKHRlc3MtPmVudikgIT0gMCkgewkKKyAg
ICAgLyogY29tZSBiYWNrIGhlcmUgaWYgb3V0IG9mIG1lbW9yeSAqLworICAgICBDQUxMX0VSUk9S
X09SX0VSUk9SX0RBVEEoIEdMVV9PVVRfT0ZfTUVNT1JZICk7CisgICAgIHJldHVybjsKKyAgfQor
CisgIFJlcXVpcmVTdGF0ZSggdGVzcywgVF9JTl9QT0xZR09OICk7CisgIHRlc3MtPnN0YXRlID0g
VF9ET1JNQU5UOworCisgIGlmKCB0ZXNzLT5tZXNoID09IE5VTEwgKSB7CisgICAgaWYoICEgdGVz
cy0+ZmxhZ0JvdW5kYXJ5ICYmIHRlc3MtPmNhbGxNZXNoID09ICZub01lc2ggKSB7CisKKyAgICAg
IC8qIFRyeSBzb21lIHNwZWNpYWwgY29kZSB0byBtYWtlIHRoZSBlYXN5IGNhc2VzIGdvIHF1aWNr
bHkKKyAgICAgICAqIChlZy4gY29udmV4IHBvbHlnb25zKS4gIFRoaXMgY29kZSBkb2VzIE5PVCBo
YW5kbGUgbXVsdGlwbGUgY29udG91cnMsCisgICAgICAgKiBpbnRlcnNlY3Rpb25zLCBlZGdlIGZs
YWdzLCBhbmQgb2YgY291cnNlIGl0IGRvZXMgbm90IGdlbmVyYXRlCisgICAgICAgKiBhbiBleHBs
aWNpdCBtZXNoIGVpdGhlci4KKyAgICAgICAqLworICAgICAgaWYoIF9fZ2xfcmVuZGVyQ2FjaGUo
IHRlc3MgKSkgeworCXRlc3MtPnBvbHlnb25EYXRhPSBOVUxMOyAKKwlyZXR1cm47CisgICAgICB9
CisgICAgfQorICAgIGlmICggIUVtcHR5Q2FjaGUoIHRlc3MgKSApIGxvbmdqbXAodGVzcy0+ZW52
LDEpOyAvKiBjb3VsZCd2ZSB1c2VkIGEgbGFiZWwqLworICB9CisKKyAgLyogRGV0ZXJtaW5lIHRo
ZSBwb2x5Z29uIG5vcm1hbCBhbmQgcHJvamVjdCB2ZXJ0aWNlcyBvbnRvIHRoZSBwbGFuZQorICAg
KiBvZiB0aGUgcG9seWdvbi4KKyAgICovCisgIF9fZ2xfcHJvamVjdFBvbHlnb24oIHRlc3MgKTsK
KworICAvKiBfX2dsX2NvbXB1dGVJbnRlcmlvciggdGVzcyApIGNvbXB1dGVzIHRoZSBwbGFuYXIg
YXJyYW5nZW1lbnQgc3BlY2lmaWVkCisgICAqIGJ5IHRoZSBnaXZlbiBjb250b3VycywgYW5kIGZ1
cnRoZXIgc3ViZGl2aWRlcyB0aGlzIGFycmFuZ2VtZW50CisgICAqIGludG8gcmVnaW9ucy4gIEVh
Y2ggcmVnaW9uIGlzIG1hcmtlZCAiaW5zaWRlIiBpZiBpdCBiZWxvbmdzCisgICAqIHRvIHRoZSBw
b2x5Z29uLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUgZ2l2ZW4gYnkgdGVzcy0+d2luZGluZ1J1bGUu
CisgICAqIEVhY2ggaW50ZXJpb3IgcmVnaW9uIGlzIGd1YXJhbnRlZWQgYmUgbW9ub3RvbmUuCisg
ICAqLworICBpZiAoICFfX2dsX2NvbXB1dGVJbnRlcmlvciggdGVzcyApICkgeworICAgICBsb25n
am1wKHRlc3MtPmVudiwxKTsJLyogY291bGQndmUgdXNlZCBhIGxhYmVsICovCisgIH0KKworICBt
ZXNoID0gdGVzcy0+bWVzaDsKKyAgaWYoICEgdGVzcy0+ZmF0YWxFcnJvciApIHsKKyAgICBpbnQg
cmMgPSAxOworCisgICAgLyogSWYgdGhlIHVzZXIgd2FudHMgb25seSB0aGUgYm91bmRhcnkgY29u
dG91cnMsIHdlIHRocm93IGF3YXkgYWxsIGVkZ2VzCisgICAgICogZXhjZXB0IHRob3NlIHdoaWNo
IHNlcGFyYXRlIHRoZSBpbnRlcmlvciBmcm9tIHRoZSBleHRlcmlvci4KKyAgICAgKiBPdGhlcndp
c2Ugd2UgdGVzc2VsbGF0ZSBhbGwgdGhlIHJlZ2lvbnMgbWFya2VkICJpbnNpZGUiLgorICAgICAq
LworICAgIGlmKCB0ZXNzLT5ib3VuZGFyeU9ubHkgKSB7CisgICAgICByYyA9IF9fZ2xfbWVzaFNl
dFdpbmRpbmdOdW1iZXIoIG1lc2gsIDEsIFRSVUUgKTsKKyAgICB9IGVsc2UgeworICAgICAgcmMg
PSBfX2dsX21lc2hUZXNzZWxsYXRlSW50ZXJpb3IoIG1lc2ggKTsgCisgICAgfQorICAgIGlmIChy
YyA9PSAwKSBsb25nam1wKHRlc3MtPmVudiwxKTsJLyogY291bGQndmUgdXNlZCBhIGxhYmVsICov
CisKKyAgICBfX2dsX21lc2hDaGVja01lc2goIG1lc2ggKTsKKworICAgIGlmKCB0ZXNzLT5jYWxs
QmVnaW4gIT0gJm5vQmVnaW4gfHwgdGVzcy0+Y2FsbEVuZCAhPSAmbm9FbmQKKyAgICAgICB8fCB0
ZXNzLT5jYWxsVmVydGV4ICE9ICZub1ZlcnRleCB8fCB0ZXNzLT5jYWxsRWRnZUZsYWcgIT0gJm5v
RWRnZUZsYWcgCisgICAgICAgfHwgdGVzcy0+Y2FsbEJlZ2luRGF0YSAhPSAmX19nbF9ub0JlZ2lu
RGF0YSAKKyAgICAgICB8fCB0ZXNzLT5jYWxsRW5kRGF0YSAhPSAmX19nbF9ub0VuZERhdGEKKyAg
ICAgICB8fCB0ZXNzLT5jYWxsVmVydGV4RGF0YSAhPSAmX19nbF9ub1ZlcnRleERhdGEKKyAgICAg
ICB8fCB0ZXNzLT5jYWxsRWRnZUZsYWdEYXRhICE9ICZfX2dsX25vRWRnZUZsYWdEYXRhICkKKyAg
ICB7CisgICAgICBpZiggdGVzcy0+Ym91bmRhcnlPbmx5ICkgeworCV9fZ2xfcmVuZGVyQm91bmRh
cnkoIHRlc3MsIG1lc2ggKTsgIC8qIG91dHB1dCBib3VuZGFyeSBjb250b3VycyAqLworICAgICAg
fSBlbHNlIHsKKwlfX2dsX3JlbmRlck1lc2goIHRlc3MsIG1lc2ggKTsJICAgLyogb3V0cHV0IHN0
cmlwcyBhbmQgZmFucyAqLworICAgICAgfQorICAgIH0KKyAgICBpZiggdGVzcy0+Y2FsbE1lc2gg
IT0gJm5vTWVzaCApIHsKKworICAgICAgLyogVGhyb3cgYXdheSB0aGUgZXh0ZXJpb3IgZmFjZXMs
IHNvIHRoYXQgYWxsIGZhY2VzIGFyZSBpbnRlcmlvci4KKyAgICAgICAqIFRoaXMgd2F5IHRoZSB1
c2VyIGRvZXNuJ3QgaGF2ZSB0byBjaGVjayB0aGUgImluc2lkZSIgZmxhZywKKyAgICAgICAqIGFu
ZCB3ZSBkb24ndCBuZWVkIHRvIGV2ZW4gcmV2ZWFsIGl0cyBleGlzdGVuY2UuICBJdCBhbHNvIGxl
YXZlcworICAgICAgICogdGhlIGZyZWVkb20gZm9yIGFuIGltcGxlbWVudGF0aW9uIHRvIG5vdCBn
ZW5lcmF0ZSB0aGUgZXh0ZXJpb3IKKyAgICAgICAqIGZhY2VzIGluIHRoZSBmaXJzdCBwbGFjZS4K
KyAgICAgICAqLworICAgICAgX19nbF9tZXNoRGlzY2FyZEV4dGVyaW9yKCBtZXNoICk7CisgICAg
ICAoKnRlc3MtPmNhbGxNZXNoKSggbWVzaCApOwkJLyogdXNlciB3YW50cyB0aGUgbWVzaCBpdHNl
bGYgKi8KKyAgICAgIHRlc3MtPm1lc2ggPSBOVUxMOworICAgICAgdGVzcy0+cG9seWdvbkRhdGE9
IE5VTEw7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisgIF9fZ2xfbWVzaERlbGV0ZU1lc2go
IG1lc2ggKTsKKyAgdGVzcy0+cG9seWdvbkRhdGE9IE5VTEw7CisgIHRlc3MtPm1lc2ggPSBOVUxM
OworfQorCisKKy8qWFhYYmx5dGhlIHVudXNlZCBmdW5jdGlvbiovCisjaWYgMAordm9pZCBHTEFQ
SUVOVFJZCitnbHVEZWxldGVNZXNoKCBHTFVtZXNoICptZXNoICkKK3sKKyAgX19nbF9tZXNoRGVs
ZXRlTWVzaCggbWVzaCApOworfQorI2VuZGlmCisKKworCisvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogT2Jzb2xldGUgY2FsbHMg
LS0gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKworI2lmIDAKK3ZvaWQgR0xBUElFTlRS
WQorZ2x1QmVnaW5Qb2x5Z29uKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKK3sKKyAgZ2x1VGVzc0Jl
Z2luUG9seWdvbiggdGVzcywgTlVMTCApOworICBnbHVUZXNzQmVnaW5Db250b3VyKCB0ZXNzICk7
Cit9CisKKworLypBUkdTVVNFRCovCit2b2lkIEdMQVBJRU5UUlkKK2dsdU5leHRDb250b3VyKCBH
TFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGVudW0gdHlwZSApCit7CisgIGdsdVRlc3NFbmRDb250b3Vy
KCB0ZXNzICk7CisgIGdsdVRlc3NCZWdpbkNvbnRvdXIoIHRlc3MgKTsKK30KKworCit2b2lkIEdM
QVBJRU5UUlkKK2dsdUVuZFBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQoreworICBnbHVU
ZXNzRW5kQ29udG91ciggdGVzcyApOworICBnbHVUZXNzRW5kUG9seWdvbiggdGVzcyApOworfQor
I2VuZGlmCkluZGV4OiBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE3MyBAQAorLyoKKyoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRo
ZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorKiogbWFkZSBzdWJqZWN0IHRvIGFu
IGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQorKiogU29m
dHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50
cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2Yg
dGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQorKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQorKiogb2YgdGhl
IExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMs
IDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0x
MzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCisq
KiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2Fy
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVT
UyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCisqKiBESVNDTEFJTUVELCBJ
TkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQK
KyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwg
RklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVO
VC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBT
YW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5
IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKKyoqIEluYy4gVGhlIE9y
aWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywg
SW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRp
ZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRp
b24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1
bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQorKiogT3BlbkdMKFIpIEdyYXBo
aWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyoq
IEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGli
cmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9w
ZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCisqKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9u
IDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKKyoqIHdhcyBj
cmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50
YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRs
eSB2ZXJpZmllZCBhcyBiZWluZworKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJz
aW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisqKgorKi8KKy8qCisqKiBBdXRob3I6IEVyaWMgVmVh
Y2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlzaW9uJAorKiogJEhlYWRlcjogLy9k
ZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvdGVzcy5oIzYgJAorKi8KKworI2lmbmRlZiBf
X3Rlc3NfaF8KKyNkZWZpbmUgX190ZXNzX2hfCisKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKworI2lu
Y2x1ZGUgIjNyZHBhcnR5L2dsdS9pbnRlcm5hbF9nbHUuaCIKKyNpbmNsdWRlICIzcmRwYXJ0eS9n
bHUvbGlidGVzcy9kaWN0LmgiCisjaW5jbHVkZSAiM3JkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5o
IgorI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oIgorCisvKiBUaGUg
YmVnaW4vZW5kIGNhbGxzIG11c3QgYmUgcHJvcGVybHkgbmVzdGVkLiAgV2Uga2VlcCB0cmFjayBv
ZgorICogdGhlIGN1cnJlbnQgc3RhdGUgdG8gZW5mb3JjZSB0aGUgb3JkZXJpbmcuCisgKi8KK2Vu
dW0gVGVzc1N0YXRlIHsgVF9ET1JNQU5ULCBUX0lOX1BPTFlHT04sIFRfSU5fQ09OVE9VUiB9Owor
CisvKiBXZSBjYWNoZSB2ZXJ0ZXggZGF0YSBmb3Igc2luZ2xlLWNvbnRvdXIgcG9seWdvbnMgc28g
dGhhdCB3ZSBjYW4KKyAqIHRyeSBhIHF1aWNrLWFuZC1kaXJ0eSBkZWNvbXBvc2l0aW9uIGZpcnN0
LgorICovCisjZGVmaW5lIFRFU1NfTUFYX0NBQ0hFCTEwMAorCit0eXBlZGVmIHN0cnVjdCBDYWNo
ZWRWZXJ0ZXggeworICBHTGRvdWJsZQljb29yZHNbM107CisgIHZvaWQJCSpkYXRhOworfSBDYWNo
ZWRWZXJ0ZXg7CisKK3N0cnVjdCBHTFV0ZXNzZWxhdG9yIHsKKworICAvKioqIHN0YXRlIG5lZWRl
ZCBmb3IgY29sbGVjdGluZyB0aGUgaW5wdXQgZGF0YSAqKiovCisKKyAgZW51bSBUZXNzU3RhdGUg
c3RhdGU7CQkvKiB3aGF0IGJlZ2luL2VuZCBjYWxscyBoYXZlIHdlIHNlZW4/ICovCisKKyAgR0xV
aGFsZkVkZ2UJKmxhc3RFZGdlOwkvKiBsYXN0RWRnZS0+T3JnIGlzIHRoZSBtb3N0IHJlY2VudCB2
ZXJ0ZXggKi8KKyAgR0xVbWVzaAkqbWVzaDsJCS8qIHN0b3JlcyB0aGUgaW5wdXQgY29udG91cnMs
IGFuZCBldmVudHVhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0
ZXNzZWxsYXRpb24gaXRzZWxmICovCisKKyAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxFcnJvciko
IEdMZW51bSBlcnJudW0gKTsKKworICAvKioqIHN0YXRlIG5lZWRlZCBmb3IgcHJvamVjdGluZyBv
bnRvIHRoZSBzd2VlcCBwbGFuZSAqKiovCisKKyAgR0xkb3VibGUJbm9ybWFsWzNdOwkvKiB1c2Vy
LXNwZWNpZmllZCBub3JtYWwgKGlmIHByb3ZpZGVkKSAqLworICBHTGRvdWJsZQlzVW5pdFszXTsJ
LyogdW5pdCB2ZWN0b3IgaW4gcy1kaXJlY3Rpb24gKGRlYnVnZ2luZykgKi8KKyAgR0xkb3VibGUJ
dFVuaXRbM107CS8qIHVuaXQgdmVjdG9yIGluIHQtZGlyZWN0aW9uIChkZWJ1Z2dpbmcpICovCisK
KyAgLyoqKiBzdGF0ZSBuZWVkZWQgZm9yIHRoZSBsaW5lIHN3ZWVwICoqKi8KKworICBHTGRvdWJs
ZQlyZWxUb2xlcmFuY2U7CS8qIHRvbGVyYW5jZSBmb3IgbWVyZ2luZyBmZWF0dXJlcyAqLworICBH
TGVudW0Jd2luZGluZ1J1bGU7CS8qIHJ1bGUgZm9yIGRldGVybWluaW5nIHBvbHlnb24gaW50ZXJp
b3IgKi8KKyAgR0xib29sZWFuCWZhdGFsRXJyb3I7CS8qIGZhdGFsIGVycm9yOiBuZWVkZWQgY29t
YmluZSBjYWxsYmFjayAqLworCisgIERpY3QJCSpkaWN0OwkJLyogZWRnZSBkaWN0aW9uYXJ5IGZv
ciBzd2VlcCBsaW5lICovCisgIFByaW9yaXR5UQkqcHE7CQkvKiBwcmlvcml0eSBxdWV1ZSBvZiB2
ZXJ0ZXggZXZlbnRzICovCisgIEdMVXZlcnRleAkqZXZlbnQ7CQkvKiBjdXJyZW50IHN3ZWVwIGV2
ZW50IGJlaW5nIHByb2Nlc3NlZCAqLworCisgIHZvaWQJCShHTEFQSUVOVFJZICpjYWxsQ29tYmlu
ZSkoIEdMZG91YmxlIGNvb3Jkc1szXSwgdm9pZCAqZGF0YVs0XSwKKwkJCSAgICAgICAgR0xmbG9h
dCB3ZWlnaHRbNF0sIHZvaWQgKipvdXREYXRhICk7CisKKyAgLyoqKiBzdGF0ZSBuZWVkZWQgZm9y
IHJlbmRlcmluZyBjYWxsYmFja3MgKHNlZSByZW5kZXIuYykgKioqLworCisgIEdMYm9vbGVhbglm
bGFnQm91bmRhcnk7CS8qIG1hcmsgYm91bmRhcnkgZWRnZXMgKHVzZSBFZGdlRmxhZykgKi8KKyAg
R0xib29sZWFuCWJvdW5kYXJ5T25seTsJLyogRXh0cmFjdCBjb250b3Vycywgbm90IHRyaWFuZ2xl
cyAqLworICBHTFVmYWNlCSpsb25lbHlUcmlMaXN0OworICAgIC8qIGxpc3Qgb2YgdHJpYW5nbGVz
IHdoaWNoIGNvdWxkIG5vdCBiZSByZW5kZXJlZCBhcyBzdHJpcHMgb3IgZmFucyAqLworCisgIHZv
aWQJCShHTEFQSUVOVFJZICpjYWxsQmVnaW4pKCBHTGVudW0gdHlwZSApOworICB2b2lkCQkoR0xB
UElFTlRSWSAqY2FsbEVkZ2VGbGFnKSggR0xib29sZWFuIGJvdW5kYXJ5RWRnZSApOworICB2b2lk
CQkoR0xBUElFTlRSWSAqY2FsbFZlcnRleCkoIHZvaWQgKmRhdGEgKTsKKyAgdm9pZAkJKEdMQVBJ
RU5UUlkgKmNhbGxFbmQpKCB2b2lkICk7CisgIHZvaWQJCShHTEFQSUVOVFJZICpjYWxsTWVzaCko
IEdMVW1lc2ggKm1lc2ggKTsKKworCisgIC8qKiogc3RhdGUgbmVlZGVkIHRvIGNhY2hlIHNpbmds
ZS1jb250b3VyIHBvbHlnb25zIGZvciByZW5kZXJDYWNoZSgpICovCisKKyAgR0xib29sZWFuCWVt
cHR5Q2FjaGU7CQkvKiBlbXB0eSBjYWNoZSBvbiBuZXh0IHZlcnRleCgpIGNhbGwgKi8KKyAgaW50
CQljYWNoZUNvdW50OwkJLyogbnVtYmVyIG9mIGNhY2hlZCB2ZXJ0aWNlcyAqLworICBDYWNoZWRW
ZXJ0ZXgJY2FjaGVbVEVTU19NQVhfQ0FDSEVdOwkvKiB0aGUgdmVydGV4IGRhdGEgKi8KKworICAv
KioqIHJlbmRlcmluZyBjYWxsYmFja3MgdGhhdCBhbHNvIHBhc3MgcG9seWdvbiBkYXRhICAqKiov
IAorICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbEJlZ2luRGF0YSkoIEdMZW51bSB0eXBlLCB2b2lk
ICpwb2x5Z29uRGF0YSApOworICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbEVkZ2VGbGFnRGF0YSko
IEdMYm9vbGVhbiBib3VuZGFyeUVkZ2UsIAorCQkJCSAgICAgdm9pZCAqcG9seWdvbkRhdGEgKTsK
KyAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxWZXJ0ZXhEYXRhKSggdm9pZCAqZGF0YSwgdm9pZCAq
cG9seWdvbkRhdGEgKTsKKyAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxFbmREYXRhKSggdm9pZCAq
cG9seWdvbkRhdGEgKTsKKyAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxFcnJvckRhdGEpKCBHTGVu
dW0gZXJybnVtLCB2b2lkICpwb2x5Z29uRGF0YSApOworICB2b2lkCQkoR0xBUElFTlRSWSAqY2Fs
bENvbWJpbmVEYXRhKSggR0xkb3VibGUgY29vcmRzWzNdLCB2b2lkICpkYXRhWzRdLAorCQkJCSAg
ICBHTGZsb2F0IHdlaWdodFs0XSwgdm9pZCAqKm91dERhdGEsCisJCQkJICAgIHZvaWQgKnBvbHln
b25EYXRhICk7CisKKyAgam1wX2J1ZiBlbnY7CQkJLyogcGxhY2UgdG8ganVtcCB0byB3aGVuIG1l
bUFsbG9jcyBmYWlsICovCisKKyAgdm9pZCAqcG9seWdvbkRhdGE7CQkvKiBjbGllbnQgZGF0YSBm
b3IgY3VycmVudCBwb2x5Z29uICovCit9OworCit2b2lkIEdMQVBJRU5UUlkgX19nbF9ub0JlZ2lu
RGF0YSggR0xlbnVtIHR5cGUsIHZvaWQgKnBvbHlnb25EYXRhICk7Cit2b2lkIEdMQVBJRU5UUlkg
X19nbF9ub0VkZ2VGbGFnRGF0YSggR0xib29sZWFuIGJvdW5kYXJ5RWRnZSwgdm9pZCAqcG9seWdv
bkRhdGEgKTsKK3ZvaWQgR0xBUElFTlRSWSBfX2dsX25vVmVydGV4RGF0YSggdm9pZCAqZGF0YSwg
dm9pZCAqcG9seWdvbkRhdGEgKTsKK3ZvaWQgR0xBUElFTlRSWSBfX2dsX25vRW5kRGF0YSggdm9p
ZCAqcG9seWdvbkRhdGEgKTsKK3ZvaWQgR0xBUElFTlRSWSBfX2dsX25vRXJyb3JEYXRhKCBHTGVu
dW0gZXJybnVtLCB2b2lkICpwb2x5Z29uRGF0YSApOwordm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9D
b21iaW5lRGF0YSggR0xkb3VibGUgY29vcmRzWzNdLCB2b2lkICpkYXRhWzRdLAorCQkJIEdMZmxv
YXQgd2VpZ2h0WzRdLCB2b2lkICoqb3V0RGF0YSwKKwkJCSB2b2lkICpwb2x5Z29uRGF0YSApOwor
CisjZGVmaW5lIENBTExfQkVHSU5fT1JfQkVHSU5fREFUQShhKSBcCisgICBpZiAodGVzcy0+Y2Fs
bEJlZ2luRGF0YSAhPSAmX19nbF9ub0JlZ2luRGF0YSkgXAorICAgICAgKCp0ZXNzLT5jYWxsQmVn
aW5EYXRhKSgoYSksdGVzcy0+cG9seWdvbkRhdGEpOyBcCisgICBlbHNlICgqdGVzcy0+Y2FsbEJl
Z2luKSgoYSkpOworCisjZGVmaW5lIENBTExfVkVSVEVYX09SX1ZFUlRFWF9EQVRBKGEpIFwKKyAg
IGlmICh0ZXNzLT5jYWxsVmVydGV4RGF0YSAhPSAmX19nbF9ub1ZlcnRleERhdGEpIFwKKyAgICAg
ICgqdGVzcy0+Y2FsbFZlcnRleERhdGEpKChhKSx0ZXNzLT5wb2x5Z29uRGF0YSk7IFwKKyAgIGVs
c2UgKCp0ZXNzLT5jYWxsVmVydGV4KSgoYSkpOworCisjZGVmaW5lIENBTExfRURHRV9GTEFHX09S
X0VER0VfRkxBR19EQVRBKGEpIFwKKyAgIGlmICh0ZXNzLT5jYWxsRWRnZUZsYWdEYXRhICE9ICZf
X2dsX25vRWRnZUZsYWdEYXRhKSBcCisgICAgICAoKnRlc3MtPmNhbGxFZGdlRmxhZ0RhdGEpKChh
KSx0ZXNzLT5wb2x5Z29uRGF0YSk7IFwKKyAgIGVsc2UgKCp0ZXNzLT5jYWxsRWRnZUZsYWcpKChh
KSk7CisKKyNkZWZpbmUgQ0FMTF9FTkRfT1JfRU5EX0RBVEEoKSBcCisgICBpZiAodGVzcy0+Y2Fs
bEVuZERhdGEgIT0gJl9fZ2xfbm9FbmREYXRhKSBcCisgICAgICAoKnRlc3MtPmNhbGxFbmREYXRh
KSh0ZXNzLT5wb2x5Z29uRGF0YSk7IFwKKyAgIGVsc2UgKCp0ZXNzLT5jYWxsRW5kKSgpOworCisj
ZGVmaW5lIENBTExfQ09NQklORV9PUl9DT01CSU5FX0RBVEEoYSxiLGMsZCkgXAorICAgaWYgKHRl
c3MtPmNhbGxDb21iaW5lRGF0YSAhPSAmX19nbF9ub0NvbWJpbmVEYXRhKSBcCisgICAgICAoKnRl
c3MtPmNhbGxDb21iaW5lRGF0YSkoKGEpLChiKSwoYyksKGQpLHRlc3MtPnBvbHlnb25EYXRhKTsg
XAorICAgZWxzZSAoKnRlc3MtPmNhbGxDb21iaW5lKSgoYSksKGIpLChjKSwoZCkpOworCisjZGVm
aW5lIENBTExfRVJST1JfT1JfRVJST1JfREFUQShhKSBcCisgICBpZiAodGVzcy0+Y2FsbEVycm9y
RGF0YSAhPSAmX19nbF9ub0Vycm9yRGF0YSkgXAorICAgICAgKCp0ZXNzLT5jYWxsRXJyb3JEYXRh
KSgoYSksdGVzcy0+cG9seWdvbkRhdGEpOyBcCisgICBlbHNlICgqdGVzcy0+Y2FsbEVycm9yKSgo
YSkpOworCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3MvdGVzc21v
bm8uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25v
LmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlLzNyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25v
LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjA5IEBACisvKgorKiogTGljZW5zZSBBcHBsaWNh
YmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisq
KiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4g
dGhlIFNHSSBGcmVlCisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxp
Y2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0
byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRh
aW4gYSBjb3B5CisqKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBh
dHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50
YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5j
b20vcHJvamVjdHMvRnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUg
TGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJh
c2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElP
TlMKKyoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1Q
TElFRCBXQVJSQU5USUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNB
VElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0Us
IEFORCBOT04tSU5GUklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2lu
YWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4y
LjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBo
aWNzLAorKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAw
MCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNy
ZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJl
aW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zp
c2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxp
c2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhl
CisqKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24g
MS4yLjEpLCByZWxlYXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGlj
cyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3Zl
bWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRv
dyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhp
cyBzb2Z0d2FyZQorKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEu
Mi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBu
b3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0
aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoK
KyoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNp
b24kCisqKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy90ZXNzbW9u
by5jIzUgJAorKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
CisjaW5jbHVkZSAiM3JkcGFydHkvZ2x1L2dsdW9zLmgiCisjaW5jbHVkZSAiM3JkcGFydHkvZ2x1
L2xpYnRlc3MvZ2VvbS5oIgorI2luY2x1ZGUgIjNyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIK
KyNpbmNsdWRlICIzcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5oIgorCisjZGVmaW5lIEFk
ZFdpbmRpbmcoZURzdCxlU3JjKQkoZURzdC0+d2luZGluZyArPSBlU3JjLT53aW5kaW5nLCBcCisJ
CQkJIGVEc3QtPlN5bS0+d2luZGluZyArPSBlU3JjLT5TeW0tPndpbmRpbmcpCisKKy8qIF9fZ2xf
bWVzaFRlc3NlbGxhdGVNb25vUmVnaW9uKCBmYWNlICkgdGVzc2VsbGF0ZXMgYSBtb25vdG9uZSBy
ZWdpb24KKyAqICh3aGF0IGVsc2Ugd291bGQgaXQgZG8/PykgIFRoZSByZWdpb24gbXVzdCBjb25z
aXN0IG9mIGEgc2luZ2xlCisgKiBsb29wIG9mIGhhbGYtZWRnZXMgKHNlZSBtZXNoLmgpIG9yaWVu
dGVkIENDVy4gICJNb25vdG9uZSIgaW4gdGhpcworICogY2FzZSBtZWFucyB0aGF0IGFueSB2ZXJ0
aWNhbCBsaW5lIGludGVyc2VjdHMgdGhlIGludGVyaW9yIG9mIHRoZQorICogcmVnaW9uIGluIGEg
c2luZ2xlIGludGVydmFsLiAgCisgKgorICogVGVzc2VsbGF0aW9uIGNvbnNpc3RzIG9mIGFkZGlu
ZyBpbnRlcmlvciBlZGdlcyAoYWN0dWFsbHkgcGFpcnMgb2YKKyAqIGhhbGYtZWRnZXMpLCB0byBz
cGxpdCB0aGUgcmVnaW9uIGludG8gbm9uLW92ZXJsYXBwaW5nIHRyaWFuZ2xlcy4KKyAqCisgKiBU
aGUgYmFzaWMgaWRlYSBpcyBleHBsYWluZWQgaW4gUHJlcGFyYXRhIGFuZCBTaGFtb3MgKHdoaWNo
IEkgZG9uJyd0CisgKiBoYXZlIGhhbmR5IHJpZ2h0IG5vdyksIGFsdGhvdWdoIHRoZWlyIGltcGxl
bWVudGF0aW9uIGlzIG1vcmUKKyAqIGNvbXBsaWNhdGVkIHRoYW4gdGhpcyBvbmUuICBUaGUgYXJl
IHR3byBlZGdlIGNoYWlucywgYW4gdXBwZXIgY2hhaW4KKyAqIGFuZCBhIGxvd2VyIGNoYWluLiAg
V2UgcHJvY2VzcyBhbGwgdmVydGljZXMgZnJvbSBib3RoIGNoYWlucyBpbiBvcmRlciwKKyAqIGZy
b20gcmlnaHQgdG8gbGVmdC4KKyAqCisgKiBUaGUgYWxnb3JpdGhtIGVuc3VyZXMgdGhhdCB0aGUg
Zm9sbG93aW5nIGludmFyaWFudCBob2xkcyBhZnRlciBlYWNoCisgKiB2ZXJ0ZXggaXMgcHJvY2Vz
c2VkOiB0aGUgdW50ZXNzZWxsYXRlZCByZWdpb24gY29uc2lzdHMgb2YgdHdvCisgKiBjaGFpbnMs
IHdoZXJlIG9uZSBjaGFpbiAoc2F5IHRoZSB1cHBlcikgaXMgYSBzaW5nbGUgZWRnZSwgYW5kCisg
KiB0aGUgb3RoZXIgY2hhaW4gaXMgY29uY2F2ZS4gIFRoZSBsZWZ0IHZlcnRleCBvZiB0aGUgc2lu
Z2xlIGVkZ2UKKyAqIGlzIGFsd2F5cyB0byB0aGUgbGVmdCBvZiBhbGwgdmVydGljZXMgaW4gdGhl
IGNvbmNhdmUgY2hhaW4uCisgKgorICogRWFjaCBzdGVwIGNvbnNpc3RzIG9mIGFkZGluZyB0aGUg
cmlnaHRtb3N0IHVucHJvY2Vzc2VkIHZlcnRleCB0byBvbmUKKyAqIG9mIHRoZSB0d28gY2hhaW5z
LCBhbmQgZm9ybWluZyBhIGZhbiBvZiB0cmlhbmdsZXMgZnJvbSB0aGUgcmlnaHRtb3N0CisgKiBv
ZiB0d28gY2hhaW4gZW5kcG9pbnRzLiAgRGV0ZXJtaW5pbmcgd2hldGhlciB3ZSBjYW4gYWRkIGVh
Y2ggdHJpYW5nbGUKKyAqIHRvIHRoZSBmYW4gaXMgYSBzaW1wbGUgb3JpZW50YXRpb24gdGVzdC4g
IEJ5IG1ha2luZyB0aGUgZmFuIGFzIGxhcmdlCisgKiBhcyBwb3NzaWJsZSwgd2UgcmVzdG9yZSB0
aGUgaW52YXJpYW50IChjaGVjayBpdCB5b3Vyc2VsZikuCisgKi8KK2ludCBfX2dsX21lc2hUZXNz
ZWxsYXRlTW9ub1JlZ2lvbiggR0xVZmFjZSAqZmFjZSApCit7CisgIEdMVWhhbGZFZGdlICp1cCwg
KmxvOworCisgIC8qIEFsbCBlZGdlcyBhcmUgb3JpZW50ZWQgQ0NXIGFyb3VuZCB0aGUgYm91bmRh
cnkgb2YgdGhlIHJlZ2lvbi4KKyAgICogRmlyc3QsIGZpbmQgdGhlIGhhbGYtZWRnZSB3aG9zZSBv
cmlnaW4gdmVydGV4IGlzIHJpZ2h0bW9zdC4KKyAgICogU2luY2UgdGhlIHN3ZWVwIGdvZXMgZnJv
bSBsZWZ0IHRvIHJpZ2h0LCBmYWNlLT5hbkVkZ2Ugc2hvdWxkCisgICAqIGJlIGNsb3NlIHRvIHRo
ZSBlZGdlIHdlIHdhbnQuCisgICAqLworICB1cCA9IGZhY2UtPmFuRWRnZTsKKyAgYXNzZXJ0KCB1
cC0+TG5leHQgIT0gdXAgJiYgdXAtPkxuZXh0LT5MbmV4dCAhPSB1cCApOworCisgIGZvciggOyBW
ZXJ0TGVxKCB1cC0+RHN0LCB1cC0+T3JnICk7IHVwID0gdXAtPkxwcmV2ICkKKyAgICA7CisgIGZv
ciggOyBWZXJ0TGVxKCB1cC0+T3JnLCB1cC0+RHN0ICk7IHVwID0gdXAtPkxuZXh0ICkKKyAgICA7
CisgIGxvID0gdXAtPkxwcmV2OworCisgIHdoaWxlKCB1cC0+TG5leHQgIT0gbG8gKSB7CisgICAg
aWYoIFZlcnRMZXEoIHVwLT5Ec3QsIGxvLT5PcmcgKSkgeworICAgICAgLyogdXAtPkRzdCBpcyBv
biB0aGUgbGVmdC4gIEl0IGlzIHNhZmUgdG8gZm9ybSB0cmlhbmdsZXMgZnJvbSBsby0+T3JnLgor
ICAgICAgICogVGhlIEVkZ2VHb2VzTGVmdCB0ZXN0IGd1YXJhbnRlZXMgcHJvZ3Jlc3MgZXZlbiB3
aGVuIHNvbWUgdHJpYW5nbGVzCisgICAgICAgKiBhcmUgQ1csIGdpdmVuIHRoYXQgdGhlIHVwcGVy
IGFuZCBsb3dlciBjaGFpbnMgYXJlIHRydWx5IG1vbm90b25lLgorICAgICAgICovCisgICAgICB3
aGlsZSggbG8tPkxuZXh0ICE9IHVwICYmIChFZGdlR29lc0xlZnQoIGxvLT5MbmV4dCApCisJICAg
ICB8fCBFZGdlU2lnbiggbG8tPk9yZywgbG8tPkRzdCwgbG8tPkxuZXh0LT5Ec3QgKSA8PSAwICkp
IHsKKwlHTFVoYWxmRWRnZSAqdGVtcEhhbGZFZGdlPSBfX2dsX21lc2hDb25uZWN0KCBsby0+TG5l
eHQsIGxvICk7CisJaWYgKHRlbXBIYWxmRWRnZSA9PSBOVUxMKSByZXR1cm4gMDsKKwlsbyA9IHRl
bXBIYWxmRWRnZS0+U3ltOworICAgICAgfQorICAgICAgbG8gPSBsby0+THByZXY7CisgICAgfSBl
bHNlIHsKKyAgICAgIC8qIGxvLT5PcmcgaXMgb24gdGhlIGxlZnQuICBXZSBjYW4gbWFrZSBDQ1cg
dHJpYW5nbGVzIGZyb20gdXAtPkRzdC4gKi8KKyAgICAgIHdoaWxlKCBsby0+TG5leHQgIT0gdXAg
JiYgKEVkZ2VHb2VzUmlnaHQoIHVwLT5McHJldiApCisJICAgICB8fCBFZGdlU2lnbiggdXAtPkRz
dCwgdXAtPk9yZywgdXAtPkxwcmV2LT5PcmcgKSA+PSAwICkpIHsKKwlHTFVoYWxmRWRnZSAqdGVt
cEhhbGZFZGdlPSBfX2dsX21lc2hDb25uZWN0KCB1cCwgdXAtPkxwcmV2ICk7CisJaWYgKHRlbXBI
YWxmRWRnZSA9PSBOVUxMKSByZXR1cm4gMDsKKwl1cCA9IHRlbXBIYWxmRWRnZS0+U3ltOworICAg
ICAgfQorICAgICAgdXAgPSB1cC0+TG5leHQ7CisgICAgfQorICB9CisKKyAgLyogTm93IGxvLT5P
cmcgPT0gdXAtPkRzdCA9PSB0aGUgbGVmdG1vc3QgdmVydGV4LiAgVGhlIHJlbWFpbmluZyByZWdp
b24KKyAgICogY2FuIGJlIHRlc3NlbGxhdGVkIGluIGEgZmFuIGZyb20gdGhpcyBsZWZ0bW9zdCB2
ZXJ0ZXguCisgICAqLworICBhc3NlcnQoIGxvLT5MbmV4dCAhPSB1cCApOworICB3aGlsZSggbG8t
PkxuZXh0LT5MbmV4dCAhPSB1cCApIHsKKyAgICBHTFVoYWxmRWRnZSAqdGVtcEhhbGZFZGdlPSBf
X2dsX21lc2hDb25uZWN0KCBsby0+TG5leHQsIGxvICk7CisgICAgaWYgKHRlbXBIYWxmRWRnZSA9
PSBOVUxMKSByZXR1cm4gMDsKKyAgICBsbyA9IHRlbXBIYWxmRWRnZS0+U3ltOworICB9CisKKyAg
cmV0dXJuIDE7Cit9CisKKworLyogX19nbF9tZXNoVGVzc2VsbGF0ZUludGVyaW9yKCBtZXNoICkg
dGVzc2VsbGF0ZXMgZWFjaCByZWdpb24gb2YKKyAqIHRoZSBtZXNoIHdoaWNoIGlzIG1hcmtlZCAi
aW5zaWRlIiB0aGUgcG9seWdvbi4gIEVhY2ggc3VjaCByZWdpb24KKyAqIG11c3QgYmUgbW9ub3Rv
bmUuCisgKi8KK2ludCBfX2dsX21lc2hUZXNzZWxsYXRlSW50ZXJpb3IoIEdMVW1lc2ggKm1lc2gg
KQoreworICBHTFVmYWNlICpmLCAqbmV4dDsKKworICAvKkxJTlRFRCovCisgIGZvciggZiA9IG1l
c2gtPmZIZWFkLm5leHQ7IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0gbmV4dCApIHsKKyAgICAvKiBN
YWtlIHN1cmUgd2UgZG9uJyd0IHRyeSB0byB0ZXNzZWxsYXRlIHRoZSBuZXcgdHJpYW5nbGVzLiAq
LworICAgIG5leHQgPSBmLT5uZXh0OworICAgIGlmKCBmLT5pbnNpZGUgKSB7CisgICAgICBpZiAo
ICFfX2dsX21lc2hUZXNzZWxsYXRlTW9ub1JlZ2lvbiggZiApICkgcmV0dXJuIDA7CisgICAgfQor
ICB9CisKKyAgcmV0dXJuIDE7Cit9CisKKworLyogX19nbF9tZXNoRGlzY2FyZEV4dGVyaW9yKCBt
ZXNoICkgemFwcyAoaWUuIHNldHMgdG8gTlVMTCkgYWxsIGZhY2VzCisgKiB3aGljaCBhcmUgbm90
IG1hcmtlZCAiaW5zaWRlIiB0aGUgcG9seWdvbi4gIFNpbmNlIGZ1cnRoZXIgbWVzaCBvcGVyYXRp
b25zCisgKiBvbiBOVUxMIGZhY2VzIGFyZSBub3QgYWxsb3dlZCwgdGhlIG1haW4gcHVycG9zZSBp
cyB0byBjbGVhbiB1cCB0aGUKKyAqIG1lc2ggc28gdGhhdCBleHRlcmlvciBsb29wcyBhcmUgbm90
IHJlcHJlc2VudGVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4KKyAqLwordm9pZCBfX2dsX21lc2hE
aXNjYXJkRXh0ZXJpb3IoIEdMVW1lc2ggKm1lc2ggKQoreworICBHTFVmYWNlICpmLCAqbmV4dDsK
KworICAvKkxJTlRFRCovCisgIGZvciggZiA9IG1lc2gtPmZIZWFkLm5leHQ7IGYgIT0gJm1lc2gt
PmZIZWFkOyBmID0gbmV4dCApIHsKKyAgICAvKiBTaW5jZSBmIHdpbGwgYmUgZGVzdHJveWVkLCBz
YXZlIGl0cyBuZXh0IHBvaW50ZXIuICovCisgICAgbmV4dCA9IGYtPm5leHQ7CisgICAgaWYoICEg
Zi0+aW5zaWRlICkgeworICAgICAgX19nbF9tZXNoWmFwRmFjZSggZiApOworICAgIH0KKyAgfQor
fQorCisjZGVmaW5lIE1BUktFRF9GT1JfREVMRVRJT04JMHg3ZmZmZmZmZgorCisvKiBfX2dsX21l
c2hTZXRXaW5kaW5nTnVtYmVyKCBtZXNoLCB2YWx1ZSwga2VlcE9ubHlCb3VuZGFyeSApIHJlc2V0
cyB0aGUKKyAqIHdpbmRpbmcgbnVtYmVycyBvbiBhbGwgZWRnZXMgc28gdGhhdCByZWdpb25zIG1h
cmtlZCAiaW5zaWRlIiB0aGUKKyAqIHBvbHlnb24gaGF2ZSBhIHdpbmRpbmcgbnVtYmVyIG9mICJ2
YWx1ZSIsIGFuZCByZWdpb25zIG91dHNpZGUKKyAqIGhhdmUgYSB3aW5kaW5nIG51bWJlciBvZiAw
LgorICoKKyAqIElmIGtlZXBPbmx5Qm91bmRhcnkgaXMgVFJVRSwgaXQgYWxzbyBkZWxldGVzIGFs
bCBlZGdlcyB3aGljaCBkbyBub3QKKyAqIHNlcGFyYXRlIGFuIGludGVyaW9yIHJlZ2lvbiBmcm9t
IGFuIGV4dGVyaW9yIG9uZS4KKyAqLworaW50IF9fZ2xfbWVzaFNldFdpbmRpbmdOdW1iZXIoIEdM
VW1lc2ggKm1lc2gsIGludCB2YWx1ZSwKKwkJCSAgICAgICAgR0xib29sZWFuIGtlZXBPbmx5Qm91
bmRhcnkgKQoreworICBHTFVoYWxmRWRnZSAqZSwgKmVOZXh0OworCisgIGZvciggZSA9IG1lc2gt
PmVIZWFkLm5leHQ7IGUgIT0gJm1lc2gtPmVIZWFkOyBlID0gZU5leHQgKSB7CisgICAgZU5leHQg
PSBlLT5uZXh0OworICAgIGlmKCBlLT5SZmFjZS0+aW5zaWRlICE9IGUtPkxmYWNlLT5pbnNpZGUg
KSB7CisKKyAgICAgIC8qIFRoaXMgaXMgYSBib3VuZGFyeSBlZGdlIChvbmUgc2lkZSBpcyBpbnRl
cmlvciwgb25lIGlzIGV4dGVyaW9yKS4gKi8KKyAgICAgIGUtPndpbmRpbmcgPSAoZS0+TGZhY2Ut
Pmluc2lkZSkgPyB2YWx1ZSA6IC12YWx1ZTsKKyAgICB9IGVsc2UgeworCisgICAgICAvKiBCb3Ro
IHJlZ2lvbnMgYXJlIGludGVyaW9yLCBvciBib3RoIGFyZSBleHRlcmlvci4gKi8KKyAgICAgIGlm
KCAhIGtlZXBPbmx5Qm91bmRhcnkgKSB7CisJZS0+d2luZGluZyA9IDA7CisgICAgICB9IGVsc2Ug
eworCWlmICggIV9fZ2xfbWVzaERlbGV0ZSggZSApICkgcmV0dXJuIDA7CisgICAgICB9CisgICAg
fQorICB9CisgIHJldHVybiAxOworfQpJbmRleDogV2ViQ29yZS8zcmRwYXJ0eS9nbHUvbGlidGVz
cy90ZXNzbW9uby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3Mv
dGVzc21vbm8uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvM3JkcGFydHkvZ2x1L2xpYnRlc3Mv
dGVzc21vbm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyoqIExpY2Vuc2Ug
QXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxl
IGFyZQorKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0
dGVkIGluIHRoZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAo
dGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJqZWN0
IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQor
KiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBt
YXkgb2J0YWluIGEgY29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywg
SW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5
LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDovL29z
cy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQg
aW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiogIkFT
IElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBD
T05ESVRJT05TCisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwg
QU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklM
SVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxBUiBQ
VVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4gVGhl
IE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBWZXJz
aW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNv
biBHcmFwaGljcywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAx
OTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBwb3J0
aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNld2hl
cmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5vdGlj
ZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworKiog
ZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUg
YXJlIFRoZQorKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChW
ZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikg
R3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVsZWFz
ZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCisq
KiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5
OTguIFRoaXMgc29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVy
c2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1
dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiogY29tcGxp
YW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisqKgor
Ki8KKy8qCisqKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0ZSQg
JFJldmlzaW9uJAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mv
dGVzc21vbm8uaCM1ICQKKyovCisKKyNpZm5kZWYgX190ZXNzbW9ub19oXworI2RlZmluZSBfX3Rl
c3Ntb25vX2hfCisKKy8qIF9fZ2xfbWVzaFRlc3NlbGxhdGVNb25vUmVnaW9uKCBmYWNlICkgdGVz
c2VsbGF0ZXMgYSBtb25vdG9uZSByZWdpb24KKyAqICh3aGF0IGVsc2Ugd291bGQgaXQgZG8/Pykg
IFRoZSByZWdpb24gbXVzdCBjb25zaXN0IG9mIGEgc2luZ2xlCisgKiBsb29wIG9mIGhhbGYtZWRn
ZXMgKHNlZSBtZXNoLmgpIG9yaWVudGVkIENDVy4gICJNb25vdG9uZSIgaW4gdGhpcworICogY2Fz
ZSBtZWFucyB0aGF0IGFueSB2ZXJ0aWNhbCBsaW5lIGludGVyc2VjdHMgdGhlIGludGVyaW9yIG9m
IHRoZQorICogcmVnaW9uIGluIGEgc2luZ2xlIGludGVydmFsLiAgCisgKgorICogVGVzc2VsbGF0
aW9uIGNvbnNpc3RzIG9mIGFkZGluZyBpbnRlcmlvciBlZGdlcyAoYWN0dWFsbHkgcGFpcnMgb2YK
KyAqIGhhbGYtZWRnZXMpLCB0byBzcGxpdCB0aGUgcmVnaW9uIGludG8gbm9uLW92ZXJsYXBwaW5n
IHRyaWFuZ2xlcy4KKyAqCisgKiBfX2dsX21lc2hUZXNzZWxsYXRlSW50ZXJpb3IoIG1lc2ggKSB0
ZXNzZWxsYXRlcyBlYWNoIHJlZ2lvbiBvZgorICogdGhlIG1lc2ggd2hpY2ggaXMgbWFya2VkICJp
bnNpZGUiIHRoZSBwb2x5Z29uLiAgRWFjaCBzdWNoIHJlZ2lvbgorICogbXVzdCBiZSBtb25vdG9u
ZS4KKyAqCisgKiBfX2dsX21lc2hEaXNjYXJkRXh0ZXJpb3IoIG1lc2ggKSB6YXBzIChpZS4gc2V0
cyB0byBOVUxMKSBhbGwgZmFjZXMKKyAqIHdoaWNoIGFyZSBub3QgbWFya2VkICJpbnNpZGUiIHRo
ZSBwb2x5Z29uLiAgU2luY2UgZnVydGhlciBtZXNoIG9wZXJhdGlvbnMKKyAqIG9uIE5VTEwgZmFj
ZXMgYXJlIG5vdCBhbGxvd2VkLCB0aGUgbWFpbiBwdXJwb3NlIGlzIHRvIGNsZWFuIHVwIHRoZQor
ICogbWVzaCBzbyB0aGF0IGV4dGVyaW9yIGxvb3BzIGFyZSBub3QgcmVwcmVzZW50ZWQgaW4gdGhl
IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIF9fZ2xfbWVzaFNldFdpbmRpbmdOdW1iZXIoIG1lc2gs
IHZhbHVlLCBrZWVwT25seUJvdW5kYXJ5ICkgcmVzZXRzIHRoZQorICogd2luZGluZyBudW1iZXJz
IG9uIGFsbCBlZGdlcyBzbyB0aGF0IHJlZ2lvbnMgbWFya2VkICJpbnNpZGUiIHRoZQorICogcG9s
eWdvbiBoYXZlIGEgd2luZGluZyBudW1iZXIgb2YgInZhbHVlIiwgYW5kIHJlZ2lvbnMgb3V0c2lk
ZQorICogaGF2ZSBhIHdpbmRpbmcgbnVtYmVyIG9mIDAuCisgKgorICogSWYga2VlcE9ubHlCb3Vu
ZGFyeSBpcyBUUlVFLCBpdCBhbHNvIGRlbGV0ZXMgYWxsIGVkZ2VzIHdoaWNoIGRvIG5vdAorICog
c2VwYXJhdGUgYW4gaW50ZXJpb3IgcmVnaW9uIGZyb20gYW4gZXh0ZXJpb3Igb25lLgorICovCisK
K2ludCBfX2dsX21lc2hUZXNzZWxsYXRlTW9ub1JlZ2lvbiggR0xVZmFjZSAqZmFjZSApOworaW50
IF9fZ2xfbWVzaFRlc3NlbGxhdGVJbnRlcmlvciggR0xVbWVzaCAqbWVzaCApOwordm9pZCBfX2ds
X21lc2hEaXNjYXJkRXh0ZXJpb3IoIEdMVW1lc2ggKm1lc2ggKTsKK2ludCBfX2dsX21lc2hTZXRX
aW5kaW5nTnVtYmVyKCBHTFVtZXNoICptZXNoLCBpbnQgdmFsdWUsCisJCQkgICAgICAgIEdMYm9v
bGVhbiBrZWVwT25seUJvdW5kYXJ5ICk7CisKKyNlbmRpZgo=
</data>
<flag name="commit-queue"
          id="54419"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65616</attachid>
            <date>2010-08-26 13:59:43 -0700</date>
            <delta_ts>2010-09-03 17:00:35 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>glu.patch</filename>
            <type>text/plain</type>
            <size>280302</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjEyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkwIEBACisyMDEwLTA4LTI2ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgdGhpcmRwYXJ0eSBkaXJlY3RvcnkgYW5kIGluY29ycG9yYXRlIEdMVSB0ZXNzZWxsYXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ3MDcKKwor
ICAgICAgICBUaGlzIGRpcmVjdG9yeSBpcyBpbnRlbmRlZCB0byBjb250YWluIGNvcGllcyBvZiB0
aGlyZC1wYXJ0eSBsaWJyYXJpZXMgdXNlZAorICAgICAgICBieSBXZWJDb3JlLCBpbiBwYXJ0aWN1
bGFyIHRob3NlIHdoaWNoIG1heSByZXF1aXJlIHNvbWUgbW9kaWZpY2F0aW9uIGluCisgICAgICAg
IG9yZGVyIHRvIGluY29ycG9yYXRlLgorCisgICAgICAgIE5vIHRlc3RzIGF0IHRoaXMgdGltZTsg
dGhlc2Ugc291cmNlcyBhcmUgYmVpbmcgYWRkZWQgaW4gcHJlcGFyYXRpb24gZm9yCisgICAgICAg
IGluY29ycG9yYXRpbmcgb3RoZXIgY29kZSB3aGljaCB1c2VzIHRoZW0sIGF0IHdoaWNoIHBvaW50
IHRoZSBjb2RlIHdpbGwgYmUKKyAgICAgICAgZXhlcmNpc2VkIGFuZCB0ZXN0YWJsZS4KKworICAg
ICAgICAqIHRoaXJkcGFydHk6IEFkZGVkLgorICAgICAgICAqIHRoaXJkcGFydHkvUkVBRE1FLnR4
dDogQWRkZWQuCisgICAgICAgICogdGhpcmRwYXJ0eS9nbHU6IEFkZGVkLgorICAgICAgICAqIHRo
aXJkcGFydHkvZ2x1L0xJQ0VOU0UudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0aGlyZHBhcnR5L2ds
dS9SRUFETUUud2Via2l0OiBBZGRlZC4KKyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9nbHVvcy5o
OiBBZGRlZC4KKyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9pbnRlcm5hbF9nbHUuaDogQWRkZWQu
CisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUvbGlidGVzczogQWRkZWQuCisgICAgICAgICogdGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy9HTlVtYWtlZmlsZTogQWRkZWQuCisgICAgICAgICogdGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy9JbWFrZWZpbGU6IEFkZGVkLgorICAgICAgICAqIHRoaXJkcGFydHkv
Z2x1L2xpYnRlc3MvUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9saWJ0
ZXNzL2FsZy1vdXRsaW5lOiBBZGRlZC4KKyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L2RpY3QtbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2Rp
Y3QuYzogQWRkZWQuCisgICAgICAgIChkaWN0TmV3RGljdCk6CisgICAgICAgIChkaWN0RGVsZXRl
RGljdCk6CisgICAgICAgIChkaWN0SW5zZXJ0QmVmb3JlKToKKyAgICAgICAgKGRpY3REZWxldGUp
OgorICAgICAgICAoZGljdFNlYXJjaCk6CisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy9kaWN0Lmg6IEFkZGVkLgorICAgICAgICAqIHRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5j
OiBBZGRlZC4KKyAgICAgICAgKF9fZ2xfdmVydExlcSk6CisgICAgICAgIChfX2dsX2VkZ2VFdmFs
KToKKyAgICAgICAgKF9fZ2xfZWRnZVNpZ24pOgorICAgICAgICAoX19nbF90cmFuc0V2YWwpOgor
ICAgICAgICAoX19nbF90cmFuc1NpZ24pOgorICAgICAgICAoX19nbF92ZXJ0Q0NXKToKKyAgICAg
ICAgKEludGVycG9sYXRlKToKKyAgICAgICAgKF9fZ2xfZWRnZUludGVyc2VjdCk6CisgICAgICAg
ICogdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmg6IEFkZGVkLgorICAgICAgICAqIHRoaXJk
cGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuYzogQWRkZWQuCisgICAgICAgIChfX2dsX21lbUlu
aXQpOgorICAgICAgICAoX19nbF9tZW1BbGxvYyk6CisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9tZW1hbGxvYy5oOiBBZGRlZC4KKyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9saWJ0
ZXNzL21lc2guYzogQWRkZWQuCisgICAgICAgIChhbGxvY1ZlcnRleCk6CisgICAgICAgIChhbGxv
Y0ZhY2UpOgorICAgICAgICAoTWFrZUVkZ2UpOgorICAgICAgICAoU3BsaWNlKToKKyAgICAgICAg
KE1ha2VWZXJ0ZXgpOgorICAgICAgICAoTWFrZUZhY2UpOgorICAgICAgICAoS2lsbEVkZ2UpOgor
ICAgICAgICAoS2lsbFZlcnRleCk6CisgICAgICAgIChLaWxsRmFjZSk6CisgICAgICAgIChfX2ds
X21lc2hNYWtlRWRnZSk6CisgICAgICAgIChfX2dsX21lc2hTcGxpY2UpOgorICAgICAgICAoX19n
bF9tZXNoRGVsZXRlKToKKyAgICAgICAgKF9fZ2xfbWVzaEFkZEVkZ2VWZXJ0ZXgpOgorICAgICAg
ICAoX19nbF9tZXNoU3BsaXRFZGdlKToKKyAgICAgICAgKF9fZ2xfbWVzaENvbm5lY3QpOgorICAg
ICAgICAoX19nbF9tZXNoWmFwRmFjZSk6CisgICAgICAgIChfX2dsX21lc2hOZXdNZXNoKToKKyAg
ICAgICAgKF9fZ2xfbWVzaFVuaW9uKToKKyAgICAgICAgKF9fZ2xfbWVzaERlbGV0ZU1lc2gpOgor
ICAgICAgICAoX19nbF9tZXNoQ2hlY2tNZXNoKToKKyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL21lc2guaDogQWRkZWQuCisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9u
b3JtYWwuYzogQWRkZWQuCisgICAgICAgIChOb3JtYWxpemUpOgorICAgICAgICAoTG9uZ0F4aXMp
OgorICAgICAgICAoQ29tcHV0ZU5vcm1hbCk6CisgICAgICAgIChDaGVja09yaWVudGF0aW9uKToK
KyAgICAgICAgKF9fZ2xfcHJvamVjdFBvbHlnb24pOgorICAgICAgICAqIHRoaXJkcGFydHkvZ2x1
L2xpYnRlc3Mvbm9ybWFsLmg6IEFkZGVkLgorICAgICAgICAqIHRoaXJkcGFydHkvZ2x1L2xpYnRl
c3MvcHJpb3JpdHlxLWhlYXAuYzogQWRkZWQuCisgICAgICAgIChwcU5ld1ByaW9yaXR5USk6Cisg
ICAgICAgIChwcURlbGV0ZVByaW9yaXR5USk6CisgICAgICAgIChGbG9hdERvd24pOgorICAgICAg
ICAoRmxvYXRVcCk6CisgICAgICAgIChwcUluaXQpOgorICAgICAgICAocHFJbnNlcnQpOgorICAg
ICAgICAocHFFeHRyYWN0TWluKToKKyAgICAgICAgKHBxRGVsZXRlKToKKyAgICAgICAgKiB0aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmg6IEFkZGVkLgorICAgICAgICAqIHRo
aXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLXNvcnQuaDogQWRkZWQuCisgICAgICAgICog
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEuYzogQWRkZWQuCisgICAgICAgIChwcU5l
d1ByaW9yaXR5USk6CisgICAgICAgIChwcURlbGV0ZVByaW9yaXR5USk6CisgICAgICAgIChwcUlu
aXQpOgorICAgICAgICAocHFJbnNlcnQpOgorICAgICAgICAocHFFeHRyYWN0TWluKToKKyAgICAg
ICAgKHBxTWluaW11bSk6CisgICAgICAgIChwcUlzRW1wdHkpOgorICAgICAgICAocHFEZWxldGUp
OgorICAgICAgICAqIHRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmg6IEFkZGVkLgor
ICAgICAgICAqIHRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmM6IEFkZGVkLgorICAgICAg
ICAoX19nbF9yZW5kZXJNZXNoKToKKyAgICAgICAgKFJlbmRlck1heGltdW1GYWNlR3JvdXApOgor
ICAgICAgICAoTWF4aW11bUZhbik6CisgICAgICAgIChNYXhpbXVtU3RyaXApOgorICAgICAgICAo
UmVuZGVyVHJpYW5nbGUpOgorICAgICAgICAoUmVuZGVyTG9uZWx5VHJpYW5nbGVzKToKKyAgICAg
ICAgKFJlbmRlckZhbik6CisgICAgICAgIChSZW5kZXJTdHJpcCk6CisgICAgICAgIChfX2dsX3Jl
bmRlckJvdW5kYXJ5KToKKyAgICAgICAgKENvbXB1dGVOb3JtYWwpOgorICAgICAgICAoX19nbF9y
ZW5kZXJDYWNoZSk6CisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuaDog
QWRkZWQuCisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5jOiBBZGRlZC4K
KyAgICAgICAgKEVkZ2VMZXEpOgorICAgICAgICAoRGVsZXRlUmVnaW9uKToKKyAgICAgICAgKEZp
eFVwcGVyRWRnZSk6CisgICAgICAgIChUb3BMZWZ0UmVnaW9uKToKKyAgICAgICAgKFRvcFJpZ2h0
UmVnaW9uKToKKyAgICAgICAgKEFkZFJlZ2lvbkJlbG93KToKKyAgICAgICAgKElzV2luZGluZ0lu
c2lkZSk6CisgICAgICAgIChDb21wdXRlV2luZGluZyk6CisgICAgICAgIChGaW5pc2hSZWdpb24p
OgorICAgICAgICAoRmluaXNoTGVmdFJlZ2lvbnMpOgorICAgICAgICAoQWRkUmlnaHRFZGdlcyk6
CisgICAgICAgIChDYWxsQ29tYmluZSk6CisgICAgICAgIChTcGxpY2VNZXJnZVZlcnRpY2VzKToK
KyAgICAgICAgKFZlcnRleFdlaWdodHMpOgorICAgICAgICAoR2V0SW50ZXJzZWN0RGF0YSk6Cisg
ICAgICAgIChDaGVja0ZvclJpZ2h0U3BsaWNlKToKKyAgICAgICAgKENoZWNrRm9yTGVmdFNwbGlj
ZSk6CisgICAgICAgIChDaGVja0ZvckludGVyc2VjdCk6CisgICAgICAgIChXYWxrRGlydHlSZWdp
b25zKToKKyAgICAgICAgKENvbm5lY3RSaWdodFZlcnRleCk6CisgICAgICAgIChDb25uZWN0TGVm
dERlZ2VuZXJhdGUpOgorICAgICAgICAoQ29ubmVjdExlZnRWZXJ0ZXgpOgorICAgICAgICAoU3dl
ZXBFdmVudCk6CisgICAgICAgIChBZGRTZW50aW5lbCk6CisgICAgICAgIChJbml0RWRnZURpY3Qp
OgorICAgICAgICAoRG9uZUVkZ2VEaWN0KToKKyAgICAgICAgKFJlbW92ZURlZ2VuZXJhdGVFZGdl
cyk6CisgICAgICAgIChJbml0UHJpb3JpdHlRKToKKyAgICAgICAgKERvbmVQcmlvcml0eVEpOgor
ICAgICAgICAoUmVtb3ZlRGVnZW5lcmF0ZUZhY2VzKToKKyAgICAgICAgKF9fZ2xfY29tcHV0ZUlu
dGVyaW9yKToKKyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmg6IEFkZGVk
LgorICAgICAgICAqIHRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5jOiBBZGRlZC4KKyAgICAg
ICAgKG5vQmVnaW4pOgorICAgICAgICAobm9FZGdlRmxhZyk6CisgICAgICAgIChub1ZlcnRleCk6
CisgICAgICAgIChub0VuZCk6CisgICAgICAgIChub0Vycm9yKToKKyAgICAgICAgKG5vQ29tYmlu
ZSk6CisgICAgICAgIChub01lc2gpOgorICAgICAgICAoX19nbF9ub0JlZ2luRGF0YSk6CisgICAg
ICAgIChfX2dsX25vRWRnZUZsYWdEYXRhKToKKyAgICAgICAgKF9fZ2xfbm9WZXJ0ZXhEYXRhKToK
KyAgICAgICAgKF9fZ2xfbm9FbmREYXRhKToKKyAgICAgICAgKF9fZ2xfbm9FcnJvckRhdGEpOgor
ICAgICAgICAoX19nbF9ub0NvbWJpbmVEYXRhKToKKyAgICAgICAgKGludGVybmFsX2dsdU5ld1Rl
c3MpOgorICAgICAgICAoTWFrZURvcm1hbnQpOgorICAgICAgICAoR290b1N0YXRlKToKKyAgICAg
ICAgKGludGVybmFsX2dsdURlbGV0ZVRlc3MpOgorICAgICAgICAoaW50ZXJuYWxfZ2x1VGVzc1By
b3BlcnR5KToKKyAgICAgICAgKGludGVybmFsX2dsdUdldFRlc3NQcm9wZXJ0eSk6CisgICAgICAg
IChpbnRlcm5hbF9nbHVUZXNzTm9ybWFsKToKKyAgICAgICAgKGludGVybmFsX2dsdVRlc3NDYWxs
YmFjayk6CisgICAgICAgIChBZGRWZXJ0ZXgpOgorICAgICAgICAoQ2FjaGVWZXJ0ZXgpOgorICAg
ICAgICAoRW1wdHlDYWNoZSk6CisgICAgICAgIChpbnRlcm5hbF9nbHVUZXNzVmVydGV4KToKKyAg
ICAgICAgKGludGVybmFsX2dsdVRlc3NCZWdpblBvbHlnb24pOgorICAgICAgICAoaW50ZXJuYWxf
Z2x1VGVzc0JlZ2luQ29udG91cik6CisgICAgICAgIChpbnRlcm5hbF9nbHVUZXNzRW5kQ29udG91
cik6CisgICAgICAgIChpbnRlcm5hbF9nbHVUZXNzRW5kUG9seWdvbik6CisgICAgICAgIChnbHVE
ZWxldGVNZXNoKToKKyAgICAgICAgKGdsdUJlZ2luUG9seWdvbik6CisgICAgICAgIChnbHVOZXh0
Q29udG91cik6CisgICAgICAgIChnbHVFbmRQb2x5Z29uKToKKyAgICAgICAgKiB0aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL3Rlc3MuaDogQWRkZWQuCisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy90ZXNzbW9uby5jOiBBZGRlZC4KKyAgICAgICAgKF9fZ2xfbWVzaFRlc3NlbGxhdGVNb25v
UmVnaW9uKToKKyAgICAgICAgKF9fZ2xfbWVzaFRlc3NlbGxhdGVJbnRlcmlvcik6CisgICAgICAg
IChfX2dsX21lc2hEaXNjYXJkRXh0ZXJpb3IpOgorICAgICAgICAoX19nbF9tZXNoU2V0V2luZGlu
Z051bWJlcik6CisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5oOiBB
ZGRlZC4KKwogMjAxMC0wOC0yNiAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogV2ViQ29yZS90
aGlyZHBhcnR5L1JFQURNRS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS90aGlyZHBhcnR5L1JF
QURNRS50eHQJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3RoaXJkcGFydHkvUkVBRE1FLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorVGhpcyBkaXJlY3RvcnkgaXMgaW50ZW5kZWQg
dG8gY29udGFpbiBjb3BpZXMgb2YgdGhpcmQtcGFydHkgbGlicmFyaWVzIHVzZWQKK2J5IFdlYkNv
cmUsIGluIHBhcnRpY3VsYXIgdGhvc2Ugd2hpY2ggbWF5IHJlcXVpcmUgc29tZSBtb2RpZmljYXRp
b24gaW4KK29yZGVyIHRvIGluY29ycG9yYXRlLgorCitUaGUgY3VycmVudCBjb252ZW50aW9uIGlz
IHRvIGZ1bGx5IHNjb3BlIHRoZSBpbmNsdWRlIHBhdGhzIG9mIGhlYWRlcnMsIGluCitvcmRlciB0
byBhdm9pZCBjb2xsaXNpb25zIHdpdGggb3RoZXIgV2ViQ29yZSBoZWFkZXJzLiBGb3IgZXhhbXBs
ZSwgYSBmaWxlCitpbiBXZWJDb3JlIHVzaW5nIHRoZSBHTFUgdGVzc2VsbGF0b3Igc291cmNlcyB3
b3VsZCB1c2UKKworI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2ludGVybmFsX2dsdS5oIgorCitI
ZWFkZXIgcmVmZXJlbmNlcyBpbiBzb3VyY2UgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgbmVlZCB0
byBiZSBzaW1pbGFybHkKK21vZGlmaWVkLgpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9M
SUNFTlNFLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L0xJQ0VOU0Uu
dHh0CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9MSUNFTlNFLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMSBAQAorU0dJIEZSRUUgU09GVFdBUkUgTElDRU5TRSBC
IChWZXJzaW9uIDIuMCwgU2VwdC4gMTgsIDIwMDgpIAorCitDb3B5cmlnaHQgKEMpIFtkYXRlcyBv
ZiBmaXJzdCBwdWJsaWNhdGlvbl0gU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwKK1JpZ2h0cyBS
ZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us
IHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz
b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGlu
IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGlt
aXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwK
K2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh
cmUsIGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlz
aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1Ro
ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB0aGUgZGF0ZXMgb2YgZmlyc3QgcHVi
bGljYXRpb24KK2FuZCBlaXRoZXIgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBvciBhIHJlZmVyZW5j
ZSB0byBIWVBFUkxJTksKKyJodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvImh0dHA6
Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQi8KK3NoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj
b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCitTb2Z0d2FyZS4KKworVEhFIFNP
RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
CitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB
UlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFNJTElDT04gR1JB
UEhJQ1MsIElOQy4gQkUgTElBQkxFCitGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YKK0NPTlRSQUNULCBUT1JUIE9SIE9USEVS
V0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorV0lUSCBUSEUgU09G
VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0V4
Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIFNpbGljb24gR3Jh
cGhpY3MsCitJbmMuIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lz
ZSB0byBwcm9tb3RlIHRoZQorc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29m
dHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuCithdXRob3JpemF0aW9uIGZyb20gU2lsaWNvbiBH
cmFwaGljcywgSW5jLgpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9SRUFETUUud2Via2l0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvUkVBRE1FLndlYmtpdAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvUkVBRE1FLndlYmtpdAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMyBAQAorVGhpcyBpcyBhIG5lYXJseSB2ZXJiYXRpbSBjb3B5IG9m
IHRoZSBHTFUgdGVzc2VsbGF0b3Igc291cmNlIGNvZGUgZnJvbQorU0dJJ3MgT3BlbkdMIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbiBhdAoraHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL29nbC1zYW1w
bGUvIC4gUGVyCitodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvICwgdGhlIGNvZGUg
aXMgY292ZXJlZCB1bmRlciB0aGUgU0dJCitGcmVlIFNvZnR3YXJlIExpY2Vuc2UgQiwgdmVyc2lv
biAyLjAsIGEgY29weSBvZiB3aGljaCBpcyBpbgorTElDRU5TRS50eHQgaW4gdGhpcyBkaXJlY3Rv
cnkuCisKK1RoZSBmb2xsb3dpbmcgY2hhbmdlcyB3ZXJlIG1hZGUgaW4gb3JkZXIgdG8gaW5jb3Jw
b3JhdGUgdGhpcyBjb2RlOgorCisgIC0gVGhlIGFkZGl0aW9uIG9mIGEgc2ltcGxpZmllZCBnbHVv
cy5oIHRvIGVsaW1pbmF0ZSBvcGVyYXRpbmcgc3lzdGVtCisgICAgZGVwZW5kZW5jaWVzLgorCisg
IC0gVGhlIHJlbW92YWwgb2YgaW5jbHVzaW9uIG9mIEdML2dsdS5oIGFuZCByZXBsYWNlbWVudCB3
aXRoIGFuCisgICAgaW5jbHVkZSBvZiBpbnRlcm5hbF9nbHUuaC4KKworICAtIEluY2x1ZGVzIHdl
cmUgbW9kaWZpZWQgdG8gYmUgc2NvcGVkIHdpdGhpbiB0aGlyZHBhcnR5L2dsdS8gYW5kCisgICAg
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy8uCisKKyAgLSBUaGUgZW50cnkgcG9pbnRzIHRvIHRoZSB0
ZXNzZWxsYXRvciB3ZXJlIHByZWZpeGVkIHdpdGggaW50ZXJuYWxfCisgICAgdG8gYXZvaWQgc3lt
Ym9sIGNvbGxpc2lvbnMgd2l0aCBhbnkgaG9zdCBPUyB2ZXJzaW9uIG9mIEdMVS4KKworICAtIElu
IHRlc3MuYywgdGhlIG9ic29sZXRlIGVudHJ5IHBvaW50cyBnbHVCZWdpblBvbHlnb24sCisgICAg
Z2x1TmV4dENvbnRvdXIgYW5kIGdsdUVuZFBvbHlnb24gaW4gdGVzcy5jIHdlcmUgI2lmIDAnZCBv
dXQuCisgICAgRGVmYXVsdCBicmFuY2hlcyB3ZXJlIGFkZGVkIHRvIHRoZSBzd2l0Y2ggc3RhdGVt
ZW50cyBpbiBHb3RvU3RhdGUuCisKKyAgLSBJbiBtZW1hbGxvYy5oLCB0aGUgaW5jbHVkZSBvZiBt
YWxsb2MuaCB3YXMgY2hhbmdlZCB0byBhbiBpbmNsdWRlCisgICAgb2Ygc3RkbGliLmguCisKKyAg
LSBJbiBub3JtYWwuYywgYW4gdW51c2VkIHZhcmlhYmxlICJ3IiB3YXMgcmVtb3ZlZCBmcm9tCisg
ICAgX19nbF9wcm9qZWN0UG9seWdvbi4gI2lmIGd1YXJkcyB3ZXJlIHBsYWNlZCBhcm91bmQgdGhl
IGRlZmluaXRpb24KKyAgICBvZiB0aGUgdW51c2VkIE5vcm1hbGl6ZSBmdW5jdGlvbi4KKworICAt
IEluIHByaW9yaXR5cS1oZWFwLmMsIGFuICNpbmNsdWRlIG9mIDxsaW1pdHMuaD4gd2FzIGFkZGVk
LgpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9nbHVvcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvdGhpcmRwYXJ0eS9nbHUvZ2x1b3MuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvdGhp
cmRwYXJ0eS9nbHUvZ2x1b3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAyMDEwLCBHb29nbGUgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEdMVU9TX0hfCisjZGVmaW5lIEdMVU9TX0hfCisKKy8vIFRoaXMgaGVhZGVyIHByb3ZpZGVzIHRo
ZSBtaW5pbWFsIGRlZmluaXRpb25zIG5lZWRlZCB0byBjb21waWxlIHRoZQorLy8gR0xVIHRlc3Nl
bGxhdG9yIHNvdXJjZXMuCisjZGVmaW5lIEdMQVBJRU5UUlkKKwordHlwZWRlZiB1bnNpZ25lZCBj
aGFyIEdMYm9vbGVhbjsKK3R5cGVkZWYgZG91YmxlIEdMZG91YmxlOwordHlwZWRlZiB1bnNpZ25l
ZCBpbnQgR0xlbnVtOwordHlwZWRlZiBmbG9hdCBHTGZsb2F0OwordHlwZWRlZiB2b2lkIEdMdm9p
ZDsKKworI2VuZGlmICAvLyBHTFVPU19IXwpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9p
bnRlcm5hbF9nbHUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2ludGVy
bmFsX2dsdS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9pbnRlcm5h
bF9nbHUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
MjAxMCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGhpcyBoZWFkZXIgaXMg
YSBza2VsZXRvbiBzdWJzdGl0dXRlIGZvciBHTC9nbHUuaCB3aGljaCBjb250YWlucworLy8gb25s
eSB0aGUgZGVmaW5pdGlvbnMsIGNvbnN0YW50cyBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIG5l
Y2Vzc2FyeQorLy8gdG8gY29tcGlsZSB0aGUgR0xVIHRlc3NlbGxhdG9yLgorCisjaWZuZGVmIElO
VEVSTkFMX0dMVV9IXworI2RlZmluZSBJTlRFUk5BTF9HTFVfSF8KKworI2luY2x1ZGUgInRoaXJk
cGFydHkvZ2x1L2dsdW9zLmgiCisKKy8qIFByaW1pdGl2ZXMgKi8KKyNkZWZpbmUgR0xfTElORV9M
T09QICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBHTF9UUklBTkdM
RVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX1RSSUFOR0xF
X1NUUklQICAgICAgICAgICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgR0xfVFJJQU5HTEVf
RkFOICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNgorCisvKiBFcnJvckNvZGUgKi8KKyNk
ZWZpbmUgR0xVX0lOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICAgIDEwMDkwMAorI2RlZmlu
ZSBHTFVfSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgICAgMTAwOTAxCisjZGVmaW5lIEdM
VV9PVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgICAxMDA5MDIKKworLyogVGVzc0NhbGxi
YWNrICovCisjZGVmaW5lIEdMVV9URVNTX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAxMDAx
MDAKKyNkZWZpbmUgR0xVX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDEwMAor
I2RlZmluZSBHTFVfVEVTU19WRVJURVggICAgICAgICAgICAgICAgICAgICAgMTAwMTAxCisjZGVm
aW5lIEdMVV9WRVJURVggICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAxMDEKKyNkZWZpbmUg
R0xVX1RFU1NfRU5EICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDEwMgorI2RlZmluZSBHTFVf
RU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMTAyCisjZGVmaW5lIEdMVV9URVNT
X0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAxMDAxMDMKKyNkZWZpbmUgR0xVX1RFU1NfRURH
RV9GTEFHICAgICAgICAgICAgICAgICAgIDEwMDEwNAorI2RlZmluZSBHTFVfRURHRV9GTEFHICAg
ICAgICAgICAgICAgICAgICAgICAgMTAwMTA0CisjZGVmaW5lIEdMVV9URVNTX0NPTUJJTkUgICAg
ICAgICAgICAgICAgICAgICAxMDAxMDUKKyNkZWZpbmUgR0xVX1RFU1NfQkVHSU5fREFUQSAgICAg
ICAgICAgICAgICAgIDEwMDEwNgorI2RlZmluZSBHTFVfVEVTU19WRVJURVhfREFUQSAgICAgICAg
ICAgICAgICAgMTAwMTA3CisjZGVmaW5lIEdMVV9URVNTX0VORF9EQVRBICAgICAgICAgICAgICAg
ICAgICAxMDAxMDgKKyNkZWZpbmUgR0xVX1RFU1NfRVJST1JfREFUQSAgICAgICAgICAgICAgICAg
IDEwMDEwOQorI2RlZmluZSBHTFVfVEVTU19FREdFX0ZMQUdfREFUQSAgICAgICAgICAgICAgMTAw
MTEwCisjZGVmaW5lIEdMVV9URVNTX0NPTUJJTkVfREFUQSAgICAgICAgICAgICAgICAxMDAxMTEK
KworLyogVGVzc0NvbnRvdXIgKi8KKyNkZWZpbmUgR0xVX0NXICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEwMDEyMAorI2RlZmluZSBHTFVfQ0NXICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTAwMTIxCisjZGVmaW5lIEdMVV9JTlRFUklPUiAgICAgICAgICAgICAgICAgICAgICAg
ICAxMDAxMjIKKyNkZWZpbmUgR0xVX0VYVEVSSU9SICAgICAgICAgICAgICAgICAgICAgICAgIDEw
MDEyMworI2RlZmluZSBHTFVfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMTI0
CisKKy8qIFRlc3NQcm9wZXJ0eSAqLworI2RlZmluZSBHTFVfVEVTU19XSU5ESU5HX1JVTEUgICAg
ICAgICAgICAgICAgMTAwMTQwCisjZGVmaW5lIEdMVV9URVNTX0JPVU5EQVJZX09OTFkgICAgICAg
ICAgICAgICAxMDAxNDEKKyNkZWZpbmUgR0xVX1RFU1NfVE9MRVJBTkNFICAgICAgICAgICAgICAg
ICAgIDEwMDE0MgorCisvKiBUZXNzRXJyb3IgKi8KKyNkZWZpbmUgR0xVX1RFU1NfRVJST1IxICAg
ICAgICAgICAgICAgICAgICAgIDEwMDE1MQorI2RlZmluZSBHTFVfVEVTU19FUlJPUjIgICAgICAg
ICAgICAgICAgICAgICAgMTAwMTUyCisjZGVmaW5lIEdMVV9URVNTX0VSUk9SMyAgICAgICAgICAg
ICAgICAgICAgICAxMDAxNTMKKyNkZWZpbmUgR0xVX1RFU1NfRVJST1I0ICAgICAgICAgICAgICAg
ICAgICAgIDEwMDE1NAorI2RlZmluZSBHTFVfVEVTU19FUlJPUjUgICAgICAgICAgICAgICAgICAg
ICAgMTAwMTU1CisjZGVmaW5lIEdMVV9URVNTX0VSUk9SNiAgICAgICAgICAgICAgICAgICAgICAx
MDAxNTYKKyNkZWZpbmUgR0xVX1RFU1NfRVJST1I3ICAgICAgICAgICAgICAgICAgICAgIDEwMDE1
NworI2RlZmluZSBHTFVfVEVTU19FUlJPUjggICAgICAgICAgICAgICAgICAgICAgMTAwMTU4Cisj
ZGVmaW5lIEdMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9MWUdPTiAgICAgICAxMDAxNTEKKyNkZWZp
bmUgR0xVX1RFU1NfTUlTU0lOR19CRUdJTl9DT05UT1VSICAgICAgIDEwMDE1MgorI2RlZmluZSBH
TFVfVEVTU19NSVNTSU5HX0VORF9QT0xZR09OICAgICAgICAgMTAwMTUzCisjZGVmaW5lIEdMVV9U
RVNTX01JU1NJTkdfRU5EX0NPTlRPVVIgICAgICAgICAxMDAxNTQKKyNkZWZpbmUgR0xVX1RFU1Nf
Q09PUkRfVE9PX0xBUkdFICAgICAgICAgICAgIDEwMDE1NQorI2RlZmluZSBHTFVfVEVTU19ORUVE
X0NPTUJJTkVfQ0FMTEJBQ0sgICAgICAgMTAwMTU2CisKKy8qIFRlc3NXaW5kaW5nICovCisjZGVm
aW5lIEdMVV9URVNTX1dJTkRJTkdfT0REICAgICAgICAgICAgICAgICAxMDAxMzAKKyNkZWZpbmUg
R0xVX1RFU1NfV0lORElOR19OT05aRVJPICAgICAgICAgICAgIDEwMDEzMQorI2RlZmluZSBHTFVf
VEVTU19XSU5ESU5HX1BPU0lUSVZFICAgICAgICAgICAgMTAwMTMyCisjZGVmaW5lIEdMVV9URVNT
X1dJTkRJTkdfTkVHQVRJVkUgICAgICAgICAgICAxMDAxMzMKKyNkZWZpbmUgR0xVX1RFU1NfV0lO
RElOR19BQlNfR0VRX1RXTyAgICAgICAgIDEwMDEzNAorCisjZGVmaW5lIEdMVV9URVNTX01BWF9D
T09SRCAxLjBlMTUwCisKK3R5cGVkZWYgc3RydWN0IEdMVXRlc3NlbGF0b3IgR0xVdGVzc2VsYXRv
cjsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitleHRlcm4g
R0xVdGVzc2VsYXRvciAqIEdMQVBJRU5UUlkgaW50ZXJuYWxfZ2x1TmV3VGVzcyh2b2lkKTsKK2V4
dGVybiB2b2lkIEdMQVBJRU5UUlkgaW50ZXJuYWxfZ2x1RGVsZXRlVGVzcyhHTFV0ZXNzZWxhdG9y
ICp0ZXNzKTsKK2V4dGVybiB2b2lkIEdMQVBJRU5UUlkgaW50ZXJuYWxfZ2x1VGVzc1Byb3BlcnR5
KEdMVXRlc3NlbGF0b3IgKnRlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gd2hpY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGRvdWJsZSB2YWx1ZSk7CitleHRlcm4gdm9pZCBHTEFQSUVO
VFJZIGludGVybmFsX2dsdUdldFRlc3NQcm9wZXJ0eShHTFV0ZXNzZWxhdG9yICp0ZXNzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdo
aWNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xkb3VibGUgKnZhbHVlKTsKK2V4dGVybiB2b2lkIEdMQVBJRU5UUlkgaW50ZXJuYWxfZ2x1VGVz
c05vcm1hbChHTFV0ZXNzZWxhdG9yICp0ZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZG91YmxlIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xkb3VibGUgeSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGRvdWJsZSB6KTsKK2V4dGVybiB2b2lkIEdMQVBJRU5U
UlkgaW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKEdMVXRlc3NlbGF0b3IgKnRlc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd2hpY2gsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIChHTEFQ
SUVOVFJZICpmbikoKSk7CitleHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdVRlc3NW
ZXJ0ZXgoR0xVdGVzc2VsYXRvciAqdGVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGRvdWJsZSBjb29yZHNbM10sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCBHTEFQ
SUVOVFJZIGludGVybmFsX2dsdVRlc3NCZWdpblBvbHlnb24oR0xVdGVzc2VsYXRvciAqdGVzcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICpkYXRhKTsKK2V4dGVybiB2b2lkIEdMQVBJRU5UUlkgaW50ZXJuYWxfZ2x1VGVzc0JlZ2luQ29u
dG91cihHTFV0ZXNzZWxhdG9yICp0ZXNzKTsKK2V4dGVybiB2b2lkIEdMQVBJRU5UUlkgaW50ZXJu
YWxfZ2x1VGVzc0VuZENvbnRvdXIoR0xVdGVzc2VsYXRvciAqdGVzcyk7CitleHRlcm4gdm9pZCBH
TEFQSUVOVFJZIGludGVybmFsX2dsdVRlc3NFbmRQb2x5Z29uKEdMVXRlc3NlbGF0b3IgKnRlc3Mp
OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgIC8vIElOVEVSTkFM
X0dMVV9IXwpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL0dOVW1ha2VmaWxl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9HTlVtYWtlZmls
ZQkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9HTlVtYWtl
ZmlsZQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKyMhZ21ha2UKKyMKKyMgTGljZW5z
ZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZp
bGUgYXJlCisjIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1p
dHRlZCBpbiB0aGUgU0dJIEZyZWUKKyMgU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAo
dGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisjIGZpbGUgYXJlIHN1YmplY3Qg
b25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisj
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkKKyMgb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5j
LiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyMgQW1waGl0aGVhdHJlIFBhcmt3YXksIE1v
dW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgorIworIyBodHRwOi8vb3NzLnNnaS5j
b20vcHJvamVjdHMvRnJlZUIKKyMKKyMgTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGlj
ZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgYmFzaXMs
IHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwor
IyBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQg
V0FSUkFOVElFUyBBTkQKKyMgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFD
VE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5P
Ti1JTkZSSU5HRU1FTlQuCisjCisjIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlz
OiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAorIyBWZXJzaW9uIDEuMi4xLCByZWxlYXNl
ZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKKyMgSW5j
LiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdy
YXBoaWNzLCBJbmMuCisjIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGly
ZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAorIyBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorIworIyBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGlj
YXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworIyBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29u
anVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisjIE9wZW5HTChSKSBHcmFw
aGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCisj
IEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGli
cmFyeSAoVmVyc2lvbgorIyAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3Bl
bkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyMgV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAx
LjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCisjIHdhcyBjcmVh
dGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRp
b24KKyMgcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZl
cmlmaWVkIGFzIGJlaW5nCisjIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAx
LjIuMSBTcGVjaWZpY2F0aW9uLgorIworIyAkRGF0ZSQgJFJldmlzaW9uJAorIyAkSGVhZGVyOiAv
L2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9HTlVtYWtlZmlsZSM5ICQKKworT0JKRUNU
X1NUWUxFID0gTjMyCisKK2luY2x1ZGUgJChST09UKS91c3IvaW5jbHVkZS9tYWtlL2NvbW1vbmRl
ZnMKKworVEFSR0VUID0gbGlidGVzcy5hCisKK1RBUkdFVFMgPSAkKFRBUkdFVCkKKworTENJTkNT
ID0gLUkuLi9pbmNsdWRlCisKKyMgQ29tcGlsYXRpb24gZmxhZ3M6CisjCisjIC1ETkRFQlVHIGlz
IGZvciB0aGUgcHJvZHVjdGlvbiBjb2RlOyBpdCByZW1vdmVzIGFsbCBhc3NlcnRpb24gY2hlY2tz
CisjICAgIChub3RlIHRoYXQgPGFzc2VydC5oPiBsb29rcyBhdCB0aGlzIHN5bWJvbCkuCisjCisj
IC1ETk9fTUFMTE9QVCB1c2VzIHJlZ3VsYXIgbWFsbG9jIGluc3RlYWQgb2YgdGhlIG1hbGxvcHQo
KSB2ZXJzaW9uLgorIyAgICoqKioqIFVubGVzcyB5b3UgdXNlIHRoaXMgZmxhZywgeW91IG11c3Qg
dXNlICItbG1hbGxvYyIgdG8gbGluaworIyAgICoqKioqIHlvdXIgYXBwbGljYXRpb24hCisjCisj
IC1ETUVNT1JZX0RFQlVHIHR1cm5zIG9uIHRoZSBNX0RFQlVHIG9wdGlvbiBvZiBtYWxsb3B0OyB0
aGlzIGNhbgorIyAgICBpbmNyZWFzZSB0aGUgcnVubmluZyB0aW1lIGEgTE9ULgorIworIyAtREdM
VV9URVNTX0FQSV9GTE9BVCBjb21waWxlcyBhIHNpbmdsZS1wcmVjaXNpb24gdmVyc2lvbiBvZiB0
aGUgbGlicmFyeS4KKyMKKyMgLWZsb2F0IHByZXZlbnRzIGF1dG9tYXRpYyBwcm9tb3Rpb24gdG8g
ZG91YmxlIHByZWNpc2lvbjsgdGhpcyB3aWxsIHByb2R1Y2UKKyMgICAgZmFzdGVyIGNvZGUgd2hl
biBjb21waWxlZCB3aXRoIC1ER0xVX1RFU1NfQVBJX0ZMT0FULgorIworIyAtRE5PX0JSQU5DSF9D
T05ESVRJT05TIHVzZXMgJiBhbmQgfCBpbnN0ZWFkIG9mICYmIGFuZCB8fCBvbiBhIGNvdXBsZQor
IyAgICBvZiBoZWF2aWx5LXVzZWQgdGVzdHMgKFZlcnRFcSBhbmQgVmVydExlcSk7IHNvbWUgY29t
cGlsZXJzIGNhbiBnZW5lcmF0ZQorIyAgICBiZXR0ZXIgY29kZSB3aXRoIHRoZXNlICh1c2Ugc3Bl
Y2lhbCBpbnN0cnVjdGlvbnMgdG8gYXZvaWQgYnJhbmNoaW5nKS4KKyMKKyMgLURGT1JfVFJJVEVf
VEVTVF9QUk9HUkFNIGlzICpvbmx5KiBmb3IgdXNlIHdpdGggdGhlIHRlc3QgcHJvZ3JhbSBjYWxs
ZWQKKyMgICAgInRyaXRlIi4gIEl0IHVzZXMgc29tZSB2YXJpYWJsZXMgd2hpY2ggYXJlIGRlZmlu
ZWQgYnkgdGhlIHRlc3QgcHJvZ3JhbSwKKyMgICAgc28geW91IHdvbid0IGJlIGFibGUgdG8gbGlu
ayBpdCB3aXRoIGFueXRoaW5nIGVsc2UuCisKK0hGSUxFUyA9IFwKKwlkaWN0LmggXAorCWRpY3Qt
bGlzdC5oIFwKKwlnZW9tLmggXAorCW1lbWFsbG9jLmggXAorCW1lc2guaCBcCisJbm9ybWFsLmgg
XAorCXByaW9yaXR5cS1oZWFwLmggXAorCXByaW9yaXR5cS1oZWFwLmMgXAorCXByaW9yaXR5cS1z
b3J0LmggXAorCXByaW9yaXR5cS5oIFwKKwlyZW5kZXIuaCBcCisJc3dlZXAuaCBcCisJdGVzcy5o
IFwKKwl0ZXNzbW9uby5oIFwKKwkkKE5VTEwpCisKK0NGSUxFUyA9IFwKKwlkaWN0LmMgXAorCWdl
b20uYyBcCisJbWVtYWxsb2MuYyBcCisJbWVzaC5jIFwKKwlub3JtYWwuYyBcCisJcHJpb3JpdHlx
LmMgXAorCXJlbmRlci5jIFwKKwlzd2VlcC5jIFwKKwl0ZXNzLmMgXAorCXRlc3Ntb25vLmMgXAor
CSQoTlVMTCkKKworZGVmYXVsdCBsaWJzIGxpYnNfaW5zdGFsbCBpbnN0YWxsOiAkKFRBUkdFVCkK
KworaGVhZGVycyBoZWFkZXJzX2luc3RhbGwgYXBwczoKKworJChUQVJHRVQpOiAkKE9CSkVDVFMp
CisJJChBUikgY3JsICRAICQoT0JKRUNUUyk7CisKK2luY2x1ZGUgJChDT01NT05SVUxFUykKSW5k
ZXg6IFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9JbWFrZWZpbGUKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL0ltYWtlZmlsZQkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9JbWFrZWZpbGUJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjEgQEAKK1hDT01NIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRv
IHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorWENPTU0gbWFkZSBzdWJqZWN0
IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQor
WENPTU0gU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRo
ZSBjb250ZW50cyBvZiB0aGlzCitYQ09NTSBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHBy
b3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQorWENPTU0gdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEg
Y29weQorWENPTU0gb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0
bjogTGVnYWwgU2VydmljZXMsIDE2MDAKK1hDT01NIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3Vu
dGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKK1hDT01NIAorWENPTU0gaHR0cDovL29z
cy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCitYQ09NTSAKK1hDT01NIE5vdGUgdGhhdCwgYXMgcHJv
dmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgor
WENPTU0gIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5U
SUVTIEFORCBDT05ESVRJT05TCitYQ09NTSBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQg
TElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKK1hDT01NIENPTkRJVElPTlMg
T0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQor
WENPTU0gUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KK1hDT01NIAor
WENPTU0gT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUg
SW1wbGVtZW50YXRpb24sCitYQ09NTSBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2
LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKK1hDT01NIEluYy4gVGhlIE9y
aWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywg
SW5jLgorWENPTU0gQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBh
cnRpZXMgaXMgYXMgaW5kaWNhdGVkCitYQ09NTSBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorWENPTU0gCitYQ09NTSBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBU
aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworWENPTU0gZXN0YWJsaXNoZWQg
YnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQorWENP
TU0gT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEu
Mi4xKSwgcmVsZWFzZWQKK1hDT01NIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhp
Y3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorWENPTU0gMS4zKSwgcmVsZWFzZWQg
Tm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCitYQ09N
TSBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5
OTguIFRoaXMgc29mdHdhcmUKK1hDT01NIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikg
dmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KK1hDT01NIHB1Ymxpc2hlZCBieSBT
R0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworWENP
TU0gY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRp
b24uCitYQ09NTQorCisjaW5jbHVkZSA8TGlicmFyeS50bXBsPgorCitPQkpTID0gXAorCWRpY3Qu
byBcCisJZ2VvbS5vIFwKKwltZW1hbGxvYy5vIFwKKwltZXNoLm8gXAorCW5vcm1hbC5vIFwKKwlw
cmlvcml0eXEubyBcCisJcmVuZGVyLm8gXAorCXN3ZWVwLm8gXAorCXRlc3MubyBcCisJdGVzc21v
bm8ubworCitJTkNMVURFUyA9IFwKKwktSS4uL2luY2x1ZGUgXAorCS1JJChUT1ApL2luY2x1ZGUg
XAorCS1JJChUT1ApL2luY2x1ZGUvR0wKKworREVGSU5FUyA9IFwKKwktRE5ERUJVRworCitOb3Jt
YWxMaWJyYXJ5T2JqZWN0UnVsZSgpCisKK05vcm1hbExpYnJhcnlUYXJnZXQodGVzcywgJChPQkpT
KSkKKworRGVwZW5kVGFyZ2V0KCkKK0NsZWFuVGFyZ2V0KCkKSW5kZXg6IFdlYkNvcmUvdGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy9SRUFETUUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS90aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL1JFQURNRQkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvdGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9SRUFETUUJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQ3IEBACisvKgorKiog
JEhlYWRlcjogL2N2cy9wcm9qZWN0cy9vZ2wtc2FtcGxlL21haW4vZ2Z4L2xpYi9nbHUvbGlidGVz
cy9SRUFETUUsdiAxLjEgMjAwMC8wNC8yNiAwNTo1Mzo1OSBsanAgRXhwICQKKyovCisKK0dlbmVy
YWwgUG9seWdvbiBUZXNzZWxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
VGhpcyBub3RlIGRlc2NyaWJlcyBhIHRlc3NlbGF0b3IgZm9yIHBvbHlnb25zIGNvbnNpc3Rpbmcg
b2Ygb25lIG9yCisgIG1vcmUgY2xvc2VkIGNvbnRvdXJzLiAgSXQgaXMgYmFja3dhcmQtY29tcGF0
aWJsZSB3aXRoIHRoZSBjdXJyZW50CisgIE9wZW5HTCBVdGlsaXRpZXMgdGVzc2VsYXRvciwgYW5k
IGlzIGludGVuZGVkIHRvIHJlcGxhY2UgaXQuICBIZXJlIGlzCisgIGEgc3VtbWFyeSBvZiB0aGUg
bWFqb3IgZGlmZmVyZW5jZXM6CisKKyAgIC0gaW5wdXQgY29udG91cnMgY2FuIGJlIGludGVyc2Vj
dGluZywgc2VsZi1pbnRlcnNlY3RpbmcsIG9yIGRlZ2VuZXJhdGUuCisgIAorICAgLSBzdXBwb3J0
cyBhIGNob2ljZSBvZiBzZXZlcmFsIHdpbmRpbmcgcnVsZXMgZm9yIGRldGVybWluaW5nIHdoaWNo
IHBhcnRzCisgICAgIG9mIHRoZSBwb2x5Z29uIGFyZSBvbiB0aGUgImludGVyaW9yIi4gIFRoaXMg
bWFrZXMgaXQgcG9zc2libGUgdG8gZG8KKyAgICAgQ1NHIG9wZXJhdGlvbnMgb24gcG9seWdvbnMu
CisgIAorICAgLSBib3VuZGFyeSBleHRyYWN0aW9uOiBpbnN0ZWFkIG9mIHRlc3NlbGF0aW5nIHRo
ZSBwb2x5Z29uLCByZXR1cm5zIGEKKyAgICAgc2V0IG9mIGNsb3NlZCBjb250b3VycyB3aGljaCBz
ZXBhcmF0ZSB0aGUgaW50ZXJpb3IgZnJvbSB0aGUgZXh0ZXJpb3IuCisgIAorICAgLSByZXR1cm5z
IHRoZSBvdXRwdXQgYXMgYSBzbWFsbCBudW1iZXIgb2YgdHJpYW5nbGUgZmFucyBhbmQgc3RyaXBz
LAorICAgICByYXRoZXIgdGhhbiBhIGxpc3Qgb2YgaW5kZXBlbmRlbnQgdHJpYW5nbGVzICh3aGVu
IHBvc3NpYmxlKS4KKyAgCisgICAtIG91dHB1dCBpcyBhdmFpbGFibGUgYXMgYW4gZXhwbGljaXQg
bWVzaCAoYSBxdWFkLWVkZ2Ugc3RydWN0dXJlKSwKKyAgICAgaW4gYWRkaXRpb24gdG8gdGhlIG5v
cm1hbCBjYWxsYmFjayBpbnRlcmZhY2UuCisgIAorICAgLSB0aGUgYWxnb3JpdGhtIHVzZWQgaXMg
ZXh0cmVtZWx5IHJvYnVzdC4KKworCitUaGUgaW50ZXJmYWNlCistLS0tLS0tLS0tLS0tCisKKyAg
VGhlIHRlc3NlbGF0b3Igc3RhdGUgaXMgbWFpbnRhaW5lZCBpbiBhICJ0ZXNzZWxhdG9yIG9iamVj
dCIuCisgIFRoZXNlIGFyZSBhbGxvY2F0ZWQgYW5kIGRlc3Ryb3llZCB1c2luZworCisgICAgIEdM
VXRlc3NlbGF0b3IgKmdsdU5ld1Rlc3MoIHZvaWQgKTsKKyAgICAgdm9pZCBnbHVEZWxldGVUZXNz
KCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7CisKKyAgU2V2ZXJhbCB0ZXNzZWxhdG9yIG9iamVjdHMg
bWF5IGJlIHVzZWQgc2ltdWx0YW5lb3VzbHkuCisKKyAgSW5wdXRzCisgIC0tLS0tLQorICAKKyAg
VGhlIGlucHV0IGNvbnRvdXJzIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgZm9sbG93aW5nIHJvdXRp
bmVzOgorCisgICAgIHZvaWQgZ2x1VGVzc0JlZ2luUG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVz
cyApOworICAgICB2b2lkIGdsdVRlc3NCZWdpbkNvbnRvdXIoIEdMVXRlc3NlbGF0b3IgKnRlc3Mg
KTsKKyAgICAgdm9pZCBnbHVUZXNzVmVydGV4KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVjb29y
ZCBjb29yZHNbM10sIHZvaWQgKmRhdGEgKTsKKyAgICAgdm9pZCBnbHVUZXNzRW5kQ29udG91cigg
R0xVdGVzc2VsYXRvciAqdGVzcyApOworICAgICB2b2lkIGdsdVRlc3NFbmRQb2x5Z29uKCBHTFV0
ZXNzZWxhdG9yICp0ZXNzICk7CisKKyAgV2l0aGluIGVhY2ggQmVnaW5Qb2x5Z29uL0VuZFBvbHln
b24gcGFpciwgdGhlcmUgY2FuIGJlIHplcm8gb3IgbW9yZQorICBjYWxscyB0byBCZWdpbkNvbnRv
dXIvRW5kQ29udG91ci4gIFdpdGhpbiBlYWNoIGNvbnRvdXIsIHRoZXJlIGFyZSB6ZXJvCisgIG9y
IG1vcmUgY2FsbHMgdG8gZ2x1VGVzc1ZlcnRleCgpLiAgVGhlIHZlcnRpY2VzIHNwZWNpZnkgYSBj
bG9zZWQKKyAgY29udG91ciAodGhlIGxhc3QgdmVydGV4IG9mIGVhY2ggY29udG91ciBpcyBhdXRv
bWF0aWNhbGx5IGxpbmtlZCB0bworICB0aGUgZmlyc3QpLgorCisgICJjb29yZHMiIGdpdmUgdGhl
IGNvb3JkaW5hdGVzIG9mIHRoZSB2ZXJ0ZXggaW4gMy1zcGFjZS4gIEZvciB1c2VmdWwKKyAgcmVz
dWx0cywgYWxsIHZlcnRpY2VzIHNob3VsZCBsaWUgaW4gc29tZSBwbGFuZSwgc2luY2UgdGhlIHZl
cnRpY2VzCisgIGFyZSBwcm9qZWN0ZWQgb250byBhIHBsYW5lIGJlZm9yZSB0ZXNzZWxhdGlvbi4g
ICJkYXRhIiBpcyBhIHBvaW50ZXIKKyAgdG8gYSB1c2VyLWRlZmluZWQgdmVydGV4IHN0cnVjdHVy
ZSwgd2hpY2ggdHlwaWNhbGx5IGNvbnRhaW5zIG90aGVyCisgIGluZm9ybWF0aW9uIHN1Y2ggYXMg
Y29sb3IsIHRleHR1cmUgY29vcmRpbmF0ZXMsIG5vcm1hbCwgZXRjLiAgSXQgaXMKKyAgdXNlZCB0
byByZWZlciB0byB0aGUgdmVydGV4IGR1cmluZyByZW5kZXJpbmcuCisKKyAgVGhlIGxpYnJhcnkg
Y2FuIGJlIGNvbXBpbGVkIGluIHNpbmdsZS0gb3IgZG91YmxlLXByZWNpc2lvbjsgdGhlIHR5cGUK
KyAgR0xVY29vcmQgcmVwcmVzZW50cyBlaXRoZXIgImZsb2F0IiBvciAiZG91YmxlIiBhY2NvcmRp
bmdseS4gIFRoZSBHTFUKKyAgdmVyc2lvbiB3aWxsIGJlIGF2YWlsYWJsZSBpbiBkb3VibGUtcHJl
Y2lzaW9uIG9ubHkuICBDb21waWxlIHdpdGgKKyAgR0xVX1RFU1NfQVBJX0ZMT0FUIGRlZmluZWQg
dG8gZ2V0IHRoZSBzaW5nbGUtcHJlY2lzaW9uIHZlcnNpb24uCisKKyAgV2hlbiBFbmRQb2x5Z29u
IGlzIGNhbGxlZCwgdGhlIHRlc3NlbGF0aW9uIGFsZ29yaXRobSBkZXRlcm1pbmVzCisgIHdoaWNo
IHJlZ2lvbnMgYXJlIGludGVyaW9yIHRvIHRoZSBnaXZlbiBjb250b3VycywgYWNjb3JkaW5nIHRv
IG9uZQorICBvZiBzZXZlcmFsICJ3aW5kaW5nIHJ1bGVzIiBkZXNjcmliZWQgYmVsb3cuICBUaGUg
aW50ZXJpb3IgcmVnaW9ucworICBhcmUgdGhlbiB0ZXNzZWxhdGVkLCBhbmQgdGhlIG91dHB1dCBp
cyBwcm92aWRlZCBhcyBjYWxsYmFja3MuCisKKworICBSZW5kZXJpbmcgQ2FsbGJhY2tzCisgIC0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICBDYWxsYmFja3MgYXJlIHNwZWNpZmllZCBieSB0aGUgY2xp
ZW50IHVzaW5nCisKKyAgICAgdm9pZCBnbHVUZXNzQ2FsbGJhY2soIEdMVXRlc3NlbGF0b3IgKnRl
c3MsIEdMZW51bSB3aGljaCwgdm9pZCAoKmZuKSgpKTsKKworICBJZiAiZm4iIGlzIE5VTEwsIGFu
eSBwcmV2aW91c2x5IGRlZmluZWQgY2FsbGJhY2sgaXMgZGlzY2FyZGVkLgorICAKKyAgVGhlIGNh
bGxiYWNrcyB1c2VkIHRvIHByb3ZpZGUgb3V0cHV0IGFyZToJLyogd2hpY2ggPT0gKi8KKworICAg
ICB2b2lkIGJlZ2luKCBHTGVudW0gdHlwZSApOwkJCS8qIEdMVV9URVNTX0JFR0lOICovCisgICAg
IHZvaWQgZWRnZUZsYWcoIEdMYm9vbGVhbiBmbGFnICk7CQkvKiBHTFVfVEVTU19FREdFX0ZMQUcg
Ki8KKyAgICAgdm9pZCB2ZXJ0ZXgoIHZvaWQgKmRhdGEgKTsJCQkvKiBHTFVfVEVTU19WRVJURVgg
Ki8KKyAgICAgdm9pZCBlbmQoIHZvaWQgKTsJCQkJLyogR0xVX1RFU1NfRU5EICovCisKKyAgQW55
IG9mIHRoZSBjYWxsYmFja3MgbWF5IGJlIGxlZnQgdW5kZWZpbmVkOyBpZiBzbywgdGhlIGNvcnJl
c3BvbmRpbmcKKyAgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUgc3VwcGxpZWQgZHVyaW5nIHJlbmRl
cmluZy4KKworICBUaGUgImJlZ2luIiBjYWxsYmFjayBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEg
cHJpbWl0aXZlOyB0eXBlIGlzIG9uZQorICBvZiBHTF9UUklBTkdMRV9TVFJJUCwgR0xfVFJJQU5H
TEVfRkFOLCBvciBHTF9UUklBTkdMRVMgKGJ1dCBzZWUgdGhlCisgIG5vdGVzIG9uICJib3VuZGFy
eSBleHRyYWN0aW9uIiBiZWxvdykuCisgIAorICBJdCBpcyBmb2xsb3dlZCBieSBhbnkgbnVtYmVy
IG9mICJ2ZXJ0ZXgiIGNhbGxiYWNrcywgd2hpY2ggc3VwcGx5IHRoZQorICB2ZXJ0aWNlcyBpbiB0
aGUgc2FtZSBvcmRlciBhcyBleHBlY3RlZCBieSB0aGUgY29ycmVzcG9uZGluZyBnbEJlZ2luKCkK
KyAgY2FsbC4gIEFmdGVyIHRoZSBsYXN0IHZlcnRleCBvZiBhIGdpdmVuIHByaW1pdGl2ZSwgdGhl
cmUgaXMgYSBjYWxsYmFjaworICB0byAiZW5kIi4KKworICBJZiB0aGUgImVkZ2VGbGFnIiBjYWxs
YmFjayBpcyBwcm92aWRlZCwgbm8gdHJpYW5nbGUgZmFucyBvciBzdHJpcHMKKyAgd2lsbCBiZSB1
c2VkLiAgV2hlbiBlZGdlRmxhZyBpcyBjYWxsZWQsIGlmICJmbGFnIiBpcyBHTF9UUlVFIHRoZW4g
ZWFjaAorICB2ZXJ0ZXggd2hpY2ggZm9sbG93cyBiZWdpbnMgYW4gZWRnZSB3aGljaCBsaWVzIG9u
IHRoZSBwb2x5Z29uIGJvdW5kYXJ5CisgIChpZS4gYW4gZWRnZSB3aGljaCBzZXBhcmF0ZXMgYW4g
aW50ZXJpb3IgcmVnaW9uIGZyb20gYW4gZXh0ZXJpb3Igb25lKS4KKyAgSWYgImZsYWciIGlzIEdM
X0ZBTFNFLCBlYWNoIHZlcnRleCB3aGljaCBmb2xsb3dzIGJlZ2lucyBhbiBlZGdlIHdoaWNoIGxp
ZXMKKyAgaW4gdGhlIHBvbHlnb24gaW50ZXJpb3IuICAiZWRnZUZsYWciIHdpbGwgYmUgY2FsbGVk
IGJlZm9yZSB0aGUgZmlyc3QKKyAgY2FsbCB0byAidmVydGV4Ii4KKworICBPdGhlciBDYWxsYmFj
a3MKKyAgLS0tLS0tLS0tLS0tLS0tCisKKyAgIHZvaWQgbWVzaCggR0xVbWVzaCAqbWVzaCApOwkJ
CS8qIEdMVV9URVNTX01FU0ggKi8KKworICAgLSBSZXR1cm5zIGFuIGV4cGxpY2l0IG1lc2gsIHJl
cHJlc2VudGVkIHVzaW5nIHRoZSBxdWFkLWVkZ2Ugc3RydWN0dXJlCisgICAgIChHdWliYXMvU3Rv
bGZpICc4NSkuICBPdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBpbnRlcmZhY2UgbWlnaHQK
KyAgICAgdXNlIGEgZGlmZmVyZW50IG1lc2ggc3RydWN0dXJlLCBzbyB0aGlzIGlzIGF2YWlsYWJs
ZSBvbmx5IG9ubHkgYXMgYW4KKyAgICAgU0dJIGV4dGVuc2lvbi4gIFdoZW4gdGhlIG1lc2ggaXMg
bm8gbG9uZ2VyIG5lZWRlZCwgaXQgc2hvdWxkIGJlIGZyZWVkCisgICAgIHVzaW5nCisKKwl2b2lk
IGdsdURlbGV0ZU1lc2goIEdMVW1lc2ggKm1lc2ggKTsKKworICAgICBUaGVyZSBpcyBhIGJyaWVm
IGRlc2NyaXB0aW9uIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlIGluY2x1ZGUKKyAgICAg
ZmlsZSAibWVzaC5oIi4gIEZvciB0aGUgZnVsbCBkZXRhaWxzLCBzZWUgTC4gR3VpYmFzIGFuZCBK
LiBTdG9sZmksCisgICAgIFByaW1pdGl2ZXMgZm9yIHRoZSBtYW5pcHVsYXRpb24gb2YgZ2VuZXJh
bCBzdWJkaXZpc2lvbnMgYW5kIHRoZQorICAgICBjb21wdXRhdGlvbiBvZiBWb3Jvbm9pIGRpYWdy
YW1zLCBBQ00gVHJhbnNhY3Rpb25zIG9uIEdyYXBoaWNzLAorICAgICA0KDIpOjc0LTEyMywgQXBy
aWwgMTk4NS4gIEZvciBhbiBpbnRyb2R1Y3Rpb24sIHNlZSB0aGUgY291cnNlIG5vdGVzCisgICAg
IGZvciBDUzM0OGEsICJNYXRoZW1hdGljYWwgRm91bmRhdGlvbnMgb2YgQ29tcHV0ZXIgR3JhcGhp
Y3MiLAorICAgICBhdmFpbGFibGUgYXQgdGhlIFN0YW5mb3JkIGJvb2tzdG9yZSAoYW5kIHRhdWdo
dCBkdXJpbmcgdGhlIGZhbGwKKyAgICAgcXVhcnRlcikuCisKKyAgIHZvaWQgZXJyb3IoIEdMZW51
bSBlcnJubyApOwkJCS8qIEdMVV9URVNTX0VSUk9SICovCisKKyAgIC0gZXJybm8gaXMgb25lIG9m
CUdMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9MWUdPTiwKKwkJCUdMVV9URVNTX01JU1NJTkdfRU5E
X1BPTFlHT04sCisJCQlHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVIsCisJCQlHTFVfVEVT
U19NSVNTSU5HX0VORF9DT05UT1VSLAorCQkJR0xVX1RFU1NfQ09PUkRfVE9PX0xBUkdFLAorCQkJ
R0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLCisKKyAgICAgVGhlIGZpcnN0IGZvdXIgYXJl
IG9idmlvdXMuICBUaGUgaW50ZXJmYWNlIHJlY292ZXJzIGZyb20gdGhlc2UKKyAgICAgZXJyb3Jz
IGJ5IGluc2VydGluZyB0aGUgbWlzc2luZyBjYWxsKHMpLgorICAKKyAgICAgR0xVX1RFU1NfQ09P
UkRfVE9PX0xBUkdFIHNheXMgdGhhdCBzb21lIHZlcnRleCBjb29yZGluYXRlIGV4Y2VlZGVkCisg
ICAgIHRoZSBwcmVkZWZpbmVkIGNvbnN0YW50IEdMVV9URVNTX01BWF9DT09SRCBpbiBhYnNvbHV0
ZSB2YWx1ZSwgYW5kCisgICAgIHRoYXQgdGhlIHZhbHVlIGhhcyBiZWVuIGNsYW1wZWQuICAoQ29v
cmRpbmF0ZSB2YWx1ZXMgbXVzdCBiZSBzbWFsbAorICAgICBlbm91Z2ggc28gdGhhdCB0d28gY2Fu
IGJlIG11bHRpcGxpZWQgdG9nZXRoZXIgd2l0aG91dCBvdmVyZmxvdy4pCisKKyAgICAgR0xVX1RF
U1NfTkVFRF9DT01CSU5FX0NBTExCQUNLIHNheXMgdGhhdCB0aGUgYWxnb3JpdGhtIGRldGVjdGVk
IGFuCisgICAgIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byBlZGdlcyBpbiB0aGUgaW5wdXQgZGF0
YSwgYW5kIHRoZSAiY29tYmluZSIKKyAgICAgY2FsbGJhY2sgKGJlbG93KSB3YXMgbm90IHByb3Zp
ZGVkLiAgTm8gb3V0cHV0IHdpbGwgYmUgZ2VuZXJhdGVkLgorCisKKyAgIHZvaWQgY29tYmluZSgg
R0xVY29vcmQgY29vcmRzWzNdLCB2b2lkICpkYXRhWzRdLAkvKiBHTFVfVEVTU19DT01CSU5FICov
CisJCSBHTFVjb29yZCB3ZWlnaHRbNF0sIHZvaWQgKipvdXREYXRhICk7CisKKyAgIC0gV2hlbiB0
aGUgYWxnb3JpdGhtIGRldGVjdHMgYW4gaW50ZXJzZWN0aW9uLCBvciB3aXNoZXMgdG8gbWVyZ2UK
KyAgICAgZmVhdHVyZXMsIGl0IG5lZWRzIHRvIGNyZWF0ZSBhIG5ldyB2ZXJ0ZXguICBUaGUgdmVy
dGV4IGlzIGRlZmluZWQKKyAgICAgYXMgYSBsaW5lYXIgY29tYmluYXRpb24gb2YgdXAgdG8gNCBl
eGlzdGluZyB2ZXJ0aWNlcywgcmVmZXJlbmNlZAorICAgICBieSBkYXRhWzAuLjNdLiAgVGhlIGNv
ZWZmaWNpZW50cyBvZiB0aGUgbGluZWFyIGNvbWJpbmF0aW9uIGFyZQorICAgICBnaXZlbiBieSB3
ZWlnaHRbMC4uM107IHRoZXNlIHdlaWdodHMgYWx3YXlzIHN1bSB0byAxLjAuICBBbGwgdmVydGV4
CisgICAgIHBvaW50ZXJzIGFyZSB2YWxpZCBldmVuIHdoZW4gc29tZSBvZiB0aGUgd2VpZ2h0cyBh
cmUgemVyby4KKyAgICAgImNvb3JkcyIgZ2l2ZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBuZXcgdmVy
dGV4LgorCisgICAgIFRoZSB1c2VyIG11c3QgYWxsb2NhdGUgYW5vdGhlciB2ZXJ0ZXgsIGludGVy
cG9sYXRlIHBhcmFtZXRlcnMKKyAgICAgdXNpbmcgImRhdGEiIGFuZCAid2VpZ2h0cyIsIGFuZCBy
ZXR1cm4gdGhlIG5ldyB2ZXJ0ZXggcG9pbnRlciBpbgorICAgICAib3V0RGF0YSIuICBUaGlzIGhh
bmRsZSBpcyBzdXBwbGllZCBkdXJpbmcgcmVuZGVyaW5nIGNhbGxiYWNrcy4KKyAgICAgRm9yIGV4
YW1wbGUsIGlmIHRoZSBwb2x5Z29uIGxpZXMgaW4gYW4gYXJiaXRyYXJ5IHBsYW5lIGluIDMtc3Bh
Y2UsCisgICAgIGFuZCB3ZSBhc3NvY2lhdGUgYSBjb2xvciB3aXRoIGVhY2ggdmVydGV4LCB0aGUg
Y29tYmluZSBjYWxsYmFjayBtaWdodAorICAgICBsb29rIGxpa2UgdGhpczoKKyAgICAKKyAgICAg
dm9pZCBteUNvbWJpbmUoIEdMVWNvb3JkIGNvb3Jkc1szXSwgVkVSVEVYICpkWzRdLAorICAgICAg
ICAgICAgICAgICAgICAgR0xVY29vcmQgd1s0XSwgVkVSVEVYICoqZGF0YU91dCApCisgICAgIHsK
KyAgICAgICAgVkVSVEVYICpuZXcgPSBuZXdfdmVydGV4KCk7CisgICAgICAgCisgICAgICAgIG5l
dy0+eCA9IGNvb3Jkc1swXTsKKyAgICAgICAgbmV3LT55ID0gY29vcmRzWzFdOworICAgICAgICBu
ZXctPnogPSBjb29yZHNbMl07CisgICAgICAgIG5ldy0+ciA9IHdbMF0qZFswXS0+ciArIHdbMV0q
ZFsxXS0+ciArIHdbMl0qZFsyXS0+ciArIHdbM10qZFszXS0+cjsKKyAgICAgICAgbmV3LT5nID0g
d1swXSpkWzBdLT5nICsgd1sxXSpkWzFdLT5nICsgd1syXSpkWzJdLT5nICsgd1szXSpkWzNdLT5n
OworICAgICAgICBuZXctPmIgPSB3WzBdKmRbMF0tPmIgKyB3WzFdKmRbMV0tPmIgKyB3WzJdKmRb
Ml0tPmIgKyB3WzNdKmRbM10tPmI7CisgICAgICAgIG5ldy0+YSA9IHdbMF0qZFswXS0+YSArIHdb
MV0qZFsxXS0+YSArIHdbMl0qZFsyXS0+YSArIHdbM10qZFszXS0+YTsKKyAgICAgICAgKmRhdGFP
dXQgPSBuZXc7CisgICAgIH0KKworICAgICBJZiB0aGUgYWxnb3JpdGhtIGRldGVjdHMgYW4gaW50
ZXJzZWN0aW9uLCB0aGVuIHRoZSAiY29tYmluZSIgY2FsbGJhY2sKKyAgICAgbXVzdCBiZSBkZWZp
bmVkLCBhbmQgbXVzdCB3cml0ZSBhIG5vbi1OVUxMIHBvaW50ZXIgaW50byAiZGF0YU91dCIuCisg
ICAgIE90aGVyd2lzZSB0aGUgR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLIGVycm9yIG9j
Y3VycywgYW5kIG5vCisgICAgIG91dHB1dCBpcyBnZW5lcmF0ZWQuICBUaGlzIGlzIHRoZSBvbmx5
IGVycm9yIHRoYXQgY2FuIG9jY3VyIGR1cmluZworICAgICB0ZXNzZWxhdGlvbiBhbmQgcmVuZGVy
aW5nLgorCisKKyAgQ29udHJvbCBvdmVyIFRlc3NlbGF0aW9uCisgIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAKKyAgIHZvaWQgZ2x1VGVzc1Byb3BlcnR5KCBHTFV0ZXNzZWxhdG9yICp0ZXNz
LCBHTGVudW0gd2hpY2gsIEdMVWNvb3JkIHZhbHVlICk7CisKKyAgIFByb3BlcnRpZXMgZGVmaW5l
ZDoKKworICAgIC0gR0xVX1RFU1NfV0lORElOR19SVUxFLiAgUG9zc2libGUgdmFsdWVzOgorCisJ
ICBHTFVfVEVTU19XSU5ESU5HX09ERAorCSAgR0xVX1RFU1NfV0lORElOR19OT05aRVJPCisJICBH
TFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFCisJICBHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFCisJ
ICBHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPCisKKyAgICAgIFRoZSBpbnB1dCBjb250b3Vy
cyBwYXJpdGlvbiB0aGUgcGxhbmUgaW50byByZWdpb25zLiAgQSB3aW5kaW5nCisgICAgICBydWxl
IGRldGVybWluZXMgd2hpY2ggb2YgdGhlc2UgcmVnaW9ucyBhcmUgaW5zaWRlIHRoZSBwb2x5Z29u
LgorICAgICAgCisgICAgICBGb3IgYSBzaW5nbGUgY29udG91ciBDLCB0aGUgd2luZGluZyBudW1i
ZXIgb2YgYSBwb2ludCB4IGlzIHNpbXBseQorICAgICAgdGhlIHNpZ25lZCBudW1iZXIgb2YgcmV2
b2x1dGlvbnMgd2UgbWFrZSBhcm91bmQgeCBhcyB3ZSB0cmF2ZWwKKyAgICAgIG9uY2UgYXJvdW5k
IEMgKHdoZXJlIENDVyBpcyBwb3NpdGl2ZSkuICBXaGVuIHRoZXJlIGFyZSBzZXZlcmFsCisgICAg
ICBjb250b3VycywgdGhlIGluZGl2aWR1YWwgd2luZGluZyBudW1iZXJzIGFyZSBzdW1tZWQuICBU
aGlzCisgICAgICBwcm9jZWR1cmUgYXNzb2NpYXRlcyBhIHNpZ25lZCBpbnRlZ2VyIHZhbHVlIHdp
dGggZWFjaCBwb2ludCB4IGluCisgICAgICB0aGUgcGxhbmUuICBOb3RlIHRoYXQgdGhlIHdpbmRp
bmcgbnVtYmVyIGlzIHRoZSBzYW1lIGZvciBhbGwKKyAgICAgIHBvaW50cyBpbiBhIHNpbmdsZSBy
ZWdpb24uCisKKyAgICAgIFRoZSB3aW5kaW5nIHJ1bGUgY2xhc3NpZmllcyBhIHJlZ2lvbiBhcyAi
aW5zaWRlIiBpZiBpdHMgd2luZGluZworICAgICAgbnVtYmVyIGJlbG9uZ3MgdG8gdGhlIGNob3Nl
biBjYXRlZ29yeSAob2RkLCBub256ZXJvLCBwb3NpdGl2ZSwKKyAgICAgIG5lZ2F0aXZlLCBvciBh
YnNvbHV0ZSB2YWx1ZSBvZiBhdCBsZWFzdCB0d28pLiAgVGhlIGN1cnJlbnQgR0xVCisgICAgICB0
ZXNzZWxhdG9yIGltcGxlbWVudHMgdGhlICJvZGQiIHJ1bGUuICBUaGUgIm5vbnplcm8iIHJ1bGUg
aXMgYW5vdGhlcgorICAgICAgY29tbW9uIHdheSB0byBkZWZpbmUgdGhlIGludGVyaW9yLiAgVGhl
IG90aGVyIHRocmVlIHJ1bGVzIGFyZQorICAgICAgdXNlZnVsIGZvciBwb2x5Z29uIENTRyBvcGVy
YXRpb25zIChzZWUgYmVsb3cpLgorCisgICAgLSBHTFVfVEVTU19CT1VOREFSWV9PTkxZLiAgVmFs
dWVzOiBUUlVFIChub24temVybykgb3IgRkFMU0UgKHplcm8pLgorCisgICAgICBJZiBUUlVFLCBy
ZXR1cm5zIGEgc2V0IG9mIGNsb3NlZCBjb250b3VycyB3aGljaCBzZXBhcmF0ZSB0aGUKKyAgICAg
IHBvbHlnb24gaW50ZXJpb3IgYW5kIGV4dGVyaW9yIChyYXRoZXIgdGhhbiBhIHRlc3NlbGF0aW9u
KS4KKyAgICAgIEV4dGVyaW9yIGNvbnRvdXJzIGFyZSBvcmllbnRlZCBDQ1cgd2l0aCByZXNwZWN0
IHRvIHRoZSBub3JtYWwsCisgICAgICBpbnRlcmlvciBjb250b3VycyBhcmUgb3JpZW50ZWQgQ1cu
ICBUaGUgR0xVX1RFU1NfQkVHSU4gY2FsbGJhY2sKKyAgICAgIHVzZXMgdGhlIHR5cGUgR0xfTElO
RV9MT09QIGZvciBlYWNoIGNvbnRvdXIuCisgICAgICAKKyAgICAtIEdMVV9URVNTX1RPTEVSQU5D
RS4gIFZhbHVlOiBhIHJlYWwgbnVtYmVyIGJldHdlZW4gMC4wIGFuZCAxLjAuCisKKyAgICAgIFRo
aXMgc3BlY2lmaWVzIGEgdG9sZXJhbmNlIGZvciBtZXJnaW5nIGZlYXR1cmVzIHRvIHJlZHVjZSB0
aGUgc2l6ZQorICAgICAgb2YgdGhlIG91dHB1dC4gIEZvciBleGFtcGxlLCB0d28gdmVydGljZXMg
d2hpY2ggYXJlIHZlcnkgY2xvc2UgdG8KKyAgICAgIGVhY2ggb3RoZXIgbWlnaHQgYmUgcmVwbGFj
ZWQgYnkgYSBzaW5nbGUgdmVydGV4LiAgVGhlIHRvbGVyYW5jZQorICAgICAgaXMgbXVsdGlwbGll
ZCBieSB0aGUgbGFyZ2VzdCBjb29yZGluYXRlIG1hZ25pdHVkZSBvZiBhbnkgaW5wdXQgdmVydGV4
OworICAgICAgdGhpcyBzcGVjaWZpZXMgdGhlIG1heGltdW0gZGlzdGFuY2UgdGhhdCBhbnkgZmVh
dHVyZSBjYW4gbW92ZSBhcyB0aGUKKyAgICAgIHJlc3VsdCBvZiBhIHNpbmdsZSBtZXJnZSBvcGVy
YXRpb24uICBJZiBhIHNpbmdsZSBmZWF0dXJlIHRha2VzIHBhcnQKKyAgICAgIGluIHNldmVyYWwg
bWVyZ2Ugb3BlcmF0aW9ucywgdGhlIHRvdGFsIGRpc3RhbmNlIG1vdmVkIGNvdWxkIGJlIGxhcmdl
ci4KKworICAgICAgRmVhdHVyZSBtZXJnaW5nIGlzIGNvbXBsZXRlbHkgb3B0aW9uYWw7IHRoZSB0
b2xlcmFuY2UgaXMgb25seSBhIGhpbnQuCisgICAgICBUaGUgaW1wbGVtZW50YXRpb24gaXMgZnJl
ZSB0byBtZXJnZSBpbiBzb21lIGNhc2VzIGFuZCBub3QgaW4gb3RoZXJzLAorICAgICAgb3IgdG8g
bmV2ZXIgbWVyZ2UgZmVhdHVyZXMgYXQgYWxsLiAgVGhlIGRlZmF1bHQgdG9sZXJhbmNlIGlzIHpl
cm8uCisgICAgICAKKyAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG1lcmdlcyB2ZXJ0
aWNlcyBvbmx5IGlmIHRoZXkgYXJlIGV4YWN0bHkKKyAgICAgIGNvaW5jaWRlbnQsIHJlZ2FyZGxl
c3Mgb2YgdGhlIGN1cnJlbnQgdG9sZXJhbmNlLiAgQSB2ZXJ0ZXggaXMKKyAgICAgIHNwbGljZWQg
aW50byBhbiBlZGdlIG9ubHkgaWYgdGhlIGltcGxlbWVudGF0aW9uIGlzIHVuYWJsZSB0bworICAg
ICAgZGlzdGluZ3Vpc2ggd2hpY2ggc2lkZSBvZiB0aGUgZWRnZSB0aGUgdmVydGV4IGxpZXMgb24u
CisgICAgICBUd28gZWRnZXMgYXJlIG1lcmdlZCBvbmx5IHdoZW4gYm90aCBlbmRwb2ludHMgYXJl
IGlkZW50aWNhbC4KKworCisgICB2b2lkIGdsdVRlc3NOb3JtYWwoIEdMVXRlc3NlbGF0b3IgKnRl
c3MsCisJCSAgICAgIEdMVWNvb3JkIHgsIEdMVWNvb3JkIHksIEdMVWNvb3JkIHogKQorCisgICAg
LSBMZXRzIHRoZSB1c2VyIHN1cHBseSB0aGUgcG9seWdvbiBub3JtYWwsIGlmIGtub3duLiAgQWxs
IGlucHV0IGRhdGEKKyAgICAgIGlzIHByb2plY3RlZCBpbnRvIGEgcGxhbmUgcGVycGVuZGljdWxh
ciB0byB0aGUgbm9ybWFsIGJlZm9yZQorICAgICAgdGVzc2VsYXRpb24uICBBbGwgb3V0cHV0IHRy
aWFuZ2xlcyBhcmUgb3JpZW50ZWQgQ0NXIHdpdGgKKyAgICAgIHJlc3BlY3QgdG8gdGhlIG5vcm1h
bCAoQ1cgb3JpZW50YXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5CisgICAgICByZXZlcnNpbmcgdGhl
IHNpZ24gb2YgdGhlIHN1cHBsaWVkIG5vcm1hbCkuICBGb3IgZXhhbXBsZSwgaWYKKyAgICAgIHlv
dSBrbm93IHRoYXQgYWxsIHBvbHlnb25zIGxpZSBpbiB0aGUgeC15IHBsYW5lLCBjYWxsCisgICAg
ICAiZ2x1VGVzc05vcm1hbCh0ZXNzLCAwLjAsIDAuMCwgMS4wKSIgYmVmb3JlIHJlbmRlcmluZyBh
bnkgcG9seWdvbnMuCisgICAgICAKKyAgICAtIElmIHRoZSBzdXBwbGllZCBub3JtYWwgaXMgKDAs
MCwwKSAodGhlIGRlZmF1bHQgdmFsdWUpLCB0aGUKKyAgICAgIG5vcm1hbCBpcyBkZXRlcm1pbmVk
IGFzIGZvbGxvd3MuICBUaGUgZGlyZWN0aW9uIG9mIHRoZSBub3JtYWwsCisgICAgICB1cCB0byBp
dHMgc2lnbiwgaXMgZm91bmQgYnkgZml0dGluZyBhIHBsYW5lIHRvIHRoZSB2ZXJ0aWNlcywKKyAg
ICAgIHdpdGhvdXQgcmVnYXJkIHRvIGhvdyB0aGUgdmVydGljZXMgYXJlIGNvbm5lY3RlZC4gIEl0
IGlzCisgICAgICBleHBlY3RlZCB0aGF0IHRoZSBpbnB1dCBkYXRhIGxpZXMgYXBwcm94aW1hdGVs
eSBpbiBwbGFuZTsKKyAgICAgIG90aGVyd2lzZSBwcm9qZWN0aW9uIHBlcnBlbmRpY3VsYXIgdG8g
dGhlIGNvbXB1dGVkIG5vcm1hbCBtYXkKKyAgICAgIHN1YnN0YW50aWFsbHkgY2hhbmdlIHRoZSBn
ZW9tZXRyeS4gIFRoZSBzaWduIG9mIHRoZSBub3JtYWwgaXMKKyAgICAgIGNob3NlbiBzbyB0aGF0
IHRoZSBzdW0gb2YgdGhlIHNpZ25lZCBhcmVhcyBvZiBhbGwgaW5wdXQgY29udG91cnMKKyAgICAg
IGlzIG5vbi1uZWdhdGl2ZSAod2hlcmUgYSBDQ1cgY29udG91ciBoYXMgcG9zaXRpdmUgYXJlYSku
CisgICAgCisgICAgLSBUaGUgc3VwcGxpZWQgbm9ybWFsIHBlcnNpc3RzIHVudGlsIGl0IGlzIGNo
YW5nZWQgYnkgYW5vdGhlcgorICAgICAgY2FsbCB0byBnbHVUZXNzTm9ybWFsLgorCisKKyAgQmFj
a3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBHTFUgdGVzc2VsYXRvcgorICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlIHByZWZlcnJlZCBp
bnRlcmZhY2UgaXMgdGhlIG9uZSBkZXNjcmliZWQgYWJvdmUuICBUaGUgZm9sbG93aW5nCisgIHJv
dXRpbmVzIGFyZSBvYnNvbGV0ZSwgYW5kIGFyZSBwcm92aWRlZCBvbmx5IGZvciBiYWNrd2FyZCBj
b21wYXRpYmlsaXR5OgorCisgICAgdHlwZWRlZiBHTFV0ZXNzZWxhdG9yIEdMVXRyaWFuZ3VsYXRv
ck9iajsJLyogb2Jzb2xldGUgbmFtZSAqLworCisgICAgdm9pZCBnbHVCZWdpblBvbHlnb24oIEdM
VXRlc3NlbGF0b3IgKnRlc3MgKTsKKyAgICB2b2lkIGdsdU5leHRDb250b3VyKCBHTFV0ZXNzZWxh
dG9yICp0ZXNzLCBHTGVudW0gdHlwZSApOworICAgIHZvaWQgZ2x1RW5kUG9seWdvbiggR0xVdGVz
c2VsYXRvciAqdGVzcyApOworICAKKyAgInR5cGUiIGlzIG9uZSBvZiBHTFVfRVhURVJJT1IsIEdM
VV9JTlRFUklPUiwgR0xVX0NDVywgR0xVX0NXLCBvcgorICBHTFVfVU5LTk9XTi4gIEl0IGlzIGln
bm9yZWQgYnkgdGhlIGN1cnJlbnQgR0xVIHRlc3NlbGF0b3IuCisgIAorICBHTFVfQkVHSU4sIEdM
VV9WRVJURVgsIEdMVV9FTkQsIEdMVV9FUlJPUiwgYW5kIEdMVV9FREdFX0ZMQUcgYXJlIGRlZmlu
ZWQKKyAgYXMgc3lub255bXMgZm9yIEdMVV9URVNTX0JFR0lOLCBHTFVfVEVTU19WRVJURVgsIEdM
VV9URVNTX0VORCwKKyAgR0xVX1RFU1NfRVJST1IsIGFuZCBHTFVfVEVTU19FREdFX0ZMQUcuCisK
KworUG9seWdvbiBDU0cgb3BlcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRo
ZSBmZWF0dXJlcyBvZiB0aGUgdGVzc2VsYXRvciBtYWtlIGl0IGVhc3kgdG8gZmluZCB0aGUgdW5p
b24sIGRpZmZlcmVuY2UsCisgIG9yIGludGVyc2VjdGlvbiBvZiBzZXZlcmFsIHBvbHlnb25zLgor
CisgIEZpcnN0LCBhc3N1bWUgdGhhdCBlYWNoIHBvbHlnb24gaXMgZGVmaW5lZCBzbyB0aGF0IHRo
ZSB3aW5kaW5nIG51bWJlcgorICBpcyAwIGZvciBlYWNoIGV4dGVyaW9yIHJlZ2lvbiwgYW5kIDEg
Zm9yIGVhY2ggaW50ZXJpb3IgcmVnaW9uLiAgVW5kZXIKKyAgdGhpcyBtb2RlbCwgQ0NXIGNvbnRv
dXJzIGRlZmluZSB0aGUgb3V0ZXIgYm91bmRhcnkgb2YgdGhlIHBvbHlnb24sIGFuZAorICBDVyBj
b250b3VycyBkZWZpbmUgaG9sZXMuICBDb250b3VycyBtYXkgYmUgbmVzdGVkLCBidXQgYSBuZXN0
ZWQKKyAgY29udG91ciBtdXN0IGJlIG9yaWVudGVkIG9wcG9zaXRlbHkgZnJvbSB0aGUgY29udG91
ciB0aGF0IGNvbnRhaW5zIGl0LgorCisgIElmIHRoZSBvcmlnaW5hbCBwb2x5Z29ucyBkbyBub3Qg
c2F0aXNmeSB0aGlzIGRlc2NyaXB0aW9uLCB0aGV5IGNhbiBiZQorICBjb252ZXJ0ZWQgdG8gdGhp
cyBmb3JtIGJ5IGZpcnN0IHJ1bm5pbmcgdGhlIHRlc3NlbGF0b3Igd2l0aCB0aGUKKyAgR0xVX1RF
U1NfQk9VTkRBUllfT05MWSBwcm9wZXJ0eSB0dXJuZWQgb24uICBUaGlzIHJldHVybnMgYSBsaXN0
IG9mCisgIGNvbnRvdXJzIHNhdGlzZnlpbmcgdGhlIHJlc3RyaWN0aW9uIGFib3ZlLiAgQnkgYWxs
b2NhdGluZyB0d28KKyAgdGVzc2VsYXRvciBvYmplY3RzLCB0aGUgY2FsbGJhY2tzIGZyb20gb25l
IHRlc3NlbGF0b3IgY2FuIGJlIGZlZAorICBkaXJlY3RseSB0byB0aGUgaW5wdXQgb2YgYW5vdGhl
ci4KKworICBHaXZlbiB0d28gb3IgbW9yZSBwb2x5Z29ucyBvZiB0aGUgZm9ybSBhYm92ZSwgQ1NH
IG9wZXJhdGlvbnMgY2FuIGJlCisgIGltcGxlbWVudGVkIGFzIGZvbGxvd3M6CisKKyAgVW5pb24K
KyAgICAgRHJhdyBhbGwgdGhlIGlucHV0IGNvbnRvdXJzIGFzIGEgc2luZ2xlIHBvbHlnb24uICBU
aGUgd2luZGluZyBudW1iZXIKKyAgICAgb2YgZWFjaCByZXN1bHRpbmcgcmVnaW9uIGlzIHRoZSBu
dW1iZXIgb2Ygb3JpZ2luYWwgcG9seWdvbnMKKyAgICAgd2hpY2ggY292ZXIgaXQuICBUaGUgdW5p
b24gY2FuIGJlIGV4dHJhY3RlZCB1c2luZyB0aGUKKyAgICAgR0xVX1RFU1NfV0lORElOR19OT05a
RVJPIG9yIEdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkUgd2luZGluZyBydWxlcy4KKyAgICAgTm90
ZSB0aGF0IHdpdGggdGhlIG5vbnplcm8gcnVsZSwgd2Ugd291bGQgZ2V0IHRoZSBzYW1lIHJlc3Vs
dCBpZgorICAgICBhbGwgY29udG91ciBvcmllbnRhdGlvbnMgd2VyZSByZXZlcnNlZC4KKworICBJ
bnRlcnNlY3Rpb24gKHR3byBwb2x5Z29ucyBhdCBhIHRpbWUgb25seSkKKyAgICAgRHJhdyBhIHNp
bmdsZSBwb2x5Z29uIHVzaW5nIHRoZSBjb250b3VycyBmcm9tIGJvdGggaW5wdXQgcG9seWdvbnMu
CisgICAgIEV4dHJhY3QgdGhlIHJlc3VsdCB1c2luZyBHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFf
VFdPLiAgKFNpbmNlIHRoaXMKKyAgICAgd2luZGluZyBydWxlIGxvb2tzIGF0IHRoZSBhYnNvbHV0
ZSB2YWx1ZSwgcmV2ZXJzaW5nIGFsbCBjb250b3VyCisgICAgIG9yaWVudGF0aW9ucyBkb2VzIG5v
dCBjaGFuZ2UgdGhlIHJlc3VsdC4pCisKKyAgRGlmZmVyZW5jZQorICAKKyAgICAgU3VwcG9zZSB3
ZSB3YW50IHRvIGNvbXB1dGUgQSBcIChCIHVuaW9uIEMgdW5pb24gRCkuICBEcmF3IGEgc2luZ2xl
CisgICAgIHBvbHlnb24gY29uc2lzdGluZyBvZiB0aGUgdW5tb2RpZmllZCBjb250b3VycyBmcm9t
IEEsIGZvbGxvd2VkIGJ5CisgICAgIHRoZSBjb250b3VycyBvZiBCLEMsRCB3aXRoIHRoZSB2ZXJ0
ZXggb3JkZXIgcmV2ZXJzZWQgKHRoaXMgY2hhbmdlcworICAgICB0aGUgd2luZGluZyBudW1iZXIg
b2YgdGhlIGludGVyaW9yIHJlZ2lvbnMgdG8gLTEpLiAgVG8gZXh0cmFjdCB0aGUKKyAgICAgcmVz
dWx0LCB1c2UgdGhlIEdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkUgcnVsZS4KKyAgIAorICAgICBJ
ZiBCLEMsRCBhcmUgdGhlIHJlc3VsdCBvZiBhIEdMVV9URVNTX0JPVU5EQVJZX09OTFkgY2FsbCwg
YW4KKyAgICAgYWx0ZXJuYXRpdmUgdG8gcmV2ZXJzaW5nIHRoZSB2ZXJ0ZXggb3JkZXIgaXMgdG8g
cmV2ZXJzZSB0aGUgc2lnbiBvZgorICAgICB0aGUgc3VwcGxpZWQgbm9ybWFsLiAgRm9yIGV4YW1w
bGUgaW4gdGhlIHgteSBwbGFuZSwgY2FsbAorICAgICBnbHVUZXNzTm9ybWFsKCB0ZXNzLCAwLjAs
IDAuMCwgLTEuMCApLgorIAorCitQZXJmb3JtYW5jZQorLS0tLS0tLS0tLS0KKworICBUaGUgdGVz
c2VsYXRvciBpcyBub3QgaW50ZW5kZWQgZm9yIGltbWVkaWF0ZS1tb2RlIHJlbmRlcmluZzsgd2hl
bgorICBwb3NzaWJsZSB0aGUgb3V0cHV0IHNob3VsZCBiZSBjYWNoZWQgaW4gYSB1c2VyIHN0cnVj
dHVyZSBvciBkaXNwbGF5CisgIGxpc3QuICBHZW5lcmFsIHBvbHlnb24gdGVzc2VsYXRpb24gaXMg
YW4gaW5oZXJlbnRseSBkaWZmaWN1bHQgcHJvYmxlbSwKKyAgZXNwZWNpYWxseSBnaXZlbiB0aGUg
Z29hbCBvZiBleHRyZW1lIHJvYnVzdG5lc3MuCisKKyAgVGhlIGltcGxlbWVudGF0aW9uIG1ha2Vz
IGFuIGVmZm9ydCB0byBvdXRwdXQgYSBzbWFsbCBudW1iZXIgb2YgZmFucworICBhbmQgc3RyaXBz
OyB0aGlzIHNob3VsZCBpbXByb3ZlIHRoZSByZW5kZXJpbmcgcGVyZm9ybWFuY2Ugd2hlbiB0aGUK
KyAgb3V0cHV0IGlzIHVzZWQgaW4gYSBkaXNwbGF5IGxpc3QuCisKKyAgU2luZ2xlLWNvbnRvdXIg
aW5wdXQgcG9seWdvbnMgYXJlIGZpcnN0IHRlc3RlZCB0byBzZWUgd2hldGhlciB0aGV5IGNhbgor
ICBiZSByZW5kZXJlZCBhcyBhIHRyaWFuZ2xlIGZhbiB3aXRoIHJlc3BlY3QgdG8gdGhlIGZpcnN0
IHZlcnRleCAodG8KKyAgYXZvaWQgcnVubmluZyB0aGUgZnVsbCBkZWNvbXBvc2l0aW9uIGFsZ29y
aXRobSBvbiBjb252ZXggcG9seWdvbnMpLgorICBOb24tY29udmV4IHBvbHlnb25zIG1heSBiZSBy
ZW5kZXJlZCBieSB0aGlzICJmYXN0IHBhdGgiIGFzIHdlbGwsIGlmCisgIHRoZSBhbGdvcml0aG0g
Z2V0cyBsdWNreSBpbiBpdHMgY2hvaWNlIG9mIGEgc3RhcnRpbmcgdmVydGV4LgorCisgIEZvciBi
ZXN0IHBlcmZvcm1hbmNlIGZvbGxvdyB0aGVzZSBndWlkZWxpbmVzOgorCisgICAtIHN1cHBseSB0
aGUgcG9seWdvbiBub3JtYWwsIGlmIGF2YWlsYWJsZSwgdXNpbmcgZ2x1VGVzc05vcm1hbCgpLgor
ICAgICBUaGlzIHJlcHJlc2VudHMgYWJvdXQgMTAlIG9mIHRoZSBjb21wdXRhdGlvbiB0aW1lLiAg
Rm9yIGV4YW1wbGUsCisgICAgIGlmIGFsbCBwb2x5Z29ucyBsaWUgaW4gdGhlIHgteSBwbGFuZSwg
dXNlIGdsdVRlc3NOb3JtYWwodGVzcywwLDAsMSkuCisKKyAgIC0gcmVuZGVyIG1hbnkgcG9seWdv
bnMgdXNpbmcgdGhlIHNhbWUgdGVzc2VsYXRvciBvYmplY3QsIHJhdGhlciB0aGFuCisgICAgIGFs
bG9jYXRpbmcgYSBuZXcgdGVzc2VsYXRvciBmb3IgZWFjaCBvbmUuICAoSW4gYSBtdWx0aS10aHJl
YWRlZCwKKyAgICAgbXVsdGktcHJvY2Vzc29yIGVudmlyb25tZW50IHlvdSBtYXkgZ2V0IGJldHRl
ciBwZXJmb3JtYW5jZSB1c2luZworICAgICBzZXZlcmFsIHRlc3NlbGF0b3JzLikKKworCitDb21w
YXJpc29uIHdpdGggdGhlIEdMVSB0ZXNzZWxhdG9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKyAgT24gcG9seWdvbnMgd2hpY2ggbWFrZSBpdCB0aHJvdWdoIHRoZSAiZmFz
dCBwYXRoIiwgdGhlIHRlc3NlbGF0b3IgaXMKKyAgMyB0byA1IHRpbWVzIGZhc3RlciB0aGFuIHRo
ZSBHTFUgdGVzc2VsYXRvci4KKworICBPbiBwb2x5Z29ucyB3aGljaCBkb24ndCBtYWtlIGl0IHRo
cm91Z2ggdGhlIGZhc3QgcGF0aCAoYnV0IHdoaWNoIGRvbid0CisgIGhhdmUgc2VsZi1pbnRlcnNl
Y3Rpb25zIG9yIGRlZ2VuZXJhY2llcyksIGl0IGlzIGFib3V0IDIgdGltZXMgc2xvd2VyLgorCisg
IE9uIHBvbHlnb25zIHdpdGggc2VsZi1pbnRlcnNlY3Rpb25zIG9yIGRlZ2VuZXJhY2VzLCB0aGVy
ZSBpcyBub3RoaW5nCisgIHRvIGNvbXBhcmUgYWdhaW5zdC4KKworICBUaGUgbmV3IHRlc3NlbGF0
b3IgZ2VuZXJhdGVzIG1hbnkgbW9yZSBmYW5zIGFuZCBzdHJpcHMsIHJlZHVjaW5nIHRoZQorICBu
dW1iZXIgb2YgdmVydGljZXMgdGhhdCBuZWVkIHRvIGJlIHNlbnQgdG8gdGhlIGhhcmR3YXJlLgor
CisgIEtleSB0byB0aGUgc3RhdGlzdGljczoKKworCXZlcnQJCW51bWJlciBvZiBpbnB1dCB2ZXJ0
aWNlcyBvbiBhbGwgY29udG91cnMKKwljbnRyCQludW1iZXIgb2YgaW5wdXQgY29udG91cnMKKwl0
cmkJCW51bWJlciBvZiB0cmlhbmdsZXMgaW4gYWxsIG91dHB1dCBwcmltaXRpdmVzCisJc3RyaXAJ
CW51bWJlciBvZiB0cmlhbmdsZSBzdHJpcHMKKwlmYW4JCW51bWJlciBvZiB0cmlhbmdsZSBmYW5z
CisJaW5kCQludW1iZXIgb2YgaW5kZXBlbmRlbnQgdHJpYW5nbGVzCisJbXMJCW51bWJlciBvZiBt
aWxsaXNlY29uZHMgZm9yIHRlc3NlbGF0aW9uCisJCQkob24gYSAxNTBNSHogUjQ0MDAgSW5keSkK
KworICBDb252ZXggcG9seWdvbiBleGFtcGxlczoKKworTmV3OiAgICAgMyB2ZXJ0LCAgIDEgY250
ciwgICAgIDEgdHJpLCAgIDAgc3RyaXAsICAgMCBmYW4sICAgICAxIGluZCwgIDAuMDQ1OSBtcwor
T2xkOiAgICAgMyB2ZXJ0LCAgIDEgY250ciwgICAgIDEgdHJpLCAgIDAgc3RyaXAsICAgMCBmYW4s
ICAgICAxIGluZCwgICAwLjE0OSBtcworTmV3OiAgICAgNCB2ZXJ0LCAgIDEgY250ciwgICAgIDIg
dHJpLCAgIDAgc3RyaXAsICAgMSBmYW4sICAgICAwIGluZCwgIDAuMDQ1OSBtcworT2xkOiAgICAg
NCB2ZXJ0LCAgIDEgY250ciwgICAgIDIgdHJpLCAgIDAgc3RyaXAsICAgMCBmYW4sICAgICAyIGlu
ZCwgICAwLjE2MSBtcworTmV3OiAgICAzNiB2ZXJ0LCAgIDEgY250ciwgICAgMzQgdHJpLCAgIDAg
c3RyaXAsICAgMSBmYW4sICAgICAwIGluZCwgICAwLjE1MyBtcworT2xkOiAgICAzNiB2ZXJ0LCAg
IDEgY250ciwgICAgMzQgdHJpLCAgIDAgc3RyaXAsICAgMCBmYW4sICAgIDM0IGluZCwgICAwLjYy
MSBtcworCisgIENvbmNhdmUgc2luZ2xlLWNvbnRvdXIgcG9seWdvbnM6CisKK05ldzogICAgIDUg
dmVydCwgICAxIGNudHIsICAgICAzIHRyaSwgICAwIHN0cmlwLCAgIDEgZmFuLCAgICAgMCBpbmQs
ICAgMC4wNTIgbXMKK09sZDogICAgIDUgdmVydCwgICAxIGNudHIsICAgICAzIHRyaSwgICAwIHN0
cmlwLCAgIDAgZmFuLCAgICAgMyBpbmQsICAgMC4yNTIgbXMKK05ldzogICAgMTkgdmVydCwgICAx
IGNudHIsICAgIDE3IHRyaSwgICAyIHN0cmlwLCAgIDIgZmFuLCAgICAgMSBpbmQsICAgMC45MTEg
bXMKK09sZDogICAgMTkgdmVydCwgICAxIGNudHIsICAgIDE3IHRyaSwgICAwIHN0cmlwLCAgIDAg
ZmFuLCAgICAxNyBpbmQsICAgMC41MjkgbXMKK05ldzogICAxNTEgdmVydCwgICAxIGNudHIsICAg
MTQ5IHRyaSwgIDEzIHN0cmlwLCAgMTggZmFuLCAgICAgMyBpbmQsICAgIDYuODIgbXMKK09sZDog
ICAxNTEgdmVydCwgICAxIGNudHIsICAgMTQ5IHRyaSwgICAwIHN0cmlwLCAgIDMgZmFuLCAgIDE0
MyBpbmQsICAgICAyLjcgbXMKK05ldzogICA1NzQgdmVydCwgICAxIGNudHIsICAgNTcyIHRyaSwg
IDU5IHN0cmlwLCAgNTQgZmFuLCAgICAxMSBpbmQsICAgIDI2LjYgbXMKK09sZDogICA1NzQgdmVy
dCwgICAxIGNudHIsICAgNTcyIHRyaSwgICAwIHN0cmlwLCAgMzEgZmFuLCAgIDQ5OSBpbmQsICAg
IDEyLjQgbXMKKworICBNdWx0aXBsZSBjb250b3VycywgYnV0IG5vIGludGVyc2VjdGlvbnM6CisK
K05ldzogICAgIDcgdmVydCwgICAyIGNudHIsICAgICA3IHRyaSwgICAxIHN0cmlwLCAgIDAgZmFu
LCAgICAgMCBpbmQsICAgMC41MjcgbXMKK09sZDogICAgIDcgdmVydCwgICAyIGNudHIsICAgICA3
IHRyaSwgICAwIHN0cmlwLCAgIDAgZmFuLCAgICAgNyBpbmQsICAgMC4yNzQgbXMKK05ldzogICAg
ODEgdmVydCwgICA2IGNudHIsICAgIDg5IHRyaSwgICA5IHN0cmlwLCAgIDcgZmFuLCAgICAgNiBp
bmQsICAgIDMuODggbXMKK09sZDogICAgODEgdmVydCwgICA2IGNudHIsICAgIDg5IHRyaSwgICAw
IHN0cmlwLCAgMTMgZmFuLCAgICA2MSBpbmQsICAgICAyLjIgbXMKK05ldzogICAzOTEgdmVydCwg
IDE5IGNudHIsICAgNDEzIHRyaSwgIDM3IHN0cmlwLCAgMzIgZmFuLCAgICAyNiBpbmQsICAgIDIw
LjIgbXMKK09sZDogICAzOTEgdmVydCwgIDE5IGNudHIsICAgNDEzIHRyaSwgICAwIHN0cmlwLCAg
MjUgZmFuLCAgIDM2MyBpbmQsICAgIDguNjggbXMKKworICBTZWxmLWludGVyc2VjdGluZyBhbmQg
ZGVnZW5lcmF0ZSBleGFtcGxlczoKKworQm93dGllOiAgNCB2ZXJ0LCAgIDEgY250ciwgICAgIDIg
dHJpLCAgIDAgc3RyaXAsICAgMCBmYW4sICAgICAyIGluZCwgICAwLjQ4MyBtcworU3RhcjogICAg
NSB2ZXJ0LCAgIDEgY250ciwgICAgIDUgdHJpLCAgIDAgc3RyaXAsICAgMCBmYW4sICAgICA1IGlu
ZCwgICAgMC45MSBtcworUmFuZG9tOiAyNCB2ZXJ0LCAgIDcgY250ciwgICAgNDYgdHJpLCAgIDIg
c3RyaXAsICAxMiBmYW4sICAgICA3IGluZCwgICAgNS4zMiBtcworRm9udDogIDMzMyB2ZXJ0LCAg
IDIgY250ciwgICAzMzEgdHJpLCAgMzIgc3RyaXAsICAxNiBmYW4sICAgICAzIGluZCwgICAgMTQu
MSBtcworOiAgICAgIDE2NyB2ZXJ0LCAgMzUgY250ciwgICAyNTQgdHJpLCAgIDggc3RyaXAsICA1
NiBmYW4sICAgIDUyIGluZCwgICAgNDYuMyBtcworOiAgICAgICA3OCB2ZXJ0LCAgIDEgY250ciwg
IDI2NzUgdHJpLCAxNDggc3RyaXAsIDIwNyBmYW4sICAgMTgwIGluZCwgICAgIDI0MyBtcworOiAg
ICAxMjQ4MCB2ZXJ0LCAgIDIgY250ciwgMTI0NzggdHJpLCA3MzYgc3RyaXAsMTI3NSBmYW4sICAg
ICA1IGluZCwgICAgMTAxMCBtcwpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L2FsZy1vdXRsaW5lCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy9hbGctb3V0bGluZQkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy9hbGctb3V0bGluZQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisqKiAk
SGVhZGVyOiAvY3ZzL3Byb2plY3RzL29nbC1zYW1wbGUvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNz
L2FsZy1vdXRsaW5lLHYgMS4xIDIwMDAvMDQvMjYgMDU6NTM6NTkgbGpwIEV4cCAkCisqLworCitU
aGlzIGlzIG9ubHkgYSB2ZXJ5IGJyaWVmIG92ZXJ2aWV3LiAgVGhlcmUgaXMgcXVpdGUgYSBiaXQg
b2YKK2FkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBpbiB0aGUgc291cmNlIGNvZGUgaXRzZWxmLgor
CisKK0dvYWxzIG9mIHJvYnVzdCB0ZXNzZWxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK1RoZSB0ZXNzZWxhdGlvbiBhbGdvcml0aG0gaXMgZnVuZGFtZW50YWxseSBhIDJEIGFs
Z29yaXRobS4gIFdlCitpbml0aWFsbHkgcHJvamVjdCBhbGwgZGF0YSBpbnRvIGEgcGxhbmU7IG91
ciBnb2FsIGlzIHRvIHJvYnVzdGx5Cit0ZXNzZWxhdGUgdGhlIHByb2plY3RlZCBkYXRhLiAgVGhl
IHNhbWUgdG9wb2xvZ2ljYWwgdGVzc2VsYXRpb24gaXMKK3RoZW4gYXBwbGllZCB0byB0aGUgaW5w
dXQgZGF0YS4KKworVG9wb2xvZ2ljYWxseSwgdGhlIG91dHB1dCBzaG91bGQgYWx3YXlzIGJlIGEg
dGVzc2VsYXRpb24uICBJZiB0aGUKK2lucHV0IGlzIGV2ZW4gc2xpZ2h0bHkgbm9uLXBsYW5hciwg
dGhlbiBzb21lIHRyaWFuZ2xlcyB3aWxsCituZWNlc3NhcmlseSBiZSBiYWNrLWZhY2luZyB3aGVu
IHZpZXdlZCBmcm9tIHNvbWUgYW5nbGVzLCBidXQgdGhlIGdvYWwKK2lzIHRvIG1pbmltaXplIHRo
aXMgZWZmZWN0LgorCitUaGUgYWxnb3JpdGhtIG5lZWRzIHNvbWUgY2FwYWJpbGl0eSBvZiBjbGVh
bmluZyB1cCB0aGUgaW5wdXQgZGF0YSBhcword2VsbCBhcyB0aGUgbnVtZXJpY2FsIGVycm9ycyBp
biBpdHMgb3duIGNhbGN1bGF0aW9ucy4gIE9uZSB3YXkgdG8gZG8KK3RoaXMgaXMgdG8gc3BlY2lm
eSBhIHRvbGVyYW5jZSBhcyBkZWZpbmVkIGFib3ZlLCBhbmQgY2xlYW4gdXAgdGhlCitpbnB1dCBh
bmQgb3V0cHV0IGR1cmluZyB0aGUgbGluZSBzd2VlcCBwcm9jZXNzLiAgQXQgdGhlIHZlcnkgbGVh
c3QsCit0aGUgYWxnb3JpdGhtIG11c3QgaGFuZGxlIGNvaW5jaWRlbnQgdmVydGljZXMsIHZlcnRp
Y2VzIGluY2lkZW50IHRvIGFuCitlZGdlLCBhbmQgY29pbmNpZGVudCBlZGdlcy4KKworCitQaGFz
ZXMgb2YgdGhlIGFsZ29yaXRobQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gRmluZCB0
aGUgcG9seWdvbiBub3JtYWwgTi4KKzIuIFByb2plY3QgdGhlIHZlcnRleCBkYXRhIG9udG8gYSBw
bGFuZS4gIEl0IGRvZXMgbm90IG5lZWQgdG8gYmUKKyAgIHBlcnBlbmRpY3VsYXIgdG8gdGhlIG5v
cm1hbCwgZWcuIHdlIGNhbiBwcm9qZWN0IG9udG8gdGhlIHBsYW5lCisgICBwZXJwZW5kaWN1bGFy
IHRvIHRoZSBjb29yZGluYXRlIGF4aXMgd2hvc2UgZG90IHByb2R1Y3Qgd2l0aCBOCisgICBpcyBs
YXJnZXN0LgorMy4gVXNpbmcgYSBsaW5lLXN3ZWVwIGFsZ29yaXRobSwgcGFydGl0aW9uIHRoZSBw
bGFuZSBpbnRvIHgtbW9ub3RvbmUKKyAgIHJlZ2lvbnMuICBBbnkgdmVydGljYWwgbGluZSBpbnRl
cnNlY3RzIGFuIHgtbW9ub3RvbmUgcmVnaW9uIGluCisgICBhdCBtb3N0IG9uZSBpbnRlcnZhbC4K
KzQuIFRyaWFuZ3VsYXRlIHRoZSB4LW1vbm90b25lIHJlZ2lvbnMuCis1LiBHcm91cCB0aGUgdHJp
YW5nbGVzIGludG8gc3RyaXBzIGFuZCBmYW5zLgorCisKK0ZpbmRpbmcgdGhlIG5vcm1hbCB2ZWN0
b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBjb21tb24gd2F5IHRvIGZpbmQgYSBw
b2x5Z29uIG5vcm1hbCBpcyB0byBjb21wdXRlIHRoZSBzaWduZWQgYXJlYQord2hlbiB0aGUgcG9s
eWdvbiBpcyBwcm9qZWN0ZWQgYWxvbmcgdGhlIHRocmVlIGNvb3JkaW5hdGUgYXhlcy4gIFdlCitj
YW4ndCBkbyB0aGlzLCBzaW5jZSBjb250b3VycyBjYW4gaGF2ZSB6ZXJvIGFyZWEgd2l0aG91dCBi
ZWluZworZGVnZW5lcmF0ZSAoZWcuIGEgYm93dGllKS4KKworV2UgZml0IGEgcGxhbmUgdG8gdGhl
IHZlcnRleCBkYXRhLCBpZ25vcmluZyBob3cgdGhleSBhcmUgY29ubmVjdGVkCitpbnRvIGNvbnRv
dXJzLiAgSWRlYWxseSB0aGlzIHdvdWxkIGJlIGEgbGVhc3Qtc3F1YXJlcyBmaXQ7IGhvd2V2ZXIg
Zm9yCitvdXIgcHVycG9zZSB0aGUgYWNjdXJhY3kgb2YgdGhlIG5vcm1hbCBpcyBub3QgaW1wb3J0
YW50LiAgSW5zdGVhZCB3ZQorZmluZCB0aHJlZSB2ZXJ0aWNlcyB3aGljaCBhcmUgd2lkZWx5IHNl
cGFyYXRlZCwgYW5kIGNvbXB1dGUgdGhlIG5vcm1hbAordG8gdGhlIHRyaWFuZ2xlIHRoZXkgZm9y
bS4gIFRoZSB2ZXJ0aWNlcyBhcmUgY2hvc2VuIHNvIHRoYXQgdGhlCit0cmlhbmdsZSBoYXMgYW4g
YXJlYSBhdCBsZWFzdCAxL3NxcnQoMykgdGltZXMgdGhlIGxhcmdlc3QgYXJlYSBvZiBhbnkKK3Ry
aWFuZ2xlIGZvcm1lZCB1c2luZyB0aGUgaW5wdXQgdmVydGljZXMuICAKKworVGhlIGNvbnRvdXJz
IGRvIGFmZmVjdCB0aGUgb3JpZW50YXRpb24gb2YgdGhlIG5vcm1hbDsgYWZ0ZXIgY29tcHV0aW5n
Cit0aGUgbm9ybWFsLCB3ZSBjaGVjayB0aGF0IHRoZSBzdW0gb2YgdGhlIHNpZ25lZCBjb250b3Vy
IGFyZWFzIGlzCitub24tbmVnYXRpdmUsIGFuZCByZXZlcnNlIHRoZSBub3JtYWwgaWYgbmVjZXNz
YXJ5LgorCisKK1Byb2plY3RpbmcgdGhlIHZlcnRpY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitXZSBwcm9qZWN0IHRoZSB2ZXJ0aWNlcyBvbnRvIGEgcGxhbmUgcGVycGVuZGljdWxhciB0
byBvbmUgb2YgdGhlIHRocmVlCitjb29yZGluYXRlIGF4ZXMuICBUaGlzIGhlbHBzIG51bWVyaWNh
bCBhY2N1cmFjeSBieSByZW1vdmluZyBhCit0cmFuc2Zvcm1hdGlvbiBzdGVwIGJldHdlZW4gdGhl
IG9yaWdpbmFsIGlucHV0IGRhdGEgYW5kIHRoZSBkYXRhCitwcm9jZXNzZWQgYnkgdGhlIGFsZ29y
aXRobS4gIFRoZSBwcm9qZWN0aW9uIGFsc28gY29tcHJlc3NlcyB0aGUgaW5wdXQKK2RhdGE7IHRo
ZSAyRCBkaXN0YW5jZSBiZXR3ZWVuIHZlcnRpY2VzIGFmdGVyIHByb2plY3Rpb24gbWF5IGJlIHNt
YWxsZXIKK3RoYW4gdGhlIG9yaWdpbmFsIDJEIGRpc3RhbmNlLiAgSG93ZXZlciBieSBjaG9vc2lu
ZyB0aGUgY29vcmRpbmF0ZQorYXhpcyB3aG9zZSBkb3QgcHJvZHVjdCB3aXRoIHRoZSBub3JtYWwg
aXMgZ3JlYXRlc3QsIHRoZSBjb21wcmVzc2lvbgorZmFjdG9yIGlzIGF0IG1vc3QgMS9zcXJ0KDMp
LgorCitFdmVuIHRob3VnaCB0aGUgKmFjY3VyYWN5KiBvZiB0aGUgbm9ybWFsIGlzIG5vdCB0aGF0
IGltcG9ydGFudCAoc2luY2UKK3dlIGFyZSBwcm9qZWN0aW5nIHBlcnBlbmRpY3VsYXIgdG8gYSBj
b29yZGluYXRlIGF4aXMgYW55d2F5KSwgdGhlCisqcm9idXN0bmVzcyogb2YgdGhlIGNvbXB1dGF0
aW9uIGlzIGltcG9ydGFudC4gIEZvciBleGFtcGxlLCBpZiB0aGVyZQorYXJlIG1hbnkgdmVydGlj
ZXMgd2hpY2ggbGllIGFsbW9zdCBhbG9uZyBhIGxpbmUsIGFuZCBvbmUgdmVydGV4IFYKK3doaWNo
IGlzIHdlbGwtc2VwYXJhdGVkIGZyb20gdGhlIGxpbmUsIHRoZW4gb3VyIG5vcm1hbCBjb21wdXRh
dGlvbgorc2hvdWxkIGludm9sdmUgViBvdGhlcndpc2UgdGhlIHJlc3VsdHMgd2lsbCBiZSBnYXJi
YWdlLgorCitUaGUgYWR2YW50YWdlIG9mIHByb2plY3RpbmcgcGVycGVuZGljdWxhciB0byB0aGUg
cG9seWdvbiBub3JtYWwgaXMKK3RoYXQgY29tcHV0ZWQgaW50ZXJzZWN0aW9uIHBvaW50cyB3aWxs
IGJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvCit0aGVpciBpZGVhbCBsb2NhdGlvbnMuICBUbyBn
ZXQgdGhpcyBiZWhhdmlvciwgZGVmaW5lIFRSVUVfUFJPSkVDVC4KKworCitUaGUgTGluZSBTd2Vl
cAorLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIHRocmVlIGRhdGEgc3RydWN0dXJlczogdGhl
IG1lc2gsIHRoZSBldmVudCBxdWV1ZSwgYW5kIHRoZQorZWRnZSBkaWN0aW9uYXJ5LgorCitUaGUg
bWVzaCBpcyBhICJxdWFkLWVkZ2UiIGRhdGEgc3RydWN0dXJlIHdoaWNoIHJlY29yZHMgdGhlIHRv
cG9sb2d5IG9mCit0aGUgY3VycmVudCBkZWNvbXBvc2l0aW9uOyBmb3IgZGV0YWlscyBzZWUgdGhl
IGluY2x1ZGUgZmlsZSAibWVzaC5oIi4KKworVGhlIGV2ZW50IHF1ZXVlIHNpbXBseSBob2xkcyBh
bGwgdmVydGljZXMgKGJvdGggb3JpZ2luYWwgYW5kIGNvbXB1dGVkCitvbmVzKSwgb3JnYW5pemVk
IHNvIHRoYXQgd2UgY2FuIHF1aWNrbHkgZXh0cmFjdCB0aGUgdmVydGV4IHdpdGggdGhlCittaW5p
bXVtIHgtY29vcmQgKGFuZCBhbW9uZyB0aG9zZSwgdGhlIG9uZSB3aXRoIHRoZSBtaW5pbXVtIHkt
Y29vcmQpLgorCitUaGUgZWRnZSBkaWN0aW9uYXJ5IGRlc2NyaWJlcyB0aGUgY3VycmVudCBpbnRl
cnNlY3Rpb24gb2YgdGhlIHN3ZWVwCitsaW5lIHdpdGggdGhlIHJlZ2lvbnMgb2YgdGhlIHBvbHln
b24uICBUaGlzIGlzIGp1c3QgYW4gb3JkZXJpbmcgb2YgdGhlCitlZGdlcyB3aGljaCBpbnRlcnNl
Y3QgdGhlIHN3ZWVwIGxpbmUsIHNvcnRlZCBieSB0aGVpciBjdXJyZW50IG9yZGVyIG9mCitpbnRl
cnNlY3Rpb24uICBGb3IgZWFjaCBwYWlyIG9mIGVkZ2VzLCB3ZSBzdG9yZSBzb21lIGluZm9ybWF0
aW9uIGFib3V0Cit0aGUgbW9ub3RvbmUgcmVnaW9uIGJldHdlZW4gdGhlbSAtLSB0aGVzZSBhcmUg
Y2FsbCAiYWN0aXZlIHJlZ2lvbnMiCisoc2luY2UgdGhleSBhcmUgY3Jvc3NlZCBieSB0aGUgY3Vy
cmVudCBzd2VlcCBsaW5lKS4KKworVGhlIGJhc2ljIGFsZ29yaXRobSBpcyB0byBzd2VlcCBmcm9t
IGxlZnQgdG8gcmlnaHQsIHByb2Nlc3NpbmcgZWFjaAordmVydGV4LiAgVGhlIHByb2Nlc3NlZCBw
b3J0aW9uIG9mIHRoZSBtZXNoIChsZWZ0IG9mIHRoZSBzd2VlcCBsaW5lKSBpcworYSBwbGFuYXIg
ZGVjb21wb3NpdGlvbi4gIEFzIHdlIGNyb3NzIGVhY2ggdmVydGV4LCB3ZSB1cGRhdGUgdGhlIG1l
c2gKK2FuZCB0aGUgZWRnZSBkaWN0aW9uYXJ5LCB0aGVuIHdlIGNoZWNrIGFueSBuZXdseSBhZGph
Y2VudCBwYWlycyBvZgorZWRnZXMgdG8gc2VlIGlmIHRoZXkgaW50ZXJzZWN0LgorCitBIHZlcnRl
eCBjYW4gaGF2ZSBhbnkgbnVtYmVyIG9mIGVkZ2VzLiAgVmVydGljZXMgd2l0aCBtYW55IGVkZ2Vz
IGNhbgorYmUgY3JlYXRlZCBhcyB2ZXJ0aWNlcyBhcmUgbWVyZ2VkIGFuZCBpbnRlcnNlY3Rpb24g
cG9pbnRzIGFyZQorY29tcHV0ZWQuICBGb3IgdW5wcm9jZXNzZWQgdmVydGljZXMgKHJpZ2h0IG9m
IHRoZSBzd2VlcCBsaW5lKSwgdGhlc2UKK2VkZ2VzIGFyZSBpbiBubyBwYXJ0aWN1bGFyIG9yZGVy
IGFyb3VuZCB0aGUgdmVydGV4OyBmb3IgcHJvY2Vzc2VkCit2ZXJ0aWNlcywgdGhlIHRvcG9sb2dp
Y2FsIG9yZGVyaW5nIHNob3VsZCBtYXRjaCB0aGUgZ2VvbWV0cmljIG9yZGVyaW5nLgorCitUaGUg
dmVydGV4IHByb2Nlc3NpbmcgaGFwcGVucyBpbiB0d28gcGhhc2VzOiBmaXJzdCB3ZSBwcm9jZXNz
IGFyZSB0aGUKK2xlZnQtZ29pbmcgZWRnZXMgKGFsbCB0aGVzZSBlZGdlcyBhcmUgY3VycmVudGx5
IGluIHRoZSBlZGdlCitkaWN0aW9uYXJ5KS4gIFRoaXMgaW52b2x2ZXM6CisKKyAtIGRlbGV0aW5n
IHRoZSBsZWZ0LWdvaW5nIGVkZ2VzIGZyb20gdGhlIGRpY3Rpb25hcnk7CisgLSByZWxpbmtpbmcg
dGhlIG1lc2ggaWYgbmVjZXNzYXJ5LCBzbyB0aGF0IHRoZSBvcmRlciBvZiB0aGVzZSBlZGdlcyBh
cm91bmQKKyAgIHRoZSBldmVudCB2ZXJ0ZXggbWF0Y2hlcyB0aGUgb3JkZXIgaW4gdGhlIGRpY3Rp
b25hcnk7CisgLSBtYXJraW5nIGFueSB0ZXJtaW5hdGVkIHJlZ2lvbnMgKHJlZ2lvbnMgd2hpY2gg
bGllIGJldHdlZW4gdHdvIGxlZnQtZ29pbmcKKyAgIGVkZ2VzKSBhcyBlaXRoZXIgImluc2lkZSIg
b3IgIm91dHNpZGUiIGFjY29yZGluZyB0byB0aGVpciB3aW5kaW5nIG51bWJlci4KKworV2hlbiB0
aGVyZSBhcmUgbm8gbGVmdC1nb2luZyBlZGdlcywgYW5kIHRoZSBldmVudCB2ZXJ0ZXggaXMgaW4g
YW4KKyJpbnRlcmlvciIgcmVnaW9uLCB3ZSBuZWVkIHRvIGFkZCBhbiBlZGdlICh0byBzcGxpdCB0
aGUgcmVnaW9uIGludG8KK21vbm90b25lIHBpZWNlcykuICBUbyBkbyB0aGlzIHdlIHNpbXBseSBq
b2luIHRoZSBldmVudCB2ZXJ0ZXggdG8gdGhlCityaWdodG1vc3QgbGVmdCBlbmRwb2ludCBvZiB0
aGUgdXBwZXIgb3IgbG93ZXIgZWRnZSBvZiB0aGUgY29udGFpbmluZworcmVnaW9uLgorCitUaGVu
IHdlIHByb2Nlc3MgdGhlIHJpZ2h0LWdvaW5nIGVkZ2VzLiAgVGhpcyBpbnZvbHZlczoKKworIC0g
aW5zZXJ0aW5nIHRoZSBlZGdlcyBpbiB0aGUgZWRnZSBkaWN0aW9uYXJ5OworIC0gY29tcHV0aW5n
IHRoZSB3aW5kaW5nIG51bWJlciBvZiBhbnkgbmV3bHkgY3JlYXRlZCBhY3RpdmUgcmVnaW9ucy4K
KyAgIFdlIGNhbiBjb21wdXRlIHRoaXMgaW5jcmVtZW50YWxseSB1c2luZyB0aGUgd2luZGluZyBv
ZiBlYWNoIGVkZ2UKKyAgIHRoYXQgd2UgY3Jvc3MgYXMgd2Ugd2FsayB0aHJvdWdoIHRoZSBkaWN0
aW9uYXJ5LgorIC0gcmVsaW5raW5nIHRoZSBtZXNoIGlmIG5lY2Vzc2FyeSwgc28gdGhhdCB0aGUg
b3JkZXIgb2YgdGhlc2UgZWRnZXMgYXJvdW5kCisgICB0aGUgZXZlbnQgdmVydGV4IG1hdGNoZXMg
dGhlIG9yZGVyIGluIHRoZSBkaWN0aW9uYXJ5OworIC0gY2hlY2tpbmcgYW55IG5ld2x5IGFkamFj
ZW50IGVkZ2VzIGZvciBpbnRlcnNlY3Rpb24gYW5kL29yIG1lcmdpbmcuCisKK0lmIHRoZXJlIGFy
ZSBubyByaWdodC1nb2luZyBlZGdlcywgYWdhaW4gd2UgbmVlZCB0byBhZGQgb25lIHRvIHNwbGl0
Cit0aGUgY29udGFpbmluZyByZWdpb24gaW50byBtb25vdG9uZSBwaWVjZXMuICBJbiBvdXIgY2Fz
ZSBpdCBpcyBtb3N0Citjb252ZW5pZW50IHRvIGFkZCBhbiBlZGdlIHRvIHRoZSBsZWZ0bW9zdCBy
aWdodCBlbmRwb2ludCBvZiBlaXRoZXIKK2NvbnRhaW5pbmcgZWRnZTsgaG93ZXZlciB3ZSBtYXkg
bmVlZCB0byBjaGFuZ2UgdGhpcyBsYXRlciAoc2VlIHRoZQorY29kZSBmb3IgZGV0YWlscykuCisK
KworSW52YXJpYW50cworLS0tLS0tLS0tLQorCitUaGVzZSBhcmUgdGhlIG1vc3QgaW1wb3J0YW50
IGludmFyaWFudHMgbWFpbnRhaW5lZCBkdXJpbmcgdGhlIHN3ZWVwLgorV2UgZGVmaW5lIGEgZnVu
Y3Rpb24gVmVydExlcSh2MSx2Mikgd2hpY2ggZGVmaW5lcyB0aGUgb3JkZXIgaW4gd2hpY2gKK3Zl
cnRpY2VzIGNyb3NzIHRoZSBzd2VlcCBsaW5lLCBhbmQgYSBmdW5jdGlvbiBFZGdlTGVxKGUxLGUy
OyBsb2MpCit3aGljaCBzYXlzIHdoZXRoZXIgZTEgaXMgYmVsb3cgZTIgYXQgdGhlIHN3ZWVwIGV2
ZW50IGxvY2F0aW9uICJsb2MiLgorVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIG9ubHkgYXQgc3dl
ZXAgZXZlbnQgbG9jYXRpb25zIHdoaWNoIGxpZQorYmV0d2VlbiB0aGUgcmlnaHRtb3N0IGxlZnQg
ZW5kcG9pbnQgb2Yge2UxLGUyfSwgYW5kIHRoZSBsZWZ0bW9zdCByaWdodAorZW5kcG9pbnQgb2Yg
e2UxLGUyfS4KKworSW52YXJpYW50cyBmb3IgdGhlIEVkZ2UgRGljdGlvbmFyeS4KKworIC0gRWFj
aCBwYWlyIG9mIGFkamFjZW50IGVkZ2VzIGUyPVN1Y2MoZTEpIHNhdGlzZmllcyBFZGdlTGVxKGUx
LGUyKQorICAgYXQgYW55IHZhbGlkIGxvY2F0aW9uIG9mIHRoZSBzd2VlcCBldmVudC4KKyAtIElm
IEVkZ2VMZXEoZTIsZTEpIGFzIHdlbGwgKGF0IGFueSB2YWxpZCBzd2VlcCBldmVudCksIHRoZW4g
ZTEgYW5kIGUyCisgICBzaGFyZSBhIGNvbW1vbiBlbmRwb2ludC4KKyAtIEZvciBlYWNoIGUgaW4g
dGhlIGRpY3Rpb25hcnksIGUtPkRzdCBoYXMgYmVlbiBwcm9jZXNzZWQgYnV0IG5vdCBlLT5Pcmcu
CisgLSBFYWNoIGVkZ2UgZSBzYXRpc2ZpZXMgVmVydExlcShlLT5Ec3QsZXZlbnQpICYmIFZlcnRM
ZXEoZXZlbnQsZS0+T3JnKQorICAgd2hlcmUgImV2ZW50IiBpcyB0aGUgY3VycmVudCBzd2VlcCBs
aW5lIGV2ZW50LgorIC0gTm8gZWRnZSBlIGhhcyB6ZXJvIGxlbmd0aC4KKyAtIE5vIHR3byBlZGdl
cyBoYXZlIGlkZW50aWNhbCBsZWZ0IGFuZCByaWdodCBlbmRwb2ludHMuCisgCitJbnZhcmlhbnRz
IGZvciB0aGUgTWVzaCAodGhlIHByb2Nlc3NlZCBwb3J0aW9uKS4KKworIC0gVGhlIHBvcnRpb24g
b2YgdGhlIG1lc2ggbGVmdCBvZiB0aGUgc3dlZXAgbGluZSBpcyBhIHBsYW5hciBncmFwaCwKKyAg
IGllLiB0aGVyZSBpcyAqc29tZSogd2F5IHRvIGVtYmVkIGl0IGluIHRoZSBwbGFuZS4KKyAtIE5v
IHByb2Nlc3NlZCBlZGdlIGhhcyB6ZXJvIGxlbmd0aC4KKyAtIE5vIHR3byBwcm9jZXNzZWQgdmVy
dGljZXMgaGF2ZSBpZGVudGljYWwgY29vcmRpbmF0ZXMuCisgLSBFYWNoICJpbnNpZGUiIHJlZ2lv
biBpcyBtb25vdG9uZSwgaWUuIGNhbiBiZSBicm9rZW4gaW50byB0d28gY2hhaW5zCisgICBvZiBt
b25vdG9uaWNhbGx5IGluY3JlYXNpbmcgdmVydGljZXMgYWNjb3JkaW5nIHRvIFZlcnRMZXEodjEs
djIpCisgICAtIGEgbm9uLWludmFyaWFudDogdGhlc2UgY2hhaW5zIG1heSBpbnRlcnNlY3QgKHNs
aWdodGx5KSBkdWUgdG8KKyAgICAgbnVtZXJpY2FsIGVycm9ycywgYnV0IHRoaXMgZG9lcyBub3Qg
YWZmZWN0IHRoZSBhbGdvcml0aG0ncyBvcGVyYXRpb24uCisKK0ludmFyaWFudHMgZm9yIHRoZSBT
d2VlcC4KKworIC0gSWYgYSB2ZXJ0ZXggaGFzIGFueSBsZWZ0LWdvaW5nIGVkZ2VzLCB0aGVuIHRo
ZXNlIG11c3QgYmUgaW4gdGhlIGVkZ2UKKyAgIGRpY3Rpb25hcnkgYXQgdGhlIHRpbWUgdGhlIHZl
cnRleCBpcyBwcm9jZXNzZWQuCisgLSBJZiBhbiBlZGdlIGlzIG1hcmtlZCAiZml4VXBwZXJFZGdl
IiAoaXQgaXMgYSB0ZW1wb3JhcnkgZWRnZSBpbnRyb2R1Y2VkCisgICBieSBDb25uZWN0UmlnaHRW
ZXJ0ZXgpLCB0aGVuIGl0IGlzIHRoZSBvbmx5IHJpZ2h0LWdvaW5nIGVkZ2UgZnJvbQorICAgaXRz
IGFzc29jaWF0ZWQgdmVydGV4LiAgKFRoaXMgc2F5cyB0aGF0IHRoZXNlIGVkZ2VzIGV4aXN0IG9u
bHkKKyAgIHdoZW4gaXQgaXMgbmVjZXNzYXJ5LikKKworCitSb2J1c3RuZXNzCistLS0tLS0tLS0t
CisKK1RoZSBrZXkgdG8gdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGFsZ29yaXRobSBpcyBtYWludGFp
bmluZyB0aGUKK2ludmFyaWFudHMgYWJvdmUsIGVzcGVjaWFsbHkgdGhlIGNvcnJlY3Qgb3JkZXJp
bmcgb2YgdGhlIGVkZ2UKK2RpY3Rpb25hcnkuICBXZSBhY2hpZXZlIHRoaXMgYnk6CisKKyAgMS4g
V3JpdGluZyB0aGUgbnVtZXJpY2FsIGNvbXB1dGF0aW9ucyBmb3IgbWF4aW11bSBwcmVjaXNpb24g
cmF0aGVyCisgICAgIHRoYW4gbWF4aW11bSBzcGVlZC4KKyAgICAgCisgIDIuIE1ha2luZyBubyBh
c3N1bXB0aW9ucyBhdCBhbGwgYWJvdXQgdGhlIHJlc3VsdHMgb2YgdGhlIGVkZ2UKKyAgICAgaW50
ZXJzZWN0aW9uIGNhbGN1bGF0aW9ucyAtLSBmb3Igc3VmZmljaWVudGx5IGRlZ2VuZXJhdGUgaW5w
dXRzLAorICAgICB0aGUgY29tcHV0ZWQgbG9jYXRpb24gaXMgbm90IG11Y2ggYmV0dGVyIHRoYW4g
YSByYW5kb20gbnVtYmVyLgorICAgICAKKyAgMy4gV2hlbiBudW1lcmljYWwgZXJyb3JzIHZpb2xh
dGUgdGhlIGludmFyaWFudHMsIHJlc3RvcmUgdGhlbQorICAgICBieSBtYWtpbmcgKnRvcG9sb2dp
Y2FsKiBjaGFuZ2VzIHdoZW4gbmVjZXNzYXJ5IChpZS4gcmVsaW5raW5nCisgICAgIHRoZSBtZXNo
IHN0cnVjdHVyZSkuCisgICAgIAorICAgICAKK1RyaWFuZ3VsYXRpb24gYW5kIEdyb3VwaW5nCist
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSBmaW5pc2ggdGhlIGxpbmUgc3dlZXAgYmVm
b3JlIGRvaW5nIGFueSB0cmlhbmd1bGF0aW9uLiAgVGhpcyBpcworYmVjYXVzZSBldmVuIGFmdGVy
IGEgbW9ub3RvbmUgcmVnaW9uIGlzIGNvbXBsZXRlLCB0aGVyZSBjYW4gYmUgZnVydGhlcgorY2hh
bmdlcyB0byBpdHMgdmVydGV4IGRhdGEgYmVjYXVzZSBvZiBmdXJ0aGVyIHZlcnRleCBtZXJnaW5n
LgorCitBZnRlciB0cmlhbmd1bGF0aW5nIGFsbCBtb25vdG9uZSByZWdpb25zLCB3ZSB3YW50IHRv
IGdyb3VwIHRoZQordHJpYW5nbGVzIGludG8gZmFucyBhbmQgc3RyaXBzLiAgV2UgZG8gdGhpcyB1
c2luZyBhIGdyZWVkeSBhcHByb2FjaC4KK1RoZSB0cmlhbmd1bGF0aW9uIGl0c2VsZiBpcyBub3Qg
b3B0aW1pemVkIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mCitwcmltaXRpdmVzOyB3ZSBqdXN0IHRy
eSB0byBnZXQgYSByZWFzb25hYmxlIGRlY29tcG9zaXRpb24gb2YgdGhlCitjb21wdXRlZCB0cmlh
bmd1bGF0aW9uLgpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QtbGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LWxp
c3QuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0
LWxpc3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisqKiBMaWNlbnNlIEFw
cGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBh
cmUKKyoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRl
ZCBpbiB0aGUgU0dJIEZyZWUKKyoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRo
ZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcworKiogZmlsZSBhcmUgc3ViamVjdCBv
bmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKKyoq
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkKKyoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIElu
Yy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCisqKiBBbXBoaXRoZWF0cmUgUGFya3dheSwg
TW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6CisqKiAKKyoqIGh0dHA6Ly9vc3Mu
c2dpLmNvbS9wcm9qZWN0cy9GcmVlQgorKiogCisqKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGlu
IHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyoqICJBUyBJ
UyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09O
RElUSU9OUworKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFO
WSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECisqKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElU
WSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKKyoqIFBBUlRJQ1VMQVIgUFVS
UE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisqKiAKKyoqIE9yaWdpbmFsIENvZGUuIFRoZSBP
cmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAorKiogVmVyc2lv
biAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24g
R3JhcGhpY3MsCisqKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5
MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlv
bnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAorKiogZWxzZXdoZXJl
IGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqIAorKiogQWRkaXRpb25hbCBOb3RpY2Ug
UHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKKyoqIGVz
dGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFy
ZSBUaGUKKyoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVy
c2lvbiAxLjIuMSksIHJlbGVhc2VkCisqKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdy
YXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KKyoqIDEuMyksIHJlbGVhc2Vk
IE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAorKiog
V2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4
LiBUaGlzIHNvZnR3YXJlCisqKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNp
b24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCisqKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQg
aGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKKyoqIGNvbXBsaWFu
dCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgorKioKKyov
CisvKgorKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCisqKgorKiogJERhdGUkICRS
ZXZpc2lvbiQKKyoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL2Rp
Y3QtbGlzdC5oIzUgJAorKi8KKworI2lmbmRlZiBfX2RpY3RfbGlzdF9oXworI2RlZmluZSBfX2Rp
Y3RfbGlzdF9oXworCisvKiBVc2UgI2RlZmluZSdzIHNvIHRoYXQgYW5vdGhlciBoZWFwIGltcGxl
bWVudGF0aW9uIGNhbiB1c2UgdGhpcyBvbmUgKi8KKworI2RlZmluZSBEaWN0S2V5CQlEaWN0TGlz
dEtleQorI2RlZmluZSBEaWN0CQlEaWN0TGlzdAorI2RlZmluZSBEaWN0Tm9kZQlEaWN0TGlzdE5v
ZGUKKworI2RlZmluZSBkaWN0TmV3RGljdChmcmFtZSxsZXEpCQlfX2dsX2RpY3RMaXN0TmV3RGlj
dChmcmFtZSxsZXEpCisjZGVmaW5lIGRpY3REZWxldGVEaWN0KGRpY3QpCQlfX2dsX2RpY3RMaXN0
RGVsZXRlRGljdChkaWN0KQorCisjZGVmaW5lIGRpY3RTZWFyY2goZGljdCxrZXkpCQlfX2dsX2Rp
Y3RMaXN0U2VhcmNoKGRpY3Qsa2V5KQorI2RlZmluZSBkaWN0SW5zZXJ0KGRpY3Qsa2V5KQkJX19n
bF9kaWN0TGlzdEluc2VydChkaWN0LGtleSkKKyNkZWZpbmUgZGljdEluc2VydEJlZm9yZShkaWN0
LG5vZGUsa2V5KQlfX2dsX2RpY3RMaXN0SW5zZXJ0QmVmb3JlKGRpY3Qsbm9kZSxrZXkpCisjZGVm
aW5lIGRpY3REZWxldGUoZGljdCxub2RlKQkJX19nbF9kaWN0TGlzdERlbGV0ZShkaWN0LG5vZGUp
CisKKyNkZWZpbmUgZGljdEtleShuKQkJCV9fZ2xfZGljdExpc3RLZXkobikKKyNkZWZpbmUgZGlj
dFN1Y2MobikJCQlfX2dsX2RpY3RMaXN0U3VjYyhuKQorI2RlZmluZSBkaWN0UHJlZChuKQkJCV9f
Z2xfZGljdExpc3RQcmVkKG4pCisjZGVmaW5lIGRpY3RNaW4oZCkJCQlfX2dsX2RpY3RMaXN0TWlu
KGQpCisjZGVmaW5lIGRpY3RNYXgoZCkJCQlfX2dsX2RpY3RMaXN0TWF4KGQpCisKKworCit0eXBl
ZGVmIHZvaWQgKkRpY3RLZXk7Cit0eXBlZGVmIHN0cnVjdCBEaWN0IERpY3Q7Cit0eXBlZGVmIHN0
cnVjdCBEaWN0Tm9kZSBEaWN0Tm9kZTsKKworRGljdAkJKmRpY3ROZXdEaWN0KAorCQkJdm9pZCAq
ZnJhbWUsCisJCQlpbnQgKCpsZXEpKHZvaWQgKmZyYW1lLCBEaWN0S2V5IGtleTEsIERpY3RLZXkg
a2V5MikgKTsKKwkJCQordm9pZAkJZGljdERlbGV0ZURpY3QoIERpY3QgKmRpY3QgKTsKKworLyog
U2VhcmNoIHJldHVybnMgdGhlIG5vZGUgd2l0aCB0aGUgc21hbGxlc3Qga2V5IGdyZWF0ZXIgdGhh
biBvciBlcXVhbAorICogdG8gdGhlIGdpdmVuIGtleS4gIElmIHRoZXJlIGlzIG5vIHN1Y2gga2V5
LCByZXR1cm5zIGEgbm9kZSB3aG9zZQorICoga2V5IGlzIE5VTEwuICBTaW1pbGFybHksIFN1Y2Mo
TWF4KGQpKSBoYXMgYSBOVUxMIGtleSwgZXRjLgorICovCitEaWN0Tm9kZQkqZGljdFNlYXJjaCgg
RGljdCAqZGljdCwgRGljdEtleSBrZXkgKTsKK0RpY3ROb2RlCSpkaWN0SW5zZXJ0QmVmb3JlKCBE
aWN0ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSwgRGljdEtleSBrZXkgKTsKK3ZvaWQJCWRpY3REZWxl
dGUoIERpY3QgKmRpY3QsIERpY3ROb2RlICpub2RlICk7CisKKyNkZWZpbmUJCV9fZ2xfZGljdExp
c3RLZXkobikJKChuKS0+a2V5KQorI2RlZmluZQkJX19nbF9kaWN0TGlzdFN1Y2MobikJKChuKS0+
bmV4dCkKKyNkZWZpbmUJCV9fZ2xfZGljdExpc3RQcmVkKG4pCSgobiktPnByZXYpCisjZGVmaW5l
CQlfX2dsX2RpY3RMaXN0TWluKGQpCSgoZCktPmhlYWQubmV4dCkKKyNkZWZpbmUJCV9fZ2xfZGlj
dExpc3RNYXgoZCkJKChkKS0+aGVhZC5wcmV2KQorI2RlZmluZQkgICAgICAgX19nbF9kaWN0TGlz
dEluc2VydChkLGspIChkaWN0SW5zZXJ0QmVmb3JlKChkKSwmKGQpLT5oZWFkLChrKSkpCisKKwor
LyoqKiBQcml2YXRlIGRhdGEgc3RydWN0dXJlcyAqKiovCisKK3N0cnVjdCBEaWN0Tm9kZSB7Cisg
IERpY3RLZXkJa2V5OworICBEaWN0Tm9kZQkqbmV4dDsKKyAgRGljdE5vZGUJKnByZXY7Cit9Owor
CitzdHJ1Y3QgRGljdCB7CisgIERpY3ROb2RlCWhlYWQ7CisgIHZvaWQJCSpmcmFtZTsKKyAgaW50
CQkoKmxlcSkodm9pZCAqZnJhbWUsIERpY3RLZXkga2V5MSwgRGljdEtleSBrZXkyKTsKK307CisK
KyNlbmRpZgpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QuYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC5jCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QuYwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisqKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2Vw
dCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKKyoqIG1hZGUgc3ViamVj
dCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUK
KyoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUg
Y29udGVudHMgb2YgdGhpcworKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNp
b25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKKyoqIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKKyoq
IG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNl
cnZpY2VzLCAxNjAwCisqKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0Eg
OTQwNDMtMTM1MSwgb3IgYXQ6CisqKiAKKyoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9G
cmVlQgorKiogCisqKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUg
U29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxM
IEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUworKiogRElTQ0xB
SU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJ
RVMgQU5ECisqKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFV
QUxJVFksIEZJVE5FU1MgRk9SIEEKKyoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZS
SU5HRU1FTlQuCisqKiAKKyoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBP
cGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAorKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQg
SmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCisqKiBJbmMu
IFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3Jh
cGhpY3MsIEluYy4KKyoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGly
ZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAorKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyoqIAorKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFw
cGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKKyoqIGVzdGFibGlzaGVkIGJ5IFNHSSBp
biBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKKyoqIE9wZW5HTChS
KSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVh
c2VkCisqKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGls
aXR5IExpYnJhcnkgKFZlcnNpb24KKyoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7
IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAorKiogV2luZG93IFN5c3RlbShSKSAo
VmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCisq
KiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIElt
cGxlbWVudGF0aW9uCisqKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVw
ZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKKyoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0wo
UikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgorKioKKyovCisvKgorKiogQXV0aG9yOiBF
cmljIFZlYWNoLCBKdWx5IDE5OTQuCisqKgorKiogJERhdGUkICRSZXZpc2lvbiQKKyoqICRIZWFk
ZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL2RpY3QuYyM1ICQKKyovCisKKyNp
bmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3Qt
bGlzdC5oIgorI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKKwor
LyogcmVhbGx5IF9fZ2xfZGljdExpc3ROZXdEaWN0ICovCitEaWN0ICpkaWN0TmV3RGljdCggdm9p
ZCAqZnJhbWUsCisJCSAgIGludCAoKmxlcSkodm9pZCAqZnJhbWUsIERpY3RLZXkga2V5MSwgRGlj
dEtleSBrZXkyKSApCit7CisgIERpY3QgKmRpY3QgPSAoRGljdCAqKSBtZW1BbGxvYyggc2l6ZW9m
KCBEaWN0ICkpOworICBEaWN0Tm9kZSAqaGVhZDsKKworICBpZiAoZGljdCA9PSBOVUxMKSByZXR1
cm4gTlVMTDsKKworICBoZWFkID0gJmRpY3QtPmhlYWQ7CisKKyAgaGVhZC0+a2V5ID0gTlVMTDsK
KyAgaGVhZC0+bmV4dCA9IGhlYWQ7CisgIGhlYWQtPnByZXYgPSBoZWFkOworCisgIGRpY3QtPmZy
YW1lID0gZnJhbWU7CisgIGRpY3QtPmxlcSA9IGxlcTsKKworICByZXR1cm4gZGljdDsKK30KKwor
LyogcmVhbGx5IF9fZ2xfZGljdExpc3REZWxldGVEaWN0ICovCit2b2lkIGRpY3REZWxldGVEaWN0
KCBEaWN0ICpkaWN0ICkKK3sKKyAgRGljdE5vZGUgKm5vZGU7CisKKyAgZm9yKCBub2RlID0gZGlj
dC0+aGVhZC5uZXh0OyBub2RlICE9ICZkaWN0LT5oZWFkOyBub2RlID0gbm9kZS0+bmV4dCApIHsK
KyAgICBtZW1GcmVlKCBub2RlICk7CisgIH0KKyAgbWVtRnJlZSggZGljdCApOworfQorCisvKiBy
ZWFsbHkgX19nbF9kaWN0TGlzdEluc2VydEJlZm9yZSAqLworRGljdE5vZGUgKmRpY3RJbnNlcnRC
ZWZvcmUoIERpY3QgKmRpY3QsIERpY3ROb2RlICpub2RlLCBEaWN0S2V5IGtleSApCit7CisgIERp
Y3ROb2RlICpuZXdOb2RlOworCisgIGRvIHsKKyAgICBub2RlID0gbm9kZS0+cHJldjsKKyAgfSB3
aGlsZSggbm9kZS0+a2V5ICE9IE5VTEwgJiYgISAoKmRpY3QtPmxlcSkoZGljdC0+ZnJhbWUsIG5v
ZGUtPmtleSwga2V5KSk7CisKKyAgbmV3Tm9kZSA9IChEaWN0Tm9kZSAqKSBtZW1BbGxvYyggc2l6
ZW9mKCBEaWN0Tm9kZSApKTsKKyAgaWYgKG5ld05vZGUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisK
KyAgbmV3Tm9kZS0+a2V5ID0ga2V5OworICBuZXdOb2RlLT5uZXh0ID0gbm9kZS0+bmV4dDsKKyAg
bm9kZS0+bmV4dC0+cHJldiA9IG5ld05vZGU7CisgIG5ld05vZGUtPnByZXYgPSBub2RlOworICBu
b2RlLT5uZXh0ID0gbmV3Tm9kZTsKKworICByZXR1cm4gbmV3Tm9kZTsKK30KKworLyogcmVhbGx5
IF9fZ2xfZGljdExpc3REZWxldGUgKi8KK3ZvaWQgZGljdERlbGV0ZSggRGljdCAqZGljdCwgRGlj
dE5vZGUgKm5vZGUgKSAvKkFSR1NVU0VEKi8KK3sKKyAgbm9kZS0+bmV4dC0+cHJldiA9IG5vZGUt
PnByZXY7CisgIG5vZGUtPnByZXYtPm5leHQgPSBub2RlLT5uZXh0OworICBtZW1GcmVlKCBub2Rl
ICk7Cit9CisKKy8qIHJlYWxseSBfX2dsX2RpY3RMaXN0U2VhcmNoICovCitEaWN0Tm9kZSAqZGlj
dFNlYXJjaCggRGljdCAqZGljdCwgRGljdEtleSBrZXkgKQoreworICBEaWN0Tm9kZSAqbm9kZSA9
ICZkaWN0LT5oZWFkOworCisgIGRvIHsKKyAgICBub2RlID0gbm9kZS0+bmV4dDsKKyAgfSB3aGls
ZSggbm9kZS0+a2V5ICE9IE5VTEwgJiYgISAoKmRpY3QtPmxlcSkoZGljdC0+ZnJhbWUsIGtleSwg
bm9kZS0+a2V5KSk7CisKKyAgcmV0dXJuIG5vZGU7Cit9CkluZGV4OiBXZWJDb3JlL3RoaXJkcGFy
dHkvZ2x1L2xpYnRlc3MvZGljdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvdGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9kaWN0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1
L2xpYnRlc3MvZGljdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyoqIExp
Y2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhp
cyBmaWxlIGFyZQorKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMg
cGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9u
IDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBz
dWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90
IHVzZQorKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
IFlvdSBtYXkgb2J0YWluIGEgY29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFw
aGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQ
YXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0
cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJv
dmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgor
KiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVT
IEFORCBDT05ESVRJT05TCisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRB
VElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hB
TlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElD
VUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29k
ZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisq
KiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkg
U2lsaWNvbiBHcmFwaGljcywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0
IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFu
eSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBl
bHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFs
IE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNl
cworKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFs
IENvZGUgYXJlIFRoZQorKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0
aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVu
R0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwg
cmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRo
ZSBYCisqKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIg
MTksIDE5OTguIFRoaXMgc29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0wo
UikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBT
R0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiog
Y29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24u
CisqKgorKi8KKy8qCisqKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAk
RGF0ZSQgJFJldmlzaW9uJAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xp
YnRlc3MvZGljdC5oIzUgJAorKi8KKworI2lmbmRlZiBfX2RpY3RfbGlzdF9oXworI2RlZmluZSBf
X2RpY3RfbGlzdF9oXworCisvKiBVc2UgI2RlZmluZSdzIHNvIHRoYXQgYW5vdGhlciBoZWFwIGlt
cGxlbWVudGF0aW9uIGNhbiB1c2UgdGhpcyBvbmUgKi8KKworI2RlZmluZSBEaWN0S2V5CQlEaWN0
TGlzdEtleQorI2RlZmluZSBEaWN0CQlEaWN0TGlzdAorI2RlZmluZSBEaWN0Tm9kZQlEaWN0TGlz
dE5vZGUKKworI2RlZmluZSBkaWN0TmV3RGljdChmcmFtZSxsZXEpCQlfX2dsX2RpY3RMaXN0TmV3
RGljdChmcmFtZSxsZXEpCisjZGVmaW5lIGRpY3REZWxldGVEaWN0KGRpY3QpCQlfX2dsX2RpY3RM
aXN0RGVsZXRlRGljdChkaWN0KQorCisjZGVmaW5lIGRpY3RTZWFyY2goZGljdCxrZXkpCQlfX2ds
X2RpY3RMaXN0U2VhcmNoKGRpY3Qsa2V5KQorI2RlZmluZSBkaWN0SW5zZXJ0KGRpY3Qsa2V5KQkJ
X19nbF9kaWN0TGlzdEluc2VydChkaWN0LGtleSkKKyNkZWZpbmUgZGljdEluc2VydEJlZm9yZShk
aWN0LG5vZGUsa2V5KQlfX2dsX2RpY3RMaXN0SW5zZXJ0QmVmb3JlKGRpY3Qsbm9kZSxrZXkpCisj
ZGVmaW5lIGRpY3REZWxldGUoZGljdCxub2RlKQkJX19nbF9kaWN0TGlzdERlbGV0ZShkaWN0LG5v
ZGUpCisKKyNkZWZpbmUgZGljdEtleShuKQkJCV9fZ2xfZGljdExpc3RLZXkobikKKyNkZWZpbmUg
ZGljdFN1Y2MobikJCQlfX2dsX2RpY3RMaXN0U3VjYyhuKQorI2RlZmluZSBkaWN0UHJlZChuKQkJ
CV9fZ2xfZGljdExpc3RQcmVkKG4pCisjZGVmaW5lIGRpY3RNaW4oZCkJCQlfX2dsX2RpY3RMaXN0
TWluKGQpCisjZGVmaW5lIGRpY3RNYXgoZCkJCQlfX2dsX2RpY3RMaXN0TWF4KGQpCisKKworCit0
eXBlZGVmIHZvaWQgKkRpY3RLZXk7Cit0eXBlZGVmIHN0cnVjdCBEaWN0IERpY3Q7Cit0eXBlZGVm
IHN0cnVjdCBEaWN0Tm9kZSBEaWN0Tm9kZTsKKworRGljdAkJKmRpY3ROZXdEaWN0KAorCQkJdm9p
ZCAqZnJhbWUsCisJCQlpbnQgKCpsZXEpKHZvaWQgKmZyYW1lLCBEaWN0S2V5IGtleTEsIERpY3RL
ZXkga2V5MikgKTsKKwkJCQordm9pZAkJZGljdERlbGV0ZURpY3QoIERpY3QgKmRpY3QgKTsKKwor
LyogU2VhcmNoIHJldHVybnMgdGhlIG5vZGUgd2l0aCB0aGUgc21hbGxlc3Qga2V5IGdyZWF0ZXIg
dGhhbiBvciBlcXVhbAorICogdG8gdGhlIGdpdmVuIGtleS4gIElmIHRoZXJlIGlzIG5vIHN1Y2gg
a2V5LCByZXR1cm5zIGEgbm9kZSB3aG9zZQorICoga2V5IGlzIE5VTEwuICBTaW1pbGFybHksIFN1
Y2MoTWF4KGQpKSBoYXMgYSBOVUxMIGtleSwgZXRjLgorICovCitEaWN0Tm9kZQkqZGljdFNlYXJj
aCggRGljdCAqZGljdCwgRGljdEtleSBrZXkgKTsKK0RpY3ROb2RlCSpkaWN0SW5zZXJ0QmVmb3Jl
KCBEaWN0ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSwgRGljdEtleSBrZXkgKTsKK3ZvaWQJCWRpY3RE
ZWxldGUoIERpY3QgKmRpY3QsIERpY3ROb2RlICpub2RlICk7CisKKyNkZWZpbmUJCV9fZ2xfZGlj
dExpc3RLZXkobikJKChuKS0+a2V5KQorI2RlZmluZQkJX19nbF9kaWN0TGlzdFN1Y2MobikJKChu
KS0+bmV4dCkKKyNkZWZpbmUJCV9fZ2xfZGljdExpc3RQcmVkKG4pCSgobiktPnByZXYpCisjZGVm
aW5lCQlfX2dsX2RpY3RMaXN0TWluKGQpCSgoZCktPmhlYWQubmV4dCkKKyNkZWZpbmUJCV9fZ2xf
ZGljdExpc3RNYXgoZCkJKChkKS0+aGVhZC5wcmV2KQorI2RlZmluZQkgICAgICAgX19nbF9kaWN0
TGlzdEluc2VydChkLGspIChkaWN0SW5zZXJ0QmVmb3JlKChkKSwmKGQpLT5oZWFkLChrKSkpCisK
KworLyoqKiBQcml2YXRlIGRhdGEgc3RydWN0dXJlcyAqKiovCisKK3N0cnVjdCBEaWN0Tm9kZSB7
CisgIERpY3RLZXkJa2V5OworICBEaWN0Tm9kZQkqbmV4dDsKKyAgRGljdE5vZGUJKnByZXY7Cit9
OworCitzdHJ1Y3QgRGljdCB7CisgIERpY3ROb2RlCWhlYWQ7CisgIHZvaWQJCSpmcmFtZTsKKyAg
aW50CQkoKmxlcSkodm9pZCAqZnJhbWUsIERpY3RLZXkga2V5MSwgRGljdEtleSBrZXkyKTsKK307
CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uYwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisqKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4
Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKKyoqIG1hZGUgc3Vi
amVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZy
ZWUKKyoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0
aGUgY29udGVudHMgb2YgdGhpcworKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92
aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKKyoqIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkK
KyoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2Fs
IFNlcnZpY2VzLCAxNjAwCisqKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywg
Q0EgOTQwNDMtMTM1MSwgb3IgYXQ6CisqKiAKKyoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0
cy9GcmVlQgorKiogCisqKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0
aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyoqICJBUyBJUyIgYmFzaXMsIHdpdGgg
QUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUworKiogRElT
Q0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJB
TlRJRVMgQU5ECisqKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZ
IFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKKyoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1J
TkZSSU5HRU1FTlQuCisqKiAKKyoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlz
OiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAorKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFz
ZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCisqKiBJ
bmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24g
R3JhcGhpY3MsIEluYy4KKyoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0
aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAorKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyoqIAorKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhl
IGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKKyoqIGVzdGFibGlzaGVkIGJ5IFNH
SSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKKyoqIE9wZW5H
TChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJl
bGVhc2VkCisqKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBV
dGlsaXR5IExpYnJhcnkgKFZlcnNpb24KKyoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5
OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAorKiogV2luZG93IFN5c3RlbShS
KSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJl
CisqKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxl
IEltcGxlbWVudGF0aW9uCisqKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGlu
ZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKKyoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVu
R0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgorKioKKyovCisvKgorKiogQXV0aG9y
OiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCisqKgorKiogJERhdGUkICRSZXZpc2lvbiQKKyoqICRI
ZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL2dlb20uYyM1ICQKKyovCisK
KyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9nbHVvcy5oIgor
I2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1ZGUgInRoaXJk
cGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5oIgorCitpbnQgX19nbF92ZXJ0TGVxKCBHTFV2ZXJ0ZXgg
KnUsIEdMVXZlcnRleCAqdiApCit7CisgIC8qIFJldHVybnMgVFJVRSBpZiB1IGlzIGxleGljb2dy
YXBoaWNhbGx5IDw9IHYuICovCisKKyAgcmV0dXJuIFZlcnRMZXEoIHUsIHYgKTsKK30KKworR0xk
b3VibGUgX19nbF9lZGdlRXZhbCggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdMVXZlcnRl
eCAqdyApCit7CisgIC8qIEdpdmVuIHRocmVlIHZlcnRpY2VzIHUsdix3IHN1Y2ggdGhhdCBWZXJ0
TGVxKHUsdikgJiYgVmVydExlcSh2LHcpLAorICAgKiBldmFsdWF0ZXMgdGhlIHQtY29vcmQgb2Yg
dGhlIGVkZ2UgdXcgYXQgdGhlIHMtY29vcmQgb2YgdGhlIHZlcnRleCB2LgorICAgKiBSZXR1cm5z
IHYtPnQgLSAodXcpKHYtPnMpLCBpZS4gdGhlIHNpZ25lZCBkaXN0YW5jZSBmcm9tIHV3IHRvIHYu
CisgICAqIElmIHV3IGlzIHZlcnRpY2FsIChhbmQgdGh1cyBwYXNzZXMgdGhydSB2KSwgdGhlIHJl
c3VsdCBpcyB6ZXJvLgorICAgKgorICAgKiBUaGUgY2FsY3VsYXRpb24gaXMgZXh0cmVtZWx5IGFj
Y3VyYXRlIGFuZCBzdGFibGUsIGV2ZW4gd2hlbiB2CisgICAqIGlzIHZlcnkgY2xvc2UgdG8gdSBv
ciB3LiAgSW4gcGFydGljdWxhciBpZiB3ZSBzZXQgdi0+dCA9IDAgYW5kCisgICAqIGxldCByIGJl
IHRoZSBuZWdhdGVkIHJlc3VsdCAodGhpcyBldmFsdWF0ZXMgKHV3KSh2LT5zKSksIHRoZW4KKyAg
ICogciBpcyBndWFyYW50ZWVkIHRvIHNhdGlzZnkgTUlOKHUtPnQsdy0+dCkgPD0gciA8PSBNQVgo
dS0+dCx3LT50KS4KKyAgICovCisgIEdMZG91YmxlIGdhcEwsIGdhcFI7CisKKyAgYXNzZXJ0KCBW
ZXJ0TGVxKCB1LCB2ICkgJiYgVmVydExlcSggdiwgdyApKTsKKyAgCisgIGdhcEwgPSB2LT5zIC0g
dS0+czsKKyAgZ2FwUiA9IHctPnMgLSB2LT5zOworCisgIGlmKCBnYXBMICsgZ2FwUiA+IDAgKSB7
CisgICAgaWYoIGdhcEwgPCBnYXBSICkgeworICAgICAgcmV0dXJuICh2LT50IC0gdS0+dCkgKyAo
dS0+dCAtIHctPnQpICogKGdhcEwgLyAoZ2FwTCArIGdhcFIpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgcmV0dXJuICh2LT50IC0gdy0+dCkgKyAody0+dCAtIHUtPnQpICogKGdhcFIgLyAoZ2FwTCAr
IGdhcFIpKTsKKyAgICB9CisgIH0KKyAgLyogdmVydGljYWwgbGluZSAqLworICByZXR1cm4gMDsK
K30KKworR0xkb3VibGUgX19nbF9lZGdlU2lnbiggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYs
IEdMVXZlcnRleCAqdyApCit7CisgIC8qIFJldHVybnMgYSBudW1iZXIgd2hvc2Ugc2lnbiBtYXRj
aGVzIEVkZ2VFdmFsKHUsdix3KSBidXQgd2hpY2gKKyAgICogaXMgY2hlYXBlciB0byBldmFsdWF0
ZS4gIFJldHVybnMgPiAwLCA9PSAwICwgb3IgPCAwCisgICAqIGFzIHYgaXMgYWJvdmUsIG9uLCBv
ciBiZWxvdyB0aGUgZWRnZSB1dy4KKyAgICovCisgIEdMZG91YmxlIGdhcEwsIGdhcFI7CisKKyAg
YXNzZXJ0KCBWZXJ0TGVxKCB1LCB2ICkgJiYgVmVydExlcSggdiwgdyApKTsKKyAgCisgIGdhcEwg
PSB2LT5zIC0gdS0+czsKKyAgZ2FwUiA9IHctPnMgLSB2LT5zOworCisgIGlmKCBnYXBMICsgZ2Fw
UiA+IDAgKSB7CisgICAgcmV0dXJuICh2LT50IC0gdy0+dCkgKiBnYXBMICsgKHYtPnQgLSB1LT50
KSAqIGdhcFI7CisgIH0KKyAgLyogdmVydGljYWwgbGluZSAqLworICByZXR1cm4gMDsKK30KKwor
CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKKyAqIERlZmluZSB2ZXJzaW9ucyBvZiBFZGdlU2lnbiwgRWRnZUV2
YWwgd2l0aCBzIGFuZCB0IHRyYW5zcG9zZWQuCisgKi8KKworR0xkb3VibGUgX19nbF90cmFuc0V2
YWwoIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKQoreworICAvKiBH
aXZlbiB0aHJlZSB2ZXJ0aWNlcyB1LHYsdyBzdWNoIHRoYXQgVHJhbnNMZXEodSx2KSAmJiBUcmFu
c0xlcSh2LHcpLAorICAgKiBldmFsdWF0ZXMgdGhlIHQtY29vcmQgb2YgdGhlIGVkZ2UgdXcgYXQg
dGhlIHMtY29vcmQgb2YgdGhlIHZlcnRleCB2LgorICAgKiBSZXR1cm5zIHYtPnMgLSAodXcpKHYt
PnQpLCBpZS4gdGhlIHNpZ25lZCBkaXN0YW5jZSBmcm9tIHV3IHRvIHYuCisgICAqIElmIHV3IGlz
IHZlcnRpY2FsIChhbmQgdGh1cyBwYXNzZXMgdGhydSB2KSwgdGhlIHJlc3VsdCBpcyB6ZXJvLgor
ICAgKgorICAgKiBUaGUgY2FsY3VsYXRpb24gaXMgZXh0cmVtZWx5IGFjY3VyYXRlIGFuZCBzdGFi
bGUsIGV2ZW4gd2hlbiB2CisgICAqIGlzIHZlcnkgY2xvc2UgdG8gdSBvciB3LiAgSW4gcGFydGlj
dWxhciBpZiB3ZSBzZXQgdi0+cyA9IDAgYW5kCisgICAqIGxldCByIGJlIHRoZSBuZWdhdGVkIHJl
c3VsdCAodGhpcyBldmFsdWF0ZXMgKHV3KSh2LT50KSksIHRoZW4KKyAgICogciBpcyBndWFyYW50
ZWVkIHRvIHNhdGlzZnkgTUlOKHUtPnMsdy0+cykgPD0gciA8PSBNQVgodS0+cyx3LT5zKS4KKyAg
ICovCisgIEdMZG91YmxlIGdhcEwsIGdhcFI7CisKKyAgYXNzZXJ0KCBUcmFuc0xlcSggdSwgdiAp
ICYmIFRyYW5zTGVxKCB2LCB3ICkpOworICAKKyAgZ2FwTCA9IHYtPnQgLSB1LT50OworICBnYXBS
ID0gdy0+dCAtIHYtPnQ7CisKKyAgaWYoIGdhcEwgKyBnYXBSID4gMCApIHsKKyAgICBpZiggZ2Fw
TCA8IGdhcFIgKSB7CisgICAgICByZXR1cm4gKHYtPnMgLSB1LT5zKSArICh1LT5zIC0gdy0+cykg
KiAoZ2FwTCAvIChnYXBMICsgZ2FwUikpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gKHYt
PnMgLSB3LT5zKSArICh3LT5zIC0gdS0+cykgKiAoZ2FwUiAvIChnYXBMICsgZ2FwUikpOworICAg
IH0KKyAgfQorICAvKiB2ZXJ0aWNhbCBsaW5lICovCisgIHJldHVybiAwOworfQorCitHTGRvdWJs
ZSBfX2dsX3RyYW5zU2lnbiggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdMVXZlcnRleCAq
dyApCit7CisgIC8qIFJldHVybnMgYSBudW1iZXIgd2hvc2Ugc2lnbiBtYXRjaGVzIFRyYW5zRXZh
bCh1LHYsdykgYnV0IHdoaWNoCisgICAqIGlzIGNoZWFwZXIgdG8gZXZhbHVhdGUuICBSZXR1cm5z
ID4gMCwgPT0gMCAsIG9yIDwgMAorICAgKiBhcyB2IGlzIGFib3ZlLCBvbiwgb3IgYmVsb3cgdGhl
IGVkZ2UgdXcuCisgICAqLworICBHTGRvdWJsZSBnYXBMLCBnYXBSOworCisgIGFzc2VydCggVHJh
bnNMZXEoIHUsIHYgKSAmJiBUcmFuc0xlcSggdiwgdyApKTsKKyAgCisgIGdhcEwgPSB2LT50IC0g
dS0+dDsKKyAgZ2FwUiA9IHctPnQgLSB2LT50OworCisgIGlmKCBnYXBMICsgZ2FwUiA+IDAgKSB7
CisgICAgcmV0dXJuICh2LT5zIC0gdy0+cykgKiBnYXBMICsgKHYtPnMgLSB1LT5zKSAqIGdhcFI7
CisgIH0KKyAgLyogdmVydGljYWwgbGluZSAqLworICByZXR1cm4gMDsKK30KKworCitpbnQgX19n
bF92ZXJ0Q0NXKCBHTFV2ZXJ0ZXggKnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICkKK3sK
KyAgLyogRm9yIGFsbW9zdC1kZWdlbmVyYXRlIHNpdHVhdGlvbnMsIHRoZSByZXN1bHRzIGFyZSBu
b3QgcmVsaWFibGUuCisgICAqIFVubGVzcyB0aGUgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyBj
YW4gYmUgcGVyZm9ybWVkIHdpdGhvdXQKKyAgICogcm91bmRpbmcgZXJyb3JzLCAqYW55KiBpbXBs
ZW1lbnRhdGlvbiB3aWxsIGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMKKyAgICogb24gc29tZSBkZWdl
bmVyYXRlIGlucHV0cywgc28gdGhlIGNsaWVudCBtdXN0IGhhdmUgc29tZSB3YXkgdG8KKyAgICog
aGFuZGxlIHRoaXMgc2l0dWF0aW9uLgorICAgKi8KKyAgcmV0dXJuICh1LT5zKih2LT50IC0gdy0+
dCkgKyB2LT5zKih3LT50IC0gdS0+dCkgKyB3LT5zKih1LT50IC0gdi0+dCkpID49IDA7Cit9CisK
Ky8qIEdpdmVuIHBhcmFtZXRlcnMgYSx4LGIseSByZXR1cm5zIHRoZSB2YWx1ZSAoYip4K2EqeSkv
KGErYiksCisgKiBvciAoeCt5KS8yIGlmIGE9PWI9PTAuICBJdCByZXF1aXJlcyB0aGF0IGEsYiA+
PSAwLCBhbmQgZW5mb3JjZXMKKyAqIHRoaXMgaW4gdGhlIHJhcmUgY2FzZSB0aGF0IG9uZSBhcmd1
bWVudCBpcyBzbGlnaHRseSBuZWdhdGl2ZS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBleHRy
ZW1lbHkgc3RhYmxlIG51bWVyaWNhbGx5LgorICogSW4gcGFydGljdWxhciBpdCBndWFyYW50ZWVz
IHRoYXQgdGhlIHJlc3VsdCByIHNhdGlzZmllcworICogTUlOKHgseSkgPD0gciA8PSBNQVgoeCx5
KSwgYW5kIHRoZSByZXN1bHRzIGFyZSB2ZXJ5IGFjY3VyYXRlCisgKiBldmVuIHdoZW4gYSBhbmQg
YiBkaWZmZXIgZ3JlYXRseSBpbiBtYWduaXR1ZGUuCisgKi8KKyNkZWZpbmUgUmVhbEludGVycG9s
YXRlKGEseCxiLHkpCQkJXAorICAoYSA9IChhIDwgMCkgPyAwIDogYSwgYiA9IChiIDwgMCkgPyAw
IDogYiwJCVwKKyAgKChhIDw9IGIpID8gKChiID09IDApID8gKCh4K3kpIC8gMikJCQlcCisgICAg
ICAgICAgICAgICAgICAgICAgICA6ICh4ICsgKHkteCkgKiAoYS8oYStiKSkpKQlcCisgICAgICAg
ICAgICA6ICh5ICsgKHgteSkgKiAoYi8oYStiKSkpKSkKKworI2lmbmRlZiBGT1JfVFJJVEVfVEVT
VF9QUk9HUkFNCisjZGVmaW5lIEludGVycG9sYXRlKGEseCxiLHkpCVJlYWxJbnRlcnBvbGF0ZShh
LHgsYix5KQorI2Vsc2UKKworLyogQ2xhaW06IHRoZSBPTkxZIHByb3BlcnR5IHRoZSBzd2VlcCBh
bGdvcml0aG0gcmVsaWVzIG9uIGlzIHRoYXQKKyAqIE1JTih4LHkpIDw9IHIgPD0gTUFYKHgseSku
ICBUaGlzIGlzIGEgbmFzdHkgd2F5IHRvIHRlc3QgdGhhdC4KKyAqLworI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorZXh0ZXJuIGludCBSYW5kb21JbnRlcnBvbGF0ZTsKKworR0xkb3VibGUgSW50ZXJwb2xh
dGUoIEdMZG91YmxlIGEsIEdMZG91YmxlIHgsIEdMZG91YmxlIGIsIEdMZG91YmxlIHkpCit7Citw
cmludGYoIioqKioqKioqKioqKioqKioqKioqKiVkXG4iLFJhbmRvbUludGVycG9sYXRlKTsKKyAg
aWYoIFJhbmRvbUludGVycG9sYXRlICkgeworICAgIGEgPSAxLjIgKiBkcmFuZDQ4KCkgLSAwLjE7
CisgICAgYSA9IChhIDwgMCkgPyAwIDogKChhID4gMSkgPyAxIDogYSk7CisgICAgYiA9IDEuMCAt
IGE7CisgIH0KKyAgcmV0dXJuIFJlYWxJbnRlcnBvbGF0ZShhLHgsYix5KTsKK30KKworI2VuZGlm
CisKKyNkZWZpbmUgU3dhcChhLGIpCWlmICgxKSB7IEdMVXZlcnRleCAqdCA9IGE7IGEgPSBiOyBi
ID0gdDsgfSBlbHNlCisKK3ZvaWQgX19nbF9lZGdlSW50ZXJzZWN0KCBHTFV2ZXJ0ZXggKm8xLCBH
TFV2ZXJ0ZXggKmQxLAorCQkJIEdMVXZlcnRleCAqbzIsIEdMVXZlcnRleCAqZDIsCisJCQkgR0xV
dmVydGV4ICp2ICkKKy8qIEdpdmVuIGVkZ2VzIChvMSxkMSkgYW5kIChvMixkMiksIGNvbXB1dGUg
dGhlaXIgcG9pbnQgb2YgaW50ZXJzZWN0aW9uLgorICogVGhlIGNvbXB1dGVkIHBvaW50IGlzIGd1
YXJhbnRlZWQgdG8gbGllIGluIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlCisgKiBib3VuZGluZyBy
ZWN0YW5nbGVzIGRlZmluZWQgYnkgZWFjaCBlZGdlLgorICovCit7CisgIEdMZG91YmxlIHoxLCB6
MjsKKworICAvKiBUaGlzIGlzIGNlcnRhaW5seSBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0
byBmaW5kIHRoZSBpbnRlcnNlY3Rpb24KKyAgICogb2YgdHdvIGxpbmUgc2VnbWVudHMsIGJ1dCBp
dCBpcyB2ZXJ5IG51bWVyaWNhbGx5IHN0YWJsZS4KKyAgICoKKyAgICogU3RyYXRlZ3k6IGZpbmQg
dGhlIHR3byBtaWRkbGUgdmVydGljZXMgaW4gdGhlIFZlcnRMZXEgb3JkZXJpbmcsCisgICAqIGFu
ZCBpbnRlcnBvbGF0ZSB0aGUgaW50ZXJzZWN0aW9uIHMtdmFsdWUgZnJvbSB0aGVzZS4gIFRoZW4g
cmVwZWF0CisgICAqIHVzaW5nIHRoZSBUcmFuc0xlcSBvcmRlcmluZyB0byBmaW5kIHRoZSBpbnRl
cnNlY3Rpb24gdC12YWx1ZS4KKyAgICovCisKKyAgaWYoICEgVmVydExlcSggbzEsIGQxICkpIHsg
U3dhcCggbzEsIGQxICk7IH0KKyAgaWYoICEgVmVydExlcSggbzIsIGQyICkpIHsgU3dhcCggbzIs
IGQyICk7IH0KKyAgaWYoICEgVmVydExlcSggbzEsIG8yICkpIHsgU3dhcCggbzEsIG8yICk7IFN3
YXAoIGQxLCBkMiApOyB9CisKKyAgaWYoICEgVmVydExlcSggbzIsIGQxICkpIHsKKyAgICAvKiBU
ZWNobmljYWxseSwgbm8gaW50ZXJzZWN0aW9uIC0tIGRvIG91ciBiZXN0ICovCisgICAgdi0+cyA9
IChvMi0+cyArIGQxLT5zKSAvIDI7CisgIH0gZWxzZSBpZiggVmVydExlcSggZDEsIGQyICkpIHsK
KyAgICAvKiBJbnRlcnBvbGF0ZSBiZXR3ZWVuIG8yIGFuZCBkMSAqLworICAgIHoxID0gRWRnZUV2
YWwoIG8xLCBvMiwgZDEgKTsKKyAgICB6MiA9IEVkZ2VFdmFsKCBvMiwgZDEsIGQyICk7CisgICAg
aWYoIHoxK3oyIDwgMCApIHsgejEgPSAtejE7IHoyID0gLXoyOyB9CisgICAgdi0+cyA9IEludGVy
cG9sYXRlKCB6MSwgbzItPnMsIHoyLCBkMS0+cyApOworICB9IGVsc2UgeworICAgIC8qIEludGVy
cG9sYXRlIGJldHdlZW4gbzIgYW5kIGQyICovCisgICAgejEgPSBFZGdlU2lnbiggbzEsIG8yLCBk
MSApOworICAgIHoyID0gLUVkZ2VTaWduKCBvMSwgZDIsIGQxICk7CisgICAgaWYoIHoxK3oyIDwg
MCApIHsgejEgPSAtejE7IHoyID0gLXoyOyB9CisgICAgdi0+cyA9IEludGVycG9sYXRlKCB6MSwg
bzItPnMsIHoyLCBkMi0+cyApOworICB9CisKKyAgLyogTm93IHJlcGVhdCB0aGUgcHJvY2VzcyBm
b3IgdCAqLworCisgIGlmKCAhIFRyYW5zTGVxKCBvMSwgZDEgKSkgeyBTd2FwKCBvMSwgZDEgKTsg
fQorICBpZiggISBUcmFuc0xlcSggbzIsIGQyICkpIHsgU3dhcCggbzIsIGQyICk7IH0KKyAgaWYo
ICEgVHJhbnNMZXEoIG8xLCBvMiApKSB7IFN3YXAoIG8xLCBvMiApOyBTd2FwKCBkMSwgZDIgKTsg
fQorCisgIGlmKCAhIFRyYW5zTGVxKCBvMiwgZDEgKSkgeworICAgIC8qIFRlY2huaWNhbGx5LCBu
byBpbnRlcnNlY3Rpb24gLS0gZG8gb3VyIGJlc3QgKi8KKyAgICB2LT50ID0gKG8yLT50ICsgZDEt
PnQpIC8gMjsKKyAgfSBlbHNlIGlmKCBUcmFuc0xlcSggZDEsIGQyICkpIHsKKyAgICAvKiBJbnRl
cnBvbGF0ZSBiZXR3ZWVuIG8yIGFuZCBkMSAqLworICAgIHoxID0gVHJhbnNFdmFsKCBvMSwgbzIs
IGQxICk7CisgICAgejIgPSBUcmFuc0V2YWwoIG8yLCBkMSwgZDIgKTsKKyAgICBpZiggejErejIg
PCAwICkgeyB6MSA9IC16MTsgejIgPSAtejI7IH0KKyAgICB2LT50ID0gSW50ZXJwb2xhdGUoIHox
LCBvMi0+dCwgejIsIGQxLT50ICk7CisgIH0gZWxzZSB7CisgICAgLyogSW50ZXJwb2xhdGUgYmV0
d2VlbiBvMiBhbmQgZDIgKi8KKyAgICB6MSA9IFRyYW5zU2lnbiggbzEsIG8yLCBkMSApOworICAg
IHoyID0gLVRyYW5zU2lnbiggbzEsIGQyLCBkMSApOworICAgIGlmKCB6MSt6MiA8IDAgKSB7IHox
ID0gLXoxOyB6MiA9IC16MjsgfQorICAgIHYtPnQgPSBJbnRlcnBvbGF0ZSggejEsIG8yLT50LCB6
MiwgZDItPnQgKTsKKyAgfQorfQpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L2dlb20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2Vv
bS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2dlb20u
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyoqIExpY2Vuc2UgQXBwbGljYWJp
bGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorKiog
bWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRo
ZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNl
bnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8g
dGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQorKiogdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWlu
IGEgY29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0
bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFp
biBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDovL29zcy5zZ2kuY29t
L3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExp
Y2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiogIkFTIElTIiBiYXNp
cywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05T
CisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJ
RUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJ
U0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxBUiBQVVJQT1NFLCBB
TkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFs
IENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBWZXJzaW9uIDEuMi4x
LCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGlj
cywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAg
U2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVh
dGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNld2hlcmUgaGVyZWlu
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNp
b25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworKiogZXN0YWJsaXNo
ZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQor
KiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEu
Mi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3Mg
U3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1i
ZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCisqKiBXaW5kb3cg
U3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMg
c29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIu
MSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90
IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiogY29tcGxpYW50IHdpdGgg
dGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisqKgorKi8KKy8qCisq
KiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlzaW9u
JAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvZ2VvbS5oIzUg
JAorKi8KKworI2lmbmRlZiBfX2dlb21faF8KKyNkZWZpbmUgX19nZW9tX2hfCisKKyNpbmNsdWRl
ICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKKworI2lmZGVmIE5PX0JSQU5DSF9DT05E
SVRJT05TCisvKiBNSVBTIGFyY2hpdGVjdHVyZSBoYXMgc3BlY2lhbCBpbnN0cnVjdGlvbnMgdG8g
ZXZhbHVhdGUgYm9vbGVhbgorICogY29uZGl0aW9ucyAtLSBtb3JlIGVmZmljaWVudCB0aGFuIGJy
YW5jaGluZywgSUYgeW91IGNhbiBnZXQgdGhlCisgKiBjb21waWxlciB0byBnZW5lcmF0ZSB0aGUg
cmlnaHQgaW5zdHJ1Y3Rpb25zIChTR0kgY29tcGlsZXIgZG9lc24ndCkKKyAqLworI2RlZmluZSBW
ZXJ0RXEodSx2KQkoKCh1KS0+cyA9PSAodiktPnMpICYgKCh1KS0+dCA9PSAodiktPnQpKQorI2Rl
ZmluZSBWZXJ0TGVxKHUsdikJKCgodSktPnMgPCAodiktPnMpIHwgXAorICAgICAgICAgICAgICAg
ICAgICAgICAgICgodSktPnMgPT0gKHYpLT5zICYgKHUpLT50IDw9ICh2KS0+dCkpCisjZWxzZQor
I2RlZmluZSBWZXJ0RXEodSx2KQkoKHUpLT5zID09ICh2KS0+cyAmJiAodSktPnQgPT0gKHYpLT50
KQorI2RlZmluZSBWZXJ0TGVxKHUsdikJKCgodSktPnMgPCAodiktPnMpIHx8IFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAoKHUpLT5zID09ICh2KS0+cyAmJiAodSktPnQgPD0gKHYpLT50KSkK
KyNlbmRpZgorCisjZGVmaW5lIEVkZ2VFdmFsKHUsdix3KQlfX2dsX2VkZ2VFdmFsKHUsdix3KQor
I2RlZmluZSBFZGdlU2lnbih1LHYsdykJX19nbF9lZGdlU2lnbih1LHYsdykKKworLyogVmVyc2lv
bnMgb2YgVmVydExlcSwgRWRnZVNpZ24sIEVkZ2VFdmFsIHdpdGggcyBhbmQgdCB0cmFuc3Bvc2Vk
LiAqLworCisjZGVmaW5lIFRyYW5zTGVxKHUsdikJKCgodSktPnQgPCAodiktPnQpIHx8IFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAoKHUpLT50ID09ICh2KS0+dCAmJiAodSktPnMgPD0gKHYp
LT5zKSkKKyNkZWZpbmUgVHJhbnNFdmFsKHUsdix3KQlfX2dsX3RyYW5zRXZhbCh1LHYsdykKKyNk
ZWZpbmUgVHJhbnNTaWduKHUsdix3KQlfX2dsX3RyYW5zU2lnbih1LHYsdykKKworCisjZGVmaW5l
IEVkZ2VHb2VzTGVmdChlKQkJVmVydExlcSggKGUpLT5Ec3QsIChlKS0+T3JnICkKKyNkZWZpbmUg
RWRnZUdvZXNSaWdodChlKQlWZXJ0TGVxKCAoZSktPk9yZywgKGUpLT5Ec3QgKQorCisjZGVmaW5l
IEFCUyh4KQkoKHgpIDwgMCA/IC0oeCkgOiAoeCkpCisjZGVmaW5lIFZlcnRMMWRpc3QodSx2KQko
QUJTKHUtPnMgLSB2LT5zKSArIEFCUyh1LT50IC0gdi0+dCkpCisKKyNkZWZpbmUgVmVydENDVyh1
LHYsdykJX19nbF92ZXJ0Q0NXKHUsdix3KQorCitpbnQJCV9fZ2xfdmVydExlcSggR0xVdmVydGV4
ICp1LCBHTFV2ZXJ0ZXggKnYgKTsKK0dMZG91YmxlCV9fZ2xfZWRnZUV2YWwoIEdMVXZlcnRleCAq
dSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKTsKK0dMZG91YmxlCV9fZ2xfZWRnZVNpZ24o
IEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKTsKK0dMZG91YmxlCV9f
Z2xfdHJhbnNFdmFsKCBHTFV2ZXJ0ZXggKnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICk7
CitHTGRvdWJsZQlfX2dsX3RyYW5zU2lnbiggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdM
VXZlcnRleCAqdyApOworaW50CQlfX2dsX3ZlcnRDQ1coIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4
ICp2LCBHTFV2ZXJ0ZXggKncgKTsKK3ZvaWQJCV9fZ2xfZWRnZUludGVyc2VjdCggR0xVdmVydGV4
ICpvMSwgR0xVdmVydGV4ICpkMSwKKwkJCQkgICAgR0xVdmVydGV4ICpvMiwgR0xVdmVydGV4ICpk
MiwKKwkJCQkgICAgR0xVdmVydGV4ICp2ICk7CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS90aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS90aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Ro
aXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
MiBAQAorLyoKKyoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQg
cG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0
aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGlj
ZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlz
CisqKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vu
c2UuIFlvdSBtYXkgbm90IHVzZQorKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQorKiogb2YgdGhlIExpY2Vuc2Ug
YXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoq
IEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBh
dDoKKyoqIAorKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5v
dGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0
cmlidXRlZCBvbiBhbgorKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1Q
TElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcs
IFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJ
VElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBG
T1IgQQorKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAor
KiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1w
bGVtZW50YXRpb24sCisqKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAw
LCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENv
ZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiog
Q29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMg
aW5kaWNhdGVkCisqKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiog
CisqKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3Jh
bW1pbmcgaW50ZXJmYWNlcworKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdp
dGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQorKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3Rl
bTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEs
IDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVy
c2lvbgorKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBH
cmFwaGljcyB3aXRoIHRoZSBYCisqKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJl
bGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVz
aW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoq
IHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmll
ZCBhcyBiZWluZworKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4x
IFNwZWNpZmljYXRpb24uCisqKgorKi8KKy8qCisqKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkg
MTk5NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlzaW9uJAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWlu
L2dmeC9saWIvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuYyM1ICQKKyovCisKKyNpbmNsdWRlICJzdHJp
bmcuaCIKKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgiCisKK2lu
dCBfX2dsX21lbUluaXQoIHNpemVfdCBtYXhGYXN0ICkKK3sKKyNpZm5kZWYgTk9fTUFMTE9QVAor
LyogIG1hbGxvcHQoIE1fTVhGQVNULCBtYXhGYXN0ICk7Ki8KKyNpZmRlZiBNRU1PUllfREVCVUcK
KyAgbWFsbG9wdCggTV9ERUJVRywgMSApOworI2VuZGlmCisjZW5kaWYKKyAgIHJldHVybiAxOwor
fQorCisjaWZkZWYgTUVNT1JZX0RFQlVHCit2b2lkICpfX2dsX21lbUFsbG9jKCBzaXplX3QgbiAp
Cit7CisgIHJldHVybiBtZW1zZXQoIG1hbGxvYyggbiApLCAweGE1LCBuICk7Cit9CisjZW5kaWYK
KwpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4g
RXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorKiogbWFkZSBz
dWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kg
RnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiks
IHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHBy
b3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQorKiogdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVn
YWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3
LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2pl
Y3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2Us
IHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiogIkFTIElTIiBiYXNpcywgd2l0
aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCisqKiBE
SVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FS
UkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RP
UlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9O
LUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUg
aXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBWZXJzaW9uIDEuMi4xLCByZWxl
YXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKKyoq
IEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNv
biBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5
IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNld2hlcmUgaGVyZWluLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBU
aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworKiogZXN0YWJsaXNoZWQgYnkg
U0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQorKiogT3Bl
bkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwg
cmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVt
IFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwg
MTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCisqKiBXaW5kb3cgU3lzdGVt
KFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdh
cmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1w
bGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4g
aW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiogY29tcGxpYW50IHdpdGggdGhlIE9w
ZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisqKgorKi8KKy8qCisqKiBBdXRo
b3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlzaW9uJAorKiog
JEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCM1ICQK
KyovCisKKyNpZm5kZWYgX19tZW1hbGxvY19zaW1wbGVfaF8KKyNkZWZpbmUgX19tZW1hbGxvY19z
aW1wbGVfaF8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lIG1lbVJlYWxsb2MJcmVh
bGxvYworI2RlZmluZSBtZW1GcmVlCQlmcmVlCisKKyNkZWZpbmUgbWVtSW5pdAkJX19nbF9tZW1J
bml0CisvKmV4dGVybiB2b2lkCQlfX2dsX21lbUluaXQoIHNpemVfdCApOyovCitleHRlcm4gaW50
CQlfX2dsX21lbUluaXQoIHNpemVfdCApOworCisjaWZuZGVmIE1FTU9SWV9ERUJVRworI2RlZmlu
ZSBtZW1BbGxvYwltYWxsb2MKKyNlbHNlCisjZGVmaW5lIG1lbUFsbG9jCV9fZ2xfbWVtQWxsb2MK
K2V4dGVybiB2b2lkICoJCV9fZ2xfbWVtQWxsb2MoIHNpemVfdCApOworI2VuZGlmCisKKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5jCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guYwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3OTYgQEAKKy8qCisqKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0
aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKKyoqIG1hZGUgc3ViamVjdCB0byBh
biBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKKyoqIFNv
ZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVu
dHMgb2YgdGhpcworKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9m
IHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKKyoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKKyoqIG9mIHRo
ZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2Vz
LCAxNjAwCisqKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMt
MTM1MSwgb3IgYXQ6CisqKiAKKyoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgor
KiogCisqKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdh
cmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJF
U1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUworKiogRElTQ0xBSU1FRCwg
SU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5E
CisqKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFks
IEZJVE5FU1MgRk9SIEEKKyoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1F
TlQuCisqKiAKKyoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wg
U2FtcGxlIEltcGxlbWVudGF0aW9uLAorKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFy
eSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCisqKiBJbmMuIFRoZSBP
cmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3Ms
IEluYy4KKyoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0
aWVzIGlzIGFzIGluZGljYXRlZAorKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyoqIAorKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0
aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKKyoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25q
dW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKKyoqIE9wZW5HTChSKSBHcmFw
aGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCisq
KiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExp
YnJhcnkgKFZlcnNpb24KKyoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBP
cGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAorKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lv
biAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCisqKiB3YXMg
Y3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVu
dGF0aW9uCisqKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50
bHkgdmVyaWZpZWQgYXMgYmVpbmcKKyoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVy
c2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgorKioKKyovCisvKgorKiogQXV0aG9yOiBFcmljIFZl
YWNoLCBKdWx5IDE5OTQuCisqKgorKiogJERhdGUkICRSZXZpc2lvbiQKKyoqICRIZWFkZXI6IC8v
ZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL21lc2guYyM2ICQKKyovCisKKyNpbmNsdWRl
IDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2ds
dS9nbHVvcy5oIgorI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIK
KyNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKKworI2RlZmluZSBUUlVF
IDEKKyNkZWZpbmUgRkFMU0UgMAorCitzdGF0aWMgR0xVdmVydGV4ICphbGxvY1ZlcnRleCgpCit7
CisgICByZXR1cm4gKEdMVXZlcnRleCAqKW1lbUFsbG9jKCBzaXplb2YoIEdMVXZlcnRleCApKTsK
K30KKworc3RhdGljIEdMVWZhY2UgKmFsbG9jRmFjZSgpCit7CisgICByZXR1cm4gKEdMVWZhY2Ug
KiltZW1BbGxvYyggc2l6ZW9mKCBHTFVmYWNlICkpOworfQorCisvKioqKioqKioqKioqKioqKioq
KioqKioqIFV0aWxpdHkgUm91dGluZXMgKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBB
bGxvY2F0ZSBhbmQgZnJlZSBoYWxmLWVkZ2VzIGluIHBhaXJzIGZvciBlZmZpY2llbmN5LgorICog
VGhlICpvbmx5KiBwbGFjZSB0aGF0IHNob3VsZCB1c2UgdGhpcyBmYWN0IGlzIGFsbG9jYXRpb24v
ZnJlZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeyBHTFVoYWxmRWRnZSBlLCBlU3ltOyB9IEVkZ2VQ
YWlyOworCisvKiBNYWtlRWRnZSBjcmVhdGVzIGEgbmV3IHBhaXIgb2YgaGFsZi1lZGdlcyB3aGlj
aCBmb3JtIHRoZWlyIG93biBsb29wLgorICogTm8gdmVydGV4IG9yIGZhY2Ugc3RydWN0dXJlcyBh
cmUgYWxsb2NhdGVkLCBidXQgdGhlc2UgbXVzdCBiZSBhc3NpZ25lZAorICogYmVmb3JlIHRoZSBj
dXJyZW50IGVkZ2Ugb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC4KKyAqLworc3RhdGljIEdMVWhhbGZF
ZGdlICpNYWtlRWRnZSggR0xVaGFsZkVkZ2UgKmVOZXh0ICkKK3sKKyAgR0xVaGFsZkVkZ2UgKmU7
CisgIEdMVWhhbGZFZGdlICplU3ltOworICBHTFVoYWxmRWRnZSAqZVByZXY7CisgIEVkZ2VQYWly
ICpwYWlyID0gKEVkZ2VQYWlyICopbWVtQWxsb2MoIHNpemVvZiggRWRnZVBhaXIgKSk7CisgIGlm
IChwYWlyID09IE5VTEwpIHJldHVybiBOVUxMOworCisgIGUgPSAmcGFpci0+ZTsKKyAgZVN5bSA9
ICZwYWlyLT5lU3ltOworCisgIC8qIE1ha2Ugc3VyZSBlTmV4dCBwb2ludHMgdG8gdGhlIGZpcnN0
IGVkZ2Ugb2YgdGhlIGVkZ2UgcGFpciAqLworICBpZiggZU5leHQtPlN5bSA8IGVOZXh0ICkgeyBl
TmV4dCA9IGVOZXh0LT5TeW07IH0KKworICAvKiBJbnNlcnQgaW4gY2lyY3VsYXIgZG91Ymx5LWxp
bmtlZCBsaXN0IGJlZm9yZSBlTmV4dC4KKyAgICogTm90ZSB0aGF0IHRoZSBwcmV2IHBvaW50ZXIg
aXMgc3RvcmVkIGluIFN5bS0+bmV4dC4KKyAgICovCisgIGVQcmV2ID0gZU5leHQtPlN5bS0+bmV4
dDsKKyAgZVN5bS0+bmV4dCA9IGVQcmV2OworICBlUHJldi0+U3ltLT5uZXh0ID0gZTsKKyAgZS0+
bmV4dCA9IGVOZXh0OworICBlTmV4dC0+U3ltLT5uZXh0ID0gZVN5bTsKKworICBlLT5TeW0gPSBl
U3ltOworICBlLT5PbmV4dCA9IGU7CisgIGUtPkxuZXh0ID0gZVN5bTsKKyAgZS0+T3JnID0gTlVM
TDsKKyAgZS0+TGZhY2UgPSBOVUxMOworICBlLT53aW5kaW5nID0gMDsKKyAgZS0+YWN0aXZlUmVn
aW9uID0gTlVMTDsKKworICBlU3ltLT5TeW0gPSBlOworICBlU3ltLT5PbmV4dCA9IGVTeW07Cisg
IGVTeW0tPkxuZXh0ID0gZTsKKyAgZVN5bS0+T3JnID0gTlVMTDsKKyAgZVN5bS0+TGZhY2UgPSBO
VUxMOworICBlU3ltLT53aW5kaW5nID0gMDsKKyAgZVN5bS0+YWN0aXZlUmVnaW9uID0gTlVMTDsK
KworICByZXR1cm4gZTsKK30KKworLyogU3BsaWNlKCBhLCBiICkgaXMgYmVzdCBkZXNjcmliZWQg
YnkgdGhlIEd1aWJhcy9TdG9sZmkgcGFwZXIgb3IgdGhlCisgKiBDUzM0OGEgbm90ZXMgKHNlZSBt
ZXNoLmgpLiAgQmFzaWNhbGx5IGl0IG1vZGlmaWVzIHRoZSBtZXNoIHNvIHRoYXQKKyAqIGEtPk9u
ZXh0IGFuZCBiLT5PbmV4dCBhcmUgZXhjaGFuZ2VkLiAgVGhpcyBjYW4gaGF2ZSB2YXJpb3VzIGVm
ZmVjdHMKKyAqIGRlcGVuZGluZyBvbiB3aGV0aGVyIGEgYW5kIGIgYmVsb25nIHRvIGRpZmZlcmVu
dCBmYWNlIG9yIHZlcnRleCByaW5ncy4KKyAqIEZvciBtb3JlIGV4cGxhbmF0aW9uIHNlZSBfX2ds
X21lc2hTcGxpY2UoKSBiZWxvdy4KKyAqLworc3RhdGljIHZvaWQgU3BsaWNlKCBHTFVoYWxmRWRn
ZSAqYSwgR0xVaGFsZkVkZ2UgKmIgKQoreworICBHTFVoYWxmRWRnZSAqYU9uZXh0ID0gYS0+T25l
eHQ7CisgIEdMVWhhbGZFZGdlICpiT25leHQgPSBiLT5PbmV4dDsKKworICBhT25leHQtPlN5bS0+
TG5leHQgPSBiOworICBiT25leHQtPlN5bS0+TG5leHQgPSBhOworICBhLT5PbmV4dCA9IGJPbmV4
dDsKKyAgYi0+T25leHQgPSBhT25leHQ7Cit9CisKKy8qIE1ha2VWZXJ0ZXgoIG5ld1ZlcnRleCwg
ZU9yaWcsIHZOZXh0ICkgYXR0YWNoZXMgYSBuZXcgdmVydGV4IGFuZCBtYWtlcyBpdCB0aGUKKyAq
IG9yaWdpbiBvZiBhbGwgZWRnZXMgaW4gdGhlIHZlcnRleCBsb29wIHRvIHdoaWNoIGVPcmlnIGJl
bG9uZ3MuICJ2TmV4dCIgZ2l2ZXMKKyAqIGEgcGxhY2UgdG8gaW5zZXJ0IHRoZSBuZXcgdmVydGV4
IGluIHRoZSBnbG9iYWwgdmVydGV4IGxpc3QuICBXZSBpbnNlcnQKKyAqIHRoZSBuZXcgdmVydGV4
ICpiZWZvcmUqIHZOZXh0IHNvIHRoYXQgYWxnb3JpdGhtcyB3aGljaCB3YWxrIHRoZSB2ZXJ0ZXgK
KyAqIGxpc3Qgd2lsbCBub3Qgc2VlIHRoZSBuZXdseSBjcmVhdGVkIHZlcnRpY2VzLgorICovCitz
dGF0aWMgdm9pZCBNYWtlVmVydGV4KCBHTFV2ZXJ0ZXggKm5ld1ZlcnRleCwgCisJCQlHTFVoYWxm
RWRnZSAqZU9yaWcsIEdMVXZlcnRleCAqdk5leHQgKQoreworICBHTFVoYWxmRWRnZSAqZTsKKyAg
R0xVdmVydGV4ICp2UHJldjsKKyAgR0xVdmVydGV4ICp2TmV3ID0gbmV3VmVydGV4OworCisgIGFz
c2VydCh2TmV3ICE9IE5VTEwpOworCisgIC8qIGluc2VydCBpbiBjaXJjdWxhciBkb3VibHktbGlu
a2VkIGxpc3QgYmVmb3JlIHZOZXh0ICovCisgIHZQcmV2ID0gdk5leHQtPnByZXY7CisgIHZOZXct
PnByZXYgPSB2UHJldjsKKyAgdlByZXYtPm5leHQgPSB2TmV3OworICB2TmV3LT5uZXh0ID0gdk5l
eHQ7CisgIHZOZXh0LT5wcmV2ID0gdk5ldzsKKworICB2TmV3LT5hbkVkZ2UgPSBlT3JpZzsKKyAg
dk5ldy0+ZGF0YSA9IE5VTEw7CisgIC8qIGxlYXZlIGNvb3JkcywgcywgdCB1bmRlZmluZWQgKi8K
KworICAvKiBmaXggb3RoZXIgZWRnZXMgb24gdGhpcyB2ZXJ0ZXggbG9vcCAqLworICBlID0gZU9y
aWc7CisgIGRvIHsKKyAgICBlLT5PcmcgPSB2TmV3OworICAgIGUgPSBlLT5PbmV4dDsKKyAgfSB3
aGlsZSggZSAhPSBlT3JpZyApOworfQorCisvKiBNYWtlRmFjZSggbmV3RmFjZSwgZU9yaWcsIGZO
ZXh0ICkgYXR0YWNoZXMgYSBuZXcgZmFjZSBhbmQgbWFrZXMgaXQgdGhlIGxlZnQKKyAqIGZhY2Ug
b2YgYWxsIGVkZ2VzIGluIHRoZSBmYWNlIGxvb3AgdG8gd2hpY2ggZU9yaWcgYmVsb25ncy4gICJm
TmV4dCIgZ2l2ZXMKKyAqIGEgcGxhY2UgdG8gaW5zZXJ0IHRoZSBuZXcgZmFjZSBpbiB0aGUgZ2xv
YmFsIGZhY2UgbGlzdC4gIFdlIGluc2VydAorICogdGhlIG5ldyBmYWNlICpiZWZvcmUqIGZOZXh0
IHNvIHRoYXQgYWxnb3JpdGhtcyB3aGljaCB3YWxrIHRoZSBmYWNlCisgKiBsaXN0IHdpbGwgbm90
IHNlZSB0aGUgbmV3bHkgY3JlYXRlZCBmYWNlcy4KKyAqLworc3RhdGljIHZvaWQgTWFrZUZhY2Uo
IEdMVWZhY2UgKm5ld0ZhY2UsIEdMVWhhbGZFZGdlICplT3JpZywgR0xVZmFjZSAqZk5leHQgKQor
eworICBHTFVoYWxmRWRnZSAqZTsKKyAgR0xVZmFjZSAqZlByZXY7CisgIEdMVWZhY2UgKmZOZXcg
PSBuZXdGYWNlOworCisgIGFzc2VydChmTmV3ICE9IE5VTEwpOyAKKworICAvKiBpbnNlcnQgaW4g
Y2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0IGJlZm9yZSBmTmV4dCAqLworICBmUHJldiA9IGZO
ZXh0LT5wcmV2OworICBmTmV3LT5wcmV2ID0gZlByZXY7CisgIGZQcmV2LT5uZXh0ID0gZk5ldzsK
KyAgZk5ldy0+bmV4dCA9IGZOZXh0OworICBmTmV4dC0+cHJldiA9IGZOZXc7CisKKyAgZk5ldy0+
YW5FZGdlID0gZU9yaWc7CisgIGZOZXctPmRhdGEgPSBOVUxMOworICBmTmV3LT50cmFpbCA9IE5V
TEw7CisgIGZOZXctPm1hcmtlZCA9IEZBTFNFOworCisgIC8qIFRoZSBuZXcgZmFjZSBpcyBtYXJr
ZWQgImluc2lkZSIgaWYgdGhlIG9sZCBvbmUgd2FzLiAgVGhpcyBpcyBhCisgICAqIGNvbnZlbmll
bmNlIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgYSBmYWNlIGhhcyBiZWVuIHNwbGl0IGluIHR3
by4KKyAgICovCisgIGZOZXctPmluc2lkZSA9IGZOZXh0LT5pbnNpZGU7CisKKyAgLyogZml4IG90
aGVyIGVkZ2VzIG9uIHRoaXMgZmFjZSBsb29wICovCisgIGUgPSBlT3JpZzsKKyAgZG8geworICAg
IGUtPkxmYWNlID0gZk5ldzsKKyAgICBlID0gZS0+TG5leHQ7CisgIH0gd2hpbGUoIGUgIT0gZU9y
aWcgKTsKK30KKworLyogS2lsbEVkZ2UoIGVEZWwgKSBkZXN0cm95cyBhbiBlZGdlICh0aGUgaGFs
Zi1lZGdlcyBlRGVsIGFuZCBlRGVsLT5TeW0pLAorICogYW5kIHJlbW92ZXMgZnJvbSB0aGUgZ2xv
YmFsIGVkZ2UgbGlzdC4KKyAqLworc3RhdGljIHZvaWQgS2lsbEVkZ2UoIEdMVWhhbGZFZGdlICpl
RGVsICkKK3sKKyAgR0xVaGFsZkVkZ2UgKmVQcmV2LCAqZU5leHQ7CisKKyAgLyogSGFsZi1lZGdl
cyBhcmUgYWxsb2NhdGVkIGluIHBhaXJzLCBzZWUgRWRnZVBhaXIgYWJvdmUgKi8KKyAgaWYoIGVE
ZWwtPlN5bSA8IGVEZWwgKSB7IGVEZWwgPSBlRGVsLT5TeW07IH0KKworICAvKiBkZWxldGUgZnJv
bSBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgKi8KKyAgZU5leHQgPSBlRGVsLT5uZXh0Owor
ICBlUHJldiA9IGVEZWwtPlN5bS0+bmV4dDsKKyAgZU5leHQtPlN5bS0+bmV4dCA9IGVQcmV2Owor
ICBlUHJldi0+U3ltLT5uZXh0ID0gZU5leHQ7CisKKyAgbWVtRnJlZSggZURlbCApOworfQorCisK
Ky8qIEtpbGxWZXJ0ZXgoIHZEZWwgKSBkZXN0cm95cyBhIHZlcnRleCBhbmQgcmVtb3ZlcyBpdCBm
cm9tIHRoZSBnbG9iYWwKKyAqIHZlcnRleCBsaXN0LiAgSXQgdXBkYXRlcyB0aGUgdmVydGV4IGxv
b3AgdG8gcG9pbnQgdG8gYSBnaXZlbiBuZXcgdmVydGV4LgorICovCitzdGF0aWMgdm9pZCBLaWxs
VmVydGV4KCBHTFV2ZXJ0ZXggKnZEZWwsIEdMVXZlcnRleCAqbmV3T3JnICkKK3sKKyAgR0xVaGFs
ZkVkZ2UgKmUsICplU3RhcnQgPSB2RGVsLT5hbkVkZ2U7CisgIEdMVXZlcnRleCAqdlByZXYsICp2
TmV4dDsKKworICAvKiBjaGFuZ2UgdGhlIG9yaWdpbiBvZiBhbGwgYWZmZWN0ZWQgZWRnZXMgKi8K
KyAgZSA9IGVTdGFydDsKKyAgZG8geworICAgIGUtPk9yZyA9IG5ld09yZzsKKyAgICBlID0gZS0+
T25leHQ7CisgIH0gd2hpbGUoIGUgIT0gZVN0YXJ0ICk7CisKKyAgLyogZGVsZXRlIGZyb20gY2ly
Y3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0ICovCisgIHZQcmV2ID0gdkRlbC0+cHJldjsKKyAgdk5l
eHQgPSB2RGVsLT5uZXh0OworICB2TmV4dC0+cHJldiA9IHZQcmV2OworICB2UHJldi0+bmV4dCA9
IHZOZXh0OworCisgIG1lbUZyZWUoIHZEZWwgKTsKK30KKworLyogS2lsbEZhY2UoIGZEZWwgKSBk
ZXN0cm95cyBhIGZhY2UgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgZ2xvYmFsIGZhY2UKKyAqIGxp
c3QuICBJdCB1cGRhdGVzIHRoZSBmYWNlIGxvb3AgdG8gcG9pbnQgdG8gYSBnaXZlbiBuZXcgZmFj
ZS4KKyAqLworc3RhdGljIHZvaWQgS2lsbEZhY2UoIEdMVWZhY2UgKmZEZWwsIEdMVWZhY2UgKm5l
d0xmYWNlICkKK3sKKyAgR0xVaGFsZkVkZ2UgKmUsICplU3RhcnQgPSBmRGVsLT5hbkVkZ2U7Cisg
IEdMVWZhY2UgKmZQcmV2LCAqZk5leHQ7CisKKyAgLyogY2hhbmdlIHRoZSBsZWZ0IGZhY2Ugb2Yg
YWxsIGFmZmVjdGVkIGVkZ2VzICovCisgIGUgPSBlU3RhcnQ7CisgIGRvIHsKKyAgICBlLT5MZmFj
ZSA9IG5ld0xmYWNlOworICAgIGUgPSBlLT5MbmV4dDsKKyAgfSB3aGlsZSggZSAhPSBlU3RhcnQg
KTsKKworICAvKiBkZWxldGUgZnJvbSBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgKi8KKyAg
ZlByZXYgPSBmRGVsLT5wcmV2OworICBmTmV4dCA9IGZEZWwtPm5leHQ7CisgIGZOZXh0LT5wcmV2
ID0gZlByZXY7CisgIGZQcmV2LT5uZXh0ID0gZk5leHQ7CisKKyAgbWVtRnJlZSggZkRlbCApOwor
fQorCisKKy8qKioqKioqKioqKioqKioqKiogQmFzaWMgRWRnZSBPcGVyYXRpb25zICoqKioqKioq
KioqKioqKioqKioqKiovCisKKy8qIF9fZ2xfbWVzaE1ha2VFZGdlIGNyZWF0ZXMgb25lIGVkZ2Us
IHR3byB2ZXJ0aWNlcywgYW5kIGEgbG9vcCAoZmFjZSkuCisgKiBUaGUgbG9vcCBjb25zaXN0cyBv
ZiB0aGUgdHdvIG5ldyBoYWxmLWVkZ2VzLgorICovCitHTFVoYWxmRWRnZSAqX19nbF9tZXNoTWFr
ZUVkZ2UoIEdMVW1lc2ggKm1lc2ggKQoreworICBHTFV2ZXJ0ZXggKm5ld1ZlcnRleDE9IGFsbG9j
VmVydGV4KCk7CisgIEdMVXZlcnRleCAqbmV3VmVydGV4Mj0gYWxsb2NWZXJ0ZXgoKTsKKyAgR0xV
ZmFjZSAqbmV3RmFjZT0gYWxsb2NGYWNlKCk7CisgIEdMVWhhbGZFZGdlICplOworCisgIC8qIGlm
IGFueSBvbmUgaXMgbnVsbCB0aGVuIGFsbCBnZXQgZnJlZWQgKi8KKyAgaWYgKG5ld1ZlcnRleDEg
PT0gTlVMTCB8fCBuZXdWZXJ0ZXgyID09IE5VTEwgfHwgbmV3RmFjZSA9PSBOVUxMKSB7CisgICAg
IGlmIChuZXdWZXJ0ZXgxICE9IE5VTEwpIG1lbUZyZWUobmV3VmVydGV4MSk7CisgICAgIGlmIChu
ZXdWZXJ0ZXgyICE9IE5VTEwpIG1lbUZyZWUobmV3VmVydGV4Mik7CisgICAgIGlmIChuZXdGYWNl
ICE9IE5VTEwpIG1lbUZyZWUobmV3RmFjZSk7ICAgICAKKyAgICAgcmV0dXJuIE5VTEw7CisgIH0g
CisKKyAgZSA9IE1ha2VFZGdlKCAmbWVzaC0+ZUhlYWQgKTsKKyAgaWYgKGUgPT0gTlVMTCkgcmV0
dXJuIE5VTEw7CisKKyAgTWFrZVZlcnRleCggbmV3VmVydGV4MSwgZSwgJm1lc2gtPnZIZWFkICk7
CisgIE1ha2VWZXJ0ZXgoIG5ld1ZlcnRleDIsIGUtPlN5bSwgJm1lc2gtPnZIZWFkICk7CisgIE1h
a2VGYWNlKCBuZXdGYWNlLCBlLCAmbWVzaC0+ZkhlYWQgKTsKKyAgcmV0dXJuIGU7Cit9CisgIAor
CisvKiBfX2dsX21lc2hTcGxpY2UoIGVPcmcsIGVEc3QgKSBpcyB0aGUgYmFzaWMgb3BlcmF0aW9u
IGZvciBjaGFuZ2luZyB0aGUKKyAqIG1lc2ggY29ubmVjdGl2aXR5IGFuZCB0b3BvbG9neS4gIEl0
IGNoYW5nZXMgdGhlIG1lc2ggc28gdGhhdAorICoJZU9yZy0+T25leHQgPC0gT0xEKCBlRHN0LT5P
bmV4dCApCisgKgllRHN0LT5PbmV4dCA8LSBPTEQoIGVPcmctPk9uZXh0ICkKKyAqIHdoZXJlIE9M
RCguLi4pIG1lYW5zIHRoZSB2YWx1ZSBiZWZvcmUgdGhlIG1lc2hTcGxpY2Ugb3BlcmF0aW9uLgor
ICoKKyAqIFRoaXMgY2FuIGhhdmUgdHdvIGVmZmVjdHMgb24gdGhlIHZlcnRleCBzdHJ1Y3R1cmU6
CisgKiAgLSBpZiBlT3JnLT5PcmcgIT0gZURzdC0+T3JnLCB0aGUgdHdvIHZlcnRpY2VzIGFyZSBt
ZXJnZWQgdG9nZXRoZXIKKyAqICAtIGlmIGVPcmctPk9yZyA9PSBlRHN0LT5PcmcsIHRoZSBvcmln
aW4gaXMgc3BsaXQgaW50byB0d28gdmVydGljZXMKKyAqIEluIGJvdGggY2FzZXMsIGVEc3QtPk9y
ZyBpcyBjaGFuZ2VkIGFuZCBlT3JnLT5PcmcgaXMgdW50b3VjaGVkLgorICoKKyAqIFNpbWlsYXJs
eSAoYW5kIGluZGVwZW5kZW50bHkpIGZvciB0aGUgZmFjZSBzdHJ1Y3R1cmUsCisgKiAgLSBpZiBl
T3JnLT5MZmFjZSA9PSBlRHN0LT5MZmFjZSwgb25lIGxvb3AgaXMgc3BsaXQgaW50byB0d28KKyAq
ICAtIGlmIGVPcmctPkxmYWNlICE9IGVEc3QtPkxmYWNlLCB0d28gZGlzdGluY3QgbG9vcHMgYXJl
IGpvaW5lZCBpbnRvIG9uZQorICogSW4gYm90aCBjYXNlcywgZURzdC0+TGZhY2UgaXMgY2hhbmdl
ZCBhbmQgZU9yZy0+TGZhY2UgaXMgdW5hZmZlY3RlZC4KKyAqCisgKiBTb21lIHNwZWNpYWwgY2Fz
ZXM6CisgKiBJZiBlRHN0ID09IGVPcmcsIHRoZSBvcGVyYXRpb24gaGFzIG5vIGVmZmVjdC4KKyAq
IElmIGVEc3QgPT0gZU9yZy0+TG5leHQsIHRoZSBuZXcgZmFjZSB3aWxsIGhhdmUgYSBzaW5nbGUg
ZWRnZS4KKyAqIElmIGVEc3QgPT0gZU9yZy0+THByZXYsIHRoZSBvbGQgZmFjZSB3aWxsIGhhdmUg
YSBzaW5nbGUgZWRnZS4KKyAqIElmIGVEc3QgPT0gZU9yZy0+T25leHQsIHRoZSBuZXcgdmVydGV4
IHdpbGwgaGF2ZSBhIHNpbmdsZSBlZGdlLgorICogSWYgZURzdCA9PSBlT3JnLT5PcHJldiwgdGhl
IG9sZCB2ZXJ0ZXggd2lsbCBoYXZlIGEgc2luZ2xlIGVkZ2UuCisgKi8KK2ludCBfX2dsX21lc2hT
cGxpY2UoIEdMVWhhbGZFZGdlICplT3JnLCBHTFVoYWxmRWRnZSAqZURzdCApCit7CisgIGludCBq
b2luaW5nTG9vcHMgPSBGQUxTRTsKKyAgaW50IGpvaW5pbmdWZXJ0aWNlcyA9IEZBTFNFOworCisg
IGlmKCBlT3JnID09IGVEc3QgKSByZXR1cm4gMTsKKworICBpZiggZURzdC0+T3JnICE9IGVPcmct
Pk9yZyApIHsKKyAgICAvKiBXZSBhcmUgbWVyZ2luZyB0d28gZGlzam9pbnQgdmVydGljZXMgLS0g
ZGVzdHJveSBlRHN0LT5PcmcgKi8KKyAgICBqb2luaW5nVmVydGljZXMgPSBUUlVFOworICAgIEtp
bGxWZXJ0ZXgoIGVEc3QtPk9yZywgZU9yZy0+T3JnICk7CisgIH0KKyAgaWYoIGVEc3QtPkxmYWNl
ICE9IGVPcmctPkxmYWNlICkgeworICAgIC8qIFdlIGFyZSBjb25uZWN0aW5nIHR3byBkaXNqb2lu
dCBsb29wcyAtLSBkZXN0cm95IGVEc3QtPkxmYWNlICovCisgICAgam9pbmluZ0xvb3BzID0gVFJV
RTsKKyAgICBLaWxsRmFjZSggZURzdC0+TGZhY2UsIGVPcmctPkxmYWNlICk7CisgIH0KKworICAv
KiBDaGFuZ2UgdGhlIGVkZ2Ugc3RydWN0dXJlICovCisgIFNwbGljZSggZURzdCwgZU9yZyApOwor
CisgIGlmKCAhIGpvaW5pbmdWZXJ0aWNlcyApIHsKKyAgICBHTFV2ZXJ0ZXggKm5ld1ZlcnRleD0g
YWxsb2NWZXJ0ZXgoKTsKKyAgICBpZiAobmV3VmVydGV4ID09IE5VTEwpIHJldHVybiAwOworCisg
ICAgLyogV2Ugc3BsaXQgb25lIHZlcnRleCBpbnRvIHR3byAtLSB0aGUgbmV3IHZlcnRleCBpcyBl
RHN0LT5PcmcuCisgICAgICogTWFrZSBzdXJlIHRoZSBvbGQgdmVydGV4IHBvaW50cyB0byBhIHZh
bGlkIGhhbGYtZWRnZS4KKyAgICAgKi8KKyAgICBNYWtlVmVydGV4KCBuZXdWZXJ0ZXgsIGVEc3Qs
IGVPcmctPk9yZyApOworICAgIGVPcmctPk9yZy0+YW5FZGdlID0gZU9yZzsKKyAgfQorICBpZigg
ISBqb2luaW5nTG9vcHMgKSB7CisgICAgR0xVZmFjZSAqbmV3RmFjZT0gYWxsb2NGYWNlKCk7ICAK
KyAgICBpZiAobmV3RmFjZSA9PSBOVUxMKSByZXR1cm4gMDsKKworICAgIC8qIFdlIHNwbGl0IG9u
ZSBsb29wIGludG8gdHdvIC0tIHRoZSBuZXcgbG9vcCBpcyBlRHN0LT5MZmFjZS4KKyAgICAgKiBN
YWtlIHN1cmUgdGhlIG9sZCBmYWNlIHBvaW50cyB0byBhIHZhbGlkIGhhbGYtZWRnZS4KKyAgICAg
Ki8KKyAgICBNYWtlRmFjZSggbmV3RmFjZSwgZURzdCwgZU9yZy0+TGZhY2UgKTsKKyAgICBlT3Jn
LT5MZmFjZS0+YW5FZGdlID0gZU9yZzsKKyAgfQorCisgIHJldHVybiAxOworfQorCisKKy8qIF9f
Z2xfbWVzaERlbGV0ZSggZURlbCApIHJlbW92ZXMgdGhlIGVkZ2UgZURlbC4gIFRoZXJlIGFyZSBz
ZXZlcmFsIGNhc2VzOgorICogaWYgKGVEZWwtPkxmYWNlICE9IGVEZWwtPlJmYWNlKSwgd2Ugam9p
biB0d28gbG9vcHMgaW50byBvbmU7IHRoZSBsb29wCisgKiBlRGVsLT5MZmFjZSBpcyBkZWxldGVk
LiAgT3RoZXJ3aXNlLCB3ZSBhcmUgc3BsaXR0aW5nIG9uZSBsb29wIGludG8gdHdvOworICogdGhl
IG5ld2x5IGNyZWF0ZWQgbG9vcCB3aWxsIGNvbnRhaW4gZURlbC0+RHN0LiAgSWYgdGhlIGRlbGV0
aW9uIG9mIGVEZWwKKyAqIHdvdWxkIGNyZWF0ZSBpc29sYXRlZCB2ZXJ0aWNlcywgdGhvc2UgYXJl
IGRlbGV0ZWQgYXMgd2VsbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGltcGxlbWVu
dGVkIGFzIHR3byBjYWxscyB0byBfX2dsX21lc2hTcGxpY2UKKyAqIHBsdXMgYSBmZXcgY2FsbHMg
dG8gbWVtRnJlZSwgYnV0IHRoaXMgd291bGQgYWxsb2NhdGUgYW5kIGRlbGV0ZQorICogdW5uZWNl
c3NhcnkgdmVydGljZXMgYW5kIGZhY2VzLgorICovCitpbnQgX19nbF9tZXNoRGVsZXRlKCBHTFVo
YWxmRWRnZSAqZURlbCApCit7CisgIEdMVWhhbGZFZGdlICplRGVsU3ltID0gZURlbC0+U3ltOwor
ICBpbnQgam9pbmluZ0xvb3BzID0gRkFMU0U7CisKKyAgLyogRmlyc3Qgc3RlcDogZGlzY29ubmVj
dCB0aGUgb3JpZ2luIHZlcnRleCBlRGVsLT5PcmcuICBXZSBtYWtlIGFsbAorICAgKiBjaGFuZ2Vz
IHRvIGdldCBhIGNvbnNpc3RlbnQgbWVzaCBpbiB0aGlzICJpbnRlcm1lZGlhdGUiIHN0YXRlLgor
ICAgKi8KKyAgaWYoIGVEZWwtPkxmYWNlICE9IGVEZWwtPlJmYWNlICkgeworICAgIC8qIFdlIGFy
ZSBqb2luaW5nIHR3byBsb29wcyBpbnRvIG9uZSAtLSByZW1vdmUgdGhlIGxlZnQgZmFjZSAqLwor
ICAgIGpvaW5pbmdMb29wcyA9IFRSVUU7CisgICAgS2lsbEZhY2UoIGVEZWwtPkxmYWNlLCBlRGVs
LT5SZmFjZSApOworICB9CisKKyAgaWYoIGVEZWwtPk9uZXh0ID09IGVEZWwgKSB7CisgICAgS2ls
bFZlcnRleCggZURlbC0+T3JnLCBOVUxMICk7CisgIH0gZWxzZSB7CisgICAgLyogTWFrZSBzdXJl
IHRoYXQgZURlbC0+T3JnIGFuZCBlRGVsLT5SZmFjZSBwb2ludCB0byB2YWxpZCBoYWxmLWVkZ2Vz
ICovCisgICAgZURlbC0+UmZhY2UtPmFuRWRnZSA9IGVEZWwtPk9wcmV2OworICAgIGVEZWwtPk9y
Zy0+YW5FZGdlID0gZURlbC0+T25leHQ7CisKKyAgICBTcGxpY2UoIGVEZWwsIGVEZWwtPk9wcmV2
ICk7CisgICAgaWYoICEgam9pbmluZ0xvb3BzICkgeworICAgICAgR0xVZmFjZSAqbmV3RmFjZT0g
YWxsb2NGYWNlKCk7CisgICAgICBpZiAobmV3RmFjZSA9PSBOVUxMKSByZXR1cm4gMDsgCisKKyAg
ICAgIC8qIFdlIGFyZSBzcGxpdHRpbmcgb25lIGxvb3AgaW50byB0d28gLS0gY3JlYXRlIGEgbmV3
IGxvb3AgZm9yIGVEZWwuICovCisgICAgICBNYWtlRmFjZSggbmV3RmFjZSwgZURlbCwgZURlbC0+
TGZhY2UgKTsKKyAgICB9CisgIH0KKworICAvKiBDbGFpbTogdGhlIG1lc2ggaXMgbm93IGluIGEg
Y29uc2lzdGVudCBzdGF0ZSwgZXhjZXB0IHRoYXQgZURlbC0+T3JnCisgICAqIG1heSBoYXZlIGJl
ZW4gZGVsZXRlZC4gIE5vdyB3ZSBkaXNjb25uZWN0IGVEZWwtPkRzdC4KKyAgICovCisgIGlmKCBl
RGVsU3ltLT5PbmV4dCA9PSBlRGVsU3ltICkgeworICAgIEtpbGxWZXJ0ZXgoIGVEZWxTeW0tPk9y
ZywgTlVMTCApOworICAgIEtpbGxGYWNlKCBlRGVsU3ltLT5MZmFjZSwgTlVMTCApOworICB9IGVs
c2UgeworICAgIC8qIE1ha2Ugc3VyZSB0aGF0IGVEZWwtPkRzdCBhbmQgZURlbC0+TGZhY2UgcG9p
bnQgdG8gdmFsaWQgaGFsZi1lZGdlcyAqLworICAgIGVEZWwtPkxmYWNlLT5hbkVkZ2UgPSBlRGVs
U3ltLT5PcHJldjsKKyAgICBlRGVsU3ltLT5PcmctPmFuRWRnZSA9IGVEZWxTeW0tPk9uZXh0Owor
ICAgIFNwbGljZSggZURlbFN5bSwgZURlbFN5bS0+T3ByZXYgKTsKKyAgfQorCisgIC8qIEFueSBp
c29sYXRlZCB2ZXJ0aWNlcyBvciBmYWNlcyBoYXZlIGFscmVhZHkgYmVlbiBmcmVlZC4gKi8KKyAg
S2lsbEVkZ2UoIGVEZWwgKTsKKworICByZXR1cm4gMTsKK30KKworCisvKioqKioqKioqKioqKioq
KioqKiogT3RoZXIgRWRnZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKiovCisKKy8q
IEFsbCB0aGVzZSByb3V0aW5lcyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aCB0aGUgYmFzaWMgZWRn
ZQorICogb3BlcmF0aW9ucyBhYm92ZS4gIFRoZXkgYXJlIHByb3ZpZGVkIGZvciBjb252ZW5pZW5j
ZSBhbmQgZWZmaWNpZW5jeS4KKyAqLworCisKKy8qIF9fZ2xfbWVzaEFkZEVkZ2VWZXJ0ZXgoIGVP
cmcgKSBjcmVhdGVzIGEgbmV3IGVkZ2UgZU5ldyBzdWNoIHRoYXQKKyAqIGVOZXcgPT0gZU9yZy0+
TG5leHQsIGFuZCBlTmV3LT5Ec3QgaXMgYSBuZXdseSBjcmVhdGVkIHZlcnRleC4KKyAqIGVPcmcg
YW5kIGVOZXcgd2lsbCBoYXZlIHRoZSBzYW1lIGxlZnQgZmFjZS4KKyAqLworR0xVaGFsZkVkZ2Ug
Kl9fZ2xfbWVzaEFkZEVkZ2VWZXJ0ZXgoIEdMVWhhbGZFZGdlICplT3JnICkKK3sKKyAgR0xVaGFs
ZkVkZ2UgKmVOZXdTeW07CisgIEdMVWhhbGZFZGdlICplTmV3ID0gTWFrZUVkZ2UoIGVPcmcgKTsK
KyAgaWYgKGVOZXcgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKyAgZU5ld1N5bSA9IGVOZXctPlN5
bTsKKworICAvKiBDb25uZWN0IHRoZSBuZXcgZWRnZSBhcHByb3ByaWF0ZWx5ICovCisgIFNwbGlj
ZSggZU5ldywgZU9yZy0+TG5leHQgKTsKKworICAvKiBTZXQgdGhlIHZlcnRleCBhbmQgZmFjZSBp
bmZvcm1hdGlvbiAqLworICBlTmV3LT5PcmcgPSBlT3JnLT5Ec3Q7CisgIHsKKyAgICBHTFV2ZXJ0
ZXggKm5ld1ZlcnRleD0gYWxsb2NWZXJ0ZXgoKTsKKyAgICBpZiAobmV3VmVydGV4ID09IE5VTEwp
IHJldHVybiBOVUxMOworCisgICAgTWFrZVZlcnRleCggbmV3VmVydGV4LCBlTmV3U3ltLCBlTmV3
LT5PcmcgKTsKKyAgfQorICBlTmV3LT5MZmFjZSA9IGVOZXdTeW0tPkxmYWNlID0gZU9yZy0+TGZh
Y2U7CisKKyAgcmV0dXJuIGVOZXc7Cit9CisKKworLyogX19nbF9tZXNoU3BsaXRFZGdlKCBlT3Jn
ICkgc3BsaXRzIGVPcmcgaW50byB0d28gZWRnZXMgZU9yZyBhbmQgZU5ldywKKyAqIHN1Y2ggdGhh
dCBlTmV3ID09IGVPcmctPkxuZXh0LiAgVGhlIG5ldyB2ZXJ0ZXggaXMgZU9yZy0+RHN0ID09IGVO
ZXctPk9yZy4KKyAqIGVPcmcgYW5kIGVOZXcgd2lsbCBoYXZlIHRoZSBzYW1lIGxlZnQgZmFjZS4K
KyAqLworR0xVaGFsZkVkZ2UgKl9fZ2xfbWVzaFNwbGl0RWRnZSggR0xVaGFsZkVkZ2UgKmVPcmcg
KQoreworICBHTFVoYWxmRWRnZSAqZU5ldzsKKyAgR0xVaGFsZkVkZ2UgKnRlbXBIYWxmRWRnZT0g
X19nbF9tZXNoQWRkRWRnZVZlcnRleCggZU9yZyApOworICBpZiAodGVtcEhhbGZFZGdlID09IE5V
TEwpIHJldHVybiBOVUxMOworCisgIGVOZXcgPSB0ZW1wSGFsZkVkZ2UtPlN5bTsKKworICAvKiBE
aXNjb25uZWN0IGVPcmcgZnJvbSBlT3JnLT5Ec3QgYW5kIGNvbm5lY3QgaXQgdG8gZU5ldy0+T3Jn
ICovCisgIFNwbGljZSggZU9yZy0+U3ltLCBlT3JnLT5TeW0tPk9wcmV2ICk7CisgIFNwbGljZSgg
ZU9yZy0+U3ltLCBlTmV3ICk7CisKKyAgLyogU2V0IHRoZSB2ZXJ0ZXggYW5kIGZhY2UgaW5mb3Jt
YXRpb24gKi8KKyAgZU9yZy0+RHN0ID0gZU5ldy0+T3JnOworICBlTmV3LT5Ec3QtPmFuRWRnZSA9
IGVOZXctPlN5bTsJLyogbWF5IGhhdmUgcG9pbnRlZCB0byBlT3JnLT5TeW0gKi8KKyAgZU5ldy0+
UmZhY2UgPSBlT3JnLT5SZmFjZTsKKyAgZU5ldy0+d2luZGluZyA9IGVPcmctPndpbmRpbmc7CS8q
IGNvcHkgb2xkIHdpbmRpbmcgaW5mb3JtYXRpb24gKi8KKyAgZU5ldy0+U3ltLT53aW5kaW5nID0g
ZU9yZy0+U3ltLT53aW5kaW5nOworCisgIHJldHVybiBlTmV3OworfQorCisKKy8qIF9fZ2xfbWVz
aENvbm5lY3QoIGVPcmcsIGVEc3QgKSBjcmVhdGVzIGEgbmV3IGVkZ2UgZnJvbSBlT3JnLT5Ec3QK
KyAqIHRvIGVEc3QtPk9yZywgYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgaGFsZi1lZGdl
IGVOZXcuCisgKiBJZiBlT3JnLT5MZmFjZSA9PSBlRHN0LT5MZmFjZSwgdGhpcyBzcGxpdHMgb25l
IGxvb3AgaW50byB0d28sCisgKiBhbmQgdGhlIG5ld2x5IGNyZWF0ZWQgbG9vcCBpcyBlTmV3LT5M
ZmFjZS4gIE90aGVyd2lzZSwgdHdvIGRpc2pvaW50CisgKiBsb29wcyBhcmUgbWVyZ2VkIGludG8g
b25lLCBhbmQgdGhlIGxvb3AgZURzdC0+TGZhY2UgaXMgZGVzdHJveWVkLgorICoKKyAqIElmIChl
T3JnID09IGVEc3QpLCB0aGUgbmV3IGZhY2Ugd2lsbCBoYXZlIG9ubHkgdHdvIGVkZ2VzLgorICog
SWYgKGVPcmctPkxuZXh0ID09IGVEc3QpLCB0aGUgb2xkIGZhY2UgaXMgcmVkdWNlZCB0byBhIHNp
bmdsZSBlZGdlLgorICogSWYgKGVPcmctPkxuZXh0LT5MbmV4dCA9PSBlRHN0KSwgdGhlIG9sZCBm
YWNlIGlzIHJlZHVjZWQgdG8gdHdvIGVkZ2VzLgorICovCitHTFVoYWxmRWRnZSAqX19nbF9tZXNo
Q29ubmVjdCggR0xVaGFsZkVkZ2UgKmVPcmcsIEdMVWhhbGZFZGdlICplRHN0ICkKK3sKKyAgR0xV
aGFsZkVkZ2UgKmVOZXdTeW07CisgIGludCBqb2luaW5nTG9vcHMgPSBGQUxTRTsgIAorICBHTFVo
YWxmRWRnZSAqZU5ldyA9IE1ha2VFZGdlKCBlT3JnICk7CisgIGlmIChlTmV3ID09IE5VTEwpIHJl
dHVybiBOVUxMOworCisgIGVOZXdTeW0gPSBlTmV3LT5TeW07CisKKyAgaWYoIGVEc3QtPkxmYWNl
ICE9IGVPcmctPkxmYWNlICkgeworICAgIC8qIFdlIGFyZSBjb25uZWN0aW5nIHR3byBkaXNqb2lu
dCBsb29wcyAtLSBkZXN0cm95IGVEc3QtPkxmYWNlICovCisgICAgam9pbmluZ0xvb3BzID0gVFJV
RTsKKyAgICBLaWxsRmFjZSggZURzdC0+TGZhY2UsIGVPcmctPkxmYWNlICk7CisgIH0KKworICAv
KiBDb25uZWN0IHRoZSBuZXcgZWRnZSBhcHByb3ByaWF0ZWx5ICovCisgIFNwbGljZSggZU5ldywg
ZU9yZy0+TG5leHQgKTsKKyAgU3BsaWNlKCBlTmV3U3ltLCBlRHN0ICk7CisKKyAgLyogU2V0IHRo
ZSB2ZXJ0ZXggYW5kIGZhY2UgaW5mb3JtYXRpb24gKi8KKyAgZU5ldy0+T3JnID0gZU9yZy0+RHN0
OworICBlTmV3U3ltLT5PcmcgPSBlRHN0LT5Pcmc7CisgIGVOZXctPkxmYWNlID0gZU5ld1N5bS0+
TGZhY2UgPSBlT3JnLT5MZmFjZTsKKworICAvKiBNYWtlIHN1cmUgdGhlIG9sZCBmYWNlIHBvaW50
cyB0byBhIHZhbGlkIGhhbGYtZWRnZSAqLworICBlT3JnLT5MZmFjZS0+YW5FZGdlID0gZU5ld1N5
bTsKKworICBpZiggISBqb2luaW5nTG9vcHMgKSB7CisgICAgR0xVZmFjZSAqbmV3RmFjZT0gYWxs
b2NGYWNlKCk7CisgICAgaWYgKG5ld0ZhY2UgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKyAgICAv
KiBXZSBzcGxpdCBvbmUgbG9vcCBpbnRvIHR3byAtLSB0aGUgbmV3IGxvb3AgaXMgZU5ldy0+TGZh
Y2UgKi8KKyAgICBNYWtlRmFjZSggbmV3RmFjZSwgZU5ldywgZU9yZy0+TGZhY2UgKTsKKyAgfQor
ICByZXR1cm4gZU5ldzsKK30KKworCisvKioqKioqKioqKioqKioqKioqKiogT3RoZXIgT3BlcmF0
aW9ucyAqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBfX2dsX21lc2haYXBGYWNlKCBmWmFw
ICkgZGVzdHJveXMgYSBmYWNlIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlCisgKiBnbG9iYWwgZmFj
ZSBsaXN0LiAgQWxsIGVkZ2VzIG9mIGZaYXAgd2lsbCBoYXZlIGEgTlVMTCBwb2ludGVyIGFzIHRo
ZWlyCisgKiBsZWZ0IGZhY2UuICBBbnkgZWRnZXMgd2hpY2ggYWxzbyBoYXZlIGEgTlVMTCBwb2lu
dGVyIGFzIHRoZWlyIHJpZ2h0IGZhY2UKKyAqIGFyZSBkZWxldGVkIGVudGlyZWx5IChhbG9uZyB3
aXRoIGFueSBpc29sYXRlZCB2ZXJ0aWNlcyB0aGlzIHByb2R1Y2VzKS4KKyAqIEFuIGVudGlyZSBt
ZXNoIGNhbiBiZSBkZWxldGVkIGJ5IHphcHBpbmcgaXRzIGZhY2VzLCBvbmUgYXQgYSB0aW1lLAor
ICogaW4gYW55IG9yZGVyLiAgWmFwcGVkIGZhY2VzIGNhbm5vdCBiZSB1c2VkIGluIGZ1cnRoZXIg
bWVzaCBvcGVyYXRpb25zIQorICovCit2b2lkIF9fZ2xfbWVzaFphcEZhY2UoIEdMVWZhY2UgKmZa
YXAgKQoreworICBHTFVoYWxmRWRnZSAqZVN0YXJ0ID0gZlphcC0+YW5FZGdlOworICBHTFVoYWxm
RWRnZSAqZSwgKmVOZXh0LCAqZVN5bTsKKyAgR0xVZmFjZSAqZlByZXYsICpmTmV4dDsKKworICAv
KiB3YWxrIGFyb3VuZCBmYWNlLCBkZWxldGluZyBlZGdlcyB3aG9zZSByaWdodCBmYWNlIGlzIGFs
c28gTlVMTCAqLworICBlTmV4dCA9IGVTdGFydC0+TG5leHQ7CisgIGRvIHsKKyAgICBlID0gZU5l
eHQ7CisgICAgZU5leHQgPSBlLT5MbmV4dDsKKworICAgIGUtPkxmYWNlID0gTlVMTDsKKyAgICBp
ZiggZS0+UmZhY2UgPT0gTlVMTCApIHsKKyAgICAgIC8qIGRlbGV0ZSB0aGUgZWRnZSAtLSBzZWUg
X19nbF9NZXNoRGVsZXRlIGFib3ZlICovCisKKyAgICAgIGlmKCBlLT5PbmV4dCA9PSBlICkgewor
CUtpbGxWZXJ0ZXgoIGUtPk9yZywgTlVMTCApOworICAgICAgfSBlbHNlIHsKKwkvKiBNYWtlIHN1
cmUgdGhhdCBlLT5PcmcgcG9pbnRzIHRvIGEgdmFsaWQgaGFsZi1lZGdlICovCisJZS0+T3JnLT5h
bkVkZ2UgPSBlLT5PbmV4dDsKKwlTcGxpY2UoIGUsIGUtPk9wcmV2ICk7CisgICAgICB9CisgICAg
ICBlU3ltID0gZS0+U3ltOworICAgICAgaWYoIGVTeW0tPk9uZXh0ID09IGVTeW0gKSB7CisJS2ls
bFZlcnRleCggZVN5bS0+T3JnLCBOVUxMICk7CisgICAgICB9IGVsc2UgeworCS8qIE1ha2Ugc3Vy
ZSB0aGF0IGVTeW0tPk9yZyBwb2ludHMgdG8gYSB2YWxpZCBoYWxmLWVkZ2UgKi8KKwllU3ltLT5P
cmctPmFuRWRnZSA9IGVTeW0tPk9uZXh0OworCVNwbGljZSggZVN5bSwgZVN5bS0+T3ByZXYgKTsK
KyAgICAgIH0KKyAgICAgIEtpbGxFZGdlKCBlICk7CisgICAgfQorICB9IHdoaWxlKCBlICE9IGVT
dGFydCApOworCisgIC8qIGRlbGV0ZSBmcm9tIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdCAq
LworICBmUHJldiA9IGZaYXAtPnByZXY7CisgIGZOZXh0ID0gZlphcC0+bmV4dDsKKyAgZk5leHQt
PnByZXYgPSBmUHJldjsKKyAgZlByZXYtPm5leHQgPSBmTmV4dDsKKworICBtZW1GcmVlKCBmWmFw
ICk7Cit9CisKKworLyogX19nbF9tZXNoTmV3TWVzaCgpIGNyZWF0ZXMgYSBuZXcgbWVzaCB3aXRo
IG5vIGVkZ2VzLCBubyB2ZXJ0aWNlcywKKyAqIGFuZCBubyBsb29wcyAod2hhdCB3ZSB1c3VhbGx5
IGNhbGwgYSAiZmFjZSIpLgorICovCitHTFVtZXNoICpfX2dsX21lc2hOZXdNZXNoKCB2b2lkICkK
K3sKKyAgR0xVdmVydGV4ICp2OworICBHTFVmYWNlICpmOworICBHTFVoYWxmRWRnZSAqZTsKKyAg
R0xVaGFsZkVkZ2UgKmVTeW07CisgIEdMVW1lc2ggKm1lc2ggPSAoR0xVbWVzaCAqKW1lbUFsbG9j
KCBzaXplb2YoIEdMVW1lc2ggKSk7CisgIGlmIChtZXNoID09IE5VTEwpIHsKKyAgICAgcmV0dXJu
IE5VTEw7CisgIH0KKyAgCisgIHYgPSAmbWVzaC0+dkhlYWQ7CisgIGYgPSAmbWVzaC0+ZkhlYWQ7
CisgIGUgPSAmbWVzaC0+ZUhlYWQ7CisgIGVTeW0gPSAmbWVzaC0+ZUhlYWRTeW07CisKKyAgdi0+
bmV4dCA9IHYtPnByZXYgPSB2OworICB2LT5hbkVkZ2UgPSBOVUxMOworICB2LT5kYXRhID0gTlVM
TDsKKworICBmLT5uZXh0ID0gZi0+cHJldiA9IGY7CisgIGYtPmFuRWRnZSA9IE5VTEw7CisgIGYt
PmRhdGEgPSBOVUxMOworICBmLT50cmFpbCA9IE5VTEw7CisgIGYtPm1hcmtlZCA9IEZBTFNFOwor
ICBmLT5pbnNpZGUgPSBGQUxTRTsKKworICBlLT5uZXh0ID0gZTsKKyAgZS0+U3ltID0gZVN5bTsK
KyAgZS0+T25leHQgPSBOVUxMOworICBlLT5MbmV4dCA9IE5VTEw7CisgIGUtPk9yZyA9IE5VTEw7
CisgIGUtPkxmYWNlID0gTlVMTDsKKyAgZS0+d2luZGluZyA9IDA7CisgIGUtPmFjdGl2ZVJlZ2lv
biA9IE5VTEw7CisKKyAgZVN5bS0+bmV4dCA9IGVTeW07CisgIGVTeW0tPlN5bSA9IGU7CisgIGVT
eW0tPk9uZXh0ID0gTlVMTDsKKyAgZVN5bS0+TG5leHQgPSBOVUxMOworICBlU3ltLT5PcmcgPSBO
VUxMOworICBlU3ltLT5MZmFjZSA9IE5VTEw7CisgIGVTeW0tPndpbmRpbmcgPSAwOworICBlU3lt
LT5hY3RpdmVSZWdpb24gPSBOVUxMOworCisgIHJldHVybiBtZXNoOworfQorCisKKy8qIF9fZ2xf
bWVzaFVuaW9uKCBtZXNoMSwgbWVzaDIgKSBmb3JtcyB0aGUgdW5pb24gb2YgYWxsIHN0cnVjdHVy
ZXMgaW4KKyAqIGJvdGggbWVzaGVzLCBhbmQgcmV0dXJucyB0aGUgbmV3IG1lc2ggKHRoZSBvbGQg
bWVzaGVzIGFyZSBkZXN0cm95ZWQpLgorICovCitHTFVtZXNoICpfX2dsX21lc2hVbmlvbiggR0xV
bWVzaCAqbWVzaDEsIEdMVW1lc2ggKm1lc2gyICkKK3sKKyAgR0xVZmFjZSAqZjEgPSAmbWVzaDEt
PmZIZWFkOworICBHTFV2ZXJ0ZXggKnYxID0gJm1lc2gxLT52SGVhZDsKKyAgR0xVaGFsZkVkZ2Ug
KmUxID0gJm1lc2gxLT5lSGVhZDsKKyAgR0xVZmFjZSAqZjIgPSAmbWVzaDItPmZIZWFkOworICBH
TFV2ZXJ0ZXggKnYyID0gJm1lc2gyLT52SGVhZDsKKyAgR0xVaGFsZkVkZ2UgKmUyID0gJm1lc2gy
LT5lSGVhZDsKKworICAvKiBBZGQgdGhlIGZhY2VzLCB2ZXJ0aWNlcywgYW5kIGVkZ2VzIG9mIG1l
c2gyIHRvIHRob3NlIG9mIG1lc2gxICovCisgIGlmKCBmMi0+bmV4dCAhPSBmMiApIHsKKyAgICBm
MS0+cHJldi0+bmV4dCA9IGYyLT5uZXh0OworICAgIGYyLT5uZXh0LT5wcmV2ID0gZjEtPnByZXY7
CisgICAgZjItPnByZXYtPm5leHQgPSBmMTsKKyAgICBmMS0+cHJldiA9IGYyLT5wcmV2OworICB9
CisKKyAgaWYoIHYyLT5uZXh0ICE9IHYyICkgeworICAgIHYxLT5wcmV2LT5uZXh0ID0gdjItPm5l
eHQ7CisgICAgdjItPm5leHQtPnByZXYgPSB2MS0+cHJldjsKKyAgICB2Mi0+cHJldi0+bmV4dCA9
IHYxOworICAgIHYxLT5wcmV2ID0gdjItPnByZXY7CisgIH0KKworICBpZiggZTItPm5leHQgIT0g
ZTIgKSB7CisgICAgZTEtPlN5bS0+bmV4dC0+U3ltLT5uZXh0ID0gZTItPm5leHQ7CisgICAgZTIt
Pm5leHQtPlN5bS0+bmV4dCA9IGUxLT5TeW0tPm5leHQ7CisgICAgZTItPlN5bS0+bmV4dC0+U3lt
LT5uZXh0ID0gZTE7CisgICAgZTEtPlN5bS0+bmV4dCA9IGUyLT5TeW0tPm5leHQ7CisgIH0KKwor
ICBtZW1GcmVlKCBtZXNoMiApOworICByZXR1cm4gbWVzaDE7Cit9CisKKworI2lmZGVmIERFTEVU
RV9CWV9aQVBQSU5HCisKKy8qIF9fZ2xfbWVzaERlbGV0ZU1lc2goIG1lc2ggKSB3aWxsIGZyZWUg
YWxsIHN0b3JhZ2UgZm9yIGFueSB2YWxpZCBtZXNoLgorICovCit2b2lkIF9fZ2xfbWVzaERlbGV0
ZU1lc2goIEdMVW1lc2ggKm1lc2ggKQoreworICBHTFVmYWNlICpmSGVhZCA9ICZtZXNoLT5mSGVh
ZDsKKworICB3aGlsZSggZkhlYWQtPm5leHQgIT0gZkhlYWQgKSB7CisgICAgX19nbF9tZXNoWmFw
RmFjZSggZkhlYWQtPm5leHQgKTsKKyAgfQorICBhc3NlcnQoIG1lc2gtPnZIZWFkLm5leHQgPT0g
Jm1lc2gtPnZIZWFkICk7CisKKyAgbWVtRnJlZSggbWVzaCApOworfQorCisjZWxzZQorCisvKiBf
X2dsX21lc2hEZWxldGVNZXNoKCBtZXNoICkgd2lsbCBmcmVlIGFsbCBzdG9yYWdlIGZvciBhbnkg
dmFsaWQgbWVzaC4KKyAqLwordm9pZCBfX2dsX21lc2hEZWxldGVNZXNoKCBHTFVtZXNoICptZXNo
ICkKK3sKKyAgR0xVZmFjZSAqZiwgKmZOZXh0OworICBHTFV2ZXJ0ZXggKnYsICp2TmV4dDsKKyAg
R0xVaGFsZkVkZ2UgKmUsICplTmV4dDsKKworICBmb3IoIGYgPSBtZXNoLT5mSGVhZC5uZXh0OyBm
ICE9ICZtZXNoLT5mSGVhZDsgZiA9IGZOZXh0ICkgeworICAgIGZOZXh0ID0gZi0+bmV4dDsKKyAg
ICBtZW1GcmVlKCBmICk7CisgIH0KKworICBmb3IoIHYgPSBtZXNoLT52SGVhZC5uZXh0OyB2ICE9
ICZtZXNoLT52SGVhZDsgdiA9IHZOZXh0ICkgeworICAgIHZOZXh0ID0gdi0+bmV4dDsKKyAgICBt
ZW1GcmVlKCB2ICk7CisgIH0KKworICBmb3IoIGUgPSBtZXNoLT5lSGVhZC5uZXh0OyBlICE9ICZt
ZXNoLT5lSGVhZDsgZSA9IGVOZXh0ICkgeworICAgIC8qIE9uZSBjYWxsIGZyZWVzIGJvdGggZSBh
bmQgZS0+U3ltIChzZWUgRWRnZVBhaXIgYWJvdmUpICovCisgICAgZU5leHQgPSBlLT5uZXh0Owor
ICAgIG1lbUZyZWUoIGUgKTsKKyAgfQorCisgIG1lbUZyZWUoIG1lc2ggKTsKK30KKworI2VuZGlm
CisKKyNpZm5kZWYgTkRFQlVHCisKKy8qIF9fZ2xfbWVzaENoZWNrTWVzaCggbWVzaCApIGNoZWNr
cyBhIG1lc2ggZm9yIHNlbGYtY29uc2lzdGVuY3kuCisgKi8KK3ZvaWQgX19nbF9tZXNoQ2hlY2tN
ZXNoKCBHTFVtZXNoICptZXNoICkKK3sKKyAgR0xVZmFjZSAqZkhlYWQgPSAmbWVzaC0+ZkhlYWQ7
CisgIEdMVXZlcnRleCAqdkhlYWQgPSAmbWVzaC0+dkhlYWQ7CisgIEdMVWhhbGZFZGdlICplSGVh
ZCA9ICZtZXNoLT5lSGVhZDsKKyAgR0xVZmFjZSAqZiwgKmZQcmV2OworICBHTFV2ZXJ0ZXggKnYs
ICp2UHJldjsKKyAgR0xVaGFsZkVkZ2UgKmUsICplUHJldjsKKworICBmUHJldiA9IGZIZWFkOwor
ICBmb3IoIGZQcmV2ID0gZkhlYWQgOyAoZiA9IGZQcmV2LT5uZXh0KSAhPSBmSGVhZDsgZlByZXYg
PSBmKSB7CisgICAgYXNzZXJ0KCBmLT5wcmV2ID09IGZQcmV2ICk7CisgICAgZSA9IGYtPmFuRWRn
ZTsKKyAgICBkbyB7CisgICAgICBhc3NlcnQoIGUtPlN5bSAhPSBlICk7CisgICAgICBhc3NlcnQo
IGUtPlN5bS0+U3ltID09IGUgKTsKKyAgICAgIGFzc2VydCggZS0+TG5leHQtPk9uZXh0LT5TeW0g
PT0gZSApOworICAgICAgYXNzZXJ0KCBlLT5PbmV4dC0+U3ltLT5MbmV4dCA9PSBlICk7CisgICAg
ICBhc3NlcnQoIGUtPkxmYWNlID09IGYgKTsKKyAgICAgIGUgPSBlLT5MbmV4dDsKKyAgICB9IHdo
aWxlKCBlICE9IGYtPmFuRWRnZSApOworICB9CisgIGFzc2VydCggZi0+cHJldiA9PSBmUHJldiAm
JiBmLT5hbkVkZ2UgPT0gTlVMTCAmJiBmLT5kYXRhID09IE5VTEwgKTsKKworICB2UHJldiA9IHZI
ZWFkOworICBmb3IoIHZQcmV2ID0gdkhlYWQgOyAodiA9IHZQcmV2LT5uZXh0KSAhPSB2SGVhZDsg
dlByZXYgPSB2KSB7CisgICAgYXNzZXJ0KCB2LT5wcmV2ID09IHZQcmV2ICk7CisgICAgZSA9IHYt
PmFuRWRnZTsKKyAgICBkbyB7CisgICAgICBhc3NlcnQoIGUtPlN5bSAhPSBlICk7CisgICAgICBh
c3NlcnQoIGUtPlN5bS0+U3ltID09IGUgKTsKKyAgICAgIGFzc2VydCggZS0+TG5leHQtPk9uZXh0
LT5TeW0gPT0gZSApOworICAgICAgYXNzZXJ0KCBlLT5PbmV4dC0+U3ltLT5MbmV4dCA9PSBlICk7
CisgICAgICBhc3NlcnQoIGUtPk9yZyA9PSB2ICk7CisgICAgICBlID0gZS0+T25leHQ7CisgICAg
fSB3aGlsZSggZSAhPSB2LT5hbkVkZ2UgKTsKKyAgfQorICBhc3NlcnQoIHYtPnByZXYgPT0gdlBy
ZXYgJiYgdi0+YW5FZGdlID09IE5VTEwgJiYgdi0+ZGF0YSA9PSBOVUxMICk7CisKKyAgZVByZXYg
PSBlSGVhZDsKKyAgZm9yKCBlUHJldiA9IGVIZWFkIDsgKGUgPSBlUHJldi0+bmV4dCkgIT0gZUhl
YWQ7IGVQcmV2ID0gZSkgeworICAgIGFzc2VydCggZS0+U3ltLT5uZXh0ID09IGVQcmV2LT5TeW0g
KTsKKyAgICBhc3NlcnQoIGUtPlN5bSAhPSBlICk7CisgICAgYXNzZXJ0KCBlLT5TeW0tPlN5bSA9
PSBlICk7CisgICAgYXNzZXJ0KCBlLT5PcmcgIT0gTlVMTCApOworICAgIGFzc2VydCggZS0+RHN0
ICE9IE5VTEwgKTsKKyAgICBhc3NlcnQoIGUtPkxuZXh0LT5PbmV4dC0+U3ltID09IGUgKTsKKyAg
ICBhc3NlcnQoIGUtPk9uZXh0LT5TeW0tPkxuZXh0ID09IGUgKTsKKyAgfQorICBhc3NlcnQoIGUt
PlN5bS0+bmV4dCA9PSBlUHJldi0+U3ltCisgICAgICAgJiYgZS0+U3ltID09ICZtZXNoLT5lSGVh
ZFN5bQorICAgICAgICYmIGUtPlN5bS0+U3ltID09IGUKKyAgICAgICAmJiBlLT5PcmcgPT0gTlVM
TCAmJiBlLT5Ec3QgPT0gTlVMTAorICAgICAgICYmIGUtPkxmYWNlID09IE5VTEwgJiYgZS0+UmZh
Y2UgPT0gTlVMTCApOworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9tZXNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0
ZXNzL21lc2guaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy9tZXNoLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjczIEBACisvKgorKiogTGljZW5zZSBB
cHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUg
YXJlCisqKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0
ZWQgaW4gdGhlIFNHSSBGcmVlCisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0
aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qg
b25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisq
KiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1h
eSBvYnRhaW4gYSBjb3B5CisqKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJ
bmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXks
IE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRwOi8vb3Nz
LnNnaS5jb20vcHJvamVjdHMvRnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBp
biB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMg
SVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENP
TkRJVElPTlMKKyoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBB
TlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJ
VFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBV
UlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUg
T3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNp
b24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29u
IEdyYXBoaWNzLAorKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5
OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRp
b25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVy
ZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNl
IFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBl
c3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBh
cmUgVGhlCisqKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZl
cnNpb24gMS4yLjEpLCByZWxlYXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBH
cmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNl
ZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoq
IFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5
OC4gVGhpcyBzb2Z0d2FyZQorKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJz
aW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0
IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlh
bnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisq
LworLyoKKyoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICREYXRlJCAk
UmV2aXNpb24kCisqKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9t
ZXNoLmgjNSAkCisqLworCisjaWZuZGVmIF9fbWVzaF9oXworI2RlZmluZSBfX21lc2hfaF8KKwor
I2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2ludGVybmFsX2dsdS5oIgorCit0eXBlZGVmIHN0cnVj
dCBHTFVtZXNoIEdMVW1lc2g7IAorCit0eXBlZGVmIHN0cnVjdCBHTFV2ZXJ0ZXggR0xVdmVydGV4
OwordHlwZWRlZiBzdHJ1Y3QgR0xVZmFjZSBHTFVmYWNlOwordHlwZWRlZiBzdHJ1Y3QgR0xVaGFs
ZkVkZ2UgR0xVaGFsZkVkZ2U7CisKK3R5cGVkZWYgc3RydWN0IEFjdGl2ZVJlZ2lvbiBBY3RpdmVS
ZWdpb247CS8qIEludGVybmFsIGRhdGEgKi8KKworLyogVGhlIG1lc2ggc3RydWN0dXJlIGlzIHNp
bWlsYXIgaW4gc3Bpcml0LCBub3RhdGlvbiwgYW5kIG9wZXJhdGlvbnMKKyAqIHRvIHRoZSAicXVh
ZC1lZGdlIiBzdHJ1Y3R1cmUgKHNlZSBMLiBHdWliYXMgYW5kIEouIFN0b2xmaSwgUHJpbWl0aXZl
cworICogZm9yIHRoZSBtYW5pcHVsYXRpb24gb2YgZ2VuZXJhbCBzdWJkaXZpc2lvbnMgYW5kIHRo
ZSBjb21wdXRhdGlvbiBvZgorICogVm9yb25vaSBkaWFncmFtcywgQUNNIFRyYW5zYWN0aW9ucyBv
biBHcmFwaGljcywgNCgyKTo3NC0xMjMsIEFwcmlsIDE5ODUpLgorICogRm9yIGEgc2ltcGxpZmll
ZCBkZXNjcmlwdGlvbiwgc2VlIHRoZSBjb3Vyc2Ugbm90ZXMgZm9yIENTMzQ4YSwKKyAqICJNYXRo
ZW1hdGljYWwgRm91bmRhdGlvbnMgb2YgQ29tcHV0ZXIgR3JhcGhpY3MiLCBhdmFpbGFibGUgYXQg
dGhlCisgKiBTdGFuZm9yZCBib29rc3RvcmUgKGFuZCB0YXVnaHQgZHVyaW5nIHRoZSBmYWxsIHF1
YXJ0ZXIpLgorICogVGhlIGltcGxlbWVudGF0aW9uIGFsc28gYm9ycm93cyBhIHRpbnkgc3Vic2V0
IG9mIHRoZSBncmFwaC1iYXNlZCBhcHByb2FjaAorICogdXNlIGluIE1hbnR5bGEncyBHZW9tZXRy
aWMgV29yayBCZW5jaCAoc2VlIE0uIE1hbnR5bGEsIEFuIEludHJvZHVjdGlvbgorICogdG8gU29s
ZCBNb2RlbGluZywgQ29tcHV0ZXIgU2NpZW5jZSBQcmVzcywgUm9ja3ZpbGxlLCBNYXJ5bGFuZCwg
MTk4OCkuCisgKgorICogVGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlIGlzIHRoZSAiaGFs
Zi1lZGdlIi4gIFR3byBoYWxmLWVkZ2VzCisgKiBnbyB0b2dldGhlciB0byBtYWtlIGFuIGVkZ2Us
IGJ1dCB0aGV5IHBvaW50IGluIG9wcG9zaXRlIGRpcmVjdGlvbnMuCisgKiBFYWNoIGhhbGYtZWRn
ZSBoYXMgYSBwb2ludGVyIHRvIGl0cyBtYXRlICh0aGUgInN5bW1ldHJpYyIgaGFsZi1lZGdlIFN5
bSksCisgKiBpdHMgb3JpZ2luIHZlcnRleCAoT3JnKSwgdGhlIGZhY2Ugb24gaXRzIGxlZnQgc2lk
ZSAoTGZhY2UpLCBhbmQgdGhlCisgKiBhZGphY2VudCBoYWxmLWVkZ2VzIGluIHRoZSBDQ1cgZGly
ZWN0aW9uIGFyb3VuZCB0aGUgb3JpZ2luIHZlcnRleAorICogKE9uZXh0KSBhbmQgYXJvdW5kIHRo
ZSBsZWZ0IGZhY2UgKExuZXh0KS4gIFRoZXJlIGlzIGFsc28gYSAibmV4dCIKKyAqIHBvaW50ZXIg
Zm9yIHRoZSBnbG9iYWwgZWRnZSBsaXN0IChzZWUgYmVsb3cpLgorICoKKyAqIFRoZSBub3RhdGlv
biB1c2VkIGZvciBtZXNoIG5hdmlnYXRpb246CisgKglTeW0gICA9IHRoZSBtYXRlIG9mIGEgaGFs
Zi1lZGdlIChzYW1lIGVkZ2UsIGJ1dCBvcHBvc2l0ZSBkaXJlY3Rpb24pCisgKglPbmV4dCA9IGVk
Z2UgQ0NXIGFyb3VuZCBvcmlnaW4gdmVydGV4IChrZWVwIHNhbWUgb3JpZ2luKQorICoJRG5leHQg
PSBlZGdlIENDVyBhcm91bmQgZGVzdGluYXRpb24gdmVydGV4IChrZWVwIHNhbWUgZGVzdCkKKyAq
CUxuZXh0ID0gZWRnZSBDQ1cgYXJvdW5kIGxlZnQgZmFjZSAoZGVzdCBiZWNvbWVzIG5ldyBvcmln
aW4pCisgKglSbmV4dCA9IGVkZ2UgQ0NXIGFyb3VuZCByaWdodCBmYWNlIChvcmlnaW4gYmVjb21l
cyBuZXcgZGVzdCkKKyAqCisgKiAicHJldiIgbWVhbnMgdG8gc3Vic3RpdHV0ZSBDVyBmb3IgQ0NX
IGluIHRoZSBkZWZpbml0aW9ucyBhYm92ZS4KKyAqCisgKiBUaGUgbWVzaCBrZWVwcyBnbG9iYWwg
bGlzdHMgb2YgYWxsIHZlcnRpY2VzLCBmYWNlcywgYW5kIGVkZ2VzLAorICogc3RvcmVkIGFzIGRv
dWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdHMgd2l0aCBhIGR1bW15IGhlYWRlciBub2RlLgorICog
VGhlIG1lc2ggc3RvcmVzIHBvaW50ZXJzIHRvIHRoZXNlIGR1bW15IGhlYWRlcnMgKHZIZWFkLCBm
SGVhZCwgZUhlYWQpLgorICoKKyAqIFRoZSBjaXJjdWxhciBlZGdlIGxpc3QgaXMgc3BlY2lhbDsg
c2luY2UgaGFsZi1lZGdlcyBhbHdheXMgb2NjdXIKKyAqIGluIHBhaXJzIChlIGFuZCBlLT5TeW0p
LCBlYWNoIGhhbGYtZWRnZSBzdG9yZXMgYSBwb2ludGVyIGluIG9ubHkKKyAqIG9uZSBkaXJlY3Rp
b24uICBTdGFydGluZyBhdCBlSGVhZCBhbmQgZm9sbG93aW5nIHRoZSBlLT5uZXh0IHBvaW50ZXJz
CisgKiB3aWxsIHZpc2l0IGVhY2ggKmVkZ2UqIG9uY2UgKGllLiBlIG9yIGUtPlN5bSwgYnV0IG5v
dCBib3RoKS4KKyAqIGUtPlN5bSBzdG9yZXMgYSBwb2ludGVyIGluIHRoZSBvcHBvc2l0ZSBkaXJl
Y3Rpb24sIHRodXMgaXQgaXMKKyAqIGFsd2F5cyB0cnVlIHRoYXQgZS0+U3ltLT5uZXh0LT5TeW0t
Pm5leHQgPT0gZS4KKyAqCisgKiBFYWNoIHZlcnRleCBoYXMgYSBwb2ludGVyIHRvIG5leHQgYW5k
IHByZXZpb3VzIHZlcnRpY2VzIGluIHRoZQorICogY2lyY3VsYXIgbGlzdCwgYW5kIGEgcG9pbnRl
ciB0byBhIGhhbGYtZWRnZSB3aXRoIHRoaXMgdmVydGV4IGFzCisgKiB0aGUgb3JpZ2luIChOVUxM
IGlmIHRoaXMgaXMgdGhlIGR1bW15IGhlYWRlcikuICBUaGVyZSBpcyBhbHNvIGEKKyAqIGZpZWxk
ICJkYXRhIiBmb3IgY2xpZW50IGRhdGEuCisgKgorICogRWFjaCBmYWNlIGhhcyBhIHBvaW50ZXIg
dG8gdGhlIG5leHQgYW5kIHByZXZpb3VzIGZhY2VzIGluIHRoZQorICogY2lyY3VsYXIgbGlzdCwg
YW5kIGEgcG9pbnRlciB0byBhIGhhbGYtZWRnZSB3aXRoIHRoaXMgZmFjZSBhcworICogdGhlIGxl
ZnQgZmFjZSAoTlVMTCBpZiB0aGlzIGlzIHRoZSBkdW1teSBoZWFkZXIpLiAgVGhlcmUgaXMgYWxz
bworICogYSBmaWVsZCAiZGF0YSIgZm9yIGNsaWVudCBkYXRhLgorICoKKyAqIE5vdGUgdGhhdCB3
aGF0IHdlIGNhbGwgYSAiZmFjZSIgaXMgcmVhbGx5IGEgbG9vcDsgZmFjZXMgbWF5IGNvbnNpc3QK
KyAqIG9mIG1vcmUgdGhhbiBvbmUgbG9vcCAoaWUuIG5vdCBzaW1wbHkgY29ubmVjdGVkKSwgYnV0
IHRoZXJlIGlzIG5vCisgKiByZWNvcmQgb2YgdGhpcyBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICBU
aGUgbWVzaCBtYXkgY29uc2lzdCBvZgorICogc2V2ZXJhbCBkaXNjb25uZWN0ZWQgcmVnaW9ucywg
c28gaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byB2aXNpdAorICogdGhlIGVudGlyZSBtZXNoIGJ5
IHN0YXJ0aW5nIGF0IGEgaGFsZi1lZGdlIGFuZCB0cmF2ZXJzaW5nIHRoZSBlZGdlCisgKiBzdHJ1
Y3R1cmUuCisgKgorICogVGhlIG1lc2ggZG9lcyBOT1Qgc3VwcG9ydCBpc29sYXRlZCB2ZXJ0aWNl
czsgYSB2ZXJ0ZXggaXMgZGVsZXRlZCBhbG9uZworICogd2l0aCBpdHMgbGFzdCBlZGdlLiAgU2lt
aWxhcmx5IHdoZW4gdHdvIGZhY2VzIGFyZSBtZXJnZWQsIG9uZSBvZiB0aGUKKyAqIGZhY2VzIGlz
IGRlbGV0ZWQgKHNlZSBfX2dsX21lc2hEZWxldGUgYmVsb3cpLiAgRm9yIG1lc2ggb3BlcmF0aW9u
cywKKyAqIGFsbCBmYWNlIChsb29wKSBhbmQgdmVydGV4IHBvaW50ZXJzIG11c3Qgbm90IGJlIE5V
TEwuICBIb3dldmVyLCBvbmNlCisgKiBtZXNoIG1hbmlwdWxhdGlvbiBpcyBmaW5pc2hlZCwgX19n
bF9NZXNoWmFwRmFjZSBjYW4gYmUgdXNlZCB0byBkZWxldGUKKyAqIGZhY2VzIG9mIHRoZSBtZXNo
LCBvbmUgYXQgYSB0aW1lLiAgQWxsIGV4dGVybmFsIGZhY2VzIGNhbiBiZSAiemFwcGVkIgorICog
YmVmb3JlIHRoZSBtZXNoIGlzIHJldHVybmVkIHRvIHRoZSBjbGllbnQ7IHRoZW4gYSBOVUxMIGZh
Y2UgaW5kaWNhdGVzCisgKiBhIHJlZ2lvbiB3aGljaCBpcyBub3QgcGFydCBvZiB0aGUgb3V0cHV0
IHBvbHlnb24uCisgKi8KKworc3RydWN0IEdMVXZlcnRleCB7CisgIEdMVXZlcnRleAkqbmV4dDsJ
CS8qIG5leHQgdmVydGV4IChuZXZlciBOVUxMKSAqLworICBHTFV2ZXJ0ZXgJKnByZXY7CQkvKiBw
cmV2aW91cyB2ZXJ0ZXggKG5ldmVyIE5VTEwpICovCisgIEdMVWhhbGZFZGdlCSphbkVkZ2U7CS8q
IGEgaGFsZi1lZGdlIHdpdGggdGhpcyBvcmlnaW4gKi8KKyAgdm9pZAkJKmRhdGE7CQkvKiBjbGll
bnQncyBkYXRhICovCisKKyAgLyogSW50ZXJuYWwgZGF0YSAoa2VlcCBoaWRkZW4pICovCisgIEdM
ZG91YmxlCWNvb3Jkc1szXTsJLyogdmVydGV4IGxvY2F0aW9uIGluIDNEICovCisgIEdMZG91Ymxl
CXMsIHQ7CQkvKiBwcm9qZWN0aW9uIG9udG8gdGhlIHN3ZWVwIHBsYW5lICovCisgIGxvbmcJCXBx
SGFuZGxlOwkvKiB0byBhbGxvdyBkZWxldGlvbiBmcm9tIHByaW9yaXR5IHF1ZXVlICovCit9Owor
CitzdHJ1Y3QgR0xVZmFjZSB7CisgIEdMVWZhY2UJKm5leHQ7CQkvKiBuZXh0IGZhY2UgKG5ldmVy
IE5VTEwpICovCisgIEdMVWZhY2UJKnByZXY7CQkvKiBwcmV2aW91cyBmYWNlIChuZXZlciBOVUxM
KSAqLworICBHTFVoYWxmRWRnZQkqYW5FZGdlOwkvKiBhIGhhbGYgZWRnZSB3aXRoIHRoaXMgbGVm
dCBmYWNlICovCisgIHZvaWQJCSpkYXRhOwkJLyogcm9vbSBmb3IgY2xpZW50J3MgZGF0YSAqLwor
CisgIC8qIEludGVybmFsIGRhdGEgKGtlZXAgaGlkZGVuKSAqLworICBHTFVmYWNlCSp0cmFpbDsJ
CS8qICJzdGFjayIgZm9yIGNvbnZlcnNpb24gdG8gc3RyaXBzICovCisgIEdMYm9vbGVhbgltYXJr
ZWQ7CQkvKiBmbGFnIGZvciBjb252ZXJzaW9uIHRvIHN0cmlwcyAqLworICBHTGJvb2xlYW4JaW5z
aWRlOwkJLyogdGhpcyBmYWNlIGlzIGluIHRoZSBwb2x5Z29uIGludGVyaW9yICovCit9OworCitz
dHJ1Y3QgR0xVaGFsZkVkZ2UgeworICBHTFVoYWxmRWRnZQkqbmV4dDsJCS8qIGRvdWJseS1saW5r
ZWQgbGlzdCAocHJldj09U3ltLT5uZXh0KSAqLworICBHTFVoYWxmRWRnZQkqU3ltOwkJLyogc2Ft
ZSBlZGdlLCBvcHBvc2l0ZSBkaXJlY3Rpb24gKi8KKyAgR0xVaGFsZkVkZ2UJKk9uZXh0OwkJLyog
bmV4dCBlZGdlIENDVyBhcm91bmQgb3JpZ2luICovCisgIEdMVWhhbGZFZGdlCSpMbmV4dDsJCS8q
IG5leHQgZWRnZSBDQ1cgYXJvdW5kIGxlZnQgZmFjZSAqLworICBHTFV2ZXJ0ZXgJKk9yZzsJCS8q
IG9yaWdpbiB2ZXJ0ZXggKE92ZXJ0ZXggdG9vIGxvbmcpICovCisgIEdMVWZhY2UJKkxmYWNlOwkJ
LyogbGVmdCBmYWNlICovCisKKyAgLyogSW50ZXJuYWwgZGF0YSAoa2VlcCBoaWRkZW4pICovCisg
IEFjdGl2ZVJlZ2lvbgkqYWN0aXZlUmVnaW9uOwkvKiBhIHJlZ2lvbiB3aXRoIHRoaXMgdXBwZXIg
ZWRnZSAoc3dlZXAuYykgKi8KKyAgaW50CQl3aW5kaW5nOwkvKiBjaGFuZ2UgaW4gd2luZGluZyBu
dW1iZXIgd2hlbiBjcm9zc2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cm9tIHRoZSByaWdodCBmYWNlIHRvIHRoZSBsZWZ0IGZhY2UgKi8KK307CisKKyNkZWZpbmUJUmZh
Y2UJU3ltLT5MZmFjZQorI2RlZmluZSBEc3QJU3ltLT5PcmcKKworI2RlZmluZSBPcHJldglTeW0t
PkxuZXh0CisjZGVmaW5lIExwcmV2ICAgT25leHQtPlN5bQorI2RlZmluZSBEcHJldglMbmV4dC0+
U3ltCisjZGVmaW5lIFJwcmV2CVN5bS0+T25leHQKKyNkZWZpbmUgRG5leHQJUnByZXYtPlN5bQkv
KiAzIHBvaW50ZXJzICovCisjZGVmaW5lIFJuZXh0CU9wcmV2LT5TeW0JLyogMyBwb2ludGVycyAq
LworCisKK3N0cnVjdCBHTFVtZXNoIHsKKyAgR0xVdmVydGV4CXZIZWFkOwkJLyogZHVtbXkgaGVh
ZGVyIGZvciB2ZXJ0ZXggbGlzdCAqLworICBHTFVmYWNlCWZIZWFkOwkJLyogZHVtbXkgaGVhZGVy
IGZvciBmYWNlIGxpc3QgKi8KKyAgR0xVaGFsZkVkZ2UJZUhlYWQ7CQkvKiBkdW1teSBoZWFkZXIg
Zm9yIGVkZ2UgbGlzdCAqLworICBHTFVoYWxmRWRnZQllSGVhZFN5bTsJLyogYW5kIGl0cyBzeW1t
ZXRyaWMgY291bnRlcnBhcnQgKi8KK307CisKKy8qIFRoZSBtZXNoIG9wZXJhdGlvbnMgYmVsb3cg
aGF2ZSB0aHJlZSBtb3RpdmF0aW9uczogY29tcGxldGVuZXNzLAorICogY29udmVuaWVuY2UsIGFu
ZCBlZmZpY2llbmN5LiAgVGhlIGJhc2ljIG1lc2ggb3BlcmF0aW9ucyBhcmUgTWFrZUVkZ2UsCisg
KiBTcGxpY2UsIGFuZCBEZWxldGUuICBBbGwgdGhlIG90aGVyIGVkZ2Ugb3BlcmF0aW9ucyBjYW4g
YmUgaW1wbGVtZW50ZWQKKyAqIGluIHRlcm1zIG9mIHRoZXNlLiAgVGhlIG90aGVyIG9wZXJhdGlv
bnMgYXJlIHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZQorICogYW5kL29yIGVmZmljaWVuY3kuCisg
KgorICogV2hlbiBhIGZhY2UgaXMgc3BsaXQgb3IgYSB2ZXJ0ZXggaXMgYWRkZWQsIHRoZXkgYXJl
IGluc2VydGVkIGludG8gdGhlCisgKiBnbG9iYWwgbGlzdCAqYmVmb3JlKiB0aGUgZXhpc3Rpbmcg
dmVydGV4IG9yIGZhY2UgKGllLiBlLT5Pcmcgb3IgZS0+TGZhY2UpLgorICogVGhpcyBtYWtlcyBp
dCBlYXNpZXIgdG8gcHJvY2VzcyBhbGwgdmVydGljZXMgb3IgZmFjZXMgaW4gdGhlIGdsb2JhbCBs
aXN0cworICogd2l0aG91dCB3b3JyeWluZyBhYm91dCBwcm9jZXNzaW5nIHRoZSBzYW1lIGRhdGEg
dHdpY2UuICBBcyBhIGNvbnZlbmllbmNlLAorICogd2hlbiBhIGZhY2UgaXMgc3BsaXQsIHRoZSAi
aW5zaWRlIiBmbGFnIGlzIGNvcGllZCBmcm9tIHRoZSBvbGQgZmFjZS4KKyAqIE90aGVyIGludGVy
bmFsIGRhdGEgKHYtPmRhdGEsIHYtPmFjdGl2ZVJlZ2lvbiwgZi0+ZGF0YSwgZi0+bWFya2VkLAor
ICogZi0+dHJhaWwsIGUtPndpbmRpbmcpIGlzIHNldCB0byB6ZXJvLgorICoKKyAqICoqKioqKioq
KioqKioqKioqKioqKiogQmFzaWMgRWRnZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioq
KioqKioqCisgKgorICogX19nbF9tZXNoTWFrZUVkZ2UoIG1lc2ggKSBjcmVhdGVzIG9uZSBlZGdl
LCB0d28gdmVydGljZXMsIGFuZCBhIGxvb3AuCisgKiBUaGUgbG9vcCAoZmFjZSkgY29uc2lzdHMg
b2YgdGhlIHR3byBuZXcgaGFsZi1lZGdlcy4KKyAqCisgKiBfX2dsX21lc2hTcGxpY2UoIGVPcmcs
IGVEc3QgKSBpcyB0aGUgYmFzaWMgb3BlcmF0aW9uIGZvciBjaGFuZ2luZyB0aGUKKyAqIG1lc2gg
Y29ubmVjdGl2aXR5IGFuZCB0b3BvbG9neS4gIEl0IGNoYW5nZXMgdGhlIG1lc2ggc28gdGhhdAor
ICoJZU9yZy0+T25leHQgPC0gT0xEKCBlRHN0LT5PbmV4dCApCisgKgllRHN0LT5PbmV4dCA8LSBP
TEQoIGVPcmctPk9uZXh0ICkKKyAqIHdoZXJlIE9MRCguLi4pIG1lYW5zIHRoZSB2YWx1ZSBiZWZv
cmUgdGhlIG1lc2hTcGxpY2Ugb3BlcmF0aW9uLgorICoKKyAqIFRoaXMgY2FuIGhhdmUgdHdvIGVm
ZmVjdHMgb24gdGhlIHZlcnRleCBzdHJ1Y3R1cmU6CisgKiAgLSBpZiBlT3JnLT5PcmcgIT0gZURz
dC0+T3JnLCB0aGUgdHdvIHZlcnRpY2VzIGFyZSBtZXJnZWQgdG9nZXRoZXIKKyAqICAtIGlmIGVP
cmctPk9yZyA9PSBlRHN0LT5PcmcsIHRoZSBvcmlnaW4gaXMgc3BsaXQgaW50byB0d28gdmVydGlj
ZXMKKyAqIEluIGJvdGggY2FzZXMsIGVEc3QtPk9yZyBpcyBjaGFuZ2VkIGFuZCBlT3JnLT5Pcmcg
aXMgdW50b3VjaGVkLgorICoKKyAqIFNpbWlsYXJseSAoYW5kIGluZGVwZW5kZW50bHkpIGZvciB0
aGUgZmFjZSBzdHJ1Y3R1cmUsCisgKiAgLSBpZiBlT3JnLT5MZmFjZSA9PSBlRHN0LT5MZmFjZSwg
b25lIGxvb3AgaXMgc3BsaXQgaW50byB0d28KKyAqICAtIGlmIGVPcmctPkxmYWNlICE9IGVEc3Qt
PkxmYWNlLCB0d28gZGlzdGluY3QgbG9vcHMgYXJlIGpvaW5lZCBpbnRvIG9uZQorICogSW4gYm90
aCBjYXNlcywgZURzdC0+TGZhY2UgaXMgY2hhbmdlZCBhbmQgZU9yZy0+TGZhY2UgaXMgdW5hZmZl
Y3RlZC4KKyAqCisgKiBfX2dsX21lc2hEZWxldGUoIGVEZWwgKSByZW1vdmVzIHRoZSBlZGdlIGVE
ZWwuICBUaGVyZSBhcmUgc2V2ZXJhbCBjYXNlczoKKyAqIGlmIChlRGVsLT5MZmFjZSAhPSBlRGVs
LT5SZmFjZSksIHdlIGpvaW4gdHdvIGxvb3BzIGludG8gb25lOyB0aGUgbG9vcAorICogZURlbC0+
TGZhY2UgaXMgZGVsZXRlZC4gIE90aGVyd2lzZSwgd2UgYXJlIHNwbGl0dGluZyBvbmUgbG9vcCBp
bnRvIHR3bzsKKyAqIHRoZSBuZXdseSBjcmVhdGVkIGxvb3Agd2lsbCBjb250YWluIGVEZWwtPkRz
dC4gIElmIHRoZSBkZWxldGlvbiBvZiBlRGVsCisgKiB3b3VsZCBjcmVhdGUgaXNvbGF0ZWQgdmVy
dGljZXMsIHRob3NlIGFyZSBkZWxldGVkIGFzIHdlbGwuCisgKgorICogKioqKioqKioqKioqKioq
KioqKioqKiBPdGhlciBFZGdlIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioK
KyAqCisgKiBfX2dsX21lc2hBZGRFZGdlVmVydGV4KCBlT3JnICkgY3JlYXRlcyBhIG5ldyBlZGdl
IGVOZXcgc3VjaCB0aGF0CisgKiBlTmV3ID09IGVPcmctPkxuZXh0LCBhbmQgZU5ldy0+RHN0IGlz
IGEgbmV3bHkgY3JlYXRlZCB2ZXJ0ZXguCisgKiBlT3JnIGFuZCBlTmV3IHdpbGwgaGF2ZSB0aGUg
c2FtZSBsZWZ0IGZhY2UuCisgKgorICogX19nbF9tZXNoU3BsaXRFZGdlKCBlT3JnICkgc3BsaXRz
IGVPcmcgaW50byB0d28gZWRnZXMgZU9yZyBhbmQgZU5ldywKKyAqIHN1Y2ggdGhhdCBlTmV3ID09
IGVPcmctPkxuZXh0LiAgVGhlIG5ldyB2ZXJ0ZXggaXMgZU9yZy0+RHN0ID09IGVOZXctPk9yZy4K
KyAqIGVPcmcgYW5kIGVOZXcgd2lsbCBoYXZlIHRoZSBzYW1lIGxlZnQgZmFjZS4KKyAqCisgKiBf
X2dsX21lc2hDb25uZWN0KCBlT3JnLCBlRHN0ICkgY3JlYXRlcyBhIG5ldyBlZGdlIGZyb20gZU9y
Zy0+RHN0CisgKiB0byBlRHN0LT5PcmcsIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGhh
bGYtZWRnZSBlTmV3LgorICogSWYgZU9yZy0+TGZhY2UgPT0gZURzdC0+TGZhY2UsIHRoaXMgc3Bs
aXRzIG9uZSBsb29wIGludG8gdHdvLAorICogYW5kIHRoZSBuZXdseSBjcmVhdGVkIGxvb3AgaXMg
ZU5ldy0+TGZhY2UuICBPdGhlcndpc2UsIHR3byBkaXNqb2ludAorICogbG9vcHMgYXJlIG1lcmdl
ZCBpbnRvIG9uZSwgYW5kIHRoZSBsb29wIGVEc3QtPkxmYWNlIGlzIGRlc3Ryb3llZC4KKyAqCisg
KiAqKioqKioqKioqKioqKioqKioqKioqKiogT3RoZXIgT3BlcmF0aW9ucyAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgorICoKKyAqIF9fZ2xfbWVzaE5ld01lc2goKSBjcmVhdGVzIGEgbmV3
IG1lc2ggd2l0aCBubyBlZGdlcywgbm8gdmVydGljZXMsCisgKiBhbmQgbm8gbG9vcHMgKHdoYXQg
d2UgdXN1YWxseSBjYWxsIGEgImZhY2UiKS4KKyAqCisgKiBfX2dsX21lc2hVbmlvbiggbWVzaDEs
IG1lc2gyICkgZm9ybXMgdGhlIHVuaW9uIG9mIGFsbCBzdHJ1Y3R1cmVzIGluCisgKiBib3RoIG1l
c2hlcywgYW5kIHJldHVybnMgdGhlIG5ldyBtZXNoICh0aGUgb2xkIG1lc2hlcyBhcmUgZGVzdHJv
eWVkKS4KKyAqCisgKiBfX2dsX21lc2hEZWxldGVNZXNoKCBtZXNoICkgd2lsbCBmcmVlIGFsbCBz
dG9yYWdlIGZvciBhbnkgdmFsaWQgbWVzaC4KKyAqCisgKiBfX2dsX21lc2haYXBGYWNlKCBmWmFw
ICkgZGVzdHJveXMgYSBmYWNlIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlCisgKiBnbG9iYWwgZmFj
ZSBsaXN0LiAgQWxsIGVkZ2VzIG9mIGZaYXAgd2lsbCBoYXZlIGEgTlVMTCBwb2ludGVyIGFzIHRo
ZWlyCisgKiBsZWZ0IGZhY2UuICBBbnkgZWRnZXMgd2hpY2ggYWxzbyBoYXZlIGEgTlVMTCBwb2lu
dGVyIGFzIHRoZWlyIHJpZ2h0IGZhY2UKKyAqIGFyZSBkZWxldGVkIGVudGlyZWx5IChhbG9uZyB3
aXRoIGFueSBpc29sYXRlZCB2ZXJ0aWNlcyB0aGlzIHByb2R1Y2VzKS4KKyAqIEFuIGVudGlyZSBt
ZXNoIGNhbiBiZSBkZWxldGVkIGJ5IHphcHBpbmcgaXRzIGZhY2VzLCBvbmUgYXQgYSB0aW1lLAor
ICogaW4gYW55IG9yZGVyLiAgWmFwcGVkIGZhY2VzIGNhbm5vdCBiZSB1c2VkIGluIGZ1cnRoZXIg
bWVzaCBvcGVyYXRpb25zIQorICoKKyAqIF9fZ2xfbWVzaENoZWNrTWVzaCggbWVzaCApIGNoZWNr
cyBhIG1lc2ggZm9yIHNlbGYtY29uc2lzdGVuY3kuCisgKi8KKworR0xVaGFsZkVkZ2UJKl9fZ2xf
bWVzaE1ha2VFZGdlKCBHTFVtZXNoICptZXNoICk7CitpbnQJCV9fZ2xfbWVzaFNwbGljZSggR0xV
aGFsZkVkZ2UgKmVPcmcsIEdMVWhhbGZFZGdlICplRHN0ICk7CitpbnQJCV9fZ2xfbWVzaERlbGV0
ZSggR0xVaGFsZkVkZ2UgKmVEZWwgKTsKKworR0xVaGFsZkVkZ2UJKl9fZ2xfbWVzaEFkZEVkZ2VW
ZXJ0ZXgoIEdMVWhhbGZFZGdlICplT3JnICk7CitHTFVoYWxmRWRnZQkqX19nbF9tZXNoU3BsaXRF
ZGdlKCBHTFVoYWxmRWRnZSAqZU9yZyApOworR0xVaGFsZkVkZ2UJKl9fZ2xfbWVzaENvbm5lY3Qo
IEdMVWhhbGZFZGdlICplT3JnLCBHTFVoYWxmRWRnZSAqZURzdCApOworCitHTFVtZXNoCQkqX19n
bF9tZXNoTmV3TWVzaCggdm9pZCApOworR0xVbWVzaAkJKl9fZ2xfbWVzaFVuaW9uKCBHTFVtZXNo
ICptZXNoMSwgR0xVbWVzaCAqbWVzaDIgKTsKK3ZvaWQJCV9fZ2xfbWVzaERlbGV0ZU1lc2goIEdM
VW1lc2ggKm1lc2ggKTsKK3ZvaWQJCV9fZ2xfbWVzaFphcEZhY2UoIEdMVWZhY2UgKmZaYXAgKTsK
KworI2lmZGVmIE5ERUJVRworI2RlZmluZQkJX19nbF9tZXNoQ2hlY2tNZXNoKCBtZXNoICkKKyNl
bHNlCit2b2lkCQlfX2dsX21lc2hDaGVja01lc2goIEdMVW1lc2ggKm1lc2ggKTsKKyNlbmRpZgor
CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjU5IEBACisvKgorKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5
LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisqKiBtYWRl
IHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNH
SSBGcmVlCisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2Ui
KSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUg
cHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBj
b3B5CisqKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBM
ZWdhbCBTZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZp
ZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5jb20vcHJv
amVjdHMvRnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5z
ZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJhc2lzLCB3
aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKKyoq
IERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBX
QVJSQU5USUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFD
VE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBO
T04tSU5GUklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29k
ZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4yLjEsIHJl
bGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAor
KiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxp
Y29uIEdyYXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQg
YnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJlaW4uIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6
IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxpc2hlZCBi
eSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisqKiBP
cGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEp
LCByZWxlYXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0
ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0
LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRvdyBTeXN0
ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0
d2FyZQorKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNh
bXBsZSBJbXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVl
biBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0aCB0aGUg
T3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoKKyoqIEF1
dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNpb24kCisq
KiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9ub3JtYWwuYyM1ICQK
KyovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAi
dGhpcmRwYXJ0eS9nbHUvZ2x1b3MuaCIKKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L21lc2guaCIKKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5oIgorI2lu
Y2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5oIgorCisjZGVmaW5lIFRSVUUgMQor
I2RlZmluZSBGQUxTRSAwCisKKyNkZWZpbmUgRG90KHUsdikJKHVbMF0qdlswXSArIHVbMV0qdlsx
XSArIHVbMl0qdlsyXSkKKworI2lmIGRlZmluZWQoRk9SX1RSSVRFX1RFU1RfUFJPR1JBTSkgfHwg
ZGVmaW5lZChUUlVFX1BST0pFQ1QpCitzdGF0aWMgdm9pZCBOb3JtYWxpemUoIEdMZG91YmxlIHZb
M10gKQoreworICBHTGRvdWJsZSBsZW4gPSB2WzBdKnZbMF0gKyB2WzFdKnZbMV0gKyB2WzJdKnZb
Ml07CisKKyAgYXNzZXJ0KCBsZW4gPiAwICk7CisgIGxlbiA9IHNxcnQoIGxlbiApOworICB2WzBd
IC89IGxlbjsKKyAgdlsxXSAvPSBsZW47CisgIHZbMl0gLz0gbGVuOworfQorI2VuZGlmCisKKyNk
ZWZpbmUgQUJTKHgpCSgoeCkgPCAwID8gLSh4KSA6ICh4KSkKKworc3RhdGljIGludCBMb25nQXhp
cyggR0xkb3VibGUgdlszXSApCit7CisgIGludCBpID0gMDsKKworICBpZiggQUJTKHZbMV0pID4g
QUJTKHZbMF0pICkgeyBpID0gMTsgfQorICBpZiggQUJTKHZbMl0pID4gQUJTKHZbaV0pICkgeyBp
ID0gMjsgfQorICByZXR1cm4gaTsKK30KKworc3RhdGljIHZvaWQgQ29tcHV0ZU5vcm1hbCggR0xV
dGVzc2VsYXRvciAqdGVzcywgR0xkb3VibGUgbm9ybVszXSApCit7CisgIEdMVXZlcnRleCAqdiwg
KnYxLCAqdjI7CisgIEdMZG91YmxlIGMsIHRMZW4yLCBtYXhMZW4yOworICBHTGRvdWJsZSBtYXhW
YWxbM10sIG1pblZhbFszXSwgZDFbM10sIGQyWzNdLCB0Tm9ybVszXTsKKyAgR0xVdmVydGV4ICpt
YXhWZXJ0WzNdLCAqbWluVmVydFszXTsKKyAgR0xVdmVydGV4ICp2SGVhZCA9ICZ0ZXNzLT5tZXNo
LT52SGVhZDsKKyAgaW50IGk7CisKKyAgbWF4VmFsWzBdID0gbWF4VmFsWzFdID0gbWF4VmFsWzJd
ID0gLTIgKiBHTFVfVEVTU19NQVhfQ09PUkQ7CisgIG1pblZhbFswXSA9IG1pblZhbFsxXSA9IG1p
blZhbFsyXSA9IDIgKiBHTFVfVEVTU19NQVhfQ09PUkQ7CisKKyAgZm9yKCB2ID0gdkhlYWQtPm5l
eHQ7IHYgIT0gdkhlYWQ7IHYgPSB2LT5uZXh0ICkgeworICAgIGZvciggaSA9IDA7IGkgPCAzOyAr
K2kgKSB7CisgICAgICBjID0gdi0+Y29vcmRzW2ldOworICAgICAgaWYoIGMgPCBtaW5WYWxbaV0g
KSB7IG1pblZhbFtpXSA9IGM7IG1pblZlcnRbaV0gPSB2OyB9CisgICAgICBpZiggYyA+IG1heFZh
bFtpXSApIHsgbWF4VmFsW2ldID0gYzsgbWF4VmVydFtpXSA9IHY7IH0KKyAgICB9CisgIH0KKwor
ICAvKiBGaW5kIHR3byB2ZXJ0aWNlcyBzZXBhcmF0ZWQgYnkgYXQgbGVhc3QgMS9zcXJ0KDMpIG9m
IHRoZSBtYXhpbXVtCisgICAqIGRpc3RhbmNlIGJldHdlZW4gYW55IHR3byB2ZXJ0aWNlcworICAg
Ki8KKyAgaSA9IDA7CisgIGlmKCBtYXhWYWxbMV0gLSBtaW5WYWxbMV0gPiBtYXhWYWxbMF0gLSBt
aW5WYWxbMF0gKSB7IGkgPSAxOyB9CisgIGlmKCBtYXhWYWxbMl0gLSBtaW5WYWxbMl0gPiBtYXhW
YWxbaV0gLSBtaW5WYWxbaV0gKSB7IGkgPSAyOyB9CisgIGlmKCBtaW5WYWxbaV0gPj0gbWF4VmFs
W2ldICkgeworICAgIC8qIEFsbCB2ZXJ0aWNlcyBhcmUgdGhlIHNhbWUgLS0gbm9ybWFsIGRvZXNu
J3QgbWF0dGVyICovCisgICAgbm9ybVswXSA9IDA7IG5vcm1bMV0gPSAwOyBub3JtWzJdID0gMTsK
KyAgICByZXR1cm47CisgIH0KKworICAvKiBMb29rIGZvciBhIHRoaXJkIHZlcnRleCB3aGljaCBm
b3JtcyB0aGUgdHJpYW5nbGUgd2l0aCBtYXhpbXVtIGFyZWEKKyAgICogKExlbmd0aCBvZiBub3Jt
YWwgPT0gdHdpY2UgdGhlIHRyaWFuZ2xlIGFyZWEpCisgICAqLworICBtYXhMZW4yID0gMDsKKyAg
djEgPSBtaW5WZXJ0W2ldOworICB2MiA9IG1heFZlcnRbaV07CisgIGQxWzBdID0gdjEtPmNvb3Jk
c1swXSAtIHYyLT5jb29yZHNbMF07CisgIGQxWzFdID0gdjEtPmNvb3Jkc1sxXSAtIHYyLT5jb29y
ZHNbMV07CisgIGQxWzJdID0gdjEtPmNvb3Jkc1syXSAtIHYyLT5jb29yZHNbMl07CisgIGZvcigg
diA9IHZIZWFkLT5uZXh0OyB2ICE9IHZIZWFkOyB2ID0gdi0+bmV4dCApIHsKKyAgICBkMlswXSA9
IHYtPmNvb3Jkc1swXSAtIHYyLT5jb29yZHNbMF07CisgICAgZDJbMV0gPSB2LT5jb29yZHNbMV0g
LSB2Mi0+Y29vcmRzWzFdOworICAgIGQyWzJdID0gdi0+Y29vcmRzWzJdIC0gdjItPmNvb3Jkc1sy
XTsKKyAgICB0Tm9ybVswXSA9IGQxWzFdKmQyWzJdIC0gZDFbMl0qZDJbMV07CisgICAgdE5vcm1b
MV0gPSBkMVsyXSpkMlswXSAtIGQxWzBdKmQyWzJdOworICAgIHROb3JtWzJdID0gZDFbMF0qZDJb
MV0gLSBkMVsxXSpkMlswXTsKKyAgICB0TGVuMiA9IHROb3JtWzBdKnROb3JtWzBdICsgdE5vcm1b
MV0qdE5vcm1bMV0gKyB0Tm9ybVsyXSp0Tm9ybVsyXTsKKyAgICBpZiggdExlbjIgPiBtYXhMZW4y
ICkgeworICAgICAgbWF4TGVuMiA9IHRMZW4yOworICAgICAgbm9ybVswXSA9IHROb3JtWzBdOwor
ICAgICAgbm9ybVsxXSA9IHROb3JtWzFdOworICAgICAgbm9ybVsyXSA9IHROb3JtWzJdOworICAg
IH0KKyAgfQorCisgIGlmKCBtYXhMZW4yIDw9IDAgKSB7CisgICAgLyogQWxsIHBvaW50cyBsaWUg
b24gYSBzaW5nbGUgbGluZSAtLSBhbnkgZGVjZW50IG5vcm1hbCB3aWxsIGRvICovCisgICAgbm9y
bVswXSA9IG5vcm1bMV0gPSBub3JtWzJdID0gMDsKKyAgICBub3JtW0xvbmdBeGlzKGQxKV0gPSAx
OworICB9Cit9CisgIAorCitzdGF0aWMgdm9pZCBDaGVja09yaWVudGF0aW9uKCBHTFV0ZXNzZWxh
dG9yICp0ZXNzICkKK3sKKyAgR0xkb3VibGUgYXJlYTsKKyAgR0xVZmFjZSAqZiwgKmZIZWFkID0g
JnRlc3MtPm1lc2gtPmZIZWFkOworICBHTFV2ZXJ0ZXggKnYsICp2SGVhZCA9ICZ0ZXNzLT5tZXNo
LT52SGVhZDsKKyAgR0xVaGFsZkVkZ2UgKmU7CisKKyAgLyogV2hlbiB3ZSBjb21wdXRlIHRoZSBu
b3JtYWwgYXV0b21hdGljYWxseSwgd2UgY2hvb3NlIHRoZSBvcmllbnRhdGlvbgorICAgKiBzbyB0
aGF0IHRoZSB0aGUgc3VtIG9mIHRoZSBzaWduZWQgYXJlYXMgb2YgYWxsIGNvbnRvdXJzIGlzIG5v
bi1uZWdhdGl2ZS4KKyAgICovCisgIGFyZWEgPSAwOworICBmb3IoIGYgPSBmSGVhZC0+bmV4dDsg
ZiAhPSBmSGVhZDsgZiA9IGYtPm5leHQgKSB7CisgICAgZSA9IGYtPmFuRWRnZTsKKyAgICBpZigg
ZS0+d2luZGluZyA8PSAwICkgY29udGludWU7CisgICAgZG8geworICAgICAgYXJlYSArPSAoZS0+
T3JnLT5zIC0gZS0+RHN0LT5zKSAqIChlLT5PcmctPnQgKyBlLT5Ec3QtPnQpOworICAgICAgZSA9
IGUtPkxuZXh0OworICAgIH0gd2hpbGUoIGUgIT0gZi0+YW5FZGdlICk7CisgIH0KKyAgaWYoIGFy
ZWEgPCAwICkgeworICAgIC8qIFJldmVyc2UgdGhlIG9yaWVudGF0aW9uIGJ5IGZsaXBwaW5nIGFs
bCB0aGUgdC1jb29yZGluYXRlcyAqLworICAgIGZvciggdiA9IHZIZWFkLT5uZXh0OyB2ICE9IHZI
ZWFkOyB2ID0gdi0+bmV4dCApIHsKKyAgICAgIHYtPnQgPSAtIHYtPnQ7CisgICAgfQorICAgIHRl
c3MtPnRVbml0WzBdID0gLSB0ZXNzLT50VW5pdFswXTsKKyAgICB0ZXNzLT50VW5pdFsxXSA9IC0g
dGVzcy0+dFVuaXRbMV07CisgICAgdGVzcy0+dFVuaXRbMl0gPSAtIHRlc3MtPnRVbml0WzJdOwor
ICB9Cit9CisKKyNpZmRlZiBGT1JfVFJJVEVfVEVTVF9QUk9HUkFNCisjaW5jbHVkZSA8c3RkbGli
Lmg+CitleHRlcm4gaW50IFJhbmRvbVN3ZWVwOworI2RlZmluZSBTX1VOSVRfWAkoUmFuZG9tU3dl
ZXAgPyAoMipkcmFuZDQ4KCktMSkgOiAxLjApCisjZGVmaW5lIFNfVU5JVF9ZCShSYW5kb21Td2Vl
cCA/ICgyKmRyYW5kNDgoKS0xKSA6IDAuMCkKKyNlbHNlCisjaWYgZGVmaW5lZChTTEFOVEVEX1NX
RUVQKSAKKy8qIFRoZSAiZmVhdHVyZSBtZXJnaW5nIiBpcyBub3QgaW50ZW5kZWQgdG8gYmUgY29t
cGxldGUuICBUaGVyZSBhcmUKKyAqIHNwZWNpYWwgY2FzZXMgd2hlcmUgZWRnZXMgYXJlIG5lYXJs
eSBwYXJhbGxlbCB0byB0aGUgc3dlZXAgbGluZQorICogd2hpY2ggYXJlIG5vdCBpbXBsZW1lbnRl
ZC4gIFRoZSBhbGdvcml0aG0gc2hvdWxkIHN0aWxsIGJlaGF2ZQorICogcm9idXN0bHkgKGllLiBw
cm9kdWNlIGEgcmVhc29uYWJsZSB0ZXNzZWxhdGlvbikgaW4gdGhlIHByZXNlbmNlCisgKiBvZiBz
dWNoIGVkZ2VzLCBob3dldmVyIGl0IG1heSBtaXNzIGZlYXR1cmVzIHdoaWNoIGNvdWxkIGhhdmUg
YmVlbgorICogbWVyZ2VkLiAgV2UgY291bGQgbWluaW1pemUgdGhpcyBlZmZlY3QgYnkgY2hvb3Np
bmcgdGhlIHN3ZWVwIGxpbmUKKyAqIGRpcmVjdGlvbiB0byBiZSBzb21ldGhpbmcgdW51c3VhbCAo
aWUuIG5vdCBwYXJhbGxlbCB0byBvbmUgb2YgdGhlCisgKiBjb29yZGluYXRlIGF4ZXMpLgorICov
CisjZGVmaW5lIFNfVU5JVF9YCTAuNTA5NDE1Mzk1NjQ5NTUzODUJLyogUHJlLW5vcm1hbGl6ZWQg
Ki8KKyNkZWZpbmUgU19VTklUX1kJMC44NjA1MjA3NDYyMjAxMDYzMworI2Vsc2UKKyNkZWZpbmUg
U19VTklUX1gJMS4wCisjZGVmaW5lIFNfVU5JVF9ZCTAuMAorI2VuZGlmCisjZW5kaWYKKworLyog
RGV0ZXJtaW5lIHRoZSBwb2x5Z29uIG5vcm1hbCBhbmQgcHJvamVjdCB2ZXJ0aWNlcyBvbnRvIHRo
ZSBwbGFuZQorICogb2YgdGhlIHBvbHlnb24uCisgKi8KK3ZvaWQgX19nbF9wcm9qZWN0UG9seWdv
biggR0xVdGVzc2VsYXRvciAqdGVzcyApCit7CisgIEdMVXZlcnRleCAqdiwgKnZIZWFkID0gJnRl
c3MtPm1lc2gtPnZIZWFkOworICBHTGRvdWJsZSBub3JtWzNdOworICBHTGRvdWJsZSAqc1VuaXQs
ICp0VW5pdDsKKyAgaW50IGksIGNvbXB1dGVkTm9ybWFsID0gRkFMU0U7CisKKyAgbm9ybVswXSA9
IHRlc3MtPm5vcm1hbFswXTsKKyAgbm9ybVsxXSA9IHRlc3MtPm5vcm1hbFsxXTsKKyAgbm9ybVsy
XSA9IHRlc3MtPm5vcm1hbFsyXTsKKyAgaWYoIG5vcm1bMF0gPT0gMCAmJiBub3JtWzFdID09IDAg
JiYgbm9ybVsyXSA9PSAwICkgeworICAgIENvbXB1dGVOb3JtYWwoIHRlc3MsIG5vcm0gKTsKKyAg
ICBjb21wdXRlZE5vcm1hbCA9IFRSVUU7CisgIH0KKyAgc1VuaXQgPSB0ZXNzLT5zVW5pdDsKKyAg
dFVuaXQgPSB0ZXNzLT50VW5pdDsKKyAgaSA9IExvbmdBeGlzKCBub3JtICk7CisKKyNpZiBkZWZp
bmVkKEZPUl9UUklURV9URVNUX1BST0dSQU0pIHx8IGRlZmluZWQoVFJVRV9QUk9KRUNUKQorICAv
KiBDaG9vc2UgdGhlIGluaXRpYWwgc1VuaXQgdmVjdG9yIHRvIGJlIGFwcHJveGltYXRlbHkgcGVy
cGVuZGljdWxhcgorICAgKiB0byB0aGUgbm9ybWFsLgorICAgKi8KKyAgTm9ybWFsaXplKCBub3Jt
ICk7CisKKyAgc1VuaXRbaV0gPSAwOworICBzVW5pdFsoaSsxKSUzXSA9IFNfVU5JVF9YOworICBz
VW5pdFsoaSsyKSUzXSA9IFNfVU5JVF9ZOworCisgIC8qIE5vdyBtYWtlIGl0IGV4YWN0bHkgcGVy
cGVuZGljdWxhciAqLworICB3ID0gRG90KCBzVW5pdCwgbm9ybSApOworICBzVW5pdFswXSAtPSB3
ICogbm9ybVswXTsKKyAgc1VuaXRbMV0gLT0gdyAqIG5vcm1bMV07CisgIHNVbml0WzJdIC09IHcg
KiBub3JtWzJdOworICBOb3JtYWxpemUoIHNVbml0ICk7CisKKyAgLyogQ2hvb3NlIHRVbml0IHNv
IHRoYXQgKHNVbml0LHRVbml0LG5vcm0pIGZvcm0gYSByaWdodC1oYW5kZWQgZnJhbWUgKi8KKyAg
dFVuaXRbMF0gPSBub3JtWzFdKnNVbml0WzJdIC0gbm9ybVsyXSpzVW5pdFsxXTsKKyAgdFVuaXRb
MV0gPSBub3JtWzJdKnNVbml0WzBdIC0gbm9ybVswXSpzVW5pdFsyXTsKKyAgdFVuaXRbMl0gPSBu
b3JtWzBdKnNVbml0WzFdIC0gbm9ybVsxXSpzVW5pdFswXTsKKyAgTm9ybWFsaXplKCB0VW5pdCAp
OworI2Vsc2UKKyAgLyogUHJvamVjdCBwZXJwZW5kaWN1bGFyIHRvIGEgY29vcmRpbmF0ZSBheGlz
IC0tIGJldHRlciBudW1lcmljYWxseSAqLworICBzVW5pdFtpXSA9IDA7CisgIHNVbml0WyhpKzEp
JTNdID0gU19VTklUX1g7CisgIHNVbml0WyhpKzIpJTNdID0gU19VTklUX1k7CisgIAorICB0VW5p
dFtpXSA9IDA7CisgIHRVbml0WyhpKzEpJTNdID0gKG5vcm1baV0gPiAwKSA/IC1TX1VOSVRfWSA6
IFNfVU5JVF9ZOworICB0VW5pdFsoaSsyKSUzXSA9IChub3JtW2ldID4gMCkgPyBTX1VOSVRfWCA6
IC1TX1VOSVRfWDsKKyNlbmRpZgorCisgIC8qIFByb2plY3QgdGhlIHZlcnRpY2VzIG9udG8gdGhl
IHN3ZWVwIHBsYW5lICovCisgIGZvciggdiA9IHZIZWFkLT5uZXh0OyB2ICE9IHZIZWFkOyB2ID0g
di0+bmV4dCApIHsKKyAgICB2LT5zID0gRG90KCB2LT5jb29yZHMsIHNVbml0ICk7CisgICAgdi0+
dCA9IERvdCggdi0+Y29vcmRzLCB0VW5pdCApOworICB9CisgIGlmKCBjb21wdXRlZE5vcm1hbCAp
IHsKKyAgICBDaGVja09yaWVudGF0aW9uKCB0ZXNzICk7CisgIH0KK30KSW5kZXg6IFdlYkNvcmUv
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Ro
aXJkcGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Ro
aXJkcGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIg
QEAKKy8qCisqKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBv
cnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKKyoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2
ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKKyoqIFNvZnR3YXJlIExpY2Vu
c2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwor
KiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG5vdCB1c2UKKyoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKKyoqIG9mIHRoZSBMaWNlbnNlIGF0
IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCisqKiBB
bXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6
CisqKiAKKyoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgorKiogCisqKiBOb3Rl
IHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJp
YnV0ZWQgb24gYW4KKyoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJ
RUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUworKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBX
SVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECisqKiBDT05ESVRJ
T05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9S
IEEKKyoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisqKiAKKyoq
IE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxl
bWVudGF0aW9uLAorKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwg
ZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCisqKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2Rl
IGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyoqIENv
cHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGlu
ZGljYXRlZAorKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqIAor
KiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1t
aW5nIGludGVyZmFjZXMKKyoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRo
IHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKKyoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06
IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCisqKiBBcHJpbCAxLCAx
OTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNp
b24KKyoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3Jh
cGhpY3Mgd2l0aCB0aGUgWAorKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxl
YXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCisqKiB3YXMgY3JlYXRlZCB1c2lu
ZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCisqKiBw
dWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQg
YXMgYmVpbmcKKyoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBT
cGVjaWZpY2F0aW9uLgorKioKKyovCisvKgorKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5
OTQuCisqKgorKiogJERhdGUkICRSZXZpc2lvbiQKKyoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9n
ZngvbGliL2dsdS9saWJ0ZXNzL25vcm1hbC5oIzUgJAorKi8KKworI2lmbmRlZiBfX25vcm1hbF9o
XworI2RlZmluZSBfX25vcm1hbF9oXworCisjaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy90ZXNzLmgiCisKKy8qIF9fZ2xfcHJvamVjdFBvbHlnb24oIHRlc3MgKSBkZXRlcm1pbmVzIHRo
ZSBwb2x5Z29uIG5vcm1hbAorICogYW5kIHByb2plY3QgdmVydGljZXMgb250byB0aGUgcGxhbmUg
b2YgdGhlIHBvbHlnb24uCisgKi8KK3ZvaWQgX19nbF9wcm9qZWN0UG9seWdvbiggR0xVdGVzc2Vs
YXRvciAqdGVzcyApOworCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy9wcmlvcml0eXEtaGVhcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvdGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS90aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjYwIEBACisvKgorKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4
dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisqKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0
ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCisqKiBTb2Z0d2Fy
ZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUg
TGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5CisqKiBvZiB0aGUgTGlj
ZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYw
MAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEs
IG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKKyoqIAor
KiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFO
RCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKKyoqIERJU0NMQUlNRUQsIElOQ0xV
RElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAorKiog
Q09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRO
RVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgor
KiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYs
IDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAorKiogSW5jLiBUaGUgT3JpZ2lu
YWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMu
CisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBp
cyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBw
cm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rp
b24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisqKiBPcGVuR0woUikgR3JhcGhpY3Mg
U3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAorKiogQXBy
aWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5
IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdM
KFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4z
KSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQorKiogd2FzIGNyZWF0
ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlv
bgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZl
cmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24g
MS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoKKyoqIEF1dGhvcjogRXJpYyBWZWFjaCwg
SnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNpb24kCisqKiAkSGVhZGVyOiAvL2RlcG90
L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5jIzUgJAorKi8KKworI2lu
Y2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5o
PgorI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKKyNpbmNsdWRl
ICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmgiCisKKyNkZWZpbmUgSU5J
VF9TSVpFCTMyCisKKyNkZWZpbmUgVFJVRSAxCisjZGVmaW5lIEZBTFNFIDAKKworI2lmZGVmIEZP
Ul9UUklURV9URVNUX1BST0dSQU0KKyNkZWZpbmUgTEVRKHgseSkJKCpwcS0+bGVxKSh4LHkpCisj
ZWxzZQorLyogVmlvbGF0ZXMgbW9kdWxhcml0eSwgYnV0IGEgbGl0dGxlIGZhc3RlciAqLworI2lu
Y2x1ZGUgImdlb20uaCIKKyNkZWZpbmUgTEVRKHgseSkJVmVydExlcSgoR0xVdmVydGV4ICopeCwg
KEdMVXZlcnRleCAqKXkpCisjZW5kaWYKKworLyogcmVhbGx5IF9fZ2xfcHFIZWFwTmV3UHJpb3Jp
dHlRICovCitQcmlvcml0eVEgKnBxTmV3UHJpb3JpdHlRKCBpbnQgKCpsZXEpKFBRa2V5IGtleTEs
IFBRa2V5IGtleTIpICkKK3sKKyAgUHJpb3JpdHlRICpwcSA9IChQcmlvcml0eVEgKiltZW1BbGxv
Yyggc2l6ZW9mKCBQcmlvcml0eVEgKSk7CisgIGlmIChwcSA9PSBOVUxMKSByZXR1cm4gTlVMTDsK
KworICBwcS0+c2l6ZSA9IDA7CisgIHBxLT5tYXggPSBJTklUX1NJWkU7CisgIHBxLT5ub2RlcyA9
IChQUW5vZGUgKiltZW1BbGxvYyggKElOSVRfU0laRSArIDEpICogc2l6ZW9mKHBxLT5ub2Rlc1sw
XSkgKTsKKyAgaWYgKHBxLT5ub2RlcyA9PSBOVUxMKSB7CisgICAgIG1lbUZyZWUocHEpOworICAg
ICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHBxLT5oYW5kbGVzID0gKFBRaGFuZGxlRWxlbSAqKW1l
bUFsbG9jKCAoSU5JVF9TSVpFICsgMSkgKiBzaXplb2YocHEtPmhhbmRsZXNbMF0pICk7CisgIGlm
IChwcS0+aGFuZGxlcyA9PSBOVUxMKSB7CisgICAgIG1lbUZyZWUocHEtPm5vZGVzKTsKKyAgICAg
bWVtRnJlZShwcSk7CisgICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcHEtPmluaXRpYWxpemVk
ID0gRkFMU0U7CisgIHBxLT5mcmVlTGlzdCA9IDA7CisgIHBxLT5sZXEgPSBsZXE7CisKKyAgcHEt
Pm5vZGVzWzFdLmhhbmRsZSA9IDE7CS8qIHNvIHRoYXQgTWluaW11bSgpIHJldHVybnMgTlVMTCAq
LworICBwcS0+aGFuZGxlc1sxXS5rZXkgPSBOVUxMOworICByZXR1cm4gcHE7Cit9CisKKy8qIHJl
YWxseSBfX2dsX3BxSGVhcERlbGV0ZVByaW9yaXR5USAqLwordm9pZCBwcURlbGV0ZVByaW9yaXR5
USggUHJpb3JpdHlRICpwcSApCit7CisgIG1lbUZyZWUoIHBxLT5oYW5kbGVzICk7CisgIG1lbUZy
ZWUoIHBxLT5ub2RlcyApOworICBtZW1GcmVlKCBwcSApOworfQorCisKK3N0YXRpYyB2b2lkIEZs
b2F0RG93biggUHJpb3JpdHlRICpwcSwgbG9uZyBjdXJyICkKK3sKKyAgUFFub2RlICpuID0gcHEt
Pm5vZGVzOworICBQUWhhbmRsZUVsZW0gKmggPSBwcS0+aGFuZGxlczsKKyAgUFFoYW5kbGUgaEN1
cnIsIGhDaGlsZDsKKyAgbG9uZyBjaGlsZDsKKworICBoQ3VyciA9IG5bY3Vycl0uaGFuZGxlOwor
ICBmb3IoIDs7ICkgeworICAgIGNoaWxkID0gY3VyciA8PCAxOworICAgIGlmKCBjaGlsZCA8IHBx
LT5zaXplICYmIExFUSggaFtuW2NoaWxkKzFdLmhhbmRsZV0ua2V5LAorCQkJCSBoW25bY2hpbGRd
LmhhbmRsZV0ua2V5ICkpIHsKKyAgICAgICsrY2hpbGQ7CisgICAgfQorCisgICAgYXNzZXJ0KGNo
aWxkIDw9IHBxLT5tYXgpOworCisgICAgaENoaWxkID0gbltjaGlsZF0uaGFuZGxlOworICAgIGlm
KCBjaGlsZCA+IHBxLT5zaXplIHx8IExFUSggaFtoQ3Vycl0ua2V5LCBoW2hDaGlsZF0ua2V5ICkp
IHsKKyAgICAgIG5bY3Vycl0uaGFuZGxlID0gaEN1cnI7CisgICAgICBoW2hDdXJyXS5ub2RlID0g
Y3VycjsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBuW2N1cnJdLmhhbmRsZSA9IGhDaGlsZDsK
KyAgICBoW2hDaGlsZF0ubm9kZSA9IGN1cnI7CisgICAgY3VyciA9IGNoaWxkOworICB9Cit9CisK
Kworc3RhdGljIHZvaWQgRmxvYXRVcCggUHJpb3JpdHlRICpwcSwgbG9uZyBjdXJyICkKK3sKKyAg
UFFub2RlICpuID0gcHEtPm5vZGVzOworICBQUWhhbmRsZUVsZW0gKmggPSBwcS0+aGFuZGxlczsK
KyAgUFFoYW5kbGUgaEN1cnIsIGhQYXJlbnQ7CisgIGxvbmcgcGFyZW50OworCisgIGhDdXJyID0g
bltjdXJyXS5oYW5kbGU7CisgIGZvciggOzsgKSB7CisgICAgcGFyZW50ID0gY3VyciA+PiAxOwor
ICAgIGhQYXJlbnQgPSBuW3BhcmVudF0uaGFuZGxlOworICAgIGlmKCBwYXJlbnQgPT0gMCB8fCBM
RVEoIGhbaFBhcmVudF0ua2V5LCBoW2hDdXJyXS5rZXkgKSkgeworICAgICAgbltjdXJyXS5oYW5k
bGUgPSBoQ3VycjsKKyAgICAgIGhbaEN1cnJdLm5vZGUgPSBjdXJyOworICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIG5bY3Vycl0uaGFuZGxlID0gaFBhcmVudDsKKyAgICBoW2hQYXJlbnRdLm5vZGUg
PSBjdXJyOworICAgIGN1cnIgPSBwYXJlbnQ7CisgIH0KK30KKworLyogcmVhbGx5IF9fZ2xfcHFI
ZWFwSW5pdCAqLwordm9pZCBwcUluaXQoIFByaW9yaXR5USAqcHEgKQoreworICBsb25nIGk7CisK
KyAgLyogVGhpcyBtZXRob2Qgb2YgYnVpbGRpbmcgYSBoZWFwIGlzIE8obiksIHJhdGhlciB0aGFu
IE8obiBsZyBuKS4gKi8KKworICBmb3IoIGkgPSBwcS0+c2l6ZTsgaSA+PSAxOyAtLWkgKSB7Cisg
ICAgRmxvYXREb3duKCBwcSwgaSApOworICB9CisgIHBxLT5pbml0aWFsaXplZCA9IFRSVUU7Cit9
CisKKy8qIHJlYWxseSBfX2dsX3BxSGVhcEluc2VydCAqLworLyogcmV0dXJucyBMT05HX01BWCBp
ZmYgb3V0IG9mIG1lbW9yeSAqLworUFFoYW5kbGUgcHFJbnNlcnQoIFByaW9yaXR5USAqcHEsIFBR
a2V5IGtleU5ldyApCit7CisgIGxvbmcgY3VycjsKKyAgUFFoYW5kbGUgZnJlZTsKKworICBjdXJy
ID0gKysgcHEtPnNpemU7CisgIGlmKCAoY3VycioyKSA+IHBxLT5tYXggKSB7CisgICAgUFFub2Rl
ICpzYXZlTm9kZXM9IHBxLT5ub2RlczsKKyAgICBQUWhhbmRsZUVsZW0gKnNhdmVIYW5kbGVzPSBw
cS0+aGFuZGxlczsKKworICAgIC8qIElmIHRoZSBoZWFwIG92ZXJmbG93cywgZG91YmxlIGl0cyBz
aXplLiAqLworICAgIHBxLT5tYXggPDw9IDE7CisgICAgcHEtPm5vZGVzID0gKFBRbm9kZSAqKW1l
bVJlYWxsb2MoIHBxLT5ub2RlcywgCisJCQkJICAgICAoc2l6ZV90KSAKKwkJCQkgICAgICgocHEt
Pm1heCArIDEpICogc2l6ZW9mKCBwcS0+bm9kZXNbMF0gKSkpOworICAgIGlmIChwcS0+bm9kZXMg
PT0gTlVMTCkgeworICAgICAgIHBxLT5ub2RlcyA9IHNhdmVOb2RlczsJLyogcmVzdG9yZSBwdHIg
dG8gZnJlZSB1cG9uIHJldHVybiAqLworICAgICAgIHJldHVybiBMT05HX01BWDsKKyAgICB9Cisg
ICAgcHEtPmhhbmRsZXMgPSAoUFFoYW5kbGVFbGVtICopbWVtUmVhbGxvYyggcHEtPmhhbmRsZXMs
CisJCQkgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KQorCQkJICAgICAgICAgICAgICAgICAg
ICAgICgocHEtPm1heCArIDEpICogCisJCQkJCSAgICAgICBzaXplb2YoIHBxLT5oYW5kbGVzWzBd
ICkpKTsKKyAgICBpZiAocHEtPmhhbmRsZXMgPT0gTlVMTCkgeworICAgICAgIHBxLT5oYW5kbGVz
ID0gc2F2ZUhhbmRsZXM7IC8qIHJlc3RvcmUgcHRyIHRvIGZyZWUgdXBvbiByZXR1cm4gKi8KKyAg
ICAgICByZXR1cm4gTE9OR19NQVg7CisgICAgfQorICB9CisKKyAgaWYoIHBxLT5mcmVlTGlzdCA9
PSAwICkgeworICAgIGZyZWUgPSBjdXJyOworICB9IGVsc2UgeworICAgIGZyZWUgPSBwcS0+ZnJl
ZUxpc3Q7CisgICAgcHEtPmZyZWVMaXN0ID0gcHEtPmhhbmRsZXNbZnJlZV0ubm9kZTsKKyAgfQor
CisgIHBxLT5ub2Rlc1tjdXJyXS5oYW5kbGUgPSBmcmVlOworICBwcS0+aGFuZGxlc1tmcmVlXS5u
b2RlID0gY3VycjsKKyAgcHEtPmhhbmRsZXNbZnJlZV0ua2V5ID0ga2V5TmV3OworCisgIGlmKCBw
cS0+aW5pdGlhbGl6ZWQgKSB7CisgICAgRmxvYXRVcCggcHEsIGN1cnIgKTsKKyAgfQorICBhc3Nl
cnQoZnJlZSAhPSBMT05HX01BWCk7CisgIHJldHVybiBmcmVlOworfQorCisvKiByZWFsbHkgX19n
bF9wcUhlYXBFeHRyYWN0TWluICovCitQUWtleSBwcUV4dHJhY3RNaW4oIFByaW9yaXR5USAqcHEg
KQoreworICBQUW5vZGUgKm4gPSBwcS0+bm9kZXM7CisgIFBRaGFuZGxlRWxlbSAqaCA9IHBxLT5o
YW5kbGVzOworICBQUWhhbmRsZSBoTWluID0gblsxXS5oYW5kbGU7CisgIFBRa2V5IG1pbiA9IGhb
aE1pbl0ua2V5OworCisgIGlmKCBwcS0+c2l6ZSA+IDAgKSB7CisgICAgblsxXS5oYW5kbGUgPSBu
W3BxLT5zaXplXS5oYW5kbGU7CisgICAgaFtuWzFdLmhhbmRsZV0ubm9kZSA9IDE7CisKKyAgICBo
W2hNaW5dLmtleSA9IE5VTEw7CisgICAgaFtoTWluXS5ub2RlID0gcHEtPmZyZWVMaXN0OworICAg
IHBxLT5mcmVlTGlzdCA9IGhNaW47CisKKyAgICBpZiggLS0gcHEtPnNpemUgPiAwICkgeworICAg
ICAgRmxvYXREb3duKCBwcSwgMSApOworICAgIH0KKyAgfQorICByZXR1cm4gbWluOworfQorCisv
KiByZWFsbHkgX19nbF9wcUhlYXBEZWxldGUgKi8KK3ZvaWQgcHFEZWxldGUoIFByaW9yaXR5USAq
cHEsIFBRaGFuZGxlIGhDdXJyICkKK3sKKyAgUFFub2RlICpuID0gcHEtPm5vZGVzOworICBQUWhh
bmRsZUVsZW0gKmggPSBwcS0+aGFuZGxlczsKKyAgbG9uZyBjdXJyOworCisgIGFzc2VydCggaEN1
cnIgPj0gMSAmJiBoQ3VyciA8PSBwcS0+bWF4ICYmIGhbaEN1cnJdLmtleSAhPSBOVUxMICk7CisK
KyAgY3VyciA9IGhbaEN1cnJdLm5vZGU7CisgIG5bY3Vycl0uaGFuZGxlID0gbltwcS0+c2l6ZV0u
aGFuZGxlOworICBoW25bY3Vycl0uaGFuZGxlXS5ub2RlID0gY3VycjsKKworICBpZiggY3VyciA8
PSAtLSBwcS0+c2l6ZSApIHsKKyAgICBpZiggY3VyciA8PSAxIHx8IExFUSggaFtuW2N1cnI+PjFd
LmhhbmRsZV0ua2V5LCBoW25bY3Vycl0uaGFuZGxlXS5rZXkgKSkgeworICAgICAgRmxvYXREb3du
KCBwcSwgY3VyciApOworICAgIH0gZWxzZSB7CisgICAgICBGbG9hdFVwKCBwcSwgY3VyciApOwor
ICAgIH0KKyAgfQorICBoW2hDdXJyXS5rZXkgPSBOVUxMOworICBoW2hDdXJyXS5ub2RlID0gcHEt
PmZyZWVMaXN0OworICBwcS0+ZnJlZUxpc3QgPSBoQ3VycjsKK30KSW5kZXg6IFdlYkNvcmUvdGhp
cmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTE0IEBACisvKgorKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBF
eGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisqKiBtYWRlIHN1
YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBG
cmVlCisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwg
dGhlIGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJv
dmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5
CisqKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdh
bCBTZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcs
IENBIDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVj
dHMvRnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwg
dGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJhc2lzLCB3aXRo
IEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKKyoqIERJ
U0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJS
QU5USUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9S
WSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04t
SU5GUklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBp
czogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4yLjEsIHJlbGVh
c2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAorKiog
SW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29u
IEdyYXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkg
dGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRo
ZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxpc2hlZCBieSBT
R0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisqKiBPcGVu
R0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCBy
ZWxlYXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0g
VXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAx
OTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRvdyBTeXN0ZW0o
UikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2Fy
ZQorKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBp
bmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0aCB0aGUgT3Bl
bkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoKKyoqIEF1dGhv
cjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNpb24kCisqKiAk
SGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5o
IzUgJAorKi8KKworI2lmbmRlZiBfX3ByaW9yaXR5cV9oZWFwX2hfCisjZGVmaW5lIF9fcHJpb3Jp
dHlxX2hlYXBfaF8KKworLyogVXNlICNkZWZpbmUncyBzbyB0aGF0IGFub3RoZXIgaGVhcCBpbXBs
ZW1lbnRhdGlvbiBjYW4gdXNlIHRoaXMgb25lICovCisKKyNkZWZpbmUgUFFrZXkJCQlQUUhlYXBL
ZXkKKyNkZWZpbmUgUFFoYW5kbGUJCVBRSGVhcEhhbmRsZQorI2RlZmluZSBQcmlvcml0eVEJCVBy
aW9yaXR5UUhlYXAKKworI2RlZmluZSBwcU5ld1ByaW9yaXR5UShsZXEpCV9fZ2xfcHFIZWFwTmV3
UHJpb3JpdHlRKGxlcSkKKyNkZWZpbmUgcHFEZWxldGVQcmlvcml0eVEocHEpCV9fZ2xfcHFIZWFw
RGVsZXRlUHJpb3JpdHlRKHBxKQorCisvKiBUaGUgYmFzaWMgb3BlcmF0aW9ucyBhcmUgaW5zZXJ0
aW9uIG9mIGEgbmV3IGtleSAocHFJbnNlcnQpLAorICogYW5kIGV4YW1pbmF0aW9uL2V4dHJhY3Rp
b24gb2YgYSBrZXkgd2hvc2UgdmFsdWUgaXMgbWluaW11bQorICogKHBxTWluaW11bS9wcUV4dHJh
Y3RNaW4pLiAgRGVsZXRpb24gaXMgYWxzbyBhbGxvd2VkIChwcURlbGV0ZSk7CisgKiBmb3IgdGhp
cyBwdXJwb3NlIHBxSW5zZXJ0IHJldHVybnMgYSAiaGFuZGxlIiB3aGljaCBpcyBzdXBwbGllZAor
ICogYXMgdGhlIGFyZ3VtZW50LgorICoKKyAqIEFuIGluaXRpYWwgaGVhcCBtYXkgYmUgY3JlYXRl
ZCBlZmZpY2llbnRseSBieSBjYWxsaW5nIHBxSW5zZXJ0CisgKiByZXBlYXRlZGx5LCB0aGVuIGNh
bGxpbmcgcHFJbml0LiAgSW4gYW55IGNhc2UgcHFJbml0IG11c3QgYmUgY2FsbGVkCisgKiBiZWZv
cmUgYW55IG9wZXJhdGlvbnMgb3RoZXIgdGhhbiBwcUluc2VydCBhcmUgdXNlZC4KKyAqCisgKiBJ
ZiB0aGUgaGVhcCBpcyBlbXB0eSwgcHFNaW5pbXVtL3BxRXh0cmFjdE1pbiB3aWxsIHJldHVybiBh
IE5VTEwga2V5LgorICogVGhpcyBtYXkgYWxzbyBiZSB0ZXN0ZWQgd2l0aCBwcUlzRW1wdHkuCisg
Ki8KKyNkZWZpbmUgcHFJbml0KHBxKQkJX19nbF9wcUhlYXBJbml0KHBxKQorI2RlZmluZSBwcUlu
c2VydChwcSxrZXkpCV9fZ2xfcHFIZWFwSW5zZXJ0KHBxLGtleSkKKyNkZWZpbmUgcHFNaW5pbXVt
KHBxKQkJX19nbF9wcUhlYXBNaW5pbXVtKHBxKQorI2RlZmluZSBwcUV4dHJhY3RNaW4ocHEpCV9f
Z2xfcHFIZWFwRXh0cmFjdE1pbihwcSkKKyNkZWZpbmUgcHFEZWxldGUocHEsaGFuZGxlKQlfX2ds
X3BxSGVhcERlbGV0ZShwcSxoYW5kbGUpCisjZGVmaW5lIHBxSXNFbXB0eShwcSkJCV9fZ2xfcHFI
ZWFwSXNFbXB0eShwcSkKKworCisvKiBTaW5jZSB3ZSBzdXBwb3J0IGRlbGV0aW9uIHRoZSBkYXRh
IHN0cnVjdHVyZSBpcyBhIGxpdHRsZSBtb3JlCisgKiBjb21wbGljYXRlZCB0aGFuIGFuIG9yZGlu
YXJ5IGhlYXAuICAibm9kZXMiIGlzIHRoZSBoZWFwIGl0c2VsZjsKKyAqIGFjdGl2ZSBub2RlcyBh
cmUgc3RvcmVkIGluIHRoZSByYW5nZSAxLi5wcS0+c2l6ZS4gIFdoZW4gdGhlCisgKiBoZWFwIGV4
Y2VlZHMgaXRzIGFsbG9jYXRlZCBzaXplIChwcS0+bWF4KSwgaXRzIHNpemUgZG91Ymxlcy4KKyAq
IFRoZSBjaGlsZHJlbiBvZiBub2RlIGkgYXJlIG5vZGVzIDJpIGFuZCAyaSsxLgorICoKKyAqIEVh
Y2ggbm9kZSBzdG9yZXMgYW4gaW5kZXggaW50byBhbiBhcnJheSAiaGFuZGxlcyIuICBFYWNoIGhh
bmRsZQorICogc3RvcmVzIGEga2V5LCBwbHVzIGEgcG9pbnRlciBiYWNrIHRvIHRoZSBub2RlIHdo
aWNoIGN1cnJlbnRseQorICogcmVwcmVzZW50cyB0aGF0IGtleSAoaWUuIG5vZGVzW2hhbmRsZXNb
aV0ubm9kZV0uaGFuZGxlID09IGkpLgorICovCisKK3R5cGVkZWYgdm9pZCAqUFFrZXk7Cit0eXBl
ZGVmIGxvbmcgUFFoYW5kbGU7Cit0eXBlZGVmIHN0cnVjdCBQcmlvcml0eVEgUHJpb3JpdHlROwor
Cit0eXBlZGVmIHN0cnVjdCB7IFBRaGFuZGxlIGhhbmRsZTsgfSBQUW5vZGU7Cit0eXBlZGVmIHN0
cnVjdCB7IFBRa2V5IGtleTsgUFFoYW5kbGUgbm9kZTsgfSBQUWhhbmRsZUVsZW07CisKK3N0cnVj
dCBQcmlvcml0eVEgeworICBQUW5vZGUJKm5vZGVzOworICBQUWhhbmRsZUVsZW0JKmhhbmRsZXM7
CisgIGxvbmcJCXNpemUsIG1heDsKKyAgUFFoYW5kbGUJZnJlZUxpc3Q7CisgIGludAkJaW5pdGlh
bGl6ZWQ7CisgIGludAkJKCpsZXEpKFBRa2V5IGtleTEsIFBRa2V5IGtleTIpOworfTsKKyAgCitQ
cmlvcml0eVEJKnBxTmV3UHJpb3JpdHlRKCBpbnQgKCpsZXEpKFBRa2V5IGtleTEsIFBRa2V5IGtl
eTIpICk7Cit2b2lkCQlwcURlbGV0ZVByaW9yaXR5USggUHJpb3JpdHlRICpwcSApOworCit2b2lk
CQlwcUluaXQoIFByaW9yaXR5USAqcHEgKTsKK1BRaGFuZGxlCXBxSW5zZXJ0KCBQcmlvcml0eVEg
KnBxLCBQUWtleSBrZXkgKTsKK1BRa2V5CQlwcUV4dHJhY3RNaW4oIFByaW9yaXR5USAqcHEgKTsK
K3ZvaWQJCXBxRGVsZXRlKCBQcmlvcml0eVEgKnBxLCBQUWhhbmRsZSBoYW5kbGUgKTsKKworCisj
ZGVmaW5lIF9fZ2xfcHFIZWFwTWluaW11bShwcSkJKChwcSktPmhhbmRsZXNbKHBxKS0+bm9kZXNb
MV0uaGFuZGxlXS5rZXkpCisjZGVmaW5lIF9fZ2xfcHFIZWFwSXNFbXB0eShwcSkJKChwcSktPnNp
emUgPT0gMCkKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
cHJpb3JpdHlxLXNvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xp
YnRlc3MvcHJpb3JpdHlxLXNvcnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvdGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtc29ydC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEy
NCBAQAorLyoKKyoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQg
cG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0
aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGlj
ZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlz
CisqKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vu
c2UuIFlvdSBtYXkgbm90IHVzZQorKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQorKiogb2YgdGhlIExpY2Vuc2Ug
YXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoq
IEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBh
dDoKKyoqIAorKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5v
dGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0
cmlidXRlZCBvbiBhbgorKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1Q
TElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcs
IFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJ
VElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBG
T1IgQQorKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAor
KiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1w
bGVtZW50YXRpb24sCisqKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAw
LCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENv
ZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiog
Q29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMg
aW5kaWNhdGVkCisqKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiog
CisqKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3Jh
bW1pbmcgaW50ZXJmYWNlcworKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdp
dGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQorKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3Rl
bTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEs
IDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVy
c2lvbgorKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBH
cmFwaGljcyB3aXRoIHRoZSBYCisqKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJl
bGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVz
aW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoq
IHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmll
ZCBhcyBiZWluZworKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4x
IFNwZWNpZmljYXRpb24uCisqKgorKi8KKy8qCisqKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkg
MTk5NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlzaW9uJAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWlu
L2dmeC9saWIvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLXNvcnQuaCM1ICQKKyovCisKKyNpZm5kZWYg
X19wcmlvcml0eXFfc29ydF9oXworI2RlZmluZSBfX3ByaW9yaXR5cV9zb3J0X2hfCisKKyNpbmNs
dWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmgiCisKKyN1bmRlZiBQ
UWtleQorI3VuZGVmIFBRaGFuZGxlCisjdW5kZWYgUHJpb3JpdHlRCisjdW5kZWYgcHFOZXdQcmlv
cml0eVEKKyN1bmRlZiBwcURlbGV0ZVByaW9yaXR5UQorI3VuZGVmIHBxSW5pdAorI3VuZGVmIHBx
SW5zZXJ0CisjdW5kZWYgcHFNaW5pbXVtCisjdW5kZWYgcHFFeHRyYWN0TWluCisjdW5kZWYgcHFE
ZWxldGUKKyN1bmRlZiBwcUlzRW1wdHkKKworLyogVXNlICNkZWZpbmUncyBzbyB0aGF0IGFub3Ro
ZXIgaGVhcCBpbXBsZW1lbnRhdGlvbiBjYW4gdXNlIHRoaXMgb25lICovCisKKyNkZWZpbmUgUFFr
ZXkJCQlQUVNvcnRLZXkKKyNkZWZpbmUgUFFoYW5kbGUJCVBRU29ydEhhbmRsZQorI2RlZmluZSBQ
cmlvcml0eVEJCVByaW9yaXR5UVNvcnQKKworI2RlZmluZSBwcU5ld1ByaW9yaXR5UShsZXEpCV9f
Z2xfcHFTb3J0TmV3UHJpb3JpdHlRKGxlcSkKKyNkZWZpbmUgcHFEZWxldGVQcmlvcml0eVEocHEp
CV9fZ2xfcHFTb3J0RGVsZXRlUHJpb3JpdHlRKHBxKQorCisvKiBUaGUgYmFzaWMgb3BlcmF0aW9u
cyBhcmUgaW5zZXJ0aW9uIG9mIGEgbmV3IGtleSAocHFJbnNlcnQpLAorICogYW5kIGV4YW1pbmF0
aW9uL2V4dHJhY3Rpb24gb2YgYSBrZXkgd2hvc2UgdmFsdWUgaXMgbWluaW11bQorICogKHBxTWlu
aW11bS9wcUV4dHJhY3RNaW4pLiAgRGVsZXRpb24gaXMgYWxzbyBhbGxvd2VkIChwcURlbGV0ZSk7
CisgKiBmb3IgdGhpcyBwdXJwb3NlIHBxSW5zZXJ0IHJldHVybnMgYSAiaGFuZGxlIiB3aGljaCBp
cyBzdXBwbGllZAorICogYXMgdGhlIGFyZ3VtZW50LgorICoKKyAqIEFuIGluaXRpYWwgaGVhcCBt
YXkgYmUgY3JlYXRlZCBlZmZpY2llbnRseSBieSBjYWxsaW5nIHBxSW5zZXJ0CisgKiByZXBlYXRl
ZGx5LCB0aGVuIGNhbGxpbmcgcHFJbml0LiAgSW4gYW55IGNhc2UgcHFJbml0IG11c3QgYmUgY2Fs
bGVkCisgKiBiZWZvcmUgYW55IG9wZXJhdGlvbnMgb3RoZXIgdGhhbiBwcUluc2VydCBhcmUgdXNl
ZC4KKyAqCisgKiBJZiB0aGUgaGVhcCBpcyBlbXB0eSwgcHFNaW5pbXVtL3BxRXh0cmFjdE1pbiB3
aWxsIHJldHVybiBhIE5VTEwga2V5LgorICogVGhpcyBtYXkgYWxzbyBiZSB0ZXN0ZWQgd2l0aCBw
cUlzRW1wdHkuCisgKi8KKyNkZWZpbmUgcHFJbml0KHBxKQkJX19nbF9wcVNvcnRJbml0KHBxKQor
I2RlZmluZSBwcUluc2VydChwcSxrZXkpCV9fZ2xfcHFTb3J0SW5zZXJ0KHBxLGtleSkKKyNkZWZp
bmUgcHFNaW5pbXVtKHBxKQkJX19nbF9wcVNvcnRNaW5pbXVtKHBxKQorI2RlZmluZSBwcUV4dHJh
Y3RNaW4ocHEpCV9fZ2xfcHFTb3J0RXh0cmFjdE1pbihwcSkKKyNkZWZpbmUgcHFEZWxldGUocHEs
aGFuZGxlKQlfX2dsX3BxU29ydERlbGV0ZShwcSxoYW5kbGUpCisjZGVmaW5lIHBxSXNFbXB0eShw
cSkJCV9fZ2xfcHFTb3J0SXNFbXB0eShwcSkKKworCisvKiBTaW5jZSB3ZSBzdXBwb3J0IGRlbGV0
aW9uIHRoZSBkYXRhIHN0cnVjdHVyZSBpcyBhIGxpdHRsZSBtb3JlCisgKiBjb21wbGljYXRlZCB0
aGFuIGFuIG9yZGluYXJ5IGhlYXAuICAibm9kZXMiIGlzIHRoZSBoZWFwIGl0c2VsZjsKKyAqIGFj
dGl2ZSBub2RlcyBhcmUgc3RvcmVkIGluIHRoZSByYW5nZSAxLi5wcS0+c2l6ZS4gIFdoZW4gdGhl
CisgKiBoZWFwIGV4Y2VlZHMgaXRzIGFsbG9jYXRlZCBzaXplIChwcS0+bWF4KSwgaXRzIHNpemUg
ZG91Ymxlcy4KKyAqIFRoZSBjaGlsZHJlbiBvZiBub2RlIGkgYXJlIG5vZGVzIDJpIGFuZCAyaSsx
LgorICoKKyAqIEVhY2ggbm9kZSBzdG9yZXMgYW4gaW5kZXggaW50byBhbiBhcnJheSAiaGFuZGxl
cyIuICBFYWNoIGhhbmRsZQorICogc3RvcmVzIGEga2V5LCBwbHVzIGEgcG9pbnRlciBiYWNrIHRv
IHRoZSBub2RlIHdoaWNoIGN1cnJlbnRseQorICogcmVwcmVzZW50cyB0aGF0IGtleSAoaWUuIG5v
ZGVzW2hhbmRsZXNbaV0ubm9kZV0uaGFuZGxlID09IGkpLgorICovCisKK3R5cGVkZWYgUFFIZWFw
S2V5IFBRa2V5OwordHlwZWRlZiBQUUhlYXBIYW5kbGUgUFFoYW5kbGU7Cit0eXBlZGVmIHN0cnVj
dCBQcmlvcml0eVEgUHJpb3JpdHlROworCitzdHJ1Y3QgUHJpb3JpdHlRIHsKKyAgUHJpb3JpdHlR
SGVhcAkqaGVhcDsKKyAgUFFrZXkJCSprZXlzOworICBQUWtleQkJKipvcmRlcjsKKyAgUFFoYW5k
bGUJc2l6ZSwgbWF4OworICBpbnQJCWluaXRpYWxpemVkOworICBpbnQJCSgqbGVxKShQUWtleSBr
ZXkxLCBQUWtleSBrZXkyKTsKK307CisgIAorUHJpb3JpdHlRCSpwcU5ld1ByaW9yaXR5USggaW50
ICgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBrZXkyKSApOwordm9pZAkJcHFEZWxldGVQcmlvcml0
eVEoIFByaW9yaXR5USAqcHEgKTsKKworaW50CQlwcUluaXQoIFByaW9yaXR5USAqcHEgKTsKK1BR
aGFuZGxlCXBxSW5zZXJ0KCBQcmlvcml0eVEgKnBxLCBQUWtleSBrZXkgKTsKK1BRa2V5CQlwcUV4
dHJhY3RNaW4oIFByaW9yaXR5USAqcHEgKTsKK3ZvaWQJCXBxRGVsZXRlKCBQcmlvcml0eVEgKnBx
LCBQUWhhbmRsZSBoYW5kbGUgKTsKKworUFFrZXkJCXBxTWluaW11bSggUHJpb3JpdHlRICpwcSAp
OworaW50CQlwcUlzRW1wdHkoIFByaW9yaXR5USAqcHEgKTsKKworI2VuZGlmCkluZGV4OiBXZWJD
b3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI2NyBAQAorLyoKKyoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRv
IHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQorKiogbWFkZSBzdWJqZWN0IHRv
IGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQorKiog
U29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250
ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMg
b2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQorKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQorKiogb2Yg
dGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2Vydmlj
ZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0
My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVC
CisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0
d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQ
UkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCisqKiBESVNDTEFJTUVE
LCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBB
TkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElU
WSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdF
TUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5H
TCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51
YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKKyoqIEluYy4gVGhl
IE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGlj
cywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBh
cnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGlj
YXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNv
bmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQorKiogT3BlbkdMKFIpIEdy
YXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQK
KyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkg
TGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5k
IE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCisqKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJz
aW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKKyoqIHdh
cyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVt
ZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRl
bnRseSB2ZXJpZmllZCBhcyBiZWluZworKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2
ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisqKgorKi8KKy8qCisqKiBBdXRob3I6IEVyaWMg
VmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0ZSQgJFJldmlzaW9uJAorKiogJEhlYWRlcjog
Ly9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmMjNSAkCisqLworCisj
aW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CQkvKiBMT05HX01BWCAqLwor
I2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9zLmgiCisj
aW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgorCisvKiBJbmNsdWRl
IGFsbCB0aGUgY29kZSBmb3IgdGhlIHJlZ3VsYXIgaGVhcC1iYXNlZCBxdWV1ZSBoZXJlLiAqLwor
CisjaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5jIgorCisv
KiBOb3cgcmVkZWZpbmUgYWxsIHRoZSBmdW5jdGlvbiBuYW1lcyB0byBtYXAgdG8gdGhlaXIgIlNv
cnQiIHZlcnNpb25zLiAqLworCisjaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlv
cml0eXEtc29ydC5oIgorCisvKiByZWFsbHkgX19nbF9wcVNvcnROZXdQcmlvcml0eVEgKi8KK1By
aW9yaXR5USAqcHFOZXdQcmlvcml0eVEoIGludCAoKmxlcSkoUFFrZXkga2V5MSwgUFFrZXkga2V5
MikgKQoreworICBQcmlvcml0eVEgKnBxID0gKFByaW9yaXR5USAqKW1lbUFsbG9jKCBzaXplb2Yo
IFByaW9yaXR5USApKTsKKyAgaWYgKHBxID09IE5VTEwpIHJldHVybiBOVUxMOworCisgIHBxLT5o
ZWFwID0gX19nbF9wcUhlYXBOZXdQcmlvcml0eVEoIGxlcSApOworICBpZiAocHEtPmhlYXAgPT0g
TlVMTCkgeworICAgICBtZW1GcmVlKHBxKTsKKyAgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBw
cS0+a2V5cyA9IChQUUhlYXBLZXkgKiltZW1BbGxvYyggSU5JVF9TSVpFICogc2l6ZW9mKHBxLT5r
ZXlzWzBdKSApOworICBpZiAocHEtPmtleXMgPT0gTlVMTCkgeworICAgICBfX2dsX3BxSGVhcERl
bGV0ZVByaW9yaXR5UShwcS0+aGVhcCk7CisgICAgIG1lbUZyZWUocHEpOworICAgICByZXR1cm4g
TlVMTDsKKyAgfQorCisgIHBxLT5zaXplID0gMDsKKyAgcHEtPm1heCA9IElOSVRfU0laRTsKKyAg
cHEtPmluaXRpYWxpemVkID0gRkFMU0U7CisgIHBxLT5sZXEgPSBsZXE7CisgIHJldHVybiBwcTsK
K30KKworLyogcmVhbGx5IF9fZ2xfcHFTb3J0RGVsZXRlUHJpb3JpdHlRICovCit2b2lkIHBxRGVs
ZXRlUHJpb3JpdHlRKCBQcmlvcml0eVEgKnBxICkKK3sKKyAgYXNzZXJ0KHBxICE9IE5VTEwpOyAK
KyAgaWYgKHBxLT5oZWFwICE9IE5VTEwpIF9fZ2xfcHFIZWFwRGVsZXRlUHJpb3JpdHlRKCBwcS0+
aGVhcCApOworICBpZiAocHEtPm9yZGVyICE9IE5VTEwpIG1lbUZyZWUoIHBxLT5vcmRlciApOwor
ICBpZiAocHEtPmtleXMgIT0gTlVMTCkgbWVtRnJlZSggcHEtPmtleXMgKTsKKyAgbWVtRnJlZSgg
cHEgKTsKK30KKworCisjZGVmaW5lIExUKHgseSkJCSghIExFUSh5LHgpKQorI2RlZmluZSBHVCh4
LHkpCQkoISBMRVEoeCx5KSkKKyNkZWZpbmUgU3dhcChhLGIpCWlmKDEpe1BRa2V5ICp0bXAgPSAq
YTsgKmEgPSAqYjsgKmIgPSB0bXA7fWVsc2UKKworLyogcmVhbGx5IF9fZ2xfcHFTb3J0SW5pdCAq
LworaW50IHBxSW5pdCggUHJpb3JpdHlRICpwcSApCit7CisgIFBRa2V5ICoqcCwgKipyLCAqKmks
ICoqaiwgKnBpdjsKKyAgc3RydWN0IHsgUFFrZXkgKipwLCAqKnI7IH0gU3RhY2tbNTBdLCAqdG9w
ID0gU3RhY2s7CisgIHVuc2lnbmVkIGxvbmcgc2VlZCA9IDIwMTY0NzMyODM7CisKKyAgLyogQ3Jl
YXRlIGFuIGFycmF5IG9mIGluZGlyZWN0IHBvaW50ZXJzIHRvIHRoZSBrZXlzLCBzbyB0aGF0IHdl
CisgICAqIHRoZSBoYW5kbGVzIHdlIGhhdmUgcmV0dXJuZWQgYXJlIHN0aWxsIHZhbGlkLgorICAg
Ki8KKy8qCisgIHBxLT5vcmRlciA9IChQUUhlYXBLZXkgKiopbWVtQWxsb2MoIChzaXplX3QpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBxLT5zaXplICogc2l6ZW9mKHBxLT5v
cmRlclswXSkpICk7CisqLworICBwcS0+b3JkZXIgPSAoUFFIZWFwS2V5ICoqKW1lbUFsbG9jKCAo
c2l6ZV90KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocHEtPnNpemUrMSkg
KiBzaXplb2YocHEtPm9yZGVyWzBdKSkgKTsKKy8qIHRoZSBwcmV2aW91cyBsaW5lIGlzIGEgcGF0
Y2ggdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGZhY3QgdGhhdCBJQk0gKi8KKy8qIG1hY2hpbmVzIHJl
dHVybiBhIG51bGwgb24gYSBtYWxsb2Mgb2YgemVybyBieXRlcyAodW5saWtlIFNHSSksICAgKi8K
Ky8qIHNvIHdlIGhhdmUgdG8gcHV0IGluIHRoaXMgZGVmZW5zZSB0byBndWFyZCBhZ2FpbnN0IGEg
bWVtb3J5ICAgICAgKi8KKy8qIGZhdWx0IGZvdXIgbGluZXMgZG93bi4gZnJvbSBmb3NzdW1AYXVz
dGluLmlibS5jb20uICAgICAgICAgICAgICAgKi8KKyAgaWYgKHBxLT5vcmRlciA9PSBOVUxMKSBy
ZXR1cm4gMDsKKworICBwID0gcHEtPm9yZGVyOworICByID0gcCArIHBxLT5zaXplIC0gMTsKKyAg
Zm9yKCBwaXYgPSBwcS0+a2V5cywgaSA9IHA7IGkgPD0gcjsgKytwaXYsICsraSApIHsKKyAgICAq
aSA9IHBpdjsKKyAgfQorCisgIC8qIFNvcnQgdGhlIGluZGlyZWN0IHBvaW50ZXJzIGluIGRlc2Nl
bmRpbmcgb3JkZXIsCisgICAqIHVzaW5nIHJhbmRvbWl6ZWQgUXVpY2tzb3J0CisgICAqLworICB0
b3AtPnAgPSBwOyB0b3AtPnIgPSByOyArK3RvcDsKKyAgd2hpbGUoIC0tdG9wID49IFN0YWNrICkg
eworICAgIHAgPSB0b3AtPnA7CisgICAgciA9IHRvcC0+cjsKKyAgICB3aGlsZSggciA+IHAgKyAx
MCApIHsKKyAgICAgIHNlZWQgPSBzZWVkICogMTUzOTQxNTgyMSArIDE7CisgICAgICBpID0gcCAr
IHNlZWQgJSAociAtIHAgKyAxKTsKKyAgICAgIHBpdiA9ICppOworICAgICAgKmkgPSAqcDsKKyAg
ICAgICpwID0gcGl2OworICAgICAgaSA9IHAgLSAxOworICAgICAgaiA9IHIgKyAxOworICAgICAg
ZG8geworCWRvIHsgKytpOyB9IHdoaWxlKCBHVCggKippLCAqcGl2ICkpOworCWRvIHsgLS1qOyB9
IHdoaWxlKCBMVCggKipqLCAqcGl2ICkpOworCVN3YXAoIGksIGogKTsKKyAgICAgIH0gd2hpbGUo
IGkgPCBqICk7CisgICAgICBTd2FwKCBpLCBqICk7CS8qIFVuZG8gbGFzdCBzd2FwICovCisgICAg
ICBpZiggaSAtIHAgPCByIC0gaiApIHsKKwl0b3AtPnAgPSBqKzE7IHRvcC0+ciA9IHI7ICsrdG9w
OworCXIgPSBpLTE7CisgICAgICB9IGVsc2UgeworCXRvcC0+cCA9IHA7IHRvcC0+ciA9IGktMTsg
Kyt0b3A7CisJcCA9IGorMTsKKyAgICAgIH0KKyAgICB9CisgICAgLyogSW5zZXJ0aW9uIHNvcnQg
c21hbGwgbGlzdHMgKi8KKyAgICBmb3IoIGkgPSBwKzE7IGkgPD0gcjsgKytpICkgeworICAgICAg
cGl2ID0gKmk7CisgICAgICBmb3IoIGogPSBpOyBqID4gcCAmJiBMVCggKiooai0xKSwgKnBpdiAp
OyAtLWogKSB7CisJKmogPSAqKGotMSk7CisgICAgICB9CisgICAgICAqaiA9IHBpdjsKKyAgICB9
CisgIH0KKyAgcHEtPm1heCA9IHBxLT5zaXplOworICBwcS0+aW5pdGlhbGl6ZWQgPSBUUlVFOwor
ICBfX2dsX3BxSGVhcEluaXQoIHBxLT5oZWFwICk7CS8qIGFsd2F5cyBzdWNjZWVkcyAqLworCisj
aWZuZGVmIE5ERUJVRworICBwID0gcHEtPm9yZGVyOworICByID0gcCArIHBxLT5zaXplIC0gMTsK
KyAgZm9yKCBpID0gcDsgaSA8IHI7ICsraSApIHsKKyAgICBhc3NlcnQoIExFUSggKiooaSsxKSwg
KippICkpOworICB9CisjZW5kaWYKKworICByZXR1cm4gMTsKK30KKworLyogcmVhbGx5IF9fZ2xf
cHFTb3J0SW5zZXJ0ICovCisvKiByZXR1cm5zIExPTkdfTUFYIGlmZiBvdXQgb2YgbWVtb3J5ICov
IAorUFFoYW5kbGUgcHFJbnNlcnQoIFByaW9yaXR5USAqcHEsIFBRa2V5IGtleU5ldyApCit7Cisg
IGxvbmcgY3VycjsKKworICBpZiggcHEtPmluaXRpYWxpemVkICkgeworICAgIHJldHVybiBfX2ds
X3BxSGVhcEluc2VydCggcHEtPmhlYXAsIGtleU5ldyApOworICB9CisgIGN1cnIgPSBwcS0+c2l6
ZTsKKyAgaWYoICsrIHBxLT5zaXplID49IHBxLT5tYXggKSB7CisgICAgUFFrZXkgKnNhdmVLZXk9
IHBxLT5rZXlzOworCisgICAgLyogSWYgdGhlIGhlYXAgb3ZlcmZsb3dzLCBkb3VibGUgaXRzIHNp
emUuICovCisgICAgcHEtPm1heCA8PD0gMTsKKyAgICBwcS0+a2V5cyA9IChQUUhlYXBLZXkgKilt
ZW1SZWFsbG9jKCBwcS0+a2V5cywgCisJIAkgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90
KQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcS0+bWF4ICogc2l6ZW9mKCBw
cS0+a2V5c1swXSApKSk7CisgICAgaWYgKHBxLT5rZXlzID09IE5VTEwpIHsJCisgICAgICAgcHEt
PmtleXMgPSBzYXZlS2V5OwkvKiByZXN0b3JlIHB0ciB0byBmcmVlIHVwb24gcmV0dXJuICovCisg
ICAgICAgcmV0dXJuIExPTkdfTUFYOworICAgIH0KKyAgfQorICBhc3NlcnQoY3VyciAhPSBMT05H
X01BWCk7CQorICBwcS0+a2V5c1tjdXJyXSA9IGtleU5ldzsKKworICAvKiBOZWdhdGl2ZSBoYW5k
bGVzIGluZGV4IHRoZSBzb3J0ZWQgYXJyYXkuICovCisgIHJldHVybiAtKGN1cnIrMSk7Cit9CisK
Ky8qIHJlYWxseSBfX2dsX3BxU29ydEV4dHJhY3RNaW4gKi8KK1BRa2V5IHBxRXh0cmFjdE1pbigg
UHJpb3JpdHlRICpwcSApCit7CisgIFBRa2V5IHNvcnRNaW4sIGhlYXBNaW47CisKKyAgaWYoIHBx
LT5zaXplID09IDAgKSB7CisgICAgcmV0dXJuIF9fZ2xfcHFIZWFwRXh0cmFjdE1pbiggcHEtPmhl
YXAgKTsKKyAgfQorICBzb3J0TWluID0gKihwcS0+b3JkZXJbcHEtPnNpemUtMV0pOworICBpZigg
ISBfX2dsX3BxSGVhcElzRW1wdHkoIHBxLT5oZWFwICkpIHsKKyAgICBoZWFwTWluID0gX19nbF9w
cUhlYXBNaW5pbXVtKCBwcS0+aGVhcCApOworICAgIGlmKCBMRVEoIGhlYXBNaW4sIHNvcnRNaW4g
KSkgeworICAgICAgcmV0dXJuIF9fZ2xfcHFIZWFwRXh0cmFjdE1pbiggcHEtPmhlYXAgKTsKKyAg
ICB9CisgIH0KKyAgZG8geworICAgIC0tIHBxLT5zaXplOworICB9IHdoaWxlKCBwcS0+c2l6ZSA+
IDAgJiYgKihwcS0+b3JkZXJbcHEtPnNpemUtMV0pID09IE5VTEwgKTsKKyAgcmV0dXJuIHNvcnRN
aW47Cit9CisKKy8qIHJlYWxseSBfX2dsX3BxU29ydE1pbmltdW0gKi8KK1BRa2V5IHBxTWluaW11
bSggUHJpb3JpdHlRICpwcSApCit7CisgIFBRa2V5IHNvcnRNaW4sIGhlYXBNaW47CisKKyAgaWYo
IHBxLT5zaXplID09IDAgKSB7CisgICAgcmV0dXJuIF9fZ2xfcHFIZWFwTWluaW11bSggcHEtPmhl
YXAgKTsKKyAgfQorICBzb3J0TWluID0gKihwcS0+b3JkZXJbcHEtPnNpemUtMV0pOworICBpZigg
ISBfX2dsX3BxSGVhcElzRW1wdHkoIHBxLT5oZWFwICkpIHsKKyAgICBoZWFwTWluID0gX19nbF9w
cUhlYXBNaW5pbXVtKCBwcS0+aGVhcCApOworICAgIGlmKCBMRVEoIGhlYXBNaW4sIHNvcnRNaW4g
KSkgeworICAgICAgcmV0dXJuIGhlYXBNaW47CisgICAgfQorICB9CisgIHJldHVybiBzb3J0TWlu
OworfQorCisvKiByZWFsbHkgX19nbF9wcVNvcnRJc0VtcHR5ICovCitpbnQgcHFJc0VtcHR5KCBQ
cmlvcml0eVEgKnBxICkKK3sKKyAgcmV0dXJuIChwcS0+c2l6ZSA9PSAwKSAmJiBfX2dsX3BxSGVh
cElzRW1wdHkoIHBxLT5oZWFwICk7Cit9CisKKy8qIHJlYWxseSBfX2dsX3BxU29ydERlbGV0ZSAq
Lwordm9pZCBwcURlbGV0ZSggUHJpb3JpdHlRICpwcSwgUFFoYW5kbGUgY3VyciApCit7CisgIGlm
KCBjdXJyID49IDAgKSB7CisgICAgX19nbF9wcUhlYXBEZWxldGUoIHBxLT5oZWFwLCBjdXJyICk7
CisgICAgcmV0dXJuOworICB9CisgIGN1cnIgPSAtKGN1cnIrMSk7CisgIGFzc2VydCggY3VyciA8
IHBxLT5tYXggJiYgcHEtPmtleXNbY3Vycl0gIT0gTlVMTCApOworCisgIHBxLT5rZXlzW2N1cnJd
ID0gTlVMTDsKKyAgd2hpbGUoIHBxLT5zaXplID4gMCAmJiAqKHBxLT5vcmRlcltwcS0+c2l6ZS0x
XSkgPT0gTlVMTCApIHsKKyAgICAtLSBwcS0+c2l6ZTsKKyAgfQorfQpJbmRleDogV2ViQ29yZS90
aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMjQgQEAKKy8qCisqKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUg
ZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKKyoqIG1hZGUgc3ViamVjdCB0byBhbiBh
bHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKKyoqIFNvZnR3
YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMg
b2YgdGhpcworKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRo
ZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKKyoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKKyoqIG9mIHRoZSBM
aWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAx
NjAwCisqKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1
MSwgb3IgYXQ6CisqKiAKKyoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgorKiog
CisqKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUg
aXMgZGlzdHJpYnV0ZWQgb24gYW4KKyoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1Mg
QU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUworKiogRElTQ0xBSU1FRCwgSU5D
TFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECisq
KiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJ
VE5FU1MgRk9SIEEKKyoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQu
CisqKiAKKyoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2Ft
cGxlIEltcGxlbWVudGF0aW9uLAorKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAy
NiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCisqKiBJbmMuIFRoZSBPcmln
aW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIElu
Yy4KKyoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVz
IGlzIGFzIGluZGljYXRlZAorKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyoqIAorKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9u
IHByb2dyYW1taW5nIGludGVyZmFjZXMKKyoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5j
dGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKKyoqIE9wZW5HTChSKSBHcmFwaGlj
cyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCisqKiBB
cHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJh
cnkgKFZlcnNpb24KKyoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVu
R0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAorKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAx
LjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCisqKiB3YXMgY3Jl
YXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0
aW9uCisqKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkg
dmVyaWZpZWQgYXMgYmVpbmcKKyoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lv
biAxLjIuMSBTcGVjaWZpY2F0aW9uLgorKioKKyovCisvKgorKiogQXV0aG9yOiBFcmljIFZlYWNo
LCBKdWx5IDE5OTQuCisqKgorKiogJERhdGUkICRSZXZpc2lvbiQKKyoqICRIZWFkZXI6IC8vZGVw
b3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oIzUgJAorKi8KKworI2lmbmRl
ZiBfX3ByaW9yaXR5cV9zb3J0X2hfCisjZGVmaW5lIF9fcHJpb3JpdHlxX3NvcnRfaF8KKworI2lu
Y2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaCIKKworI3VuZGVm
IFBRa2V5CisjdW5kZWYgUFFoYW5kbGUKKyN1bmRlZiBQcmlvcml0eVEKKyN1bmRlZiBwcU5ld1By
aW9yaXR5UQorI3VuZGVmIHBxRGVsZXRlUHJpb3JpdHlRCisjdW5kZWYgcHFJbml0CisjdW5kZWYg
cHFJbnNlcnQKKyN1bmRlZiBwcU1pbmltdW0KKyN1bmRlZiBwcUV4dHJhY3RNaW4KKyN1bmRlZiBw
cURlbGV0ZQorI3VuZGVmIHBxSXNFbXB0eQorCisvKiBVc2UgI2RlZmluZSdzIHNvIHRoYXQgYW5v
dGhlciBoZWFwIGltcGxlbWVudGF0aW9uIGNhbiB1c2UgdGhpcyBvbmUgKi8KKworI2RlZmluZSBQ
UWtleQkJCVBRU29ydEtleQorI2RlZmluZSBQUWhhbmRsZQkJUFFTb3J0SGFuZGxlCisjZGVmaW5l
IFByaW9yaXR5UQkJUHJpb3JpdHlRU29ydAorCisjZGVmaW5lIHBxTmV3UHJpb3JpdHlRKGxlcSkJ
X19nbF9wcVNvcnROZXdQcmlvcml0eVEobGVxKQorI2RlZmluZSBwcURlbGV0ZVByaW9yaXR5UShw
cSkJX19nbF9wcVNvcnREZWxldGVQcmlvcml0eVEocHEpCisKKy8qIFRoZSBiYXNpYyBvcGVyYXRp
b25zIGFyZSBpbnNlcnRpb24gb2YgYSBuZXcga2V5IChwcUluc2VydCksCisgKiBhbmQgZXhhbWlu
YXRpb24vZXh0cmFjdGlvbiBvZiBhIGtleSB3aG9zZSB2YWx1ZSBpcyBtaW5pbXVtCisgKiAocHFN
aW5pbXVtL3BxRXh0cmFjdE1pbikuICBEZWxldGlvbiBpcyBhbHNvIGFsbG93ZWQgKHBxRGVsZXRl
KTsKKyAqIGZvciB0aGlzIHB1cnBvc2UgcHFJbnNlcnQgcmV0dXJucyBhICJoYW5kbGUiIHdoaWNo
IGlzIHN1cHBsaWVkCisgKiBhcyB0aGUgYXJndW1lbnQuCisgKgorICogQW4gaW5pdGlhbCBoZWFw
IG1heSBiZSBjcmVhdGVkIGVmZmljaWVudGx5IGJ5IGNhbGxpbmcgcHFJbnNlcnQKKyAqIHJlcGVh
dGVkbHksIHRoZW4gY2FsbGluZyBwcUluaXQuICBJbiBhbnkgY2FzZSBwcUluaXQgbXVzdCBiZSBj
YWxsZWQKKyAqIGJlZm9yZSBhbnkgb3BlcmF0aW9ucyBvdGhlciB0aGFuIHBxSW5zZXJ0IGFyZSB1
c2VkLgorICoKKyAqIElmIHRoZSBoZWFwIGlzIGVtcHR5LCBwcU1pbmltdW0vcHFFeHRyYWN0TWlu
IHdpbGwgcmV0dXJuIGEgTlVMTCBrZXkuCisgKiBUaGlzIG1heSBhbHNvIGJlIHRlc3RlZCB3aXRo
IHBxSXNFbXB0eS4KKyAqLworI2RlZmluZSBwcUluaXQocHEpCQlfX2dsX3BxU29ydEluaXQocHEp
CisjZGVmaW5lIHBxSW5zZXJ0KHBxLGtleSkJX19nbF9wcVNvcnRJbnNlcnQocHEsa2V5KQorI2Rl
ZmluZSBwcU1pbmltdW0ocHEpCQlfX2dsX3BxU29ydE1pbmltdW0ocHEpCisjZGVmaW5lIHBxRXh0
cmFjdE1pbihwcSkJX19nbF9wcVNvcnRFeHRyYWN0TWluKHBxKQorI2RlZmluZSBwcURlbGV0ZShw
cSxoYW5kbGUpCV9fZ2xfcHFTb3J0RGVsZXRlKHBxLGhhbmRsZSkKKyNkZWZpbmUgcHFJc0VtcHR5
KHBxKQkJX19nbF9wcVNvcnRJc0VtcHR5KHBxKQorCisKKy8qIFNpbmNlIHdlIHN1cHBvcnQgZGVs
ZXRpb24gdGhlIGRhdGEgc3RydWN0dXJlIGlzIGEgbGl0dGxlIG1vcmUKKyAqIGNvbXBsaWNhdGVk
IHRoYW4gYW4gb3JkaW5hcnkgaGVhcC4gICJub2RlcyIgaXMgdGhlIGhlYXAgaXRzZWxmOworICog
YWN0aXZlIG5vZGVzIGFyZSBzdG9yZWQgaW4gdGhlIHJhbmdlIDEuLnBxLT5zaXplLiAgV2hlbiB0
aGUKKyAqIGhlYXAgZXhjZWVkcyBpdHMgYWxsb2NhdGVkIHNpemUgKHBxLT5tYXgpLCBpdHMgc2l6
ZSBkb3VibGVzLgorICogVGhlIGNoaWxkcmVuIG9mIG5vZGUgaSBhcmUgbm9kZXMgMmkgYW5kIDJp
KzEuCisgKgorICogRWFjaCBub2RlIHN0b3JlcyBhbiBpbmRleCBpbnRvIGFuIGFycmF5ICJoYW5k
bGVzIi4gIEVhY2ggaGFuZGxlCisgKiBzdG9yZXMgYSBrZXksIHBsdXMgYSBwb2ludGVyIGJhY2sg
dG8gdGhlIG5vZGUgd2hpY2ggY3VycmVudGx5CisgKiByZXByZXNlbnRzIHRoYXQga2V5IChpZS4g
bm9kZXNbaGFuZGxlc1tpXS5ub2RlXS5oYW5kbGUgPT0gaSkuCisgKi8KKwordHlwZWRlZiBQUUhl
YXBLZXkgUFFrZXk7Cit0eXBlZGVmIFBRSGVhcEhhbmRsZSBQUWhhbmRsZTsKK3R5cGVkZWYgc3Ry
dWN0IFByaW9yaXR5USBQcmlvcml0eVE7CisKK3N0cnVjdCBQcmlvcml0eVEgeworICBQcmlvcml0
eVFIZWFwCSpoZWFwOworICBQUWtleQkJKmtleXM7CisgIFBRa2V5CQkqKm9yZGVyOworICBQUWhh
bmRsZQlzaXplLCBtYXg7CisgIGludAkJaW5pdGlhbGl6ZWQ7CisgIGludAkJKCpsZXEpKFBRa2V5
IGtleTEsIFBRa2V5IGtleTIpOworfTsKKyAgCitQcmlvcml0eVEJKnBxTmV3UHJpb3JpdHlRKCBp
bnQgKCpsZXEpKFBRa2V5IGtleTEsIFBRa2V5IGtleTIpICk7Cit2b2lkCQlwcURlbGV0ZVByaW9y
aXR5USggUHJpb3JpdHlRICpwcSApOworCitpbnQJCXBxSW5pdCggUHJpb3JpdHlRICpwcSApOwor
UFFoYW5kbGUJcHFJbnNlcnQoIFByaW9yaXR5USAqcHEsIFBRa2V5IGtleSApOworUFFrZXkJCXBx
RXh0cmFjdE1pbiggUHJpb3JpdHlRICpwcSApOwordm9pZAkJcHFEZWxldGUoIFByaW9yaXR5USAq
cHEsIFBRaGFuZGxlIGhhbmRsZSApOworCitQUWtleQkJcHFNaW5pbXVtKCBQcmlvcml0eVEgKnBx
ICk7CitpbnQJCXBxSXNFbXB0eSggUHJpb3JpdHlRICpwcSApOworCisjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmMJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTA1IEBACisvKgorKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4
dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisqKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0
ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCisqKiBTb2Z0d2Fy
ZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUg
TGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5CisqKiBvZiB0aGUgTGlj
ZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYw
MAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEs
IG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKKyoqIAor
KiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFO
RCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKKyoqIERJU0NMQUlNRUQsIElOQ0xV
RElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAorKiog
Q09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRO
RVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgor
KiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYs
IDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAorKiogSW5jLiBUaGUgT3JpZ2lu
YWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMu
CisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBp
cyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBw
cm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rp
b24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisqKiBPcGVuR0woUikgR3JhcGhpY3Mg
U3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAorKiogQXBy
aWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5
IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdM
KFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4z
KSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQorKiogd2FzIGNyZWF0
ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlv
bgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZl
cmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24g
MS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoKKyoqIEF1dGhvcjogRXJpYyBWZWFjaCwg
SnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNpb24kCisqKiAkSGVhZGVyOiAvL2RlcG90
L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9yZW5kZXIuYyM1ICQKKyovCisKKyNpbmNsdWRlIDxh
c3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9n
bHVvcy5oIgorI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1
ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgiCisjaW5jbHVkZSAidGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy90ZXNzLmgiCisKKyNkZWZpbmUgVFJVRSAxCisjZGVmaW5lIEZBTFNFIDAK
KworLyogVGhpcyBzdHJ1Y3R1cmUgcmVtZW1iZXJzIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGFi
b3V0IGEgcHJpbWl0aXZlCisgKiB0byBiZSBhYmxlIHRvIHJlbmRlciBpdCBsYXRlciwgb25jZSB3
ZSBoYXZlIGRldGVybWluZWQgd2hpY2gKKyAqIHByaW1pdGl2ZSBpcyBhYmxlIHRvIHVzZSB0aGUg
bW9zdCB0cmlhbmdsZXMuCisgKi8KK3N0cnVjdCBGYWNlQ291bnQgeworICBsb25nCQlzaXplOwkJ
LyogbnVtYmVyIG9mIHRyaWFuZ2xlcyB1c2VkICovCisgIEdMVWhhbGZFZGdlCSplU3RhcnQ7CS8q
IGVkZ2Ugd2hlcmUgdGhpcyBwcmltaXRpdmUgc3RhcnRzICovCisgIHZvaWQJCSgqcmVuZGVyKShH
TFV0ZXNzZWxhdG9yICosIEdMVWhhbGZFZGdlICosIGxvbmcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKiByb3V0aW5lIHRvIHJlbmRlciB0aGlzIHByaW1pdGl2ZSAqLworfTsK
Kworc3RhdGljIHN0cnVjdCBGYWNlQ291bnQgTWF4aW11bUZhbiggR0xVaGFsZkVkZ2UgKmVPcmln
ICk7CitzdGF0aWMgc3RydWN0IEZhY2VDb3VudCBNYXhpbXVtU3RyaXAoIEdMVWhhbGZFZGdlICpl
T3JpZyApOworCitzdGF0aWMgdm9pZCBSZW5kZXJGYW4oIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdM
VWhhbGZFZGdlICplU3RhcnQsIGxvbmcgc2l6ZSApOworc3RhdGljIHZvaWQgUmVuZGVyU3RyaXAo
IEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWhhbGZFZGdlICplU3RhcnQsIGxvbmcgc2l6ZSApOwor
c3RhdGljIHZvaWQgUmVuZGVyVHJpYW5nbGUoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWhhbGZF
ZGdlICplU3RhcnQsCisJCQkgICAgbG9uZyBzaXplICk7CisKK3N0YXRpYyB2b2lkIFJlbmRlck1h
eGltdW1GYWNlR3JvdXAoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWZhY2UgKmZPcmlnICk7Citz
dGF0aWMgdm9pZCBSZW5kZXJMb25lbHlUcmlhbmdsZXMoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdM
VWZhY2UgKmhlYWQgKTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogU3RyaXBzIGFu
ZCBGYW5zIGRlY29tcG9zaXRpb24gKioqKioqKioqKioqKioqKioqLworCisvKiBfX2dsX3JlbmRl
ck1lc2goIHRlc3MsIG1lc2ggKSB0YWtlcyBhIG1lc2ggYW5kIGJyZWFrcyBpdCBpbnRvIHRyaWFu
Z2xlCisgKiBmYW5zLCBzdHJpcHMsIGFuZCBzZXBhcmF0ZSB0cmlhbmdsZXMuICBBIHN1YnN0YW50
aWFsIGVmZm9ydCBpcyBtYWRlCisgKiB0byB1c2UgYXMgZmV3IHJlbmRlcmluZyBwcmltaXRpdmVz
IGFzIHBvc3NpYmxlIChpZS4gdG8gbWFrZSB0aGUgZmFucworICogYW5kIHN0cmlwcyBhcyBsYXJn
ZSBhcyBwb3NzaWJsZSkuCisgKgorICogVGhlIHJlbmRlcmluZyBvdXRwdXQgaXMgcHJvdmlkZWQg
YXMgY2FsbGJhY2tzIChzZWUgdGhlIGFwaSkuCisgKi8KK3ZvaWQgX19nbF9yZW5kZXJNZXNoKCBH
TFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVtZXNoICptZXNoICkKK3sKKyAgR0xVZmFjZSAqZjsKKwor
ICAvKiBNYWtlIGEgbGlzdCBvZiBzZXBhcmF0ZSB0cmlhbmdsZXMgc28gd2UgY2FuIHJlbmRlciB0
aGVtIGFsbCBhdCBvbmNlICovCisgIHRlc3MtPmxvbmVseVRyaUxpc3QgPSBOVUxMOworCisgIGZv
ciggZiA9IG1lc2gtPmZIZWFkLm5leHQ7IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0gZi0+bmV4dCAp
IHsKKyAgICBmLT5tYXJrZWQgPSBGQUxTRTsKKyAgfQorICBmb3IoIGYgPSBtZXNoLT5mSGVhZC5u
ZXh0OyBmICE9ICZtZXNoLT5mSGVhZDsgZiA9IGYtPm5leHQgKSB7CisKKyAgICAvKiBXZSBleGFt
aW5lIGFsbCBmYWNlcyBpbiBhbiBhcmJpdHJhcnkgb3JkZXIuICBXaGVuZXZlciB3ZSBmaW5kCisg
ICAgICogYW4gdW5wcm9jZXNzZWQgZmFjZSBGLCB3ZSBvdXRwdXQgYSBncm91cCBvZiBmYWNlcyBp
bmNsdWRpbmcgRgorICAgICAqIHdob3NlIHNpemUgaXMgbWF4aW11bS4KKyAgICAgKi8KKyAgICBp
ZiggZi0+aW5zaWRlICYmICEgZi0+bWFya2VkICkgeworICAgICAgUmVuZGVyTWF4aW11bUZhY2VH
cm91cCggdGVzcywgZiApOworICAgICAgYXNzZXJ0KCBmLT5tYXJrZWQgKTsKKyAgICB9CisgIH0K
KyAgaWYoIHRlc3MtPmxvbmVseVRyaUxpc3QgIT0gTlVMTCApIHsKKyAgICBSZW5kZXJMb25lbHlU
cmlhbmdsZXMoIHRlc3MsIHRlc3MtPmxvbmVseVRyaUxpc3QgKTsKKyAgICB0ZXNzLT5sb25lbHlU
cmlMaXN0ID0gTlVMTDsKKyAgfQorfQorCisKK3N0YXRpYyB2b2lkIFJlbmRlck1heGltdW1GYWNl
R3JvdXAoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWZhY2UgKmZPcmlnICkKK3sKKyAgLyogV2Ug
d2FudCB0byBmaW5kIHRoZSBsYXJnZXN0IHRyaWFuZ2xlIGZhbiBvciBzdHJpcCBvZiB1bm1hcmtl
ZCBmYWNlcworICAgKiB3aGljaCBpbmNsdWRlcyB0aGUgZ2l2ZW4gZmFjZSBmT3JpZy4gIFRoZXJl
IGFyZSAzIHBvc3NpYmxlIGZhbnMKKyAgICogcGFzc2luZyB0aHJvdWdoIGZPcmlnIChvbmUgY2Vu
dGVyZWQgYXQgZWFjaCB2ZXJ0ZXgpLCBhbmQgMyBwb3NzaWJsZQorICAgKiBzdHJpcHMgKG9uZSBm
b3IgZWFjaCBDQ1cgcGVybXV0YXRpb24gb2YgdGhlIHZlcnRpY2VzKS4gIE91ciBzdHJhdGVneQor
ICAgKiBpcyB0byB0cnkgYWxsIG9mIHRoZXNlLCBhbmQgdGFrZSB0aGUgcHJpbWl0aXZlIHdoaWNo
IHVzZXMgdGhlIG1vc3QKKyAgICogdHJpYW5nbGVzIChhIGdyZWVkeSBhcHByb2FjaCkuCisgICAq
LworICBHTFVoYWxmRWRnZSAqZSA9IGZPcmlnLT5hbkVkZ2U7CisgIHN0cnVjdCBGYWNlQ291bnQg
bWF4LCBuZXdGYWNlOworCisgIG1heC5zaXplID0gMTsKKyAgbWF4LmVTdGFydCA9IGU7CisgIG1h
eC5yZW5kZXIgPSAmUmVuZGVyVHJpYW5nbGU7CisKKyAgaWYoICEgdGVzcy0+ZmxhZ0JvdW5kYXJ5
ICkgeworICAgIG5ld0ZhY2UgPSBNYXhpbXVtRmFuKCBlICk7IGlmKCBuZXdGYWNlLnNpemUgPiBt
YXguc2l6ZSApIHsgbWF4ID0gbmV3RmFjZTsgfQorICAgIG5ld0ZhY2UgPSBNYXhpbXVtRmFuKCBl
LT5MbmV4dCApOyBpZiggbmV3RmFjZS5zaXplID4gbWF4LnNpemUgKSB7IG1heCA9IG5ld0ZhY2U7
IH0KKyAgICBuZXdGYWNlID0gTWF4aW11bUZhbiggZS0+THByZXYgKTsgaWYoIG5ld0ZhY2Uuc2l6
ZSA+IG1heC5zaXplICkgeyBtYXggPSBuZXdGYWNlOyB9CisKKyAgICBuZXdGYWNlID0gTWF4aW11
bVN0cmlwKCBlICk7IGlmKCBuZXdGYWNlLnNpemUgPiBtYXguc2l6ZSApIHsgbWF4ID0gbmV3RmFj
ZTsgfQorICAgIG5ld0ZhY2UgPSBNYXhpbXVtU3RyaXAoIGUtPkxuZXh0ICk7IGlmKCBuZXdGYWNl
LnNpemUgPiBtYXguc2l6ZSApIHsgbWF4ID0gbmV3RmFjZTsgfQorICAgIG5ld0ZhY2UgPSBNYXhp
bXVtU3RyaXAoIGUtPkxwcmV2ICk7IGlmKCBuZXdGYWNlLnNpemUgPiBtYXguc2l6ZSApIHsgbWF4
ID0gbmV3RmFjZTsgfQorICB9CisgICgqKG1heC5yZW5kZXIpKSggdGVzcywgbWF4LmVTdGFydCwg
bWF4LnNpemUgKTsKK30KKworCisvKiBNYWNyb3Mgd2hpY2gga2VlcCB0cmFjayBvZiBmYWNlcyB3
ZSBoYXZlIG1hcmtlZCB0ZW1wb3JhcmlseSwgYW5kIGFsbG93CisgKiB1cyB0byBiYWNrdHJhY2sg
d2hlbiBuZWNlc3NhcnkuICBXaXRoIHRyaWFuZ2xlIGZhbnMsIHRoaXMgaXMgbm90CisgKiByZWFs
bHkgbmVjZXNzYXJ5LCBzaW5jZSB0aGUgb25seSBhd2t3YXJkIGNhc2UgaXMgYSBsb29wIG9mIHRy
aWFuZ2xlcworICogYXJvdW5kIGEgc2luZ2xlIG9yaWdpbiB2ZXJ0ZXguICBIb3dldmVyIHdpdGgg
c3RyaXBzIHRoZSBzaXR1YXRpb24gaXMKKyAqIG1vcmUgY29tcGxpY2F0ZWQsIGFuZCB3ZSBuZWVk
IGEgZ2VuZXJhbCB0cmFja2luZyBtZXRob2QgbGlrZSB0aGUKKyAqIG9uZSBoZXJlLgorICovCisj
ZGVmaW5lIE1hcmtlZChmKQkoISAoZiktPmluc2lkZSB8fCAoZiktPm1hcmtlZCkKKworI2RlZmlu
ZSBBZGRUb1RyYWlsKGYsdCkJKChmKS0+dHJhaWwgPSAodCksICh0KSA9IChmKSwgKGYpLT5tYXJr
ZWQgPSBUUlVFKQorCisjZGVmaW5lIEZyZWVUcmFpbCh0KQlpZiggMSApIHsgXAorCQkJICB3aGls
ZSggKHQpICE9IE5VTEwgKSB7IFwKKwkJCSAgICAodCktPm1hcmtlZCA9IEZBTFNFOyB0ID0gKHQp
LT50cmFpbDsgXAorCQkJICB9IFwKKwkJCX0gZWxzZSAvKiBhYnNvcmIgdHJhaWxpbmcgc2VtaWNv
bG9uICovCisKKworCitzdGF0aWMgc3RydWN0IEZhY2VDb3VudCBNYXhpbXVtRmFuKCBHTFVoYWxm
RWRnZSAqZU9yaWcgKQoreworICAvKiBlT3JpZy0+TGZhY2UgaXMgdGhlIGZhY2Ugd2Ugd2FudCB0
byByZW5kZXIuICBXZSB3YW50IHRvIGZpbmQgdGhlIHNpemUKKyAgICogb2YgYSBtYXhpbWFsIGZh
biBhcm91bmQgZU9yaWctPk9yZy4gIFRvIGRvIHRoaXMgd2UganVzdCB3YWxrIGFyb3VuZAorICAg
KiB0aGUgb3JpZ2luIHZlcnRleCBhcyBmYXIgYXMgcG9zc2libGUgaW4gYm90aCBkaXJlY3Rpb25z
LgorICAgKi8KKyAgc3RydWN0IEZhY2VDb3VudCBuZXdGYWNlID0geyAwLCBOVUxMLCAmUmVuZGVy
RmFuIH07CisgIEdMVWZhY2UgKnRyYWlsID0gTlVMTDsKKyAgR0xVaGFsZkVkZ2UgKmU7CisKKyAg
Zm9yKCBlID0gZU9yaWc7ICEgTWFya2VkKCBlLT5MZmFjZSApOyBlID0gZS0+T25leHQgKSB7Cisg
ICAgQWRkVG9UcmFpbCggZS0+TGZhY2UsIHRyYWlsICk7CisgICAgKytuZXdGYWNlLnNpemU7Cisg
IH0KKyAgZm9yKCBlID0gZU9yaWc7ICEgTWFya2VkKCBlLT5SZmFjZSApOyBlID0gZS0+T3ByZXYg
KSB7CisgICAgQWRkVG9UcmFpbCggZS0+UmZhY2UsIHRyYWlsICk7CisgICAgKytuZXdGYWNlLnNp
emU7CisgIH0KKyAgbmV3RmFjZS5lU3RhcnQgPSBlOworICAvKkxJTlRFRCovCisgIEZyZWVUcmFp
bCggdHJhaWwgKTsKKyAgcmV0dXJuIG5ld0ZhY2U7Cit9CisKKworI2RlZmluZSBJc0V2ZW4obikJ
KCgobikgJiAxKSA9PSAwKQorCitzdGF0aWMgc3RydWN0IEZhY2VDb3VudCBNYXhpbXVtU3RyaXAo
IEdMVWhhbGZFZGdlICplT3JpZyApCit7CisgIC8qIEhlcmUgd2UgYXJlIGxvb2tpbmcgZm9yIGEg
bWF4aW1hbCBzdHJpcCB0aGF0IGNvbnRhaW5zIHRoZSB2ZXJ0aWNlcworICAgKiBlT3JpZy0+T3Jn
LCBlT3JpZy0+RHN0LCBlT3JpZy0+TG5leHQtPkRzdCAoaW4gdGhhdCBvcmRlciBvciB0aGUKKyAg
ICogcmV2ZXJzZSwgc3VjaCB0aGF0IGFsbCB0cmlhbmdsZXMgYXJlIG9yaWVudGVkIENDVykuCisg
ICAqCisgICAqIEFnYWluIHdlIHdhbGsgZm9yd2FyZCBhbmQgYmFja3dhcmQgYXMgZmFyIGFzIHBv
c3NpYmxlLiAgSG93ZXZlciBmb3IKKyAgICogc3RyaXBzIHRoZXJlIGlzIGEgdHdpc3Q6IHRvIGdl
dCBDQ1cgb3JpZW50YXRpb25zLCB0aGVyZSBtdXN0IGJlCisgICAqIGFuICpldmVuKiBudW1iZXIg
b2YgdHJpYW5nbGVzIGluIHRoZSBzdHJpcCBvbiBvbmUgc2lkZSBvZiBlT3JpZy4KKyAgICogV2Ug
d2FsayB0aGUgc3RyaXAgc3RhcnRpbmcgb24gYSBzaWRlIHdpdGggYW4gZXZlbiBudW1iZXIgb2Yg
dHJpYW5nbGVzOworICAgKiBpZiBib3RoIHNpZGUgaGF2ZSBhbiBvZGQgbnVtYmVyLCB3ZSBhcmUg
Zm9yY2VkIHRvIHNob3J0ZW4gb25lIHNpZGUuCisgICAqLworICBzdHJ1Y3QgRmFjZUNvdW50IG5l
d0ZhY2UgPSB7IDAsIE5VTEwsICZSZW5kZXJTdHJpcCB9OworICBsb25nIGhlYWRTaXplID0gMCwg
dGFpbFNpemUgPSAwOworICBHTFVmYWNlICp0cmFpbCA9IE5VTEw7CisgIEdMVWhhbGZFZGdlICpl
LCAqZVRhaWwsICplSGVhZDsKKworICBmb3IoIGUgPSBlT3JpZzsgISBNYXJrZWQoIGUtPkxmYWNl
ICk7ICsrdGFpbFNpemUsIGUgPSBlLT5PbmV4dCApIHsKKyAgICBBZGRUb1RyYWlsKCBlLT5MZmFj
ZSwgdHJhaWwgKTsKKyAgICArK3RhaWxTaXplOworICAgIGUgPSBlLT5EcHJldjsKKyAgICBpZigg
TWFya2VkKCBlLT5MZmFjZSApKSBicmVhazsKKyAgICBBZGRUb1RyYWlsKCBlLT5MZmFjZSwgdHJh
aWwgKTsKKyAgfQorICBlVGFpbCA9IGU7CisKKyAgZm9yKCBlID0gZU9yaWc7ICEgTWFya2VkKCBl
LT5SZmFjZSApOyArK2hlYWRTaXplLCBlID0gZS0+RG5leHQgKSB7CisgICAgQWRkVG9UcmFpbCgg
ZS0+UmZhY2UsIHRyYWlsICk7CisgICAgKytoZWFkU2l6ZTsKKyAgICBlID0gZS0+T3ByZXY7Cisg
ICAgaWYoIE1hcmtlZCggZS0+UmZhY2UgKSkgYnJlYWs7CisgICAgQWRkVG9UcmFpbCggZS0+UmZh
Y2UsIHRyYWlsICk7CisgIH0KKyAgZUhlYWQgPSBlOworCisgIG5ld0ZhY2Uuc2l6ZSA9IHRhaWxT
aXplICsgaGVhZFNpemU7CisgIGlmKCBJc0V2ZW4oIHRhaWxTaXplICkpIHsKKyAgICBuZXdGYWNl
LmVTdGFydCA9IGVUYWlsLT5TeW07CisgIH0gZWxzZSBpZiggSXNFdmVuKCBoZWFkU2l6ZSApKSB7
CisgICAgbmV3RmFjZS5lU3RhcnQgPSBlSGVhZDsKKyAgfSBlbHNlIHsKKyAgICAvKiBCb3RoIHNp
ZGVzIGhhdmUgb2RkIGxlbmd0aCwgd2UgbXVzdCBzaG9ydGVuIG9uZSBvZiB0aGVtLiAgSW4gZmFj
dCwKKyAgICAgKiB3ZSBtdXN0IHN0YXJ0IGZyb20gZUhlYWQgdG8gZ3VhcmFudGVlIGluY2x1c2lv
biBvZiBlT3JpZy0+TGZhY2UuCisgICAgICovCisgICAgLS1uZXdGYWNlLnNpemU7CisgICAgbmV3
RmFjZS5lU3RhcnQgPSBlSGVhZC0+T25leHQ7CisgIH0KKyAgLypMSU5URUQqLworICBGcmVlVHJh
aWwoIHRyYWlsICk7CisgIHJldHVybiBuZXdGYWNlOworfQorCisKK3N0YXRpYyB2b2lkIFJlbmRl
clRyaWFuZ2xlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVoYWxmRWRnZSAqZSwgbG9uZyBzaXpl
ICkKK3sKKyAgLyogSnVzdCBhZGQgdGhlIHRyaWFuZ2xlIHRvIGEgdHJpYW5nbGUgbGlzdCwgc28g
d2UgY2FuIHJlbmRlciBhbGwKKyAgICogdGhlIHNlcGFyYXRlIHRyaWFuZ2xlcyBhdCBvbmNlLgor
ICAgKi8KKyAgYXNzZXJ0KCBzaXplID09IDEgKTsKKyAgQWRkVG9UcmFpbCggZS0+TGZhY2UsIHRl
c3MtPmxvbmVseVRyaUxpc3QgKTsKK30KKworCitzdGF0aWMgdm9pZCBSZW5kZXJMb25lbHlUcmlh
bmdsZXMoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWZhY2UgKmYgKQoreworICAvKiBOb3cgd2Ug
cmVuZGVyIGFsbCB0aGUgc2VwYXJhdGUgdHJpYW5nbGVzIHdoaWNoIGNvdWxkIG5vdCBiZQorICAg
KiBncm91cGVkIGludG8gYSB0cmlhbmdsZSBmYW4gb3Igc3RyaXAuCisgICAqLworICBHTFVoYWxm
RWRnZSAqZTsKKyAgaW50IG5ld1N0YXRlOworICBpbnQgZWRnZVN0YXRlID0gLTE7CS8qIGZvcmNl
IGVkZ2Ugc3RhdGUgb3V0cHV0IGZvciBmaXJzdCB2ZXJ0ZXggKi8KKworICBDQUxMX0JFR0lOX09S
X0JFR0lOX0RBVEEoIEdMX1RSSUFOR0xFUyApOworCisgIGZvciggOyBmICE9IE5VTEw7IGYgPSBm
LT50cmFpbCApIHsKKyAgICAvKiBMb29wIG9uY2UgZm9yIGVhY2ggZWRnZSAodGhlcmUgd2lsbCBh
bHdheXMgYmUgMyBlZGdlcykgKi8KKworICAgIGUgPSBmLT5hbkVkZ2U7CisgICAgZG8geworICAg
ICAgaWYoIHRlc3MtPmZsYWdCb3VuZGFyeSApIHsKKwkvKiBTZXQgdGhlICJlZGdlIHN0YXRlIiB0
byBUUlVFIGp1c3QgYmVmb3JlIHdlIG91dHB1dCB0aGUKKwkgKiBmaXJzdCB2ZXJ0ZXggb2YgZWFj
aCBlZGdlIG9uIHRoZSBwb2x5Z29uIGJvdW5kYXJ5LgorCSAqLworCW5ld1N0YXRlID0gISBlLT5S
ZmFjZS0+aW5zaWRlOworCWlmKCBlZGdlU3RhdGUgIT0gbmV3U3RhdGUgKSB7CisJICBlZGdlU3Rh
dGUgPSBuZXdTdGF0ZTsKKyAgICAgICAgICBDQUxMX0VER0VfRkxBR19PUl9FREdFX0ZMQUdfREFU
QSggZWRnZVN0YXRlICk7CisJfQorICAgICAgfQorICAgICAgQ0FMTF9WRVJURVhfT1JfVkVSVEVY
X0RBVEEoIGUtPk9yZy0+ZGF0YSApOworCisgICAgICBlID0gZS0+TG5leHQ7CisgICAgfSB3aGls
ZSggZSAhPSBmLT5hbkVkZ2UgKTsKKyAgfQorICBDQUxMX0VORF9PUl9FTkRfREFUQSgpOworfQor
CisKK3N0YXRpYyB2b2lkIFJlbmRlckZhbiggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVk
Z2UgKmUsIGxvbmcgc2l6ZSApCit7CisgIC8qIFJlbmRlciBhcyBtYW55IENDVyB0cmlhbmdsZXMg
YXMgcG9zc2libGUgaW4gYSBmYW4gc3RhcnRpbmcgZnJvbQorICAgKiBlZGdlICJlIi4gIFRoZSBm
YW4gKnNob3VsZCogY29udGFpbiBleGFjdGx5ICJzaXplIiB0cmlhbmdsZXMKKyAgICogKG90aGVy
d2lzZSB3ZSd2ZSBnb29mZWQgdXAgc29tZXdoZXJlKS4KKyAgICovCisgIENBTExfQkVHSU5fT1Jf
QkVHSU5fREFUQSggR0xfVFJJQU5HTEVfRkFOICk7IAorICBDQUxMX1ZFUlRFWF9PUl9WRVJURVhf
REFUQSggZS0+T3JnLT5kYXRhICk7IAorICBDQUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQSggZS0+
RHN0LT5kYXRhICk7IAorCisgIHdoaWxlKCAhIE1hcmtlZCggZS0+TGZhY2UgKSkgeworICAgIGUt
PkxmYWNlLT5tYXJrZWQgPSBUUlVFOworICAgIC0tc2l6ZTsKKyAgICBlID0gZS0+T25leHQ7Cisg
ICAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUtPkRzdC0+ZGF0YSApOyAKKyAgfQorCisg
IGFzc2VydCggc2l6ZSA9PSAwICk7CisgIENBTExfRU5EX09SX0VORF9EQVRBKCk7Cit9CisKKwor
c3RhdGljIHZvaWQgUmVuZGVyU3RyaXAoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWhhbGZFZGdl
ICplLCBsb25nIHNpemUgKQoreworICAvKiBSZW5kZXIgYXMgbWFueSBDQ1cgdHJpYW5nbGVzIGFz
IHBvc3NpYmxlIGluIGEgc3RyaXAgc3RhcnRpbmcgZnJvbQorICAgKiBlZGdlICJlIi4gIFRoZSBz
dHJpcCAqc2hvdWxkKiBjb250YWluIGV4YWN0bHkgInNpemUiIHRyaWFuZ2xlcworICAgKiAob3Ro
ZXJ3aXNlIHdlJ3ZlIGdvb2ZlZCB1cCBzb21ld2hlcmUpLgorICAgKi8KKyAgQ0FMTF9CRUdJTl9P
Ul9CRUdJTl9EQVRBKCBHTF9UUklBTkdMRV9TVFJJUCApOworICBDQUxMX1ZFUlRFWF9PUl9WRVJU
RVhfREFUQSggZS0+T3JnLT5kYXRhICk7IAorICBDQUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQSgg
ZS0+RHN0LT5kYXRhICk7IAorCisgIHdoaWxlKCAhIE1hcmtlZCggZS0+TGZhY2UgKSkgeworICAg
IGUtPkxmYWNlLT5tYXJrZWQgPSBUUlVFOworICAgIC0tc2l6ZTsKKyAgICBlID0gZS0+RHByZXY7
CisgICAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUtPk9yZy0+ZGF0YSApOyAKKyAgICBp
ZiggTWFya2VkKCBlLT5MZmFjZSApKSBicmVhazsKKworICAgIGUtPkxmYWNlLT5tYXJrZWQgPSBU
UlVFOworICAgIC0tc2l6ZTsKKyAgICBlID0gZS0+T25leHQ7CisgICAgQ0FMTF9WRVJURVhfT1Jf
VkVSVEVYX0RBVEEoIGUtPkRzdC0+ZGF0YSApOyAKKyAgfQorCisgIGFzc2VydCggc2l6ZSA9PSAw
ICk7CisgIENBTExfRU5EX09SX0VORF9EQVRBKCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioq
KioqKioqKiBCb3VuZGFyeSBjb250b3VyIGRlY29tcG9zaXRpb24gKioqKioqKioqKioqKioqKioq
LworCisvKiBfX2dsX3JlbmRlckJvdW5kYXJ5KCB0ZXNzLCBtZXNoICkgdGFrZXMgYSBtZXNoLCBh
bmQgb3V0cHV0cyBvbmUKKyAqIGNvbnRvdXIgZm9yIGVhY2ggZmFjZSBtYXJrZWQgImluc2lkZSIu
ICBUaGUgcmVuZGVyaW5nIG91dHB1dCBpcworICogcHJvdmlkZWQgYXMgY2FsbGJhY2tzIChzZWUg
dGhlIGFwaSkuCisgKi8KK3ZvaWQgX19nbF9yZW5kZXJCb3VuZGFyeSggR0xVdGVzc2VsYXRvciAq
dGVzcywgR0xVbWVzaCAqbWVzaCApCit7CisgIEdMVWZhY2UgKmY7CisgIEdMVWhhbGZFZGdlICpl
OworCisgIGZvciggZiA9IG1lc2gtPmZIZWFkLm5leHQ7IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0g
Zi0+bmV4dCApIHsKKyAgICBpZiggZi0+aW5zaWRlICkgeworICAgICAgQ0FMTF9CRUdJTl9PUl9C
RUdJTl9EQVRBKCBHTF9MSU5FX0xPT1AgKTsKKyAgICAgIGUgPSBmLT5hbkVkZ2U7CisgICAgICBk
byB7CisgICAgICAgIENBTExfVkVSVEVYX09SX1ZFUlRFWF9EQVRBKCBlLT5PcmctPmRhdGEgKTsg
CisJZSA9IGUtPkxuZXh0OworICAgICAgfSB3aGlsZSggZSAhPSBmLT5hbkVkZ2UgKTsKKyAgICAg
IENBTExfRU5EX09SX0VORF9EQVRBKCk7CisgICAgfQorICB9Cit9CisKKworLyoqKioqKioqKioq
KioqKioqKioqKioqKiBRdWljay1hbmQtZGlydHkgZGVjb21wb3NpdGlvbiAqKioqKioqKioqKioq
KioqKiovCisKKyNkZWZpbmUgU0lHTl9JTkNPTlNJU1RFTlQgMgorCitzdGF0aWMgaW50IENvbXB1
dGVOb3JtYWwoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZG91YmxlIG5vcm1bM10sIGludCBjaGVj
ayApCisvKgorICogSWYgY2hlY2s9PUZBTFNFLCB3ZSBjb21wdXRlIHRoZSBwb2x5Z29uIG5vcm1h
bCBhbmQgcGxhY2UgaXQgaW4gbm9ybVtdLgorICogSWYgY2hlY2s9PVRSVUUsIHdlIGNoZWNrIHRo
YXQgZWFjaCB0cmlhbmdsZSBpbiB0aGUgZmFuIGZyb20gdjAgaGFzIGEKKyAqIGNvbnNpc3RlbnQg
b3JpZW50YXRpb24gd2l0aCByZXNwZWN0IHRvIG5vcm1bXS4gIElmIHRyaWFuZ2xlcyBhcmUKKyAq
IGNvbnNpc3RlbnRseSBvcmllbnRlZCBDQ1csIHJldHVybiAxOyBpZiBDVywgcmV0dXJuIC0xOyBp
ZiBhbGwgdHJpYW5nbGVzCisgKiBhcmUgZGVnZW5lcmF0ZSByZXR1cm4gMDsgb3RoZXJ3aXNlIChu
byBjb25zaXN0ZW50IG9yaWVudGF0aW9uKSByZXR1cm4KKyAqIFNJR05fSU5DT05TSVNURU5ULgor
ICovCit7CisgIENhY2hlZFZlcnRleCAqdjAgPSB0ZXNzLT5jYWNoZTsKKyAgQ2FjaGVkVmVydGV4
ICp2biA9IHYwICsgdGVzcy0+Y2FjaGVDb3VudDsKKyAgQ2FjaGVkVmVydGV4ICp2YzsKKyAgR0xk
b3VibGUgZG90LCB4YywgeWMsIHpjLCB4cCwgeXAsIHpwLCBuWzNdOworICBpbnQgc2lnbiA9IDA7
CisKKyAgLyogRmluZCB0aGUgcG9seWdvbiBub3JtYWwuICBJdCBpcyBpbXBvcnRhbnQgdG8gZ2V0
IGEgcmVhc29uYWJsZQorICAgKiBub3JtYWwgZXZlbiB3aGVuIHRoZSBwb2x5Z29uIGlzIHNlbGYt
aW50ZXJzZWN0aW5nIChlZy4gYSBib3d0aWUpLgorICAgKiBPdGhlcndpc2UsIHRoZSBjb21wdXRl
ZCBub3JtYWwgY291bGQgYmUgdmVyeSB0aW55LCBidXQgcGVycGVuZGljdWxhcgorICAgKiB0byB0
aGUgdHJ1ZSBwbGFuZSBvZiB0aGUgcG9seWdvbiBkdWUgdG8gbnVtZXJpY2FsIG5vaXNlLiAgVGhl
biBhbGwKKyAgICogdGhlIHRyaWFuZ2xlcyB3b3VsZCBhcHBlYXIgdG8gYmUgZGVnZW5lcmF0ZSBh
bmQgd2Ugd291bGQgaW5jb3JyZWN0bHkKKyAgICogZGVjb21wb3NlIHRoZSBwb2x5Z29uIGFzIGEg
ZmFuIChvciBzaW1wbHkgbm90IHJlbmRlciBpdCBhdCBhbGwpLgorICAgKgorICAgKiBXZSB1c2Ug
YSBzdW0tb2YtdHJpYW5nbGVzIG5vcm1hbCBhbGdvcml0aG0gcmF0aGVyIHRoYW4gdGhlIG1vcmUK
KyAgICogZWZmaWNpZW50IHN1bS1vZi10cmFwZXpvaWRzIG1ldGhvZCAodXNlZCBpbiBDaGVja09y
aWVudGF0aW9uKCkKKyAgICogaW4gbm9ybWFsLmMpLiAgVGhpcyBsZXRzIHVzIGV4cGxpY2l0bHkg
cmV2ZXJzZSB0aGUgc2lnbmVkIGFyZWEKKyAgICogb2Ygc29tZSB0cmlhbmdsZXMgdG8gZ2V0IGEg
cmVhc29uYWJsZSBub3JtYWwgaW4gdGhlIHNlbGYtaW50ZXJzZWN0aW5nCisgICAqIGNhc2UuCisg
ICAqLworICBpZiggISBjaGVjayApIHsKKyAgICBub3JtWzBdID0gbm9ybVsxXSA9IG5vcm1bMl0g
PSAwLjA7CisgIH0KKworICB2YyA9IHYwICsgMTsKKyAgeGMgPSB2Yy0+Y29vcmRzWzBdIC0gdjAt
PmNvb3Jkc1swXTsKKyAgeWMgPSB2Yy0+Y29vcmRzWzFdIC0gdjAtPmNvb3Jkc1sxXTsKKyAgemMg
PSB2Yy0+Y29vcmRzWzJdIC0gdjAtPmNvb3Jkc1syXTsKKyAgd2hpbGUoICsrdmMgPCB2biApIHsK
KyAgICB4cCA9IHhjOyB5cCA9IHljOyB6cCA9IHpjOworICAgIHhjID0gdmMtPmNvb3Jkc1swXSAt
IHYwLT5jb29yZHNbMF07CisgICAgeWMgPSB2Yy0+Y29vcmRzWzFdIC0gdjAtPmNvb3Jkc1sxXTsK
KyAgICB6YyA9IHZjLT5jb29yZHNbMl0gLSB2MC0+Y29vcmRzWzJdOworCisgICAgLyogQ29tcHV0
ZSAodnAgLSB2MCkgY3Jvc3MgKHZjIC0gdjApICovCisgICAgblswXSA9IHlwKnpjIC0genAqeWM7
CisgICAgblsxXSA9IHpwKnhjIC0geHAqemM7CisgICAgblsyXSA9IHhwKnljIC0geXAqeGM7CisK
KyAgICBkb3QgPSBuWzBdKm5vcm1bMF0gKyBuWzFdKm5vcm1bMV0gKyBuWzJdKm5vcm1bMl07Cisg
ICAgaWYoICEgY2hlY2sgKSB7CisgICAgICAvKiBSZXZlcnNlIHRoZSBjb250cmlidXRpb24gb2Yg
YmFjay1mYWNpbmcgdHJpYW5nbGVzIHRvIGdldAorICAgICAgICogYSByZWFzb25hYmxlIG5vcm1h
bCBmb3Igc2VsZi1pbnRlcnNlY3RpbmcgcG9seWdvbnMgKHNlZSBhYm92ZSkKKyAgICAgICAqLwor
ICAgICAgaWYoIGRvdCA+PSAwICkgeworCW5vcm1bMF0gKz0gblswXTsgbm9ybVsxXSArPSBuWzFd
OyBub3JtWzJdICs9IG5bMl07CisgICAgICB9IGVsc2UgeworCW5vcm1bMF0gLT0gblswXTsgbm9y
bVsxXSAtPSBuWzFdOyBub3JtWzJdIC09IG5bMl07CisgICAgICB9CisgICAgfSBlbHNlIGlmKCBk
b3QgIT0gMCApIHsKKyAgICAgIC8qIENoZWNrIHRoZSBuZXcgb3JpZW50YXRpb24gZm9yIGNvbnNp
c3RlbmN5IHdpdGggcHJldmlvdXMgdHJpYW5nbGVzICovCisgICAgICBpZiggZG90ID4gMCApIHsK
KwlpZiggc2lnbiA8IDAgKSByZXR1cm4gU0lHTl9JTkNPTlNJU1RFTlQ7CisJc2lnbiA9IDE7Cisg
ICAgICB9IGVsc2UgeworCWlmKCBzaWduID4gMCApIHJldHVybiBTSUdOX0lOQ09OU0lTVEVOVDsK
KwlzaWduID0gLTE7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBzaWduOworfQorCisv
KiBfX2dsX3JlbmRlckNhY2hlKCB0ZXNzICkgdGFrZXMgYSBzaW5nbGUgY29udG91ciBhbmQgdHJp
ZXMgdG8gcmVuZGVyIGl0CisgKiBhcyBhIHRyaWFuZ2xlIGZhbi4gIFRoaXMgaGFuZGxlcyBjb252
ZXggcG9seWdvbnMsIGFzIHdlbGwgYXMgc29tZQorICogbm9uLWNvbnZleCBwb2x5Z29ucyBpZiB3
ZSBnZXQgbHVja3kuCisgKgorICogUmV0dXJucyBUUlVFIGlmIHRoZSBwb2x5Z29uIHdhcyBzdWNj
ZXNzZnVsbHkgcmVuZGVyZWQuICBUaGUgcmVuZGVyaW5nCisgKiBvdXRwdXQgaXMgcHJvdmlkZWQg
YXMgY2FsbGJhY2tzIChzZWUgdGhlIGFwaSkuCisgKi8KK0dMYm9vbGVhbiBfX2dsX3JlbmRlckNh
Y2hlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKK3sKKyAgQ2FjaGVkVmVydGV4ICp2MCA9IHRlc3Mt
PmNhY2hlOworICBDYWNoZWRWZXJ0ZXggKnZuID0gdjAgKyB0ZXNzLT5jYWNoZUNvdW50OworICBD
YWNoZWRWZXJ0ZXggKnZjOworICBHTGRvdWJsZSBub3JtWzNdOworICBpbnQgc2lnbjsKKworICBp
ZiggdGVzcy0+Y2FjaGVDb3VudCA8IDMgKSB7CisgICAgLyogRGVnZW5lcmF0ZSBjb250b3VyIC0t
IG5vIG91dHB1dCAqLworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgbm9ybVswXSA9IHRlc3Mt
Pm5vcm1hbFswXTsKKyAgbm9ybVsxXSA9IHRlc3MtPm5vcm1hbFsxXTsKKyAgbm9ybVsyXSA9IHRl
c3MtPm5vcm1hbFsyXTsKKyAgaWYoIG5vcm1bMF0gPT0gMCAmJiBub3JtWzFdID09IDAgJiYgbm9y
bVsyXSA9PSAwICkgeworICAgIENvbXB1dGVOb3JtYWwoIHRlc3MsIG5vcm0sIEZBTFNFICk7Cisg
IH0KKworICBzaWduID0gQ29tcHV0ZU5vcm1hbCggdGVzcywgbm9ybSwgVFJVRSApOworICBpZigg
c2lnbiA9PSBTSUdOX0lOQ09OU0lTVEVOVCApIHsKKyAgICAvKiBGYW4gdHJpYW5nbGVzIGRpZCBu
b3QgaGF2ZSBhIGNvbnNpc3RlbnQgb3JpZW50YXRpb24gKi8KKyAgICByZXR1cm4gRkFMU0U7Cisg
IH0KKyAgaWYoIHNpZ24gPT0gMCApIHsKKyAgICAvKiBBbGwgdHJpYW5nbGVzIHdlcmUgZGVnZW5l
cmF0ZSAqLworICAgIHJldHVybiBUUlVFOworICB9CisKKyAgLyogTWFrZSBzdXJlIHdlIGRvIHRo
ZSByaWdodCB0aGluZyBmb3IgZWFjaCB3aW5kaW5nIHJ1bGUgKi8KKyAgc3dpdGNoKCB0ZXNzLT53
aW5kaW5nUnVsZSApIHsKKyAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX09ERDoKKyAgY2FzZSBHTFVf
VEVTU19XSU5ESU5HX05PTlpFUk86CisgICAgYnJlYWs7CisgIGNhc2UgR0xVX1RFU1NfV0lORElO
R19QT1NJVElWRToKKyAgICBpZiggc2lnbiA8IDAgKSByZXR1cm4gVFJVRTsKKyAgICBicmVhazsK
KyAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFOgorICAgIGlmKCBzaWduID4gMCApIHJl
dHVybiBUUlVFOworICAgIGJyZWFrOworICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9U
V086CisgICAgcmV0dXJuIFRSVUU7CisgIH0KKworICBDQUxMX0JFR0lOX09SX0JFR0lOX0RBVEEo
IHRlc3MtPmJvdW5kYXJ5T25seSA/IEdMX0xJTkVfTE9PUAorCQkJICA6ICh0ZXNzLT5jYWNoZUNv
dW50ID4gMykgPyBHTF9UUklBTkdMRV9GQU4KKwkJCSAgOiBHTF9UUklBTkdMRVMgKTsKKworICBD
QUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQSggdjAtPmRhdGEgKTsgCisgIGlmKCBzaWduID4gMCAp
IHsKKyAgICBmb3IoIHZjID0gdjArMTsgdmMgPCB2bjsgKyt2YyApIHsKKyAgICAgIENBTExfVkVS
VEVYX09SX1ZFUlRFWF9EQVRBKCB2Yy0+ZGF0YSApOyAKKyAgICB9CisgIH0gZWxzZSB7CisgICAg
Zm9yKCB2YyA9IHZuLTE7IHZjID4gdjA7IC0tdmMgKSB7CisgICAgICBDQUxMX1ZFUlRFWF9PUl9W
RVJURVhfREFUQSggdmMtPmRhdGEgKTsgCisgICAgfQorICB9CisgIENBTExfRU5EX09SX0VORF9E
QVRBKCk7CisgIHJldHVybiBUUlVFOworfQpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL3JlbmRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy9yZW5kZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy9yZW5kZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyoqIExpY2Vu
c2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBm
aWxlIGFyZQorKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVy
bWl0dGVkIGluIHRoZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEu
MSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJq
ZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVz
ZQorKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlv
dSBtYXkgb2J0YWluIGEgY29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGlj
cywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJr
d2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDov
L29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlk
ZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiog
IkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFO
RCBDT05ESVRJT05TCisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElP
TiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRB
QklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxB
UiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4g
VGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBW
ZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2ls
aWNvbiBHcmFwaGljcywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChj
KSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBw
b3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNl
d2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5v
dGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwor
KiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENv
ZGUgYXJlIFRoZQorKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9u
IChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0wo
UikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVs
ZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBY
CisqKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTks
IDE5OTguIFRoaXMgc29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikg
dmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ks
IGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiogY29t
cGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisq
KgorKi8KKy8qCisqKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0
ZSQgJFJldmlzaW9uJAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRl
c3MvcmVuZGVyLmgjNSAkCisqLworCisjaWZuZGVmIF9fcmVuZGVyX2hfCisjZGVmaW5lIF9fcmVu
ZGVyX2hfCisKKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lc2guaCIKKworLyog
X19nbF9yZW5kZXJNZXNoKCB0ZXNzLCBtZXNoICkgdGFrZXMgYSBtZXNoIGFuZCBicmVha3MgaXQg
aW50byB0cmlhbmdsZQorICogZmFucywgc3RyaXBzLCBhbmQgc2VwYXJhdGUgdHJpYW5nbGVzLiAg
QSBzdWJzdGFudGlhbCBlZmZvcnQgaXMgbWFkZQorICogdG8gdXNlIGFzIGZldyByZW5kZXJpbmcg
cHJpbWl0aXZlcyBhcyBwb3NzaWJsZSAoaWUuIHRvIG1ha2UgdGhlIGZhbnMKKyAqIGFuZCBzdHJp
cHMgYXMgbGFyZ2UgYXMgcG9zc2libGUpLgorICoKKyAqIFRoZSByZW5kZXJpbmcgb3V0cHV0IGlz
IHByb3ZpZGVkIGFzIGNhbGxiYWNrcyAoc2VlIHRoZSBhcGkpLgorICovCit2b2lkIF9fZ2xfcmVu
ZGVyTWVzaCggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVbWVzaCAqbWVzaCApOwordm9pZCBfX2ds
X3JlbmRlckJvdW5kYXJ5KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVtZXNoICptZXNoICk7CisK
K0dMYm9vbGVhbiBfX2dsX3JlbmRlckNhY2hlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7CisKKyNl
bmRpZgpJbmRleDogV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuYwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMzU5IEBACisvKgorKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNl
cHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisqKiBtYWRlIHN1Ympl
Y3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVl
CisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhl
IGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlz
aW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Cisq
KiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBT
ZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENB
IDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMv
RnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhl
IFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFM
TCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKKyoqIERJU0NM
QUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5U
SUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBR
VUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5G
UklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczog
T3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2Vk
IEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAorKiogSW5j
LiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdy
YXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhp
cmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBh
cHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxpc2hlZCBieSBTR0kg
aW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisqKiBPcGVuR0wo
UikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxl
YXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRp
bGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4
OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRvdyBTeXN0ZW0oUikg
KFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQor
Kiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJ
bXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRl
cGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdM
KFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoKKyoqIEF1dGhvcjog
RXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNpb24kCisqKiAkSGVh
ZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9zd2VlcC5jIzUgJAorKi8KKwor
I2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHNldGptcC5oPgkJLyogbG9uZ2ptcCAqLwor
I2luY2x1ZGUgPGxpbWl0cy5oPgkJLyogTE9OR19NQVggKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4K
KworI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2dsdW9zLmgiCisjaW5jbHVkZSAidGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy9kaWN0LmgiCisjaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9n
ZW9tLmgiCisjaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIgorI2lu
Y2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1ZGUgInRoaXJkcGFy
dHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgiCisjaW5jbHVkZSAidGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy9zd2VlcC5oIgorI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5oIgor
CisjZGVmaW5lIFRSVUUgMQorI2RlZmluZSBGQUxTRSAwCisKKyNpZmRlZiBGT1JfVFJJVEVfVEVT
VF9QUk9HUkFNCitleHRlcm4gdm9pZCBEZWJ1Z0V2ZW50KCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7
CisjZWxzZQorI2RlZmluZSBEZWJ1Z0V2ZW50KCB0ZXNzICkKKyNlbmRpZgorCisvKgorICogSW52
YXJpYW50cyBmb3IgdGhlIEVkZ2UgRGljdGlvbmFyeS4KKyAqIC0gZWFjaCBwYWlyIG9mIGFkamFj
ZW50IGVkZ2VzIGUyPVN1Y2MoZTEpIHNhdGlzZmllcyBFZGdlTGVxKGUxLGUyKQorICogICBhdCBh
bnkgdmFsaWQgbG9jYXRpb24gb2YgdGhlIHN3ZWVwIGV2ZW50CisgKiAtIGlmIEVkZ2VMZXEoZTIs
ZTEpIGFzIHdlbGwgKGF0IGFueSB2YWxpZCBzd2VlcCBldmVudCksIHRoZW4gZTEgYW5kIGUyCisg
KiAgIHNoYXJlIGEgY29tbW9uIGVuZHBvaW50CisgKiAtIGZvciBlYWNoIGUsIGUtPkRzdCBoYXMg
YmVlbiBwcm9jZXNzZWQsIGJ1dCBub3QgZS0+T3JnCisgKiAtIGVhY2ggZWRnZSBlIHNhdGlzZmll
cyBWZXJ0TGVxKGUtPkRzdCxldmVudCkgJiYgVmVydExlcShldmVudCxlLT5PcmcpCisgKiAgIHdo
ZXJlICJldmVudCIgaXMgdGhlIGN1cnJlbnQgc3dlZXAgbGluZSBldmVudC4KKyAqIC0gbm8gZWRn
ZSBlIGhhcyB6ZXJvIGxlbmd0aAorICoKKyAqIEludmFyaWFudHMgZm9yIHRoZSBNZXNoICh0aGUg
cHJvY2Vzc2VkIHBvcnRpb24pLgorICogLSB0aGUgcG9ydGlvbiBvZiB0aGUgbWVzaCBsZWZ0IG9m
IHRoZSBzd2VlcCBsaW5lIGlzIGEgcGxhbmFyIGdyYXBoLAorICogICBpZS4gdGhlcmUgaXMgKnNv
bWUqIHdheSB0byBlbWJlZCBpdCBpbiB0aGUgcGxhbmUKKyAqIC0gbm8gcHJvY2Vzc2VkIGVkZ2Ug
aGFzIHplcm8gbGVuZ3RoCisgKiAtIG5vIHR3byBwcm9jZXNzZWQgdmVydGljZXMgaGF2ZSBpZGVu
dGljYWwgY29vcmRpbmF0ZXMKKyAqIC0gZWFjaCAiaW5zaWRlIiByZWdpb24gaXMgbW9ub3RvbmUs
IGllLiBjYW4gYmUgYnJva2VuIGludG8gdHdvIGNoYWlucworICogICBvZiBtb25vdG9uaWNhbGx5
IGluY3JlYXNpbmcgdmVydGljZXMgYWNjb3JkaW5nIHRvIFZlcnRMZXEodjEsdjIpCisgKiAgIC0g
YSBub24taW52YXJpYW50OiB0aGVzZSBjaGFpbnMgbWF5IGludGVyc2VjdCAodmVyeSBzbGlnaHRs
eSkKKyAqCisgKiBJbnZhcmlhbnRzIGZvciB0aGUgU3dlZXAuCisgKiAtIGlmIG5vbmUgb2YgdGhl
IGVkZ2VzIGluY2lkZW50IHRvIHRoZSBldmVudCB2ZXJ0ZXggaGF2ZSBhbiBhY3RpdmVSZWdpb24K
KyAqICAgKGllLiBub25lIG9mIHRoZXNlIGVkZ2VzIGFyZSBpbiB0aGUgZWRnZSBkaWN0aW9uYXJ5
KSwgdGhlbiB0aGUgdmVydGV4CisgKiAgIGhhcyBvbmx5IHJpZ2h0LWdvaW5nIGVkZ2VzLgorICog
LSBpZiBhbiBlZGdlIGlzIG1hcmtlZCAiZml4VXBwZXJFZGdlIiAoaXQgaXMgYSB0ZW1wb3Jhcnkg
ZWRnZSBpbnRyb2R1Y2VkCisgKiAgIGJ5IENvbm5lY3RSaWdodFZlcnRleCksIHRoZW4gaXQgaXMg
dGhlIG9ubHkgcmlnaHQtZ29pbmcgZWRnZSBmcm9tCisgKiAgIGl0cyBhc3NvY2lhdGVkIHZlcnRl
eC4gIChUaGlzIHNheXMgdGhhdCB0aGVzZSBlZGdlcyBleGlzdCBvbmx5CisgKiAgIHdoZW4gaXQg
aXMgbmVjZXNzYXJ5LikKKyAqLworCisjZGVmaW5lIE1BWCh4LHkpCSgoeCkgPj0gKHkpID8gKHgp
IDogKHkpKQorI2RlZmluZSBNSU4oeCx5KQkoKHgpIDw9ICh5KSA/ICh4KSA6ICh5KSkKKworLyog
V2hlbiB3ZSBtZXJnZSB0d28gZWRnZXMgaW50byBvbmUsIHdlIG5lZWQgdG8gY29tcHV0ZSB0aGUg
Y29tYmluZWQKKyAqIHdpbmRpbmcgb2YgdGhlIG5ldyBlZGdlLgorICovCisjZGVmaW5lIEFkZFdp
bmRpbmcoZURzdCxlU3JjKQkoZURzdC0+d2luZGluZyArPSBlU3JjLT53aW5kaW5nLCBcCisJCQkJ
IGVEc3QtPlN5bS0+d2luZGluZyArPSBlU3JjLT5TeW0tPndpbmRpbmcpCisKK3N0YXRpYyB2b2lk
IFN3ZWVwRXZlbnQoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVXZlcnRleCAqdkV2ZW50ICk7Citz
dGF0aWMgdm9pZCBXYWxrRGlydHlSZWdpb25zKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVS
ZWdpb24gKnJlZ1VwICk7CitzdGF0aWMgaW50IENoZWNrRm9yUmlnaHRTcGxpY2UoIEdMVXRlc3Nl
bGF0b3IgKnRlc3MsIEFjdGl2ZVJlZ2lvbiAqcmVnVXAgKTsKKworc3RhdGljIGludCBFZGdlTGVx
KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZzEsCisJCSAgICBBY3RpdmVS
ZWdpb24gKnJlZzIgKQorLyoKKyAqIEJvdGggZWRnZXMgbXVzdCBiZSBkaXJlY3RlZCBmcm9tIHJp
Z2h0IHRvIGxlZnQgKHRoaXMgaXMgdGhlIGNhbm9uaWNhbAorICogZGlyZWN0aW9uIGZvciB0aGUg
dXBwZXIgZWRnZSBvZiBlYWNoIHJlZ2lvbikuCisgKgorICogVGhlIHN0cmF0ZWd5IGlzIHRvIGV2
YWx1YXRlIGEgInQiIHZhbHVlIGZvciBlYWNoIGVkZ2UgYXQgdGhlCisgKiBjdXJyZW50IHN3ZWVw
IGxpbmUgcG9zaXRpb24sIGdpdmVuIGJ5IHRlc3MtPmV2ZW50LiAgVGhlIGNhbGN1bGF0aW9ucwor
ICogYXJlIGRlc2lnbmVkIHRvIGJlIHZlcnkgc3RhYmxlLCBidXQgb2YgY291cnNlIHRoZXkgYXJl
IG5vdCBwZXJmZWN0LgorICoKKyAqIFNwZWNpYWwgY2FzZTogaWYgYm90aCBlZGdlIGRlc3RpbmF0
aW9ucyBhcmUgYXQgdGhlIHN3ZWVwIGV2ZW50LAorICogd2Ugc29ydCB0aGUgZWRnZXMgYnkgc2xv
cGUgKHRoZXkgd291bGQgb3RoZXJ3aXNlIGNvbXBhcmUgZXF1YWxseSkuCisgKi8KK3sKKyAgR0xV
dmVydGV4ICpldmVudCA9IHRlc3MtPmV2ZW50OworICBHTFVoYWxmRWRnZSAqZTEsICplMjsKKyAg
R0xkb3VibGUgdDEsIHQyOworCisgIGUxID0gcmVnMS0+ZVVwOworICBlMiA9IHJlZzItPmVVcDsK
KworICBpZiggZTEtPkRzdCA9PSBldmVudCApIHsKKyAgICBpZiggZTItPkRzdCA9PSBldmVudCAp
IHsKKyAgICAgIC8qIFR3byBlZGdlcyByaWdodCBvZiB0aGUgc3dlZXAgbGluZSB3aGljaCBtZWV0
IGF0IHRoZSBzd2VlcCBldmVudC4KKyAgICAgICAqIFNvcnQgdGhlbSBieSBzbG9wZS4KKyAgICAg
ICAqLworICAgICAgaWYoIFZlcnRMZXEoIGUxLT5PcmcsIGUyLT5PcmcgKSkgeworCXJldHVybiBF
ZGdlU2lnbiggZTItPkRzdCwgZTEtPk9yZywgZTItPk9yZyApIDw9IDA7CisgICAgICB9CisgICAg
ICByZXR1cm4gRWRnZVNpZ24oIGUxLT5Ec3QsIGUyLT5PcmcsIGUxLT5PcmcgKSA+PSAwOworICAg
IH0KKyAgICByZXR1cm4gRWRnZVNpZ24oIGUyLT5Ec3QsIGV2ZW50LCBlMi0+T3JnICkgPD0gMDsK
KyAgfQorICBpZiggZTItPkRzdCA9PSBldmVudCApIHsKKyAgICByZXR1cm4gRWRnZVNpZ24oIGUx
LT5Ec3QsIGV2ZW50LCBlMS0+T3JnICkgPj0gMDsKKyAgfQorCisgIC8qIEdlbmVyYWwgY2FzZSAt
IGNvbXB1dGUgc2lnbmVkIGRpc3RhbmNlICpmcm9tKiBlMSwgZTIgdG8gZXZlbnQgKi8KKyAgdDEg
PSBFZGdlRXZhbCggZTEtPkRzdCwgZXZlbnQsIGUxLT5PcmcgKTsKKyAgdDIgPSBFZGdlRXZhbCgg
ZTItPkRzdCwgZXZlbnQsIGUyLT5PcmcgKTsKKyAgcmV0dXJuICh0MSA+PSB0Mik7Cit9CisKKwor
c3RhdGljIHZvaWQgRGVsZXRlUmVnaW9uKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdp
b24gKnJlZyApCit7CisgIGlmKCByZWctPmZpeFVwcGVyRWRnZSApIHsKKyAgICAvKiBJdCB3YXMg
Y3JlYXRlZCB3aXRoIHplcm8gd2luZGluZyBudW1iZXIsIHNvIGl0IGJldHRlciBiZQorICAgICAq
IGRlbGV0ZWQgd2l0aCB6ZXJvIHdpbmRpbmcgbnVtYmVyIChpZS4gaXQgYmV0dGVyIG5vdCBnZXQg
bWVyZ2VkCisgICAgICogd2l0aCBhIHJlYWwgZWRnZSkuCisgICAgICovCisgICAgYXNzZXJ0KCBy
ZWctPmVVcC0+d2luZGluZyA9PSAwICk7CisgIH0KKyAgcmVnLT5lVXAtPmFjdGl2ZVJlZ2lvbiA9
IE5VTEw7CisgIGRpY3REZWxldGUoIHRlc3MtPmRpY3QsIHJlZy0+bm9kZVVwICk7IC8qIF9fZ2xf
ZGljdExpc3REZWxldGUgKi8KKyAgbWVtRnJlZSggcmVnICk7Cit9CisKKworc3RhdGljIGludCBG
aXhVcHBlckVkZ2UoIEFjdGl2ZVJlZ2lvbiAqcmVnLCBHTFVoYWxmRWRnZSAqbmV3RWRnZSApCisv
KgorICogUmVwbGFjZSBhbiB1cHBlciBlZGdlIHdoaWNoIG5lZWRzIGZpeGluZyAoc2VlIENvbm5l
Y3RSaWdodFZlcnRleCkuCisgKi8KK3sKKyAgYXNzZXJ0KCByZWctPmZpeFVwcGVyRWRnZSApOwor
ICBpZiAoICFfX2dsX21lc2hEZWxldGUoIHJlZy0+ZVVwICkgKSByZXR1cm4gMDsKKyAgcmVnLT5m
aXhVcHBlckVkZ2UgPSBGQUxTRTsKKyAgcmVnLT5lVXAgPSBuZXdFZGdlOworICBuZXdFZGdlLT5h
Y3RpdmVSZWdpb24gPSByZWc7CisKKyAgcmV0dXJuIDE7IAorfQorCitzdGF0aWMgQWN0aXZlUmVn
aW9uICpUb3BMZWZ0UmVnaW9uKCBBY3RpdmVSZWdpb24gKnJlZyApCit7CisgIEdMVXZlcnRleCAq
b3JnID0gcmVnLT5lVXAtPk9yZzsKKyAgR0xVaGFsZkVkZ2UgKmU7CisKKyAgLyogRmluZCB0aGUg
cmVnaW9uIGFib3ZlIHRoZSB1cHBlcm1vc3QgZWRnZSB3aXRoIHRoZSBzYW1lIG9yaWdpbiAqLwor
ICBkbyB7CisgICAgcmVnID0gUmVnaW9uQWJvdmUoIHJlZyApOworICB9IHdoaWxlKCByZWctPmVV
cC0+T3JnID09IG9yZyApOworCisgIC8qIElmIHRoZSBlZGdlIGFib3ZlIHdhcyBhIHRlbXBvcmFy
eSBlZGdlIGludHJvZHVjZWQgYnkgQ29ubmVjdFJpZ2h0VmVydGV4LAorICAgKiBub3cgaXMgdGhl
IHRpbWUgdG8gZml4IGl0LgorICAgKi8KKyAgaWYoIHJlZy0+Zml4VXBwZXJFZGdlICkgeworICAg
IGUgPSBfX2dsX21lc2hDb25uZWN0KCBSZWdpb25CZWxvdyhyZWcpLT5lVXAtPlN5bSwgcmVnLT5l
VXAtPkxuZXh0ICk7CisgICAgaWYgKGUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCAh
Rml4VXBwZXJFZGdlKCByZWcsIGUgKSApIHJldHVybiBOVUxMOworICAgIHJlZyA9IFJlZ2lvbkFi
b3ZlKCByZWcgKTsKKyAgfQorICByZXR1cm4gcmVnOworfQorCitzdGF0aWMgQWN0aXZlUmVnaW9u
ICpUb3BSaWdodFJlZ2lvbiggQWN0aXZlUmVnaW9uICpyZWcgKQoreworICBHTFV2ZXJ0ZXggKmRz
dCA9IHJlZy0+ZVVwLT5Ec3Q7CisKKyAgLyogRmluZCB0aGUgcmVnaW9uIGFib3ZlIHRoZSB1cHBl
cm1vc3QgZWRnZSB3aXRoIHRoZSBzYW1lIGRlc3RpbmF0aW9uICovCisgIGRvIHsKKyAgICByZWcg
PSBSZWdpb25BYm92ZSggcmVnICk7CisgIH0gd2hpbGUoIHJlZy0+ZVVwLT5Ec3QgPT0gZHN0ICk7
CisgIHJldHVybiByZWc7Cit9CisKK3N0YXRpYyBBY3RpdmVSZWdpb24gKkFkZFJlZ2lvbkJlbG93
KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLAorCQkJCSAgICAgQWN0aXZlUmVnaW9uICpyZWdBYm92ZSwK
KwkJCQkgICAgIEdMVWhhbGZFZGdlICplTmV3VXAgKQorLyoKKyAqIEFkZCBhIG5ldyBhY3RpdmUg
cmVnaW9uIHRvIHRoZSBzd2VlcCBsaW5lLCAqc29tZXdoZXJlKiBiZWxvdyAicmVnQWJvdmUiCisg
KiAoYWNjb3JkaW5nIHRvIHdoZXJlIHRoZSBuZXcgZWRnZSBiZWxvbmdzIGluIHRoZSBzd2VlcC1s
aW5lIGRpY3Rpb25hcnkpLgorICogVGhlIHVwcGVyIGVkZ2Ugb2YgdGhlIG5ldyByZWdpb24gd2ls
bCBiZSAiZU5ld1VwIi4KKyAqIFdpbmRpbmcgbnVtYmVyIGFuZCAiaW5zaWRlIiBmbGFnIGFyZSBu
b3QgdXBkYXRlZC4KKyAqLworeworICBBY3RpdmVSZWdpb24gKnJlZ05ldyA9IChBY3RpdmVSZWdp
b24gKiltZW1BbGxvYyggc2l6ZW9mKCBBY3RpdmVSZWdpb24gKSk7CisgIGlmIChyZWdOZXcgPT0g
TlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisKKyAgcmVnTmV3LT5lVXAgPSBlTmV3VXA7Cisg
IC8qIF9fZ2xfZGljdExpc3RJbnNlcnRCZWZvcmUgKi8gCisgIHJlZ05ldy0+bm9kZVVwID0gZGlj
dEluc2VydEJlZm9yZSggdGVzcy0+ZGljdCwgcmVnQWJvdmUtPm5vZGVVcCwgcmVnTmV3ICk7Cisg
IGlmIChyZWdOZXctPm5vZGVVcCA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgcmVn
TmV3LT5maXhVcHBlckVkZ2UgPSBGQUxTRTsKKyAgcmVnTmV3LT5zZW50aW5lbCA9IEZBTFNFOwor
ICByZWdOZXctPmRpcnR5ID0gRkFMU0U7CisKKyAgZU5ld1VwLT5hY3RpdmVSZWdpb24gPSByZWdO
ZXc7CisgIHJldHVybiByZWdOZXc7Cit9CisKK3N0YXRpYyBHTGJvb2xlYW4gSXNXaW5kaW5nSW5z
aWRlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBpbnQgbiApCit7CisgIHN3aXRjaCggdGVzcy0+d2lu
ZGluZ1J1bGUgKSB7CisgIGNhc2UgR0xVX1RFU1NfV0lORElOR19PREQ6CisgICAgcmV0dXJuIChu
ICYgMSk7CisgIGNhc2UgR0xVX1RFU1NfV0lORElOR19OT05aRVJPOgorICAgIHJldHVybiAobiAh
PSAwKTsKKyAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFOgorICAgIHJldHVybiAobiA+
IDApOworICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkU6CisgICAgcmV0dXJuIChuIDwg
MCk7CisgIGNhc2UgR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTzoKKyAgICByZXR1cm4gKG4g
Pj0gMikgfHwgKG4gPD0gLTIpOworICB9CisgIC8qTElOVEVEKi8KKyAgYXNzZXJ0KCBGQUxTRSAp
OworICAvKk5PVFJFQUNIRUQqLworfQorCisKK3N0YXRpYyB2b2lkIENvbXB1dGVXaW5kaW5nKCBH
TFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZyApCit7CisgIHJlZy0+d2luZGlu
Z051bWJlciA9IFJlZ2lvbkFib3ZlKHJlZyktPndpbmRpbmdOdW1iZXIgKyByZWctPmVVcC0+d2lu
ZGluZzsKKyAgcmVnLT5pbnNpZGUgPSBJc1dpbmRpbmdJbnNpZGUoIHRlc3MsIHJlZy0+d2luZGlu
Z051bWJlciApOworfQorCisKK3N0YXRpYyB2b2lkIEZpbmlzaFJlZ2lvbiggR0xVdGVzc2VsYXRv
ciAqdGVzcywgQWN0aXZlUmVnaW9uICpyZWcgKQorLyoKKyAqIERlbGV0ZSBhIHJlZ2lvbiBmcm9t
IHRoZSBzd2VlcCBsaW5lLiAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHVwcGVyCisgKiBhbmQgbG93
ZXIgY2hhaW5zIG9mIGEgcmVnaW9uIG1lZXQgKGF0IGEgdmVydGV4IG9uIHRoZSBzd2VlcCBsaW5l
KS4KKyAqIFRoZSAiaW5zaWRlIiBmbGFnIGlzIGNvcGllZCB0byB0aGUgYXBwcm9wcmlhdGUgbWVz
aCBmYWNlICh3ZSBjb3VsZAorICogbm90IGRvIHRoaXMgYmVmb3JlIC0tIHNpbmNlIHRoZSBzdHJ1
Y3R1cmUgb2YgdGhlIG1lc2ggaXMgYWx3YXlzCisgKiBjaGFuZ2luZywgdGhpcyBmYWNlIG1heSBu
b3QgaGF2ZSBldmVuIGV4aXN0ZWQgdW50aWwgbm93KS4KKyAqLworeworICBHTFVoYWxmRWRnZSAq
ZSA9IHJlZy0+ZVVwOworICBHTFVmYWNlICpmID0gZS0+TGZhY2U7CisKKyAgZi0+aW5zaWRlID0g
cmVnLT5pbnNpZGU7CisgIGYtPmFuRWRnZSA9IGU7ICAgLyogb3B0aW1pemF0aW9uIGZvciBfX2ds
X21lc2hUZXNzZWxsYXRlTW9ub1JlZ2lvbigpICovCisgIERlbGV0ZVJlZ2lvbiggdGVzcywgcmVn
ICk7Cit9CisKKworc3RhdGljIEdMVWhhbGZFZGdlICpGaW5pc2hMZWZ0UmVnaW9ucyggR0xVdGVz
c2VsYXRvciAqdGVzcywKKwkgICAgICAgQWN0aXZlUmVnaW9uICpyZWdGaXJzdCwgQWN0aXZlUmVn
aW9uICpyZWdMYXN0ICkKKy8qCisgKiBXZSBhcmUgZ2l2ZW4gYSB2ZXJ0ZXggd2l0aCBvbmUgb3Ig
bW9yZSBsZWZ0LWdvaW5nIGVkZ2VzLiAgQWxsIGFmZmVjdGVkCisgKiBlZGdlcyBzaG91bGQgYmUg
aW4gdGhlIGVkZ2UgZGljdGlvbmFyeS4gIFN0YXJ0aW5nIGF0IHJlZ0ZpcnN0LT5lVXAsCisgKiB3
ZSB3YWxrIGRvd24gZGVsZXRpbmcgYWxsIHJlZ2lvbnMgd2hlcmUgYm90aCBlZGdlcyBoYXZlIHRo
ZSBzYW1lCisgKiBvcmlnaW4gdk9yZy4gIEF0IHRoZSBzYW1lIHRpbWUgd2UgY29weSB0aGUgImlu
c2lkZSIgZmxhZyBmcm9tIHRoZQorICogYWN0aXZlIHJlZ2lvbiB0byB0aGUgZmFjZSwgc2luY2Ug
YXQgdGhpcyBwb2ludCBlYWNoIGZhY2Ugd2lsbCBiZWxvbmcKKyAqIHRvIGF0IG1vc3Qgb25lIHJl
Z2lvbiAodGhpcyB3YXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgdW50aWwgdGhpcyBwb2ludAorICog
aW4gdGhlIHN3ZWVwKS4gIFRoZSB3YWxrIHN0b3BzIGF0IHRoZSByZWdpb24gYWJvdmUgcmVnTGFz
dDsgaWYgcmVnTGFzdAorICogaXMgTlVMTCB3ZSB3YWxrIGFzIGZhciBhcyBwb3NzaWJsZS4gIEF0
IHRoZSBzYW1lIHRpbWUgd2UgcmVsaW5rIHRoZQorICogbWVzaCBpZiBuZWNlc3NhcnksIHNvIHRo
YXQgdGhlIG9yZGVyaW5nIG9mIGVkZ2VzIGFyb3VuZCB2T3JnIGlzIHRoZQorICogc2FtZSBhcyBp
biB0aGUgZGljdGlvbmFyeS4KKyAqLworeworICBBY3RpdmVSZWdpb24gKnJlZywgKnJlZ1ByZXY7
CisgIEdMVWhhbGZFZGdlICplLCAqZVByZXY7CisKKyAgcmVnUHJldiA9IHJlZ0ZpcnN0OworICBl
UHJldiA9IHJlZ0ZpcnN0LT5lVXA7CisgIHdoaWxlKCByZWdQcmV2ICE9IHJlZ0xhc3QgKSB7Cisg
ICAgcmVnUHJldi0+Zml4VXBwZXJFZGdlID0gRkFMU0U7CS8qIHBsYWNlbWVudCB3YXMgT0sgKi8K
KyAgICByZWcgPSBSZWdpb25CZWxvdyggcmVnUHJldiApOworICAgIGUgPSByZWctPmVVcDsKKyAg
ICBpZiggZS0+T3JnICE9IGVQcmV2LT5PcmcgKSB7CisgICAgICBpZiggISByZWctPmZpeFVwcGVy
RWRnZSApIHsKKwkvKiBSZW1vdmUgdGhlIGxhc3QgbGVmdC1nb2luZyBlZGdlLiAgRXZlbiB0aG91
Z2ggdGhlcmUgYXJlIG5vIGZ1cnRoZXIKKwkgKiBlZGdlcyBpbiB0aGUgZGljdGlvbmFyeSB3aXRo
IHRoaXMgb3JpZ2luLCB0aGVyZSBtYXkgYmUgZnVydGhlcgorCSAqIHN1Y2ggZWRnZXMgaW4gdGhl
IG1lc2ggKGlmIHdlIGFyZSBhZGRpbmcgbGVmdCBlZGdlcyB0byBhIHZlcnRleAorCSAqIHRoYXQg
aGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQpLiAgVGh1cyBpdCBpcyBpbXBvcnRhbnQgdG8gY2Fs
bAorCSAqIEZpbmlzaFJlZ2lvbiByYXRoZXIgdGhhbiBqdXN0IERlbGV0ZVJlZ2lvbi4KKwkgKi8K
KwlGaW5pc2hSZWdpb24oIHRlc3MsIHJlZ1ByZXYgKTsKKwlicmVhazsKKyAgICAgIH0KKyAgICAg
IC8qIElmIHRoZSBlZGdlIGJlbG93IHdhcyBhIHRlbXBvcmFyeSBlZGdlIGludHJvZHVjZWQgYnkK
KyAgICAgICAqIENvbm5lY3RSaWdodFZlcnRleCwgbm93IGlzIHRoZSB0aW1lIHRvIGZpeCBpdC4K
KyAgICAgICAqLworICAgICAgZSA9IF9fZ2xfbWVzaENvbm5lY3QoIGVQcmV2LT5McHJldiwgZS0+
U3ltICk7CisgICAgICBpZiAoZSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgICAg
IGlmICggIUZpeFVwcGVyRWRnZSggcmVnLCBlICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAg
ICB9CisKKyAgICAvKiBSZWxpbmsgZWRnZXMgc28gdGhhdCBlUHJldi0+T25leHQgPT0gZSAqLwor
ICAgIGlmKCBlUHJldi0+T25leHQgIT0gZSApIHsKKyAgICAgIGlmICggIV9fZ2xfbWVzaFNwbGlj
ZSggZS0+T3ByZXYsIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgICAgaWYgKCAhX19n
bF9tZXNoU3BsaWNlKCBlUHJldiwgZSApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisgICAgfQor
ICAgIEZpbmlzaFJlZ2lvbiggdGVzcywgcmVnUHJldiApOwkvKiBtYXkgY2hhbmdlIHJlZy0+ZVVw
ICovCisgICAgZVByZXYgPSByZWctPmVVcDsKKyAgICByZWdQcmV2ID0gcmVnOworICB9CisgIHJl
dHVybiBlUHJldjsKK30KKworCitzdGF0aWMgdm9pZCBBZGRSaWdodEVkZ2VzKCBHTFV0ZXNzZWxh
dG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZ1VwLAorICAgICAgIEdMVWhhbGZFZGdlICplRmly
c3QsIEdMVWhhbGZFZGdlICplTGFzdCwgR0xVaGFsZkVkZ2UgKmVUb3BMZWZ0LAorICAgICAgIEdM
Ym9vbGVhbiBjbGVhblVwICkKKy8qCisgKiBQdXJwb3NlOiBpbnNlcnQgcmlnaHQtZ29pbmcgZWRn
ZXMgaW50byB0aGUgZWRnZSBkaWN0aW9uYXJ5LCBhbmQgdXBkYXRlCisgKiB3aW5kaW5nIG51bWJl
cnMgYW5kIG1lc2ggY29ubmVjdGl2aXR5IGFwcHJvcHJpYXRlbHkuICBBbGwgcmlnaHQtZ29pbmcK
KyAqIGVkZ2VzIHNoYXJlIGEgY29tbW9uIG9yaWdpbiB2T3JnLiAgRWRnZXMgYXJlIGluc2VydGVk
IENDVyBzdGFydGluZyBhdAorICogZUZpcnN0OyB0aGUgbGFzdCBlZGdlIGluc2VydGVkIGlzIGVM
YXN0LT5PcHJldi4gIElmIHZPcmcgaGFzIGFueQorICogbGVmdC1nb2luZyBlZGdlcyBhbHJlYWR5
IHByb2Nlc3NlZCwgdGhlbiBlVG9wTGVmdCBtdXN0IGJlIHRoZSBlZGdlCisgKiBzdWNoIHRoYXQg
YW4gaW1hZ2luYXJ5IHVwd2FyZCB2ZXJ0aWNhbCBzZWdtZW50IGZyb20gdk9yZyB3b3VsZCBiZQor
ICogY29udGFpbmVkIGJldHdlZW4gZVRvcExlZnQtPk9wcmV2IGFuZCBlVG9wTGVmdDsgb3RoZXJ3
aXNlIGVUb3BMZWZ0CisgKiBzaG91bGQgYmUgTlVMTC4KKyAqLworeworICBBY3RpdmVSZWdpb24g
KnJlZywgKnJlZ1ByZXY7CisgIEdMVWhhbGZFZGdlICplLCAqZVByZXY7CisgIGludCBmaXJzdFRp
bWUgPSBUUlVFOworCisgIC8qIEluc2VydCB0aGUgbmV3IHJpZ2h0LWdvaW5nIGVkZ2VzIGluIHRo
ZSBkaWN0aW9uYXJ5ICovCisgIGUgPSBlRmlyc3Q7CisgIGRvIHsKKyAgICBhc3NlcnQoIFZlcnRM
ZXEoIGUtPk9yZywgZS0+RHN0ICkpOworICAgIEFkZFJlZ2lvbkJlbG93KCB0ZXNzLCByZWdVcCwg
ZS0+U3ltICk7CisgICAgZSA9IGUtPk9uZXh0OworICB9IHdoaWxlICggZSAhPSBlTGFzdCApOwor
CisgIC8qIFdhbGsgKmFsbCogcmlnaHQtZ29pbmcgZWRnZXMgZnJvbSBlLT5PcmcsIGluIHRoZSBk
aWN0aW9uYXJ5IG9yZGVyLAorICAgKiB1cGRhdGluZyB0aGUgd2luZGluZyBudW1iZXJzIG9mIGVh
Y2ggcmVnaW9uLCBhbmQgcmUtbGlua2luZyB0aGUgbWVzaAorICAgKiBlZGdlcyB0byBtYXRjaCB0
aGUgZGljdGlvbmFyeSBvcmRlcmluZyAoaWYgbmVjZXNzYXJ5KS4KKyAgICovCisgIGlmKCBlVG9w
TGVmdCA9PSBOVUxMICkgeworICAgIGVUb3BMZWZ0ID0gUmVnaW9uQmVsb3coIHJlZ1VwICktPmVV
cC0+UnByZXY7CisgIH0KKyAgcmVnUHJldiA9IHJlZ1VwOworICBlUHJldiA9IGVUb3BMZWZ0Owor
ICBmb3IoIDs7ICkgeworICAgIHJlZyA9IFJlZ2lvbkJlbG93KCByZWdQcmV2ICk7CisgICAgZSA9
IHJlZy0+ZVVwLT5TeW07CisgICAgaWYoIGUtPk9yZyAhPSBlUHJldi0+T3JnICkgYnJlYWs7CisK
KyAgICBpZiggZS0+T25leHQgIT0gZVByZXYgKSB7CisgICAgICAvKiBVbmxpbmsgZSBmcm9tIGl0
cyBjdXJyZW50IHBvc2l0aW9uLCBhbmQgcmVsaW5rIGJlbG93IGVQcmV2ICovCisgICAgICBpZiAo
ICFfX2dsX21lc2hTcGxpY2UoIGUtPk9wcmV2LCBlICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsK
KyAgICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZVByZXYtPk9wcmV2LCBlICkgKSBsb25nam1w
KHRlc3MtPmVudiwxKTsKKyAgICB9CisgICAgLyogQ29tcHV0ZSB0aGUgd2luZGluZyBudW1iZXIg
YW5kICJpbnNpZGUiIGZsYWcgZm9yIHRoZSBuZXcgcmVnaW9ucyAqLworICAgIHJlZy0+d2luZGlu
Z051bWJlciA9IHJlZ1ByZXYtPndpbmRpbmdOdW1iZXIgLSBlLT53aW5kaW5nOworICAgIHJlZy0+
aW5zaWRlID0gSXNXaW5kaW5nSW5zaWRlKCB0ZXNzLCByZWctPndpbmRpbmdOdW1iZXIgKTsKKwor
ICAgIC8qIENoZWNrIGZvciB0d28gb3V0Z29pbmcgZWRnZXMgd2l0aCBzYW1lIHNsb3BlIC0tIHBy
b2Nlc3MgdGhlc2UKKyAgICAgKiBiZWZvcmUgYW55IGludGVyc2VjdGlvbiB0ZXN0cyAoc2VlIGV4
YW1wbGUgaW4gX19nbF9jb21wdXRlSW50ZXJpb3IpLgorICAgICAqLworICAgIHJlZ1ByZXYtPmRp
cnR5ID0gVFJVRTsKKyAgICBpZiggISBmaXJzdFRpbWUgJiYgQ2hlY2tGb3JSaWdodFNwbGljZSgg
dGVzcywgcmVnUHJldiApKSB7CisgICAgICBBZGRXaW5kaW5nKCBlLCBlUHJldiApOworICAgICAg
RGVsZXRlUmVnaW9uKCB0ZXNzLCByZWdQcmV2ICk7CisgICAgICBpZiAoICFfX2dsX21lc2hEZWxl
dGUoIGVQcmV2ICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgICB9CisgICAgZmlyc3RUaW1l
ID0gRkFMU0U7CisgICAgcmVnUHJldiA9IHJlZzsKKyAgICBlUHJldiA9IGU7CisgIH0KKyAgcmVn
UHJldi0+ZGlydHkgPSBUUlVFOworICBhc3NlcnQoIHJlZ1ByZXYtPndpbmRpbmdOdW1iZXIgLSBl
LT53aW5kaW5nID09IHJlZy0+d2luZGluZ051bWJlciApOworCisgIGlmKCBjbGVhblVwICkgewor
ICAgIC8qIENoZWNrIGZvciBpbnRlcnNlY3Rpb25zIGJldHdlZW4gbmV3bHkgYWRqYWNlbnQgZWRn
ZXMuICovCisgICAgV2Fsa0RpcnR5UmVnaW9ucyggdGVzcywgcmVnUHJldiApOworICB9Cit9CisK
Kworc3RhdGljIHZvaWQgQ2FsbENvbWJpbmUoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVXZlcnRl
eCAqaXNlY3QsCisJCQkgdm9pZCAqZGF0YVs0XSwgR0xmbG9hdCB3ZWlnaHRzWzRdLCBpbnQgbmVl
ZGVkICkKK3sKKyAgR0xkb3VibGUgY29vcmRzWzNdOworCisgIC8qIENvcHkgY29vcmQgZGF0YSBp
biBjYXNlIHRoZSBjYWxsYmFjayBjaGFuZ2VzIGl0LiAqLworICBjb29yZHNbMF0gPSBpc2VjdC0+
Y29vcmRzWzBdOworICBjb29yZHNbMV0gPSBpc2VjdC0+Y29vcmRzWzFdOworICBjb29yZHNbMl0g
PSBpc2VjdC0+Y29vcmRzWzJdOworCisgIGlzZWN0LT5kYXRhID0gTlVMTDsKKyAgQ0FMTF9DT01C
SU5FX09SX0NPTUJJTkVfREFUQSggY29vcmRzLCBkYXRhLCB3ZWlnaHRzLCAmaXNlY3QtPmRhdGEg
KTsKKyAgaWYoIGlzZWN0LT5kYXRhID09IE5VTEwgKSB7CisgICAgaWYoICEgbmVlZGVkICkgewor
ICAgICAgaXNlY3QtPmRhdGEgPSBkYXRhWzBdOworICAgIH0gZWxzZSBpZiggISB0ZXNzLT5mYXRh
bEVycm9yICkgeworICAgICAgLyogVGhlIG9ubHkgd2F5IGZhdGFsIGVycm9yIGlzIHdoZW4gdHdv
IGVkZ2VzIGFyZSBmb3VuZCB0byBpbnRlcnNlY3QsCisgICAgICAgKiBidXQgdGhlIHVzZXIgaGFz
IG5vdCBwcm92aWRlZCB0aGUgY2FsbGJhY2sgbmVjZXNzYXJ5IHRvIGhhbmRsZQorICAgICAgICog
Z2VuZXJhdGVkIGludGVyc2VjdGlvbiBwb2ludHMuCisgICAgICAgKi8KKyAgICAgIENBTExfRVJS
T1JfT1JfRVJST1JfREFUQSggR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLICk7CisgICAg
ICB0ZXNzLT5mYXRhbEVycm9yID0gVFJVRTsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQg
U3BsaWNlTWVyZ2VWZXJ0aWNlcyggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVkZ2UgKmUx
LAorCQkJCSBHTFVoYWxmRWRnZSAqZTIgKQorLyoKKyAqIFR3byB2ZXJ0aWNlcyB3aXRoIGlkZW50
aWFsIGNvb3JkaW5hdGVzIGFyZSBjb21iaW5lZCBpbnRvIG9uZS4KKyAqIGUxLT5PcmcgaXMga2Vw
dCwgd2hpbGUgZTItPk9yZyBpcyBkaXNjYXJkZWQuCisgKi8KK3sKKyAgdm9pZCAqZGF0YVs0XSA9
IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworICBHTGZsb2F0IHdlaWdodHNbNF0gPSB7IDAu
NSwgMC41LCAwLjAsIDAuMCB9OworCisgIGRhdGFbMF0gPSBlMS0+T3JnLT5kYXRhOworICBkYXRh
WzFdID0gZTItPk9yZy0+ZGF0YTsKKyAgQ2FsbENvbWJpbmUoIHRlc3MsIGUxLT5PcmcsIGRhdGEs
IHdlaWdodHMsIEZBTFNFICk7CisgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZTEsIGUyICkgKSBs
b25nam1wKHRlc3MtPmVudiwxKTsgCit9CisKK3N0YXRpYyB2b2lkIFZlcnRleFdlaWdodHMoIEdM
VXZlcnRleCAqaXNlY3QsIEdMVXZlcnRleCAqb3JnLCBHTFV2ZXJ0ZXggKmRzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKndlaWdodHMgKQorLyoKKyAqIEZpbmQgc29tZSB3
ZWlnaHRzIHdoaWNoIGRlc2NyaWJlIGhvdyB0aGUgaW50ZXJzZWN0aW9uIHZlcnRleCBpcworICog
YSBsaW5lYXIgY29tYmluYXRpb24gb2YgIm9yZyIgYW5kICJkZXN0Ii4gIEVhY2ggb2YgdGhlIHR3
byBlZGdlcworICogd2hpY2ggZ2VuZXJhdGVkICJpc2VjdCIgaXMgYWxsb2NhdGVkIDUwJSBvZiB0
aGUgd2VpZ2h0OyBlYWNoIGVkZ2UKKyAqIHNwbGl0cyB0aGUgd2VpZ2h0IGJldHdlZW4gaXRzIG9y
ZyBhbmQgZHN0IGFjY29yZGluZyB0byB0aGUKKyAqIHJlbGF0aXZlIGRpc3RhbmNlIHRvICJpc2Vj
dCIuCisgKi8KK3sKKyAgR0xkb3VibGUgdDEgPSBWZXJ0TDFkaXN0KCBvcmcsIGlzZWN0ICk7Cisg
IEdMZG91YmxlIHQyID0gVmVydEwxZGlzdCggZHN0LCBpc2VjdCApOworCisgIHdlaWdodHNbMF0g
PSAwLjUgKiB0MiAvICh0MSArIHQyKTsKKyAgd2VpZ2h0c1sxXSA9IDAuNSAqIHQxIC8gKHQxICsg
dDIpOworICBpc2VjdC0+Y29vcmRzWzBdICs9IHdlaWdodHNbMF0qb3JnLT5jb29yZHNbMF0gKyB3
ZWlnaHRzWzFdKmRzdC0+Y29vcmRzWzBdOworICBpc2VjdC0+Y29vcmRzWzFdICs9IHdlaWdodHNb
MF0qb3JnLT5jb29yZHNbMV0gKyB3ZWlnaHRzWzFdKmRzdC0+Y29vcmRzWzFdOworICBpc2VjdC0+
Y29vcmRzWzJdICs9IHdlaWdodHNbMF0qb3JnLT5jb29yZHNbMl0gKyB3ZWlnaHRzWzFdKmRzdC0+
Y29vcmRzWzJdOworfQorCisKK3N0YXRpYyB2b2lkIEdldEludGVyc2VjdERhdGEoIEdMVXRlc3Nl
bGF0b3IgKnRlc3MsIEdMVXZlcnRleCAqaXNlY3QsCisgICAgICAgR0xVdmVydGV4ICpvcmdVcCwg
R0xVdmVydGV4ICpkc3RVcCwKKyAgICAgICBHTFV2ZXJ0ZXggKm9yZ0xvLCBHTFV2ZXJ0ZXggKmRz
dExvICkKKy8qCisgKiBXZSd2ZSBjb21wdXRlZCBhIG5ldyBpbnRlcnNlY3Rpb24gcG9pbnQsIG5v
dyB3ZSBuZWVkIGEgImRhdGEiIHBvaW50ZXIKKyAqIGZyb20gdGhlIHVzZXIgc28gdGhhdCB3ZSBj
YW4gcmVmZXIgdG8gdGhpcyBuZXcgdmVydGV4IGluIHRoZQorICogcmVuZGVyaW5nIGNhbGxiYWNr
cy4KKyAqLworeworICB2b2lkICpkYXRhWzRdOworICBHTGZsb2F0IHdlaWdodHNbNF07CisKKyAg
ZGF0YVswXSA9IG9yZ1VwLT5kYXRhOworICBkYXRhWzFdID0gZHN0VXAtPmRhdGE7CisgIGRhdGFb
Ml0gPSBvcmdMby0+ZGF0YTsKKyAgZGF0YVszXSA9IGRzdExvLT5kYXRhOworCisgIGlzZWN0LT5j
b29yZHNbMF0gPSBpc2VjdC0+Y29vcmRzWzFdID0gaXNlY3QtPmNvb3Jkc1syXSA9IDA7CisgIFZl
cnRleFdlaWdodHMoIGlzZWN0LCBvcmdVcCwgZHN0VXAsICZ3ZWlnaHRzWzBdICk7CisgIFZlcnRl
eFdlaWdodHMoIGlzZWN0LCBvcmdMbywgZHN0TG8sICZ3ZWlnaHRzWzJdICk7CisKKyAgQ2FsbENv
bWJpbmUoIHRlc3MsIGlzZWN0LCBkYXRhLCB3ZWlnaHRzLCBUUlVFICk7Cit9CisKK3N0YXRpYyBp
bnQgQ2hlY2tGb3JSaWdodFNwbGljZSggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9u
ICpyZWdVcCApCisvKgorICogQ2hlY2sgdGhlIHVwcGVyIGFuZCBsb3dlciBlZGdlIG9mICJyZWdV
cCIsIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICogZVVwLT5PcmcgaXMgYWJvdmUgZUxvLCBvciBl
TG8tPk9yZyBpcyBiZWxvdyBlVXAgKGRlcGVuZGluZyBvbiB3aGljaAorICogb3JpZ2luIGlzIGxl
ZnRtb3N0KS4KKyAqCisgKiBUaGUgbWFpbiBwdXJwb3NlIGlzIHRvIHNwbGljZSByaWdodC1nb2lu
ZyBlZGdlcyB3aXRoIHRoZSBzYW1lCisgKiBkZXN0IHZlcnRleCBhbmQgbmVhcmx5IGlkZW50aWNh
bCBzbG9wZXMgKGllLiB3ZSBjYW4ndCBkaXN0aW5ndWlzaAorICogdGhlIHNsb3BlcyBudW1lcmlj
YWxseSkuICBIb3dldmVyIHRoZSBzcGxpY2luZyBjYW4gYWxzbyBoZWxwIHVzCisgKiB0byByZWNv
dmVyIGZyb20gbnVtZXJpY2FsIGVycm9ycy4gIEZvciBleGFtcGxlLCBzdXBwb3NlIGF0IG9uZQor
ICogcG9pbnQgd2UgY2hlY2tlZCBlVXAgYW5kIGVMbywgYW5kIGRlY2lkZWQgdGhhdCBlVXAtPk9y
ZyBpcyBiYXJlbHkKKyAqIGFib3ZlIGVMby4gIFRoZW4gbGF0ZXIsIHdlIHNwbGl0IGVMbyBpbnRv
IHR3byBlZGdlcyAoZWcuIGZyb20KKyAqIGEgc3BsaWNlIG9wZXJhdGlvbiBsaWtlIHRoaXMgb25l
KS4gIFRoaXMgY2FuIGNoYW5nZSB0aGUgcmVzdWx0IG9mCisgKiBvdXIgdGVzdCBzbyB0aGF0IG5v
dyBlVXAtPk9yZyBpcyBpbmNpZGVudCB0byBlTG8sIG9yIGJhcmVseSBiZWxvdyBpdC4KKyAqIFdl
IG11c3QgY29ycmVjdCB0aGlzIGNvbmRpdGlvbiB0byBtYWludGFpbiB0aGUgZGljdGlvbmFyeSBp
bnZhcmlhbnRzLgorICoKKyAqIE9uZSBwb3NzaWJpbGl0eSBpcyB0byBjaGVjayB0aGVzZSBlZGdl
cyBmb3IgaW50ZXJzZWN0aW9uIGFnYWluCisgKiAoaWUuIENoZWNrRm9ySW50ZXJzZWN0KS4gIFRo
aXMgaXMgd2hhdCB3ZSBkbyBpZiBwb3NzaWJsZS4gIEhvd2V2ZXIKKyAqIENoZWNrRm9ySW50ZXJz
ZWN0IHJlcXVpcmVzIHRoYXQgdGVzcy0+ZXZlbnQgbGllcyBiZXR3ZWVuIGVVcCBhbmQgZUxvLAor
ICogc28gdGhhdCBpdCBoYXMgc29tZXRoaW5nIHRvIGZhbGwgYmFjayBvbiB3aGVuIHRoZSBpbnRl
cnNlY3Rpb24KKyAqIGNhbGN1bGF0aW9uIGdpdmVzIHVzIGFuIHVudXNhYmxlIGFuc3dlci4gIFNv
LCBmb3IgdGhvc2UgY2FzZXMgd2hlcmUKKyAqIHdlIGNhbid0IGNoZWNrIGZvciBpbnRlcnNlY3Rp
b24sIHRoaXMgcm91dGluZSBmaXhlcyB0aGUgcHJvYmxlbQorICogYnkganVzdCBzcGxpY2luZyB0
aGUgb2ZmZW5kaW5nIHZlcnRleCBpbnRvIHRoZSBvdGhlciBlZGdlLgorICogVGhpcyBpcyBhIGd1
YXJhbnRlZWQgc29sdXRpb24sIG5vIG1hdHRlciBob3cgZGVnZW5lcmF0ZSB0aGluZ3MgZ2V0Lgor
ICogQmFzaWNhbGx5IHRoaXMgaXMgYSBjb21iaW5hdG9yaWFsIHNvbHV0aW9uIHRvIGEgbnVtZXJp
Y2FsIHByb2JsZW0uCisgKi8KK3sKKyAgQWN0aXZlUmVnaW9uICpyZWdMbyA9IFJlZ2lvbkJlbG93
KHJlZ1VwKTsKKyAgR0xVaGFsZkVkZ2UgKmVVcCA9IHJlZ1VwLT5lVXA7CisgIEdMVWhhbGZFZGdl
ICplTG8gPSByZWdMby0+ZVVwOworCisgIGlmKCBWZXJ0TGVxKCBlVXAtPk9yZywgZUxvLT5Pcmcg
KSkgeworICAgIGlmKCBFZGdlU2lnbiggZUxvLT5Ec3QsIGVVcC0+T3JnLCBlTG8tPk9yZyApID4g
MCApIHJldHVybiBGQUxTRTsKKworICAgIC8qIGVVcC0+T3JnIGFwcGVhcnMgdG8gYmUgYmVsb3cg
ZUxvICovCisgICAgaWYoICEgVmVydEVxKCBlVXAtPk9yZywgZUxvLT5PcmcgKSkgeworICAgICAg
LyogU3BsaWNlIGVVcC0+T3JnIGludG8gZUxvICovCisgICAgICBpZiAoIF9fZ2xfbWVzaFNwbGl0
RWRnZSggZUxvLT5TeW0gKSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgICAgIGlm
ICggIV9fZ2xfbWVzaFNwbGljZSggZVVwLCBlTG8tPk9wcmV2ICkgKSBsb25nam1wKHRlc3MtPmVu
diwxKTsKKyAgICAgIHJlZ1VwLT5kaXJ0eSA9IHJlZ0xvLT5kaXJ0eSA9IFRSVUU7CisKKyAgICB9
IGVsc2UgaWYoIGVVcC0+T3JnICE9IGVMby0+T3JnICkgeworICAgICAgLyogbWVyZ2UgdGhlIHR3
byB2ZXJ0aWNlcywgZGlzY2FyZGluZyBlVXAtPk9yZyAqLworICAgICAgcHFEZWxldGUoIHRlc3Mt
PnBxLCBlVXAtPk9yZy0+cHFIYW5kbGUgKTsgLyogX19nbF9wcVNvcnREZWxldGUgKi8KKyAgICAg
IFNwbGljZU1lcmdlVmVydGljZXMoIHRlc3MsIGVMby0+T3ByZXYsIGVVcCApOworICAgIH0KKyAg
fSBlbHNlIHsKKyAgICBpZiggRWRnZVNpZ24oIGVVcC0+RHN0LCBlTG8tPk9yZywgZVVwLT5Pcmcg
KSA8IDAgKSByZXR1cm4gRkFMU0U7CisKKyAgICAvKiBlTG8tPk9yZyBhcHBlYXJzIHRvIGJlIGFi
b3ZlIGVVcCwgc28gc3BsaWNlIGVMby0+T3JnIGludG8gZVVwICovCisgICAgUmVnaW9uQWJvdmUo
cmVnVXApLT5kaXJ0eSA9IHJlZ1VwLT5kaXJ0eSA9IFRSVUU7CisgICAgaWYgKF9fZ2xfbWVzaFNw
bGl0RWRnZSggZVVwLT5TeW0gKSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgICBp
ZiAoICFfX2dsX21lc2hTcGxpY2UoIGVMby0+T3ByZXYsIGVVcCApICkgbG9uZ2ptcCh0ZXNzLT5l
bnYsMSk7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBpbnQgQ2hlY2tGb3JMZWZ0
U3BsaWNlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZ1VwICkKKy8qCisg
KiBDaGVjayB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2Ugb2YgInJlZ1VwIiwgdG8gbWFrZSBzdXJl
IHRoYXQgdGhlCisgKiBlVXAtPkRzdCBpcyBhYm92ZSBlTG8sIG9yIGVMby0+RHN0IGlzIGJlbG93
IGVVcCAoZGVwZW5kaW5nIG9uIHdoaWNoCisgKiBkZXN0aW5hdGlvbiBpcyByaWdodG1vc3QpLgor
ICoKKyAqIFRoZW9yZXRpY2FsbHksIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlLiAgSG93ZXZl
ciwgc3BsaXR0aW5nIGFuIGVkZ2UKKyAqIGludG8gdHdvIHBpZWNlcyBjYW4gY2hhbmdlIHRoZSBy
ZXN1bHRzIG9mIHByZXZpb3VzIHRlc3RzLiAgRm9yIGV4YW1wbGUsCisgKiBzdXBwb3NlIGF0IG9u
ZSBwb2ludCB3ZSBjaGVja2VkIGVVcCBhbmQgZUxvLCBhbmQgZGVjaWRlZCB0aGF0IGVVcC0+RHN0
CisgKiBpcyBiYXJlbHkgYWJvdmUgZUxvLiAgVGhlbiBsYXRlciwgd2Ugc3BsaXQgZUxvIGludG8g
dHdvIGVkZ2VzIChlZy4gZnJvbQorICogYSBzcGxpY2Ugb3BlcmF0aW9uIGxpa2UgdGhpcyBvbmUp
LiAgVGhpcyBjYW4gY2hhbmdlIHRoZSByZXN1bHQgb2YKKyAqIHRoZSB0ZXN0IHNvIHRoYXQgbm93
IGVVcC0+RHN0IGlzIGluY2lkZW50IHRvIGVMbywgb3IgYmFyZWx5IGJlbG93IGl0LgorICogV2Ug
bXVzdCBjb3JyZWN0IHRoaXMgY29uZGl0aW9uIHRvIG1haW50YWluIHRoZSBkaWN0aW9uYXJ5IGlu
dmFyaWFudHMKKyAqIChvdGhlcndpc2UgbmV3IGVkZ2VzIG1pZ2h0IGdldCBpbnNlcnRlZCBpbiB0
aGUgd3JvbmcgcGxhY2UgaW4gdGhlCisgKiBkaWN0aW9uYXJ5LCBhbmQgYmFkIHN0dWZmIHdpbGwg
aGFwcGVuKS4KKyAqCisgKiBXZSBmaXggdGhlIHByb2JsZW0gYnkganVzdCBzcGxpY2luZyB0aGUg
b2ZmZW5kaW5nIHZlcnRleCBpbnRvIHRoZQorICogb3RoZXIgZWRnZS4KKyAqLworeworICBBY3Rp
dmVSZWdpb24gKnJlZ0xvID0gUmVnaW9uQmVsb3cocmVnVXApOworICBHTFVoYWxmRWRnZSAqZVVw
ID0gcmVnVXAtPmVVcDsKKyAgR0xVaGFsZkVkZ2UgKmVMbyA9IHJlZ0xvLT5lVXA7CisgIEdMVWhh
bGZFZGdlICplOworCisgIGFzc2VydCggISBWZXJ0RXEoIGVVcC0+RHN0LCBlTG8tPkRzdCApKTsK
KworICBpZiggVmVydExlcSggZVVwLT5Ec3QsIGVMby0+RHN0ICkpIHsKKyAgICBpZiggRWRnZVNp
Z24oIGVVcC0+RHN0LCBlTG8tPkRzdCwgZVVwLT5PcmcgKSA8IDAgKSByZXR1cm4gRkFMU0U7CisK
KyAgICAvKiBlTG8tPkRzdCBpcyBhYm92ZSBlVXAsIHNvIHNwbGljZSBlTG8tPkRzdCBpbnRvIGVV
cCAqLworICAgIFJlZ2lvbkFib3ZlKHJlZ1VwKS0+ZGlydHkgPSByZWdVcC0+ZGlydHkgPSBUUlVF
OworICAgIGUgPSBfX2dsX21lc2hTcGxpdEVkZ2UoIGVVcCApOworICAgIGlmIChlID09IE5VTEwp
IGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZUxvLT5T
eW0sIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgIGUtPkxmYWNlLT5pbnNpZGUgPSBy
ZWdVcC0+aW5zaWRlOworICB9IGVsc2UgeworICAgIGlmKCBFZGdlU2lnbiggZUxvLT5Ec3QsIGVV
cC0+RHN0LCBlTG8tPk9yZyApID4gMCApIHJldHVybiBGQUxTRTsKKworICAgIC8qIGVVcC0+RHN0
IGlzIGJlbG93IGVMbywgc28gc3BsaWNlIGVVcC0+RHN0IGludG8gZUxvICovCisgICAgcmVnVXAt
PmRpcnR5ID0gcmVnTG8tPmRpcnR5ID0gVFJVRTsKKyAgICBlID0gX19nbF9tZXNoU3BsaXRFZGdl
KCBlTG8gKTsKKyAgICBpZiAoZSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsgICAgCisg
ICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlVXAtPkxuZXh0LCBlTG8tPlN5bSApICkgbG9uZ2pt
cCh0ZXNzLT5lbnYsMSk7CisgICAgZS0+UmZhY2UtPmluc2lkZSA9IHJlZ1VwLT5pbnNpZGU7Cisg
IH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKKworc3RhdGljIGludCBDaGVja0ZvckludGVyc2VjdCgg
R0xVdGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9uICpyZWdVcCApCisvKgorICogQ2hlY2sg
dGhlIHVwcGVyIGFuZCBsb3dlciBlZGdlcyBvZiB0aGUgZ2l2ZW4gcmVnaW9uIHRvIHNlZSBpZgor
ICogdGhleSBpbnRlcnNlY3QuICBJZiBzbywgY3JlYXRlIHRoZSBpbnRlcnNlY3Rpb24gYW5kIGFk
ZCBpdAorICogdG8gdGhlIGRhdGEgc3RydWN0dXJlcy4KKyAqCisgKiBSZXR1cm5zIFRSVUUgaWYg
YWRkaW5nIHRoZSBuZXcgaW50ZXJzZWN0aW9uIHJlc3VsdGVkIGluIGEgcmVjdXJzaXZlCisgKiBj
YWxsIHRvIEFkZFJpZ2h0RWRnZXMoKTsgaW4gdGhpcyBjYXNlIGFsbCAiZGlydHkiIHJlZ2lvbnMg
aGF2ZSBiZWVuCisgKiBjaGVja2VkIGZvciBpbnRlcnNlY3Rpb25zLCBhbmQgcG9zc2libHkgcmVn
VXAgaGFzIGJlZW4gZGVsZXRlZC4KKyAqLworeworICBBY3RpdmVSZWdpb24gKnJlZ0xvID0gUmVn
aW9uQmVsb3cocmVnVXApOworICBHTFVoYWxmRWRnZSAqZVVwID0gcmVnVXAtPmVVcDsKKyAgR0xV
aGFsZkVkZ2UgKmVMbyA9IHJlZ0xvLT5lVXA7CisgIEdMVXZlcnRleCAqb3JnVXAgPSBlVXAtPk9y
ZzsKKyAgR0xVdmVydGV4ICpvcmdMbyA9IGVMby0+T3JnOworICBHTFV2ZXJ0ZXggKmRzdFVwID0g
ZVVwLT5Ec3Q7CisgIEdMVXZlcnRleCAqZHN0TG8gPSBlTG8tPkRzdDsKKyAgR0xkb3VibGUgdE1p
blVwLCB0TWF4TG87CisgIEdMVXZlcnRleCBpc2VjdCwgKm9yZ01pbjsKKyAgR0xVaGFsZkVkZ2Ug
KmU7CisKKyAgYXNzZXJ0KCAhIFZlcnRFcSggZHN0TG8sIGRzdFVwICkpOworICBhc3NlcnQoIEVk
Z2VTaWduKCBkc3RVcCwgdGVzcy0+ZXZlbnQsIG9yZ1VwICkgPD0gMCApOworICBhc3NlcnQoIEVk
Z2VTaWduKCBkc3RMbywgdGVzcy0+ZXZlbnQsIG9yZ0xvICkgPj0gMCApOworICBhc3NlcnQoIG9y
Z1VwICE9IHRlc3MtPmV2ZW50ICYmIG9yZ0xvICE9IHRlc3MtPmV2ZW50ICk7CisgIGFzc2VydCgg
ISByZWdVcC0+Zml4VXBwZXJFZGdlICYmICEgcmVnTG8tPmZpeFVwcGVyRWRnZSApOworCisgIGlm
KCBvcmdVcCA9PSBvcmdMbyApIHJldHVybiBGQUxTRTsJLyogcmlnaHQgZW5kcG9pbnRzIGFyZSB0
aGUgc2FtZSAqLworCisgIHRNaW5VcCA9IE1JTiggb3JnVXAtPnQsIGRzdFVwLT50ICk7CisgIHRN
YXhMbyA9IE1BWCggb3JnTG8tPnQsIGRzdExvLT50ICk7CisgIGlmKCB0TWluVXAgPiB0TWF4TG8g
KSByZXR1cm4gRkFMU0U7CS8qIHQgcmFuZ2VzIGRvIG5vdCBvdmVybGFwICovCisKKyAgaWYoIFZl
cnRMZXEoIG9yZ1VwLCBvcmdMbyApKSB7CisgICAgaWYoIEVkZ2VTaWduKCBkc3RMbywgb3JnVXAs
IG9yZ0xvICkgPiAwICkgcmV0dXJuIEZBTFNFOworICB9IGVsc2UgeworICAgIGlmKCBFZGdlU2ln
biggZHN0VXAsIG9yZ0xvLCBvcmdVcCApIDwgMCApIHJldHVybiBGQUxTRTsKKyAgfQorCisgIC8q
IEF0IHRoaXMgcG9pbnQgdGhlIGVkZ2VzIGludGVyc2VjdCwgYXQgbGVhc3QgbWFyZ2luYWxseSAq
LworICBEZWJ1Z0V2ZW50KCB0ZXNzICk7CisKKyAgX19nbF9lZGdlSW50ZXJzZWN0KCBkc3RVcCwg
b3JnVXAsIGRzdExvLCBvcmdMbywgJmlzZWN0ICk7CisgIC8qIFRoZSBmb2xsb3dpbmcgcHJvcGVy
dGllcyBhcmUgZ3VhcmFudGVlZDogKi8KKyAgYXNzZXJ0KCBNSU4oIG9yZ1VwLT50LCBkc3RVcC0+
dCApIDw9IGlzZWN0LnQgKTsKKyAgYXNzZXJ0KCBpc2VjdC50IDw9IE1BWCggb3JnTG8tPnQsIGRz
dExvLT50ICkpOworICBhc3NlcnQoIE1JTiggZHN0TG8tPnMsIGRzdFVwLT5zICkgPD0gaXNlY3Qu
cyApOworICBhc3NlcnQoIGlzZWN0LnMgPD0gTUFYKCBvcmdMby0+cywgb3JnVXAtPnMgKSk7CisK
KyAgaWYoIFZlcnRMZXEoICZpc2VjdCwgdGVzcy0+ZXZlbnQgKSkgeworICAgIC8qIFRoZSBpbnRl
cnNlY3Rpb24gcG9pbnQgbGllcyBzbGlnaHRseSB0byB0aGUgbGVmdCBvZiB0aGUgc3dlZXAgbGlu
ZSwKKyAgICAgKiBzbyBtb3ZlIGl0IHVudGlsIGl0JydzIHNsaWdodGx5IHRvIHRoZSByaWdodCBv
ZiB0aGUgc3dlZXAgbGluZS4KKyAgICAgKiAoSWYgd2UgaGFkIHBlcmZlY3QgbnVtZXJpY2FsIHBy
ZWNpc2lvbiwgdGhpcyB3b3VsZCBuZXZlciBoYXBwZW4KKyAgICAgKiBpbiB0aGUgZmlyc3QgcGxh
Y2UpLiAgVGhlIGVhc2llc3QgYW5kIHNhZmVzdCB0aGluZyB0byBkbyBpcworICAgICAqIHJlcGxh
Y2UgdGhlIGludGVyc2VjdGlvbiBieSB0ZXNzLT5ldmVudC4KKyAgICAgKi8KKyAgICBpc2VjdC5z
ID0gdGVzcy0+ZXZlbnQtPnM7CisgICAgaXNlY3QudCA9IHRlc3MtPmV2ZW50LT50OworICB9Cisg
IC8qIFNpbWlsYXJseSwgaWYgdGhlIGNvbXB1dGVkIGludGVyc2VjdGlvbiBsaWVzIHRvIHRoZSBy
aWdodCBvZiB0aGUKKyAgICogcmlnaHRtb3N0IG9yaWdpbiAod2hpY2ggc2hvdWxkIHJhcmVseSBo
YXBwZW4pLCBpdCBjYW4gY2F1c2UKKyAgICogdW5iZWxpZXZhYmxlIGluZWZmaWNpZW5jeSBvbiBz
dWZmaWNpZW50bHkgZGVnZW5lcmF0ZSBpbnB1dHMuCisgICAqIChJZiB5b3UgaGF2ZSB0aGUgdGVz
dCBwcm9ncmFtLCB0cnkgcnVubmluZyB0ZXN0NTQuZCB3aXRoIHRoZQorICAgKiAiWCB6b29tIiBv
cHRpb24gdHVybmVkIG9uKS4KKyAgICovCisgIG9yZ01pbiA9IFZlcnRMZXEoIG9yZ1VwLCBvcmdM
byApID8gb3JnVXAgOiBvcmdMbzsKKyAgaWYoIFZlcnRMZXEoIG9yZ01pbiwgJmlzZWN0ICkpIHsK
KyAgICBpc2VjdC5zID0gb3JnTWluLT5zOworICAgIGlzZWN0LnQgPSBvcmdNaW4tPnQ7CisgIH0K
KworICBpZiggVmVydEVxKCAmaXNlY3QsIG9yZ1VwICkgfHwgVmVydEVxKCAmaXNlY3QsIG9yZ0xv
ICkpIHsKKyAgICAvKiBFYXN5IGNhc2UgLS0gaW50ZXJzZWN0aW9uIGF0IG9uZSBvZiB0aGUgcmln
aHQgZW5kcG9pbnRzICovCisgICAgKHZvaWQpIENoZWNrRm9yUmlnaHRTcGxpY2UoIHRlc3MsIHJl
Z1VwICk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaWYoICAgICghIFZlcnRFcSggZHN0
VXAsIHRlc3MtPmV2ZW50ICkKKwkgICYmIEVkZ2VTaWduKCBkc3RVcCwgdGVzcy0+ZXZlbnQsICZp
c2VjdCApID49IDApCisgICAgICB8fCAoISBWZXJ0RXEoIGRzdExvLCB0ZXNzLT5ldmVudCApCisJ
ICAmJiBFZGdlU2lnbiggZHN0TG8sIHRlc3MtPmV2ZW50LCAmaXNlY3QgKSA8PSAwICkpCisgIHsK
KyAgICAvKiBWZXJ5IHVudXN1YWwgLS0gdGhlIG5ldyB1cHBlciBvciBsb3dlciBlZGdlIHdvdWxk
IHBhc3Mgb24gdGhlCisgICAgICogd3Jvbmcgc2lkZSBvZiB0aGUgc3dlZXAgZXZlbnQsIG9yIHRo
cm91Z2ggaXQuICBUaGlzIGNhbiBoYXBwZW4KKyAgICAgKiBkdWUgdG8gdmVyeSBzbWFsbCBudW1l
cmljYWwgZXJyb3JzIGluIHRoZSBpbnRlcnNlY3Rpb24gY2FsY3VsYXRpb24uCisgICAgICovCisg
ICAgaWYoIGRzdExvID09IHRlc3MtPmV2ZW50ICkgeworICAgICAgLyogU3BsaWNlIGRzdExvIGlu
dG8gZVVwLCBhbmQgcHJvY2VzcyB0aGUgbmV3IHJlZ2lvbihzKSAqLworICAgICAgaWYgKF9fZ2xf
bWVzaFNwbGl0RWRnZSggZVVwLT5TeW0gKSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsK
KyAgICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZUxvLT5TeW0sIGVVcCApICkgbG9uZ2ptcCh0
ZXNzLT5lbnYsMSk7CisgICAgICByZWdVcCA9IFRvcExlZnRSZWdpb24oIHJlZ1VwICk7CisgICAg
ICBpZiAocmVnVXAgPT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisgICAgICBlVXAgPSBS
ZWdpb25CZWxvdyhyZWdVcCktPmVVcDsKKyAgICAgIEZpbmlzaExlZnRSZWdpb25zKCB0ZXNzLCBS
ZWdpb25CZWxvdyhyZWdVcCksIHJlZ0xvICk7CisgICAgICBBZGRSaWdodEVkZ2VzKCB0ZXNzLCBy
ZWdVcCwgZVVwLT5PcHJldiwgZVVwLCBlVXAsIFRSVUUgKTsKKyAgICAgIHJldHVybiBUUlVFOwor
ICAgIH0KKyAgICBpZiggZHN0VXAgPT0gdGVzcy0+ZXZlbnQgKSB7CisgICAgICAvKiBTcGxpY2Ug
ZHN0VXAgaW50byBlTG8sIGFuZCBwcm9jZXNzIHRoZSBuZXcgcmVnaW9uKHMpICovCisgICAgICBp
ZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlTG8tPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+
ZW52LDEpOworICAgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlVXAtPkxuZXh0LCBlTG8tPk9w
cmV2ICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsgCisgICAgICByZWdMbyA9IHJlZ1VwOworICAg
ICAgcmVnVXAgPSBUb3BSaWdodFJlZ2lvbiggcmVnVXAgKTsKKyAgICAgIGUgPSBSZWdpb25CZWxv
dyhyZWdVcCktPmVVcC0+UnByZXY7CisgICAgICByZWdMby0+ZVVwID0gZUxvLT5PcHJldjsKKyAg
ICAgIGVMbyA9IEZpbmlzaExlZnRSZWdpb25zKCB0ZXNzLCByZWdMbywgTlVMTCApOworICAgICAg
QWRkUmlnaHRFZGdlcyggdGVzcywgcmVnVXAsIGVMby0+T25leHQsIGVVcC0+UnByZXYsIGUsIFRS
VUUgKTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICAvKiBTcGVjaWFsIGNhc2U6IGNh
bGxlZCBmcm9tIENvbm5lY3RSaWdodFZlcnRleC4gIElmIGVpdGhlcgorICAgICAqIGVkZ2UgcGFz
c2VzIG9uIHRoZSB3cm9uZyBzaWRlIG9mIHRlc3MtPmV2ZW50LCBzcGxpdCBpdAorICAgICAqIChh
bmQgd2FpdCBmb3IgQ29ubmVjdFJpZ2h0VmVydGV4IHRvIHNwbGljZSBpdCBhcHByb3ByaWF0ZWx5
KS4KKyAgICAgKi8KKyAgICBpZiggRWRnZVNpZ24oIGRzdFVwLCB0ZXNzLT5ldmVudCwgJmlzZWN0
ICkgPj0gMCApIHsKKyAgICAgIFJlZ2lvbkFib3ZlKHJlZ1VwKS0+ZGlydHkgPSByZWdVcC0+ZGly
dHkgPSBUUlVFOworICAgICAgaWYgKF9fZ2xfbWVzaFNwbGl0RWRnZSggZVVwLT5TeW0gKSA9PSBO
VUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgICAgIGVVcC0+T3JnLT5zID0gdGVzcy0+ZXZl
bnQtPnM7CisgICAgICBlVXAtPk9yZy0+dCA9IHRlc3MtPmV2ZW50LT50OworICAgIH0KKyAgICBp
ZiggRWRnZVNpZ24oIGRzdExvLCB0ZXNzLT5ldmVudCwgJmlzZWN0ICkgPD0gMCApIHsKKyAgICAg
IHJlZ1VwLT5kaXJ0eSA9IHJlZ0xvLT5kaXJ0eSA9IFRSVUU7CisgICAgICBpZiAoX19nbF9tZXNo
U3BsaXRFZGdlKCBlTG8tPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAg
ICAgZUxvLT5PcmctPnMgPSB0ZXNzLT5ldmVudC0+czsKKyAgICAgIGVMby0+T3JnLT50ID0gdGVz
cy0+ZXZlbnQtPnQ7CisgICAgfQorICAgIC8qIGxlYXZlIHRoZSByZXN0IGZvciBDb25uZWN0Umln
aHRWZXJ0ZXggKi8KKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICAvKiBHZW5lcmFsIGNhc2Ug
LS0gc3BsaXQgYm90aCBlZGdlcywgc3BsaWNlIGludG8gbmV3IHZlcnRleC4KKyAgICogV2hlbiB3
ZSBkbyB0aGUgc3BsaWNlIG9wZXJhdGlvbiwgdGhlIG9yZGVyIG9mIHRoZSBhcmd1bWVudHMgaXMK
KyAgICogYXJiaXRyYXJ5IGFzIGZhciBhcyBjb3JyZWN0bmVzcyBnb2VzLiAgSG93ZXZlciwgd2hl
biB0aGUgb3BlcmF0aW9uCisgICAqIGNyZWF0ZXMgYSBuZXcgZmFjZSwgdGhlIHdvcmsgZG9uZSBp
cyBwcm9wb3J0aW9uYWwgdG8gdGhlIHNpemUgb2YKKyAgICogdGhlIG5ldyBmYWNlLiAgV2UgZXhw
ZWN0IHRoZSBmYWNlcyBpbiB0aGUgcHJvY2Vzc2VkIHBhcnQgb2YKKyAgICogdGhlIG1lc2ggKGll
LiBlVXAtPkxmYWNlKSB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIGZhY2VzIGluIHRoZQorICAgKiB1
bnByb2Nlc3NlZCBvcmlnaW5hbCBjb250b3VycyAod2hpY2ggd2lsbCBiZSBlTG8tPk9wcmV2LT5M
ZmFjZSkuCisgICAqLworICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlVXAtPlN5bSApID09IE5V
TEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlTG8t
PlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICBpZiAoICFfX2dsX21lc2hT
cGxpY2UoIGVMby0+T3ByZXYsIGVVcCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisgIGVVcC0+
T3JnLT5zID0gaXNlY3QuczsKKyAgZVVwLT5PcmctPnQgPSBpc2VjdC50OworICBlVXAtPk9yZy0+
cHFIYW5kbGUgPSBwcUluc2VydCggdGVzcy0+cHEsIGVVcC0+T3JnICk7IC8qIF9fZ2xfcHFTb3J0
SW5zZXJ0ICovCisgIGlmIChlVXAtPk9yZy0+cHFIYW5kbGUgPT0gTE9OR19NQVgpIHsKKyAgICAg
cHFEZWxldGVQcmlvcml0eVEodGVzcy0+cHEpOwkvKiBfX2dsX3BxU29ydERlbGV0ZVByaW9yaXR5
USAqLworICAgICB0ZXNzLT5wcSA9IE5VTEw7CisgICAgIGxvbmdqbXAodGVzcy0+ZW52LDEpOwor
ICB9CisgIEdldEludGVyc2VjdERhdGEoIHRlc3MsIGVVcC0+T3JnLCBvcmdVcCwgZHN0VXAsIG9y
Z0xvLCBkc3RMbyApOworICBSZWdpb25BYm92ZShyZWdVcCktPmRpcnR5ID0gcmVnVXAtPmRpcnR5
ID0gcmVnTG8tPmRpcnR5ID0gVFJVRTsKKyAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9p
ZCBXYWxrRGlydHlSZWdpb25zKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJl
Z1VwICkKKy8qCisgKiBXaGVuIHRoZSB1cHBlciBvciBsb3dlciBlZGdlIG9mIGFueSByZWdpb24g
Y2hhbmdlcywgdGhlIHJlZ2lvbiBpcworICogbWFya2VkICJkaXJ0eSIuICBUaGlzIHJvdXRpbmUg
d2Fsa3MgdGhyb3VnaCBhbGwgdGhlIGRpcnR5IHJlZ2lvbnMKKyAqIGFuZCBtYWtlcyBzdXJlIHRo
YXQgdGhlIGRpY3Rpb25hcnkgaW52YXJpYW50cyBhcmUgc2F0aXNmaWVkCisgKiAoc2VlIHRoZSBj
b21tZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZmlsZSkuICBPZiBjb3Vyc2UKKyAqIG5l
dyBkaXJ0eSByZWdpb25zIGNhbiBiZSBjcmVhdGVkIGFzIHdlIG1ha2UgY2hhbmdlcyB0byByZXN0
b3JlCisgKiB0aGUgaW52YXJpYW50cy4KKyAqLworeworICBBY3RpdmVSZWdpb24gKnJlZ0xvID0g
UmVnaW9uQmVsb3cocmVnVXApOworICBHTFVoYWxmRWRnZSAqZVVwLCAqZUxvOworCisgIGZvcigg
OzsgKSB7CisgICAgLyogRmluZCB0aGUgbG93ZXN0IGRpcnR5IHJlZ2lvbiAod2Ugd2FsayBmcm9t
IHRoZSBib3R0b20gdXApLiAqLworICAgIHdoaWxlKCByZWdMby0+ZGlydHkgKSB7CisgICAgICBy
ZWdVcCA9IHJlZ0xvOworICAgICAgcmVnTG8gPSBSZWdpb25CZWxvdyhyZWdMbyk7CisgICAgfQor
ICAgIGlmKCAhIHJlZ1VwLT5kaXJ0eSApIHsKKyAgICAgIHJlZ0xvID0gcmVnVXA7CisgICAgICBy
ZWdVcCA9IFJlZ2lvbkFib3ZlKCByZWdVcCApOworICAgICAgaWYoIHJlZ1VwID09IE5VTEwgfHwg
ISByZWdVcC0+ZGlydHkgKSB7CisJLyogV2UndmUgd2Fsa2VkIGFsbCB0aGUgZGlydHkgcmVnaW9u
cyAqLworCXJldHVybjsKKyAgICAgIH0KKyAgICB9CisgICAgcmVnVXAtPmRpcnR5ID0gRkFMU0U7
CisgICAgZVVwID0gcmVnVXAtPmVVcDsKKyAgICBlTG8gPSByZWdMby0+ZVVwOworCisgICAgaWYo
IGVVcC0+RHN0ICE9IGVMby0+RHN0ICkgeworICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgZWRnZSBv
cmRlcmluZyBpcyBvYmV5ZWQgYXQgdGhlIERzdCB2ZXJ0aWNlcy4gKi8KKyAgICAgIGlmKCBDaGVj
a0ZvckxlZnRTcGxpY2UoIHRlc3MsIHJlZ1VwICkpIHsKKworCS8qIElmIHRoZSB1cHBlciBvciBs
b3dlciBlZGdlIHdhcyBtYXJrZWQgZml4VXBwZXJFZGdlLCB0aGVuCisJICogd2Ugbm8gbG9uZ2Vy
IG5lZWQgaXQgKHNpbmNlIHRoZXNlIGVkZ2VzIGFyZSBuZWVkZWQgb25seSBmb3IKKwkgKiB2ZXJ0
aWNlcyB3aGljaCBvdGhlcndpc2UgaGF2ZSBubyByaWdodC1nb2luZyBlZGdlcykuCisJICovCisJ
aWYoIHJlZ0xvLT5maXhVcHBlckVkZ2UgKSB7CisJICBEZWxldGVSZWdpb24oIHRlc3MsIHJlZ0xv
ICk7CisJICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGVMbyApICkgbG9uZ2ptcCh0ZXNzLT5lbnYs
MSk7CisJICByZWdMbyA9IFJlZ2lvbkJlbG93KCByZWdVcCApOworCSAgZUxvID0gcmVnTG8tPmVV
cDsKKwl9IGVsc2UgaWYoIHJlZ1VwLT5maXhVcHBlckVkZ2UgKSB7CisJICBEZWxldGVSZWdpb24o
IHRlc3MsIHJlZ1VwICk7CisJICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGVVcCApICkgbG9uZ2pt
cCh0ZXNzLT5lbnYsMSk7CisJICByZWdVcCA9IFJlZ2lvbkFib3ZlKCByZWdMbyApOworCSAgZVVw
ID0gcmVnVXAtPmVVcDsKKwl9CisgICAgICB9CisgICAgfQorICAgIGlmKCBlVXAtPk9yZyAhPSBl
TG8tPk9yZyApIHsKKyAgICAgIGlmKCAgICBlVXAtPkRzdCAhPSBlTG8tPkRzdAorCSAgJiYgISBy
ZWdVcC0+Zml4VXBwZXJFZGdlICYmICEgcmVnTG8tPmZpeFVwcGVyRWRnZQorICAgICAgICAgICYm
IChlVXAtPkRzdCA9PSB0ZXNzLT5ldmVudCB8fCBlTG8tPkRzdCA9PSB0ZXNzLT5ldmVudCkgKQor
ICAgICAgeworCS8qIFdoZW4gYWxsIGVsc2UgZmFpbHMgaW4gQ2hlY2tGb3JJbnRlcnNlY3QoKSwg
aXQgdXNlcyB0ZXNzLT5ldmVudAorCSAqIGFzIHRoZSBpbnRlcnNlY3Rpb24gbG9jYXRpb24uICBU
byBtYWtlIHRoaXMgcG9zc2libGUsIGl0IHJlcXVpcmVzCisJICogdGhhdCB0ZXNzLT5ldmVudCBs
aWUgYmV0d2VlbiB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2VzLCBhbmQgYWxzbworCSAqIHRoYXQg
bmVpdGhlciBvZiB0aGVzZSBpcyBtYXJrZWQgZml4VXBwZXJFZGdlIChzaW5jZSBpbiB0aGUgd29y
c3QKKwkgKiBjYXNlIGl0IG1pZ2h0IHNwbGljZSBvbmUgb2YgdGhlc2UgZWRnZXMgaW50byB0ZXNz
LT5ldmVudCwgYW5kCisJICogdmlvbGF0ZSB0aGUgaW52YXJpYW50IHRoYXQgZml4YWJsZSBlZGdl
cyBhcmUgdGhlIG9ubHkgcmlnaHQtZ29pbmcKKwkgKiBlZGdlIGZyb20gdGhlaXIgYXNzb2NpYXRl
ZCB2ZXJ0ZXgpLgorICAgICAgICAgKi8KKwlpZiggQ2hlY2tGb3JJbnRlcnNlY3QoIHRlc3MsIHJl
Z1VwICkpIHsKKwkgIC8qIFdhbGtEaXJ0eVJlZ2lvbnMoKSB3YXMgY2FsbGVkIHJlY3Vyc2l2ZWx5
OyB3ZSdyZSBkb25lICovCisJICByZXR1cm47CisJfQorICAgICAgfSBlbHNlIHsKKwkvKiBFdmVu
IHRob3VnaCB3ZSBjYW4ndCB1c2UgQ2hlY2tGb3JJbnRlcnNlY3QoKSwgdGhlIE9yZyB2ZXJ0aWNl
cworCSAqIG1heSB2aW9sYXRlIHRoZSBkaWN0aW9uYXJ5IGVkZ2Ugb3JkZXJpbmcuICBDaGVjayBh
bmQgY29ycmVjdCB0aGlzLgorCSAqLworCSh2b2lkKSBDaGVja0ZvclJpZ2h0U3BsaWNlKCB0ZXNz
LCByZWdVcCApOworICAgICAgfQorICAgIH0KKyAgICBpZiggZVVwLT5PcmcgPT0gZUxvLT5Pcmcg
JiYgZVVwLT5Ec3QgPT0gZUxvLT5Ec3QgKSB7CisgICAgICAvKiBBIGRlZ2VuZXJhdGUgbG9vcCBj
b25zaXN0aW5nIG9mIG9ubHkgdHdvIGVkZ2VzIC0tIGRlbGV0ZSBpdC4gKi8KKyAgICAgIEFkZFdp
bmRpbmcoIGVMbywgZVVwICk7CisgICAgICBEZWxldGVSZWdpb24oIHRlc3MsIHJlZ1VwICk7Cisg
ICAgICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGVVcCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7
CisgICAgICByZWdVcCA9IFJlZ2lvbkFib3ZlKCByZWdMbyApOworICAgIH0KKyAgfQorfQorCisK
K3N0YXRpYyB2b2lkIENvbm5lY3RSaWdodFZlcnRleCggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0
aXZlUmVnaW9uICpyZWdVcCwKKwkJCSAgICAgICAgR0xVaGFsZkVkZ2UgKmVCb3R0b21MZWZ0ICkK
Ky8qCisgKiBQdXJwb3NlOiBjb25uZWN0IGEgInJpZ2h0IiB2ZXJ0ZXggdkV2ZW50IChvbmUgd2hl
cmUgYWxsIGVkZ2VzIGdvIGxlZnQpCisgKiB0byB0aGUgdW5wcm9jZXNzZWQgcG9ydGlvbiBvZiB0
aGUgbWVzaC4gIFNpbmNlIHRoZXJlIGFyZSBubyByaWdodC1nb2luZworICogZWRnZXMsIHR3byBy
ZWdpb25zIChvbmUgYWJvdmUgdkV2ZW50IGFuZCBvbmUgYmVsb3cpIGFyZSBiZWluZyBtZXJnZWQK
KyAqIGludG8gb25lLiAgInJlZ1VwIiBpcyB0aGUgdXBwZXIgb2YgdGhlc2UgdHdvIHJlZ2lvbnMu
CisgKgorICogVGhlcmUgYXJlIHR3byByZWFzb25zIGZvciBkb2luZyB0aGlzIChhZGRpbmcgYSBy
aWdodC1nb2luZyBlZGdlKToKKyAqICAtIGlmIHRoZSB0d28gcmVnaW9ucyBiZWluZyBtZXJnZWQg
YXJlICJpbnNpZGUiLCB3ZSBtdXN0IGFkZCBhbiBlZGdlCisgKiAgICB0byBrZWVwIHRoZW0gc2Vw
YXJhdGVkICh0aGUgY29tYmluZWQgcmVnaW9uIHdvdWxkIG5vdCBiZSBtb25vdG9uZSkuCisgKiAg
LSBpbiBhbnkgY2FzZSwgd2UgbXVzdCBsZWF2ZSBzb21lIHJlY29yZCBvZiB2RXZlbnQgaW4gdGhl
IGRpY3Rpb25hcnksCisgKiAgICBzbyB0aGF0IHdlIGNhbiBtZXJnZSB2RXZlbnQgd2l0aCBmZWF0
dXJlcyB0aGF0IHdlIGhhdmUgbm90IHNlZW4geWV0LgorICogICAgRm9yIGV4YW1wbGUsIG1heWJl
IHRoZXJlIGlzIGEgdmVydGljYWwgZWRnZSB3aGljaCBwYXNzZXMganVzdCB0bworICogICAgdGhl
IHJpZ2h0IG9mIHZFdmVudDsgd2Ugd291bGQgbGlrZSB0byBzcGxpY2UgdkV2ZW50IGludG8gdGhp
cyBlZGdlLgorICoKKyAqIEhvd2V2ZXIsIHdlIGRvbid0IHdhbnQgdG8gY29ubmVjdCB2RXZlbnQg
dG8ganVzdCBhbnkgdmVydGV4LiAgV2UgZG9uJyd0CisgKiB3YW50IHRoZSBuZXcgZWRnZSB0byBj
cm9zcyBhbnkgb3RoZXIgZWRnZXM7IG90aGVyd2lzZSB3ZSB3aWxsIGNyZWF0ZQorICogaW50ZXJz
ZWN0aW9uIHZlcnRpY2VzIGV2ZW4gd2hlbiB0aGUgaW5wdXQgZGF0YSBoYWQgbm8gc2VsZi1pbnRl
cnNlY3Rpb25zLgorICogKFRoaXMgaXMgYSBiYWQgdGhpbmc7IGlmIHRoZSB1c2VyJ3MgaW5wdXQg
ZGF0YSBoYXMgbm8gaW50ZXJzZWN0aW9ucywKKyAqIHdlIGRvbid0IHdhbnQgdG8gZ2VuZXJhdGUg
YW55IGZhbHNlIGludGVyc2VjdGlvbnMgb3Vyc2VsdmVzLikKKyAqCisgKiBPdXIgZXZlbnR1YWwg
Z29hbCBpcyB0byBjb25uZWN0IHZFdmVudCB0byB0aGUgbGVmdG1vc3QgdW5wcm9jZXNzZWQKKyAq
IHZlcnRleCBvZiB0aGUgY29tYmluZWQgcmVnaW9uICh0aGUgdW5pb24gb2YgcmVnVXAgYW5kIHJl
Z0xvKS4KKyAqIEJ1dCBiZWNhdXNlIG9mIHVuc2VlbiB2ZXJ0aWNlcyB3aXRoIGFsbCByaWdodC1n
b2luZyBlZGdlcywgYW5kIGFsc28KKyAqIG5ldyB2ZXJ0aWNlcyB3aGljaCBtYXkgYmUgY3JlYXRl
ZCBieSBlZGdlIGludGVyc2VjdGlvbnMsIHdlIGRvbicndAorICoga25vdyB3aGVyZSB0aGF0IGxl
ZnRtb3N0IHVucHJvY2Vzc2VkIHZlcnRleCBpcy4gIEluIHRoZSBtZWFudGltZSwgd2UKKyAqIGNv
bm5lY3QgdkV2ZW50IHRvIHRoZSBjbG9zZXN0IHZlcnRleCBvZiBlaXRoZXIgY2hhaW4sIGFuZCBt
YXJrIHRoZSByZWdpb24KKyAqIGFzICJmaXhVcHBlckVkZ2UiLiAgVGhpcyBmbGFnIHNheXMgdG8g
ZGVsZXRlIGFuZCByZWNvbm5lY3QgdGhpcyBlZGdlCisgKiB0byB0aGUgbmV4dCBwcm9jZXNzZWQg
dmVydGV4IG9uIHRoZSBib3VuZGFyeSBvZiB0aGUgY29tYmluZWQgcmVnaW9uLgorICogUXVpdGUg
cG9zc2libHkgdGhlIHZlcnRleCB3ZSBjb25uZWN0ZWQgdG8gd2lsbCB0dXJuIG91dCB0byBiZSB0
aGUKKyAqIGNsb3Nlc3Qgb25lLCBpbiB3aGljaCBjYXNlIHdlIHdvbicndCBuZWVkIHRvIG1ha2Ug
YW55IGNoYW5nZXMuCisgKi8KK3sKKyAgR0xVaGFsZkVkZ2UgKmVOZXc7CisgIEdMVWhhbGZFZGdl
ICplVG9wTGVmdCA9IGVCb3R0b21MZWZ0LT5PbmV4dDsKKyAgQWN0aXZlUmVnaW9uICpyZWdMbyA9
IFJlZ2lvbkJlbG93KHJlZ1VwKTsKKyAgR0xVaGFsZkVkZ2UgKmVVcCA9IHJlZ1VwLT5lVXA7Cisg
IEdMVWhhbGZFZGdlICplTG8gPSByZWdMby0+ZVVwOworICBpbnQgZGVnZW5lcmF0ZSA9IEZBTFNF
OworCisgIGlmKCBlVXAtPkRzdCAhPSBlTG8tPkRzdCApIHsKKyAgICAodm9pZCkgQ2hlY2tGb3JJ
bnRlcnNlY3QoIHRlc3MsIHJlZ1VwICk7CisgIH0KKworICAvKiBQb3NzaWJsZSBuZXcgZGVnZW5l
cmFjaWVzOiB1cHBlciBvciBsb3dlciBlZGdlIG9mIHJlZ1VwIG1heSBwYXNzCisgICAqIHRocm91
Z2ggdkV2ZW50LCBvciBtYXkgY29pbmNpZGUgd2l0aCBuZXcgaW50ZXJzZWN0aW9uIHZlcnRleAor
ICAgKi8KKyAgaWYoIFZlcnRFcSggZVVwLT5PcmcsIHRlc3MtPmV2ZW50ICkpIHsKKyAgICBpZiAo
ICFfX2dsX21lc2hTcGxpY2UoIGVUb3BMZWZ0LT5PcHJldiwgZVVwICkgKSBsb25nam1wKHRlc3Mt
PmVudiwxKTsKKyAgICByZWdVcCA9IFRvcExlZnRSZWdpb24oIHJlZ1VwICk7CisgICAgaWYgKHJl
Z1VwID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgIGVUb3BMZWZ0ID0gUmVnaW9u
QmVsb3coIHJlZ1VwICktPmVVcDsKKyAgICBGaW5pc2hMZWZ0UmVnaW9ucyggdGVzcywgUmVnaW9u
QmVsb3cocmVnVXApLCByZWdMbyApOworICAgIGRlZ2VuZXJhdGUgPSBUUlVFOworICB9CisgIGlm
KCBWZXJ0RXEoIGVMby0+T3JnLCB0ZXNzLT5ldmVudCApKSB7CisgICAgaWYgKCAhX19nbF9tZXNo
U3BsaWNlKCBlQm90dG9tTGVmdCwgZUxvLT5PcHJldiApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7
CisgICAgZUJvdHRvbUxlZnQgPSBGaW5pc2hMZWZ0UmVnaW9ucyggdGVzcywgcmVnTG8sIE5VTEwg
KTsKKyAgICBkZWdlbmVyYXRlID0gVFJVRTsKKyAgfQorICBpZiggZGVnZW5lcmF0ZSApIHsKKyAg
ICBBZGRSaWdodEVkZ2VzKCB0ZXNzLCByZWdVcCwgZUJvdHRvbUxlZnQtPk9uZXh0LCBlVG9wTGVm
dCwgZVRvcExlZnQsIFRSVUUgKTsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBOb24tZGVnZW5l
cmF0ZSBzaXR1YXRpb24gLS0gbmVlZCB0byBhZGQgYSB0ZW1wb3JhcnksIGZpeGFibGUgZWRnZS4K
KyAgICogQ29ubmVjdCB0byB0aGUgY2xvc2VyIG9mIGVMby0+T3JnLCBlVXAtPk9yZy4KKyAgICov
CisgIGlmKCBWZXJ0TGVxKCBlTG8tPk9yZywgZVVwLT5PcmcgKSkgeworICAgIGVOZXcgPSBlTG8t
Pk9wcmV2OworICB9IGVsc2UgeworICAgIGVOZXcgPSBlVXA7CisgIH0KKyAgZU5ldyA9IF9fZ2xf
bWVzaENvbm5lY3QoIGVCb3R0b21MZWZ0LT5McHJldiwgZU5ldyApOworICBpZiAoZU5ldyA9PSBO
VUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKworICAvKiBQcmV2ZW50IGNsZWFudXAsIG90aGVy
d2lzZSBlTmV3IG1pZ2h0IGRpc2FwcGVhciBiZWZvcmUgd2UndmUgZXZlbgorICAgKiBoYWQgYSBj
aGFuY2UgdG8gbWFyayBpdCBhcyBhIHRlbXBvcmFyeSBlZGdlLgorICAgKi8KKyAgQWRkUmlnaHRF
ZGdlcyggdGVzcywgcmVnVXAsIGVOZXcsIGVOZXctPk9uZXh0LCBlTmV3LT5PbmV4dCwgRkFMU0Ug
KTsKKyAgZU5ldy0+U3ltLT5hY3RpdmVSZWdpb24tPmZpeFVwcGVyRWRnZSA9IFRSVUU7CisgIFdh
bGtEaXJ0eVJlZ2lvbnMoIHRlc3MsIHJlZ1VwICk7Cit9CisKKy8qIEJlY2F1c2UgdmVydGljZXMg
YXQgZXhhY3RseSB0aGUgc2FtZSBsb2NhdGlvbiBhcmUgbWVyZ2VkIHRvZ2V0aGVyCisgKiBiZWZv
cmUgd2UgcHJvY2VzcyB0aGUgc3dlZXAgZXZlbnQsIHNvbWUgZGVnZW5lcmF0ZSBjYXNlcyBjYW4n
dCBvY2N1ci4KKyAqIEhvd2V2ZXIgaWYgc29tZW9uZSBldmVudHVhbGx5IG1ha2VzIHRoZSBtb2Rp
ZmljYXRpb25zIHJlcXVpcmVkIHRvCisgKiBtZXJnZSBmZWF0dXJlcyB3aGljaCBhcmUgY2xvc2Ug
dG9nZXRoZXIsIHRoZSBjYXNlcyBiZWxvdyBtYXJrZWQKKyAqIFRPTEVSQU5DRV9OT05aRVJPIHdp
bGwgYmUgdXNlZnVsLiAgVGhleSB3ZXJlIGRlYnVnZ2VkIGJlZm9yZSB0aGUKKyAqIGNvZGUgdG8g
bWVyZ2UgaWRlbnRpY2FsIHZlcnRpY2VzIGluIHRoZSBtYWluIGxvb3Agd2FzIGFkZGVkLgorICov
CisjZGVmaW5lIFRPTEVSQU5DRV9OT05aRVJPCUZBTFNFCisKK3N0YXRpYyB2b2lkIENvbm5lY3RM
ZWZ0RGVnZW5lcmF0ZSggR0xVdGVzc2VsYXRvciAqdGVzcywKKwkJCQkgICBBY3RpdmVSZWdpb24g
KnJlZ1VwLCBHTFV2ZXJ0ZXggKnZFdmVudCApCisvKgorICogVGhlIGV2ZW50IHZlcnRleCBsaWVz
IGV4YWN0eSBvbiBhbiBhbHJlYWR5LXByb2Nlc3NlZCBlZGdlIG9yIHZlcnRleC4KKyAqIEFkZGlu
ZyB0aGUgbmV3IHZlcnRleCBpbnZvbHZlcyBzcGxpY2luZyBpdCBpbnRvIHRoZSBhbHJlYWR5LXBy
b2Nlc3NlZAorICogcGFydCBvZiB0aGUgbWVzaC4KKyAqLworeworICBHTFVoYWxmRWRnZSAqZSwg
KmVUb3BMZWZ0LCAqZVRvcFJpZ2h0LCAqZUxhc3Q7CisgIEFjdGl2ZVJlZ2lvbiAqcmVnOworCisg
IGUgPSByZWdVcC0+ZVVwOworICBpZiggVmVydEVxKCBlLT5PcmcsIHZFdmVudCApKSB7CisgICAg
LyogZS0+T3JnIGlzIGFuIHVucHJvY2Vzc2VkIHZlcnRleCAtIGp1c3QgY29tYmluZSB0aGVtLCBh
bmQgd2FpdAorICAgICAqIGZvciBlLT5PcmcgdG8gYmUgcHVsbGVkIGZyb20gdGhlIHF1ZXVlCisg
ICAgICovCisgICAgYXNzZXJ0KCBUT0xFUkFOQ0VfTk9OWkVSTyApOworICAgIFNwbGljZU1lcmdl
VmVydGljZXMoIHRlc3MsIGUsIHZFdmVudC0+YW5FZGdlICk7CisgICAgcmV0dXJuOworICB9Cisg
IAorICBpZiggISBWZXJ0RXEoIGUtPkRzdCwgdkV2ZW50ICkpIHsKKyAgICAvKiBHZW5lcmFsIGNh
c2UgLS0gc3BsaWNlIHZFdmVudCBpbnRvIGVkZ2UgZSB3aGljaCBwYXNzZXMgdGhyb3VnaCBpdCAq
LworICAgIGlmIChfX2dsX21lc2hTcGxpdEVkZ2UoIGUtPlN5bSApID09IE5VTEwpIGxvbmdqbXAo
dGVzcy0+ZW52LDEpOworICAgIGlmKCByZWdVcC0+Zml4VXBwZXJFZGdlICkgeworICAgICAgLyog
VGhpcyBlZGdlIHdhcyBmaXhhYmxlIC0tIGRlbGV0ZSB1bnVzZWQgcG9ydGlvbiBvZiBvcmlnaW5h
bCBlZGdlICovCisgICAgICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGUtPk9uZXh0ICkgKSBsb25n
am1wKHRlc3MtPmVudiwxKTsKKyAgICAgIHJlZ1VwLT5maXhVcHBlckVkZ2UgPSBGQUxTRTsKKyAg
ICB9CisgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCB2RXZlbnQtPmFuRWRnZSwgZSApICkgbG9u
Z2ptcCh0ZXNzLT5lbnYsMSk7CisgICAgU3dlZXBFdmVudCggdGVzcywgdkV2ZW50ICk7CS8qIHJl
Y3Vyc2UgKi8KKyAgICByZXR1cm47CisgIH0KKworICAvKiB2RXZlbnQgY29pbmNpZGVzIHdpdGgg
ZS0+RHN0LCB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZC4KKyAgICogU3BsaWNlIGlu
IHRoZSBhZGRpdGlvbmFsIHJpZ2h0LWdvaW5nIGVkZ2VzLgorICAgKi8KKyAgYXNzZXJ0KCBUT0xF
UkFOQ0VfTk9OWkVSTyApOworICByZWdVcCA9IFRvcFJpZ2h0UmVnaW9uKCByZWdVcCApOworICBy
ZWcgPSBSZWdpb25CZWxvdyggcmVnVXAgKTsKKyAgZVRvcFJpZ2h0ID0gcmVnLT5lVXAtPlN5bTsK
KyAgZVRvcExlZnQgPSBlTGFzdCA9IGVUb3BSaWdodC0+T25leHQ7CisgIGlmKCByZWctPmZpeFVw
cGVyRWRnZSApIHsKKyAgICAvKiBIZXJlIGUtPkRzdCBoYXMgb25seSBhIHNpbmdsZSBmaXhhYmxl
IGVkZ2UgZ29pbmcgcmlnaHQuCisgICAgICogV2UgY2FuIGRlbGV0ZSBpdCBzaW5jZSBub3cgd2Ug
aGF2ZSBzb21lIHJlYWwgcmlnaHQtZ29pbmcgZWRnZXMuCisgICAgICovCisgICAgYXNzZXJ0KCBl
VG9wTGVmdCAhPSBlVG9wUmlnaHQgKTsgICAvKiB0aGVyZSBhcmUgc29tZSBsZWZ0IGVkZ2VzIHRv
byAqLworICAgIERlbGV0ZVJlZ2lvbiggdGVzcywgcmVnICk7CisgICAgaWYgKCAhX19nbF9tZXNo
RGVsZXRlKCBlVG9wUmlnaHQgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgIGVUb3BSaWdo
dCA9IGVUb3BMZWZ0LT5PcHJldjsKKyAgfQorICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIHZFdmVu
dC0+YW5FZGdlLCBlVG9wUmlnaHQgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICBpZiggISBF
ZGdlR29lc0xlZnQoIGVUb3BMZWZ0ICkpIHsKKyAgICAvKiBlLT5Ec3QgaGFkIG5vIGxlZnQtZ29p
bmcgZWRnZXMgLS0gaW5kaWNhdGUgdGhpcyB0byBBZGRSaWdodEVkZ2VzKCkgKi8KKyAgICBlVG9w
TGVmdCA9IE5VTEw7CisgIH0KKyAgQWRkUmlnaHRFZGdlcyggdGVzcywgcmVnVXAsIGVUb3BSaWdo
dC0+T25leHQsIGVMYXN0LCBlVG9wTGVmdCwgVFJVRSApOworfQorCisKK3N0YXRpYyB2b2lkIENv
bm5lY3RMZWZ0VmVydGV4KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFV2ZXJ0ZXggKnZFdmVudCAp
CisvKgorICogUHVycG9zZTogY29ubmVjdCBhICJsZWZ0IiB2ZXJ0ZXggKG9uZSB3aGVyZSBib3Ro
IGVkZ2VzIGdvIHJpZ2h0KQorICogdG8gdGhlIHByb2Nlc3NlZCBwb3J0aW9uIG9mIHRoZSBtZXNo
LiAgTGV0IFIgYmUgdGhlIGFjdGl2ZSByZWdpb24KKyAqIGNvbnRhaW5pbmcgdkV2ZW50LCBhbmQg
bGV0IFUgYW5kIEwgYmUgdGhlIHVwcGVyIGFuZCBsb3dlciBlZGdlCisgKiBjaGFpbnMgb2YgUi4g
IFRoZXJlIGFyZSB0d28gcG9zc2liaWxpdGllczoKKyAqCisgKiAtIHRoZSBub3JtYWwgY2FzZTog
c3BsaXQgUiBpbnRvIHR3byByZWdpb25zLCBieSBjb25uZWN0aW5nIHZFdmVudCB0bworICogICB0
aGUgcmlnaHRtb3N0IHZlcnRleCBvZiBVIG9yIEwgbHlpbmcgdG8gdGhlIGxlZnQgb2YgdGhlIHN3
ZWVwIGxpbmUKKyAqCisgKiAtIHRoZSBkZWdlbmVyYXRlIGNhc2U6IGlmIHZFdmVudCBpcyBjbG9z
ZSBlbm91Z2ggdG8gVSBvciBMLCB3ZQorICogICBtZXJnZSB2RXZlbnQgaW50byB0aGF0IGVkZ2Ug
Y2hhaW4uICBUaGUgc3ViY2FzZXMgYXJlOgorICoJLSBtZXJnaW5nIHdpdGggdGhlIHJpZ2h0bW9z
dCB2ZXJ0ZXggb2YgVSBvciBMCisgKgktIG1lcmdpbmcgd2l0aCB0aGUgYWN0aXZlIGVkZ2Ugb2Yg
VSBvciBMCisgKgktIG1lcmdpbmcgd2l0aCBhbiBhbHJlYWR5LXByb2Nlc3NlZCBwb3J0aW9uIG9m
IFUgb3IgTAorICovCit7CisgIEFjdGl2ZVJlZ2lvbiAqcmVnVXAsICpyZWdMbywgKnJlZzsKKyAg
R0xVaGFsZkVkZ2UgKmVVcCwgKmVMbywgKmVOZXc7CisgIEFjdGl2ZVJlZ2lvbiB0bXA7CisKKyAg
LyogYXNzZXJ0KCB2RXZlbnQtPmFuRWRnZS0+T25leHQtPk9uZXh0ID09IHZFdmVudC0+YW5FZGdl
ICk7ICovCisKKyAgLyogR2V0IGEgcG9pbnRlciB0byB0aGUgYWN0aXZlIHJlZ2lvbiBjb250YWlu
aW5nIHZFdmVudCAqLworICB0bXAuZVVwID0gdkV2ZW50LT5hbkVkZ2UtPlN5bTsKKyAgLyogX19H
TF9ESUNUTElTVEtFWSAqLyAvKiBfX2dsX2RpY3RMaXN0U2VhcmNoICovCisgIHJlZ1VwID0gKEFj
dGl2ZVJlZ2lvbiAqKWRpY3RLZXkoIGRpY3RTZWFyY2goIHRlc3MtPmRpY3QsICZ0bXAgKSk7Cisg
IHJlZ0xvID0gUmVnaW9uQmVsb3coIHJlZ1VwICk7CisgIGVVcCA9IHJlZ1VwLT5lVXA7CisgIGVM
byA9IHJlZ0xvLT5lVXA7CisKKyAgLyogVHJ5IG1lcmdpbmcgd2l0aCBVIG9yIEwgZmlyc3QgKi8K
KyAgaWYoIEVkZ2VTaWduKCBlVXAtPkRzdCwgdkV2ZW50LCBlVXAtPk9yZyApID09IDAgKSB7Cisg
ICAgQ29ubmVjdExlZnREZWdlbmVyYXRlKCB0ZXNzLCByZWdVcCwgdkV2ZW50ICk7CisgICAgcmV0
dXJuOworICB9CisKKyAgLyogQ29ubmVjdCB2RXZlbnQgdG8gcmlnaHRtb3N0IHByb2Nlc3NlZCB2
ZXJ0ZXggb2YgZWl0aGVyIGNoYWluLgorICAgKiBlLT5Ec3QgaXMgdGhlIHZlcnRleCB0aGF0IHdl
IHdpbGwgY29ubmVjdCB0byB2RXZlbnQuCisgICAqLworICByZWcgPSBWZXJ0TGVxKCBlTG8tPkRz
dCwgZVVwLT5Ec3QgKSA/IHJlZ1VwIDogcmVnTG87CisKKyAgaWYoIHJlZ1VwLT5pbnNpZGUgfHwg
cmVnLT5maXhVcHBlckVkZ2UpIHsKKyAgICBpZiggcmVnID09IHJlZ1VwICkgeworICAgICAgZU5l
dyA9IF9fZ2xfbWVzaENvbm5lY3QoIHZFdmVudC0+YW5FZGdlLT5TeW0sIGVVcC0+TG5leHQgKTsK
KyAgICAgIGlmIChlTmV3ID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgIH0gZWxz
ZSB7CisgICAgICBHTFVoYWxmRWRnZSAqdGVtcEhhbGZFZGdlPSBfX2dsX21lc2hDb25uZWN0KCBl
TG8tPkRuZXh0LCB2RXZlbnQtPmFuRWRnZSk7CisgICAgICBpZiAodGVtcEhhbGZFZGdlID09IE5V
TEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOworCisgICAgICBlTmV3ID0gdGVtcEhhbGZFZGdlLT5T
eW07CisgICAgfQorICAgIGlmKCByZWctPmZpeFVwcGVyRWRnZSApIHsKKyAgICAgIGlmICggIUZp
eFVwcGVyRWRnZSggcmVnLCBlTmV3ICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgICB9IGVs
c2UgeworICAgICAgQ29tcHV0ZVdpbmRpbmcoIHRlc3MsIEFkZFJlZ2lvbkJlbG93KCB0ZXNzLCBy
ZWdVcCwgZU5ldyApKTsKKyAgICB9CisgICAgU3dlZXBFdmVudCggdGVzcywgdkV2ZW50ICk7Cisg
IH0gZWxzZSB7CisgICAgLyogVGhlIG5ldyB2ZXJ0ZXggaXMgaW4gYSByZWdpb24gd2hpY2ggZG9l
cyBub3QgYmVsb25nIHRvIHRoZSBwb2x5Z29uLgorICAgICAqIFdlIGRvbicndCBuZWVkIHRvIGNv
bm5lY3QgdGhpcyB2ZXJ0ZXggdG8gdGhlIHJlc3Qgb2YgdGhlIG1lc2guCisgICAgICovCisgICAg
QWRkUmlnaHRFZGdlcyggdGVzcywgcmVnVXAsIHZFdmVudC0+YW5FZGdlLCB2RXZlbnQtPmFuRWRn
ZSwgTlVMTCwgVFJVRSApOworICB9Cit9CisKKworc3RhdGljIHZvaWQgU3dlZXBFdmVudCggR0xV
dGVzc2VsYXRvciAqdGVzcywgR0xVdmVydGV4ICp2RXZlbnQgKQorLyoKKyAqIERvZXMgZXZlcnl0
aGluZyBuZWNlc3Nhcnkgd2hlbiB0aGUgc3dlZXAgbGluZSBjcm9zc2VzIGEgdmVydGV4LgorICog
VXBkYXRlcyB0aGUgbWVzaCBhbmQgdGhlIGVkZ2UgZGljdGlvbmFyeS4KKyAqLworeworICBBY3Rp
dmVSZWdpb24gKnJlZ1VwLCAqcmVnOworICBHTFVoYWxmRWRnZSAqZSwgKmVUb3BMZWZ0LCAqZUJv
dHRvbUxlZnQ7CisKKyAgdGVzcy0+ZXZlbnQgPSB2RXZlbnQ7CQkvKiBmb3IgYWNjZXNzIGluIEVk
Z2VMZXEoKSAqLworICBEZWJ1Z0V2ZW50KCB0ZXNzICk7CisgIAorICAvKiBDaGVjayBpZiB0aGlz
IHZlcnRleCBpcyB0aGUgcmlnaHQgZW5kcG9pbnQgb2YgYW4gZWRnZSB0aGF0IGlzCisgICAqIGFs
cmVhZHkgaW4gdGhlIGRpY3Rpb25hcnkuICBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB3
YXN0ZQorICAgKiB0aW1lIHNlYXJjaGluZyBmb3IgdGhlIGxvY2F0aW9uIHRvIGluc2VydCBuZXcg
ZWRnZXMuCisgICAqLworICBlID0gdkV2ZW50LT5hbkVkZ2U7CisgIHdoaWxlKCBlLT5hY3RpdmVS
ZWdpb24gPT0gTlVMTCApIHsKKyAgICBlID0gZS0+T25leHQ7CisgICAgaWYoIGUgPT0gdkV2ZW50
LT5hbkVkZ2UgKSB7CisgICAgICAvKiBBbGwgZWRnZXMgZ28gcmlnaHQgLS0gbm90IGluY2lkZW50
IHRvIGFueSBwcm9jZXNzZWQgZWRnZXMgKi8KKyAgICAgIENvbm5lY3RMZWZ0VmVydGV4KCB0ZXNz
LCB2RXZlbnQgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICAvKiBQcm9jZXNzaW5n
IGNvbnNpc3RzIG9mIHR3byBwaGFzZXM6IGZpcnN0IHdlICJmaW5pc2giIGFsbCB0aGUKKyAgICog
YWN0aXZlIHJlZ2lvbnMgd2hlcmUgYm90aCB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2VzIHRlcm1p
bmF0ZQorICAgKiBhdCB2RXZlbnQgKGllLiB2RXZlbnQgaXMgY2xvc2luZyBvZmYgdGhlc2UgcmVn
aW9ucykuCisgICAqIFdlIG1hcmsgdGhlc2UgZmFjZXMgImluc2lkZSIgb3IgIm91dHNpZGUiIHRo
ZSBwb2x5Z29uIGFjY29yZGluZworICAgKiB0byB0aGVpciB3aW5kaW5nIG51bWJlciwgYW5kIGRl
bGV0ZSB0aGUgZWRnZXMgZnJvbSB0aGUgZGljdGlvbmFyeS4KKyAgICogVGhpcyB0YWtlcyBjYXJl
IG9mIGFsbCB0aGUgbGVmdC1nb2luZyBlZGdlcyBmcm9tIHZFdmVudC4KKyAgICovCisgIHJlZ1Vw
ID0gVG9wTGVmdFJlZ2lvbiggZS0+YWN0aXZlUmVnaW9uICk7CisgIGlmIChyZWdVcCA9PSBOVUxM
KSBsb25nam1wKHRlc3MtPmVudiwxKTsKKyAgcmVnID0gUmVnaW9uQmVsb3coIHJlZ1VwICk7Cisg
IGVUb3BMZWZ0ID0gcmVnLT5lVXA7CisgIGVCb3R0b21MZWZ0ID0gRmluaXNoTGVmdFJlZ2lvbnMo
IHRlc3MsIHJlZywgTlVMTCApOworCisgIC8qIE5leHQgd2UgcHJvY2VzcyBhbGwgdGhlIHJpZ2h0
LWdvaW5nIGVkZ2VzIGZyb20gdkV2ZW50LiAgVGhpcworICAgKiBpbnZvbHZlcyBhZGRpbmcgdGhl
IGVkZ2VzIHRvIHRoZSBkaWN0aW9uYXJ5LCBhbmQgY3JlYXRpbmcgdGhlCisgICAqIGFzc29jaWF0
ZWQgImFjdGl2ZSByZWdpb25zIiB3aGljaCByZWNvcmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisg
ICAqIHJlZ2lvbnMgYmV0d2VlbiBhZGphY2VudCBkaWN0aW9uYXJ5IGVkZ2VzLgorICAgKi8KKyAg
aWYoIGVCb3R0b21MZWZ0LT5PbmV4dCA9PSBlVG9wTGVmdCApIHsKKyAgICAvKiBObyByaWdodC1n
b2luZyBlZGdlcyAtLSBhZGQgYSB0ZW1wb3JhcnkgImZpeGFibGUiIGVkZ2UgKi8KKyAgICBDb25u
ZWN0UmlnaHRWZXJ0ZXgoIHRlc3MsIHJlZ1VwLCBlQm90dG9tTGVmdCApOworICB9IGVsc2Ugewor
ICAgIEFkZFJpZ2h0RWRnZXMoIHRlc3MsIHJlZ1VwLCBlQm90dG9tTGVmdC0+T25leHQsIGVUb3BM
ZWZ0LCBlVG9wTGVmdCwgVFJVRSApOworICB9Cit9CisKKworLyogTWFrZSB0aGUgc2VudGluZWwg
Y29vcmRpbmF0ZXMgYmlnIGVub3VnaCB0aGF0IHRoZXkgd2lsbCBuZXZlciBiZQorICogbWVyZ2Vk
IHdpdGggcmVhbCBpbnB1dCBmZWF0dXJlcy4gIChFdmVuIHdpdGggdGhlIGxhcmdlc3QgcG9zc2li
bGUKKyAqIGlucHV0IGNvbnRvdXIgYW5kIHRoZSBtYXhpbXVtIHRvbGVyYW5jZSBvZiAxLjAsIG5v
IG1lcmdpbmcgd2lsbCBiZQorICogZG9uZSB3aXRoIGNvb3JkaW5hdGVzIGxhcmdlciB0aGFuIDMg
KiBHTFVfVEVTU19NQVhfQ09PUkQpLgorICovCisjZGVmaW5lIFNFTlRJTkVMX0NPT1JECSg0ICog
R0xVX1RFU1NfTUFYX0NPT1JEKQorCitzdGF0aWMgdm9pZCBBZGRTZW50aW5lbCggR0xVdGVzc2Vs
YXRvciAqdGVzcywgR0xkb3VibGUgdCApCisvKgorICogV2UgYWRkIHR3byBzZW50aW5lbCBlZGdl
cyBhYm92ZSBhbmQgYmVsb3cgYWxsIG90aGVyIGVkZ2VzLAorICogdG8gYXZvaWQgc3BlY2lhbCBj
YXNlcyBhdCB0aGUgdG9wIGFuZCBib3R0b20uCisgKi8KK3sKKyAgR0xVaGFsZkVkZ2UgKmU7Cisg
IEFjdGl2ZVJlZ2lvbiAqcmVnID0gKEFjdGl2ZVJlZ2lvbiAqKW1lbUFsbG9jKCBzaXplb2YoIEFj
dGl2ZVJlZ2lvbiApKTsKKyAgaWYgKHJlZyA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsK
KworICBlID0gX19nbF9tZXNoTWFrZUVkZ2UoIHRlc3MtPm1lc2ggKTsKKyAgaWYgKGUgPT0gTlVM
TCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7CisKKyAgZS0+T3JnLT5zID0gU0VOVElORUxfQ09PUkQ7
CisgIGUtPk9yZy0+dCA9IHQ7CisgIGUtPkRzdC0+cyA9IC1TRU5USU5FTF9DT09SRDsKKyAgZS0+
RHN0LT50ID0gdDsKKyAgdGVzcy0+ZXZlbnQgPSBlLT5Ec3Q7CQkvKiBpbml0aWFsaXplIGl0ICov
CisKKyAgcmVnLT5lVXAgPSBlOworICByZWctPndpbmRpbmdOdW1iZXIgPSAwOworICByZWctPmlu
c2lkZSA9IEZBTFNFOworICByZWctPmZpeFVwcGVyRWRnZSA9IEZBTFNFOworICByZWctPnNlbnRp
bmVsID0gVFJVRTsKKyAgcmVnLT5kaXJ0eSA9IEZBTFNFOworICByZWctPm5vZGVVcCA9IGRpY3RJ
bnNlcnQoIHRlc3MtPmRpY3QsIHJlZyApOyAvKiBfX2dsX2RpY3RMaXN0SW5zZXJ0QmVmb3JlICov
CisgIGlmIChyZWctPm5vZGVVcCA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKK30KKwor
CitzdGF0aWMgdm9pZCBJbml0RWRnZURpY3QoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQorLyoKKyAq
IFdlIG1haW50YWluIGFuIG9yZGVyaW5nIG9mIGVkZ2UgaW50ZXJzZWN0aW9ucyB3aXRoIHRoZSBz
d2VlcCBsaW5lLgorICogVGhpcyBvcmRlciBpcyBtYWludGFpbmVkIGluIGEgZHluYW1pYyBkaWN0
aW9uYXJ5LgorICovCit7CisgIC8qIF9fZ2xfZGljdExpc3ROZXdEaWN0ICovCisgIHRlc3MtPmRp
Y3QgPSBkaWN0TmV3RGljdCggdGVzcywgKGludCAoKikodm9pZCAqLCBEaWN0S2V5LCBEaWN0S2V5
KSkgRWRnZUxlcSApOworICBpZiAodGVzcy0+ZGljdCA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVu
diwxKTsKKworICBBZGRTZW50aW5lbCggdGVzcywgLVNFTlRJTkVMX0NPT1JEICk7CisgIEFkZFNl
bnRpbmVsKCB0ZXNzLCBTRU5USU5FTF9DT09SRCApOworfQorCisKK3N0YXRpYyB2b2lkIERvbmVF
ZGdlRGljdCggR0xVdGVzc2VsYXRvciAqdGVzcyApCit7CisgIEFjdGl2ZVJlZ2lvbiAqcmVnOwor
ICBpbnQgZml4ZWRFZGdlcyA9IDA7CisKKyAgLyogX19HTF9ESUNUTElTVEtFWSAqLyAvKiBfX0dM
X0RJQ1RMSVNUTUlOICovCisgIHdoaWxlKCAocmVnID0gKEFjdGl2ZVJlZ2lvbiAqKWRpY3RLZXko
IGRpY3RNaW4oIHRlc3MtPmRpY3QgKSkpICE9IE5VTEwgKSB7CisgICAgLyoKKyAgICAgKiBBdCB0
aGUgZW5kIG9mIGFsbCBwcm9jZXNzaW5nLCB0aGUgZGljdGlvbmFyeSBzaG91bGQgY29udGFpbgor
ICAgICAqIG9ubHkgdGhlIHR3byBzZW50aW5lbCBlZGdlcywgcGx1cyBhdCBtb3N0IG9uZSAiZml4
YWJsZSIgZWRnZQorICAgICAqIGNyZWF0ZWQgYnkgQ29ubmVjdFJpZ2h0VmVydGV4KCkuCisgICAg
ICovCisgICAgaWYoICEgcmVnLT5zZW50aW5lbCApIHsKKyAgICAgIGFzc2VydCggcmVnLT5maXhV
cHBlckVkZ2UgKTsKKyAgICAgIGFzc2VydCggKytmaXhlZEVkZ2VzID09IDEgKTsKKyAgICB9Cisg
ICAgYXNzZXJ0KCByZWctPndpbmRpbmdOdW1iZXIgPT0gMCApOworICAgIERlbGV0ZVJlZ2lvbigg
dGVzcywgcmVnICk7CisvKiAgICBfX2dsX21lc2hEZWxldGUoIHJlZy0+ZVVwICk7Ki8KKyAgfQor
ICBkaWN0RGVsZXRlRGljdCggdGVzcy0+ZGljdCApOwkvKiBfX2dsX2RpY3RMaXN0RGVsZXRlRGlj
dCAqLworfQorCisKK3N0YXRpYyB2b2lkIFJlbW92ZURlZ2VuZXJhdGVFZGdlcyggR0xVdGVzc2Vs
YXRvciAqdGVzcyApCisvKgorICogUmVtb3ZlIHplcm8tbGVuZ3RoIGVkZ2VzLCBhbmQgY29udG91
cnMgd2l0aCBmZXdlciB0aGFuIDMgdmVydGljZXMuCisgKi8KK3sKKyAgR0xVaGFsZkVkZ2UgKmUs
ICplTmV4dCwgKmVMbmV4dDsKKyAgR0xVaGFsZkVkZ2UgKmVIZWFkID0gJnRlc3MtPm1lc2gtPmVI
ZWFkOworCisgIC8qTElOVEVEKi8KKyAgZm9yKCBlID0gZUhlYWQtPm5leHQ7IGUgIT0gZUhlYWQ7
IGUgPSBlTmV4dCApIHsKKyAgICBlTmV4dCA9IGUtPm5leHQ7CisgICAgZUxuZXh0ID0gZS0+TG5l
eHQ7CisgICAgCisgICAgaWYoIFZlcnRFcSggZS0+T3JnLCBlLT5Ec3QgKSAmJiBlLT5MbmV4dC0+
TG5leHQgIT0gZSApIHsKKyAgICAgIC8qIFplcm8tbGVuZ3RoIGVkZ2UsIGNvbnRvdXIgaGFzIGF0
IGxlYXN0IDMgZWRnZXMgKi8KKyAgICAgIAorICAgICAgU3BsaWNlTWVyZ2VWZXJ0aWNlcyggdGVz
cywgZUxuZXh0LCBlICk7CS8qIGRlbGV0ZXMgZS0+T3JnICovCisgICAgICBpZiAoICFfX2dsX21l
c2hEZWxldGUoIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOyAvKiBlIGlzIGEgc2VsZi1sb29w
ICovCisgICAgICBlID0gZUxuZXh0OworICAgICAgZUxuZXh0ID0gZS0+TG5leHQ7CisgICAgfQor
ICAgIGlmKCBlTG5leHQtPkxuZXh0ID09IGUgKSB7CisgICAgICAvKiBEZWdlbmVyYXRlIGNvbnRv
dXIgKG9uZSBvciB0d28gZWRnZXMpICovCisgICAgICAKKyAgICAgIGlmKCBlTG5leHQgIT0gZSAp
IHsKKwlpZiggZUxuZXh0ID09IGVOZXh0IHx8IGVMbmV4dCA9PSBlTmV4dC0+U3ltICkgeyBlTmV4
dCA9IGVOZXh0LT5uZXh0OyB9CisJaWYgKCAhX19nbF9tZXNoRGVsZXRlKCBlTG5leHQgKSApIGxv
bmdqbXAodGVzcy0+ZW52LDEpOworICAgICAgfQorICAgICAgaWYoIGUgPT0gZU5leHQgfHwgZSA9
PSBlTmV4dC0+U3ltICkgeyBlTmV4dCA9IGVOZXh0LT5uZXh0OyB9CisgICAgICBpZiAoICFfX2ds
X21lc2hEZWxldGUoIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOworICAgIH0KKyAgfQorfQor
CitzdGF0aWMgaW50IEluaXRQcmlvcml0eVEoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQorLyoKKyAq
IEluc2VydCBhbGwgdmVydGljZXMgaW50byB0aGUgcHJpb3JpdHkgcXVldWUgd2hpY2ggZGV0ZXJt
aW5lcyB0aGUKKyAqIG9yZGVyIGluIHdoaWNoIHZlcnRpY2VzIGNyb3NzIHRoZSBzd2VlcCBsaW5l
LgorICovCit7CisgIFByaW9yaXR5USAqcHE7CisgIEdMVXZlcnRleCAqdiwgKnZIZWFkOworCisg
IC8qIF9fZ2xfcHFTb3J0TmV3UHJpb3JpdHlRICovCisgIHBxID0gdGVzcy0+cHEgPSBwcU5ld1By
aW9yaXR5USggKGludCAoKikoUFFrZXksIFBRa2V5KSkgX19nbF92ZXJ0TGVxICk7CisgIGlmIChw
cSA9PSBOVUxMKSByZXR1cm4gMDsKKworICB2SGVhZCA9ICZ0ZXNzLT5tZXNoLT52SGVhZDsKKyAg
Zm9yKCB2ID0gdkhlYWQtPm5leHQ7IHYgIT0gdkhlYWQ7IHYgPSB2LT5uZXh0ICkgeworICAgIHYt
PnBxSGFuZGxlID0gcHFJbnNlcnQoIHBxLCB2ICk7IC8qIF9fZ2xfcHFTb3J0SW5zZXJ0ICovCisg
ICAgaWYgKHYtPnBxSGFuZGxlID09IExPTkdfTUFYKSBicmVhazsKKyAgfQorICBpZiAodiAhPSB2
SGVhZCB8fCAhcHFJbml0KCBwcSApICkgeyAvKiBfX2dsX3BxU29ydEluaXQgKi8KKyAgICBwcURl
bGV0ZVByaW9yaXR5USh0ZXNzLT5wcSk7CS8qIF9fZ2xfcHFTb3J0RGVsZXRlUHJpb3JpdHlRICov
CisgICAgdGVzcy0+cHEgPSBOVUxMOworICAgIHJldHVybiAwOworICB9CisKKyAgcmV0dXJuIDE7
Cit9CisKKworc3RhdGljIHZvaWQgRG9uZVByaW9yaXR5USggR0xVdGVzc2VsYXRvciAqdGVzcyAp
Cit7CisgIHBxRGVsZXRlUHJpb3JpdHlRKCB0ZXNzLT5wcSApOyAvKiBfX2dsX3BxU29ydERlbGV0
ZVByaW9yaXR5USAqLworfQorCisKK3N0YXRpYyBpbnQgUmVtb3ZlRGVnZW5lcmF0ZUZhY2VzKCBH
TFVtZXNoICptZXNoICkKKy8qCisgKiBEZWxldGUgYW55IGRlZ2VuZXJhdGUgZmFjZXMgd2l0aCBv
bmx5IHR3byBlZGdlcy4gIFdhbGtEaXJ0eVJlZ2lvbnMoKQorICogd2lsbCBjYXRjaCBhbG1vc3Qg
YWxsIG9mIHRoZXNlLCBidXQgaXQgd29uJ3QgY2F0Y2ggZGVnZW5lcmF0ZSBmYWNlcworICogcHJv
ZHVjZWQgYnkgc3BsaWNlIG9wZXJhdGlvbnMgb24gYWxyZWFkeS1wcm9jZXNzZWQgZWRnZXMuCisg
KiBUaGUgdHdvIHBsYWNlcyB0aGlzIGNhbiBoYXBwZW4gYXJlIGluIEZpbmlzaExlZnRSZWdpb25z
KCksIHdoZW4KKyAqIHdlIHNwbGljZSBpbiBhICJ0ZW1wb3JhcnkiIGVkZ2UgcHJvZHVjZWQgYnkg
Q29ubmVjdFJpZ2h0VmVydGV4KCksCisgKiBhbmQgaW4gQ2hlY2tGb3JMZWZ0U3BsaWNlKCksIHdo
ZXJlIHdlIHNwbGljZSBhbHJlYWR5LXByb2Nlc3NlZAorICogZWRnZXMgdG8gZW5zdXJlIHRoYXQg
b3VyIGRpY3Rpb25hcnkgaW52YXJpYW50cyBhcmUgbm90IHZpb2xhdGVkCisgKiBieSBudW1lcmlj
YWwgZXJyb3JzLgorICoKKyAqIEluIGJvdGggdGhlc2UgY2FzZXMgaXQgaXMgKnZlcnkqIGRhbmdl
cm91cyB0byBkZWxldGUgdGhlIG9mZmVuZGluZworICogZWRnZSBhdCB0aGUgdGltZSwgc2luY2Ug
b25lIG9mIHRoZSByb3V0aW5lcyBmdXJ0aGVyIHVwIHRoZSBzdGFjaworICogd2lsbCBzb21ldGlt
ZXMgYmUga2VlcGluZyBhIHBvaW50ZXIgdG8gdGhhdCBlZGdlLgorICovCit7CisgIEdMVWZhY2Ug
KmYsICpmTmV4dDsKKyAgR0xVaGFsZkVkZ2UgKmU7CisKKyAgLypMSU5URUQqLworICBmb3IoIGYg
PSBtZXNoLT5mSGVhZC5uZXh0OyBmICE9ICZtZXNoLT5mSGVhZDsgZiA9IGZOZXh0ICkgeworICAg
IGZOZXh0ID0gZi0+bmV4dDsKKyAgICBlID0gZi0+YW5FZGdlOworICAgIGFzc2VydCggZS0+TG5l
eHQgIT0gZSApOworCisgICAgaWYoIGUtPkxuZXh0LT5MbmV4dCA9PSBlICkgeworICAgICAgLyog
QSBmYWNlIHdpdGggb25seSB0d28gZWRnZXMgKi8KKyAgICAgIEFkZFdpbmRpbmcoIGUtPk9uZXh0
LCBlICk7CisgICAgICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGUgKSApIHJldHVybiAwOworICAg
IH0KKyAgfQorICByZXR1cm4gMTsKK30KKworaW50IF9fZ2xfY29tcHV0ZUludGVyaW9yKCBHTFV0
ZXNzZWxhdG9yICp0ZXNzICkKKy8qCisgKiBfX2dsX2NvbXB1dGVJbnRlcmlvciggdGVzcyApIGNv
bXB1dGVzIHRoZSBwbGFuYXIgYXJyYW5nZW1lbnQgc3BlY2lmaWVkCisgKiBieSB0aGUgZ2l2ZW4g
Y29udG91cnMsIGFuZCBmdXJ0aGVyIHN1YmRpdmlkZXMgdGhpcyBhcnJhbmdlbWVudAorICogaW50
byByZWdpb25zLiAgRWFjaCByZWdpb24gaXMgbWFya2VkICJpbnNpZGUiIGlmIGl0IGJlbG9uZ3MK
KyAqIHRvIHRoZSBwb2x5Z29uLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUgZ2l2ZW4gYnkgdGVzcy0+
d2luZGluZ1J1bGUuCisgKiBFYWNoIGludGVyaW9yIHJlZ2lvbiBpcyBndWFyYW50ZWVkIGJlIG1v
bm90b25lLgorICovCit7CisgIEdMVXZlcnRleCAqdiwgKnZOZXh0OworCisgIHRlc3MtPmZhdGFs
RXJyb3IgPSBGQUxTRTsKKworICAvKiBFYWNoIHZlcnRleCBkZWZpbmVzIGFuIGV2ZW50IGZvciBv
dXIgc3dlZXAgbGluZS4gIFN0YXJ0IGJ5IGluc2VydGluZworICAgKiBhbGwgdGhlIHZlcnRpY2Vz
IGluIGEgcHJpb3JpdHkgcXVldWUuICBFdmVudHMgYXJlIHByb2Nlc3NlZCBpbgorICAgKiBsZXhp
Y29ncmFwaGljIG9yZGVyLCBpZS4KKyAgICoKKyAgICoJZTEgPCBlMiAgaWZmICBlMS54IDwgZTIu
eCB8fCAoZTEueCA9PSBlMi54ICYmIGUxLnkgPCBlMi55KQorICAgKi8KKyAgUmVtb3ZlRGVnZW5l
cmF0ZUVkZ2VzKCB0ZXNzICk7CisgIGlmICggIUluaXRQcmlvcml0eVEoIHRlc3MgKSApIHJldHVy
biAwOyAvKiBpZiBlcnJvciAqLworICBJbml0RWRnZURpY3QoIHRlc3MgKTsKKworICAvKiBfX2ds
X3BxU29ydEV4dHJhY3RNaW4gKi8KKyAgd2hpbGUoICh2ID0gKEdMVXZlcnRleCAqKXBxRXh0cmFj
dE1pbiggdGVzcy0+cHEgKSkgIT0gTlVMTCApIHsKKyAgICBmb3IoIDs7ICkgeworICAgICAgdk5l
eHQgPSAoR0xVdmVydGV4ICopcHFNaW5pbXVtKCB0ZXNzLT5wcSApOyAvKiBfX2dsX3BxU29ydE1p
bmltdW0gKi8KKyAgICAgIGlmKCB2TmV4dCA9PSBOVUxMIHx8ICEgVmVydEVxKCB2TmV4dCwgdiAp
KSBicmVhazsKKyAgICAgIAorICAgICAgLyogTWVyZ2UgdG9nZXRoZXIgYWxsIHZlcnRpY2VzIGF0
IGV4YWN0bHkgdGhlIHNhbWUgbG9jYXRpb24uCisgICAgICAgKiBUaGlzIGlzIG1vcmUgZWZmaWNp
ZW50IHRoYW4gcHJvY2Vzc2luZyB0aGVtIG9uZSBhdCBhIHRpbWUsCisgICAgICAgKiBzaW1wbGlm
aWVzIHRoZSBjb2RlIChzZWUgQ29ubmVjdExlZnREZWdlbmVyYXRlKSwgYW5kIGlzIGFsc28KKyAg
ICAgICAqIGltcG9ydGFudCBmb3IgY29ycmVjdCBoYW5kbGluZyBvZiBjZXJ0YWluIGRlZ2VuZXJh
dGUgY2FzZXMuCisgICAgICAgKiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGVyZSBhcmUgdHdvIGlk
ZW50aWNhbCBlZGdlcyBBIGFuZCBCCisgICAgICAgKiB0aGF0IGJlbG9uZyB0byBkaWZmZXJlbnQg
Y29udG91cnMgKHNvIHdpdGhvdXQgdGhpcyBjb2RlIHRoZXkgd291bGQKKyAgICAgICAqIGJlIHBy
b2Nlc3NlZCBieSBzZXBhcmF0ZSBzd2VlcCBldmVudHMpLiAgU3VwcG9zZSBhbm90aGVyIGVkZ2Ug
QworICAgICAgICogY3Jvc3NlcyBBIGFuZCBCIGZyb20gYWJvdmUuICBXaGVuIEEgaXMgcHJvY2Vz
c2VkLCB3ZSBzcGxpdCBpdAorICAgICAgICogYXQgaXRzIGludGVyc2VjdGlvbiBwb2ludCB3aXRo
IEMuICBIb3dldmVyIHRoaXMgYWxzbyBzcGxpdHMgQywKKyAgICAgICAqIHNvIHdoZW4gd2UgaW5z
ZXJ0IEIgd2UgbWF5IGNvbXB1dGUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKyAgICAgICAqIGludGVy
c2VjdGlvbiBwb2ludC4gIFRoaXMgbWlnaHQgbGVhdmUgdHdvIGVkZ2VzIHdpdGggYSBzbWFsbAor
ICAgICAgICogZ2FwIGJldHdlZW4gdGhlbS4gIFRoaXMga2luZCBvZiBlcnJvciBpcyBlc3BlY2lh
bGx5IG9idmlvdXMKKyAgICAgICAqIHdoZW4gdXNpbmcgYm91bmRhcnkgZXh0cmFjdGlvbiAoR0xV
X1RFU1NfQk9VTkRBUllfT05MWSkuCisgICAgICAgKi8KKyAgICAgIHZOZXh0ID0gKEdMVXZlcnRl
eCAqKXBxRXh0cmFjdE1pbiggdGVzcy0+cHEgKTsgLyogX19nbF9wcVNvcnRFeHRyYWN0TWluKi8K
KyAgICAgIFNwbGljZU1lcmdlVmVydGljZXMoIHRlc3MsIHYtPmFuRWRnZSwgdk5leHQtPmFuRWRn
ZSApOworICAgIH0KKyAgICBTd2VlcEV2ZW50KCB0ZXNzLCB2ICk7CisgIH0KKworICAvKiBTZXQg
dGVzcy0+ZXZlbnQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworICAvKiBfX0dMX0RJQ1RMSVNU
S0VZICovIC8qIF9fR0xfRElDVExJU1RNSU4gKi8gCisgIHRlc3MtPmV2ZW50ID0gKChBY3RpdmVS
ZWdpb24gKikgZGljdEtleSggZGljdE1pbiggdGVzcy0+ZGljdCApKSktPmVVcC0+T3JnOworICBE
ZWJ1Z0V2ZW50KCB0ZXNzICk7CisgIERvbmVFZGdlRGljdCggdGVzcyApOworICBEb25lUHJpb3Jp
dHlRKCB0ZXNzICk7CisKKyAgaWYgKCAhUmVtb3ZlRGVnZW5lcmF0ZUZhY2VzKCB0ZXNzLT5tZXNo
ICkgKSByZXR1cm4gMDsKKyAgX19nbF9tZXNoQ2hlY2tNZXNoKCB0ZXNzLT5tZXNoICk7CisKKyAg
cmV0dXJuIDE7Cit9CkluZGV4OiBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg0IEBACisvKgorKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5
LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisqKiBtYWRl
IHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNH
SSBGcmVlCisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2Ui
KSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUg
cHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBj
b3B5CisqKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBM
ZWdhbCBTZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZp
ZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5jb20vcHJv
amVjdHMvRnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5z
ZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJhc2lzLCB3
aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKKyoq
IERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBX
QVJSQU5USUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFD
VE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBO
T04tSU5GUklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29k
ZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4yLjEsIHJl
bGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAor
KiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxp
Y29uIEdyYXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQg
YnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJlaW4uIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6
IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxpc2hlZCBi
eSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisqKiBP
cGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEp
LCByZWxlYXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0
ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0
LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRvdyBTeXN0
ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0
d2FyZQorKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNh
bXBsZSBJbXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVl
biBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0aCB0aGUg
T3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoKKyoqIEF1
dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNpb24kCisq
KiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9zd2VlcC5oIzUgJAor
Ki8KKworI2lmbmRlZiBfX3N3ZWVwX2hfCisjZGVmaW5lIF9fc3dlZXBfaF8KKworI2luY2x1ZGUg
InRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorCisvKiBfX2dsX2NvbXB1dGVJbnRlcmlv
ciggdGVzcyApIGNvbXB1dGVzIHRoZSBwbGFuYXIgYXJyYW5nZW1lbnQgc3BlY2lmaWVkCisgKiBi
eSB0aGUgZ2l2ZW4gY29udG91cnMsIGFuZCBmdXJ0aGVyIHN1YmRpdmlkZXMgdGhpcyBhcnJhbmdl
bWVudAorICogaW50byByZWdpb25zLiAgRWFjaCByZWdpb24gaXMgbWFya2VkICJpbnNpZGUiIGlm
IGl0IGJlbG9uZ3MKKyAqIHRvIHRoZSBwb2x5Z29uLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUgZ2l2
ZW4gYnkgdGVzcy0+d2luZGluZ1J1bGUuCisgKiBFYWNoIGludGVyaW9yIHJlZ2lvbiBpcyBndWFy
YW50ZWVkIGJlIG1vbm90b25lLgorICovCitpbnQgX19nbF9jb21wdXRlSW50ZXJpb3IoIEdMVXRl
c3NlbGF0b3IgKnRlc3MgKTsKKworCisvKiBUaGUgZm9sbG93aW5nIGlzIGhlcmUgKm9ubHkqIGZv
ciBhY2Nlc3MgYnkgZGVidWdnaW5nIHJvdXRpbmVzICovCisKKyNpbmNsdWRlICJkaWN0LmgiCisK
Ky8qIEZvciBlYWNoIHBhaXIgb2YgYWRqYWNlbnQgZWRnZXMgY3Jvc3NpbmcgdGhlIHN3ZWVwIGxp
bmUsIHRoZXJlIGlzCisgKiBhbiBBY3RpdmVSZWdpb24gdG8gcmVwcmVzZW50IHRoZSByZWdpb24g
YmV0d2VlbiB0aGVtLiAgVGhlIGFjdGl2ZQorICogcmVnaW9ucyBhcmUga2VwdCBpbiBzb3J0ZWQg
b3JkZXIgaW4gYSBkeW5hbWljIGRpY3Rpb25hcnkuICBBcyB0aGUKKyAqIHN3ZWVwIGxpbmUgY3Jv
c3NlcyBlYWNoIHZlcnRleCwgd2UgdXBkYXRlIHRoZSBhZmZlY3RlZCByZWdpb25zLgorICovCisK
K3N0cnVjdCBBY3RpdmVSZWdpb24geworICBHTFVoYWxmRWRnZQkqZVVwOwkJLyogdXBwZXIgZWRn
ZSwgZGlyZWN0ZWQgcmlnaHQgdG8gbGVmdCAqLworICBEaWN0Tm9kZQkqbm9kZVVwOwkvKiBkaWN0
aW9uYXJ5IG5vZGUgY29ycmVzcG9uZGluZyB0byBlVXAgKi8KKyAgaW50CQl3aW5kaW5nTnVtYmVy
OwkvKiB1c2VkIHRvIGRldGVybWluZSB3aGljaCByZWdpb25zIGFyZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKiBpbnNpZGUgdGhlIHBvbHlnb24gKi8KKyAgR0xib29sZWFuCWlu
c2lkZTsJCS8qIGlzIHRoaXMgcmVnaW9uIGluc2lkZSB0aGUgcG9seWdvbj8gKi8KKyAgR0xib29s
ZWFuCXNlbnRpbmVsOwkvKiBtYXJrcyBmYWtlIGVkZ2VzIGF0IHQgPSArLy1pbmZpbml0eSAqLwor
ICBHTGJvb2xlYW4JZGlydHk7CQkvKiBtYXJrcyByZWdpb25zIHdoZXJlIHRoZSB1cHBlciBvciBs
b3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBlZGdlIGhhcyBjaGFuZ2Vk
LCBidXQgd2UgaGF2ZW4ndCBjaGVja2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqIHdoZXRoZXIgdGhleSBpbnRlcnNlY3QgeWV0ICovCisgIEdMYm9vbGVhbglmaXhVcHBlckVk
Z2U7CS8qIG1hcmtzIHRlbXBvcmFyeSBlZGdlcyBpbnRyb2R1Y2VkIHdoZW4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICogd2UgcHJvY2VzcyBhICJyaWdodCB2ZXJ0ZXgiIChvbmUg
d2l0aG91dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbnkgZWRnZXMgbGVh
dmluZyB0byB0aGUgcmlnaHQpICovCit9OworCisjZGVmaW5lIFJlZ2lvbkJlbG93KHIpCSgoQWN0
aXZlUmVnaW9uICopIGRpY3RLZXkoZGljdFByZWQoKHIpLT5ub2RlVXApKSkKKyNkZWZpbmUgUmVn
aW9uQWJvdmUocikJKChBY3RpdmVSZWdpb24gKikgZGljdEtleShkaWN0U3VjYygociktPm5vZGVV
cCkpKQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNz
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuYwko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjM5IEBACisvKgorKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5
LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCisqKiBtYWRl
IHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNH
SSBGcmVlCisqKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2Ui
KSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKKyoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUg
cHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCisqKiB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBj
b3B5CisqKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBM
ZWdhbCBTZXJ2aWNlcywgMTYwMAorKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZp
ZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgorKiogCisqKiBodHRwOi8vb3NzLnNnaS5jb20vcHJv
amVjdHMvRnJlZUIKKyoqIAorKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5z
ZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqKiAiQVMgSVMiIGJhc2lzLCB3
aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKKyoq
IERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBX
QVJSQU5USUVTIEFORAorKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFD
VE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCisqKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBO
T04tSU5GUklOR0VNRU5ULgorKiogCisqKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29k
ZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKKyoqIFZlcnNpb24gMS4yLjEsIHJl
bGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAor
KiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxp
Y29uIEdyYXBoaWNzLCBJbmMuCisqKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQg
YnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKKyoqIGVsc2V3aGVyZSBoZXJlaW4uIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisqKiAKKyoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6
IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCisqKiBlc3RhYmxpc2hlZCBi
eSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCisqKiBP
cGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEp
LCByZWxlYXNlZAorKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0
ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCisqKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0
LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKKyoqIFdpbmRvdyBTeXN0
ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0
d2FyZQorKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNh
bXBsZSBJbXBsZW1lbnRhdGlvbgorKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVl
biBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCisqKiBjb21wbGlhbnQgd2l0aCB0aGUg
T3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KKyoqCisqLworLyoKKyoqIEF1
dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgorKioKKyoqICREYXRlJCAkUmV2aXNpb24kCisq
KiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy90ZXNzLmMjNyAkCisq
LworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5jbHVkZSA8
c3RkZGVmLmg+CisKKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9nbHVvcy5oIgorI2luY2x1ZGUg
InRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCIKKyNpbmNsdWRlICJ0aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL21lc2guaCIKKyNpbmNsdWRlICJ0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL25v
cm1hbC5oIgorI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgiCisjaW5j
bHVkZSAidGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5oIgorI2luY2x1ZGUgInRoaXJkcGFy
dHkvZ2x1L2xpYnRlc3MvdGVzcy5oIgorI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
dGVzc21vbm8uaCIKKworI2RlZmluZSBHTFVfVEVTU19ERUZBVUxUX1RPTEVSQU5DRSAwLjAKKyNk
ZWZpbmUgR0xVX1RFU1NfTUVTSAkJMTAwMTEyCS8qIHZvaWQgKCopKEdMVW1lc2ggKm1lc2gpCSAg
ICAqLworCisjZGVmaW5lIFRSVUUgMQorI2RlZmluZSBGQUxTRSAwCisKKy8qQVJHU1VTRUQqLyBz
dGF0aWMgdm9pZCBHTEFQSUVOVFJZIG5vQmVnaW4oIEdMZW51bSB0eXBlICkge30KKy8qQVJHU1VT
RUQqLyBzdGF0aWMgdm9pZCBHTEFQSUVOVFJZIG5vRWRnZUZsYWcoIEdMYm9vbGVhbiBib3VuZGFy
eUVkZ2UgKSB7fQorLypBUkdTVVNFRCovIHN0YXRpYyB2b2lkIEdMQVBJRU5UUlkgbm9WZXJ0ZXgo
IHZvaWQgKmRhdGEgKSB7fQorLypBUkdTVVNFRCovIHN0YXRpYyB2b2lkIEdMQVBJRU5UUlkgbm9F
bmQoIHZvaWQgKSB7fQorLypBUkdTVVNFRCovIHN0YXRpYyB2b2lkIEdMQVBJRU5UUlkgbm9FcnJv
ciggR0xlbnVtIGVycm51bSApIHt9CisvKkFSR1NVU0VEKi8gc3RhdGljIHZvaWQgR0xBUElFTlRS
WSBub0NvbWJpbmUoIEdMZG91YmxlIGNvb3Jkc1szXSwgdm9pZCAqZGF0YVs0XSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgd2VpZ2h0WzRdLCB2b2lkICoqZGF0
YU91dCApIHt9CisvKkFSR1NVU0VEKi8gc3RhdGljIHZvaWQgR0xBUElFTlRSWSBub01lc2goIEdM
VW1lc2ggKm1lc2ggKSB7fQorCisKKy8qQVJHU1VTRUQqLyB2b2lkIEdMQVBJRU5UUlkgX19nbF9u
b0JlZ2luRGF0YSggR0xlbnVtIHR5cGUsCisJCQkJCSAgICAgdm9pZCAqcG9seWdvbkRhdGEgKSB7
fQorLypBUkdTVVNFRCovIHZvaWQgR0xBUElFTlRSWSBfX2dsX25vRWRnZUZsYWdEYXRhKCBHTGJv
b2xlYW4gYm91bmRhcnlFZGdlLCAKKwkJCQkgICAgICAgdm9pZCAqcG9seWdvbkRhdGEgKSB7fQor
LypBUkdTVVNFRCovIHZvaWQgR0xBUElFTlRSWSBfX2dsX25vVmVydGV4RGF0YSggdm9pZCAqZGF0
YSwKKwkJCQkJICAgICAgdm9pZCAqcG9seWdvbkRhdGEgKSB7fQorLypBUkdTVVNFRCovIHZvaWQg
R0xBUElFTlRSWSBfX2dsX25vRW5kRGF0YSggdm9pZCAqcG9seWdvbkRhdGEgKSB7fQorLypBUkdT
VVNFRCovIHZvaWQgR0xBUElFTlRSWSBfX2dsX25vRXJyb3JEYXRhKCBHTGVudW0gZXJybnVtLAor
CQkJCQkgICAgIHZvaWQgKnBvbHlnb25EYXRhICkge30KKy8qQVJHU1VTRUQqLyB2b2lkIEdMQVBJ
RU5UUlkgX19nbF9ub0NvbWJpbmVEYXRhKCBHTGRvdWJsZSBjb29yZHNbM10sCisJCQkJCSAgICAg
ICB2b2lkICpkYXRhWzRdLAorCQkJCQkgICAgICAgR0xmbG9hdCB3ZWlnaHRbNF0sCisJCQkJCSAg
ICAgICB2b2lkICoqb3V0RGF0YSwKKwkJCQkJICAgICAgIHZvaWQgKnBvbHlnb25EYXRhICkge30K
KworLyogSGFsZi1lZGdlcyBhcmUgYWxsb2NhdGVkIGluIHBhaXJzIChzZWUgbWVzaC5jKSAqLwor
dHlwZWRlZiBzdHJ1Y3QgeyBHTFVoYWxmRWRnZSBlLCBlU3ltOyB9IEVkZ2VQYWlyOworCisjZGVm
aW5lIE1BWChhLGIpCSgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisjZGVmaW5lIE1BWF9GQVNUX0FM
TE9DCShNQVgoc2l6ZW9mKEVkZ2VQYWlyKSwgXAorCQkJIE1BWChzaXplb2YoR0xVdmVydGV4KSxz
aXplb2YoR0xVZmFjZSkpKSkKKworCitHTFV0ZXNzZWxhdG9yICogR0xBUElFTlRSWQoraW50ZXJu
YWxfZ2x1TmV3VGVzcyggdm9pZCApCit7CisgIEdMVXRlc3NlbGF0b3IgKnRlc3M7CisKKyAgLyog
T25seSBpbml0aWFsaXplIGZpZWxkcyB3aGljaCBjYW4gYmUgY2hhbmdlZCBieSB0aGUgYXBpLiAg
T3RoZXIgZmllbGRzCisgICAqIGFyZSBpbml0aWFsaXplZCB3aGVyZSB0aGV5IGFyZSB1c2VkLgor
ICAgKi8KKworICBpZiAobWVtSW5pdCggTUFYX0ZBU1RfQUxMT0MgKSA9PSAwKSB7CisgICAgIHJl
dHVybiAwOwkJCS8qIG91dCBvZiBtZW1vcnkgKi8KKyAgfQorICB0ZXNzID0gKEdMVXRlc3NlbGF0
b3IgKiltZW1BbGxvYyggc2l6ZW9mKCBHTFV0ZXNzZWxhdG9yICkpOworICBpZiAodGVzcyA9PSBO
VUxMKSB7CisgICAgIHJldHVybiAwOwkJCS8qIG91dCBvZiBtZW1vcnkgKi8KKyAgfQorCisgIHRl
c3MtPnN0YXRlID0gVF9ET1JNQU5UOworCisgIHRlc3MtPm5vcm1hbFswXSA9IDA7CisgIHRlc3Mt
Pm5vcm1hbFsxXSA9IDA7CisgIHRlc3MtPm5vcm1hbFsyXSA9IDA7CisKKyAgdGVzcy0+cmVsVG9s
ZXJhbmNlID0gR0xVX1RFU1NfREVGQVVMVF9UT0xFUkFOQ0U7CisgIHRlc3MtPndpbmRpbmdSdWxl
ID0gR0xVX1RFU1NfV0lORElOR19PREQ7CisgIHRlc3MtPmZsYWdCb3VuZGFyeSA9IEZBTFNFOwor
ICB0ZXNzLT5ib3VuZGFyeU9ubHkgPSBGQUxTRTsKKworICB0ZXNzLT5jYWxsQmVnaW4gPSAmbm9C
ZWdpbjsKKyAgdGVzcy0+Y2FsbEVkZ2VGbGFnID0gJm5vRWRnZUZsYWc7CisgIHRlc3MtPmNhbGxW
ZXJ0ZXggPSAmbm9WZXJ0ZXg7CisgIHRlc3MtPmNhbGxFbmQgPSAmbm9FbmQ7CisKKyAgdGVzcy0+
Y2FsbEVycm9yID0gJm5vRXJyb3I7CisgIHRlc3MtPmNhbGxDb21iaW5lID0gJm5vQ29tYmluZTsK
KyAgdGVzcy0+Y2FsbE1lc2ggPSAmbm9NZXNoOworCisgIHRlc3MtPmNhbGxCZWdpbkRhdGE9ICZf
X2dsX25vQmVnaW5EYXRhOworICB0ZXNzLT5jYWxsRWRnZUZsYWdEYXRhPSAmX19nbF9ub0VkZ2VG
bGFnRGF0YTsKKyAgdGVzcy0+Y2FsbFZlcnRleERhdGE9ICZfX2dsX25vVmVydGV4RGF0YTsKKyAg
dGVzcy0+Y2FsbEVuZERhdGE9ICZfX2dsX25vRW5kRGF0YTsKKyAgdGVzcy0+Y2FsbEVycm9yRGF0
YT0gJl9fZ2xfbm9FcnJvckRhdGE7CisgIHRlc3MtPmNhbGxDb21iaW5lRGF0YT0gJl9fZ2xfbm9D
b21iaW5lRGF0YTsKKworICB0ZXNzLT5wb2x5Z29uRGF0YT0gTlVMTDsKKworICByZXR1cm4gdGVz
czsKK30KKworc3RhdGljIHZvaWQgTWFrZURvcm1hbnQoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQor
eworICAvKiBSZXR1cm4gdGhlIHRlc3NlbGxhdG9yIHRvIGl0cyBvcmlnaW5hbCBkb3JtYW50IHN0
YXRlLiAqLworCisgIGlmKCB0ZXNzLT5tZXNoICE9IE5VTEwgKSB7CisgICAgX19nbF9tZXNoRGVs
ZXRlTWVzaCggdGVzcy0+bWVzaCApOworICB9CisgIHRlc3MtPnN0YXRlID0gVF9ET1JNQU5UOwor
ICB0ZXNzLT5sYXN0RWRnZSA9IE5VTEw7CisgIHRlc3MtPm1lc2ggPSBOVUxMOworfQorCisjZGVm
aW5lIFJlcXVpcmVTdGF0ZSggdGVzcywgcyApICAgaWYoIHRlc3MtPnN0YXRlICE9IHMgKSBHb3Rv
U3RhdGUodGVzcyxzKQorCitzdGF0aWMgdm9pZCBHb3RvU3RhdGUoIEdMVXRlc3NlbGF0b3IgKnRl
c3MsIGVudW0gVGVzc1N0YXRlIG5ld1N0YXRlICkKK3sKKyAgd2hpbGUoIHRlc3MtPnN0YXRlICE9
IG5ld1N0YXRlICkgeworICAgIC8qIFdlIGNoYW5nZSB0aGUgY3VycmVudCBzdGF0ZSBvbmUgbGV2
ZWwgYXQgYSB0aW1lLCB0byBnZXQgdG8KKyAgICAgKiB0aGUgZGVzaXJlZCBzdGF0ZS4KKyAgICAg
Ki8KKyAgICBpZiggdGVzcy0+c3RhdGUgPCBuZXdTdGF0ZSApIHsKKyAgICAgIHN3aXRjaCggdGVz
cy0+c3RhdGUgKSB7CisgICAgICBjYXNlIFRfRE9STUFOVDoKKwlDQUxMX0VSUk9SX09SX0VSUk9S
X0RBVEEoIEdMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9MWUdPTiApOworCWludGVybmFsX2dsdVRl
c3NCZWdpblBvbHlnb24oIHRlc3MsIE5VTEwgKTsKKwlicmVhazsKKyAgICAgIGNhc2UgVF9JTl9Q
T0xZR09OOgorCUNBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RFU1NfTUlTU0lOR19CRUdJ
Tl9DT05UT1VSICk7CisJaW50ZXJuYWxfZ2x1VGVzc0JlZ2luQ29udG91ciggdGVzcyApOworCWJy
ZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOworICAgICAgICBicmVhazsK
KyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgc3dpdGNoKCB0ZXNzLT5zdGF0ZSApIHsKKyAg
ICAgIGNhc2UgVF9JTl9DT05UT1VSOgorCUNBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RF
U1NfTUlTU0lOR19FTkRfQ09OVE9VUiApOworCWludGVybmFsX2dsdVRlc3NFbmRDb250b3VyKCB0
ZXNzICk7CisJYnJlYWs7CisgICAgICBjYXNlIFRfSU5fUE9MWUdPTjoKKwlDQUxMX0VSUk9SX09S
X0VSUk9SX0RBVEEoIEdMVV9URVNTX01JU1NJTkdfRU5EX1BPTFlHT04gKTsKKwkvKiBnbHVUZXNz
RW5kUG9seWdvbiggdGVzcyApIGlzIHRvbyBtdWNoIHdvcmshICovCisJTWFrZURvcm1hbnQoIHRl
c3MgKTsKKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKwordm9pZCBHTEFQSUVOVFJZCitp
bnRlcm5hbF9nbHVEZWxldGVUZXNzKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKK3sKKyAgUmVxdWly
ZVN0YXRlKCB0ZXNzLCBUX0RPUk1BTlQgKTsKKyAgbWVtRnJlZSggdGVzcyApOworfQorCisKK3Zv
aWQgR0xBUElFTlRSWQoraW50ZXJuYWxfZ2x1VGVzc1Byb3BlcnR5KCBHTFV0ZXNzZWxhdG9yICp0
ZXNzLCBHTGVudW0gd2hpY2gsIEdMZG91YmxlIHZhbHVlICkKK3sKKyAgR0xlbnVtIHdpbmRpbmdS
dWxlOworCisgIHN3aXRjaCggd2hpY2ggKSB7CisgIGNhc2UgR0xVX1RFU1NfVE9MRVJBTkNFOgor
ICAgIGlmKCB2YWx1ZSA8IDAuMCB8fCB2YWx1ZSA+IDEuMCApIGJyZWFrOworICAgIHRlc3MtPnJl
bFRvbGVyYW5jZSA9IHZhbHVlOworICAgIHJldHVybjsKKworICBjYXNlIEdMVV9URVNTX1dJTkRJ
TkdfUlVMRToKKyAgICB3aW5kaW5nUnVsZSA9IChHTGVudW0pIHZhbHVlOworICAgIGlmKCB3aW5k
aW5nUnVsZSAhPSB2YWx1ZSApIGJyZWFrOwkvKiBub3QgYW4gaW50ZWdlciAqLworCisgICAgc3dp
dGNoKCB3aW5kaW5nUnVsZSApIHsKKyAgICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfT0REOgorICAg
IGNhc2UgR0xVX1RFU1NfV0lORElOR19OT05aRVJPOgorICAgIGNhc2UgR0xVX1RFU1NfV0lORElO
R19QT1NJVElWRToKKyAgICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkU6CisgICAgY2Fz
ZSBHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPOgorICAgICAgdGVzcy0+d2luZGluZ1J1bGUg
PSB3aW5kaW5nUnVsZTsKKyAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7
CisgICAgfQorCisgIGNhc2UgR0xVX1RFU1NfQk9VTkRBUllfT05MWToKKyAgICB0ZXNzLT5ib3Vu
ZGFyeU9ubHkgPSAodmFsdWUgIT0gMCk7CisgICAgcmV0dXJuOworCisgIGRlZmF1bHQ6CisgICAg
Q0FMTF9FUlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfSU5WQUxJRF9FTlVNICk7CisgICAgcmV0dXJu
OworICB9CisgIENBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX0lOVkFMSURfVkFMVUUgKTsK
K30KKworLyogUmV0dXJucyB0ZXNzZWxsYXRvciBwcm9wZXJ0eSAqLwordm9pZCBHTEFQSUVOVFJZ
CitpbnRlcm5hbF9nbHVHZXRUZXNzUHJvcGVydHkoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZW51
bSB3aGljaCwgR0xkb3VibGUgKnZhbHVlICkKK3sKKyAgIHN3aXRjaCAod2hpY2gpIHsKKyAgIGNh
c2UgR0xVX1RFU1NfVE9MRVJBTkNFOgorICAgICAgLyogdG9sZXJhbmNlIHNob3VsZCBiZSBpbiBy
YW5nZSBbMC4uMV0gKi8KKyAgICAgIGFzc2VydCgwLjAgPD0gdGVzcy0+cmVsVG9sZXJhbmNlICYm
IHRlc3MtPnJlbFRvbGVyYW5jZSA8PSAxLjApOworICAgICAgKnZhbHVlPSB0ZXNzLT5yZWxUb2xl
cmFuY2U7CisgICAgICBicmVhazsgICAgCisgICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfUlVMRToK
KyAgICAgIGFzc2VydCh0ZXNzLT53aW5kaW5nUnVsZSA9PSBHTFVfVEVTU19XSU5ESU5HX09ERCB8
fAorCSAgICAgdGVzcy0+d2luZGluZ1J1bGUgPT0gR0xVX1RFU1NfV0lORElOR19OT05aRVJPIHx8
CisJICAgICB0ZXNzLT53aW5kaW5nUnVsZSA9PSBHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFIHx8
CisJICAgICB0ZXNzLT53aW5kaW5nUnVsZSA9PSBHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFIHx8
CisJICAgICB0ZXNzLT53aW5kaW5nUnVsZSA9PSBHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdP
KTsKKyAgICAgICp2YWx1ZT0gdGVzcy0+d2luZGluZ1J1bGU7CisgICAgICBicmVhazsKKyAgIGNh
c2UgR0xVX1RFU1NfQk9VTkRBUllfT05MWToKKyAgICAgIGFzc2VydCh0ZXNzLT5ib3VuZGFyeU9u
bHkgPT0gVFJVRSB8fCB0ZXNzLT5ib3VuZGFyeU9ubHkgPT0gRkFMU0UpOworICAgICAgKnZhbHVl
PSB0ZXNzLT5ib3VuZGFyeU9ubHk7CisgICAgICBicmVhazsKKyAgIGRlZmF1bHQ6CisgICAgICAq
dmFsdWU9IDAuMDsKKyAgICAgIENBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX0lOVkFMSURf
RU5VTSApOworICAgICAgYnJlYWs7CisgICB9Cit9IC8qIGdsdUdldFRlc3NQcm9wZXJ0eSgpICov
CisKK3ZvaWQgR0xBUElFTlRSWQoraW50ZXJuYWxfZ2x1VGVzc05vcm1hbCggR0xVdGVzc2VsYXRv
ciAqdGVzcywgR0xkb3VibGUgeCwgR0xkb3VibGUgeSwgR0xkb3VibGUgeiApCit7CisgIHRlc3Mt
Pm5vcm1hbFswXSA9IHg7CisgIHRlc3MtPm5vcm1hbFsxXSA9IHk7CisgIHRlc3MtPm5vcm1hbFsy
XSA9IHo7Cit9CisKK3ZvaWQgR0xBUElFTlRSWQoraW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKCBH
TFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGVudW0gd2hpY2gsIHZvaWQgKEdMQVBJRU5UUlkgKmZuKSgp
KQoreworICBzd2l0Y2goIHdoaWNoICkgeworICBjYXNlIEdMVV9URVNTX0JFR0lOOgorICAgIHRl
c3MtPmNhbGxCZWdpbiA9IChmbiA9PSBOVUxMKSA/ICZub0JlZ2luIDogKHZvaWQgKEdMQVBJRU5U
UlkgKikoR0xlbnVtKSkgZm47CisgICAgcmV0dXJuOworICBjYXNlIEdMVV9URVNTX0JFR0lOX0RB
VEE6CisgICAgdGVzcy0+Y2FsbEJlZ2luRGF0YSA9IChmbiA9PSBOVUxMKSA/CisJJl9fZ2xfbm9C
ZWdpbkRhdGEgOiAodm9pZCAoR0xBUElFTlRSWSAqKShHTGVudW0sIHZvaWQgKikpIGZuOworICAg
IHJldHVybjsKKyAgY2FzZSBHTFVfVEVTU19FREdFX0ZMQUc6CisgICAgdGVzcy0+Y2FsbEVkZ2VG
bGFnID0gKGZuID09IE5VTEwpID8gJm5vRWRnZUZsYWcgOgorCQkJCQkodm9pZCAoR0xBUElFTlRS
WSAqKShHTGJvb2xlYW4pKSBmbjsKKyAgICAvKiBJZiB0aGUgY2xpZW50IHdhbnRzIGJvdW5kYXJ5
IGVkZ2VzIHRvIGJlIGZsYWdnZWQsCisgICAgICogd2UgcmVuZGVyIGV2ZXJ5dGhpbmcgYXMgc2Vw
YXJhdGUgdHJpYW5nbGVzIChubyBzdHJpcHMgb3IgZmFucykuCisgICAgICovCisgICAgdGVzcy0+
ZmxhZ0JvdW5kYXJ5ID0gKGZuICE9IE5VTEwpOworICAgIHJldHVybjsKKyAgY2FzZSBHTFVfVEVT
U19FREdFX0ZMQUdfREFUQToKKyAgICB0ZXNzLT5jYWxsRWRnZUZsYWdEYXRhPSAoZm4gPT0gTlVM
TCkgPworCSZfX2dsX25vRWRnZUZsYWdEYXRhIDogKHZvaWQgKEdMQVBJRU5UUlkgKikoR0xib29s
ZWFuLCB2b2lkICopKSBmbjsgCisgICAgLyogSWYgdGhlIGNsaWVudCB3YW50cyBib3VuZGFyeSBl
ZGdlcyB0byBiZSBmbGFnZ2VkLAorICAgICAqIHdlIHJlbmRlciBldmVyeXRoaW5nIGFzIHNlcGFy
YXRlIHRyaWFuZ2xlcyAobm8gc3RyaXBzIG9yIGZhbnMpLgorICAgICAqLworICAgIHRlc3MtPmZs
YWdCb3VuZGFyeSA9IChmbiAhPSBOVUxMKTsKKyAgICByZXR1cm47CisgIGNhc2UgR0xVX1RFU1Nf
VkVSVEVYOgorICAgIHRlc3MtPmNhbGxWZXJ0ZXggPSAoZm4gPT0gTlVMTCkgPyAmbm9WZXJ0ZXgg
OgorCQkJCSAgICAgICh2b2lkIChHTEFQSUVOVFJZICopKHZvaWQgKikpIGZuOworICAgIHJldHVy
bjsKKyAgY2FzZSBHTFVfVEVTU19WRVJURVhfREFUQToKKyAgICB0ZXNzLT5jYWxsVmVydGV4RGF0
YSA9IChmbiA9PSBOVUxMKSA/CisJJl9fZ2xfbm9WZXJ0ZXhEYXRhIDogKHZvaWQgKEdMQVBJRU5U
UlkgKikodm9pZCAqLCB2b2lkICopKSBmbjsKKyAgICByZXR1cm47CisgIGNhc2UgR0xVX1RFU1Nf
RU5EOgorICAgIHRlc3MtPmNhbGxFbmQgPSAoZm4gPT0gTlVMTCkgPyAmbm9FbmQgOiAodm9pZCAo
R0xBUElFTlRSWSAqKSh2b2lkKSkgZm47CisgICAgcmV0dXJuOworICBjYXNlIEdMVV9URVNTX0VO
RF9EQVRBOgorICAgIHRlc3MtPmNhbGxFbmREYXRhID0gKGZuID09IE5VTEwpID8gJl9fZ2xfbm9F
bmREYXRhIDogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAo
R0xBUElFTlRSWSAqKSh2b2lkICopKSBmbjsKKyAgICByZXR1cm47CisgIGNhc2UgR0xVX1RFU1Nf
RVJST1I6CisgICAgdGVzcy0+Y2FsbEVycm9yID0gKGZuID09IE5VTEwpID8gJm5vRXJyb3IgOiAo
dm9pZCAoR0xBUElFTlRSWSAqKShHTGVudW0pKSBmbjsKKyAgICByZXR1cm47CisgIGNhc2UgR0xV
X1RFU1NfRVJST1JfREFUQToKKyAgICB0ZXNzLT5jYWxsRXJyb3JEYXRhID0gKGZuID09IE5VTEwp
ID8KKwkmX19nbF9ub0Vycm9yRGF0YSA6ICh2b2lkIChHTEFQSUVOVFJZICopKEdMZW51bSwgdm9p
ZCAqKSkgZm47CisgICAgcmV0dXJuOworICBjYXNlIEdMVV9URVNTX0NPTUJJTkU6CisgICAgdGVz
cy0+Y2FsbENvbWJpbmUgPSAoZm4gPT0gTlVMTCkgPyAmbm9Db21iaW5lIDoKKwkodm9pZCAoR0xB
UElFTlRSWSAqKShHTGRvdWJsZSBbM10sdm9pZCAqWzRdLCBHTGZsb2F0IFs0XSwgdm9pZCAqKiAp
KSBmbjsKKyAgICByZXR1cm47CisgIGNhc2UgR0xVX1RFU1NfQ09NQklORV9EQVRBOgorICAgIHRl
c3MtPmNhbGxDb21iaW5lRGF0YSA9IChmbiA9PSBOVUxMKSA/ICZfX2dsX25vQ29tYmluZURhdGEg
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkIChHTEFQ
SUVOVFJZICopKEdMZG91YmxlIFszXSwKKwkJCQkJCSAgICAgdm9pZCAqWzRdLCAKKwkJCQkJCSAg
ICAgR0xmbG9hdCBbNF0sIAorCQkJCQkJICAgICB2b2lkICoqLAorCQkJCQkJICAgICB2b2lkICop
KSBmbjsKKyAgICByZXR1cm47CisgIGNhc2UgR0xVX1RFU1NfTUVTSDoKKyAgICB0ZXNzLT5jYWxs
TWVzaCA9IChmbiA9PSBOVUxMKSA/ICZub01lc2ggOiAodm9pZCAoR0xBUElFTlRSWSAqKShHTFVt
ZXNoICopKSBmbjsKKyAgICByZXR1cm47CisgIGRlZmF1bHQ6CisgICAgQ0FMTF9FUlJPUl9PUl9F
UlJPUl9EQVRBKCBHTFVfSU5WQUxJRF9FTlVNICk7CisgICAgcmV0dXJuOworICB9Cit9CisKK3N0
YXRpYyBpbnQgQWRkVmVydGV4KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSBjb29yZHNb
M10sIHZvaWQgKmRhdGEgKQoreworICBHTFVoYWxmRWRnZSAqZTsKKworICBlID0gdGVzcy0+bGFz
dEVkZ2U7CisgIGlmKCBlID09IE5VTEwgKSB7CisgICAgLyogTWFrZSBhIHNlbGYtbG9vcCAob25l
IHZlcnRleCwgb25lIGVkZ2UpLiAqLworCisgICAgZSA9IF9fZ2xfbWVzaE1ha2VFZGdlKCB0ZXNz
LT5tZXNoICk7CisgICAgaWYgKGUgPT0gTlVMTCkgcmV0dXJuIDA7CisgICAgaWYgKCAhX19nbF9t
ZXNoU3BsaWNlKCBlLCBlLT5TeW0gKSApIHJldHVybiAwOworICB9IGVsc2UgeworICAgIC8qIENy
ZWF0ZSBhIG5ldyB2ZXJ0ZXggYW5kIGVkZ2Ugd2hpY2ggaW1tZWRpYXRlbHkgZm9sbG93IGUKKyAg
ICAgKiBpbiB0aGUgb3JkZXJpbmcgYXJvdW5kIHRoZSBsZWZ0IGZhY2UuCisgICAgICovCisgICAg
aWYgKF9fZ2xfbWVzaFNwbGl0RWRnZSggZSApID09IE5VTEwpIHJldHVybiAwOworICAgIGUgPSBl
LT5MbmV4dDsKKyAgfQorCisgIC8qIFRoZSBuZXcgdmVydGV4IGlzIG5vdyBlLT5PcmcuICovCisg
IGUtPk9yZy0+ZGF0YSA9IGRhdGE7CisgIGUtPk9yZy0+Y29vcmRzWzBdID0gY29vcmRzWzBdOwor
ICBlLT5PcmctPmNvb3Jkc1sxXSA9IGNvb3Jkc1sxXTsKKyAgZS0+T3JnLT5jb29yZHNbMl0gPSBj
b29yZHNbMl07CisgIAorICAvKiBUaGUgd2luZGluZyBvZiBhbiBlZGdlIHNheXMgaG93IHRoZSB3
aW5kaW5nIG51bWJlciBjaGFuZ2VzIGFzIHdlCisgICAqIGNyb3NzIGZyb20gdGhlIGVkZ2UnJ3Mg
cmlnaHQgZmFjZSB0byBpdHMgbGVmdCBmYWNlLiAgV2UgYWRkIHRoZQorICAgKiB2ZXJ0aWNlcyBp
biBzdWNoIGFuIG9yZGVyIHRoYXQgYSBDQ1cgY29udG91ciB3aWxsIGFkZCArMSB0bworICAgKiB0
aGUgd2luZGluZyBudW1iZXIgb2YgdGhlIHJlZ2lvbiBpbnNpZGUgdGhlIGNvbnRvdXIuCisgICAq
LworICBlLT53aW5kaW5nID0gMTsKKyAgZS0+U3ltLT53aW5kaW5nID0gLTE7CisKKyAgdGVzcy0+
bGFzdEVkZ2UgPSBlOworCisgIHJldHVybiAxOworfQorCisKK3N0YXRpYyB2b2lkIENhY2hlVmVy
dGV4KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSBjb29yZHNbM10sIHZvaWQgKmRhdGEg
KQoreworICBDYWNoZWRWZXJ0ZXggKnYgPSAmdGVzcy0+Y2FjaGVbdGVzcy0+Y2FjaGVDb3VudF07
CisKKyAgdi0+ZGF0YSA9IGRhdGE7CisgIHYtPmNvb3Jkc1swXSA9IGNvb3Jkc1swXTsKKyAgdi0+
Y29vcmRzWzFdID0gY29vcmRzWzFdOworICB2LT5jb29yZHNbMl0gPSBjb29yZHNbMl07CisgICsr
dGVzcy0+Y2FjaGVDb3VudDsKK30KKworCitzdGF0aWMgaW50IEVtcHR5Q2FjaGUoIEdMVXRlc3Nl
bGF0b3IgKnRlc3MgKQoreworICBDYWNoZWRWZXJ0ZXggKnYgPSB0ZXNzLT5jYWNoZTsKKyAgQ2Fj
aGVkVmVydGV4ICp2TGFzdDsKKworICB0ZXNzLT5tZXNoID0gX19nbF9tZXNoTmV3TWVzaCgpOwor
ICBpZiAodGVzcy0+bWVzaCA9PSBOVUxMKSByZXR1cm4gMDsKKworICBmb3IoIHZMYXN0ID0gdiAr
IHRlc3MtPmNhY2hlQ291bnQ7IHYgPCB2TGFzdDsgKyt2ICkgeworICAgIGlmICggIUFkZFZlcnRl
eCggdGVzcywgdi0+Y29vcmRzLCB2LT5kYXRhICkgKSByZXR1cm4gMDsKKyAgfQorICB0ZXNzLT5j
YWNoZUNvdW50ID0gMDsKKyAgdGVzcy0+ZW1wdHlDYWNoZSA9IEZBTFNFOworCisgIHJldHVybiAx
OworfQorCisKK3ZvaWQgR0xBUElFTlRSWQoraW50ZXJuYWxfZ2x1VGVzc1ZlcnRleCggR0xVdGVz
c2VsYXRvciAqdGVzcywgR0xkb3VibGUgY29vcmRzWzNdLCB2b2lkICpkYXRhICkKK3sKKyAgaW50
IGksIHRvb0xhcmdlID0gRkFMU0U7CisgIEdMZG91YmxlIHgsIGNsYW1wZWRbM107CisKKyAgUmVx
dWlyZVN0YXRlKCB0ZXNzLCBUX0lOX0NPTlRPVVIgKTsKKworICBpZiggdGVzcy0+ZW1wdHlDYWNo
ZSApIHsKKyAgICBpZiAoICFFbXB0eUNhY2hlKCB0ZXNzICkgKSB7CisgICAgICAgQ0FMTF9FUlJP
Ul9PUl9FUlJPUl9EQVRBKCBHTFVfT1VUX09GX01FTU9SWSApOworICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgdGVzcy0+bGFzdEVkZ2UgPSBOVUxMOworICB9CisgIGZvciggaSA9IDA7IGkgPCAz
OyArK2kgKSB7CisgICAgeCA9IGNvb3Jkc1tpXTsKKyAgICBpZiggeCA8IC0gR0xVX1RFU1NfTUFY
X0NPT1JEICkgeworICAgICAgeCA9IC0gR0xVX1RFU1NfTUFYX0NPT1JEOworICAgICAgdG9vTGFy
Z2UgPSBUUlVFOworICAgIH0KKyAgICBpZiggeCA+IEdMVV9URVNTX01BWF9DT09SRCApIHsKKyAg
ICAgIHggPSBHTFVfVEVTU19NQVhfQ09PUkQ7CisgICAgICB0b29MYXJnZSA9IFRSVUU7CisgICAg
fQorICAgIGNsYW1wZWRbaV0gPSB4OworICB9CisgIGlmKCB0b29MYXJnZSApIHsKKyAgICBDQUxM
X0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9URVNTX0NPT1JEX1RPT19MQVJHRSApOworICB9CisK
KyAgaWYoIHRlc3MtPm1lc2ggPT0gTlVMTCApIHsKKyAgICBpZiggdGVzcy0+Y2FjaGVDb3VudCA8
IFRFU1NfTUFYX0NBQ0hFICkgeworICAgICAgQ2FjaGVWZXJ0ZXgoIHRlc3MsIGNsYW1wZWQsIGRh
dGEgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCAhRW1wdHlDYWNoZSggdGVzcyAp
ICkgeworICAgICAgIENBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX09VVF9PRl9NRU1PUlkg
KTsKKyAgICAgICByZXR1cm47CisgICAgfQorICB9CisgIGlmICggIUFkZFZlcnRleCggdGVzcywg
Y2xhbXBlZCwgZGF0YSApICkgeworICAgICAgIENBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xV
X09VVF9PRl9NRU1PUlkgKTsKKyAgfQorfQorCisKK3ZvaWQgR0xBUElFTlRSWQoraW50ZXJuYWxf
Z2x1VGVzc0JlZ2luUG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVzcywgdm9pZCAqZGF0YSApCit7
CisgIFJlcXVpcmVTdGF0ZSggdGVzcywgVF9ET1JNQU5UICk7CisKKyAgdGVzcy0+c3RhdGUgPSBU
X0lOX1BPTFlHT047CisgIHRlc3MtPmNhY2hlQ291bnQgPSAwOworICB0ZXNzLT5lbXB0eUNhY2hl
ID0gRkFMU0U7CisgIHRlc3MtPm1lc2ggPSBOVUxMOworCisgIHRlc3MtPnBvbHlnb25EYXRhPSBk
YXRhOworfQorCisKK3ZvaWQgR0xBUElFTlRSWQoraW50ZXJuYWxfZ2x1VGVzc0JlZ2luQ29udG91
ciggR0xVdGVzc2VsYXRvciAqdGVzcyApCit7CisgIFJlcXVpcmVTdGF0ZSggdGVzcywgVF9JTl9Q
T0xZR09OICk7CisKKyAgdGVzcy0+c3RhdGUgPSBUX0lOX0NPTlRPVVI7CisgIHRlc3MtPmxhc3RF
ZGdlID0gTlVMTDsKKyAgaWYoIHRlc3MtPmNhY2hlQ291bnQgPiAwICkgeworICAgIC8qIEp1c3Qg
c2V0IGEgZmxhZyBzbyB3ZSBkb24ndCBnZXQgY29uZnVzZWQgYnkgZW1wdHkgY29udG91cnMKKyAg
ICAgKiAtLSB0aGVzZSBjYW4gYmUgZ2VuZXJhdGVkIGFjY2lkZW50YWxseSB3aXRoIHRoZSBvYnNv
bGV0ZQorICAgICAqIE5leHRDb250b3VyKCkgaW50ZXJmYWNlLgorICAgICAqLworICAgIHRlc3Mt
PmVtcHR5Q2FjaGUgPSBUUlVFOworICB9Cit9CisKKwordm9pZCBHTEFQSUVOVFJZCitpbnRlcm5h
bF9nbHVUZXNzRW5kQ29udG91ciggR0xVdGVzc2VsYXRvciAqdGVzcyApCit7CisgIFJlcXVpcmVT
dGF0ZSggdGVzcywgVF9JTl9DT05UT1VSICk7CisgIHRlc3MtPnN0YXRlID0gVF9JTl9QT0xZR09O
OworfQorCit2b2lkIEdMQVBJRU5UUlkKK2ludGVybmFsX2dsdVRlc3NFbmRQb2x5Z29uKCBHTFV0
ZXNzZWxhdG9yICp0ZXNzICkKK3sKKyAgR0xVbWVzaCAqbWVzaDsKKworICBpZiAoc2V0am1wKHRl
c3MtPmVudikgIT0gMCkgewkKKyAgICAgLyogY29tZSBiYWNrIGhlcmUgaWYgb3V0IG9mIG1lbW9y
eSAqLworICAgICBDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9PVVRfT0ZfTUVNT1JZICk7
CisgICAgIHJldHVybjsKKyAgfQorCisgIFJlcXVpcmVTdGF0ZSggdGVzcywgVF9JTl9QT0xZR09O
ICk7CisgIHRlc3MtPnN0YXRlID0gVF9ET1JNQU5UOworCisgIGlmKCB0ZXNzLT5tZXNoID09IE5V
TEwgKSB7CisgICAgaWYoICEgdGVzcy0+ZmxhZ0JvdW5kYXJ5ICYmIHRlc3MtPmNhbGxNZXNoID09
ICZub01lc2ggKSB7CisKKyAgICAgIC8qIFRyeSBzb21lIHNwZWNpYWwgY29kZSB0byBtYWtlIHRo
ZSBlYXN5IGNhc2VzIGdvIHF1aWNrbHkKKyAgICAgICAqIChlZy4gY29udmV4IHBvbHlnb25zKS4g
IFRoaXMgY29kZSBkb2VzIE5PVCBoYW5kbGUgbXVsdGlwbGUgY29udG91cnMsCisgICAgICAgKiBp
bnRlcnNlY3Rpb25zLCBlZGdlIGZsYWdzLCBhbmQgb2YgY291cnNlIGl0IGRvZXMgbm90IGdlbmVy
YXRlCisgICAgICAgKiBhbiBleHBsaWNpdCBtZXNoIGVpdGhlci4KKyAgICAgICAqLworICAgICAg
aWYoIF9fZ2xfcmVuZGVyQ2FjaGUoIHRlc3MgKSkgeworCXRlc3MtPnBvbHlnb25EYXRhPSBOVUxM
OyAKKwlyZXR1cm47CisgICAgICB9CisgICAgfQorICAgIGlmICggIUVtcHR5Q2FjaGUoIHRlc3Mg
KSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOyAvKiBjb3VsZCd2ZSB1c2VkIGEgbGFiZWwqLworICB9
CisKKyAgLyogRGV0ZXJtaW5lIHRoZSBwb2x5Z29uIG5vcm1hbCBhbmQgcHJvamVjdCB2ZXJ0aWNl
cyBvbnRvIHRoZSBwbGFuZQorICAgKiBvZiB0aGUgcG9seWdvbi4KKyAgICovCisgIF9fZ2xfcHJv
amVjdFBvbHlnb24oIHRlc3MgKTsKKworICAvKiBfX2dsX2NvbXB1dGVJbnRlcmlvciggdGVzcyAp
IGNvbXB1dGVzIHRoZSBwbGFuYXIgYXJyYW5nZW1lbnQgc3BlY2lmaWVkCisgICAqIGJ5IHRoZSBn
aXZlbiBjb250b3VycywgYW5kIGZ1cnRoZXIgc3ViZGl2aWRlcyB0aGlzIGFycmFuZ2VtZW50Cisg
ICAqIGludG8gcmVnaW9ucy4gIEVhY2ggcmVnaW9uIGlzIG1hcmtlZCAiaW5zaWRlIiBpZiBpdCBi
ZWxvbmdzCisgICAqIHRvIHRoZSBwb2x5Z29uLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUgZ2l2ZW4g
YnkgdGVzcy0+d2luZGluZ1J1bGUuCisgICAqIEVhY2ggaW50ZXJpb3IgcmVnaW9uIGlzIGd1YXJh
bnRlZWQgYmUgbW9ub3RvbmUuCisgICAqLworICBpZiAoICFfX2dsX2NvbXB1dGVJbnRlcmlvcigg
dGVzcyApICkgeworICAgICBsb25nam1wKHRlc3MtPmVudiwxKTsJLyogY291bGQndmUgdXNlZCBh
IGxhYmVsICovCisgIH0KKworICBtZXNoID0gdGVzcy0+bWVzaDsKKyAgaWYoICEgdGVzcy0+ZmF0
YWxFcnJvciApIHsKKyAgICBpbnQgcmMgPSAxOworCisgICAgLyogSWYgdGhlIHVzZXIgd2FudHMg
b25seSB0aGUgYm91bmRhcnkgY29udG91cnMsIHdlIHRocm93IGF3YXkgYWxsIGVkZ2VzCisgICAg
ICogZXhjZXB0IHRob3NlIHdoaWNoIHNlcGFyYXRlIHRoZSBpbnRlcmlvciBmcm9tIHRoZSBleHRl
cmlvci4KKyAgICAgKiBPdGhlcndpc2Ugd2UgdGVzc2VsbGF0ZSBhbGwgdGhlIHJlZ2lvbnMgbWFy
a2VkICJpbnNpZGUiLgorICAgICAqLworICAgIGlmKCB0ZXNzLT5ib3VuZGFyeU9ubHkgKSB7Cisg
ICAgICByYyA9IF9fZ2xfbWVzaFNldFdpbmRpbmdOdW1iZXIoIG1lc2gsIDEsIFRSVUUgKTsKKyAg
ICB9IGVsc2UgeworICAgICAgcmMgPSBfX2dsX21lc2hUZXNzZWxsYXRlSW50ZXJpb3IoIG1lc2gg
KTsgCisgICAgfQorICAgIGlmIChyYyA9PSAwKSBsb25nam1wKHRlc3MtPmVudiwxKTsJLyogY291
bGQndmUgdXNlZCBhIGxhYmVsICovCisKKyAgICBfX2dsX21lc2hDaGVja01lc2goIG1lc2ggKTsK
KworICAgIGlmKCB0ZXNzLT5jYWxsQmVnaW4gIT0gJm5vQmVnaW4gfHwgdGVzcy0+Y2FsbEVuZCAh
PSAmbm9FbmQKKyAgICAgICB8fCB0ZXNzLT5jYWxsVmVydGV4ICE9ICZub1ZlcnRleCB8fCB0ZXNz
LT5jYWxsRWRnZUZsYWcgIT0gJm5vRWRnZUZsYWcgCisgICAgICAgfHwgdGVzcy0+Y2FsbEJlZ2lu
RGF0YSAhPSAmX19nbF9ub0JlZ2luRGF0YSAKKyAgICAgICB8fCB0ZXNzLT5jYWxsRW5kRGF0YSAh
PSAmX19nbF9ub0VuZERhdGEKKyAgICAgICB8fCB0ZXNzLT5jYWxsVmVydGV4RGF0YSAhPSAmX19n
bF9ub1ZlcnRleERhdGEKKyAgICAgICB8fCB0ZXNzLT5jYWxsRWRnZUZsYWdEYXRhICE9ICZfX2ds
X25vRWRnZUZsYWdEYXRhICkKKyAgICB7CisgICAgICBpZiggdGVzcy0+Ym91bmRhcnlPbmx5ICkg
eworCV9fZ2xfcmVuZGVyQm91bmRhcnkoIHRlc3MsIG1lc2ggKTsgIC8qIG91dHB1dCBib3VuZGFy
eSBjb250b3VycyAqLworICAgICAgfSBlbHNlIHsKKwlfX2dsX3JlbmRlck1lc2goIHRlc3MsIG1l
c2ggKTsJICAgLyogb3V0cHV0IHN0cmlwcyBhbmQgZmFucyAqLworICAgICAgfQorICAgIH0KKyAg
ICBpZiggdGVzcy0+Y2FsbE1lc2ggIT0gJm5vTWVzaCApIHsKKworICAgICAgLyogVGhyb3cgYXdh
eSB0aGUgZXh0ZXJpb3IgZmFjZXMsIHNvIHRoYXQgYWxsIGZhY2VzIGFyZSBpbnRlcmlvci4KKyAg
ICAgICAqIFRoaXMgd2F5IHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSB0byBjaGVjayB0aGUgImluc2lk
ZSIgZmxhZywKKyAgICAgICAqIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGV2ZW4gcmV2ZWFsIGl0cyBl
eGlzdGVuY2UuICBJdCBhbHNvIGxlYXZlcworICAgICAgICogdGhlIGZyZWVkb20gZm9yIGFuIGlt
cGxlbWVudGF0aW9uIHRvIG5vdCBnZW5lcmF0ZSB0aGUgZXh0ZXJpb3IKKyAgICAgICAqIGZhY2Vz
IGluIHRoZSBmaXJzdCBwbGFjZS4KKyAgICAgICAqLworICAgICAgX19nbF9tZXNoRGlzY2FyZEV4
dGVyaW9yKCBtZXNoICk7CisgICAgICAoKnRlc3MtPmNhbGxNZXNoKSggbWVzaCApOwkJLyogdXNl
ciB3YW50cyB0aGUgbWVzaCBpdHNlbGYgKi8KKyAgICAgIHRlc3MtPm1lc2ggPSBOVUxMOworICAg
ICAgdGVzcy0+cG9seWdvbkRhdGE9IE5VTEw7CisgICAgICByZXR1cm47CisgICAgfQorICB9Cisg
IF9fZ2xfbWVzaERlbGV0ZU1lc2goIG1lc2ggKTsKKyAgdGVzcy0+cG9seWdvbkRhdGE9IE5VTEw7
CisgIHRlc3MtPm1lc2ggPSBOVUxMOworfQorCisKKy8qWFhYYmx5dGhlIHVudXNlZCBmdW5jdGlv
biovCisjaWYgMAordm9pZCBHTEFQSUVOVFJZCitnbHVEZWxldGVNZXNoKCBHTFVtZXNoICptZXNo
ICkKK3sKKyAgX19nbF9tZXNoRGVsZXRlTWVzaCggbWVzaCApOworfQorI2VuZGlmCisKKworCisv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
KworLyogT2Jzb2xldGUgY2FsbHMgLS0gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwor
I2lmIDAKK3ZvaWQgR0xBUElFTlRSWQorZ2x1QmVnaW5Qb2x5Z29uKCBHTFV0ZXNzZWxhdG9yICp0
ZXNzICkKK3sKKyAgZ2x1VGVzc0JlZ2luUG9seWdvbiggdGVzcywgTlVMTCApOworICBnbHVUZXNz
QmVnaW5Db250b3VyKCB0ZXNzICk7Cit9CisKKworLypBUkdTVVNFRCovCit2b2lkIEdMQVBJRU5U
UlkKK2dsdU5leHRDb250b3VyKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGVudW0gdHlwZSApCit7
CisgIGdsdVRlc3NFbmRDb250b3VyKCB0ZXNzICk7CisgIGdsdVRlc3NCZWdpbkNvbnRvdXIoIHRl
c3MgKTsKK30KKworCit2b2lkIEdMQVBJRU5UUlkKK2dsdUVuZFBvbHlnb24oIEdMVXRlc3NlbGF0
b3IgKnRlc3MgKQoreworICBnbHVUZXNzRW5kQ29udG91ciggdGVzcyApOworICBnbHVUZXNzRW5k
UG9seWdvbiggdGVzcyApOworfQorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1
L2xpYnRlc3MvdGVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGli
dGVzcy90ZXNzLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRl
c3MvdGVzcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyoqIExpY2Vuc2Ug
QXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxl
IGFyZQorKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0
dGVkIGluIHRoZSBTR0kgRnJlZQorKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAo
dGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCisqKiBmaWxlIGFyZSBzdWJqZWN0
IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQor
KiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBt
YXkgb2J0YWluIGEgY29weQorKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywg
SW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKKyoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5
LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKKyoqIAorKiogaHR0cDovL29z
cy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCisqKiAKKyoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQg
aW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiogIkFT
IElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBD
T05ESVRJT05TCisqKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwg
QU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKKyoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklM
SVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQorKiogUEFSVElDVUxBUiBQ
VVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKyoqIAorKiogT3JpZ2luYWwgQ29kZS4gVGhl
IE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCisqKiBWZXJz
aW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNv
biBHcmFwaGljcywKKyoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAx
OTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorKiogQ29weXJpZ2h0IGluIGFueSBwb3J0
aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCisqKiBlbHNld2hl
cmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKiogCisqKiBBZGRpdGlvbmFsIE5vdGlj
ZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcworKiog
ZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUg
YXJlIFRoZQorKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChW
ZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKKyoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikg
R3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgorKiogMS4zKSwgcmVsZWFz
ZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCisq
KiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5
OTguIFRoaXMgc29mdHdhcmUKKyoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVy
c2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KKyoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1
dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZworKiogY29tcGxp
YW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCisqKgor
Ki8KKy8qCisqKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KKyoqCisqKiAkRGF0ZSQg
JFJldmlzaW9uJAorKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mv
dGVzcy5oIzYgJAorKi8KKworI2lmbmRlZiBfX3Rlc3NfaF8KKyNkZWZpbmUgX190ZXNzX2hfCisK
KyNpbmNsdWRlIDxzZXRqbXAuaD4KKworI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2ludGVybmFs
X2dsdS5oIgorI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZGljdC5oIgorI2luY2x1
ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1ZGUgInRoaXJkcGFydHkv
Z2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgiCisKKy8qIFRoZSBiZWdpbi9lbmQgY2FsbHMgbXVzdCBi
ZSBwcm9wZXJseSBuZXN0ZWQuICBXZSBrZWVwIHRyYWNrIG9mCisgKiB0aGUgY3VycmVudCBzdGF0
ZSB0byBlbmZvcmNlIHRoZSBvcmRlcmluZy4KKyAqLworZW51bSBUZXNzU3RhdGUgeyBUX0RPUk1B
TlQsIFRfSU5fUE9MWUdPTiwgVF9JTl9DT05UT1VSIH07CisKKy8qIFdlIGNhY2hlIHZlcnRleCBk
YXRhIGZvciBzaW5nbGUtY29udG91ciBwb2x5Z29ucyBzbyB0aGF0IHdlIGNhbgorICogdHJ5IGEg
cXVpY2stYW5kLWRpcnR5IGRlY29tcG9zaXRpb24gZmlyc3QuCisgKi8KKyNkZWZpbmUgVEVTU19N
QVhfQ0FDSEUJMTAwCisKK3R5cGVkZWYgc3RydWN0IENhY2hlZFZlcnRleCB7CisgIEdMZG91Ymxl
CWNvb3Jkc1szXTsKKyAgdm9pZAkJKmRhdGE7Cit9IENhY2hlZFZlcnRleDsKKworc3RydWN0IEdM
VXRlc3NlbGF0b3IgeworCisgIC8qKiogc3RhdGUgbmVlZGVkIGZvciBjb2xsZWN0aW5nIHRoZSBp
bnB1dCBkYXRhICoqKi8KKworICBlbnVtIFRlc3NTdGF0ZSBzdGF0ZTsJCS8qIHdoYXQgYmVnaW4v
ZW5kIGNhbGxzIGhhdmUgd2Ugc2Vlbj8gKi8KKworICBHTFVoYWxmRWRnZQkqbGFzdEVkZ2U7CS8q
IGxhc3RFZGdlLT5PcmcgaXMgdGhlIG1vc3QgcmVjZW50IHZlcnRleCAqLworICBHTFVtZXNoCSpt
ZXNoOwkJLyogc3RvcmVzIHRoZSBpbnB1dCBjb250b3VycywgYW5kIGV2ZW50dWFsbHkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRlc3NlbGxhdGlvbiBpdHNlbGYgKi8K
KworICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbEVycm9yKSggR0xlbnVtIGVycm51bSApOworCisg
IC8qKiogc3RhdGUgbmVlZGVkIGZvciBwcm9qZWN0aW5nIG9udG8gdGhlIHN3ZWVwIHBsYW5lICoq
Ki8KKworICBHTGRvdWJsZQlub3JtYWxbM107CS8qIHVzZXItc3BlY2lmaWVkIG5vcm1hbCAoaWYg
cHJvdmlkZWQpICovCisgIEdMZG91YmxlCXNVbml0WzNdOwkvKiB1bml0IHZlY3RvciBpbiBzLWRp
cmVjdGlvbiAoZGVidWdnaW5nKSAqLworICBHTGRvdWJsZQl0VW5pdFszXTsJLyogdW5pdCB2ZWN0
b3IgaW4gdC1kaXJlY3Rpb24gKGRlYnVnZ2luZykgKi8KKworICAvKioqIHN0YXRlIG5lZWRlZCBm
b3IgdGhlIGxpbmUgc3dlZXAgKioqLworCisgIEdMZG91YmxlCXJlbFRvbGVyYW5jZTsJLyogdG9s
ZXJhbmNlIGZvciBtZXJnaW5nIGZlYXR1cmVzICovCisgIEdMZW51bQl3aW5kaW5nUnVsZTsJLyog
cnVsZSBmb3IgZGV0ZXJtaW5pbmcgcG9seWdvbiBpbnRlcmlvciAqLworICBHTGJvb2xlYW4JZmF0
YWxFcnJvcjsJLyogZmF0YWwgZXJyb3I6IG5lZWRlZCBjb21iaW5lIGNhbGxiYWNrICovCisKKyAg
RGljdAkJKmRpY3Q7CQkvKiBlZGdlIGRpY3Rpb25hcnkgZm9yIHN3ZWVwIGxpbmUgKi8KKyAgUHJp
b3JpdHlRCSpwcTsJCS8qIHByaW9yaXR5IHF1ZXVlIG9mIHZlcnRleCBldmVudHMgKi8KKyAgR0xV
dmVydGV4CSpldmVudDsJCS8qIGN1cnJlbnQgc3dlZXAgZXZlbnQgYmVpbmcgcHJvY2Vzc2VkICov
CisKKyAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxDb21iaW5lKSggR0xkb3VibGUgY29vcmRzWzNd
LCB2b2lkICpkYXRhWzRdLAorCQkJICAgICAgICBHTGZsb2F0IHdlaWdodFs0XSwgdm9pZCAqKm91
dERhdGEgKTsKKworICAvKioqIHN0YXRlIG5lZWRlZCBmb3IgcmVuZGVyaW5nIGNhbGxiYWNrcyAo
c2VlIHJlbmRlci5jKSAqKiovCisKKyAgR0xib29sZWFuCWZsYWdCb3VuZGFyeTsJLyogbWFyayBi
b3VuZGFyeSBlZGdlcyAodXNlIEVkZ2VGbGFnKSAqLworICBHTGJvb2xlYW4JYm91bmRhcnlPbmx5
OwkvKiBFeHRyYWN0IGNvbnRvdXJzLCBub3QgdHJpYW5nbGVzICovCisgIEdMVWZhY2UJKmxvbmVs
eVRyaUxpc3Q7CisgICAgLyogbGlzdCBvZiB0cmlhbmdsZXMgd2hpY2ggY291bGQgbm90IGJlIHJl
bmRlcmVkIGFzIHN0cmlwcyBvciBmYW5zICovCisKKyAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxC
ZWdpbikoIEdMZW51bSB0eXBlICk7CisgIHZvaWQJCShHTEFQSUVOVFJZICpjYWxsRWRnZUZsYWcp
KCBHTGJvb2xlYW4gYm91bmRhcnlFZGdlICk7CisgIHZvaWQJCShHTEFQSUVOVFJZICpjYWxsVmVy
dGV4KSggdm9pZCAqZGF0YSApOworICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbEVuZCkoIHZvaWQg
KTsKKyAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxNZXNoKSggR0xVbWVzaCAqbWVzaCApOworCisK
KyAgLyoqKiBzdGF0ZSBuZWVkZWQgdG8gY2FjaGUgc2luZ2xlLWNvbnRvdXIgcG9seWdvbnMgZm9y
IHJlbmRlckNhY2hlKCkgKi8KKworICBHTGJvb2xlYW4JZW1wdHlDYWNoZTsJCS8qIGVtcHR5IGNh
Y2hlIG9uIG5leHQgdmVydGV4KCkgY2FsbCAqLworICBpbnQJCWNhY2hlQ291bnQ7CQkvKiBudW1i
ZXIgb2YgY2FjaGVkIHZlcnRpY2VzICovCisgIENhY2hlZFZlcnRleAljYWNoZVtURVNTX01BWF9D
QUNIRV07CS8qIHRoZSB2ZXJ0ZXggZGF0YSAqLworCisgIC8qKiogcmVuZGVyaW5nIGNhbGxiYWNr
cyB0aGF0IGFsc28gcGFzcyBwb2x5Z29uIGRhdGEgICoqKi8gCisgIHZvaWQJCShHTEFQSUVOVFJZ
ICpjYWxsQmVnaW5EYXRhKSggR0xlbnVtIHR5cGUsIHZvaWQgKnBvbHlnb25EYXRhICk7CisgIHZv
aWQJCShHTEFQSUVOVFJZICpjYWxsRWRnZUZsYWdEYXRhKSggR0xib29sZWFuIGJvdW5kYXJ5RWRn
ZSwgCisJCQkJICAgICB2b2lkICpwb2x5Z29uRGF0YSApOworICB2b2lkCQkoR0xBUElFTlRSWSAq
Y2FsbFZlcnRleERhdGEpKCB2b2lkICpkYXRhLCB2b2lkICpwb2x5Z29uRGF0YSApOworICB2b2lk
CQkoR0xBUElFTlRSWSAqY2FsbEVuZERhdGEpKCB2b2lkICpwb2x5Z29uRGF0YSApOworICB2b2lk
CQkoR0xBUElFTlRSWSAqY2FsbEVycm9yRGF0YSkoIEdMZW51bSBlcnJudW0sIHZvaWQgKnBvbHln
b25EYXRhICk7CisgIHZvaWQJCShHTEFQSUVOVFJZICpjYWxsQ29tYmluZURhdGEpKCBHTGRvdWJs
ZSBjb29yZHNbM10sIHZvaWQgKmRhdGFbNF0sCisJCQkJICAgIEdMZmxvYXQgd2VpZ2h0WzRdLCB2
b2lkICoqb3V0RGF0YSwKKwkJCQkgICAgdm9pZCAqcG9seWdvbkRhdGEgKTsKKworICBqbXBfYnVm
IGVudjsJCQkvKiBwbGFjZSB0byBqdW1wIHRvIHdoZW4gbWVtQWxsb2NzIGZhaWwgKi8KKworICB2
b2lkICpwb2x5Z29uRGF0YTsJCS8qIGNsaWVudCBkYXRhIGZvciBjdXJyZW50IHBvbHlnb24gKi8K
K307CisKK3ZvaWQgR0xBUElFTlRSWSBfX2dsX25vQmVnaW5EYXRhKCBHTGVudW0gdHlwZSwgdm9p
ZCAqcG9seWdvbkRhdGEgKTsKK3ZvaWQgR0xBUElFTlRSWSBfX2dsX25vRWRnZUZsYWdEYXRhKCBH
TGJvb2xlYW4gYm91bmRhcnlFZGdlLCB2b2lkICpwb2x5Z29uRGF0YSApOwordm9pZCBHTEFQSUVO
VFJZIF9fZ2xfbm9WZXJ0ZXhEYXRhKCB2b2lkICpkYXRhLCB2b2lkICpwb2x5Z29uRGF0YSApOwor
dm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9FbmREYXRhKCB2b2lkICpwb2x5Z29uRGF0YSApOwordm9p
ZCBHTEFQSUVOVFJZIF9fZ2xfbm9FcnJvckRhdGEoIEdMZW51bSBlcnJudW0sIHZvaWQgKnBvbHln
b25EYXRhICk7Cit2b2lkIEdMQVBJRU5UUlkgX19nbF9ub0NvbWJpbmVEYXRhKCBHTGRvdWJsZSBj
b29yZHNbM10sIHZvaWQgKmRhdGFbNF0sCisJCQkgR0xmbG9hdCB3ZWlnaHRbNF0sIHZvaWQgKipv
dXREYXRhLAorCQkJIHZvaWQgKnBvbHlnb25EYXRhICk7CisKKyNkZWZpbmUgQ0FMTF9CRUdJTl9P
Ul9CRUdJTl9EQVRBKGEpIFwKKyAgIGlmICh0ZXNzLT5jYWxsQmVnaW5EYXRhICE9ICZfX2dsX25v
QmVnaW5EYXRhKSBcCisgICAgICAoKnRlc3MtPmNhbGxCZWdpbkRhdGEpKChhKSx0ZXNzLT5wb2x5
Z29uRGF0YSk7IFwKKyAgIGVsc2UgKCp0ZXNzLT5jYWxsQmVnaW4pKChhKSk7CisKKyNkZWZpbmUg
Q0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoYSkgXAorICAgaWYgKHRlc3MtPmNhbGxWZXJ0ZXhE
YXRhICE9ICZfX2dsX25vVmVydGV4RGF0YSkgXAorICAgICAgKCp0ZXNzLT5jYWxsVmVydGV4RGF0
YSkoKGEpLHRlc3MtPnBvbHlnb25EYXRhKTsgXAorICAgZWxzZSAoKnRlc3MtPmNhbGxWZXJ0ZXgp
KChhKSk7CisKKyNkZWZpbmUgQ0FMTF9FREdFX0ZMQUdfT1JfRURHRV9GTEFHX0RBVEEoYSkgXAor
ICAgaWYgKHRlc3MtPmNhbGxFZGdlRmxhZ0RhdGEgIT0gJl9fZ2xfbm9FZGdlRmxhZ0RhdGEpIFwK
KyAgICAgICgqdGVzcy0+Y2FsbEVkZ2VGbGFnRGF0YSkoKGEpLHRlc3MtPnBvbHlnb25EYXRhKTsg
XAorICAgZWxzZSAoKnRlc3MtPmNhbGxFZGdlRmxhZykoKGEpKTsKKworI2RlZmluZSBDQUxMX0VO
RF9PUl9FTkRfREFUQSgpIFwKKyAgIGlmICh0ZXNzLT5jYWxsRW5kRGF0YSAhPSAmX19nbF9ub0Vu
ZERhdGEpIFwKKyAgICAgICgqdGVzcy0+Y2FsbEVuZERhdGEpKHRlc3MtPnBvbHlnb25EYXRhKTsg
XAorICAgZWxzZSAoKnRlc3MtPmNhbGxFbmQpKCk7CisKKyNkZWZpbmUgQ0FMTF9DT01CSU5FX09S
X0NPTUJJTkVfREFUQShhLGIsYyxkKSBcCisgICBpZiAodGVzcy0+Y2FsbENvbWJpbmVEYXRhICE9
ICZfX2dsX25vQ29tYmluZURhdGEpIFwKKyAgICAgICgqdGVzcy0+Y2FsbENvbWJpbmVEYXRhKSgo
YSksKGIpLChjKSwoZCksdGVzcy0+cG9seWdvbkRhdGEpOyBcCisgICBlbHNlICgqdGVzcy0+Y2Fs
bENvbWJpbmUpKChhKSwoYiksKGMpLChkKSk7CisKKyNkZWZpbmUgQ0FMTF9FUlJPUl9PUl9FUlJP
Ul9EQVRBKGEpIFwKKyAgIGlmICh0ZXNzLT5jYWxsRXJyb3JEYXRhICE9ICZfX2dsX25vRXJyb3JE
YXRhKSBcCisgICAgICAoKnRlc3MtPmNhbGxFcnJvckRhdGEpKChhKSx0ZXNzLT5wb2x5Z29uRGF0
YSk7IFwKKyAgIGVsc2UgKCp0ZXNzLT5jYWxsRXJyb3IpKChhKSk7CisKKyNlbmRpZgpJbmRleDog
V2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8uYwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMDkgQEAKKy8qCisqKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0
byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKKyoqIG1hZGUgc3ViamVjdCB0
byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKKyoq
IFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29u
dGVudHMgb2YgdGhpcworKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKKyoqIHRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKKyoqIG9m
IHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZp
Y2VzLCAxNjAwCisqKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQw
NDMtMTM1MSwgb3IgYXQ6CisqKiAKKyoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVl
QgorKiogCisqKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29m
dHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVY
UFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUworKiogRElTQ0xBSU1F
RCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMg
QU5ECisqKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJ
VFksIEZJVE5FU1MgRk9SIEEKKyoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5H
RU1FTlQuCisqKiAKKyoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVu
R0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAorKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFu
dWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCisqKiBJbmMuIFRo
ZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhp
Y3MsIEluYy4KKyoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBw
YXJ0aWVzIGlzIGFzIGluZGljYXRlZAorKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyoqIAorKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxp
Y2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKKyoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBj
b25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKKyoqIE9wZW5HTChSKSBH
cmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2Vk
CisqKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5
IExpYnJhcnkgKFZlcnNpb24KKyoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFu
ZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAorKiogV2luZG93IFN5c3RlbShSKSAoVmVy
c2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCisqKiB3
YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxl
bWVudGF0aW9uCisqKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5k
ZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKKyoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikg
dmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgorKioKKyovCisvKgorKiogQXV0aG9yOiBFcmlj
IFZlYWNoLCBKdWx5IDE5OTQuCisqKgorKiogJERhdGUkICRSZXZpc2lvbiQKKyoqICRIZWFkZXI6
IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMjNSAkCisqLworCisj
aW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJ0aGly
ZHBhcnR5L2dsdS9nbHVvcy5oIgorI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2Vv
bS5oIgorI2luY2x1ZGUgInRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIgorI2luY2x1ZGUg
InRoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8uaCIKKworI2RlZmluZSBBZGRXaW5kaW5n
KGVEc3QsZVNyYykJKGVEc3QtPndpbmRpbmcgKz0gZVNyYy0+d2luZGluZywgXAorCQkJCSBlRHN0
LT5TeW0tPndpbmRpbmcgKz0gZVNyYy0+U3ltLT53aW5kaW5nKQorCisvKiBfX2dsX21lc2hUZXNz
ZWxsYXRlTW9ub1JlZ2lvbiggZmFjZSApIHRlc3NlbGxhdGVzIGEgbW9ub3RvbmUgcmVnaW9uCisg
KiAod2hhdCBlbHNlIHdvdWxkIGl0IGRvPz8pICBUaGUgcmVnaW9uIG11c3QgY29uc2lzdCBvZiBh
IHNpbmdsZQorICogbG9vcCBvZiBoYWxmLWVkZ2VzIChzZWUgbWVzaC5oKSBvcmllbnRlZCBDQ1cu
ICAiTW9ub3RvbmUiIGluIHRoaXMKKyAqIGNhc2UgbWVhbnMgdGhhdCBhbnkgdmVydGljYWwgbGlu
ZSBpbnRlcnNlY3RzIHRoZSBpbnRlcmlvciBvZiB0aGUKKyAqIHJlZ2lvbiBpbiBhIHNpbmdsZSBp
bnRlcnZhbC4gIAorICoKKyAqIFRlc3NlbGxhdGlvbiBjb25zaXN0cyBvZiBhZGRpbmcgaW50ZXJp
b3IgZWRnZXMgKGFjdHVhbGx5IHBhaXJzIG9mCisgKiBoYWxmLWVkZ2VzKSwgdG8gc3BsaXQgdGhl
IHJlZ2lvbiBpbnRvIG5vbi1vdmVybGFwcGluZyB0cmlhbmdsZXMuCisgKgorICogVGhlIGJhc2lj
IGlkZWEgaXMgZXhwbGFpbmVkIGluIFByZXBhcmF0YSBhbmQgU2hhbW9zICh3aGljaCBJIGRvbicn
dAorICogaGF2ZSBoYW5keSByaWdodCBub3cpLCBhbHRob3VnaCB0aGVpciBpbXBsZW1lbnRhdGlv
biBpcyBtb3JlCisgKiBjb21wbGljYXRlZCB0aGFuIHRoaXMgb25lLiAgVGhlIGFyZSB0d28gZWRn
ZSBjaGFpbnMsIGFuIHVwcGVyIGNoYWluCisgKiBhbmQgYSBsb3dlciBjaGFpbi4gIFdlIHByb2Nl
c3MgYWxsIHZlcnRpY2VzIGZyb20gYm90aCBjaGFpbnMgaW4gb3JkZXIsCisgKiBmcm9tIHJpZ2h0
IHRvIGxlZnQuCisgKgorICogVGhlIGFsZ29yaXRobSBlbnN1cmVzIHRoYXQgdGhlIGZvbGxvd2lu
ZyBpbnZhcmlhbnQgaG9sZHMgYWZ0ZXIgZWFjaAorICogdmVydGV4IGlzIHByb2Nlc3NlZDogdGhl
IHVudGVzc2VsbGF0ZWQgcmVnaW9uIGNvbnNpc3RzIG9mIHR3bworICogY2hhaW5zLCB3aGVyZSBv
bmUgY2hhaW4gKHNheSB0aGUgdXBwZXIpIGlzIGEgc2luZ2xlIGVkZ2UsIGFuZAorICogdGhlIG90
aGVyIGNoYWluIGlzIGNvbmNhdmUuICBUaGUgbGVmdCB2ZXJ0ZXggb2YgdGhlIHNpbmdsZSBlZGdl
CisgKiBpcyBhbHdheXMgdG8gdGhlIGxlZnQgb2YgYWxsIHZlcnRpY2VzIGluIHRoZSBjb25jYXZl
IGNoYWluLgorICoKKyAqIEVhY2ggc3RlcCBjb25zaXN0cyBvZiBhZGRpbmcgdGhlIHJpZ2h0bW9z
dCB1bnByb2Nlc3NlZCB2ZXJ0ZXggdG8gb25lCisgKiBvZiB0aGUgdHdvIGNoYWlucywgYW5kIGZv
cm1pbmcgYSBmYW4gb2YgdHJpYW5nbGVzIGZyb20gdGhlIHJpZ2h0bW9zdAorICogb2YgdHdvIGNo
YWluIGVuZHBvaW50cy4gIERldGVybWluaW5nIHdoZXRoZXIgd2UgY2FuIGFkZCBlYWNoIHRyaWFu
Z2xlCisgKiB0byB0aGUgZmFuIGlzIGEgc2ltcGxlIG9yaWVudGF0aW9uIHRlc3QuICBCeSBtYWtp
bmcgdGhlIGZhbiBhcyBsYXJnZQorICogYXMgcG9zc2libGUsIHdlIHJlc3RvcmUgdGhlIGludmFy
aWFudCAoY2hlY2sgaXQgeW91cnNlbGYpLgorICovCitpbnQgX19nbF9tZXNoVGVzc2VsbGF0ZU1v
bm9SZWdpb24oIEdMVWZhY2UgKmZhY2UgKQoreworICBHTFVoYWxmRWRnZSAqdXAsICpsbzsKKwor
ICAvKiBBbGwgZWRnZXMgYXJlIG9yaWVudGVkIENDVyBhcm91bmQgdGhlIGJvdW5kYXJ5IG9mIHRo
ZSByZWdpb24uCisgICAqIEZpcnN0LCBmaW5kIHRoZSBoYWxmLWVkZ2Ugd2hvc2Ugb3JpZ2luIHZl
cnRleCBpcyByaWdodG1vc3QuCisgICAqIFNpbmNlIHRoZSBzd2VlcCBnb2VzIGZyb20gbGVmdCB0
byByaWdodCwgZmFjZS0+YW5FZGdlIHNob3VsZAorICAgKiBiZSBjbG9zZSB0byB0aGUgZWRnZSB3
ZSB3YW50LgorICAgKi8KKyAgdXAgPSBmYWNlLT5hbkVkZ2U7CisgIGFzc2VydCggdXAtPkxuZXh0
ICE9IHVwICYmIHVwLT5MbmV4dC0+TG5leHQgIT0gdXAgKTsKKworICBmb3IoIDsgVmVydExlcSgg
dXAtPkRzdCwgdXAtPk9yZyApOyB1cCA9IHVwLT5McHJldiApCisgICAgOworICBmb3IoIDsgVmVy
dExlcSggdXAtPk9yZywgdXAtPkRzdCApOyB1cCA9IHVwLT5MbmV4dCApCisgICAgOworICBsbyA9
IHVwLT5McHJldjsKKworICB3aGlsZSggdXAtPkxuZXh0ICE9IGxvICkgeworICAgIGlmKCBWZXJ0
TGVxKCB1cC0+RHN0LCBsby0+T3JnICkpIHsKKyAgICAgIC8qIHVwLT5Ec3QgaXMgb24gdGhlIGxl
ZnQuICBJdCBpcyBzYWZlIHRvIGZvcm0gdHJpYW5nbGVzIGZyb20gbG8tPk9yZy4KKyAgICAgICAq
IFRoZSBFZGdlR29lc0xlZnQgdGVzdCBndWFyYW50ZWVzIHByb2dyZXNzIGV2ZW4gd2hlbiBzb21l
IHRyaWFuZ2xlcworICAgICAgICogYXJlIENXLCBnaXZlbiB0aGF0IHRoZSB1cHBlciBhbmQgbG93
ZXIgY2hhaW5zIGFyZSB0cnVseSBtb25vdG9uZS4KKyAgICAgICAqLworICAgICAgd2hpbGUoIGxv
LT5MbmV4dCAhPSB1cCAmJiAoRWRnZUdvZXNMZWZ0KCBsby0+TG5leHQgKQorCSAgICAgfHwgRWRn
ZVNpZ24oIGxvLT5PcmcsIGxvLT5Ec3QsIGxvLT5MbmV4dC0+RHN0ICkgPD0gMCApKSB7CisJR0xV
aGFsZkVkZ2UgKnRlbXBIYWxmRWRnZT0gX19nbF9tZXNoQ29ubmVjdCggbG8tPkxuZXh0LCBsbyAp
OworCWlmICh0ZW1wSGFsZkVkZ2UgPT0gTlVMTCkgcmV0dXJuIDA7CisJbG8gPSB0ZW1wSGFsZkVk
Z2UtPlN5bTsKKyAgICAgIH0KKyAgICAgIGxvID0gbG8tPkxwcmV2OworICAgIH0gZWxzZSB7Cisg
ICAgICAvKiBsby0+T3JnIGlzIG9uIHRoZSBsZWZ0LiAgV2UgY2FuIG1ha2UgQ0NXIHRyaWFuZ2xl
cyBmcm9tIHVwLT5Ec3QuICovCisgICAgICB3aGlsZSggbG8tPkxuZXh0ICE9IHVwICYmIChFZGdl
R29lc1JpZ2h0KCB1cC0+THByZXYgKQorCSAgICAgfHwgRWRnZVNpZ24oIHVwLT5Ec3QsIHVwLT5P
cmcsIHVwLT5McHJldi0+T3JnICkgPj0gMCApKSB7CisJR0xVaGFsZkVkZ2UgKnRlbXBIYWxmRWRn
ZT0gX19nbF9tZXNoQ29ubmVjdCggdXAsIHVwLT5McHJldiApOworCWlmICh0ZW1wSGFsZkVkZ2Ug
PT0gTlVMTCkgcmV0dXJuIDA7CisJdXAgPSB0ZW1wSGFsZkVkZ2UtPlN5bTsKKyAgICAgIH0KKyAg
ICAgIHVwID0gdXAtPkxuZXh0OworICAgIH0KKyAgfQorCisgIC8qIE5vdyBsby0+T3JnID09IHVw
LT5Ec3QgPT0gdGhlIGxlZnRtb3N0IHZlcnRleC4gIFRoZSByZW1haW5pbmcgcmVnaW9uCisgICAq
IGNhbiBiZSB0ZXNzZWxsYXRlZCBpbiBhIGZhbiBmcm9tIHRoaXMgbGVmdG1vc3QgdmVydGV4Lgor
ICAgKi8KKyAgYXNzZXJ0KCBsby0+TG5leHQgIT0gdXAgKTsKKyAgd2hpbGUoIGxvLT5MbmV4dC0+
TG5leHQgIT0gdXAgKSB7CisgICAgR0xVaGFsZkVkZ2UgKnRlbXBIYWxmRWRnZT0gX19nbF9tZXNo
Q29ubmVjdCggbG8tPkxuZXh0LCBsbyApOworICAgIGlmICh0ZW1wSGFsZkVkZ2UgPT0gTlVMTCkg
cmV0dXJuIDA7CisgICAgbG8gPSB0ZW1wSGFsZkVkZ2UtPlN5bTsKKyAgfQorCisgIHJldHVybiAx
OworfQorCisKKy8qIF9fZ2xfbWVzaFRlc3NlbGxhdGVJbnRlcmlvciggbWVzaCApIHRlc3NlbGxh
dGVzIGVhY2ggcmVnaW9uIG9mCisgKiB0aGUgbWVzaCB3aGljaCBpcyBtYXJrZWQgImluc2lkZSIg
dGhlIHBvbHlnb24uICBFYWNoIHN1Y2ggcmVnaW9uCisgKiBtdXN0IGJlIG1vbm90b25lLgorICov
CitpbnQgX19nbF9tZXNoVGVzc2VsbGF0ZUludGVyaW9yKCBHTFVtZXNoICptZXNoICkKK3sKKyAg
R0xVZmFjZSAqZiwgKm5leHQ7CisKKyAgLypMSU5URUQqLworICBmb3IoIGYgPSBtZXNoLT5mSGVh
ZC5uZXh0OyBmICE9ICZtZXNoLT5mSGVhZDsgZiA9IG5leHQgKSB7CisgICAgLyogTWFrZSBzdXJl
IHdlIGRvbicndCB0cnkgdG8gdGVzc2VsbGF0ZSB0aGUgbmV3IHRyaWFuZ2xlcy4gKi8KKyAgICBu
ZXh0ID0gZi0+bmV4dDsKKyAgICBpZiggZi0+aW5zaWRlICkgeworICAgICAgaWYgKCAhX19nbF9t
ZXNoVGVzc2VsbGF0ZU1vbm9SZWdpb24oIGYgKSApIHJldHVybiAwOworICAgIH0KKyAgfQorCisg
IHJldHVybiAxOworfQorCisKKy8qIF9fZ2xfbWVzaERpc2NhcmRFeHRlcmlvciggbWVzaCApIHph
cHMgKGllLiBzZXRzIHRvIE5VTEwpIGFsbCBmYWNlcworICogd2hpY2ggYXJlIG5vdCBtYXJrZWQg
Imluc2lkZSIgdGhlIHBvbHlnb24uICBTaW5jZSBmdXJ0aGVyIG1lc2ggb3BlcmF0aW9ucworICog
b24gTlVMTCBmYWNlcyBhcmUgbm90IGFsbG93ZWQsIHRoZSBtYWluIHB1cnBvc2UgaXMgdG8gY2xl
YW4gdXAgdGhlCisgKiBtZXNoIHNvIHRoYXQgZXh0ZXJpb3IgbG9vcHMgYXJlIG5vdCByZXByZXNl
bnRlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgX19nbF9tZXNoRGlzY2FyZEV4
dGVyaW9yKCBHTFVtZXNoICptZXNoICkKK3sKKyAgR0xVZmFjZSAqZiwgKm5leHQ7CisKKyAgLypM
SU5URUQqLworICBmb3IoIGYgPSBtZXNoLT5mSGVhZC5uZXh0OyBmICE9ICZtZXNoLT5mSGVhZDsg
ZiA9IG5leHQgKSB7CisgICAgLyogU2luY2UgZiB3aWxsIGJlIGRlc3Ryb3llZCwgc2F2ZSBpdHMg
bmV4dCBwb2ludGVyLiAqLworICAgIG5leHQgPSBmLT5uZXh0OworICAgIGlmKCAhIGYtPmluc2lk
ZSApIHsKKyAgICAgIF9fZ2xfbWVzaFphcEZhY2UoIGYgKTsKKyAgICB9CisgIH0KK30KKworI2Rl
ZmluZSBNQVJLRURfRk9SX0RFTEVUSU9OCTB4N2ZmZmZmZmYKKworLyogX19nbF9tZXNoU2V0V2lu
ZGluZ051bWJlciggbWVzaCwgdmFsdWUsIGtlZXBPbmx5Qm91bmRhcnkgKSByZXNldHMgdGhlCisg
KiB3aW5kaW5nIG51bWJlcnMgb24gYWxsIGVkZ2VzIHNvIHRoYXQgcmVnaW9ucyBtYXJrZWQgImlu
c2lkZSIgdGhlCisgKiBwb2x5Z29uIGhhdmUgYSB3aW5kaW5nIG51bWJlciBvZiAidmFsdWUiLCBh
bmQgcmVnaW9ucyBvdXRzaWRlCisgKiBoYXZlIGEgd2luZGluZyBudW1iZXIgb2YgMC4KKyAqCisg
KiBJZiBrZWVwT25seUJvdW5kYXJ5IGlzIFRSVUUsIGl0IGFsc28gZGVsZXRlcyBhbGwgZWRnZXMg
d2hpY2ggZG8gbm90CisgKiBzZXBhcmF0ZSBhbiBpbnRlcmlvciByZWdpb24gZnJvbSBhbiBleHRl
cmlvciBvbmUuCisgKi8KK2ludCBfX2dsX21lc2hTZXRXaW5kaW5nTnVtYmVyKCBHTFVtZXNoICpt
ZXNoLCBpbnQgdmFsdWUsCisJCQkgICAgICAgIEdMYm9vbGVhbiBrZWVwT25seUJvdW5kYXJ5ICkK
K3sKKyAgR0xVaGFsZkVkZ2UgKmUsICplTmV4dDsKKworICBmb3IoIGUgPSBtZXNoLT5lSGVhZC5u
ZXh0OyBlICE9ICZtZXNoLT5lSGVhZDsgZSA9IGVOZXh0ICkgeworICAgIGVOZXh0ID0gZS0+bmV4
dDsKKyAgICBpZiggZS0+UmZhY2UtPmluc2lkZSAhPSBlLT5MZmFjZS0+aW5zaWRlICkgeworCisg
ICAgICAvKiBUaGlzIGlzIGEgYm91bmRhcnkgZWRnZSAob25lIHNpZGUgaXMgaW50ZXJpb3IsIG9u
ZSBpcyBleHRlcmlvcikuICovCisgICAgICBlLT53aW5kaW5nID0gKGUtPkxmYWNlLT5pbnNpZGUp
ID8gdmFsdWUgOiAtdmFsdWU7CisgICAgfSBlbHNlIHsKKworICAgICAgLyogQm90aCByZWdpb25z
IGFyZSBpbnRlcmlvciwgb3IgYm90aCBhcmUgZXh0ZXJpb3IuICovCisgICAgICBpZiggISBrZWVw
T25seUJvdW5kYXJ5ICkgeworCWUtPndpbmRpbmcgPSAwOworICAgICAgfSBlbHNlIHsKKwlpZiAo
ICFfX2dsX21lc2hEZWxldGUoIGUgKSApIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfQor
ICByZXR1cm4gMTsKK30KSW5kZXg6IFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNz
bW9uby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy90ZXNz
bW9uby5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rl
c3Ntb25vLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8qCisqKiBMaWNlbnNlIEFw
cGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBh
cmUKKyoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRl
ZCBpbiB0aGUgU0dJIEZyZWUKKyoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRo
ZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcworKiogZmlsZSBhcmUgc3ViamVjdCBv
bmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKKyoq
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkKKyoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIElu
Yy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCisqKiBBbXBoaXRoZWF0cmUgUGFya3dheSwg
TW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6CisqKiAKKyoqIGh0dHA6Ly9vc3Mu
c2dpLmNvbS9wcm9qZWN0cy9GcmVlQgorKiogCisqKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGlu
IHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyoqICJBUyBJ
UyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09O
RElUSU9OUworKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFO
WSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECisqKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElU
WSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKKyoqIFBBUlRJQ1VMQVIgUFVS
UE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisqKiAKKyoqIE9yaWdpbmFsIENvZGUuIFRoZSBP
cmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAorKiogVmVyc2lv
biAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24g
R3JhcGhpY3MsCisqKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5
MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlv
bnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAorKiogZWxzZXdoZXJl
IGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqIAorKiogQWRkaXRpb25hbCBOb3RpY2Ug
UHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKKyoqIGVz
dGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFy
ZSBUaGUKKyoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVy
c2lvbiAxLjIuMSksIHJlbGVhc2VkCisqKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdy
YXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KKyoqIDEuMyksIHJlbGVhc2Vk
IE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAorKiog
V2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4
LiBUaGlzIHNvZnR3YXJlCisqKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNp
b24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCisqKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQg
aGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKKyoqIGNvbXBsaWFu
dCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgorKioKKyov
CisvKgorKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCisqKgorKiogJERhdGUkICRS
ZXZpc2lvbiQKKyoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3Rl
c3Ntb25vLmgjNSAkCisqLworCisjaWZuZGVmIF9fdGVzc21vbm9faF8KKyNkZWZpbmUgX190ZXNz
bW9ub19oXworCisvKiBfX2dsX21lc2hUZXNzZWxsYXRlTW9ub1JlZ2lvbiggZmFjZSApIHRlc3Nl
bGxhdGVzIGEgbW9ub3RvbmUgcmVnaW9uCisgKiAod2hhdCBlbHNlIHdvdWxkIGl0IGRvPz8pICBU
aGUgcmVnaW9uIG11c3QgY29uc2lzdCBvZiBhIHNpbmdsZQorICogbG9vcCBvZiBoYWxmLWVkZ2Vz
IChzZWUgbWVzaC5oKSBvcmllbnRlZCBDQ1cuICAiTW9ub3RvbmUiIGluIHRoaXMKKyAqIGNhc2Ug
bWVhbnMgdGhhdCBhbnkgdmVydGljYWwgbGluZSBpbnRlcnNlY3RzIHRoZSBpbnRlcmlvciBvZiB0
aGUKKyAqIHJlZ2lvbiBpbiBhIHNpbmdsZSBpbnRlcnZhbC4gIAorICoKKyAqIFRlc3NlbGxhdGlv
biBjb25zaXN0cyBvZiBhZGRpbmcgaW50ZXJpb3IgZWRnZXMgKGFjdHVhbGx5IHBhaXJzIG9mCisg
KiBoYWxmLWVkZ2VzKSwgdG8gc3BsaXQgdGhlIHJlZ2lvbiBpbnRvIG5vbi1vdmVybGFwcGluZyB0
cmlhbmdsZXMuCisgKgorICogX19nbF9tZXNoVGVzc2VsbGF0ZUludGVyaW9yKCBtZXNoICkgdGVz
c2VsbGF0ZXMgZWFjaCByZWdpb24gb2YKKyAqIHRoZSBtZXNoIHdoaWNoIGlzIG1hcmtlZCAiaW5z
aWRlIiB0aGUgcG9seWdvbi4gIEVhY2ggc3VjaCByZWdpb24KKyAqIG11c3QgYmUgbW9ub3RvbmUu
CisgKgorICogX19nbF9tZXNoRGlzY2FyZEV4dGVyaW9yKCBtZXNoICkgemFwcyAoaWUuIHNldHMg
dG8gTlVMTCkgYWxsIGZhY2VzCisgKiB3aGljaCBhcmUgbm90IG1hcmtlZCAiaW5zaWRlIiB0aGUg
cG9seWdvbi4gIFNpbmNlIGZ1cnRoZXIgbWVzaCBvcGVyYXRpb25zCisgKiBvbiBOVUxMIGZhY2Vz
IGFyZSBub3QgYWxsb3dlZCwgdGhlIG1haW4gcHVycG9zZSBpcyB0byBjbGVhbiB1cCB0aGUKKyAq
IG1lc2ggc28gdGhhdCBleHRlcmlvciBsb29wcyBhcmUgbm90IHJlcHJlc2VudGVkIGluIHRoZSBk
YXRhIHN0cnVjdHVyZS4KKyAqCisgKiBfX2dsX21lc2hTZXRXaW5kaW5nTnVtYmVyKCBtZXNoLCB2
YWx1ZSwga2VlcE9ubHlCb3VuZGFyeSApIHJlc2V0cyB0aGUKKyAqIHdpbmRpbmcgbnVtYmVycyBv
biBhbGwgZWRnZXMgc28gdGhhdCByZWdpb25zIG1hcmtlZCAiaW5zaWRlIiB0aGUKKyAqIHBvbHln
b24gaGF2ZSBhIHdpbmRpbmcgbnVtYmVyIG9mICJ2YWx1ZSIsIGFuZCByZWdpb25zIG91dHNpZGUK
KyAqIGhhdmUgYSB3aW5kaW5nIG51bWJlciBvZiAwLgorICoKKyAqIElmIGtlZXBPbmx5Qm91bmRh
cnkgaXMgVFJVRSwgaXQgYWxzbyBkZWxldGVzIGFsbCBlZGdlcyB3aGljaCBkbyBub3QKKyAqIHNl
cGFyYXRlIGFuIGludGVyaW9yIHJlZ2lvbiBmcm9tIGFuIGV4dGVyaW9yIG9uZS4KKyAqLworCitp
bnQgX19nbF9tZXNoVGVzc2VsbGF0ZU1vbm9SZWdpb24oIEdMVWZhY2UgKmZhY2UgKTsKK2ludCBf
X2dsX21lc2hUZXNzZWxsYXRlSW50ZXJpb3IoIEdMVW1lc2ggKm1lc2ggKTsKK3ZvaWQgX19nbF9t
ZXNoRGlzY2FyZEV4dGVyaW9yKCBHTFVtZXNoICptZXNoICk7CitpbnQgX19nbF9tZXNoU2V0V2lu
ZGluZ051bWJlciggR0xVbWVzaCAqbWVzaCwgaW50IHZhbHVlLAorCQkJICAgICAgICBHTGJvb2xl
YW4ga2VlcE9ubHlCb3VuZGFyeSApOworCisjZW5kaWYK
</data>
<flag name="review"
          id="54435"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="54436"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>